diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index c94f1929e1..f6d4254532 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -3,1265 +3,1271 @@ "save": "Zapisz", "cancel": "Anuluj", "delete": "Usuń", - "loading": "Ładowanie...", + "loading": "Wczytywanie...", "error": "Wystąpił błąd", "success": "Sukces", - "confirm": "Czy jesteś pewien?", + "confirm": "Czy na pewno?", "refresh": "Odśwież", "close": "Zamknij", "add": "Dodaj", "edit": "Edytuj", "search": "Szukaj", - "back": "Powrót", - "next": "Następny", - "submit": "Prześlij", - "reset": "Zresetuj", + "back": "Wstecz", + "next": "Dalej", + "submit": "Wyślij", + "reset": "Resetuj", "copy": "Kopiuj", "copied": "Skopiowano!", "enabled": "Włączone", - "disabled": "Niepełnosprawny", - "active": "Aktywny", - "inactive": "Nieaktywny", + "disabled": "Wyłączone", + "active": "Aktywne", + "inactive": "Nieaktywne", "noData": "Brak dostępnych danych", - "nothingHere": "Nothing here yet", - "configure": "Skonfiguruj", + "nothingHere": "Jeszcze nic tu nie ma", + "configure": "Konfiguruj", + "manualConfig": "Ręczna konfiguracja", "manage": "Zarządzaj", - "name": "Imię", - "actions": "Działania", - "status": "Stan", - "type": "Wpisz", - "model": "Modelka", - "models": "modele", - "provider": "Dostawca", + "name": "Nazwa", + "actions": "Akcje", + "status": "Status", + "type": "Typ", + "model": "Model", + "models": "models", + "provider": "Provider", + "unknownProvider": "Nieznany provider", "account": "Konto", "time": "Czas", "details": "Szczegóły", "created": "Utworzono", - "lastUsed": "Last Refreshed", - "loadMore": "Załaduj więcej", - "noResults": "Nie znaleziono żadnych wyników", - "reloadPage": "Załaduj ponownie stronę", + "lastUsed": "Ostatnio odświeżono", + "loadMore": "Wczytaj więcej", + "noResults": "Nie znaleziono wyników", + "reloadPage": "Odśwież stronę", "connected": "Połączono", - "disconnected": "Rozłączony", - "notConfigured": "Nie skonfigurowano", - "testConnection": "Połączenie testowe", + "disconnected": "Rozłączono", + "notConfigured": "Nieskonfigurowane", + "testConnection": "Testuj połączenie", "enable": "Włącz", "disable": "Wyłącz", "columns": "Kolumny", - "newest": "Najnowszy", - "oldest": "Najstarszy", - "all": "Wszystko", - "none": "Żadne", + "newest": "Najnowsze", + "oldest": "Najstarsze", + "all": "Wszystkie", + "none": "Brak", "yes": "Tak", "no": "Nie", - "on": "__MISSING__:ON", - "off": "__MISSING__:OFF", + "on": "WŁ.", + "off": "WYŁ.", "warning": "Ostrzeżenie", "note": "Uwaga", - "free": "Bezpłatny", + "free": "Darmowe", "skipToContent": "Przejdź do treści", - "maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.", - "maintenanceServerUnreachable": "Server is unreachable. Reconnecting...", - "accept": "accept", - "accountId": "accountId", - "alias": "alias", - "apiKeyId": "apiKeyId", - "apiKeyName": "apiKeyName", - "apiKeySecret": "apiKeySecret", - "authorization": "authorization", - "content-type": "content-type", - "content-length": "content-length", - "cookie": "cookie", - "file": "file", - "host": "host", - "id": "id", - "import": "import", - "limit": "limit", - "offset": "offset", - "open": "open", - "origin": "origin", - "promptTokens": "promptTokens", - "completionTokens": "completionTokens", - "totalTokens": "totalTokens", - "rawModel": "rawModel", - "scope": "scope", - "skill": "skill", - "sortBy": "sortBy", - "sortOrder": "sortOrder", - "tab": "tab", - "text": "text", - "textarea": "textarea", - "tool": "tool", - "toolId": "toolId", - "web": "web", - "whereUsed": "whereUsed", - "whitelist": "whitelist", - "blacklist": "blacklist", - "resolve": "resolve", - "force": "force", - "base64url": "base64url", - "hex": "hex", - "range": "range", - "component": "component", - "redirect_uri": "redirect_uri", - "idempotency-key": "idempotency-key", - "error_description": "error_description", - "code": "code", - "compatible": "compatible", - "chat-completions": "chat-completions", - "oauth": "oauth", - "auth_token": "auth_token", - "crypto": "crypto", - "hours": "hours", - "selfsigned": "selfsigned", - "proxy_id": "proxy_id", - "proxyId": "proxyId", - "connectionId": "connectionId", - "resolveConnectionId": "resolveConnectionId", - "resolve_connection_id": "resolve_connection_id", - "scope_id": "scope_id", - "scopeId": "scopeId", - "jwtSecret": "jwtSecret", - "keytar": "keytar", + "maintenanceServerIssues": "Serwer napotkał problemy. Niektóre funkcje mogą być niedostępne.", + "maintenanceServerUnreachable": "Serwer jest nieosiągalny. Ponowne łączenie...", + "accept": "Akceptuj", + "accountId": "ID konta", + "alias": "Alias", + "apiKeyId": "ID klucza API", + "apiKeyName": "Nazwa klucza API", + "apiKeySecret": "Sekret klucza API", + "authorization": "Autoryzacja", + "content-type": "Content Type", + "content-length": "Content Length", + "cookie": "Cookie", + "file": "Plik", + "host": "Host", + "id": "ID", + "import": "Import", + "limit": "Limit", + "offset": "Offset", + "open": "Otwórz", + "origin": "Origin", + "promptTokens": "Prompt tokens", + "completionTokens": "Completion tokens", + "totalTokens": "Suma tokens", + "rawModel": "Raw model", + "scope": "Scope", + "skill": "Skill", + "sortBy": "Sortuj według", + "sortOrder": "Kierunek sortowania", + "tab": "Karta", + "text": "Tekst", + "textarea": "Pole tekstowe", + "tool": "Narzędzie", + "toolId": "ID narzędzia", + "web": "Web", + "whereUsed": "Gdzie użyte", + "whitelist": "Biała lista", + "blacklist": "Czarna lista", + "resolve": "Rozwiąż", + "force": "Wymuś", + "base64url": "Base64 URL", + "hex": "Hex", + "range": "Przedział", + "component": "Komponent", + "redirect_uri": "Redirect URI", + "idempotency-key": "Idempotency Key", + "error_description": "Opis błędu", + "code": "Kod", + "compatible": "Zgodne", + "chat-completions": "Chat Completions", + "oauth": "OAuth", + "auth_token": "Auth Token", + "crypto": "Kryptografia", + "hours": "Godziny", + "selfsigned": "Samopodpisany", + "proxy_id": "Proxy ID", + "proxyId": "Proxy ID", + "connectionId": "ID połączenia", + "resolveConnectionId": "Rozwiąż ID połączenia", + "resolve_connection_id": "Rozwiąż ID połączenia", + "scope_id": "Scope ID", + "scopeId": "Scope ID", + "jwtSecret": "JWT Secret", + "keytar": "Keytar", "better-sqlite3": "better-sqlite3", "undici": "undici", - "builder-id": "builder-id", - "musicDesc": "musicDesc", - "musicGeneration": "musicGeneration", - "idc": "idc", - "cloud-status-changed": "cloud-status-changed", - "where_used": "where_used", - "windowMs": "windowMs", + "builder-id": "Builder ID", + "musicDesc": "Opis muzyki", + "musicGeneration": "Generowanie muzyki", + "idc": "IDC", + "cloud-status-changed": "Status chmury zmienił się", + "where_used": "Gdzie użyte", + "windowMs": "Okno (ms)", "social-github": "GitHub", - "social-google": "Google'a", + "social-google": "Google", "TOOL_ALLOWLIST": "Lista dozwolonych narzędzi", - "TOOL_DENYLIST": "Lista odrzuconych narzędzi", - "Failed to save pricing": "Nie udało się zapisać cen", - "Failed to reset pricing": "Nie udało się zresetować cen", - "apikey": "Klucz API", + "TOOL_DENYLIST": "Lista blokowanych narzędzi", + "Failed to save pricing": "Nie udało się zapisać cennika", + "Failed to reset pricing": "Nie udało się zresetować cennika", + "apikey": "API Key", "http": "HTTP", - "goToDashboard": "Go to Dashboard", - "checkSystemStatus": "Check System Status", - "selectModel": "Select Model", - "combos": "Combos", - "noModelsFound": "No models found", - "clear": "Clear", - "done": "Done", - "errorOccurred": "Error Occurred", - "comboDeleted": "Combo Deleted", - "hide": "Hide", - "creating": "Creating", - "comboCreated": "Combo Created", - "swapFormats": "Swap Formats", - "daysAgo": "Days Ago", - "retries": "Retries", - "errorDuringRestore": "Error During Restore", - "eventsAppearHint": "Events Appear Hint", - "noLockouts": "No Lockouts", - "webSearchDesc": "Web Search Desc", - "audioProvidersHeading": "Audio Providers Heading", - "cloudAgentProviders": "Dostawcy agentów w chmurze", - "minutesAgo": "Minutes Ago", + "goToDashboard": "Przejdź do dashboard", + "checkSystemStatus": "Sprawdź status systemu", + "selectModel": "Wybierz model", + "combos": "combos", + "noModelsFound": "Nie znaleziono models", + "clear": "Wyczyść", + "done": "Gotowe", + "errorOccurred": "Wystąpił błąd", + "comboDeleted": "Usunięto combo", + "hide": "Ukryj", + "creating": "Tworzenie...", + "comboCreated": "Utworzono combo", + "swapFormats": "Zamień formaty", + "daysAgo": "Dni temu", + "retries": "Próby ponowienia", + "errorDuringRestore": "Błąd podczas przywracania", + "eventsAppearHint": "Wskazówka dotycząca zdarzeń", + "noLockouts": "Brak blokad", + "webSearchDesc": "Opis Web Search", + "audioProvidersHeading": "Nagłówek audio providers", + "cloudAgentProviders": "Cloud Agent providers", + "minutesAgo": "Minut temu", "a": "A", - "liveAutoRefreshing": "Live Auto Refreshing", + "liveAutoRefreshing": "Automatyczne odświeżanie na żywo", "webSearch": "Web Search", "anthropicPrefixPlaceholder": "Anthropic Prefix Placeholder", - "addModelToCombo": "Add Model To Combo", - "failedToLoad": "Failed To Load", - "categoryMedia": "Category Media", - "enableCloud": "Enable Cloud", - "expirationBannerExpiringSoon": "Expiration Banner Expiring Soon", - "retry": "Retry", + "addModelToCombo": "Dodaj model do combo", + "failedToLoad": "Nie udało się wczytać", + "categoryMedia": "Kategoria Media", + "enableCloud": "Włącz chmurę", + "expirationBannerExpiringSoon": "Baner wygasania: wkrótce wygaśnie", + "retry": "Ponów", "embeddings": "Embeddings", - "errorCount": "Error Count", - "backupReasonManual": "Backup Reason Manual", - "safeSearchModerate": "Safe Search Moderate", - "activeLimiters": "Active Limiters", - "a2aCardTitle": "A2A Card Title", - "cloudWorkerUnreachable": "Cloud Worker Unreachable", - "testFailed": "Test Failed", - "compatibleBaseUrlHint": "Compatible Base Url Hint", - "usageTracking": "Usage Tracking", - "disableCloudTitle": "Disable Cloud Title", - "noConnections": "No Connections", - "providerHealth": "Provider Health", - "confirmDbImport": "Confirm Db Import", - "notAvailableSymbol": "Not Available Symbol", - "backupsAvailable": "Backups Available", + "errorCount": "Liczba błędów", + "backupReasonManual": "Powód kopii zapasowej: ręczny", + "safeSearchModerate": "Safe Search: umiarkowane", + "activeLimiters": "Aktywne ograniczenia", + "a2aCardTitle": "Tytuł karty A2A", + "cloudWorkerUnreachable": "Cloud Worker nieosiągalny", + "testFailed": "Test nie powiódł się", + "compatibleBaseUrlHint": "Wskazówka dotycząca kompatybilnego Base URL", + "usageTracking": "Śledzenie użycia", + "disableCloudTitle": "Tytuł wyłączenia chmury", + "noConnections": "Brak połączeń", + "providerHealth": "Zdrowie providera", + "confirmDbImport": "Potwierdź import DB", + "notAvailableSymbol": "Symbol niedostępności", + "backupsAvailable": "Dostępne kopie zapasowe", "providerAuto": "Provider Auto", - "newProviderNamePlaceholder": "New Provider Name Placeholder", - "a2aQuickStartStep2": "A2A Quick Start Step2", - "ok": "Ok", - "available": "Available", - "noBackupYet": "No Backup Yet", - "more": "More", - "noCompatibleYet": "No Compatible Yet", + "newProviderNamePlaceholder": "Nazwa nowego providera", + "a2aQuickStartStep2": "Krok 2 szybkiego startu A2A", + "ok": "OK", + "available": "Dostępne", + "noBackupYet": "Brak kopii zapasowych", + "more": "Więcej", + "noCompatibleYet": "Brak kompatybilnych", "multiProvider": "Multi Provider", - "repairEnvHint": "Repair Env Hint", - "disablingCloud": "Disabling Cloud", + "repairEnvHint": "Wskazówka naprawy środowiska", + "disablingCloud": "Wyłączanie chmury", "testBench": "Test Bench", - "valid": "Valid", - "cloudBenefitShare": "Cloud Benefit Share", - "mcpCardTitle": "Mcp Card Title", - "disableConfirm": "Disable Confirm", - "filters": "Filters", - "expirationBannerExpiredDesc": "Expiration Banner Expired Desc", - "saveComboDefaults": "Save Combo Defaults", - "cloudConnectedVerified": "Cloud Connected Verified", + "valid": "Ważny", + "cloudBenefitShare": "Podział korzyści chmury", + "mcpCardTitle": "Tytuł karty MCP", + "disableConfirm": "Potwierdzenie wyłączenia", + "filters": "Filtry", + "expirationBannerExpiredDesc": "Opis wygaśnięcia baneru", + "saveComboDefaults": "Zapisz domyślne combo", + "cloudConnectedVerified": "Połączenie Cloud zweryfikowane", "uptime": "Uptime", - "compatibleProdPlaceholder": "Compatible Prod Placeholder", - "fallbackChainsTitle": "Fallback Chains Title", - "oauthLabel": "Oauth Label", - "a2aCardDescription": "A2A Card Description", - "okShort": "Ok Short", - "maintenance": "Maintenance", - "formatConverter": "Format Converter", - "zedImportNetworkError": "Zed Import Network Error", - "apiKeyLabel": "Api Key Label", - "noModelsForProvider": "No Models For Provider", - "mcpCardDescription": "Mcp Card Description", - "apiTypeLabel": "Api Type Label", - "configuredProvidersLabel": "Configured Providers Label", - "maxRetriesLabel": "Max Retries Label", - "title": "Title", - "output": "Output", - "prefixHint": "Prefix Hint", - "skipWizard": "Skip Wizard", - "failedCount": "Failed Count", - "confirmDbImportDesc": "Confirm Db Import Desc", - "entries": "Entries", - "until": "Until", - "disableCombo": "Disable Combo", - "liveMonitorDescriptionPrefix": "Live Monitor Description Prefix", - "runningCount": "Running Count", - "noActiveConnectionsInGroup": "No Active Connections In Group", - "savedSuccessfully": "Saved Successfully", - "systemStorage": "System Storage", - "videoDesc": "Video Desc", - "maxResults": "Max Results", - "timeRangeMonth": "Time Range Month", - "testSummary": "Test Summary", - "failedSetPassword": "Failed Set Password", + "compatibleProdPlaceholder": "Zgodny produkt placeholder", + "fallbackChainsTitle": "Łańcuchy fallback", + "oauthLabel": "Etykieta OAuth", + "a2aCardDescription": "Opis karty A2A", + "okShort": "OK", + "maintenance": "Prace konserwacyjne", + "formatConverter": "Konwerter formatów", + "zedImportNetworkError": "Błąd sieci podczas importu Zed", + "apiKeyLabel": "Etykieta API Key", + "noModelsForProvider": "Brak models dla providera", + "mcpCardDescription": "Opis karty MCP", + "apiTypeLabel": "Typ API", + "configuredProvidersLabel": "Skonfigurowani providers", + "maxRetriesLabel": "Maksymalna liczba prób", + "title": "Tytuł", + "output": "Wyjście", + "prefixHint": "Wskazówka dotycząca prefiksu", + "skipWizard": "Pomiń kreator", + "failedCount": "Liczba niepowodzeń", + "confirmDbImportDesc": "Potwierdzenie importu bazy danych", + "entries": "Wpisy", + "until": "Do", + "disableCombo": "Wyłącz combo", + "liveMonitorDescriptionPrefix": "Prefiks opisu monitora na żywo", + "runningCount": "Liczba uruchomionych", + "noActiveConnectionsInGroup": "Brak aktywnych połączeń w grupie", + "savedSuccessfully": "Zapisano pomyślnie", + "systemStorage": "Pamięć systemowa", + "videoDesc": "Opis wideo", + "maxResults": "Maksymalna liczba wyników", + "timeRangeMonth": "Zakres czasu: miesiąc", + "testSummary": "Podsumowanie testu", + "failedSetPassword": "Nie udało się ustawić hasła", "audio": "Audio", - "restore": "Restore", - "disableWarning": "Disable Warning", - "moderationsDesc": "Moderations Desc", - "providerHealthStatusAria": "Provider Health Status Aria", - "modelNamePlaceholder": "Model Name Placeholder", - "mcpQuickStartStep2": "Mcp Quick Start Step2", - "quickStart": "Quick Start", - "fullExportFailedWithError": "Full Export Failed With Error", - "loadingBackups": "Loading Backups", - "anthropicBaseUrlPlaceholder": "Anthropic Base Url Placeholder", - "description": "Description", - "noProviderFound": "No Provider Found", + "restore": "Przywróć", + "disableWarning": "Ostrzeżenie o wyłączeniu", + "moderationsDesc": "Opis moderacji", + "providerHealthStatusAria": "Status zdrowia providera (Aria)", + "modelNamePlaceholder": "Nazwa model", + "mcpQuickStartStep2": "Krok 2 szybkiego startu MCP", + "quickStart": "Szybki start", + "fullExportFailedWithError": "Pełny eksport nie powiódł się z błędem", + "loadingBackups": "Wczytywanie kopii zapasowych...", + "anthropicBaseUrlPlaceholder": "Anthropic Base URL Placeholder", + "description": "Opis", + "noProviderFound": "Nie znaleziono providera", "auto": "Auto", - "protocolsDescription": "Protocols Description", - "cloudSessionNote": "Cloud Session Note", - "advancedSettings": "Advanced Settings", - "defaultStrategy": "Default Strategy", - "purgeExpiredLogs": "Purge Expired Logs", - "justNow": "Just Now", - "providerTestFailed": "Provider Test Failed", - "openaiBaseUrlPlaceholder": "Openai Base Url Placeholder", - "image": "Image", - "failedCreateChain": "Failed Create Chain", - "importDatabase": "Import Database", - "allDataLocal": "All Data Local", - "sectionTitle": "Section Title", - "failedToggle": "Failed Toggle", - "editCombo": "Edit Combo", - "testResults": "Test Results", - "searchQuery": "Search Query", - "addCcCompatible": "Add Cc Compatible", - "duplicate": "Duplicate", - "createCombo": "Create Combo", - "searchTypeWeb": "Search Type Web", - "addChain": "Add Chain", - "prefixLabel": "Prefix Label", - "listModelsDesc": "List Models Desc", - "databaseSize": "Database Size", - "chainCreated": "Chain Created", - "providerTestTimeout": "Provider Test Timeout", - "routingStrategy": "Routing Strategy", - "translateAction": "Translate Action", - "exportFailed": "Export Failed", - "connectedVerificationPending": "Connected Verification Pending", - "a2aQuickStartTitle": "A2A Quick Start Title", - "couldNotTest": "Could Not Test", - "testAllCompatible": "Test All Compatible", - "anthropicCompatibleName": "Anthropic Compatible Name", - "disabling": "Disabling", - "failedEnable": "Failed Enable", - "categoryUtility": "Category Utility", - "customUrlOptional": "Custom Url Optional", - "localProviders": "Local Providers", - "comboNamePlaceholder": "Combo Name Placeholder", - "memoryRss": "Memory Rss", - "disableProvider": "Disable Provider", - "welcomeDesc": "Welcome Desc", - "nameLabel": "Name Label", - "allOperational": "All Operational", - "backupNow": "Backup Now", - "providerMaxRetriesAria": "Provider Max Retries Aria", - "textToSpeechDesc": "Text To Speech Desc", - "machineId": "Machine Id", - "globalProxy": "Global Proxy", - "hitsMisses": "Hits Misses", - "testDesc": "Test Desc", - "chatDesc": "Chat Desc", - "importSuccess": "Import Success", - "chat": "Chat", - "a2aQuickStartStep1": "A2A Quick Start Step1", - "importFailed": "Import Failed", - "inputPlaceholder": "Input Placeholder", - "providerModelsTitle": "Provider Models Title", - "lastBackup": "Last Backup", - "yourEndpoint": "Your Endpoint", - "autoDisableThresholdDesc": "Auto Disable Threshold Desc", - "rerankDesc": "Rerank Desc", - "modelsPathPlaceholder": "Models Path Placeholder", - "noCombosYet": "No Combos Yet", - "connectedVerificationPendingWithError": "Connected Verification Pending With Error", - "comboDefaultsGuideHint1": "Combo Defaults Guide Hint1", - "enableCloudTitle": "Enable Cloud Title", - "configuredProvidersHint": "Configured Providers Hint", - "paused": "Paused", - "llmProviders": "Llm Providers", - "enableCombo": "Enable Combo", - "removeProviderOverrideAria": "Remove Provider Override Aria", - "nodeVersion": "Node Version", - "openai": "Openai", - "exportFailedWithError": "Export Failed With Error", - "proxyConfigured": "Proxy Configured", - "concurrencyPerModel": "Concurrency Per Model", - "protocolTasksLabel": "Protocol Tasks Label", - "oauthProviders": "Oauth Providers", - "lockedCount": "Locked Count", - "deleteChainConfirm": "Delete Chain Confirm", - "recentTranslations": "Recent Translations", - "zedImportButton": "Zed Import Button", - "responsesDesc": "Responses Desc", - "testedCount": "Tested Count", - "providersCommaSeparatedPlaceholder": "Providers Comma Separated Placeholder", - "signatureDefaults": "Signature Defaults", - "errorCreating": "Error Creating", - "timeRangeYear": "Time Range Year", - "compatibleLabel": "Compatible Label", - "cloudDisabledSuccess": "Cloud Disabled Success", - "deleteConfirm": "Delete Confirm", - "check": "Check", - "safeSearch": "Safe Search", - "protocolLastActivity": "Protocol Last Activity", - "openMcpDashboard": "Open Mcp Dashboard", - "testBenchTab": "Test Bench Tab", - "chatPathLabel": "Chat Path Label", - "retryDelay": "Retry Delay", - "errorUpdating": "Error Updating", - "ideCliIntegrations": "Ide Cli Integrations", - "imageGeneration": "Image Generation", - "apiKeyRequired": "Api Key Required", - "resetAllTitle": "Reset All Title", - "connectionError": "Connection Error", - "modelName": "Model Name", - "apiKeyForCheck": "Api Key For Check", - "cloudRequestTimeout": "Cloud Request Timeout", - "showConfiguredOnly": "Show Configured Only", - "showFreeOnly": "Tylko bezpłatne", - "addFirstProvider": "Dodaj swojego pierwszego dostawcę", - "addFirstProviderDesc": "Połącz się z dostawcą AI, aby rozpocząć kierowanie żądań przez OmniRoute. Możesz korzystać z bezpłatnych dostawców, kluczy API lub kont OAuth.", + "protocolsDescription": "Opis protokołów", + "cloudSessionNote": "Notatka o sesji Cloud", + "advancedSettings": "Ustawienia zaawansowane", + "defaultStrategy": "Domyślna strategia", + "purgeExpiredLogs": "Usuń wygasłe logi", + "justNow": "Przed chwilą", + "providerTestFailed": "Test providera nie powiódł się", + "openaiBaseUrlPlaceholder": "OpenAI Base URL Placeholder", + "image": "Obraz", + "failedCreateChain": "Nie udało się utworzyć łańcucha", + "importDatabase": "Importuj bazę danych", + "allDataLocal": "Wszystkie dane lokalnie", + "sectionTitle": "Tytuł sekcji", + "failedToggle": "Nie udało się przełączyć", + "editCombo": "Edytuj combo", + "testResults": "Wyniki testów", + "searchQuery": "Zapytanie wyszukiwania", + "addCcCompatible": "Dodaj CC Compatible", + "duplicate": "Duplikuj", + "createCombo": "Utwórz combo", + "searchTypeWeb": "Typ wyszukiwania: Web", + "addChain": "Dodaj łańcuch", + "prefixLabel": "Etykieta prefiksu", + "listModelsDesc": "Opis listy models", + "databaseSize": "Rozmiar bazy danych", + "chainCreated": "Utworzono łańcuch", + "providerTestTimeout": "Przekroczono limit czasu testu providera", + "routingStrategy": "Strategia routingu", + "translateAction": "Tłumacz", + "exportFailed": "Eksport nie powiódł się", + "connectedVerificationPending": "Oczekiwanie na weryfikację połączenia", + "a2aQuickStartTitle": "Szybki start A2A", + "couldNotTest": "Nie można przetestować", + "testAllCompatible": "Testuj wszystkie kompatybilne", + "anthropicCompatibleName": "Nazwa kompatybilna z Anthropic", + "disabling": "Wyłączanie...", + "failedEnable": "Nie udało się włączyć", + "categoryUtility": "Kategoria Narzędzia", + "customUrlOptional": "Własny URL (opcjonalnie)", + "localProviders": "Lokalni providers", + "comboNamePlaceholder": "Nazwa combo", + "memoryRss": "Pamięć RSS", + "disableProvider": "Wyłącz provider", + "welcomeDesc": "Opis powitalny", + "nameLabel": "Etykieta nazwy", + "allOperational": "Wszystkie operacyjne", + "backupNow": "Utwórz kopię zapasową", + "providerMaxRetriesAria": "Maksymalna liczba prób providera (Aria)", + "textToSpeechDesc": "Opis Text to Speech", + "machineId": "ID maszyny", + "globalProxy": "Globalne proxy", + "hitsMisses": "Trafienia i pudła", + "testDesc": "Opis testu", + "chatDesc": "Opis czatu", + "importSuccess": "Zaimportowano pomyślnie", + "chat": "Czat", + "a2aQuickStartStep1": "Krok 1 szybkiego startu A2A", + "importFailed": "Import nie powiódł się", + "inputPlaceholder": "Wprowadź tekst...", + "providerModelsTitle": "Models providera", + "lastBackup": "Ostatnia kopia zapasowa", + "yourEndpoint": "Adres endpoint", + "autoDisableThresholdDesc": "Opis progu automatycznego wyłączenia", + "rerankDesc": "Opis Rerank", + "modelsPathPlaceholder": "Ścieżka do models", + "noCombosYet": "Brak combos", + "connectedVerificationPendingWithError": "Weryfikacja połączenia w toku (wystąpił błąd)", + "comboDefaultsGuideHint1": "Wskazówka dotycząca domyślnych ustawień combo", + "enableCloudTitle": "Tytuł włączenia chmury", + "configuredProvidersHint": "Wskazówka dotycząca skonfigurowanych providers", + "paused": "Wstrzymano", + "llmProviders": "LLM providers", + "enableCombo": "Włącz combo", + "removeProviderOverrideAria": "Usuń nadpisanie providera (Aria)", + "nodeVersion": "Wersja Node", + "openai": "OpenAI", + "exportFailedWithError": "Eksport nie powiódł się z błędem", + "proxyConfigured": "Proxy skonfigurowane", + "concurrencyPerModel": "Limit współbieżności na model", + "protocolTasksLabel": "Zadania protokołu", + "oauthProviders": "OAuth providers", + "lockedCount": "Liczba zablokowanych", + "deleteChainConfirm": "Potwierdzenie usunięcia łańcucha", + "recentTranslations": "Ostatnie tłumaczenia", + "zedImportButton": "Przycisk importu Zed", + "responsesDesc": "Opis Responses", + "testedCount": "Liczba przetestowanych", + "providersCommaSeparatedPlaceholder": "Providers rozdzieleni przecinkami", + "signatureDefaults": "Domyślne sygnatury", + "errorCreating": "Błąd podczas tworzenia", + "timeRangeYear": "Zakres czasu: rok", + "compatibleLabel": "Kompatybilny", + "cloudDisabledSuccess": "Pomyślnie wyłączono chmurę", + "deleteConfirm": "Potwierdź usunięcie", + "check": "Sprawdź", + "safeSearch": "Bezpieczne wyszukiwanie", + "protocolLastActivity": "Ostatnia aktywność protokołu", + "openMcpDashboard": "Otwórz dashboard MCP", + "testBenchTab": "Stanowisko testowe", + "chatPathLabel": "Ścieżka czatu", + "retryDelay": "Opóźnienie ponowienia", + "errorUpdating": "Błąd aktualizacji", + "ideCliIntegrations": "Integracje z IDE i CLI", + "imageGeneration": "Generowanie obrazów", + "apiKeyRequired": "Klucz API jest wymagany", + "resetAllTitle": "Resetuj wszystko", + "connectionError": "Błąd połączenia", + "modelName": "Nazwa model", + "apiKeyForCheck": "Klucz API do sprawdzenia", + "cloudRequestTimeout": "Limit czasu żądania chmury", + "showConfiguredOnly": "Pokaż tylko skonfigurowane", + "showFreeOnly": "Tylko darmowe", + "addFirstProvider": "Dodaj pierwszy provider", + "addFirstProviderDesc": "Połącz AI provider, aby rozpocząć przekierowywanie żądań przez OmniRoute. Możesz użyć darmowych providers, kluczy API lub kont OAuth.", "learnMore": "Dowiedz się więcej", - "includeDomains": "Include Domains", + "includeDomains": "Uwzględnij domeny", "promptCache": "Prompt Cache", - "cloudConnected": "Cloud Connected", - "deleteChain": "Delete Chain", - "chatPathPlaceholder": "Chat Path Placeholder", - "databasePath": "Database Path", - "usingLocalServer": "Using Local Server", - "globalComboConfig": "Global Combo Config", - "backupFailed": "Backup Failed", - "tabProtocols": "Tab Protocols", - "continue": "Continue", - "categorySearch": "Category Search", - "rateLimitStatus": "Rate Limit Status", - "repairEnvSuccess": "Repair Env Success", - "nameRequired": "Name Required", - "country": "Country", - "trackMetricsDesc": "Track Metrics Desc", - "durationSecondsShort": "Duration Seconds Short", - "formatConverterDescription": "Format Converter Description", - "cloudBenefitAccess": "Cloud Benefit Access", - "maxRetries": "Max Retries", - "queueTimeout": "Queue Timeout", - "queueDepth": "__MISSING__:Queue Depth", - "addProvider": "Add Provider", - "realtime": "Realtime", - "totalTranslations": "Total Translations", - "protocolActiveStreamsLabel": "Protocol Active Streams Label", - "repairEnv": "Repair Env", - "modelsCount": "Models Count", - "viewBackups": "View Backups", + "cloudConnected": "Połączono z chmurą", + "deleteChain": "Usuń łańcuch", + "chatPathPlaceholder": "Ścieżka czatu (placeholder)", + "databasePath": "Ścieżka bazy danych", + "usingLocalServer": "Korzystanie z serwera lokalnego", + "globalComboConfig": "Globalna konfiguracja combo", + "backupFailed": "Kopia zapasowa nie powiodła się", + "tabProtocols": "Protokoły", + "continue": "Kontynuuj", + "categorySearch": "Kategoria: wyszukiwanie", + "rateLimitStatus": "Status rate limit", + "repairEnvSuccess": "Pomyślnie naprawiono środowisko", + "nameRequired": "Nazwa jest wymagana", + "country": "Kraj", + "trackMetricsDesc": "Opis śledzenia metryk", + "durationSecondsShort": "s", + "formatConverterDescription": "Opis konwertera formatu", + "cloudBenefitAccess": "Dostęp do chmury", + "maxRetries": "Maksymalna liczba ponowień", + "queueTimeout": "Limit czasu kolejki", + "queueDepth": "Głębokość kolejki", + "addProvider": "Dodaj Provider", + "realtime": "W czasie rzeczywistym", + "totalTranslations": "Wszystkie tłumaczenia", + "protocolActiveStreamsLabel": "Aktywne strumienie protokołu", + "repairEnv": "Napraw środowisko", + "modelsCount": "Liczba models", + "viewBackups": "Pokaż kopie zapasowe", "responsesApi": "Responses Api", - "copyComboName": "Copy Combo Name", - "failures": "Failures", - "failedUpdate": "Failed Update", - "imageDesc": "Image Desc", - "failedCreate": "Failed Create", - "remainingOfLimit": "Remaining Of Limit", - "protocolsTitle": "Protocols Title", - "expirationBannerExpiringSoonDesc": "Expiration Banner Expiring Soon Desc", - "source": "Source", - "failed": "Failed", - "apiKeyMgmt": "Api Key Mgmt", - "mcpQuickStartStep1": "Mcp Quick Start Step1", - "runTest": "Run Test", - "loadingFallbackChains": "Loading Fallback Chains", - "healthy": "Healthy", - "version": "Version", - "saveBlockWeighted": "Save Block Weighted", - "zedImportNone": "Zed Import None", - "noBackupsYet": "No Backups Yet", - "noGlobalProxy": "No Global Proxy", - "noModels": "No Models", - "stickyLimit": "Sticky Limit", - "passedCount": "Passed Count", - "zedImportFailed": "Zed Import Failed", - "saving": "Saving", - "testAll": "Test All", - "globalProxyDesc": "Global Proxy Desc", - "latencyP99": "Latency P99", - "connectingToCloud": "Connecting To Cloud", - "responses": "Responses", - "errorDeleting": "Error Deleting", - "openaiPrefixPlaceholder": "Openai Prefix Placeholder", - "enterPassword": "Enter Password", - "openA2aDashboard": "Open A2A Dashboard", - "enableProvider": "Enable Provider", - "modeTest": "Mode Test", - "failedDeleteChain": "Failed Delete Chain", - "providerDesc": "Provider Desc", - "templateLoadHint": "Template Load Hint", - "lastFailure": "Last Failure", - "moveDown": "Move Down", - "providerLabel": "Provider Label", - "clearCacheFailed": "Clear Cache Failed", - "imagesGenerations": "Images Generations", - "repairEnvWorking": "Repair Env Working", - "millisecondsShort": "Milliseconds Short", - "globalLabel": "Global Label", - "failuresPlural": "Failures Plural", - "completionsLegacyDesc": "Completions Legacy Desc", - "searchProviders": "Search Providers", - "chatPathHint": "Chat Path Hint", - "defaultStrategyDesc": "Default Strategy Desc", - "latencyP95": "Latency P95", - "textToSpeech": "Text To Speech", - "searchType": "Search Type", - "messages": "Messages", - "aggregatorsGateways": "Aggregators Gateways", - "comboStrategyAria": "Combo Strategy Aria", - "input": "Input", - "testingConnection": "Testing Connection", - "excludeDomains": "Exclude Domains", - "webCookieProviders": "Web Cookie Providers", - "allTestsPassed": "All Tests Passed", - "openaiCompatibleName": "Openai Compatible Name", - "warningCostOptimizedPartialPricing": "Warning Cost Optimized Partial Pricing", - "comboDefaultsGuideTitle": "Combo Defaults Guide Title", - "hoursAgo": "Hours Ago", - "notAvailable": "Not Available", - "skipAndContinue": "Skip And Continue", + "copyComboName": "Kopiuj nazwę combo", + "failures": "Niepowodzenia", + "failedUpdate": "Nieudana aktualizacja", + "imageDesc": "Opis obrazu", + "failedCreate": "Nieudane tworzenie", + "remainingOfLimit": "Pozostało z limitu", + "protocolsTitle": "Protokoły", + "expirationBannerExpiringSoonDesc": "Opis wygasania wkrótce", + "source": "Źródło", + "failed": "Niepowodzenie", + "apiKeyMgmt": "API Key Management", + "mcpQuickStartStep1": "Krok 1 szybkiego startu MCP", + "runTest": "Uruchom test", + "loadingFallbackChains": "Ładowanie fallback chains", + "healthy": "Sprawny", + "version": "Wersja", + "saveBlockWeighted": "Zapisz blok weighted", + "zedImportNone": "Brak importu Zed", + "noBackupsYet": "Brak kopii zapasowych", + "noGlobalProxy": "Brak globalnego proxy", + "noModels": "Brak models", + "stickyLimit": "Sticky limit", + "passedCount": "Liczba zaliczonych", + "zedImportFailed": "Import Zed nie powiódł się", + "saving": "Zapisywanie", + "testAll": "Testuj wszystko", + "globalProxyDesc": "Opis globalnego proxy", + "latencyP99": "Opóźnienie P99", + "connectingToCloud": "Łączenie z chmurą", + "responses": "Odpowiedzi", + "errorDeleting": "Błąd podczas usuwania", + "openaiPrefixPlaceholder": "Prefix OpenAI (placeholder)", + "enterPassword": "Wprowadź hasło", + "openA2aDashboard": "Otwórz dashboard A2A", + "enableProvider": "Włącz provider", + "modeTest": "Tryb testowy", + "failedDeleteChain": "Nie udało się usunąć łańcucha", + "providerDesc": "Opis provider", + "templateLoadHint": "Wskazówka dotycząca ładowania szablonu", + "lastFailure": "Ostatnie niepowodzenie", + "moveDown": "Przesuń w dół", + "providerLabel": "Etykieta provider", + "clearCacheFailed": "Czyszczenie pamięci podręcznej nie powiodło się", + "imagesGenerations": "Generowanie obrazów", + "repairEnvWorking": "Naprawianie środowiska", + "millisecondsShort": "ms", + "globalLabel": "Globalny", + "failuresPlural": "Niepowodzenia", + "completionsLegacyDesc": "Opis Completions (przestarzałe)", + "searchProviders": "Wyszukaj providers", + "chatPathHint": "Wskazówka ścieżki czatu", + "defaultStrategyDesc": "Opis domyślnej strategii", + "latencyP95": "Opóźnienie P95", + "textToSpeech": "Text to Speech", + "searchType": "Typ wyszukiwania", + "messages": "Wiadomości", + "aggregatorsGateways": "Agregatory i bramki", + "comboStrategyAria": "Aria strategii combo", + "input": "Wejście", + "testingConnection": "Testowanie połączenia", + "excludeDomains": "Wyklucz domeny", + "webCookieProviders": "Web Cookie providers", + "allTestsPassed": "Wszystkie testy zaliczone", + "openaiCompatibleName": "Nazwa zgodna z OpenAI", + "warningCostOptimizedPartialPricing": "Ostrzeżenie: częściowy cennik zoptymalizowany pod kątem kosztów", + "comboDefaultsGuideTitle": "Poradnik domyślnych ustawień combo", + "hoursAgo": "godz. temu", + "notAvailable": "Niedostępne", + "skipAndContinue": "Pomiń i kontynuuj", "moderations": "Moderations", - "proxyConfig": "Proxy Config", - "upstreamProxyProviders": "Upstream Proxy Providers", - "exportAll": "Export All", - "queuedCount": "Queued Count", - "resetAll": "Reset All", - "noTranslations": "No Translations", - "avgLatency": "Avg Latency", - "throttleStatus": "Throttle Status", - "backupRetentionDesc": "Backup Retention Desc", - "noCBData": "No Cb Data", - "chainDeleted": "Chain Deleted", - "timeLeft": "Time Left", - "expirationBannerExpired": "Expiration Banner Expired", - "language": "Language", - "invalidFileType": "Invalid File Type", - "monitoredProviders": "Monitored Providers", - "errors": "Errors", - "heap": "Heap", + "proxyConfig": "Konfiguracja proxy", + "upstreamProxyProviders": "Upstream proxy providers", + "exportAll": "Eksportuj wszystko", + "queuedCount": "Liczba w kolejce", + "resetAll": "Resetuj wszystko", + "noTranslations": "Brak tłumaczeń", + "avgLatency": "Średnie opóźnienie", + "throttleStatus": "Status dławienia", + "backupRetentionDesc": "Opis retencji kopii zapasowych", + "noCBData": "Brak danych CB", + "chainDeleted": "Usunięto łańcuch", + "timeLeft": "Pozostały czas", + "expirationBannerExpired": "Baner wygaśnięcia: wygasł", + "language": "Język", + "invalidFileType": "Nieprawidłowy typ pliku", + "monitoredProviders": "Monitorowane providers", + "errors": "Błędy", + "heap": "Sterta (heap)", "chatCompletions": "Chat Completions", - "exampleTemplatesHint": "Example Templates Hint", - "retryDelayLabel": "Retry Delay Label", - "audioTranscription": "Audio Transcription", - "fallbackChainsDesc": "Fallback Chains Desc", - "exampleTemplates": "Example Templates", - "connectionsCount": "Connections Count", - "modelsPathLabel": "Models Path Label", - "activeProvidersHint": "Active Providers Hint", - "activeLockouts": "Active Lockouts", - "invalid": "Invalid", - "skipPassword": "Skip Password", - "moveUp": "Move Up", - "timeRange": "Time Range", - "stickyLimitDesc": "Sticky Limit Desc", - "cloudBenefitEdge": "Cloud Benefit Edge", - "custom": "Custom", - "verifying": "Verifying", - "baseUrlLabel": "Base Url Label", - "setPassword": "Set Password", - "safeSearchStrict": "Safe Search Strict", - "noChangesSinceBackup": "No Changes Since Backup", - "modelsPathHint": "Models Path Hint", - "audioTranscriptions": "Audio Transcriptions", - "testCombo": "Test Combo", - "mcpQuickStartTitle": "Mcp Quick Start Title", - "comboUpdated": "Combo Updated", + "exampleTemplatesHint": "Wskazówka dotycząca przykładowych szablonów", + "retryDelayLabel": "Etykieta opóźnienia ponowienia", + "audioTranscription": "Transkrypcja audio", + "fallbackChainsDesc": "Opis fallback chains", + "exampleTemplates": "Przykładowe szablony", + "connectionsCount": "Liczba połączeń", + "modelsPathLabel": "Etykieta ścieżki models", + "activeProvidersHint": "Wskazówka dotycząca aktywnych providers", + "activeLockouts": "Aktywne blokady", + "invalid": "Nieprawidłowy", + "skipPassword": "Pomiń hasło", + "moveUp": "Przesuń w górę", + "timeRange": "Zakres czasu", + "stickyLimitDesc": "Opis sticky limit", + "cloudBenefitEdge": "Zaleta chmury: Edge", + "custom": "Własny", + "verifying": "Weryfikowanie", + "baseUrlLabel": "Etykieta URL bazowego", + "setPassword": "Ustaw hasło", + "safeSearchStrict": "Ścisłe bezpieczne wyszukiwanie", + "noChangesSinceBackup": "Brak zmian od ostatniej kopii zapasowej", + "modelsPathHint": "Wskazówka ścieżki models", + "audioTranscriptions": "Transkrypcje audio", + "testCombo": "Testuj combo", + "mcpQuickStartTitle": "Szybki start MCP", + "comboUpdated": "Zaktualizowano combo", "weighted": "Weighted", "providers": "Providers", - "ccCompatibleLabel": "Cc Compatible Label", - "noFallbackChainsDesc": "No Fallback Chains Desc", - "yesImport": "Yes Import", - "lockoutsAutoRefreshHint": "Lockouts Auto Refresh Hint", - "tabApis": "Tab Apis", - "sectionDescription": "Section Description", - "filter": "Filter", - "purgeLogsFailed": "Purge Logs Failed", - "latency": "Latency", - "testAllOAuth": "Test All O Auth", - "mcpQuickStartStep3": "Mcp Quick Start Step3", - "repairEnvFailed": "Repair Env Failed", - "zedImportHint": "Zed Import Hint", - "modelsAcrossEndpoints": "Models Across Endpoints", - "autoDisableBannedAccounts": "Auto Disable Banned Accounts", - "securityDesc": "Security Desc", - "listModels": "List Models", - "backupRestore": "Backup Restore", - "target": "Target", - "zedImportSuccess": "Zed Import Success", - "lastHeaderUpdate": "Last Header Update", - "categoryCore": "Category Core", - "noFallbackChains": "No Fallback Chains", - "noSearchProviders": "No Search Providers", - "autoBalance": "Auto Balance", - "noModelsYet": "No Models Yet", - "signatureFamily": "Signature Family", - "externalApiCalls": "External Api Calls", - "providerOverridesDesc": "Provider Overrides Desc", - "signatureTool": "Signature Tool", - "connectionFailed": "Connection Failed", - "activeLimitersPlural": "Active Limiters Plural", - "doneDesc": "Done Desc", - "down": "Down", - "noDataYet": "No Data Yet", - "activeProviders": "Active Providers", - "nameInvalid": "Name Invalid", - "skip": "Skip", - "createChain": "Create Chain", + "ccCompatibleLabel": "Zgodność z CC", + "noFallbackChainsDesc": "Opis braku fallback chains", + "yesImport": "Tak, importuj", + "lockoutsAutoRefreshHint": "Wskazówka automatycznego odświeżania blokad", + "tabApis": "Interfejsy API", + "sectionDescription": "Opis sekcji", + "filter": "Filtruj", + "purgeLogsFailed": "Czyszczenie logów nie powiodło się", + "latency": "Opóźnienie", + "testAllOAuth": "Testuj wszystkie konta OAuth", + "mcpQuickStartStep3": "Krok 3 szybkiego startu MCP", + "repairEnvFailed": "Naprawa środowiska nie powiodła się", + "zedImportHint": "Wskazówka importu Zed", + "modelsAcrossEndpoints": "Models w endpoints", + "autoDisableBannedAccounts": "Automatycznie wyłączaj zablokowane konta", + "securityDesc": "Opis bezpieczeństwa", + "listModels": "Lista models", + "backupRestore": "Kopia zapasowa i przywracanie", + "target": "Cel", + "zedImportSuccess": "Import Zed zakończony sukcesem", + "lastHeaderUpdate": "Ostatnia aktualizacja nagłówka", + "categoryCore": "Kategoria: główne", + "noFallbackChains": "Brak fallback chains", + "noSearchProviders": "Brak providers wyszukiwania", + "autoBalance": "Automatyczne bilansowanie", + "noModelsYet": "Brak models", + "signatureFamily": "Rodzina sygnatur", + "externalApiCalls": "Zewnętrzne wywołania API", + "providerOverridesDesc": "Opis nadpisań provider", + "signatureTool": "Narzędzie sygnatur", + "connectionFailed": "Połączenie nie powiodło się", + "activeLimitersPlural": "Aktywne ograniczniki", + "doneDesc": "Opis zakończenia", + "down": "W dół", + "noDataYet": "Brak danych", + "activeProviders": "Aktywne providers", + "nameInvalid": "Nieprawidłowa nazwa", + "skip": "Pomiń", + "createChain": "Utwórz łańcuch", "audioSpeech": "Audio Speech", - "cacheCleared": "Cache Cleared", - "searchTypeNews": "Search Type News", - "durationMillisecondsShort": "Duration Milliseconds Short", - "addOpenAICompatible": "Add Open Ai Compatible", - "chatTesterTab": "Chat Tester Tab", - "queued": "Queued", - "domainPlaceholder": "Domain Placeholder", - "durationMinutesShort": "Duration Minutes Short", - "verifyingConnection": "Verifying Connection", - "imageProviders": "Image Providers", - "protocolToolsLabel": "Protocol Tools Label", - "queryPlaceholder": "Query Placeholder", - "videoGeneration": "Video Generation", - "timeRangeWeek": "Time Range Week", - "limitExhausted": "Limit Exhausted", - "failedDisable": "Failed Disable", - "inMemoryNote": "In Memory Note", - "compatibleHint": "Compatible Hint", - "errorShort": "Error Short", - "advancedHint": "Advanced Hint", - "restoreFailed": "Restore Failed", - "searchProvidersHeading": "Search Providers Heading", - "comboName": "Combo Name", - "autoDisableDescription": "Auto Disable Description", - "embeddingsDesc": "Embeddings Desc", - "operational": "Operational", - "testAllApiKey": "Test All Api Key", - "backupCreated": "Backup Created", - "errorDuringImport": "Error During Import", - "comboDefaultsGuideHint2": "Combo Defaults Guide Hint2", - "connecting": "Connecting", - "fillModelAndProviders": "Fill Model And Providers", - "syncing": "Syncing", - "resetConfirm": "Reset Confirm", - "trackMetrics": "Track Metrics", - "successful": "Successful", - "recovering": "Recovering", - "autoDisableThreshold": "Auto Disable Threshold", + "cacheCleared": "Wyczyszczono pamięć podręczną", + "searchTypeNews": "Wyszukiwanie wiadomości", + "durationMillisecondsShort": "ms", + "addOpenAICompatible": "Dodaj zgodny z OpenAI", + "chatTesterTab": "Tester czatu", + "queued": "W kolejce", + "domainPlaceholder": "Domena (placeholder)", + "durationMinutesShort": "min", + "verifyingConnection": "Weryfikowanie połączenia", + "imageProviders": "Providers obrazów", + "protocolToolsLabel": "Narzędzia protokołu", + "queryPlaceholder": "Zapytanie (placeholder)", + "videoGeneration": "Generowanie wideo", + "timeRangeWeek": "Zakres czasu: tydzień", + "limitExhausted": "Limit wyczerpany", + "failedDisable": "Nie udało się wyłączyć", + "inMemoryNote": "Uwaga dotycząca pamięci podręcznej (in-memory)", + "compatibleHint": "Wskazówka dotycząca zgodności", + "errorShort": "Błąd", + "advancedHint": "Wskazówka zaawansowana", + "restoreFailed": "Przywracanie nie powiodło się", + "searchProvidersHeading": "Providers wyszukiwania", + "comboName": "Nazwa combo", + "autoDisableDescription": "Opis automatycznego wyłączania", + "embeddingsDesc": "Opis embeddings", + "operational": "Sprawny", + "testAllApiKey": "Testuj wszystkie klucze API", + "backupCreated": "Utworzono kopię zapasową", + "errorDuringImport": "Błąd podczas importu", + "comboDefaultsGuideHint2": "Wskazówka 2 przewodnika domyślnych ustawień combo", + "connecting": "Łączenie", + "fillModelAndProviders": "Wypełnij model i providers", + "syncing": "Synchronizowanie", + "resetConfirm": "Potwierdź reset", + "trackMetrics": "Śledź metryki", + "successful": "Zakończone sukcesem", + "recovering": "Odzyskiwanie", + "autoDisableThreshold": "Próg automatycznego wyłączenia", "anthropic": "Anthropic", - "syncingData": "Syncing Data", - "cloudBenefitPorts": "Cloud Benefit Ports", - "compatibleProviders": "Compatible Providers", - "freeTierProviders": "Dostawcy bezpłatnego poziomu", - "freeTierLabel": "Dostępny poziom bezpłatny", - "freeTierProvidersDesc": "Dostawcy z bezpłatnymi poziomami — niektórzy wymagają rejestracji klucza API, inni w ogóle nie potrzebują poświadczeń.", - "clearCache": "Clear Cache", - "reqs": "Reqs", - "addAnthropicCompatible": "Add Anthropic Compatible", - "apiKeyProviders": "Api Key Providers", - "tabsAria": "Tabs Aria", - "resetting": "Resetting", - "millisecondsAbbr": "Milliseconds Abbr", - "backupReasonPreRestore": "Backup Reason Pre Restore", - "disableCloud": "Disable Cloud", - "newProviderNameAria": "New Provider Name Aria", - "passwordsMismatch": "Passwords Mismatch", - "a2aQuickStartStep3": "A2A Quick Start Step3", - "liveMonitorDescriptionSuffix": "Live Monitor Description Suffix", - "failedAddProvider": "Failed Add Provider", - "addAtLeastOneProvider": "Add At Least One Provider", - "reasonSeparator": "Reason Separator", - "zedImporting": "Zed Importing", - "confirmPasswordPlaceholder": "Confirm Password Placeholder", - "whatYouGet": "What You Get", - "signatureSession": "Signature Session", - "errorCountNoCode": "Error Count No Code", - "testing": "Testing", - "providersCommaSeparated": "Providers Comma Separated", - "exportDatabase": "Export Database", - "hitRate": "Hit Rate", - "completionsLegacy": "Completions Legacy", - "removeModel": "Remove Model", - "timeRangeDay": "Time Range Day", - "cloudRequestFailed": "Cloud Request Failed", - "updatedAt": "Updated At", - "monitoredProvidersHint": "Monitored Providers Hint", - "connectionSuccessful": "Connection Successful", - "latencyP50": "Latency P50", - "logsDeleted": "Logs Deleted", - "chatTester": "Chat Tester", - "safeSearchOff": "Safe Search Off", - "nameHint": "Name Hint", - "debugToggle": "Debug Toggle", + "syncingData": "Synchronizowanie danych", + "cloudBenefitPorts": "Zaleta chmury: Porty", + "compatibleProviders": "Kompatybilne providers", + "freeTierProviders": "Providers z darmowym poziomem", + "freeTierLabel": "Dostępny darmowy poziom", + "freeTierProvidersDesc": "Providers z darmowymi poziomami — niektóre wymagają rejestracji klucza API, inne nie wymagają żadnych danych uwierzytelniających.", + "clearCache": "Wyczyść pamięć podręczną", + "reqs": "Żądania", + "addAnthropicCompatible": "Dodaj zgodny z Anthropic", + "apiKeyProviders": "Providers z kluczem API", + "tabsAria": "Aria kart", + "resetting": "Resetowanie", + "millisecondsAbbr": "ms", + "backupReasonPreRestore": "Kopia zapasowa przed przywróceniem", + "disableCloud": "Wyłącz chrumę", + "newProviderNameAria": "Aria nazwy nowego provider", + "passwordsMismatch": "Hasła nie pasują do siebie", + "a2aQuickStartStep3": "Krok 3 szybkiego startu A2A", + "liveMonitorDescriptionSuffix": "Opis monitorowania na żywo (sufiks)", + "failedAddProvider": "Nie udało się dodać provider", + "addAtLeastOneProvider": "Dodaj przynajmniej jeden provider", + "reasonSeparator": "Separator przyczyny", + "zedImporting": "Importowanie z Zed", + "confirmPasswordPlaceholder": "Potwierdź hasło (placeholder)", + "whatYouGet": "Co otrzymujesz", + "signatureSession": "Sygnatura sesji", + "errorCountNoCode": "Błąd (brak kodu)", + "testing": "Testowanie", + "providersCommaSeparated": "Providers (oddzielone przecinkami)", + "exportDatabase": "Eksportuj bazę danych", + "hitRate": "Współczynnik trafień (hit rate)", + "completionsLegacy": "Completions (przestarzałe)", + "removeModel": "Usuń model", + "timeRangeDay": "Zakres czasu: dzień", + "cloudRequestFailed": "Żądanie chmury nie powiodło się", + "updatedAt": "Zaktualizowano", + "monitoredProvidersHint": "Wskazówka monitorowanych providers", + "connectionSuccessful": "Połączenie udane", + "latencyP50": "Opóźnienie P50", + "logsDeleted": "Usunięto logi", + "chatTester": "Tester czatu", + "safeSearchOff": "Bezpieczne wyszukiwanie wyłączone", + "nameHint": "Wskazówka dotycząca nazwy", + "debugToggle": "Przełącznik debugowania", "embedding": "Embedding", - "issuesLabel": "Issues Label", - "optionAny": "Option Any", - "maxNestingDepth": "Max Nesting Depth", + "issuesLabel": "Problemy", + "optionAny": "Dowolny", + "maxNestingDepth": "Maksymalna głębokość zagnieżdżenia", "rerank": "Rerank", - "checking": "Checking", - "getStarted": "Get Started", - "restoreSuccess": "Restore Success", - "issuesDetected": "Issues Detected", + "checking": "Sprawdzanie", + "getStarted": "Rozpocznij", + "restoreSuccess": "Pomyślne przywrócenie", + "issuesDetected": "Wykryte problemy", "signatureCache": "Signature Cache", - "modelLockouts": "Model Lockouts", - "usingCloudProxy": "Using Cloud Proxy", - "loadingHealth": "Loading Health", - "providerOverrides": "Provider Overrides", - "audioTranscriptionDesc": "Audio Transcription Desc", - "learnedFromHeaders": "Learned From Headers", - "totalRequests": "Total Requests", - "cloudUnstableNote": "Cloud Unstable Note", - "gamificationAdmin": "Administrator grywalizacji", - "monitorAnomaliesAndHealth": "Monitoruj anomalie i stan systemu", + "modelLockouts": "Blokady modeli", + "usingCloudProxy": "Używanie Cloud Proxy", + "loadingHealth": "Ładowanie stanu zdrowia", + "providerOverrides": "Nadpisania providerów", + "audioTranscriptionDesc": "Opis transkrypcji audio", + "learnedFromHeaders": "Wyuczone z nagłówków", + "totalRequests": "Łączna liczba żądań", + "cloudUnstableNote": "Uwaga o niestabilności chmury", + "gamificationAdmin": "Administracja grywalizacją", + "monitorAnomaliesAndHealth": "Monitorowanie anomalii i stanu zdrowia systemu", "flaggedAnomalies": "Oznaczone anomalie", - "noAnomaliesDetected": "Nie wykryto żadnych anomalii", + "noAnomaliesDetected": "Nie wykryto anomalii", "apiKey": "Klucz API", - "xpLastHour": "PD (1 godz.)", - "zScore": "Wynik Z", - "tokensCommunityServers": "Serwery społecznościowe", + "xpLastHour": "XP (1h)", + "zScore": "Z-Score", + "tokensCommunityServers": "Serwery społeczności", "tokensServerNamePlaceholder": "Nazwa serwera", "tokensApiKeyPlaceholder": "Klucz API", "tokensTokenBalance": "Saldo tokenów", "tokensSendTokens": "Wyślij tokeny", - "tokensRecipientApiKeyId": "Identyfikator klucza API odbiorcy", - "tokensRecipientApiKeyIdPlaceholder": "Wprowadź identyfikator klucza API odbiorcy", + "tokensRecipientApiKeyId": "ID klucza API odbiorcy", + "tokensRecipientApiKeyIdPlaceholder": "Wprowadź ID klucza API odbiorcy", "tokensReasonOptional": "Powód (opcjonalnie)", - "tokensReasonPlaceholder": "np. premia, nagroda", + "tokensReasonPlaceholder": "np. bonus, nagroda", "tokensTransactionHistory": "Historia transakcji", - "tokensNoTransactionsYet": "Nie ma jeszcze żadnych transakcji", - "tokensInviteCodes": "Kody zaproszeń", - "tokensMaxUses": "Maksymalne wykorzystanie", - "tokensRedeemCode": "Wykorzystaj kod", - "tokensRedeemCodePlaceholder": "Wpisz kod zaproszenia", - "tokensYourActiveInvites": "Twoje aktywne zaproszenia", - "tierCoverageTitle": "Zasięg poziomu", - "tierCoverageSubtitle": "Dostawcy skonfigurowani według warstwy rezerwowej", - "batchDetailCopyId": "Skopiuj dowód", + "tokensNoTransactionsYet": "Brak transakcji", + "tokensInviteCodes": "Kody zaproszeniowe", + "tokensMaxUses": "Maksymalna liczba użyć", + "tokensRedeemCode": "Zrealizuj kod", + "tokensRedeemCodePlaceholder": "Wprowadź kod zaproszeniowy", + "tokensYourActiveInvites": "Aktywne zaproszenia", + "tierCoverageTitle": "Pokrycie poziomów", + "tierCoverageSubtitle": "Providerzy skonfigurowani dla każdego poziomu fallback", + "batchDetailCopyId": "Kopiuj ID", "batchDetailClose": "Zamknij", - "batchDetailEndpoint": "Punkt końcowy", - "batchDetailModel": "Modelka", + "batchDetailEndpoint": "Endpoint", + "batchDetailModel": "Model", "batchDetailWindow": "Okno", "batchDetailCreated": "Utworzono", - "providerTopologyEmpty": "Żaden dostawca nie jest jeszcze podłączony", + "providerTopologyEmpty": "Brak połączonych providerów", "badgeToastUnlocked": "Odznaka odblokowana!", - "batchListSearchPlaceholder": "Szukaj według identyfikatora, punktu końcowego, modelu…", - "batchListDeleteAllCompletedTitle": "Usuń wszystkie ukończone partie", - "batchListBatchesTable": "Partie", - "changelogViewerLoading": "Ładowanie dziennika zmian z GitHuba...", + "batchListSearchPlaceholder": "Szukaj po ID, endpoint, model…", + "batchListDeleteAllCompletedTitle": "Usuń wszystkie ukończone zadania wsadowe", + "batchListBatchesTable": "Zadania wsadowe", + "changelogViewerLoading": "Ładowanie changelogu z GitHub...", "profileLoading": "Ładowanie profilu...", "profileHowToEarn": "Jak zarabiać", "bootstrapBannerDismiss": "Odrzuć", - "batchListDeleteBatchTitle": "Usuń partię i jej pliki", - "leaderboardYourRank": "Twoja ranga", + "batchListDeleteBatchTitle": "Usuń zadanie wsadowe i jego pliki", + "leaderboardYourRank": "Twoja pozycja", "leaderboardLoading": "Ładowanie tabeli liderów...", - "batchFileDetailCopyId": "Skopiuj dowód", + "batchFileDetailCopyId": "Kopiuj ID", "batchFileDetailClose": "Zamknij", "batchFileDetailFailedToLoad": "Nie udało się załadować zawartości pliku", - "batchFilesListSearchPlaceholder": "Szukaj według identyfikatora lub nazwy pliku…", + "batchFilesListSearchPlaceholder": "Szukaj po ID lub nazwie pliku…", "batchFilesListFilesTable": "Pliki", - "batchPageLoadingMore": "Ładowanie więcej…", - "recommended": "__MISSING__:Recommended", - "understand": "__MISSING__:I understand", - "batchConceptTitle": "Batch processing", - "batchConceptSubtitle": "Process thousands of requests asynchronously at ~50% of the cost (24h window). Ideal for evaluations, classification, and embeddings.", - "batchConceptHowItWorks": "How it works", - "batchConceptBenefit50pct": "50% discount on input + output tokens", - "batchConceptAsync24h": "Async with a 24h completion window", - "batchConceptUseCases": "Best for bulk classification, evaluations, and embeddings", - "filesConceptTitle": "Batch files", - "filesConceptSubtitle": "JSONL files used by batches: input requests, results, and errors.", - "filesConceptInput": "Input — your JSONL with one request per line", - "filesConceptOutput": "Output — results from completed requests", - "filesConceptError": "Errors — requests that failed", - "filesConceptRetention": "Retention: 30 days by default (29 days on Anthropic)", - "wizardTitle": "New batch", - "wizardClose": "Close", - "wizardNext": "Next", - "wizardBack": "Back", - "wizardCancel": "Cancel", - "wizardCreate": "Create batch", - "wizardCreating": "Creating…", - "wizardStep1Destination": "Destination", - "wizardStep2Input": "Input", - "wizardStep3Validate": "Validate", - "wizardStep4Cost": "Cost & create", + "batchPageLoadingMore": "Ładowanie kolejnych…", + "recommended": "Zalecane", + "understand": "Rozumiem", + "batchConceptTitle": "Przetwarzanie wsadowe", + "batchConceptSubtitle": "Asynchroniczne przetwarzanie tysięcy żądań przy ~50% kosztów (okno 24h). Idealne do ewaluacji, klasyfikacji i embeddings.", + "batchConceptHowItWorks": "Jak to działa", + "batchConceptBenefit50pct": "50% zniżki na tokeny wejściowe i wyjściowe", + "batchConceptAsync24h": "Asynchronicznie z 24-godzinnym oknem na ukończenie", + "batchConceptUseCases": "Najlepsze do masowej klasyfikacji, ewaluacji i embeddings", + "filesConceptTitle": "Pliki zadań wsadowych", + "filesConceptSubtitle": "Pliki JSONL używane przez zadania wsadowe: żądania wejściowe, wyniki i błędy.", + "filesConceptInput": "Wejście — plik JSONL z jednym żądaniem na linijkę", + "filesConceptOutput": "Wyjście — wyniki z ukończonych żądań", + "filesConceptError": "Błędy — żądania, które się nie powiodły", + "filesConceptRetention": "Przechowywanie: domyślnie 30 dni (29 dni dla Anthropic)", + "wizardTitle": "Nowe zadanie wsadowe", + "wizardClose": "Zamknij", + "wizardNext": "Dalej", + "wizardBack": "Wstecz", + "wizardCancel": "Anuluj", + "wizardCreate": "Utwórz zadanie wsadowe", + "wizardCreating": "Tworzenie…", + "wizardStep1Destination": "Cel", + "wizardStep2Input": "Wejście", + "wizardStep3Validate": "Waliduj", + "wizardStep4Cost": "Koszt i utworzenie", "wizardProviderLabel": "Provider", "wizardEndpointLabel": "Endpoint", "wizardModelLabel": "Model", "wizardInputKindJsonl": "JSONL", - "wizardInputKindCsv": "CSV (we'll convert)", - "wizardDropOrPick": "Drop a file or click to pick", - "wizardCsvMappingTitle": "Map CSV columns → request fields", - "wizardCsvMappingAddField": "Add field", - "wizardValidationOk": "All lines valid", - "wizardValidationErrors": "Validation errors", - "wizardValidationPreview": "Preview (first 5 requests)", - "wizardValidationSamplingNote": "File is large — validated by sampling (first 1000 + last 100 lines). Full validation runs server-side.", - "wizardCostSync": "Sync cost", - "wizardCostBatch": "Batch cost (-50%)", - "wizardCostSavings": "Savings", - "wizardCostEstimatedNotice": "Estimated cost — real billing may vary.", - "wizardErrorUpload": "Failed to upload file. Try again.", - "wizardErrorCreate": "Failed to create batch. Try again.", - "wizardEmptyProviders": "Connect a provider with batch support (OpenAI, Anthropic, or Gemini) to create a batch.", - "uploadModalTitle": "Upload batch file", - "uploadModalDropOrPick": "Drop a .jsonl file or click to pick", - "uploadModalUpload": "Upload", - "uploadModalCancel": "Cancel", - "uploadModalError": "Upload failed. Try again.", - "uploadModalSuccess": "Uploaded", - "uploadModalSizeLimit": "Max 512 MB", - "batchListNewButton": "New batch", - "batchListAutoRefresh": "Auto-refresh 30s", - "batchListCostColumn": "Cost", - "batchActionCancel": "Cancel", - "batchActionDownloadOutput": "Download output", - "batchActionDownloadErrors": "Download errors", - "batchActionRetry": "Retry failed", - "batchActionRetryConfirm": "Retry {n} failed request(s)? Final cost depends on actual tokens consumed.", - "expirationBadgeCritical": "Critical", - "expirationBadgeWarning": "Soon", - "expirationBadgeNormal": "Pending", - "expirationBadgeExpired": "Expired", - "filesListUploadButton": "Upload", - "filesListUsedByColumn": "Used by", - "filesListUsedByNone": "None", - "filesListUsedByRoleInput": "input", - "filesListUsedByRoleOutput": "output", - "filesListUsedByRoleError": "error", - "filesListSizeColumn": "Size", - "batchListProgressPartial": "(partial)", + "wizardInputKindCsv": "CSV (zostanie przekonwertowany)", + "wizardDropOrPick": "Przeciągnij plik lub kliknij, aby wybrać", + "wizardCsvMappingTitle": "Mapuj kolumny CSV → pola żądania", + "wizardCsvMappingAddField": "Dodaj pole", + "wizardValidationOk": "Wszystkie linie są poprawne", + "wizardValidationErrors": "Błędy walidacji", + "wizardValidationPreview": "Podgląd (pierwsze 5 żądań)", + "wizardValidationSamplingNote": "Plik jest duży — walidacja przez próbkowanie (pierwsze 1000 + ostatnie 100 linii). Pełna walidacja odbywa się po stronie serwera.", + "wizardCostSync": "Synchronizuj koszt", + "wizardCostBatch": "Koszt zadania wsadowego (-50%)", + "wizardCostSavings": "Oszczędności", + "wizardCostEstimatedNotice": "Szacowany koszt — rzeczywiste rozliczenie może się różnić.", + "wizardErrorUpload": "Nie udało się przesłać pliku. Spróbuj ponownie.", + "wizardErrorCreate": "Nie udało się utworzyć zadania wsadowego. Spróbuj ponownie.", + "wizardEmptyProviders": "Połącz providera ze wsparciem dla zadań wsadowych (OpenAI, Anthropic lub Gemini), aby utworzyć zadanie wsadowe.", + "uploadModalTitle": "Prześlij plik zadania wsadowego", + "uploadModalDropOrPick": "Przeciągnij plik .jsonl lub kliknij, aby wybrać", + "uploadModalUpload": "Prześlij", + "uploadModalCancel": "Anuluj", + "uploadModalError": "Przesyłanie nie powiodło się. Spróbuj ponownie.", + "uploadModalSuccess": "Przesłano", + "uploadModalSizeLimit": "Maks. 512 MB", + "batchListNewButton": "Nowe zadanie wsadowe", + "batchListAutoRefresh": "Autoodświeżanie 30s", + "batchListCostColumn": "Koszt", + "batchActionCancel": "Anuluj", + "batchActionDownloadOutput": "Pobierz dane wyjściowe", + "batchActionDownloadErrors": "Pobierz błędy", + "batchActionRetry": "Ponów nieudane", + "batchActionRetryConfirm": "Ponowić {n} nieudanych żądań? Ostateczny koszt zależy od faktycznie zużytych tokenów.", + "expirationBadgeCritical": "Krytyczny", + "expirationBadgeWarning": "Wkrótce", + "expirationBadgeNormal": "Oczekujący", + "expirationBadgeExpired": "Wygasł", + "filesListUploadButton": "Prześlij", + "filesListUsedByColumn": "Używany przez", + "filesListUsedByNone": "Brak", + "filesListUsedByRoleInput": "wejście", + "filesListUsedByRoleOutput": "wyjście", + "filesListUsedByRoleError": "błąd", + "filesListSizeColumn": "Rozmiar", + "batchListProgressPartial": "(częściowy)", "batchListProviderColumn": "Provider", "batchListProviderUnknown": "—", - "batchListProviderOther": "Other", - "batchListTitle": "Batches", - "batchListCount": "{count} batches", - "batchListRemovingCompleted": "Removing…", - "batchListRemoveCompleted": "Remove completed", + "batchListProviderOther": "Inny", + "batchListTitle": "Zadania wsadowe", + "batchListCount": "{count} zadań wsadowych", + "batchListRemovingCompleted": "Usuwanie…", + "batchListRemoveCompleted": "Usuń ukończone", "batchListTableStatus": "Status", "batchListTableId": "ID", "batchListTableEndpoint": "Endpoint", "batchListTableModel": "Model", - "batchListTableProgress": "Progress", - "batchListTableCreated": "Created", - "batchListTableExpires": "Expires", - "batchListLoading": "Loading…", - "batchListEmpty": "No batches found", - "batchListValidating": "Validating…", - "batchStatusAll": "All statuses", - "batchStatusInProgress": "In progress", - "batchStatusValidating": "Validating", - "batchStatusFinalizing": "Finalizing", - "batchStatusCompleted": "Completed", - "batchStatusFailed": "Failed", - "batchStatusCancelled": "Cancelled", - "batchStatusCancelling": "Cancelling", - "batchStatusExpired": "Expired", - "batchStatusCompletedWithFailures": "completed with failures", - "batchStatusInProgressWithFailures": "in progress (with failures)", - "batchStatusFinalizingWithFailures": "finalizing (with failures)", - "batchStatusCancelledWithFailures": "cancelled with failures", - "batchStatusExpiredWithFailures": "expired (partial)", - "wizardCostEstimating": "Estimating cost…", - "wizardCostRequests": "Requests", - "wizardCostInputTok": "input tok", - "wizardCostOutputTok": "output tok", - "wizardCostWindow": "Window", - "wizardDestinationSelectProvider": "Select a provider…", - "wizardDestinationSelectModel": "Select a model…", - "wizardDestinationConnectProvider": "Connect a provider", - "batchListBatchCreated": "Batch {id} created — refreshing list…", - "batchListBatchCreatedDismiss": "Dismiss", - "batchListRefreshing": "Refreshing…", - "batchListRefresh": "Refresh", - "uploadFileModalRemove": "Remove", - "uploadFileModalUploading": "Uploading…", - "wizardInputReading": "Reading file…", - "wizardInputReady": "Ready", - "wizardInputLargeFileLabel": "Large file — sampling validation", - "wizardInputCsvJsonlReady": "JSONL generated — ready to validate.", - "wizardInputLargeFileWarning": "Large file detected — validation runs by sampling (first 5 MB + last 100 KB). Full validation happens server-side.", - "wizardCostWindow24h": "24h completion window", - "wizardValidationFieldsOk": "required fields valid", - "filesListDelete": "Delete", - "filesListDownload": "Download", - "batchDetailActionCancel": "Cancel batch", - "batchDetailActionRetry": "Retry failed requests", - "batchDetailCancelling": "Cancelling…", - "batchDetailRetrying": "Preparing retry…", - "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", - "batchActionCancelError": "Failed to cancel batch. Try again.", - "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchListTableProgress": "Postęp", + "batchListTableCreated": "Utworzono", + "batchListTableExpires": "Wygasa", + "batchListLoading": "Ładowanie…", + "batchListEmpty": "Nie znaleziono zadań wsadowych", + "batchListValidating": "Walidacja…", + "batchStatusAll": "Wszystkie statusy", + "batchStatusInProgress": "W toku", + "batchStatusValidating": "Walidowanie", + "batchStatusFinalizing": "Finalizowanie", + "batchStatusCompleted": "Ukończone", + "batchStatusFailed": "Nieudane", + "batchStatusCancelled": "Anulowane", + "batchStatusCancelling": "Anulowanie", + "batchStatusExpired": "Wygasłe", + "batchStatusCompletedWithFailures": "ukończone z błędami", + "batchStatusInProgressWithFailures": "w toku (z błędami)", + "batchStatusFinalizingWithFailures": "finalizowanie (z błędami)", + "batchStatusCancelledWithFailures": "anulowane z błędami", + "batchStatusExpiredWithFailures": "wygasłe (częściowe)", + "wizardCostEstimating": "Szacowanie kosztu…", + "wizardCostRequests": "Żądania", + "wizardCostInputTok": "tokeny wejściowe", + "wizardCostOutputTok": "tokeny wyjściowe", + "wizardCostWindow": "Okno", + "wizardDestinationSelectProvider": "Wybierz providera…", + "wizardDestinationSelectModel": "Wybierz model…", + "wizardDestinationConnectProvider": "Połącz providera", + "batchListBatchCreated": "Zadanie wsadowe {id} zostało utworzone — odświeżanie listy…", + "batchListBatchCreatedDismiss": "Odrzuć", + "batchListRefreshing": "Odświeżanie…", + "batchListRefresh": "Odśwież", + "uploadFileModalRemove": "Usuń", + "uploadFileModalUploading": "Przesyłanie…", + "wizardInputReading": "Odczytywanie pliku…", + "wizardInputReady": "Gotowe", + "wizardInputLargeFileLabel": "Duży plik — walidacja przez próbkowanie", + "wizardInputCsvJsonlReady": "JSONL wygenerowany — gotowy do walidacji.", + "wizardInputLargeFileWarning": "Wykryto duży plik — walidacja odbywa się przez próbkowanie (pierwsze 5 MB + ostatnie 100 KB). Pełna walidacja odbywa się po stronie serwera.", + "wizardCostWindow24h": "24-godzinne okno na ukończenie", + "wizardValidationFieldsOk": "wymagane pola są poprawne", + "filesListDelete": "Usuń", + "filesListDownload": "Pobierz", + "batchDetailActionCancel": "Anuluj zadanie wsadowe", + "batchDetailActionRetry": "Ponów nieudane żądania", + "batchDetailCancelling": "Anulowanie…", + "batchDetailRetrying": "Przygotowywanie ponowienia…", + "batchDetailCancelConfirm": "Anulować to zadanie wsadowe? Trwające żądania zostaną zatrzymane.", + "batchActionCancelError": "Nie udało się anulować zadania wsadowego. Spróbuj ponownie.", + "batchActionRetryError": "Nie udało się ponowić nieudanych żądań. Spróbuj ponownie.", + "batchConceptRetentionNote": "Pliki wyników i błędów są przechowywane przez 30 dni (Anthropic: 29 dni)" }, - "featureFlagOmnirouteEmergencyFallbackDescription": "__MISSING__:Route budget-exhausted requests to the emergency free fallback provider/model.", - "featureFlagArenaEloSyncEnabledDescription": "__MISSING__:Enable periodic Arena AI leaderboard ELO sync for model intelligence rankings.", + "disabled": "Wyłączone", + "featureFlagOmnirouteEmergencyFallbackDescription": "Kierowanie żądań z wyczerpanym budżetem do awaryjnego, bezpłatnego fallback provider/model.", + "featureFlagArenaEloSyncEnabledDescription": "Włączenie okresowej synchronizacji ELO tabeli liderów Arena AI dla rankingów inteligencji model.", "sidebar": { - "home": "Dom", - "dashboard": "Pulpit nawigacyjny", - "providers": "Dostawcy", - "combos": "Kombinacje", + "home": "Strona główna", + "dashboard": "Dashboard", + "providers": "Providers", + "combos": "Combos", "usage": "Użycie", "analytics": "Analityka", "costs": "Koszty", - "health": "Zdrowie", + "health": "Stan", "proxy": "Proxy", - "limits": "Limity i kwoty", - "cliTools": "Narzędzia interfejsu wiersza polecenia", + "limits": "Limity quota", + "cliTools": "Narzędzia CLI", "media": "Media", "settings": "Ustawienia", - "translator": "Tłumacz", - "playground": "Plac zabaw", - "searchTools": "Search Tools", + "translator": "Translator", + "playground": "Playground", + "searchTools": "Narzędzia wyszukiwania", "agents": "Agenci", - "cloudAgents": "Agenci w chmurze", - "memory": "Memory", - "skills": "Skills", - "omniSkills": "OmniUmiejętności", - "agentSkills": "Umiejętności agenta", - "docs": "Dokumenty", - "issues": "Problemy", - "endpoints": "Punkty końcowe", + "cloudAgents": "Agenci chmurowi", + "memory": "Pamięć", + "skills": "Umiejętności", + "omniSkills": "OmniSkills", + "agentSkills": "AgentSkills", + "chaosConfig": "Tryb Chaos", + "docs": "Dokumentacja", + "issues": "Zgłoszenia", + "endpoints": "Endpoints", "endpointsSubtitle": "Adresy URL połączeń AI", - "apiManager": "Menedżer API", - "apiManagerSubtitle": "Zarządzaj kluczami API i dostępem", - "embeddedServices": "Wbudowane Usługi", - "embeddedServicesSubtitle": "Zarządzaj lokalnymi usługami proxy", - "logs": "Dzienniki", - "webhooks": "Haki internetowe", - "webhooksSubtitle": "Otrzymuj powiadomienia o wydarzeniach", - "combosSubtitle": "Dostawcy grupowi do przełączania awaryjnego", - "batchSubtitle": "Przetwarzaj wiele żądań", - "contextCavemanSubtitle": "Szybka kompresja", - "contextRtkSubtitle": "Filtrowanie wyjściowe", - "auditLog": "Dziennik audytu", - "shutdown": "Wyłączenie", - "restart": "Uruchom ponownie", + "apiManager": "Klucze API", + "apiManagerSubtitle": "Zarządzanie kluczami API i dostępem", + "embeddedServices": "Usługi osadzone", + "embeddedServicesSubtitle": "Zarządzanie lokalnymi usługami proxy", + "logs": "Logi", + "webhooks": "Webhooks", + "webhooksSubtitle": "Otrzymywanie powiadomień o zdarzeniach", + "combosSubtitle": "Grupowanie providers dla failover", + "batchSubtitle": "Przetwarzanie wielu żądań", + "contextCavemanSubtitle": "Kompresja promptów", + "contextRtkSubtitle": "Filtrowanie danych wyjściowych", + "auditLog": "Log audytu", + "shutdown": "Wyłącz", + "restart": "Restart", "shutdownConfirm": "Wyłączyć OmniRoute?", "restartConfirm": "Zrestartować OmniRoute?", "version": "v{version}", - "debug": "Debuguj", - "system": "Systemu", + "debug": "Debug", + "system": "System", "help": "Pomoc", - "primarySection": "Main", + "primarySection": "Główne", "cliSection": "CLI", "debugSection": "Debug", "systemSection": "System", - "helpSection": "Help", + "helpSection": "Pomoc", "serverDisconnected": "Serwer odłączony", "serverDisconnectedMsg": "Serwer proxy został zatrzymany lub uruchamia się ponownie.", - "expandSidebar": "Rozwiń pasek boczny", - "collapseSidebar": "Zwiń pasek boczny", - "themes": "Themes", - "presetColors": "Popular colors", - "createTheme": "Create theme", - "chooseColor": "Pick one color", - "themeCoral": "Coral", - "themeBlue": "Blue", - "themeRed": "Red", - "themeGreen": "Green", - "themeViolet": "Violet", - "themeOrange": "Orange", - "themeCyan": "Cyan", + "expandSidebar": "Rozwiń panel boczny", + "collapseSidebar": "Zwiń panel boczny", + "themes": "Motywy", + "presetColors": "Popularne kolory", + "createTheme": "Utwórz motyw", + "chooseColor": "Wybierz kolor", + "themeCoral": "Koralowy", + "themeBlue": "Niebieski", + "themeRed": "Czerwony", + "themeGreen": "Zielony", + "themeViolet": "Fioletowy", + "themeOrange": "Pomarańczowy", + "themeCyan": "Cyjan", "cliToolsShort": "Narzędzia", "cache": "Cache", "cacheShort": "Cache", - "batch": "Batch Jobs", - "themeSystem": "Theme System", - "whitelabelingDesc": "Whitelabeling Desc", - "switchThemes": "Switch Themes", - "themeAccentDesc": "Theme Accent Desc", - "uploadFavicon": "Upload Favicon", - "themeDark": "Theme Dark", - "customLogoDesc": "Custom Logo Desc", - "sidebarVisibilityToggle": "Sidebar Visibility Toggle", - "themeAccent": "Theme Accent", - "resetFavicon": "Reset Favicon", + "batch": "Zadania wsadowe", + "themeSystem": "System motywów", + "whitelabelingDesc": "Opis whitelabeling", + "switchThemes": "Przełącz motywy", + "themeAccentDesc": "Opis akcentu motywu", + "uploadFavicon": "Prześlij favicon", + "themeDark": "Motyw ciemny", + "customLogoDesc": "Opis własnego logo", + "sidebarVisibilityToggle": "Przełącznik widoczności panelu bocznego", + "themeAccent": "Akcent motywu", + "resetFavicon": "Resetuj favicon", "whitelabeling": "Whitelabeling", - "darkMode": "Dark Mode", - "uploadLogo": "Upload Logo", - "themeLight": "Theme Light", - "appName": "App Name", - "appNameDesc": "App Name Desc", - "resetLogo": "Reset Logo", - "customFavicon": "Custom Favicon", - "hideHealthLogs": "Hide Health Logs", - "customLogo": "Custom Logo", - "appearance": "Appearance", - "themeSelectionAria": "Theme Selection Aria", - "themeCreate": "Theme Create", - "customFaviconDesc": "Custom Favicon Desc", - "logoPreview": "Logo Preview", - "themeCustom": "Theme Custom", - "hideHealthLogsDesc": "Hide Health Logs Desc", - "faviconPreview": "Favicon Preview", + "darkMode": "Tryb ciemny", + "uploadLogo": "Prześlij logo", + "themeLight": "Motyw jasny", + "appName": "Nazwa aplikacji", + "appNameDesc": "Opis nazwy aplikacji", + "resetLogo": "Resetuj logo", + "customFavicon": "Własny favicon", + "hideHealthLogs": "Ukryj logi stanu", + "customLogo": "Własne logo", + "appearance": "Wygląd", + "themeSelectionAria": "Wybór motywu Aria", + "themeCreate": "Tworzenie motywu", + "customFaviconDesc": "Opis własnego favicon", + "logoPreview": "Podgląd logo", + "themeCustom": "Motyw niestandardowy", + "hideHealthLogsDesc": "Opis ukrywania logów stanu", + "faviconPreview": "Podgląd favicon", "changelog": "Changelog", - "contextSection": "Context & Cache", + "contextSection": "Kontekst i Cache", "contextCaveman": "Caveman", "contextRtk": "RTK", - "contextCombos": "Engine Combos", + "contextCombos": "Combos silników", "contextLite": "Lite", "contextAggressive": "Aggressive", "contextUltra": "Ultra", "contextOmniglyph": "OmniGlyph", - "contextSettings": "Compression Settings", + "contextSettings": "Ustawienia kompresji", "contextHeadroom": "Headroom", - "contextSessionDedup": "Session Dedup", + "contextSessionDedup": "Deduplikacja sesji", "contextCcr": "CCR", "contextLlmlingua": "LLMLingua", "combosLive": "Combo Studio", "compressionStudio": "Compression Studio", "routingSection": "Routing", - "protocolsSection": "Protocols", - "agentsAiSection": "Agents & AI", - "cacheContextSection": "Cache & Context", - "analyticsSection": "Analytics", - "costsSection": "Costs", + "protocolsSection": "Protokoły", + "agentsAiSection": "Agenci i AI", + "cacheContextSection": "Cache i Kontekst", + "analyticsSection": "Analityka", + "costsSection": "Koszty", "monitoringSection": "Monitoring", - "auditSecuritySection": "Audit & Security", - "devtoolsSection": "Dev Tools", - "configurationSection": "Configuration", - "aiFeaturesSection": "AI Features", - "mcp": "MCP", - "a2a": "A2A", - "plugins": "__MISSING__:Plugins", - "apiEndpoints": "API Endpoints", - "batchFiles": "Files", + "auditSecuritySection": "Audyt i Bezpieczeństwo", + "devtoolsSection": "Narzędzia deweloperskie", + "configurationSection": "Konfiguracja", + "aiFeaturesSection": "Funkcje AI", + "mcp": "Serwer MCP", + "a2a": "Serwer A2A", + "plugins": "Wtyczki", + "apiEndpoints": "Endpoints API", + "batchFiles": "Pliki", "analyticsEvals": "Evals", - "analyticsSearch": "Search", - "analyticsUtilization": "Utilization", - "analyticsComboHealth": "Combo Health", - "analyticsCompression": "Compression", - "costsBudget": "Budget", - "costsFreeTiers": "__MISSING__:Free-Tier Budget", - "costsFreeTiersSubtitle": "__MISSING__:Monthly free-token allowances", - "freeProviderRankings": "__MISSING__:Free Provider Rankings", - "freeProviderRankingsSubtitle": "__MISSING__:Best free providers ranked by model ELO scores", - "costsQuotaShare": "Quota Sharing", - "costsPricing": "Pricing", - "logsProxy": "Proxy Logs", - "logsConsole": "Console", - "logsActivity": "Activity", - "auditMcp": "MCP Audit", + "analyticsSearch": "Wyszukiwanie", + "analyticsUtilization": "Utylizacja", + "analyticsComboHealth": "Kondycja Combo", + "analyticsCompression": "Kompresja", + "costsBudget": "Budżet", + "costsFreeTiers": "Budżet darmowych zasobów", + "costsFreeTiersSubtitle": "Miesięczne limity darmowych tokens", + "freeProviderRankings": "Rankingi darmowych Providers", + "freeProviderRankingsSubtitle": "Najlepsi darmowi providers sklasyfikowani według wyników ELO model", + "costsQuotaShare": "Dzielenie quota", + "costsPricing": "Cennik", + "logsProxy": "Logi proxy", + "logsConsole": "Konsola", + "logsActivity": "Aktywność", + "auditMcp": "Audyt MCP", "auditA2a": "Audyt A2A", - "settingsGeneral": "General", - "settingsAppearance": "Appearance", - "settingsAi": "AI Settings", - "settingsSecurity": "Security", - "settingsAccessTokens": "__MISSING__:Access Tokens", - "settingsFeatureFlags": "Flagi funkcyjne", - "settingsAuthz": "__MISSING__:Authz", + "settingsGeneral": "Magazyn", + "settingsAppearance": "Wygląd", + "settingsAi": "Ustawienia AI", + "settingsSecurity": "Bezpieczeństwo", + "settingsAccessTokens": "Access tokens", + "settingsFeatureFlags": "Flagi funkcji", + "settingsAuthz": "Authz", "settingsRouting": "Routing", - "settingsResilience": "Resilience", - "modelLockout": "__MISSING__:Model Lockout", - "settingsAdvanced": "Advanced", + "settingsResilience": "Odporność", + "modelLockout": "Blokada model", + "settingsAdvanced": "Zaawansowane", "omniProxySection": "OmniProxy", - "quotaTracker": "Provider Quota", - "providerQuota": "Provider Quota", + "quotaTracker": "Quota provider", + "providerQuota": "Quota provider", "runtime": "Runtime", - "consoleLogs": "Console Logs", - "globalRouting": "Global Routing", + "consoleLogs": "Logi konsoli", + "globalRouting": "Routing globalny", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", - "agenticFeaturesSection": "Agentic Features", - "otherFeaturesSection": "Other Features", - "compressionContextGroup": "Compression Context", - "gamificationGroup": "Gamification", - "toolsGroup": "Tools", - "integrationsGroup": "Integrations", + "agenticFeaturesSection": "Funkcje agentów", + "otherFeaturesSection": "Inne funkcje", + "compressionContextGroup": "Kontekst kompresji", + "gamificationGroup": "Grywalizacja", + "toolsGroup": "Narzędzia", + "integrationsGroup": "Integracje", "proxyGroup": "Proxy", - "costsParametersGroup": "Costs Parameters", - "auditGroup": "Audit", + "costsParametersGroup": "Parametry kosztów", + "auditGroup": "Audyt", "batchGroup": "Batch", - "homeSubtitle": "Dashboard overview", - "providersSubtitle": "Manage AI providers", - "quotaTrackerSubtitle": "Track usage limits", - "providerQuotaSubtitle": "Track provider usage limits", - "runtimeSubtitle": "Realtime resilience & sessions", - "contextCombosSubtitle": "Combine compression engines", - "cliToolsSubtitle": "Configure CLI runtimes", - "agentsSubtitle": "Manage local agents", - "cloudAgentsSubtitle": "Manage cloud-based agents", - "apiEndpointsSubtitle": "Expose custom endpoints", - "proxySubtitle": "HTTP proxy settings", - "mitmProxySubtitle": "MITM interception", - "oneProxySubtitle": "Public proxy gateway", - "leaderboard": "Leaderboard", - "profile": "Profile", + "homeSubtitle": "Przegląd Dashboard", + "providersSubtitle": "Zarządzanie AI providers", + "quotaTrackerSubtitle": "Śledzenie limitów użycia", + "providerQuotaSubtitle": "Śledzenie limitów użycia provider", + "runtimeSubtitle": "Niezawodność i sesje w czasie rzeczywistym", + "contextCombosSubtitle": "Łączenie combos kompresji", + "cliToolsSubtitle": "Konfiguracja środowisk uruchomieniowych CLI", + "agentsSubtitle": "Zarządzanie lokalnymi agentami", + "cloudAgentsSubtitle": "Zarządzanie agentami chmurowymi", + "apiEndpointsSubtitle": "Udostępnianie niestandardowych endpoints", + "proxySubtitle": "Ustawienia proxy HTTP", + "mitmProxySubtitle": "Przechwytywanie MITM", + "oneProxySubtitle": "Publiczna brama proxy", + "leaderboard": "Tabela liderów", + "profile": "Profil", "tokens": "Tokens", - "leaderboardSubtitle": "Rankings and achievements", - "profileSubtitle": "Account and preferences", - "tokensSubtitle": "Token usage and budgets", - "usageSubtitle": "Traffic and usage stats", - "analyticsComboHealthSubtitle": "Combo target reliability", - "analyticsUtilizationSubtitle": "Provider utilization", - "costsSubtitle": "Spend breakdown", - "cacheSubtitle": "Cache hit rates", - "analyticsCompressionSubtitle": "Token savings stats", - "analyticsSearchSubtitle": "Search tool analytics", - "analyticsEvalsSubtitle": "Eval suite results", - "providerStats": "__MISSING__:Provider Stats", - "providerStatsSubtitle": "__MISSING__:Latency and performance metrics", - "logsSubtitle": "Application logs", - "logsProxySubtitle": "Proxy traffic logs", - "consoleLogsSubtitle": "Console output", - "logsActivitySubtitle": "User activity log", - "healthSubtitle": "System health check", - "costsPricingSubtitle": "Per-model pricing rules", - "costsBudgetSubtitle": "Budget limits", - "costsQuotaShareSubtitle": "Share provider quotas across keys", - "auditLogSubtitle": "Authorization audit", - "auditMcpSubtitle": "MCP server audit", - "auditA2aSubtitle": "A2A protocol audit", - "translatorSubtitle": "Format conversion", - "playgroundSubtitle": "Test prompts live", - "searchToolsSubtitle": "Search tool registry", - "memorySubtitle": "Persistent agent memory", - "omniSkillsSubtitle": "Sandbox skill registry", - "agentSkillsSubtitle": "A2A skill registry", - "mcpSubtitle": "MCP server controls", - "a2aSubtitle": "A2A protocol server", - "pluginsSubtitle": "__MISSING__:Plugin marketplace & installs", - "mediaSubtitle": "Cached media files", - "batchFilesSubtitle": "Batch input/output files", - "settingsSubtitle": "All settings", - "settingsGeneralSubtitle": "App basics", - "settingsAppearanceSubtitle": "Theme and layout", - "settingsAiSubtitle": "AI behavior defaults", - "globalRoutingSubtitle": "Global routing rules", - "settingsResilienceSubtitle": "Retries and breakers", - "settingsAdvancedSubtitle": "Power user options", - "settingsSecuritySubtitle": "Auth and encryption", - "settingsAccessTokensSubtitle": "__MISSING__:Scoped CLI tokens for remote mode", - "settingsFeatureFlagsSubtitle": "Przełącz możliwości systemu", - "settingsSidebar": "Sidebar", - "settingsSidebarSubtitle": "Customize sidebar layout", - "settingsAuthzSubtitle": "__MISSING__:Route inventory and bypass policy", - "docsSubtitle": "Documentation", - "issuesSubtitle": "Report a bug", - "changelogSubtitle": "Release notes", - "costsQuotaPlans": "__MISSING__:Plans & Quotas", - "costsQuotaPlansSubtitle": "__MISSING__:Configure plans by provider", - "activity": "__MISSING__:Activity", - "activitySubtitle": "__MISSING__:Friendly feed of recent events", - "logsGroup": "__MISSING__:Logs", - "systemGroup": "__MISSING__:System", - "costsOverview": "__MISSING__:Overview", - "costsOverviewSubtitle": "__MISSING__:Consolidated cost analysis", - "agentBridge": "__MISSING__:Agent Bridge", - "agentBridgeSubtitle": "__MISSING__:Intercept IDE agent traffic", - "trafficInspector": "__MISSING__:Traffic Inspector", - "trafficInspectorSubtitle": "__MISSING__:Monitor LLM calls + debug any HTTPS traffic", - "cliCode": "__MISSING__:CLI Code", - "cliCodeSubtitle": "__MISSING__:Code tools pointing to OmniRoute", - "cliAgents": "__MISSING__:CLI Agents", - "cliAgentsSubtitle": "__MISSING__:Autonomous CLI agents", - "acpAgents": "__MISSING__:ACP Agents", - "acpAgentsSubtitle": "__MISSING__:CLIs spawned by OmniRoute", - "skipToContent": "__MISSING__:Skip to content", - "unpinSection": "__MISSING__:Unpin section", - "pinSectionOpen": "__MISSING__:Pin section open", - "reloadPage": "__MISSING__:Reload Page", - "dragReorderSection": "__MISSING__:Drag to reorder section", - "dragReorderItem": "__MISSING__:Drag to reorder", - "cannotHide": "__MISSING__:This item cannot be hidden", - "alwaysVisible": "__MISSING__:Always visible", - "groupSeparatorLabel": "__MISSING__:Separator" + "leaderboardSubtitle": "Rankingi i osiągnięcia", + "profileSubtitle": "Konto i preferencje", + "tokensSubtitle": "Zużycie tokens i budżety", + "usageSubtitle": "Statystyki ruchu i użycia", + "analyticsComboHealthSubtitle": "Niezawodność celów combo", + "analyticsUtilizationSubtitle": "Utylizacja provider", + "costsSubtitle": "Szczegóły wydatków", + "cacheSubtitle": "Wskaźniki trafień Cache", + "analyticsCompressionSubtitle": "Statystyki oszczędności tokens", + "analyticsSearchSubtitle": "Analityka narzędzia wyszukiwania", + "analyticsEvalsSubtitle": "Wyniki zestawu Eval", + "providerStats": "Statystyki Provider", + "providerStatsSubtitle": "Metryki opóźnienia i wydajności", + "logsSubtitle": "Logi aplikacji", + "logsProxySubtitle": "Logi ruchu proxy", + "consoleLogsSubtitle": "Wyjście konsoli", + "logsActivitySubtitle": "Log aktywności użytkownika", + "healthSubtitle": "Kontrola stanu systemu", + "costsPricingSubtitle": "Reguły cennika dla poszczególnych model", + "costsBudgetSubtitle": "Limity budżetowe", + "costsQuotaShareSubtitle": "Dzielenie quota provider między kluczami", + "auditLogSubtitle": "Audyt autoryzacji", + "auditMcpSubtitle": "Audyt serwera MCP", + "auditA2aSubtitle": "Audyt protokołu A2A", + "translatorSubtitle": "Konwersja formatu", + "playgroundSubtitle": "Testowanie promptów na żywo", + "searchToolsSubtitle": "Rejestr narzędzi wyszukiwania", + "memorySubtitle": "Trwała pamięć agenta", + "omniSkillsSubtitle": "Rejestr umiejętności Sandbox", + "agentSkillsSubtitle": "Rejestr umiejętności A2A", + "mcpSubtitle": "Sterowanie serwerem MCP", + "a2aSubtitle": "Serwer protokołu A2A", + "pluginsSubtitle": "Sklep z wtyczkami i instalacje", + "mediaSubtitle": "Pliki multimedialne w cache", + "batchFilesSubtitle": "Pliki wejściowe/wyjściowe batch", + "settingsSubtitle": "Wszystkie ustawienia", + "settingsGeneralSubtitle": "Baza danych i kopie zapasowe", + "settingsAppearanceSubtitle": "Motyw i układ", + "settingsAiSubtitle": "Domyślne zachowania AI", + "globalRoutingSubtitle": "Globalne reguły routing", + "settingsResilienceSubtitle": "Ponowne próby i bezpieczniki", + "settingsAdvancedSubtitle": "Opcje dla zaawansowanych użytkowników", + "settingsSecuritySubtitle": "Autoryzacja i szyfrowanie", + "settingsAccessTokensSubtitle": "Tokens CLI z zakresem dla trybu zdalnego", + "settingsFeatureFlagsSubtitle": "Przełączanie funkcji systemu", + "settingsSidebar": "Panel boczny", + "settingsSidebarSubtitle": "Dostosowanie układu panelu bocznego", + "settingsAuthzSubtitle": "Inwentaryzacja tras i polityka pomijania", + "docsSubtitle": "Dokumentacja", + "issuesSubtitle": "Zgłaszanie błędów", + "changelogSubtitle": "Lista zmian", + "costsQuotaPlans": "Plany i Quotas", + "costsQuotaPlansSubtitle": "Konfiguracja planów według provider", + "activity": "Aktywność", + "activitySubtitle": "Przejrzysty kanał ostatnich zdarzeń", + "logsGroup": "Logi", + "systemGroup": "System", + "costsOverview": "Przegląd", + "costsOverviewSubtitle": "Skonsolidowana analiza kosztów", + "agentBridge": "Agent Bridge", + "agentBridgeSubtitle": "Przechwytywanie ruchu agenta IDE", + "trafficInspector": "Traffic Inspector", + "trafficInspectorSubtitle": "Monitorowanie połączeń LLM + debugowanie dowolnego ruchu HTTPS", + "cliCode": "CLI Code", + "cliCodeSubtitle": "Narzędzia kodowania wskazujące na OmniRoute", + "cliAgents": "CLI Agents", + "cliAgentsSubtitle": "Autonomiczni CLI agents", + "acpAgents": "ACP Agents", + "acpAgentsSubtitle": "CLI uruchamiane przez OmniRoute", + "skipToContent": "Przejdź do zawartości", + "unpinSection": "Odepnij sekcję", + "pinSectionOpen": "Przypnij sekcję jako otwartą", + "reloadPage": "Odśwież stronę", + "dragReorderSection": "Przeciągnij, aby zmienić kolejność sekcji", + "dragReorderItem": "Przeciągnij, aby zmienić kolejność", + "cannotHide": "Tego elementu nie można ukryć", + "alwaysVisible": "Zawsze widoczne", + "groupSeparatorLabel": "Separator", + "discovery": "Discovery", + "discoverySubtitle": "Skanowanie providers w celu wyszukania darmowego dostępu" }, "webhooks": { - "title": "Haki internetowe", - "description": "Skonfiguruj wywołania zwrotne HTTP dla zdarzeń systemowych.", - "configuredWebhooks": "Skonfigurowane webhooki", - "configuredWebhooksDesc": "Zarządzaj punktami końcowymi dostarczania, subskrybowanymi zdarzeniami, statusem i wysyłaniami testowymi.", - "addWebhook": "Dodaj webhooka", - "editWebhook": "Edytuj webhooka", - "name": "Imię", - "namePlaceholder": "Monitorowanie produkcji", + "title": "Webhooks", + "description": "Konfiguruj wywołania zwrotne HTTP dla zdarzeń systemowych.", + "configuredWebhooks": "Skonfigurowane webhooks", + "configuredWebhooksDesc": "Zarządzaj endpoints dostarczania, subskrybowanymi zdarzeniami, statusem i wysyłkami testowymi.", + "addWebhook": "Dodaj webhook", + "editWebhook": "Edytuj webhook", + "name": "Nazwa", + "namePlaceholder": "Monitorowanie produkcyjne", "unnamedWebhook": "Nienazwany webhook", - "url": "Adres URL punktu końcowego", - "events": "Wydarzenia", - "allEvents": "Wszystkie wydarzenia", - "secret": "Sekret", - "secretPlaceholder": "Pozostaw puste, aby automatycznie wygenerować sekret", - "secretEditPlaceholder": "Pozostaw puste, aby zachować bieżący sekret", - "status": "Stan", + "url": "URL endpoint", + "events": "Zdarzenia", + "allEvents": "Wszystkie zdarzenia", + "secret": "Secret", + "secretPlaceholder": "Pozostaw puste, aby automatycznie wygenerować secret", + "secretEditPlaceholder": "Pozostaw puste, aby zachować obecny secret", + "status": "Status", "active": "Aktywny", "inactive": "Nieaktywny", "errored": "Błąd", - "total": "Razem", - "lastTriggered": "Ostatnio uruchomione", - "actions": "Działania", - "enabled": "Włączone", - "enabledDesc": "Wyłączone webhooki pozostają zapisane, ale nie otrzymują dostaw.", + "total": "Łącznie", + "lastTriggered": "Ostatnio wywołany", + "actions": "Akcje", + "enabled": "Włączony", + "enabledDesc": "Wyłączone webhooks pozostają zapisane, ale nie otrzymują dostarczeń.", "refresh": "Odśwież", - "loading": "Ładowanie webhooków...", + "loading": "Ładowanie webhooks...", "never": "Nigdy", - "failureCount": "{count, plural, =0 {no failures} one {# failure} other {# failures}}", + "failureCount": "{count, plural, =0 {brak niepowodzeń} one {# niepowodzenie} other {# niepowodzeń}}", "testWebhook": "Wyślij test", - "testSuccess": "Testowy webhook został wysłany pomyślnie.", - "testFailed": "Testowanie webhooka nie powiodło się.", - "saveSuccess": "Webhook został pomyślnie zapisany.", - "saveFailed": "Nie udało się zapisać webhooka.", - "loadFailed": "Nie udało się załadować webhooków.", + "testSuccess": "Testowy webhook wysłany pomyślnie.", + "testFailed": "Testowy webhook nie powiódł się.", + "saveSuccess": "Webhook zapisany pomyślnie.", + "saveFailed": "Nie udało się zapisać webhook.", + "loadFailed": "Nie udało się załadować webhooks.", "delete": "Usuń", - "deleteConfirm": "Czy na pewno chcesz usunąć tego webhooka?", - "deleteSuccess": "Webhook został pomyślnie usunięty.", - "deleteFailed": "Nie udało się usunąć webhooka.", + "deleteConfirm": "Czy na pewno chcesz usunąć ten webhook?", + "deleteSuccess": "Webhook usunięty pomyślnie.", + "deleteFailed": "Nie udało się usunąć webhook.", "edit": "Edytuj", "enable": "Włącz", "disable": "Wyłącz", - "noWebhooks": "Nie skonfigurowano jeszcze żadnych webhooków.", - "signatureTitle": "Podpisy webhooka", - "signatureDescription": "Każda dostawa zawiera nagłówek X-Webhook-Signature podpisany za pomocą HMAC-SHA256 przy użyciu sekretu webhook. Zanim zaufasz ładunkowi, sprawdź podpis.", + "noWebhooks": "Nie skonfigurowano jeszcze żadnych webhooks.", + "signatureTitle": "Sygnatury webhook", + "signatureDescription": "Każde dostarczenie zawiera nagłówek X-Webhook-Signature podpisany za pomocą HMAC-SHA256 przy użyciu secret webhook. Zweryfikuj sygnaturę przed zaufaniem payload.", "wizard": { - "cancel": "__MISSING__:Cancel", - "step1Title": "__MISSING__:Select Integration", - "step2Title": "__MISSING__:Configure Target", - "step3Title": "__MISSING__:Events & Test", - "back": "__MISSING__:Back", - "next": "__MISSING__:Next", - "finish": "__MISSING__:Finish", - "step1Desc": "__MISSING__:Select the target integration system for this webhook." + "cancel": "Anuluj", + "step1Title": "Wybierz integrację", + "step2Title": "Skonfiguruj cel", + "step3Title": "Zdarzenia i test", + "back": "Wstecz", + "next": "Dalej", + "finish": "Zakończ", + "step1Desc": "Wybierz docelowy system integracji dla tego webhook." }, "howItWorks": { - "step1": "__MISSING__:Choose an integration provider (e.g. Slack, Discord, custom webhook) and set up the connection details.", - "step2": "__MISSING__:Configure system events to subscribe to (e.g. completion errors, model fallbacks, or usage limits).", - "step3": "__MISSING__:Verify the configuration by sending a test payload to make sure the endpoint receives it.", - "step4": "__MISSING__:Secure your endpoint by validating the X-Webhook-Signature HMAC-SHA256 header using the webhook's secret.", - "title": "__MISSING__:How Webhooks Work", - "customOnly": "__MISSING__:Only applicable for custom endpoint integrations.", - "hmacRecipeTitle": "__MISSING__:HMAC Verification Recipe", - "hmacRecipe": "__MISSING__:To verify webhook payloads in Node.js, compute the HMAC-SHA256 of the raw request body using your secret key. Compare it to the X-Webhook-Signature header using timingSafeEqual.", - "timeoutNote": "__MISSING__:Webhook deliveries have a timeout of 10 seconds.", - "retryNote": "__MISSING__:Failed deliveries are retried up to 5 times with exponential backoff.", - "docsLink": "__MISSING__:Read the full Webhooks developer guide", - "hmacRecipePython": "__MISSING__:Python HMAC verification: hmac.new(secret, body, hashlib.sha256).hexdigest()", - "hmacRecipeBash": "__MISSING__:Bash HMAC verification: echo -n \"$body\" | openssl dgst -sha256 -hmac \"$secret\"" + "step1": "Wybierz provider integracji (np. Slack, Discord, niestandardowy webhook) i skonfiguruj szczegóły połączenia.", + "step2": "Skonfiguruj zdarzenia systemowe do subskrybowania (np. błędy generowania, fallback modeli lub limity użycia).", + "step3": "Zweryfikuj konfigurację, wysyłając testowy payload, aby upewnić się, że endpoint go odbiera.", + "step4": "Zabezpiecz swój endpoint, walidując nagłówek X-Webhook-Signature HMAC-SHA256 przy użyciu secret webhook.", + "title": "Jak działają webhooks", + "customOnly": "Dotyczy tylko niestandardowych integracji z endpoint.", + "hmacRecipeTitle": "Metoda weryfikacji HMAC", + "hmacRecipe": "Aby zweryfikować payload webhook w Node.js, oblicz HMAC-SHA256 surowej treści żądania przy użyciu klucza secret. Porównaj go z nagłówkiem X-Webhook-Signature za pomocą timingSafeEqual.", + "timeoutNote": "Dostarczenia webhook mają limit czasu 10 sekund.", + "retryNote": "Nieudane dostarczenia są ponawiane do 5 razy z wykładniczym backoff.", + "docsLink": "Przeczytaj pełny przewodnik dewelopera dotyczący webhooks", + "hmacRecipePython": "Weryfikacja HMAC w Pythonie: hmac.new(secret, body, hashlib.sha256).hexdigest()", + "hmacRecipeBash": "Weryfikacja HMAC w Bashu: echo -n \"$body\" | openssl dgst -sha256 -hmac \"$secret\"" }, "deliveries": { - "title": "__MISSING__:Delivery Logs", - "loadFailed": "__MISSING__:Failed to load webhook delivery logs.", - "empty": "__MISSING__:No deliveries recorded yet. Trigger an event or send a test payload.", - "status": "__MISSING__:Status", - "event": "__MISSING__:Event", - "latency": "__MISSING__:Latency", - "at": "__MISSING__:Sent At" + "title": "Logi dostarczeń", + "loadFailed": "Nie udało się załadować logów dostarczeń webhook.", + "empty": "Nie zarejestrowano jeszcze żadnych dostarczeń. Wywołaj zdarzenie lub wyślij testowy payload.", + "status": "Status", + "event": "Zdarzenie", + "latency": "Opóźnienie", + "at": "Wysłano o" }, "kinds": { - "comingSoon": "__MISSING__:Coming Soon", - "slack": "__MISSING__:Slack", - "slackDesc": "__MISSING__:Post system events directly into a Slack channel", - "telegram": "__MISSING__:Telegram", - "telegramDesc": "__MISSING__:Send event messages using a Telegram bot", - "discord": "__MISSING__:Discord", - "discordDesc": "__MISSING__:Deliver real-time updates directly to a Discord server", - "custom": "__MISSING__:Custom Webhook", - "customDesc": "__MISSING__:Deliver system event payloads to any HTTPS endpoint", - "email": "__MISSING__:Email Notification", - "emailDesc": "__MISSING__:Receive summary updates via email", - "pagerduty": "__MISSING__:PagerDuty", - "pagerdutyDesc": "__MISSING__:Trigger alerts on PagerDuty for critical system issues", - "teams": "__MISSING__:Microsoft Teams", - "teamsDesc": "__MISSING__:Forward system notifications to Microsoft Teams channels" + "comingSoon": "Wkrótce", + "slack": "Slack", + "slackDesc": "Publikuj zdarzenia systemowe bezpośrednio na kanale Slack", + "telegram": "Telegram", + "telegramDesc": "Wysyłaj wiadomości o zdarzeniach za pomocą bota Telegram", + "discord": "Discord", + "discordDesc": "Dostarczaj aktualizacje w czasie rzeczywistym bezpośrednio na serwer Discord", + "custom": "Niestandardowy webhook", + "customDesc": "Dostarczaj payloady zdarzeń systemowych do dowolnego endpoint HTTPS", + "email": "Powiadomienie e-mail", + "emailDesc": "Otrzymuj podsumowania aktualizacji e-mailem", + "pagerduty": "PagerDuty", + "pagerdutyDesc": "Wywołuj alerty w PagerDuty dla krytycznych problemów systemowych", + "teams": "Microsoft Teams", + "teamsDesc": "Przekazuj powiadomienia systemowe do kanałów Microsoft Teams" }, - "testPayloadSent": "__MISSING__:Test Payload Sent", - "testResponse": "__MISSING__:Test Response", + "testPayloadSent": "Wysłano testowy payload", + "testResponse": "Odpowiedź testowa", "validateUrl": { - "checking": "__MISSING__:Checking URL...", - "ok": "__MISSING__:URL is valid", - "blockedPrivate": "__MISSING__:URL is a blocked private address", - "invalidUrl": "__MISSING__:Invalid URL format" + "checking": "Sprawdzanie URL...", + "ok": "URL jest prawidłowy", + "blockedPrivate": "URL to zablokowany adres prywatny", + "invalidUrl": "Nieprawidłowy format URL" }, "custom": { - "endpointUrl": "__MISSING__:Endpoint URL", - "endpointUrlPlaceholder": "__MISSING__:https://api.yourdomain.com/webhook", - "secretKey": "__MISSING__:Secret Key", - "secretKeyPlaceholder": "__MISSING__:Enter secret key or leave blank to auto-generate", - "secretKeyHint": "__MISSING__:Used to sign the payload header for authentication." + "endpointUrl": "URL endpoint", + "endpointUrlPlaceholder": "https://api.yourdomain.com/webhook", + "secretKey": "Klucz secret", + "secretKeyPlaceholder": "Wprowadź klucz secret lub pozostaw puste, aby wygenerować automatycznie", + "secretKeyHint": "Służy do podpisywania nagłówka payload do uwierzytelniania." }, "discord": { - "webhookUrl": "__MISSING__:Discord Webhook URL", - "webhookUrlPlaceholder": "__MISSING__:https://discord.com/api/webhooks/...", - "webhookUrlHint": "__MISSING__:The webhook URL copied from your Discord channel integration settings.", - "tutorial": "__MISSING__:How to create a Discord webhook:" + "webhookUrl": "URL webhook Discord", + "webhookUrlPlaceholder": "https://discord.com/api/webhooks/...", + "webhookUrlHint": "URL webhook skopiowany z ustawień integracji kanału Discord.", + "tutorial": "Jak utworzyć webhook Discord:" }, "slack": { - "webhookUrl": "__MISSING__:Slack Webhook URL", - "webhookUrlPlaceholder": "__MISSING__:https://hooks.slack.com/services/...", - "webhookUrlHint": "__MISSING__:The webhook URL copied from your Slack Incoming Webhooks integration.", - "tutorial": "__MISSING__:How to create a Slack webhook:" + "webhookUrl": "URL webhook Slack", + "webhookUrlPlaceholder": "https://hooks.slack.com/services/...", + "webhookUrlHint": "URL webhook skopiowany z integracji Slack Incoming Webhooks.", + "tutorial": "Jak utworzyć webhook Slack:" }, "telegram": { - "botToken": "__MISSING__:Telegram Bot Token", - "botTokenPlaceholder": "__MISSING__:123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ", - "botTokenHint": "__MISSING__:The HTTP API token received from @BotFather when creating your bot.", - "chatId": "__MISSING__:Telegram Chat ID / Channel", - "chatIdPlaceholder": "__MISSING__:-100123456789 or @channelname", - "chatIdHint": "__MISSING__:The unique numerical identifier or public username of the chat/channel.", - "tutorial": "__MISSING__:How to configure Telegram webhook:" + "botToken": "Token bota Telegram", + "botTokenPlaceholder": "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ", + "botTokenHint": "Token HTTP API otrzymany od @BotFather podczas tworzenia bota.", + "chatId": "Telegram ID czatu / kanał", + "chatIdPlaceholder": "-100123456789 or @channelname", + "chatIdHint": "Unikalny identyfikator numeryczny lub publiczna nazwa użytkownika czatu/kanału.", + "tutorial": "Jak skonfigurować webhook Telegram:" } }, "compliance": { "auditTitle": "Audyt", - "auditDescription": "Przeglądaj zdarzenia dotyczące zgodności i wywołania narzędzi MCP z jednego widoku operacyjnego.", - "complianceTab": "Zgodność", - "mcpTab": "Audyt MPK", - "title": "Audyt zgodności", - "description": "Zdarzenia związane z polityką, dostępem, dostawcą i bezpieczeństwem rejestrowane w dzienniku kontroli zgodności.", + "auditDescription": "Przeglądaj zdarzenia zgodności (compliance) i wywołania narzędzi MCP z jednego widoku operacyjnego.", + "complianceTab": "Compliance", + "mcpTab": "Audyt MCP", + "title": "Audyt Compliance", + "description": "Zdarzenia dotyczące zasad, dostępu, providers i bezpieczeństwa zarejestrowane w logu audytu Compliance.", "eventType": "Typ zdarzenia", - "eventTypePlaceholder": "Filtruj według typu akcji lub zdarzenia", - "severity": "Dotkliwość", - "allSeverities": "Wszystkie dotkliwości", - "info": "Informacje", + "eventTypePlaceholder": "Filtruj według akcji lub typu zdarzenia", + "severity": "Poziom ważności", + "allSeverities": "Wszystkie poziomy ważności", + "info": "Info", "warning": "Ostrzeżenie", "critical": "Krytyczny", "sourceIp": "Źródłowy adres IP", @@ -1269,945 +1275,961 @@ "action": "Akcja", "result": "Wynik", "details": "Szczegóły", - "timestamp": "Znacznik czasu", + "timestamp": "Sygnatura czasowa", "from": "Od", "to": "Do", "refresh": "Odśwież", "export": "Eksportuj", "clearFilters": "Wyczyść filtry", "loading": "Ładowanie zdarzeń audytu...", - "showing": "Wyświetlanie {count} z {total} wydarzeń", + "showing": "Wyświetlanie {count} z {total} zdarzeń", "policyViolation": "Naruszenie zasad", - "accessDenied": "Odmowa dostępu", - "injectionBlocked": "Wtrysk zablokowany", - "noEvents": "Nie zarejestrowano żadnych zdarzeń związanych ze zgodnością.", - "failedFetch": "Nie udało się pobrać dziennika kontroli zgodności.", - "viewDetails": "Zobacz szczegóły", + "accessDenied": "Brak dostępu", + "injectionBlocked": "Zablokowano próby wstrzyknięcia (injection)", + "noEvents": "Brak zarejestrowanych zdarzeń Compliance.", + "failedFetch": "Nie udało się pobrać logu audytu Compliance.", + "viewDetails": "Pokaż szczegóły", "closeDetails": "Zamknij szczegóły", "notAvailable": "—", - "system": "systemu", + "system": "system", "previous": "Poprzedni", "next": "Następny", - "mcpAudit": "Audyt MPK", + "mcpAudit": "Audyt MCP", "mcpAuditDesc": "Wpisy audytu wywołań narzędzi zarejestrowane przez serwer MCP.", - "failedFetchMcpAudit": "Nie udało się pobrać dziennika audytu MCP.", + "failedFetchMcpAudit": "Nie udało się pobrać logu audytu MCP.", "tool": "Narzędzie", "toolPlaceholder": "Filtruj według nazwy narzędzia", "duration": "Czas trwania", "apiKey": "Klucz API", - "output": "Wyjście", + "output": "Dane wyjściowe", "allResults": "Wszystkie wyniki", "success": "Sukces", "failure": "Niepowodzenie", - "noMcpEvents": "Nie zarejestrowano żadnych zdarzeń audytu MCP.", + "noMcpEvents": "Brak zarejestrowanych zdarzeń audytu MCP.", "a2aAudit": "Audyt A2A", - "a2aAuditDesc": "Ścieżka audytu wykonania zadania zarejestrowana przez serwer A2A.", + "a2aAuditDesc": "Ścieżka audytu wykonywania zadań zarejestrowana przez serwer A2A.", "a2aShowingTasks": "Wyświetlanie {count} z {total} zadań", - "a2aSkill": "Umiejętność", - "a2aSkillPlaceholder": "Filtruj według nazwy umiejętności", + "a2aSkill": "Skill", + "a2aSkillPlaceholder": "Filtruj według nazwy skill", "a2aState": "Stan", "a2aAllStates": "Wszystkie stany", - "a2aStateSubmitted": "Przesłane", - "a2aStateWorking": "Pracujący", - "a2aStateCompleted": "Ukończono", - "a2aStateFailed": "Nie udało się", + "a2aStateSubmitted": "Przesłano", + "a2aStateWorking": "W toku", + "a2aStateCompleted": "Zakończono", + "a2aStateFailed": "Nie powiodło się", "a2aStateCancelled": "Anulowano", - "a2aTaskId": "Identyfikator zadania", - "a2aEvents": "Wydarzenia", + "a2aTaskId": "ID zadania", + "a2aEvents": "Zdarzenia", "a2aArtifacts": "Artefakty", - "a2aNoTasks": "Nie zarejestrowano żadnych zadań A2A.", + "a2aNoTasks": "Brak zarejestrowanych zadań A2A.", "a2aLoadingTasks": "Ładowanie zadań A2A...", - "actor": "__MISSING__:Actor", - "actorPlaceholder": "__MISSING__:Filter by actor", + "actor": "Aktor", + "actorPlaceholder": "Filtruj według aktora", "eventTypes": { - "apiKey.activate": "__MISSING__:API Key Activated", - "apiKey.ban": "__MISSING__:API Key Banned", - "apiKey.deactivate": "__MISSING__:API Key Deactivated", - "apiKey.regenerate": "__MISSING__:API Key Regenerated", - "apiKey.scopes.grant": "__MISSING__:API Key Scopes Granted", - "apiKey.scopes.revoke": "__MISSING__:API Key Scopes Revoked", - "apiKey.scopes.update": "__MISSING__:API Key Scopes Updated", - "apiKey.unban": "__MISSING__:API Key Unbanned", - "auth.login.error": "__MISSING__:Login Error", - "auth.login.failed": "__MISSING__:Login Failed", - "auth.login.locked": "__MISSING__:Login Locked", - "auth.login.misconfigured": "__MISSING__:Login Misconfigured", - "auth.login.setup_required": "__MISSING__:Login Setup Required", - "auth.login.success": "__MISSING__:Login Success", - "auth.logout.success": "__MISSING__:Logout Success", - "compliance.cleanup": "__MISSING__:Compliance Cleanup", - "provider.credentials.applied": "__MISSING__:Provider Credentials Applied", - "provider.credentials.batch_revoked": "__MISSING__:Provider Credentials Batch Revoked", - "provider.credentials.bulk_created": "__MISSING__:Provider Credentials Bulk Created", - "provider.credentials.bulk_imported": "__MISSING__:Provider Credentials Bulk Imported", - "provider.credentials.created": "__MISSING__:Provider Credentials Created", - "provider.credentials.imported": "__MISSING__:Provider Credentials Imported", - "provider.credentials.revoked": "__MISSING__:Provider Credentials Revoked", - "provider.credentials.updated": "__MISSING__:Provider Credentials Updated", - "provider.validation.ssrf_blocked": "__MISSING__:Provider SSRF Blocked", - "quota.plan.updated": "__MISSING__:Quota Plan Updated", - "quota.pool.created": "__MISSING__:Quota Pool Created", - "quota.pool.deleted": "__MISSING__:Quota Pool Deleted", - "quota.pool.updated": "__MISSING__:Quota Pool Updated", - "quota.store.driver_changed": "__MISSING__:Quota Store Driver Changed", - "server.start": "__MISSING__:Server Start", - "service.reveal_api_key": "__MISSING__:Service API Key Revealed", - "settings.update": "__MISSING__:Settings Updated", - "settings.update_failed": "__MISSING__:Settings Update Failed", - "sync.token.created": "__MISSING__:Sync Token Created", - "sync.token.revoked": "__MISSING__:Sync Token Revoked" + "apiKey.activate": "Klucz API aktywowany", + "apiKey.ban": "Klucz API zablokowany", + "apiKey.deactivate": "Klucz API zdezaktywowany", + "apiKey.regenerate": "Klucz API wygenerowany ponownie", + "apiKey.scopes.grant": "Przyznano uprawnienia (scopes) klucza API", + "apiKey.scopes.revoke": "Odebrano uprawnienia (scopes) klucza API", + "apiKey.scopes.update": "Zaktualizowano uprawnienia (scopes) klucza API", + "apiKey.unban": "Klucz API odblokowany", + "auth.login.error": "Błąd logowania", + "auth.login.failed": "Logowanie nie powiodło się", + "auth.login.locked": "Konto zablokowane", + "auth.login.misconfigured": "Błędna konfiguracja logowania", + "auth.login.setup_required": "Wymagana konfiguracja logowania", + "auth.login.success": "Zalogowano pomyślnie", + "auth.logout.success": "Wylogowano pomyślnie", + "compliance.cleanup": "Czyszczenie Compliance", + "provider.credentials.applied": "Zastosowano dane uwierzytelniające provider", + "provider.credentials.batch_revoked": "Grupowo cofnięto dane uwierzytelniające provider", + "provider.credentials.bulk_created": "Masowo utworzono dane uwierzytelniające provider", + "provider.credentials.bulk_imported": "Masowo zaimportowano dane uwierzytelniające provider", + "provider.credentials.created": "Utworzono dane uwierzytelniające provider", + "provider.credentials.imported": "Zaimportowano dane uwierzytelniające provider", + "provider.credentials.revoked": "Cofnięto dane uwierzytelniające provider", + "provider.credentials.updated": "Zaktualizowano dane uwierzytelniające provider", + "provider.validation.ssrf_blocked": "Zablokowano SSRF provider", + "quota.plan.updated": "Zaktualizowano plan quota", + "quota.pool.created": "Utworzono pulę quota", + "quota.pool.deleted": "Usunięto pulę quota", + "quota.pool.updated": "Zaktualizowano pulę quota", + "quota.store.driver_changed": "Zmieniono sterownik przechowywania quota", + "server.start": "Uruchomienie serwera", + "service.reveal_api_key": "Ujawniono klucz API usługi", + "settings.update": "Ustawienia zaktualizowane", + "settings.update_failed": "Aktualizacja ustawień nie powiodła się", + "sync.token.created": "Utworzono token synchronizacji", + "sync.token.revoked": "Cofnięto token synchronizacji" } }, "themesPage": { - "title": "Themes", - "description": "Choose a preset theme or create your own with a single color", - "presetColors": "Popular colors", - "customTheme": "Custom theme", - "customThemeDesc": "Click create theme and pick one color", - "createTheme": "Create theme", - "activePreset": "Active theme" + "title": "Motywy", + "description": "Wybierz gotowy motyw lub utwórz własny za pomocą jednego koloru", + "presetColors": "Popularne kolory", + "customTheme": "Własny motyw", + "customThemeDesc": "Kliknij utwórz motyw i wybierz jeden kolor", + "createTheme": "Utwórz motyw", + "activePreset": "Aktywny motyw" }, "header": { - "logout": "Wyloguj się", + "logout": "Wyloguj", "language": "Język", - "providers": "Dostawcy", - "providerDescription": "Zarządzaj połączeniami dostawców AI", - "combos": "Kombinacje", - "comboDescription": "Kombinacje modeli z rezerwą", - "usage": "Wykorzystanie i analityka", - "usageDescription": "Monitoruj wykorzystanie interfejsu API, zużycie tokenów i dzienniki żądań", + "providers": "Providers", + "providerDescription": "Zarządzanie połączeniami z AI providers", + "combos": "Combos", + "comboDescription": "Model combos z fallback", + "usage": "Użycie i analizy", + "usageDescription": "Monitorowanie użycia API, zużycia tokens i logów żądań", "analytics": "Analityka", - "analyticsDescription": "Wykresy, trendy i spostrzeżenia dotyczące ocen", - "cliTools": "Narzędzia interfejsu wiersza polecenia", - "cliToolsDescription": "Skonfiguruj narzędzia CLI", - "home": "Dom", + "analyticsDescription": "Wykresy, trendy i wyniki ewaluacji", + "cliTools": "Narzędzia CLI", + "cliToolsDescription": "Konfiguracja narzędzi CLI", + "home": "Główna", "homeDescription": "Witamy w OmniRoute", "endpoint": "Endpoints", - "endpointDescription": "Manage proxy endpoints, MCP, A2A, and API endpoints", - "mcp": "MCP", - "mcpDescription": "Model Context Protocol server management and tools", - "a2a": "A2A", - "a2aDescription": "Agent-to-Agent protocol tasks and observability", + "endpointDescription": "Zarządzanie proxy endpoints, MCP, A2A oraz API endpoints", + "mcp": "Serwer MCP", + "mcpDescription": "Zarządzanie i narzędzia serwera Model Context Protocol", + "a2a": "Serwer A2A", + "a2aDescription": "Zadania i obserwowalność protokołu Agent-to-Agent", "settings": "Ustawienia", - "settingsDescription": "Zarządzaj swoimi preferencjami", - "openaiCompatible": "Kompatybilny z OpenAI", - "anthropicCompatible": "Kompatybilny z antropią", + "settingsDescription": "Zarządzanie preferencjami", + "openaiCompatible": "Kompatybilne z OpenAI", + "anthropicCompatible": "Kompatybilne z Anthropic", "media": "Media", - "mediaDescription": "Generate images, videos, and music", - "themes": "Themes", - "themesDescription": "Choose a color theme for the whole dashboard panel", - "costsDescription": "Track spending, analyze trends, and manage your AI budget across all providers", - "cacheDescription": "Monitor provider prompt cache efficiency and local semantic response reuse.", - "limitsDescription": "Configure rate limits and quotas per API key and provider", - "runtimeDescription": "Live runtime observability — circuit breakers, cooldowns, model lockouts, sessions and quota alerts", - "apiManagerDescription": "Manage API keys and access control for your OmniRoute instance", - "batchDescription": "Process large volumes of requests asynchronously with batched API calls", - "contextCavemanDescription": "Rule-based message compression, language packs, analytics and output mode controls.", - "contextRtkDescription": "Command-aware compression for tool output, terminal logs and build results.", - "contextCombosDescription": "Define how engines are combined for different routing scenarios.", - "changelogDescription": "Stay up to date with the latest platform features and announcements.", - "agentsDescription": "Manage and configure AI agent tools: Codex, Devin, Jules, and custom agents", - "cloudAgentsDescription": "Orchestrate cloud-based AI agents with live task tracking and plan approval", - "memoryDescription": "Persistent conversational memory with semantic search and FTS5 full-text indexing", - "skillsDescription": "Install and manage sandbox skills for automated prompt and tool execution", - "agentSkillsDescription": "Agent-ready skills catalog with one-click URL copy for AI client integration", - "translatorDescription": "Translate and test prompts across API formats: OpenAI ↔ Claude ↔ Gemini", - "playgroundDescription": "Test prompts interactively with live provider responses and format inspection", - "searchToolsDescription": "Search analytics, provider breakdown, cache hit rates, and cost tracking", - "logsDescription": "Real-time request logs, error traces, and streaming event inspector", - "auditDescription": "Compliance audit trail of API key usage, MCP tool calls, and policy events", - "webhooksDescription": "Configure webhook endpoints to receive real-time event notifications", - "healthDescription": "System health overview: providers, circuit breakers, rate limits, and database", - "proxyDescription": "Configure upstream proxy settings for outbound provider connections", - "apiEndpointsDescription": "Manage custom API endpoint configurations and routing overrides", - "batchFilesDescription": "Browse and manage batch job output files and results", - "analyticsEvalsDescription": "Model evaluation results and performance benchmarks", - "analyticsSearchDescription": "Search query analytics, cache hit rates, and cost tracking", - "analyticsUtilizationDescription": "Provider utilization metrics and capacity planning", - "analyticsComboHealthDescription": "Real-time health and performance of combo routing configurations", - "analyticsCompressionDescription": "Context compression analytics and token savings", - "costsBudgetDescription": "Budget limits and spending alerts per API key and provider", - "costsPricingDescription": "Custom pricing configuration for token cost calculations", - "logsProxyDescription": "Upstream proxy request logs and traffic inspection", - "logsConsoleDescription": "Application console output and debug logs", - "logsActivityDescription": "Audit trail of user actions and system events", - "auditMcpDescription": "MCP tool invocation audit trail and compliance records", + "mediaDescription": "Generowanie obrazów, wideo i muzyki", + "themes": "Motywy", + "themesDescription": "Wybór motywu kolorystycznego dla całego panelu dashboard", + "costsDescription": "Śledzenie wydatków, analiza trendów i zarządzanie budżetem AI u wszystkich providers", + "cacheDescription": "Monitorowanie wydajności prompt cache u provider i lokalnego ponownego użycia odpowiedzi semantycznych.", + "limitsDescription": "Konfiguracja rate limit i quota dla każdego klucza API i provider", + "runtimeDescription": "Obserwowalność runtime na żywo — circuit breakers, cooldowns, blokady model, sesje i alerty quota", + "apiManagerDescription": "Zarządzanie kluczami API i kontrolą dostępu dla instancji OmniRoute", + "batchDescription": "Asynchroniczne przetwarzanie dużych ilości żądań za pomocą pakietowych połączeń API", + "contextCavemanDescription": "Oparta na regułach kompresja wiadomości, pakiety językowe, analizy i sterowanie trybem wyjściowym.", + "contextRtkDescription": "Kompresja uwzględniająca polecenia dla danych wyjściowych narzędzi, logów terminala i wyników budowania.", + "contextCombosDescription": "Definiowanie sposobu łączenia silników dla różnych scenariuszy routingu.", + "changelogDescription": "Bądź na bieżąco z najnowszymi funkcjami platformy i ogłoszeniami.", + "agentsDescription": "Zarządzanie i konfiguracja narzędzi agentów AI: Codex, Devin, Jules oraz własnych agentów", + "cloudAgentsDescription": "Orkiestracja chmurowych agentów AI z możliwością śledzenia zadań na żywo i zatwierdzania planów", + "memoryDescription": "Trwała pamięć konwersacyjna z wyszukiwaniem semantycznym i pełnotekstowym indeksowaniem FTS5", + "skillsDescription": "Instalacja i zarządzanie umiejętnościami sandbox do automatycznego wykonywania promptów i narzędzi", + "agentSkillsDescription": "Katalog umiejętności gotowych dla agentów z kopiowaniem URL jednym kliknięciem dla integracji z klientami AI", + "translatorDescription": "Tłumaczenie i testowanie promptów w różnych formatach API: OpenAI ↔ Claude ↔ Gemini", + "playgroundDescription": "Interaktywne testowanie promptów z odpowiedziami od provider na żywo i inspekcją formatu", + "searchToolsDescription": "Analiza wyszukiwania, podział na provider, wskaźniki trafień pamięci podręcznej i śledzenie kosztów", + "logsDescription": "Logi żądań w czasie rzeczywistym, ślady błędów i inspektor zdarzeń strumieniowych", + "auditDescription": "Ścieżka audytu zgodności dla użycia klucza API, wywołań narzędzi MCP i zdarzeń zasad", + "webhooksDescription": "Konfiguracja webhook endpoints w celu odbierania powiadomień o zdarzeniach w czasie rzeczywistym", + "healthDescription": "Przegląd stanu systemu: providers, circuit breakers, rate limits oraz baza danych", + "proxyDescription": "Konfiguracja ustawień proxy upstream dla wychodzących połączeń z provider", + "apiEndpointsDescription": "Zarządzanie niestandardowymi konfiguracjami API endpoint i nadpisywaniem routingu", + "batchFilesDescription": "Przeglądanie i zarządzanie plikami wynikowymi oraz rezultatami zadań batch", + "analyticsEvalsDescription": "Wyniki ewaluacji model i testy wydajnościowe", + "analyticsSearchDescription": "Analiza zapytań wyszukiwania, wskaźniki trafień pamięci podręcznej i śledzenie kosztów", + "analyticsUtilizationDescription": "Metryki wykorzystania provider i planowanie wydajności", + "analyticsComboHealthDescription": "Stan i wydajność konfiguracji combo routing w czasie rzeczywistym", + "analyticsCompressionDescription": "Analityka kompresji kontekstu i oszczędności token", + "costsBudgetDescription": "Limity budżetowe i alerty o wydatkach dla każdego klucza API i provider", + "costsPricingDescription": "Niestandardowa konfiguracja cennika do obliczeń kosztów token", + "logsProxyDescription": "Logi żądań proxy upstream i inspekcja ruchu", + "logsConsoleDescription": "Wyjście konsoli aplikacji i logi debugowania", + "logsActivityDescription": "Ścieżka audytu działań użytkownika i zdarzeń systemowych", + "auditMcpDescription": "Ścieżka audytu wywołań narzędzi MCP i rejestry zgodności", "auditA2a": "Audyt A2A", - "auditA2aDescription": "Ścieżka audytu wykonania zadania A2A, zmiany stanów i zapisy wywołań umiejętności", - "settingsGeneralDescription": "Storage, database, and general instance configuration", - "settingsAppearanceDescription": "Theme, branding, and visual customization", - "settingsAiDescription": "AI behaviors, thinking budgets, vision, and memory settings", - "settingsSecurityDescription": "Authentication, authorization, and access control settings", - "featureFlags": "Flagi funkcyjne", - "featureFlagsDescription": "Możliwości systemu sterowania i funkcje eksperymentalne", - "featureFlagsActive": "{count} aktywny", - "featureFlagsInactive": "{count} nieaktywny", - "featureFlagsOverrides": "{count} Zastąpienia DB", + "auditA2aDescription": "Ścieżka audytu wykonywania zadań A2A, przejść stanów i rejestrów wywołań umiejętności", + "settingsGeneralDescription": "Ustawienia pamięci masowej, bazy danych, kopii zapasowych i retencji", + "settingsAppearanceDescription": "Ustawienia motywu, brandingu i dostosowywania wizualnego", + "settingsAiDescription": "Zachowania AI, budżety na myślenie, wizja i ustawienia pamięci", + "settingsSecurityDescription": "Ustawienia uwierzytelniania, autoryzacji i kontroli dostępu", + "featureFlags": "Flagi funkcji", + "featureFlagsDescription": "Kontrola możliwości systemu i funkcji eksperymentalnych", + "featureFlagsActive": "{count} aktywne", + "featureFlagsInactive": "{count} nieaktywne", + "featureFlagsOverrides": "{count} nadpisań DB", "featureFlagsSearch": "Szukaj flag...", - "featureFlagsCategoryAll": "Wszystko", + "featureFlagsCategoryAll": "Wszystkie", "featureFlagsCategorySecurity": "Bezpieczeństwo", "featureFlagsCategoryNetwork": "Sieć", "featureFlagsCategoryPolicies": "Zasady", - "featureFlagsCategoryRuntime": "Czas wykonania", - "featureFlagsCategoryCli": "interfejs wiersza polecenia", - "featureFlagsCategoryHealth": "Zdrowie", + "featureFlagsCategoryRuntime": "Runtime", + "featureFlagsCategoryCli": "CLI", + "featureFlagsCategoryHealth": "Stan", "featureFlagsSourceDb": "DB", "featureFlagsSourceEnv": "ENV", - "featureFlagsSourceDefault": "OBR", - "featureFlagsReset": "Zresetuj", - "featureFlagsResetAll": "Zresetuj wszystkie nadpisania", - "featureFlagsResetAllConfirm": "Czy na pewno chcesz zresetować wszystkie zastąpienia flag funkcji? Spowoduje to przywrócenie wszystkich flag do wartości ENV lub wartości domyślnych.", - "featureFlagsRestartRequired": "Aby złożyć wniosek, wymagane jest ponowne uruchomienie", - "featureFlagsNoResults": "Żadna flaga nie pasuje do Twojego wyszukiwania", - "featureFlagsSaved": "Flaga zaktualizowana", + "featureFlagsSourceDefault": "DEF", + "featureFlagsReset": "Resetuj", + "featureFlagsResetAll": "Resetuj wszystkie nadpisania", + "featureFlagsResetAllConfirm": "Czy na pewno chcesz zresetować wszystkie nadpisania flag funkcji? Spowoduje to przywrócenie wszystkich flag do ich wartości ENV lub domyślnych.", + "featureFlagsRestartRequired": "Wymagany restart w celu zastosowania", + "featureFlagsNoResults": "Brak flag pasujących do wyszukiwania", + "featureFlagsSaved": "Zaktualizowano flagę", "featureFlagsError": "Nie udało się zaktualizować flagi", - "settingsRoutingDescription": "Routing rules, model aliases, combo defaults, and degradation settings", - "settingsResilienceDescription": "Circuit breaker, retry, and fallback configuration", - "settingsAdvancedDescription": "Advanced payload rules, request limits, and proxy API settings", - "mitmProxyDescription": "Configure MITM proxy settings for traffic inspection and debugging", - "oneProxyDescription": "Configure 1Proxy settings for advanced proxy chaining", - "omniSkillsDescription": "__MISSING__:Install and manage sandbox skills for automated prompt and tool execution" + "settingsRoutingDescription": "Zasady routingu, aliasy model, domyślne ustawienia combo i ustawienia degradacji", + "settingsResilienceDescription": "Konfiguracja circuit breaker, retry i fallback", + "settingsAdvancedDescription": "Zaawansowane reguły ładunku, limity żądań i ustawienia proxy API", + "mitmProxyDescription": "Konfiguracja ustawień proxy MITM w celu inspekcji ruchu i debugowania", + "oneProxyDescription": "Konfiguracja ustawień 1Proxy dla zaawansowanego łańcuchowania proxy", + "omniSkillsDescription": "Instalacja i zarządzanie umiejętnościami sandbox do automatycznego wykonywania promptów i narzędzi" }, "home": { "quickStart": "Szybki start", - "quickStartDesc": "Zacznij działać w 4 krokach. Łącz dostawców, kieruj modele, monitoruj wszystko.", + "quickStartDesc": "Uruchom system w 4 krokach. Podłącz providers, kieruj models, monitoruj wszystko.", "fullDocs": "Pełna dokumentacja", - "step1Title": "1. Utwórz klucz API", - "step1Desc": "Przejdź do Endpoint -> Zarejestrowane klucze. Wygeneruj jeden klucz na środowisko.", - "step2Title": "2. Połącz dostawców", - "step2Desc": "Dodaj konta w Providers. Obsługuje OAuth, klucz API i bezpłatne poziomy.", - "step3Title": "3. Wskaż swojego klienta", - "step3Desc": "Ustaw podstawowy adres URL na {url} w swoim kliencie IDE lub API.", + "step1Title": "1. Utwórz API key", + "step1Desc": "Przejdź do API Keys. Wygeneruj jeden klucz na środowisko.", + "step2Title": "2. Połącz providers", + "step2Desc": "Dodaj konta w Providers. Obsługuje OAuth, API Key oraz darmowe plany.", + "step3Title": "3. Skieruj klienta", + "step3Desc": "Ustaw bazowy URL na {url} w IDE lub kliencie API.", "step4Title": "4. Monitoruj i optymalizuj", - "step4Desc": "Śledź tokeny, koszty i błędy w Dziennikach żądań i Analytics.", - "providersOverview": "Przegląd dostawców", - "configuredOf": "{configured} skonfigurowany z {total} dostępnych dostawców", - "noModelsAvailable": "Brak dostępnych modeli tego dostawcy.", - "noProvidersConfigured": "Nie skonfigurowano jeszcze żadnego dostawcy", - "addProvider": "Dodaj dostawcę", + "step4Desc": "Śledź tokens, koszty i błędy w Request Logs i Analytics.", + "providersOverview": "Przegląd Providers", + "configuredOf": "{configured} ze skonfigurowanych {total} dostępnych providers", + "noModelsAvailable": "Brak dostępnych models dla tego provider.", + "noProvidersConfigured": "Brak skonfigurowanych providers", + "addProvider": "Dodaj provider", "configureFirst": "Najpierw skonfiguruj połączenie w {providers}", - "configureProvider": "Skonfiguruj dostawcę", - "modelAvailable": "Dostępny model {count}", - "modelsAvailable": "Dostępne modele {count}", - "connectionsActive": "{count} połączenie aktywne", + "configureProvider": "Skonfiguruj Provider", + "modelAvailable": "Dostępny {count} model", + "modelsAvailable": "Dostępne {count} models", + "connectionsActive": "{count} aktywne połączenie", "connectionsActivePlural": "{count} aktywne połączenia", - "copyModelName": "Skopiuj nazwę modelu", + "copyModelName": "Kopiuj nazwę model", "documentation": "Dokumentacja", - "healthMonitor": "Monitor zdrowia", + "healthMonitor": "Monitor stanu", "reportIssue": "Zgłoś problem", - "activeError": "{active} aktywny · {errors} błąd", + "activeError": "{active} aktywne · {errors} błąd", "oauthLabel": "OAuth", - "apiKeyLabel": "Klucz API", - "requestsShort": "{count} wymagania", - "providerModelsTitle": "{provider} - Modele", + "apiKeyLabel": "API Key", + "requestsShort": "{count} żądań", + "providerModelsTitle": "{provider} - Models", "copiedModel": "Skopiowano: {model}", - "aliasLabel": "pseudonim", - "updateNow": "Zaktualizuj", + "aliasLabel": "alias", + "updateNow": "Aktualizuj teraz", "updating": "Aktualizowanie...", "updateAvailableDesc": "Dostępna jest nowa wersja. Kliknij, aby zaktualizować.", - "updateStarted": "Aktualizacja rozpoczęta...", - "reloadingPageAutomatically": "Automatyczne ładowanie strony...", - "providerTopology": "Topologia dostawcy" + "updateStarted": "Rozpoczęto aktualizację...", + "reloadingPageAutomatically": "Automatyczne przeładowywanie strony...", + "providerTopology": "Topologia Provider" }, "analytics": { "title": "Analityka", - "usageAnalyticsTitle": "__MISSING__:Usage Analytics", - "diversityScoreTitle": "Różnorodność dostawców", - "diversityScoreDesc": "__MISSING__:Provider concentration snapshot for the recent traffic window.", - "diversityShannonEntropy": "__MISSING__:Shannon entropy", - "diversityWindow": "__MISSING__:Window: {count} reqs · Last {mins} mins", - "diversityHealthy": "__MISSING__:Healthy Distribution", - "diversityRiskHigh": "__MISSING__:High Vendor Lock-in Risk", - "diversityRiskModerate": "__MISSING__:Moderate Distribution", - "diversityScoreLabel": "__MISSING__:score", - "diversityHigherExplanation": "__MISSING__:Higher values mean traffic is spread across multiple providers.", - "diversityNoData": "__MISSING__:No recent usage data available.", - "chartRequests": "__MISSING__:Requests", - "chartInput": "__MISSING__:Input", - "chartOutput": "__MISSING__:Output", - "chartTotal": "__MISSING__:Total", - "chartCost": "__MISSING__:Cost", - "chartShare": "__MISSING__:Share", - "chartServiceTier": "__MISSING__:Service Tier", - "chartServiceTierSplit": "__MISSING__:Fast / Standard cost split", - "chartCostPct": "__MISSING__:{pct}% of cost", - "chartUsageDetail": "__MISSING__:Usage Detail", - "chartCacheRead": "__MISSING__:Cache read", - "chartCostByProvider": "__MISSING__:Cost by Provider", - "chartNoCostData": "__MISSING__:No cost data", - "chartModelUsageOverTime": "__MISSING__:Model Usage Over Time", - "chartNoData": "__MISSING__:No data", - "chartWeekly": "__MISSING__:Weekly", - "chartModelBreakdown": "__MISSING__:Model Breakdown", - "chartModel": "__MISSING__:Model", - "chartProvider": "__MISSING__:Provider", - "chartProviderBreakdown": "__MISSING__:Provider Breakdown", - "chartDate": "__MISSING__:Date", - "chartRequestsByProviderDate": "__MISSING__:Requests by Provider & Date", - "filterAllKeys": "__MISSING__:All Keys", - "filterSearchKeys": "__MISSING__:Search keys…", - "filterNoKeysMatch": "__MISSING__:No keys match", - "filterOneKey": "__MISSING__:1 key", - "filterMultipleKeys": "__MISSING__:{count} keys", - "rangeToday": "__MISSING__:Today", - "rangeYesterday": "__MISSING__:Yesterday", - "rangeLast3Days": "__MISSING__:Last 3 days", - "rangeThisWeek": "__MISSING__:This week", - "rangeLast14Days": "__MISSING__:Last 14 days", - "rangeThisMonth": "__MISSING__:This month", - "rangeQuickSelect": "__MISSING__:Quick Select", - "rangeStart": "__MISSING__:Start", - "rangeEnd": "__MISSING__:End", - "rangeCancel": "__MISSING__:Cancel", - "rangeApply": "__MISSING__:Apply", - "rangeErrorInvalid": "__MISSING__:Start must be before end", - "period1D": "__MISSING__:1D", - "period7D": "__MISSING__:7D", - "period30D": "__MISSING__:30D", - "period90D": "__MISSING__:90D", - "periodYTD": "__MISSING__:YTD", - "periodAll": "__MISSING__:All", - "totalTokens": "__MISSING__:Total Tokens", - "inputTokens": "__MISSING__:Input Tokens", - "outputTokens": "__MISSING__:Output Tokens", - "estCost": "__MISSING__:Est. Cost", - "infraTitle": "__MISSING__:Infrastructure", - "infraAccounts": "__MISSING__:Accounts", - "infraProviders": "__MISSING__:Providers", - "infraApiKeys": "__MISSING__:API Keys", - "infraModels": "__MISSING__:Models", - "perfTitle": "__MISSING__:Performance", - "perfAvgTokens": "__MISSING__:Avg Tokens/Req", - "perfCostReq": "__MISSING__:Cost/Req", - "perfIoRatio": "__MISSING__:I/O Ratio", - "perfFastReq": "__MISSING__:Fast Requests", - "highlightsTitle": "__MISSING__:Highlights", - "highlightsTopModel": "__MISSING__:Top Model", - "highlightsTopProvider": "__MISSING__:Top Provider", - "highlightsBusiestDay": "__MISSING__:Busiest Day", - "highlightsDiversity": "__MISSING__:Diversity", - "highlightsFallbackRate": "__MISSING__:Fallback Rate", - "customRange": "__MISSING__:Custom", - "overviewDescription": "Monitoruj wzorce wykorzystania interfejsu API, zużycie tokenów, koszty i trendy aktywności u wszystkich dostawców i modeli.", - "evalsDescription": "Uruchom pakiety ewaluacyjne, aby przetestować i zweryfikować punkty końcowe LLM. Porównaj jakość modelu, wykryj regresje i porównaj opóźnienia.", + "usageAnalyticsTitle": "Analityka użycia", + "diversityScoreTitle": "Dywersyfikacja Provider", + "diversityScoreDesc": "Migawka koncentracji Provider dla ostatniego okna ruchu.", + "diversityShannonEntropy": "Entropia Shannona", + "diversityWindow": "Okno: {count} reqs · Ostatnie {mins} min", + "diversityHealthy": "Zrównoważona dystrybucja", + "diversityRiskHigh": "Wysokie ryzyko vendor lock-in", + "diversityRiskModerate": "Umiarkowana dystrybucja", + "diversityScoreLabel": "wynik", + "diversityHigherExplanation": "Wyższe wartości oznaczają, że ruch jest rozproszony na wielu providers.", + "diversityNoData": "Brak dostępnych ostatnich danych użycia.", + "chartRequests": "Żądania", + "chartInput": "Input", + "chartOutput": "Output", + "chartTotal": "Razem", + "chartCost": "Koszt", + "chartShare": "Udział", + "chartServiceTier": "Service Tier", + "chartServiceTierSplit": "Podział kosztów Fast / Standard", + "chartCostPct": "{pct}% kosztu", + "chartUsageDetail": "Szczegóły użycia", + "chartCacheRead": "Odczyt z cache", + "chartCostByProvider": "Koszt per Provider", + "chartNoCostData": "Brak danych o kosztach", + "chartModelUsageOverTime": "Użycie models w czasie", + "chartNoData": "Brak danych", + "chartWeekly": "Tygodniowo", + "chartModelBreakdown": "Rozbicie na models", + "chartModel": "Model", + "chartProvider": "Provider", + "chartProviderBreakdown": "Rozbicie na providers", + "chartDate": "Data", + "chartRequestsByProviderDate": "Żądania według Provider i daty", + "filterAllKeys": "Wszystkie klucze", + "filterSearchKeys": "Szukaj kluczy…", + "filterNoKeysMatch": "Brak pasujących kluczy", + "filterOneKey": "1 klucz", + "filterMultipleKeys": "{count} kluczy", + "rangeToday": "Dzisiaj", + "rangeYesterday": "Wczoraj", + "rangeLast3Days": "Ostatnie 3 dni", + "rangeThisWeek": "W tym tygodniu", + "rangeLast14Days": "Ostatnie 14 dni", + "rangeThisMonth": "W tym miesiącu", + "rangeQuickSelect": "Szybki wybór", + "rangeStart": "Start", + "rangeEnd": "Koniec", + "rangeCancel": "Anuluj", + "rangeApply": "Zastosuj", + "rangeErrorInvalid": "Data początkowa musi być przed końcową", + "period1D": "1D", + "period7D": "7D", + "period30D": "30D", + "period90D": "90D", + "periodYTD": "YTD", + "periodAll": "Wszystkie", + "totalTokens": "Razem tokens", + "inputTokens": "Wejściowe tokens", + "outputTokens": "Wyjściowe tokens", + "estCost": "Szac. koszt", + "infraTitle": "Infrastruktura", + "infraAccounts": "Konta", + "infraProviders": "Providers", + "infraApiKeys": "Klucze API", + "infraModels": "Models", + "perfTitle": "Wydajność", + "perfAvgTokens": "Śr. tokens/req", + "perfCostReq": "Koszt/req", + "perfIoRatio": "Stosunek I/O", + "perfFastReq": "Szybkie żądania", + "highlightsTitle": "Najważniejsze", + "highlightsTopModel": "Najlepszy model", + "highlightsTopProvider": "Najlepszy Provider", + "highlightsBusiestDay": "Najbardziej aktywny dzień", + "highlightsDiversity": "Dywersyfikacja", + "highlightsFallbackRate": "Wskaźnik fallback", + "customRange": "Niestandardowy", + "overviewDescription": "Monitorowanie wzorców użycia API, zużycia tokens, kosztów i trendów aktywności u wszystkich providers i dla wszystkich models.", + "evalsDescription": "Uruchamianie pakietów ewaluacyjnych do testowania i walidacji endpoints LLM. Porównywanie jakości models, wykrywanie regresji i benchmarking opóźnień.", "overview": "Przegląd", "evals": "Ewaluacje", - "utilization": "Wykorzystanie", - "utilizationDescription": "Trendy wykorzystania kwoty dostawcy i śledzenie limitów szybkości", - "modelStatus": "Stan modelu", - "modelStatusCooldown": "Czas odnowienia", - "modelStatusUnavailable": "Niedostępne", + "utilization": "Utylizacja", + "utilizationDescription": "Trendy użycia quota dla Provider i śledzenie rate limit", + "modelStatus": "Status model", + "modelStatusCooldown": "Cooldown", + "modelStatusUnavailable": "Niedostępny", "modelStatusError": "Błąd", - "comboHealth": "Zdrowie Kombinacji", - "comboHealthDescription": "Kwota na poziomie kombinacji, dystrybucja użycia i metryki wydajności", - "compressionAnalyticsTitle": "Compression Analytics", - "compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats.", - "autoRoutingTotalAutoRequests": "Łączna liczba żądań automatycznych", + "comboHealth": "Status combo", + "comboHealthDescription": "Parametry quota, dystrybucji użycia i wydajności na poziomie combo", + "compressionAnalyticsTitle": "Analityka kompresji", + "compressionAnalyticsDescription": "Analityka kompresji — oszczędność tokens, rozbicie na tryby i statystyki provider.", + "autoRoutingTotalAutoRequests": "Wszystkie automatyczne żądania", "autoRoutingAvgSelectionScore": "Średni wynik wyboru", - "autoRoutingExplorationRate": "Tempo eksploracji", - "autoRoutingLkgpHitRate": "Współczynnik trafień LKGP", - "autoRoutingRequestsByVariant": "Żądania według wariantu", - "autoRoutingTopRoutedProviders": "Najlepsi dostawcy tras", - "comboHealthWorstQuotaLeft": "Pozostał najgorszy limit", - "comboHealthUsageSkew": "Przekrzywienie użytkowania", + "autoRoutingExplorationRate": "Wskaźnik eksploracji", + "autoRoutingLkgpHitRate": "Wskaźnik trafień LKGP", + "autoRoutingRequestsByVariant": "Żądania według wariantów", + "autoRoutingTopRoutedProviders": "Najczęściej wybierani providers", + "comboHealthWorstQuotaLeft": "Najmniej pozostałej quota", + "comboHealthUsageSkew": "Odchylenie użycia", "comboHealthSuccessRate": "Wskaźnik sukcesu", - "comboHealthQuotaHealth": "Zdrowie kwotowe", + "comboHealthQuotaHealth": "Status quota", "comboHealthRequests": "Żądania", - "comboHealthTokens": "Żetony", + "comboHealthTokens": "Tokens", "comboHealthAvgLatency": "Średnie opóźnienie", - "comboHealthTotalRequests": "Łączna liczba żądań", + "comboHealthTotalRequests": "Wszystkie żądania", "comboHealthExecutionTargets": "Cele wykonania", "comboHealthSuccess": "Sukces", "comboHealthLatency": "Opóźnienie", - "comboHealthQuota": "Limit", - "comboHealthTitle": "Kombinowane zdrowie", - "comboHealthUnableToLoad": "Nie można wczytać zdrowia kombinacji", - "comboHealthGettingStarted": "Rozpoczęcie", - "compressionAnalyticsTotalRequests": "Łączna liczba żądań", - "compressionAnalyticsTokensSaved": "Tokeny zapisane", + "comboHealthQuota": "Quota", + "comboHealthTitle": "Status combo", + "comboHealthUnableToLoad": "Nie można załadować statusu combo", + "comboHealthGettingStarted": "Pierwsze kroki", + "compressionAnalyticsTotalRequests": "Wszystkie żądania", + "compressionAnalyticsTokensSaved": "Oszczędzone tokens", "compressionAnalyticsAvgSavings": "Średnie oszczędności", "compressionAnalyticsAvgDuration": "Średni czas trwania", - "compressionAnalyticsReceipts": "Wpływy", - "compressionAnalyticsFallbacks": "Awarie", - "compressionAnalyticsPromptTokens": "Tokeny podpowiedzi", - "compressionAnalyticsCompletionTokens": "Żetony ukończenia", - "compressionAnalyticsTotalTokens": "Suma tokenów", - "compressionAnalyticsCacheTokens": "Tokeny pamięci podręcznej", - "compressionAnalyticsNoDataYet": "Nie ma jeszcze danych dotyczących kompresji", - "searchAnalyticsTotalSearches": "Całkowita liczba wyszukiwań", - "searchAnalyticsCacheHitRate": "Współczynnik trafień w pamięci podręcznej", - "searchAnalyticsTotalCost": "Całkowity koszt", + "compressionAnalyticsReceipts": "Potwierdzenia", + "compressionAnalyticsFallbacks": "Fallbacks", + "compressionAnalyticsPromptTokens": "Prompt tokens", + "compressionAnalyticsCompletionTokens": "Completion tokens", + "compressionAnalyticsTotalTokens": "Razem tokens", + "compressionAnalyticsCacheTokens": "Cache tokens", + "compressionAnalyticsNoDataYet": "Brak danych kompresji", + "searchAnalyticsTotalSearches": "Wszystkie wyszukiwania", + "searchAnalyticsCacheHitRate": "Wskaźnik trafień cache", + "searchAnalyticsTotalCost": "Łączny koszt", "searchAnalyticsAvgResponse": "Średnia odpowiedź", - "searchAnalyticsNoSearchesYet": "Nie ma jeszcze żadnych wyszukiwań", - "providerUtilizationTitle": "Wykorzystanie dostawcy", - "providerUtilizationFailedToLoad": "Nie udało się załadować danych o wykorzystaniu", - "providerUtilizationNoData": "Brak dostępnych danych o wykorzystaniu", - "providerUtilizationGettingStarted": "Rozpoczęcie", - "providerUtilizationLatestSnapshot": "Najnowsza migawka przydziału", - "providerUtilizationRemainingCapacity": "Pozostała pojemność" + "searchAnalyticsNoSearchesYet": "Brak wyszukiwań", + "providerUtilizationTitle": "Utylizacja Provider", + "providerUtilizationFailedToLoad": "Nie udało się załadować danych utylizacji", + "providerUtilizationNoData": "Brak dostępnych danych utylizacji", + "providerUtilizationGettingStarted": "Pierwsze kroki", + "providerUtilizationLatestSnapshot": "Ostatnia migawka quota", + "providerUtilizationRemainingCapacity": "Pozostała wydajność" }, "apiManager": { "title": "Klucze API", "createKey": "Utwórz klucz API", "key": "Klucz", "revokeKey": "Unieważnij klucz", - "revokeConfirm": "Czy na pewno chcesz unieważnić ten klucz API?", - "noKeys": "Nie ma jeszcze kluczy API", - "noKeysDesc": "Utwórz swój pierwszy klucz API, aby uwierzytelniać żądania kierowane do punktu końcowego", + "revokeConfirm": "Czy na pewno unieważnić ten klucz API?", + "noKeys": "Brak kluczy API", + "noKeysDesc": "Utwórz pierwszy klucz API, aby uwierzytelniać żądania do endpoint", "keyLabel": "Etykieta klucza", "permissions": "Uprawnienia", "expiresAt": "Wygasa", "never": "Nigdy", - "revoke": "Odwołaj", + "revoke": "Unieważnij", "showKey": "Pokaż klucz", "hideKey": "Ukryj klucz", "copyKey": "Skopiuj klucz API", - "allModels": "Wszystkie modele", - "selectedModels": "Wybrane modele", + "allModels": "Wszystkie models", + "selectedModels": "Wybrane Models", "readOnly": "Tylko do odczytu", - "fullAccess": "Pełny dostęp", + "fullAccess": "Pełen dostęp", "keyManagement": "Zarządzanie kluczami API", - "keyManagementDesc": "Twórz klucze API i zarządzaj nimi w celu uwierzytelniania żądań kierowanych do punktu końcowego", - "totalKeys": "Razem klucze", - "restricted": "Ograniczone", + "keyManagementDesc": "Tworzenie i zarządzanie kluczami API do uwierzytelniania żądań do endpoint", + "totalKeys": "Łączna liczba kluczy", + "restricted": "Ograniczony", "totalRequests": "Łączna liczba żądań", - "modelsAvailable": "Dostępne modele", + "modelsAvailable": "Dostępne models", "registeredKeys": "Zarejestrowane klucze", - "keysRegistered": "Zarejestrowano {count} kluczy", - "keyRegistered": "Zarejestrowano klucz {count}", - "keysSecurityNote": "Każdy klucz izoluje śledzenie użycia i może zostać odwołany niezależnie. Klucze są maskowane po utworzeniu ze względów bezpieczeństwa.", - "createFirstKey": "Utwórz swój pierwszy klucz", - "name": "Imię", + "keysRegistered": "{count} keys registered", + "keyRegistered": "{count} key registered", + "keysSecurityNote": "Każdy klucz izoluje śledzenie użycia i może być unieważniony niezależnie. Klucze są maskowane po utworzeniu ze względów bezpieczeństwa.", + "createFirstKey": "Utwórz pierwszy klucz", + "name": "Nazwa", "usage": "Użycie", "created": "Utworzono", - "actions": "Działania", - "reqs": "wymagania", - "neverUsed": "Nigdy nie używany", + "actions": "Akcje", + "reqs": "żądania", + "neverUsed": "Nigdy nieużywany", "deleteConfirm": "Usunąć ten klucz API?", - "usageTips": "Wskazówki dotyczące użytkowania", - "tipAuth": "Użyj kluczy API w nagłówku autoryzacji jako Nośnik YOUR_KEY", - "tipSecure": "Klucze są wyświetlane tylko raz podczas tworzenia — przechowuj je bezpiecznie", - "tipSeparate": "Utwórz osobne klucze dla różnych klientów lub środowisk", - "tipRestrict": "Ogranicz klucze do określonych modeli, aby zapewnić większe bezpieczeństwo i kontrolę kosztów", + "usageTips": "Wskazówki dotyczące użycia", + "tipAuth": "Używaj kluczy API w nagłówku Authorization jako Bearer YOUR_KEY", + "tipSecure": "Klucze są pokazywane tylko raz podczas tworzenia — należy przechowywać je w bezpieczny sposób", + "tipSeparate": "Tworzenie osobnych kluczy dla różnych klientów lub środowisk", + "tipRestrict": "Ograniczaj klucze do określonych models w celu lepszego bezpieczeństwa i kontroli kosztów", "keyName": "Nazwa klucza", - "keyNamePlaceholder": "np. klucz produkcyjny, klucz rozwojowy", - "keyNameDesc": "Wybierz opisową nazwę identyfikującą przeznaczenie tego klucza", - "managementAccessDesc": "Zezwól temu kluczowi API na zarządzanie konfiguracją OmniRoute.", + "keyNamePlaceholder": "np. Klucz produkcyjny", + "keyNameDesc": "Wybierz opisową nazwę, aby zidentyfikować cel tego klucza", + "managementAccessDesc": "Zezwalaj temu kluczowi API na zarządzanie konfiguracją OmniRoute.", "selfServiceVisibility": "Widoczność samoobsługowa", - "selfServiceVisibilityDesc": "Kontroluje, co ten klucz może zobaczyć o własnym użyciu i współdzielonym limicie upstream.", - "ownUsageVisibility": "Własny koszt i użycie tokenów", - "ownUsageVisibilityDesc": "Zezwól temu kluczowi wywołać własny endpoint statusu, aby zobaczyć własne użycie USD, procent budżetu i sumy tokenów.", - "sharedAccountQuotaVisibility": "Współdzielony limit konta", - "sharedAccountQuotaVisibilityDesc": "Zezwól temu kluczowi zobaczyć współdzielony limit konta upstream, gdy skonfigurowano jedno jawne połączenie.", - "localUsageCommand": "__MISSING__:Allow local usage command", - "localUsageCommandDesc": "__MISSING__:Allows this API key to use @@om-usage to retrieve cached usage and quota information without calling an upstream provider.", - "localUsageCommandBadge": "__MISSING__:Usage cmd", + "selfServiceVisibilityDesc": "Kontrola nad tym, co ten klucz może zobaczyć na temat własnego użycia i współdzielonej upstream quota.", + "ownUsageVisibility": "Własny koszt i użycie token", + "ownUsageVisibilityDesc": "Zezwalaj temu kluczowi na wywoływanie swojego status endpoint dla własnego użycia USD, procentu budżetu i sumy token.", + "sharedAccountQuotaVisibility": "Współdzielona quota konta", + "sharedAccountQuotaVisibilityDesc": "Zezwalaj temu kluczowi na podgląd współdzielonej upstream account quota, gdy skonfigurowane jest jedno jawne połączenie.", + "localUsageCommand": "Zezwalaj na lokalne polecenie użycia", + "localUsageCommandDesc": "Zezwala temu kluczowi API na używanie @@om-usage do pobierania zbuforowanych informacji o użyciu i quota bez wywoływania upstream provider.", + "localUsageCommandBadge": "Użycie cmd", "keyCreated": "Utworzono klucz API", - "keyCreatedSuccess": "Klucz został utworzony pomyślnie!", - "keyCreatedNote": "Skopiuj i zapisz ten klucz teraz — nie będzie on więcej wyświetlany.", + "keyCreatedSuccess": "Klucz został pomyślnie utworzony!", + "keyCreatedNote": "Skopiuj i zapisz ten klucz teraz — nie zostanie on ponownie pokazany.", "done": "Gotowe", "savePermissions": "Zapisz uprawnienia", - "endpointRestrictions": "Allowed Endpoints", - "allEndpointsAllowed": "This key can access all API endpoints.", - "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}.", - "autoResolve": "Auto-Resolve", - "autoResolveDesc": "Auto-resolve ambiguous model names to native provider for this API key.", - "streamDefaultMode": "__MISSING__:Stream Default Compatibility", - "streamDefaultModeDesc": "__MISSING__:Controls omitted `stream` flags for this key. JSON mode returns non-streaming responses unless the client explicitly requests SSE.", - "streamDefaultLegacy": "__MISSING__:Legacy", - "streamDefaultJson": "__MISSING__:JSON Compatible", - "streamDefaultBadge": "__MISSING__:JSON stream default", - "keyActive": "Key Active", - "keyActiveDesc": "Enable or disable this API key. Disabled keys are immediately rejected with 403.", - "accessSchedule": "Access Schedule", - "accessScheduleDesc": "Restrict access to specific hours and days of the week.", - "scheduleFrom": "From", - "scheduleUntil": "Until", - "scheduleDays": "Days", - "scheduleTimezone": "Timezone", - "scheduleTimezoneHint": "Use IANA timezone names, e.g. America/New_York, Europe/Berlin", - "scheduleActive": "Schedule", - "disabled": "Disabled", - "daySun": "Sun", - "dayMon": "Mon", - "dayTue": "Tue", - "dayWed": "Wed", - "dayThu": "Thu", - "dayFri": "Fri", - "daySat": "Sat", - "allowAll": "Zezwalaj na wszystko", + "endpointRestrictions": "Dozwolone endpoints", + "allEndpointsAllowed": "Ten klucz ma dostęp do wszystkich endpoints API.", + "endpointsRestricted": "Ograniczono do {count, plural, one {# endpointu} other {# endpointów}}.", + "autoResolve": "Automatyczne dopasowywanie", + "autoResolveDesc": "Automatycznie dopasowuj niejednoznaczne nazwy models do natywnego provider dla tego klucza API.", + "streamDefaultMode": "Domyślna kompatybilność strumieniowania", + "streamDefaultModeDesc": "Kontroluje pominięte flagi `stream` dla tego klucza. Tryb JSON zwraca odpowiedzi bez strumieniowania, chyba że klient jawnie zażąda SSE.", + "streamDefaultLegacy": "Klasyczny", + "streamDefaultJson": "Kompatybilny z JSON", + "streamDefaultBadge": "Domyślny strumień JSON", + "keyActive": "Klucz aktywny", + "keyActiveDesc": "Włącz lub wyłącz ten klucz API. Wyłączone klucze są natychmiast odrzucane z kodem 403.", + "accessSchedule": "Harmonogram dostępu", + "accessScheduleDesc": "Ogranicz dostęp do określonych godzin i dni tygodnia.", + "scheduleFrom": "Od", + "scheduleUntil": "Do", + "scheduleDays": "Dni", + "scheduleTimezone": "Strefa czasowa", + "scheduleTimezoneHint": "Użyj nazw stref czasowych IANA, np. America/New_York, Europe/Berlin", + "scheduleActive": "Harmonogram", + "disabled": "Wyłączony", + "daySun": "Nied", + "dayMon": "Pon", + "dayTue": "Wt", + "dayWed": "Śr", + "dayThu": "Czw", + "dayFri": "Pt", + "daySat": "Sob", + "allowAll": "Zezwalaj na wszystkie", "restrict": "Ogranicz", - "allowAllInfo": "Ten klucz umożliwia dostęp do wszystkich dostępnych modeli.", - "restrictInfo": "Ten klucz umożliwia dostęp do {selected} z {total} modeli.", + "allowAllInfo": "Ten klucz ma dostęp do wszystkich dostępnych models.", + "restrictInfo": "Ten klucz ma dostęp do {selected} z {total} models.", "selected": "Wybrano {count}", - "all": "Wszystko", - "clear": "Jasne", - "searchModels": "Wyszukaj modele według nazwy lub dostawcy...", - "noModelsFound": "Nie znaleziono żadnych modeli", + "all": "Wszystkie", + "clear": "Wyczyść", + "searchModels": "Wyszukaj models według nazwy lub provider...", + "noModelsFound": "Nie znaleziono żadnych models", "keyNameRequired": "Nazwa klucza jest wymagana", "keyNameTooLong": "Nazwa klucza musi mieć maksymalnie {max} znaków", - "keyNameInvalid": "Nazwa klucza może zawierać tylko litery, cyfry, spacje, łączniki i podkreślenia", + "keyNameInvalid": "Nazwa klucza może zawierać tylko litery, cyfry, spacje, myślniki i podkreślenia", "invalidKeyName": "Nieprawidłowa nazwa klucza", "failedCreateKey": "Nie udało się utworzyć klucza", "failedCreateKeyRetry": "Nie udało się utworzyć klucza. Spróbuj ponownie.", - "invalidKeyId": "Nieprawidłowy identyfikator klucza", + "invalidKeyId": "Nieprawidłowy ID klucza", "failedDeleteKey": "Nie udało się usunąć klucza", "failedDeleteKeyRetry": "Nie udało się usunąć klucza. Spróbuj ponownie.", - "invalidModelsSelection": "Nieprawidłowy wybór modeli", - "cannotSelectMoreThanModels": "Nie można wybrać więcej niż {max} modeli", + "invalidModelsSelection": "Nieprawidłowy wybór models", + "cannotSelectMoreThanModels": "Nie można wybrać więcej niż {max} models", "failedUpdatePermissions": "Nie udało się zaktualizować uprawnień", "failedUpdatePermissionsRetry": "Nie udało się zaktualizować uprawnień. Spróbuj ponownie.", "unknownProvider": "nieznany", "copyMaskedKey": "Skopiuj zamaskowany klucz", - "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key", - "modelsCount": "{count, plural, one {# model} other {# models}}", - "lastUsedOn": "Ostatni: {date}", - "viewCostsFor": "__MISSING__:View costs for {name}", + "keyOnlyAvailableAtCreation": "Pełny klucz jest dostępny tylko w momencie tworzenia — skopiuj go przy pierwszym utworzeniu klucza", + "modelsCount": "{count, plural, one {# model} other {# modeli}}", + "devicesCount": "{count, plural, one {# urządzenie} other {# urządzeń}}", + "devicesTooltip": "{count, plural, one {# unikalne urządzenie IP/User-Agent wykryte dla tego klucza (ostatnie 30 min)} other {# unikalnych urządzeń IP/User-Agent wykrytych dla tego klucza (ostatnie 30 min)}}", + "lastUsedOn": "Ostatnio: {date}", + "viewCostsFor": "Wyświetl koszty dla {name}", "editPermissions": "Edytuj uprawnienia", "deleteKey": "Usuń klucz", - "regenerateKey": "Zregeneruj klucz", - "regenerateConfirm": "Czy na pewno chcesz ponownie wygenerować ten klucz API? Stary klucz zostanie natychmiast unieważniony.", - "failedRegenerateKey": "Nie udało się ponownie wygenerować klucza API", - "failedRegenerateKeyRetry": "Nie udało się ponownie wygenerować klucza API. Spróbuj ponownie.", - "model": "Model {count}", - "models": "{count} modele", + "regenerateKey": "Regeneruj klucz", + "regenerateConfirm": "Czy na pewno zregenerować ten klucz API? Stary klucz zostanie natychmiast unieważniony.", + "failedRegenerateKey": "Nie udało się zregenerować klucza API", + "failedRegenerateKeyRetry": "Nie udało się zregenerować klucza API. Spróbuj ponownie.", + "model": "{count} model", + "models": "{count} models", "permissionsTitle": "Uprawnienia: {name}", - "allowAllDesc": "Ten klucz umożliwia dostęp do wszystkich dostępnych modeli.", - "restrictDesc": "Ten klucz umożliwia dostęp do {selectedCount} z {totalModels} modeli.", + "allowAllDesc": "Ten klucz ma dostęp do wszystkich dostępnych models.", + "restrictLoading": "Ładowanie katalogu model…", + "restrictCatalogUnavailable": "Katalog model niedostępny; ten klucz ma {selectedCount} wybrane ograniczenia model.", + "restrictDesc": "Ten klucz ma dostęp do {selectedCount} z {totalModels} models.", "selectedCount": "Wybrano {count}", "maxActiveSessions": "Maksymalna liczba aktywnych sesji", - "apiManagerCustomRateLimits": "Niestandardowe limity stawek", - "apiManagerCustomRateLimitsDesc": "Zastąp globalne limity domyślne. Pozostaw puste, aby użyć wartości domyślnych.", + "apiManagerCustomRateLimits": "Niestandardowe rate limits", + "apiManagerCustomRateLimitsDesc": "Zastąp globalne limity domyślne. Pozostaw puste, aby użyć domyślnych.", "apiManagerRateLimitRequestsPlaceholder": "Żądania", - "apiManagerRateLimitReqPer": "żądanie /", + "apiManagerRateLimitReqPer": "żąd. /", "apiManagerRateLimitSecondsPlaceholder": "Sekundy", "apiManagerRemoveLimitTitle": "Usuń limit", - "apiManagerTimezonePlaceholder": "Ameryka/Sao Paulo", - "noLogPayloadPrivacy": "Prywatność ładunku bez logów", - "bannedStatus": "Zakazany status", - "managementApiAccess": "Dostęp do interfejsu API zarządzania", - "expirationDate": "Data ważności", + "apiManagerTimezonePlaceholder": "America/Sao_Paulo", + "noLogPayloadPrivacy": "Prywatność No-Log Payload", + "bannedStatus": "Status zablokowania", + "managementApiAccess": "Dostęp do zarządzania API", + "expirationDate": "Data wygaśnięcia", "managementAccess": "Dostęp do zarządzania", "allowedConnections": "Dozwolone połączenia", - "searchPlaceholder": "__MISSING__:Search by name or token...", - "activeOnly": "__MISSING__:Active only", - "filterStatus": "__MISSING__:STATUS", - "filterType": "__MISSING__:TYPE", - "filterAll": "__MISSING__:All", - "filterStatusActive": "__MISSING__:Active", - "filterStatusDisabled": "__MISSING__:Disabled", - "filterStatusBanned": "__MISSING__:Banned", - "filterStatusExpired": "__MISSING__:Expired", - "filterTypeStandard": "__MISSING__:Standard", - "filterTypeManage": "__MISSING__:Manage", - "filterTypeRestricted": "__MISSING__:Restricted", - "shownOf": "__MISSING__:{shown} of {total} shown", - "emptyFilterTitle": "__MISSING__:No keys match your filters", - "emptyFilterClear": "__MISSING__:Clear filters", - "disableNonPublicModels": "__MISSING__:Disable Non-Public Models", - "disableNonPublicModelsDesc": "__MISSING__:Reject requests for models that are not discovered or not marked as public in the provider catalog", - "normalKeysSection": "__MISSING__:Normal keys", - "quotaKeysSection": "__MISSING__:Quota keys", - "quotaPill": "__MISSING__:QUOTA", - "quotaModeOnly": "__MISSING__:qtSd-only" + "searchPlaceholder": "Wyszukaj według nazwy lub token...", + "activeOnly": "Tylko aktywne", + "filterStatus": "STATUS", + "filterType": "TYP", + "filterAll": "Wszystkie", + "filterStatusActive": "Aktywny", + "filterStatusDisabled": "Wyłączony", + "filterStatusBanned": "Zablokowany", + "filterStatusExpired": "Wygasły", + "filterTypeStandard": "Standard", + "filterTypeManage": "Zarządzanie", + "filterTypeRestricted": "Ograniczony", + "shownOf": "Pokazano {shown} z {total}", + "emptyFilterTitle": "Brak kluczy pasujących do filtrów", + "emptyFilterClear": "Wyczyść filtry", + "disableNonPublicModels": "Wyłącz niepubliczne models", + "disableNonPublicModelsDesc": "Odrzucaj żądania dla models, które nie zostały wykryte lub nie są oznaczone jako publiczne w katalogu provider", + "normalKeysSection": "Zwykłe klucze", + "quotaKeysSection": "Klucze quota", + "quotaPill": "QUOTA", + "quotaModeOnly": "qtSd-only" }, "auditLog": { - "title": "Dziennik audytu", - "searchPlaceholder": "Wyszukaj działania...", + "title": "Rejestr audytu", + "searchPlaceholder": "Wyszukaj akcje...", "action": "Akcja", - "actor": "Aktor", + "actor": "Wykonawca", "target": "Cel", "ipAddress": "Adres IP", "timestamp": "Znacznik czasu", - "noEntries": "Nie znaleziono wpisów audytu", - "filterByAction": "Filtruj według działania...", - "filterByActor": "Filtruj według aktora...", - "filterEntriesAria": "Filtruj wpisy dziennika audytu", + "noEntries": "Nie znaleziono żadnych wpisów audytu", + "filterByAction": "Filtruj według akcji...", + "filterByActor": "Filtruj według wykonawcy...", + "filterEntriesAria": "Filtruj wpisy rejestru audytu", "filterByActionTypeAria": "Filtruj według typu akcji", - "filterByActorAria": "Filtruj według aktora", - "refreshAuditLogAria": "Odśwież dziennik audytu", - "tableAria": "Wpisy dziennika audytu", - "failedFetchAuditLog": "Nie udało się pobrać dziennika kontroli", + "filterByActorAria": "Filtruj według wykonawcy", + "refreshAuditLogAria": "Odśwież rejestr audytu", + "tableAria": "Wpisy rejestru audytu", + "failedFetchAuditLog": "Nie udało się pobrać rejestru audytu", "notAvailable": "—", - "description": "Działania administracyjne i zdarzenia związane z bezpieczeństwem", - "showing": "Wyświetlanie wpisów {count} (przesunięcie {offset})", + "description": "Działania administracyjne i zdarzenia bezpieczeństwa", + "showing": "Pokazywanie {count} wpisów (offset {offset})", "previous": "Poprzedni" }, "media": { - "title": "Studio multimediów", - "subtitle": "Generuj obrazy, wideo i muzykę", + "title": "Media Playground", + "subtitle": "Generowanie obrazów, wideo i muzyki", "model": "Model", "prompt": "Prompt", "generate": "Generuj", - "generating": "Generating...", - "loadingModels": "Loading available models...", - "noModels": "No models available. Configure providers with media capabilities first.", - "error": "Generation Failed", - "result": "Result", - "imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.", - "videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.", - "musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI.", + "generating": "Generowanie...", + "loadingModels": "Ładowanie dostępnych models...", + "noModels": "Brak dostępnych models. Najpierw skonfiguruj providers z obsługą multimediów.", + "error": "Generowanie nie powiodło się", + "result": "Wynik", + "imageDescription": "Generuj obrazy z prompts tekstowych za pomocą OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI i innych.", + "videoDescription": "Twórz wideo za pomocą AnimateDiff, Stable Video Diffusion poprzez ComfyUI lub SD WebUI.", + "musicDescription": "Komponuj muzykę za pomocą Stable Audio Open lub MusicGen poprzez ComfyUI.", "kinds": { - "embedding": "__MISSING__:Embedding", - "image": "__MISSING__:Image", - "imageToText": "__MISSING__:Image to Text", - "tts": "__MISSING__:Text to Speech", - "stt": "__MISSING__:Speech to Text", - "webSearch": "__MISSING__:Web Search", - "webFetch": "__MISSING__:Web Fetch", - "video": "__MISSING__:Video", - "music": "__MISSING__:Music" + "embedding": "Embedding", + "image": "Obraz", + "imageToText": "Obraz na tekst", + "tts": "Tekst na mowę (TTS)", + "stt": "Mowa na tekst (STT)", + "webSearch": "Wyszukiwanie w sieci", + "webFetch": "Pobieranie stron", + "video": "Wideo", + "music": "Muzyka", + "ocr": "OCR" }, - "noProviders": "__MISSING__:No providers configured for this kind yet.", - "addConnection": "__MISSING__:Add Connection", - "backToProviders": "__MISSING__:Back to Providers", - "connections": "__MISSING__:{count} Connections", - "noConnections": "__MISSING__:No connections yet — add one from the provider page.", - "loading": "__MISSING__:Loading..." + "noProviders": "Brak skonfigurowanych providers dla tego rodzaju.", + "addConnection": "Dodaj połączenie", + "backToProviders": "Powrót do Providers", + "connections": "{count} połączeń", + "noConnections": "Brak połączeń — dodaj połączenie na stronie provider.", + "loading": "Ładowanie...", + "suggestedModels": "Sugerowane models od provider" }, "search": { - "searchQuery": "Search Query", - "searchResults": "Search Results", - "cachedResult": "Cached", - "searchCost": "Cost", - "searchTools": "Search Tools", - "searchToolsDesc": "Advanced search testing with provider comparison", - "compareProviders": "Compare Providers", - "rerankResults": "Rerank Results", - "searchHistory": "Search History", - "urlOverlap": "URL Overlap", - "noSearchProviders": "No search providers configured. Add providers in Settings.", - "noRerankModels": "No rerank model available", + "searchQuery": "Zapytanie wyszukiwania", + "searchResults": "Wyniki wyszukiwania", + "cachedResult": "Zbuforowane", + "searchCost": "Koszt", + "searchTools": "Narzędzia wyszukiwania", + "searchToolsDesc": "Zaawansowane testowanie wyszukiwania z porównaniem providers", + "compareProviders": "Porównaj Providers", + "rerankResults": "Rerank wyników", + "searchHistory": "Historia wyszukiwania", + "urlOverlap": "Nakładanie się URL", + "noSearchProviders": "Brak skonfigurowanych providers wyszukiwania. Dodaj providers w Ustawieniach.", + "noRerankModels": "Brak dostępnego model rerank", "webSearch": "Web Search", "provider": "Provider", - "searchType": "Search Type", - "maxResults": "Max Results", - "filters": "Filters", - "country": "Country", - "language": "Language", - "timeRange": "Time Range", - "includeDomains": "Include Domains", - "excludeDomains": "Exclude Domains", - "safeSearch": "Safe Search", - "safeSearchOff": "Off", - "safeSearchModerate": "Moderate", - "safeSearchStrict": "Strict", - "queryPlaceholder": "Enter search query...", - "providerAuto": "auto (cheapest)", + "searchType": "Typ wyszukiwania", + "maxResults": "Maksymalna liczba wyników", + "filters": "Filtry", + "country": "Kraj", + "language": "Język", + "timeRange": "Zakres czasu", + "includeDomains": "Uwzględnij domeny", + "excludeDomains": "Wyklucz domeny", + "safeSearch": "Bezpieczne wyszukiwanie", + "safeSearchOff": "Wyłączone", + "safeSearchModerate": "Umiarkowane", + "safeSearchStrict": "Restrykcyjne", + "queryPlaceholder": "Wpisz zapytanie...", + "providerAuto": "auto (najtańszy)", "searchTypeWeb": "web", "searchTypeNews": "news", - "optionAny": "any", - "timeRangeDay": "Past day", - "timeRangeWeek": "Past week", - "timeRangeMonth": "Past month", - "timeRangeYear": "Past year", + "optionAny": "dowolny", + "timeRangeDay": "Ostatni dzień", + "timeRangeWeek": "Ostatni tydzień", + "timeRangeMonth": "Ostatni miesiąc", + "timeRangeYear": "Ostatni rok", "domainPlaceholder": "example.com", - "requestTimedOut": "Request timed out ({seconds}s)", - "networkError": "Network error", - "formatted": "Formatted", + "requestTimedOut": "Przekroczono limit czasu żądania ({seconds}s)", + "networkError": "Błąd sieci", + "formatted": "Sformatowane", "rawJson": "JSON", "cacheMiss": "cache miss", - "cacheHit": "cache hit", - "latency": "Latency", - "cost": "Cost", - "results": "Results", + "cacheHit": "trafienie w pamięci podręcznej", + "latency": "Opóźnienie", + "cost": "Koszt", + "results": "Wyniki", "rerank": "Rerank", - "rerankModel": "Rerank Model", - "positionDelta": "Position Change", - "emptyState": "Send a search query to see results", + "rerankModel": "Model rerank", + "positionDelta": "Zmiana pozycji", + "emptyState": "Wyślij zapytanie wyszukiwania, aby zobaczyć wyniki", "copy": "Kopiuj", - "resetToDefault": "Przywróć ustawienia domyślne", - "tabSearch": "Search", + "resetToDefault": "Przywróć domyślne", + "tabSearch": "Wyszukiwanie", "tabScrape": "Scrape", - "tabCompare": "Compare", - "modalitiesGuide": "Modalities guide", - "searchConceptTitle": "Search", - "searchConceptDesc": "Search = fetches a list of web results (title, URL, snippet, relevance score)", + "tabCompare": "Porównanie", + "modalitiesGuide": "Przewodnik po modalnościach", + "searchConceptTitle": "Wyszukiwanie", + "searchConceptDesc": "Search = pobiera listę wyników wyszukiwania (tytuł, URL, snippet, wynik dopasowania)", "scrapeConceptTitle": "Scrape", - "scrapeConceptDesc": "Scrape = extracts the full content of a URL (markdown, text or HTML)", - "compareConceptTitle": "Compare", - "compareConceptDesc": "Compare = runs the same query across N providers side-by-side to compare latency, cost and result overlap", + "scrapeConceptDesc": "Scrape = wyodrębnia pełną zawartość URL (markdown, tekst lub HTML)", + "compareConceptTitle": "Porównanie", + "compareConceptDesc": "Compare = uruchamia to samo zapytanie na N providers obok siebie, aby porównać opóźnienie, koszt i nakładanie się wyników", "rerankConceptTitle": "Rerank", - "rerankConceptDesc": "Rerank = reorders results via LLM to improve relevance based on the query", - "autoConceptTitle": "Auto (cheapest)", - "autoConceptDesc": "Auto (cheapest) = automatically picks the cheapest available provider with configured credentials", - "providerCatalogTitle": "Provider Catalog", - "kindSearch": "Search", - "kindFetch": "Fetch/Scrape", - "statusConfigured": "Configured", - "statusMissing": "No credential", + "rerankConceptDesc": "Rerank = zmienia kolejność wyników za pomocą LLM, aby poprawić trafność na podstawie zapytania", + "autoConceptTitle": "Auto (najtańszy)", + "autoConceptDesc": "Auto (cheapest) = automatycznie wybiera najtańszego dostępnego provider ze skonfigurowanymi danymi uwierzytelniającymi", + "providerCatalogTitle": "Katalog Providers", + "kindSearch": "Wyszukiwanie", + "kindFetch": "Pobieranie/Scrape", + "statusConfigured": "Skonfigurowano", + "statusMissing": "Brak danych uwierzytelniających", "statusRateLimited": "Rate limited", - "configureProvider": "Configure in Providers", - "loadingProviders": "Loading providers…", - "failedToLoadProviders": "Failed to load providers", - "costPerQuery": "Cost/query", - "freeQuota": "Free quota/mo", - "scrapeUrl": "URL to scrape", + "configureProvider": "Skonfiguruj w Providers", + "loadingProviders": "Ładowanie providers…", + "failedToLoadProviders": "Nie udało się załadować providers", + "costPerQuery": "Koszt/zapytanie", + "freeQuota": "Bezpłatny quota/miesiąc", + "scrapeUrl": "URL do scrape", "scrapeUrlPlaceholder": "https://example.com", - "scrapeUrlRequired": "__MISSING__:URL is required", - "scrapeUrlInvalid": "__MISSING__:Invalid URL — it must start with http:// or https://", - "scrapeExtract": "Extract", - "scrapeExtracting": "Extracting…", - "scrapeFullPage": "Full page", + "scrapeUrlRequired": "URL jest wymagany", + "scrapeUrlInvalid": "Nieprawidłowy URL — musi zaczynać się od http:// lub https://", + "scrapeExtract": "Wyodrębnij", + "scrapeExtracting": "Wyodrębnianie…", + "scrapeFullPage": "Pełna strona", "scrapeFormat": "Format", "formatMarkdown": "Markdown", "formatHtml": "HTML", - "formatText": "Text", - "scrapePreview": "Preview", + "formatText": "Tekst", + "scrapePreview": "Podgląd", "scrapeRaw": "Raw", - "scrapeContentTruncated": "(truncated, view raw)", - "scrapeMetadata": "Metadata", + "scrapeContentTruncated": "(skrócone, zobacz raw)", + "scrapeMetadata": "Metadane", "scrapeProvider": "Provider", - "scrapeSize": "Size", - "scrapeEmptyState": "__MISSING__:Enter a URL to extract its content", - "scrapeProvidersAvailable": "__MISSING__:Available providers: Firecrawl, Jina Reader, Tavily.", - "compareRun": "Compare", - "compareRunning": "Comparing…", - "autoProvider": "Auto (cheapest)", - "configuredStatus": "Configured", + "scrapeSize": "Rozmiar", + "scrapeEmptyState": "Wprowadź URL, aby wyodrębnić jego zawartość", + "scrapeProvidersAvailable": "Dostępne providers: Firecrawl, Jina Reader, Tavily, TinyFish.", + "compareRun": "Porównaj", + "compareRunning": "Porównywanie…", + "autoProvider": "Auto (najtańszy)", + "configuredStatus": "Skonfigurowano", "rateLimitedStatus": "Rate limited", - "noCredential": "No credential", - "searchTypeLabel": "Type", - "rerankModelLabel": "Rerank model", - "noneOption": "None", - "size": "Size" + "noCredential": "Brak danych uwierzytelniających", + "searchTypeLabel": "Typ", + "rerankModelLabel": "Model rerank", + "noneOption": "Brak", + "size": "Rozmiar" }, "cliTools": { - "title": "Narzędzia interfejsu wiersza polecenia", - "noActiveProviders": "Brak aktywnych dostawców", - "noActiveProvidersDesc": "Najpierw dodaj i połącz dostawców, aby skonfigurować narzędzia CLI.", - "mapModels": "Modele map", - "testConnection": "Połączenie testowe", - "connectionStatus": "Stan połączenia", - "configureEndpoint": "Skonfiguruj punkt końcowy", + "title": "CLI Tools", + "noActiveProviders": "Brak aktywnych providers", + "noActiveProvidersDesc": "Aby skonfigurować CLI tools, należy najpierw dodać i połączyć providers.", + "mapModels": "Mapuj models", + "testConnection": "Testuj połączenie", + "connectionStatus": "Status połączenia", + "configureEndpoint": "Skonfiguruj endpoint", "instructions": "Instrukcje", - "modelMapping": "Mapowanie modelu", - "baseUrl": "Bazowy adres URL", + "modelMapping": "Mapowanie models", + "baseUrl": "Bazowy URL", "apiKey": "Klucz API", - "configured": "Skonfigurowane", - "notConfigured": "Nie skonfigurowano", - "notInstalled": "Nie zainstalowano", - "custom": "Niestandardowe", - "unknown": "Nieznany", - "lastSavedAt": "Ostatnio zapisany: {date}", + "configured": "Skonfigurowano", + "notConfigured": "Nieskonfigurowano", + "notInstalled": "Niezainstalowano", + "custom": "Własne", + "unknown": "Nieznane", + "lastSavedAt": "Ostatnio zapisano: {date}", "never": "Nigdy", - "justNow": "właśnie teraz", - "minutesAgoShort": "{count}m temu", - "hoursAgoShort": "{count}h temu", - "daysAgoShort": "{count}d temu", - "monthsAgoShort": "{count}miesiące temu", - "yearsAgoShort": "{count}y temu", - "runtimeCheckFailed": "Kontrola czasu wykonania nie powiodła się", - "yourApiKeyPlaceholder": "twój-api-key", - "modelPlaceholder": "dostawca/identyfikator modelu", - "configurationSaved": "Konfiguracja została zapisana pomyślnie.", + "justNow": "przed chwilą", + "minutesAgoShort": "{count} min temu", + "hoursAgoShort": "{count} godz. temu", + "daysAgoShort": "{count} dni temu", + "monthsAgoShort": "{count} mies. temu", + "yearsAgoShort": "{count} lat temu", + "runtimeCheckFailed": "Sprawdzenie runtime nie powiodło się", + "yourApiKeyPlaceholder": "twój-klucz-api", + "modelPlaceholder": "provider/model-id", + "configurationSaved": "Konfiguracja zapisana pomyślnie.", "failedToSave": "Nie udało się zapisać konfiguracji.", - "noApiKeysCreateOne": "Brak kluczy API — utwórz je na stronie Klucze", - "defaultOmnirouteKey": "sk_omniroute (domyślnie)", - "selectModel": "Wybierz Model", + "noApiKeysCreateOne": "Brak kluczy API – utwórz go na stronie kluczy", + "defaultOmnirouteKey": "sk_omniroute (domyślny)", + "selectModel": "Wybierz model", "selectModelForAlias": "Wybierz model dla {alias}", "selectModelForTool": "Wybierz model dla {tool}", "select": "Wybierz", - "clear": "Jasne", - "comingSoon": "Już wkrótce", - "checkingRuntime": "Sprawdzam stan środowiska wykonawczego...", - "guideOnlyIntegration": "Integracja wyłącznie w trybie przewodnika (nie jest wymagane lokalne środowisko wykonawcze)", - "cliRuntimeDetected": "Środowisko wykonawcze CLI zostało wykryte i gotowe", - "cliFoundNotRunnable": "Znaleziono interfejs CLI, ale nie można go uruchomić{reason}", - "cliRuntimeNotDetected": "Nie wykryto środowiska wykonawczego CLI", - "binary": "Binarny", + "clear": "Wyczyść", + "comingSoon": "Wkrótce", + "checkingRuntime": "Sprawdzanie statusu runtime...", + "guideOnlyIntegration": "Integracja tylko z przewodnikiem (lokalny runtime nie jest wymagany)", + "cliRuntimeDetected": "Runtime CLI wykryty i gotowy", + "cliFoundNotRunnable": "CLI znalezione, ale nieuruchamialne{reason}", + "cliRuntimeNotDetected": "Nie wykryto runtime CLI", + "binary": "Plik binarny", "configPath": "Ścieżka konfiguracji", - "configPathShort": "Konfig", - "failedCheckRuntimeStatus": "Nie udało się sprawdzić stanu środowiska wykonawczego.", + "configPathShort": "Konfiguracja", + "failedCheckRuntimeStatus": "Nie udało się sprawdzić statusu runtime.", "copy": "Kopiuj", "copied": "Skopiowano", "copyConfig": "Kopiuj konfigurację", "saveConfig": "Zapisz konfigurację", - "selectionSaved": "Wybór został zapisany", + "selectionSaved": "Zapisano wybór", "guide": "Przewodnik", "detected": "Wykryto", - "notReady": "Nie gotowy", + "notReady": "Niegotowy", "active": "Aktywny", "inactive": "Nieaktywny", "startMitm": "Uruchom MITM", "stopMitm": "Zatrzymaj MITM", - "mitmStarted": "MITM rozpoczęło się pomyślnie!", - "mitmStopped": "MITM został zatrzymany pomyślnie!", + "mitmStarted": "Uruchomiono MITM pomyślnie!", + "mitmStopped": "Zatrzymano MITM pomyślnie!", "failedStart": "Nie udało się uruchomić MITM", "failedStop": "Nie udało się zatrzymać MITM", "saveMappings": "Zapisz mapowania", - "mappingsSaved": "Mapowania zapisane!", + "mappingsSaved": "Zapisano mapowania!", "failedSaveMappings": "Nie udało się zapisać mapowań", + "reasoningEffort": "Wysiłek rozumowania dla {model}", + "reasoningEffortDefault": "Domyślny", + "reasoningEffortHint": "Opcja domyślna zachowuje wysiłek rozumowania wysłany przez agenta", + "reasoningEffortTier": { + "none": "Brak", + "low": "Niski", + "medium": "Średni", + "high": "Wysoki", + "xhigh": "Bardzo wysoki" + }, "howItWorks": "Jak to działa:", - "antigravityHowWorksDesc": "Antygrawitacja wysyła żądania do punktu końcowego Google. MITM przechwytuje i przekierowuje je do OmniRoute.", + "antigravityHowWorksDesc": "Antigravity wysyła żądania do endpoint Google. MITM przechwytuje je i przekierowuje do OmniRoute.", "antigravityStep1": "1. Uruchom MITM, aby kierować żądania przez OmniRoute.", "antigravityStep2Prefix": "2. Dodaj", "antigravityStep2Suffix": "do pliku hosts jako 127.0.0.1.", - "antigravityStep3": "3. Otwórz Antygrawitację i żądania zostaną przesłane przez serwer proxy.", - "mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.", - "mitmStep1": "1. Start MITM to route requests through OmniRoute.", - "mitmStep2Prefix": "2. Add", - "mitmStep2Suffix": "to your hosts file as 127.0.0.1.", - "mitmStep3": "3. Open {toolName} and requests will be proxied.", - "sudoPasswordRequiredTitle": "Wymagane hasło Sudo", - "sudoPasswordHint": "Aby zmodyfikować ustawienia pliku hosts i systemowego serwera proxy, wymagane jest hasło administratora.", + "antigravityStep3": "3. Otwórz Antigravity, a żądania będą przekierowywane przez proxy.", + "mitmHowWorksDesc": "{toolName} wysyła żądania do swojego endpoint provider. MITM przechwytuje je i przekierowuje do OmniRoute.", + "mitmStep1": "1. Uruchom MITM, aby kierować żądania przez OmniRoute.", + "mitmStep2Prefix": "2. Dodaj", + "mitmStep2Suffix": "do pliku hosts jako 127.0.0.1.", + "mitmStep3": "3. Otwórz {toolName}, a żądania będą przekierowywane przez proxy.", + "sudoPasswordRequiredTitle": "Wymagane hasło sudo", + "sudoPasswordHint": "Hasło administratora jest wymagane do zmodyfikowania pliku hosts oraz systemowych ustawień proxy.", "enterSudoPassword": "Wprowadź hasło sudo", - "sudoPasswordRequiredError": "Wymagane jest hasło Sudo.", + "sudoPasswordRequiredError": "Hasło sudo jest wymagane.", "cancel": "Anuluj", "confirm": "Potwierdź", - "settingsApplied": "Ustawienia zostały zastosowane pomyślnie!", + "settingsApplied": "Ustawienia zastosowane pomyślnie!", "failedApplySettings": "Nie udało się zastosować ustawień", - "settingsReset": "Ustawienia zostały zresetowane pomyślnie!", + "settingsReset": "Ustawienia zresetowane pomyślnie!", "failedResetSettings": "Nie udało się zresetować ustawień", - "backupRestored": "Kopia zapasowa przywrócona!", + "backupRestored": "Przywrócono kopię zapasową!", "failedRestore": "Nie udało się przywrócić", - "checkingCli": "Sprawdzam {tool} CLI...", - "cliNotRunnable": "{tool} Zainstalowano CLI, ale nie można go uruchomić", - "cliNotInstalled": "{tool} Interfejs CLI nie jest zainstalowany", - "cliNotDetected": "{tool} Nie wykryto interfejsu CLI", - "cliDetectedReady": "{tool} Wykryto interfejs CLI i jest on gotowy", - "cliFoundFailedHealthcheck": "{tool} Znaleziono interfejs CLI, ale kontrola stanu środowiska wykonawczego nie powiodła się{reason}.", - "installCliPrompt": "Aby móc korzystać z tej funkcji, zainstaluj {tool} CLI.", - "installCodexPrompt": "Aby skorzystać z funkcji automatycznego stosowania, zainstaluj Codex CLI.", + "checkingCli": "Sprawdzanie {tool} CLI...", + "cliNotRunnable": "{tool} CLI zainstalowane, ale nieuruchamialne", + "cliNotInstalled": "{tool} CLI niezainstalowane", + "cliNotDetected": "Nie wykryto {tool} CLI", + "cliDetectedReady": "{tool} CLI wykryte i gotowe", + "cliFoundFailedHealthcheck": "{tool} CLI zostało znalezione, ale nie przeszło testu sprawności runtime{reason}.", + "installCliPrompt": "Zainstaluj {tool} CLI, aby korzystać z tej funkcji.", + "installCodexPrompt": "Zainstaluj Codex CLI, aby korzystać z funkcji automatycznego zastosowania.", "hide": "Ukryj", "howToInstall": "Jak zainstalować", - "installationGuide": "Przewodnik instalacji", - "platforms": "macOS/Linux/Windows:", + "installationGuide": "Instrukcja instalacji", + "platforms": "macOS / Linux / Windows:", "afterInstallationRun": "Po instalacji uruchom", - "toVerify": "zweryfikować.", + "toVerify": "aby zweryfikować.", "current": "Aktualny", "baseUrlPlaceholder": "https://.../v1", - "resetToDefault": "Przywróć ustawienia domyślne", - "providerModelPlaceholder": "dostawca/identyfikator modelu", + "resetToDefault": "Przywróć domyślne", + "providerModelPlaceholder": "provider/model-id", "apply": "Zastosuj", - "reset": "Zresetuj", + "reset": "Resetuj", "manualConfig": "Konfiguracja ręczna", "backups": "Kopie zapasowe", - "configBackups": "Skonfiguruj kopie zapasowe", - "noBackupsYet": "Nie ma jeszcze kopii zapasowych. Kopie zapasowe są tworzone automatycznie przed każdym Zastosowaniem lub Resetem.", + "configBackups": "Kopie zapasowe konfiguracji", + "noBackupsYet": "Brak kopii zapasowych. Kopie zapasowe są tworzone automatycznie przed każdym zastosowaniem lub zresetowaniem.", "restore": "Przywróć", - "backupRestoredReloading": "Kopia zapasowa przywrócona! Stan ponownego ładowania...", + "backupRestoredReloading": "Kopia zapasowa przywrócona! Przeładowywanie statusu...", "failedRestoreBackup": "Nie udało się przywrócić kopii zapasowej", "applied": "Zastosowano!", - "failed": "Nie udało się", - "resetDone": "Zresetuj!", - "omnirouteConfiguredOpenAiCompatible": "OmniRoute jest skonfigurowany jako dostawca zgodny z OpenAI", - "provider": "Dostawca", - "model": "Modelka", - "providers": "Dostawcy", - "auth": "Autoryt", + "failed": "Nie powiodło się", + "resetDone": "Zresetowano!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute jest skonfigurowany jako provider zgodny z OpenAI", + "provider": "Provider", + "model": "Model", + "providers": "Providers", + "auth": "Auth", "noApiKeysAvailable": "Brak dostępnych kluczy API", - "usingDefaultOmniroute": "Używam domyślnego: sk_omniroute", - "updateConfig": "Zaktualizuj konfigurację", + "usingDefaultOmniroute": "Używanie domyślnego: sk_omniroute", + "updateConfig": "Aktualizuj konfigurację", "applyConfig": "Zastosuj konfigurację", "noBackupsAvailable": "Brak dostępnych kopii zapasowych.", - "profileSaved": "Profil „{name}” został zapisany!", + "profileSaved": "Profil \"{name}\" został zapisany!", "failedSaveProfile": "Nie udało się zapisać profilu", "profileActivated": "Profil aktywowany!", "failedActivateProfile": "Nie udało się aktywować profilu", "profiles": "Profile", "savedProfiles": "Zapisane profile", - "noProfilesYet": "Nie zapisano jeszcze żadnych profili. Zapisz bieżącą konfigurację jako profil poniżej.", + "noProfilesYet": "Brak zapisanych profilów. Zapisz bieżącą konfigurację jako profil poniżej.", "activate": "Aktywuj", "deleteProfile": "Usuń profil", - "profileNamePlaceholder": "Nazwa profilu (np. Konto Osobiste)", + "profileNamePlaceholder": "Nazwa profilu (np. Konto osobiste)", "saveCurrent": "Zapisz bieżący", - "codexAuthNotePrefix": "Kodeks używa", + "codexAuthNotePrefix": "Codex używa", "codexAuthNoteMiddle": "z", - "codexAuthNoteSuffix": "Kliknij „Zastosuj”, aby przeprowadzić automatyczną konfigurację.", - "claudeManualConfiguration": "Claude CLI - Konfiguracja ręczna", - "codexManualConfiguration": "Codex CLI — konfiguracja ręczna", - "droidManualConfiguration": "Droid fabryczny – konfiguracja ręczna", - "openClawManualConfiguration": "Otwarty pazur - konfiguracja ręczna", - "clineManualConfiguration": "Konfiguracja ręczna Cline", - "kiloManualConfiguration": "Konfiguracja ręczna kodu Kilo", + "codexAuthNoteSuffix": "Kliknij \"Zastosuj\", aby skonfigurować automatycznie.", + "claudeManualConfiguration": "Claude CLI - konfiguracja ręczna", + "codexManualConfiguration": "Codex CLI - konfiguracja ręczna", + "droidManualConfiguration": "Factory Droid - konfiguracja ręczna", + "openClawManualConfiguration": "Open Claw - konfiguracja ręczna", + "clineManualConfiguration": "Cline - konfiguracja ręczna", + "kiloManualConfiguration": "Kilo Code - konfiguracja ręczna", "whenToUseLabel": "Kiedy używać", - "openToolDocs": "Otwórz dokumentację narzędzi", + "openToolDocs": "Otwórz dokumentację narzędzia", "toolUseCases": { - "claude": "Użyj, jeśli chcesz mieć silne przepływy pracy związane z planowaniem i długie refaktoryzacje wielu plików za pomocą Claude Code.", - "codex": "Użyj, gdy Twój zespół jest ujednolicony w zakresie przepływów CLI OpenAI Codex i uwierzytelniania opartego na profilach.", - "droid": "Użyj, gdy potrzebujesz lekkiego agenta terminalowego skupionego na szybkim kodowaniu i pętlach wykonywania poleceń.", - "openclaw": "Użyj, jeśli chcesz agenta kodującego w stylu Open Claw, ale kierowanego przez zasady OmniRoute.", - "cline": "Użyj, gdy konfigurujesz agentów kodujących w edytorach i chcesz przeprowadzić konfigurację z pomocą modeli OmniRoute.", - "kilo": "Użyj, gdy przepływ pracy zależy od poleceń Kilo Code i szybkich edycji iteracyjnych.", - "cursor": "Użyj podczas kodowania w programie Cursor, jeśli potrzebujesz niestandardowych modeli zgodnych z OpenAI za pośrednictwem OmniRoute.", - "continue": "Użyj podczas uruchamiania Kontynuuj w środowiskach IDE, jeśli potrzebujesz przenośnej konfiguracji dostawcy opartej na formacie JSON.", - "opencode": "Użyj, jeśli wolisz uruchamianie agentów natywnych w terminalu i automatyzację skryptów za pośrednictwem OpenCode.", - "kiro": "Użyj podczas integracji Kiro i centralnego sterowania routingiem modeli z OmniRoute.", - "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute.", - "antigravity": "Użyj, gdy ruch antygrawitacyjny/Kiro musi zostać przechwycony przez MITM i skierowany do OmniRoute.", - "copilot": "Użyj, jeśli chcesz mieć UX w stylu czatu Copilot, jednocześnie wymuszając klucze OmniRoute i reguły routingu.", - "amp": "Use when you want Amp CLI routed through OmniRoute with stable shorthand aliases and OpenAI-compatible setup.", - "qwen": "Use when you want Qwen Code CLI with OmniRoute-managed provider settings and multi-provider model access.", - "hermes": "Użyj, gdy potrzebujesz lekkiego asystenta AI natywnego dla terminala do szybkich zadań.", - "hermes-agent": "__MISSING__:Use when you need Hermes Agent (by Nousresearch) with default, delegation, vision and auxiliary models routed through OmniRoute.", - "custom": "Używaj do niestandardowych implementacji narzędzi lub ogólnych konfiguracji zgodnych z OpenAI." + "claude": "Do stosowania przy zaawansowanych procesach planowania i długich, wieloplikowych refaktoryzacjach z Claude Code.", + "codex": "Do stosowania, gdy praca zespołu opiera się na procesach OpenAI Codex CLI i autoryzacji profilowej.", + "droid": "Do stosowania, gdy potrzebny jest lekki agent terminalowy skupiony na szybkim kodowaniu i pętlach wykonywania poleceń.", + "openclaw": "Do stosowania, gdy potrzebny jest agent kodujący w stylu Open Claw, ale kierowany przez reguły OmniRoute.", + "cline": "Do stosowania przy konfiguracji agentów kodujących w edytorach i przy potrzebie prowadzonej konfiguracji z models OmniRoute.", + "kilo": "Do stosowania, gdy procesy opierają się na poleceniach Kilo Code i szybkich iteracyjnych edycjach.", + "cursor": "Do stosowania podczas kodowania w Cursor, gdy potrzebne są niestandardowe models zgodne z OpenAI za pośrednictwem OmniRoute.", + "continue": "Do stosowania przy uruchamianiu Continue w IDE, gdy potrzebna jest przenośna konfiguracja provider oparta na JSON.", + "opencode": "Do stosowania przy preferencji uruchamiania agentów bezpośrednio w terminalu i skryptowej automatyzacji przez OpenCode.", + "kiro": "Do stosowania przy integracji z Kiro i centralnym kontrolowaniu routingu model z poziomu OmniRoute.", + "windsurf": "Do stosowania w środowisku IDE nastawionym na AI, z models Codeium/Windsurf kierowanymi przez OmniRoute.", + "antigravity": "Do stosowania, gdy ruch z Antigravity/Kiro musi być przechwytywany przez MITM i kierowany do OmniRoute.", + "copilot": "Do stosowania przy chęci korzystania z interfejsu w stylu Copilot chat z jednoczesnym wymuszaniem kluczy i reguł routingu OmniRoute.", + "amp": "Do stosowania przy chęci korzystania ze skróconych procesów roboczych Amp z zachowaniem wymuszania aliasów i reguł routingu OmniRoute.", + "qwen": "Do stosowania, gdy potrzebne jest Alibaba Qwen Code CLI do zadań związanych z kodowaniem.", + "hermes": "Do stosowania, gdy potrzebny jest lekki asystent AI działający w terminalu do szybkich zadań.", + "hermes-agent": "Do stosowania, gdy potrzebny jest Hermes Agent (od Nousresearch) z models domyślnymi, delegowanymi, wizyjnymi i pomocniczymi kierowanymi przez OmniRoute.", + "custom": "Do stosowania przy niestandardowych implementacjach narzędzi lub ogólnych konfiguracjach zgodnych z OpenAI." }, "toolDescriptions": { "antigravity": "Google Antigravity IDE z MITM", - "claude": "Antropiczny kod Claude'a CLI", - "codex": "Interfejs wiersza polecenia OpenAI Codex", - "droid": "Asystent sztucznej inteligencji droida fabrycznego", - "openclaw": "Otwórz asystenta AI Claw", - "cline": "Cline AI Asystent kodowania CLI", + "claude": "Anthropic Claude Code CLI", + "codex": "OpenAI Codex CLI", + "droid": "Asystent AI Factory Droid", + "openclaw": "Asystent AI Open Claw", + "cline": "Cline AI Coding Assistant CLI", "kilo": "Kilo Code AI Assistant CLI", - "cursor": "Edytor kodu AI kursora", - "continue": "Kontynuuj Asystenta AI", - "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE", - "windsurf": "Windsurf AI Code Editor", - "copilot": "GitHub Copilot AI Assistant", + "cursor": "Edytor kodu Cursor AI", + "continue": "Asystent AI Continue", + "opencode": "Agent kodujący AI OpenCode (Terminal)", + "kiro": "Amazon Kiro — IDE oparte na AI", + "windsurf": "Edytor kodu Windsurf AI", + "copilot": "Asystent AI GitHub Copilot", "qwen": "Alibaba Qwen Code CLI", - "amp": "Sourcegraph Amp coding assistant CLI", - "hermes": "Asystent terminala AI Hermes", - "hermes-agent": "__MISSING__:Hermes Agent (by Nousresearch) - Advanced terminal AI with multi-model support (delegation, vision, compression, etc.)", - "custom": "Generic generator konfiguracji CLI lub SDK zgodny z OpenAI" + "amp": "CLI asystenta kodowania Sourcegraph Amp", + "hermes": "Asystent terminalowy AI Hermes", + "hermes-agent": "Hermes Agent (od Nousresearch) - zaawansowana terminalowa AI ze wsparciem dla wielu models (delegowanie, wizja, kompresja itp.)", + "custom": "Ogólny generator konfiguracji CLI lub SDK zgodnych z OpenAI" }, "guides": { "cursor": { "notes": { - "0": "Aby korzystać z tej funkcji, wymagane jest konto Cursor Pro.", - "1": "Kursor kieruje żądania przez własny serwer, więc lokalny punkt końcowy nie jest obsługiwany. Włącz punkt końcowy Cloud w Ustawieniach." + "0": "Wymaga konta Cursor Pro do korzystania z tej funkcji.", + "1": "Cursor kieruje żądania przez własny serwer, więc lokalny endpoint nie jest obsługiwany. Należy włączyć Cloud Endpoint w Settings." }, "steps": { "1": { - "title": "Otwórz Ustawienia", - "desc": "Przejdź do Ustawienia -> Modele" + "title": "Otwórz Settings", + "desc": "Przejdź do Settings -> Models" }, "2": { - "title": "Włącz interfejs API OpenAI", - "desc": "Włącz opcję „Klucz API OpenAI”." + "title": "Włącz OpenAI API", + "desc": "Włącz opcję \"OpenAI API key\"" }, "3": { - "title": "Bazowy adres URL" + "title": "Base URL" }, "4": { - "title": "Klucz API" + "title": "API Key" }, "5": { - "title": "Dodaj model niestandardowy", - "desc": "Kliknij „Wyświetl wszystkie modele” -> „Dodaj model niestandardowy”" + "title": "Dodaj Custom Model", + "desc": "Kliknij \"View All Model\" -> \"Add Custom Model\"" }, "6": { - "title": "Wybierz Model" + "title": "Wybierz model" } } }, "continue": { "steps": { "1": { - "title": "Otwórz konfigurację", - "desc": "Otwórz plik konfiguracyjny Kontynuuj" + "title": "Otwórz Config", + "desc": "Otwórz plik konfiguracyjny Continue" }, "2": { - "title": "Klucz API" + "title": "API Key" }, "3": { - "title": "Wybierz Model" + "title": "Wybierz model" }, "4": { - "title": "Dodaj konfigurację modelu", - "desc": "Dodaj następującą konfigurację do tablicy modeli:" + "title": "Dodaj Model Config", + "desc": "Dodaj następującą konfigurację do tablicy models:" } }, "notes": { @@ -2217,44 +2239,44 @@ "opencode": { "steps": { "1": { - "title": "Install OpenCode", - "desc": "Install via npm: npm install -g opencode-ai" + "title": "Zainstaluj OpenCode", + "desc": "Zainstaluj przez npm: npm install -g opencode-ai" }, "2": { "title": "API Key" }, "3": { - "title": "Set Base URL", + "title": "Ustaw Base URL", "desc": "opencode config set baseUrl {baseUrl}" }, "4": { - "title": "Select Model" + "title": "Wybierz model" }, "5": { - "title": "Use Thinking Variant", - "desc": "For thinking models, run with --variant high/low/max (example command below)." + "title": "Użyj wariantu thinking", + "desc": "Dla models typu thinking, uruchom z --variant high/low/max (przykładowe polecenie poniżej)." } }, "notes": { - "0": "OpenCode wymaga konfiguracji klucza API.", - "1": "Ustaw URL bazowy na swój endpoint OmniRoute." + "0": "OpenCode wymaga konfiguracji API key.", + "1": "Ustaw base URL na swój endpoint OmniRoute." } }, "kiro": { "steps": { "1": { - "title": "Open Kiro Settings", - "desc": "Go to Settings → AI Provider" + "title": "Otwórz Kiro Settings", + "desc": "Przejdź do Settings → AI Provider" }, "2": { "title": "Base URL", - "desc": "Paste your OmniRoute endpoint URL" + "desc": "Wklej URL swojego endpoint OmniRoute" }, "3": { "title": "API Key" }, "4": { - "title": "Select Model" + "title": "Wybierz model" } }, "notes": { @@ -2264,12 +2286,12 @@ "windsurf": { "steps": { "1": { - "title": "Open AI Settings", - "desc": "Click the AI Settings icon in Windsurf or go to Settings" + "title": "Otwórz AI Settings", + "desc": "Kliknij ikonę AI Settings w Windsurf lub przejdź do Settings" }, "2": { - "title": "Add Custom Provider", - "desc": "Select \"Add custom provider\" (OpenAI-compatible)" + "title": "Dodaj Custom Provider", + "desc": "Wybierz \"Add custom provider\" (OpenAI-compatible)" }, "3": { "title": "Base URL", @@ -2277,2820 +2299,2907 @@ }, "4": { "title": "API Key", - "desc": "Select your OmniRoute API key" + "desc": "Wybierz swój API key OmniRoute" }, "5": { - "title": "Select Model", - "desc": "Choose a model from the dropdown" + "title": "Wybierz model", + "desc": "Wybierz model z rozwijanej listy" } } } }, - "autoConfiguredTab": "Auto Configured Tab", - "toolCategoriesDesc": "Tool Categories Desc", - "allToolsTab": "All Tools Tab", - "guidedClientsTab": "Guided Clients Tab", - "mitmClientsTab": "Mitm Clients Tab", - "customCliTab": "Niestandardowy interfejs wiersza polecenia", - "toolCategories": "Tool Categories", - "visibleToolsCount": "Dostępne narzędzia: {count}", - "customCliBuilderTitle": "Kreator CLI zgodny z OpenAI", - "customCliBuilderDescription": "Generuj zmienne env i fragmenty JSON dla dowolnego interfejsu CLI lub zestawu SDK, który akceptuje podstawowy adres URL, klucz API i identyfikator modelu zgodny z OpenAI.", - "customCliNoModels": "Połącz co najmniej jednego dostawcę, aby zapełnić selektory modeli.", + "autoConfiguredTab": "Automatycznie skonfigurowane", + "toolCategoriesDesc": "Skonfiguruj asystentów kodowania AI, aby kierować ruch przez OmniRoute", + "allToolsTab": "Wszystkie narzędzia", + "guidedClientsTab": "Klienci z przewodnikiem", + "mitmClientsTab": "Klienci MITM", + "customCliTab": "Niestandardowe CLI", + "toolCategories": "Kategorie narzędzi", + "visibleToolsCount": "{count} dostępnych narzędzi", + "customCliBuilderTitle": "Kreator OpenAI-compatible CLI", + "customCliBuilderDescription": "Generuj env vars i fragmenty JSON dla dowolnego CLI lub SDK, które akceptuje OpenAI-compatible base URL, API key oraz model ID.", + "customCliNoModels": "Połącz przynajmniej jednego provider, aby uzupełnić selektory models.", "customCliNameLabel": "Nazwa CLI", - "customCliNamePlaceholder": "np. Interfejs wiersza poleceń mojego zespołu", + "customCliNamePlaceholder": "np. My Team CLI", "customCliDefaultModelLabel": "Domyślny model", - "customCliDefaultModelHelp": "Użyj dowolnego identyfikatora modelu lub kombinacji OmniRoute. Większość interfejsów CLI zgodnych z OpenAI potrzebuje jedynie podstawowego adresu URL /v1 i ciągu modelowego.", - "customCliKeyHelper": "W przypadku instalacji lokalnych OmniRoute może używać sk_omniroute. W trybie chmury wybierz jeden z kluczy API zarządzania.", + "customCliDefaultModelHelp": "Użyj dowolnego OmniRoute model ID lub combo. Większość OpenAI-compatible CLIs wymaga tylko base URL /v1 oraz model string.", + "customCliKeyHelper": "Dla lokalnych instalacji OmniRoute może używać sk_omniroute. W trybie chmury wybierz jeden ze swoich zarządzających API keys.", "customCliAliasMappingsLabel": "Mapowania aliasów", - "customCliAliasMappingsHelp": "Opcjonalne aliasy pomocnicze dla skryptów opakowania lub plików konfiguracyjnych, które wymagają stabilnych, skróconych nazw.", + "customCliAliasMappingsHelp": "Opcjonalne aliasy pomocnicze dla skryptów opakowujących lub plików konfiguracyjnych, które wymagają stabilnych, krótkich nazw.", "customCliAddAlias": "Dodaj alias", - "customCliNoMappings": "Nie ma jeszcze mapowań aliasów. Dodaj jeden, jeśli Twoje skrypty opakowania lub zespołu używają stabilnych krótkich nazw.", - "customCliAliasPlaceholder": "np. recenzja", - "customCliTargetModelLabel": "Model docelowy", - "customCliEndpointHintLabel": "Jak okablować punkt końcowy", - "customCliEndpointHint": "Wskaż dowolnemu klientowi kompatybilnemu z OpenAI podstawowy adres URL OmniRoute /v1. Nieprzetworzony punkt końcowy zakończenia czatu to {endpoint}. Użyj bloku JSON, jeśli narzędzie chce obiektu dostawcy, lub skryptu env, gdy odczytuje zmienne OPENAI_*.", - "customCliEnvBlockTitle": "Env/fragment powłoki", - "customCliJsonBlockTitle": "Blok JSON dostawcy", - "copilotConfigGenerator": "Generator konfiguracji GitHub Copilot", - "copilotApiKey": "Klucz API", - "copilotFilterModelsPlaceholder": "Filtruj modele...", - "copilotMaxInputTokens": "Maksymalna liczba tokenów wejściowych", - "copilotMaxOutputTokens": "Maksymalna liczba tokenów wyjściowych", - "copilotToolCalling": "Wywołanie narzędzia", + "customCliNoMappings": "Brak mapowań aliasów. Dodaj jedno, jeśli skrypty opakowujące lub zespołowe używają stabilnych krótkich nazw.", + "customCliAliasPlaceholder": "np. review", + "customCliTargetModelLabel": "Docelowy model", + "customCliEndpointHintLabel": "Jak podłączyć endpoint", + "customCliEndpointHint": "Skieruj dowolnego klienta OpenAI-compatible na base URL /v1 OmniRoute. Surowy endpoint dla chat completions to {endpoint}. Użyj bloku JSON, gdy narzędzie wymaga obiektu provider, lub skryptu env, gdy odczytuje zmienne OPENAI_*.", + "customCliEnvBlockTitle": "Fragment env / shell", + "customCliJsonBlockTitle": "Blok JSON dla provider", + "copilotConfigGenerator": "GitHub Copilot Config Generator", + "copilotApiKey": "API Key", + "copilotFilterModelsPlaceholder": "Filtruj models...", + "copilotMaxInputTokens": "Maksymalna liczba wejściowych tokens", + "copilotMaxOutputTokens": "Maksymalna liczba wyjściowych tokens", + "copilotToolCalling": "Wywoływanie narzędzi", "copilotPasteInto": "Wklej do:", - "wireApiChatCompletions": "Zakończenia czatu (/chat/uzupełnienia)", - "wireApiResponses": "API odpowiedzi (/response)", - "reasoningEffort": "__MISSING__:Reasoning effort for {model}", - "reasoningEffortDefault": "__MISSING__:Default", - "reasoningEffortHint": "__MISSING__:Default preserves the reasoning effort sent by the agent", - "reasoningEffortTier": { - "none": "__MISSING__:None", - "low": "__MISSING__:Low", - "medium": "__MISSING__:Medium", - "high": "__MISSING__:High", - "xhigh": "__MISSING__:XHigh" - } + "wireApiChatCompletions": "Chat Completions (/chat/completions)", + "wireApiResponses": "Responses API (/responses)" }, "combos": { - "title": "Kombinacje", - "description": "Twórz kombinacje modeli z obsługą routingu ważonego i obsługi rezerwowej", - "autoCatalogTitle": "Katalog automatycznego routingu", - "autoCatalogTemplateCount": "{count} szablony", - "autoCatalogDescription": "Wbudowane kombinacje automatyczne/* rozwiązywane dynamicznie od podłączonych dostawców. Użyj dowolnego z tych identyfikatorów jako pola modelu — nie jest wymagana żadna konfiguracja.", - "autoCatalogExpand": "Rozwiń katalog automatycznego wyznaczania tras", - "autoCatalogCollapse": "Zwiń katalog automatycznego wyznaczania tras", - "createCombo": "Utwórz kombinację", - "editCombo": "Edytuj kombinację", - "deleteCombo": "Usuń kombinację", - "noModels": "Żadnych modeli", - "noModelsYet": "Nie dodano jeszcze żadnych modeli", - "addModel": "Dodaj model", - "addModelToCombo": "Dodaj model do kombinacji", + "title": "Combos", + "description": "Tworzenie model combos z routingiem ważonym i obsługą fallback", + "autoCatalogTitle": "Katalog auto-routingu", + "autoCatalogTemplateCount": "{count} szablonów", + "autoCatalogDescription": "Wbudowane combos auto/* rozwiązywane dynamicznie z połączonych providers. Użyj dowolnego z tych IDs jako pola model — konfiguracja nie jest wymagana.", + "autoCatalogExpand": "Rozwiń katalog auto-routingu", + "autoCatalogCollapse": "Zwiń katalog auto-routingu", + "createCombo": "Utwórz Combo", + "editCombo": "Edytuj Combo", + "deleteCombo": "Usuń Combo", + "noModels": "Brak models", + "noModelsYet": "Nie dodano jeszcze żadnych models", + "addModel": "Dodaj Model", + "addModelToCombo": "Dodaj Model do Combo", "routingStrategy": "Strategia routingu", - "maxRetries": "Maksymalna liczba ponownych prób", - "timeout": "Limit czasu (ms)", + "maxRetries": "Maksymalna liczba prób", + "timeout": "Timeout (ms)", "healthcheck": "Kontrola stanu", "priority": "Priorytet", - "fallback": "Powrót", - "roundRobin": "Okrągły Robin", - "random": "Losowe", - "leastLatency": "Najmniejsze opóźnienie", - "comboName": "Nazwa kombinacji", - "comboNamePlaceholder": "moja kombinacja", - "comboDescription": "__MISSING__:Description", - "comboDescriptionPlaceholder": "__MISSING__:Optional note describing this combo", - "deleteConfirm": "Usunąć tę kombinację?", - "noCombosYet": "Nie ma jeszcze żadnych kombinacji", - "comboCreated": "Kombinacja utworzona pomyślnie", - "comboUpdated": "Kombinacja została pomyślnie zaktualizowana", - "comboDeleted": "Kombinacja usunięta", - "failedCreate": "Nie udało się utworzyć kombinacji", - "failedUpdate": "Nie udało się zaktualizować kombinacji", - "errorCreating": "Błąd podczas tworzenia kombinacji", - "errorUpdating": "Błąd aktualizacji kombinacji", - "errorDeleting": "Błąd podczas usuwania kombinacji", + "fallback": "Fallback", + "roundRobin": "Round Robin", + "random": "Random", + "leastLatency": "Najniższe opóźnienie", + "comboName": "Nazwa Combo", + "comboNamePlaceholder": "my-combo", + "comboDescription": "Opis", + "comboDescriptionPlaceholder": "Opcjonalna notatka opisująca to combo", + "deleteConfirm": "Usunąć to combo?", + "noCombosYet": "Brak combos", + "comboCreated": "Pomyślnie utworzono combo", + "comboUpdated": "Pomyślnie zaktualizowano combo", + "comboDeleted": "Usunęto combo", + "failedCreate": "Nie udało się utworzyć combo", + "failedUpdate": "Nie udało się zaktualizować combo", + "errorCreating": "Błąd podczas tworzenia combo", + "errorUpdating": "Błąd podczas aktualizacji combo", + "errorDeleting": "Błąd podczas usuwania combo", "testFailed": "Żądanie testowe nie powiodło się", - "failedToggle": "Nie udało się przełączyć kombinacji", + "failedToggle": "Nie udało się przełączyć combo", "testResults": "Wyniki testu — {name}", "resolvedBy": "Rozwiązane przez:", "more": "+{count} więcej", - "reqs": "wymagania", + "reqs": "żądań", "success": "sukces", - "proxyConfigured": "Serwer proxy skonfigurowany", - "copyComboName": "Skopiuj nazwę kombinacji", - "enableCombo": "Włącz kombinację", - "disableCombo": "Wyłącz kombinację", - "testCombo": "Kombinacja testowa", - "duplicate": "Duplikat", + "proxyConfigured": "Proxy skonfigurowane", + "copyComboName": "Kopiuj nazwę combo", + "enableCombo": "Włącz combo", + "disableCombo": "Wyłącz combo", + "testCombo": "Testuj combo", + "duplicate": "Duplikuj", "proxyConfig": "Konfiguracja proxy", - "nameRequired": "Imię i nazwisko jest wymagane", - "nameInvalid": "Tylko litery, cyfry, -, _, / i . dozwolone", - "nameHint": "Litery, cyfry, -, _, / i . dozwolone", - "priorityDesc": "Sekwencyjne działanie awaryjne: najpierw wypróbowuje model 1, potem 2 itd.", - "weightedDesc": "Rozdziela ruch według procentu wagi z rezerwą", - "roundRobinDesc": "Dystrybucja kołowa: każde żądanie trafia do następnego modelu w rotacji", + "nameRequired": "Nazwa jest wymagana", + "nameInvalid": "Dozwolone są tylko litery, cyfry, -, _, / oraz .", + "nameHint": "Dozwolone litery, cyfry, -, _, / oraz .", + "priorityDesc": "Sekwencyjny fallback: najpierw próbuje model 1, potem 2 itd.", + "weightedDesc": "Rozdziela ruch według procentowej wagi z fallback", + "roundRobinDesc": "Dystrybucja cykliczna: każde żądanie trafia do kolejnego model w rotacji", "contextRelay": "Context Relay", - "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", - "randomDesc": "Jednolity wybór losowy, a następnie powrót do pozostałych modeli", - "leastUsedDesc": "Wybiera model z najmniejszą liczbą żądań, równoważąc obciążenie w czasie", - "costOptimizedDesc": "Najpierw wybiera najtańszy model na podstawie ceny", - "resetAware": "Resetowanie RR", - "resetAwareDesc": "Bilansuje pozostały limit w stosunku do 5-godzinnych i cotygodniowych resetów, a następnie w systemie okrężnym uzyskuje podobne wyniki", + "contextRelayDesc": "Zachowuje ciągłość sesji dzięki podsumowaniom handoff podczas rotacji kont", + "randomDesc": "Jednolity wybór losowy, a następnie fallback do pozostałych models", + "leastUsedDesc": "Wybiera model z najmniejszą liczbą żądań, bilansując obciążenie w czasie", + "costOptimizedDesc": "Kieruje ruch najpierw do najtańszego model na podstawie cennika", + "resetAware": "Reset-Aware RR", + "resetAwareDesc": "Bilansuje pozostały quota z resetami 5-godzinnymi i tygodniowymi, a następnie stosuje round-robin dla podobnych wyników", "strictRandom": "Strict Random", - "strictRandomDesc": "Shuffle deck — uses each model once before reshuffling", - "fusion": "__MISSING__:Fusion", - "fusionDesc": "__MISSING__:Fans the prompt to every panel model in parallel, then a judge model synthesizes one final answer", - "models": "Modele", - "autoBalance": "Automatyczne balansowanie", + "strictRandomDesc": "Tasowanie talii — używa każdego model raz przed ponownym przetasowaniem", + "fusion": "Fusion", + "fusionDesc": "Wysyła prompt równolegle do każdego model panelu, a następnie model sędziowski syntetyzuje jedną ostateczną odpowiedź", + "fusionJudgeModel": "Model sędziowski", + "fusionJudgeModelHelp": "Model, który syntetyzuje odpowiedzi panelu w jedną ostateczną odpowiedź. Pozostaw puste, aby użyć pierwszego panel model.", + "fusionMinPanel": "Min panel", + "fusionMinPanelHelp": "Wymagana liczba udanych odpowiedzi panelu, zanim opóźnione models otrzymają okno grace (domyślnie 2).", + "fusionStragglerGraceMs": "Straggler grace (ms)", + "fusionStragglerGraceMsHelp": "Jak długo czekać na powolne panel models po osiągnięciu kworum (domyślnie 8000).", + "fusionPanelHardTimeoutMs": "Panel hard timeout (ms)", + "fusionPanelHardTimeoutMsHelp": "Absolutny limit, dzięki któremu jeden zawieszony model nie zablokuje całego panelu (domyślnie 90000).", + "models": "Models", + "autoBalance": "Auto-balans", "advancedSettings": "Ustawienia zaawansowane", "retryDelay": "Opóźnienie ponownej próby (ms)", - "concurrencyPerModel": "Współbieżność/model", - "queueTimeout": "Limit czasu kolejki (ms)", - "contextRelayHandoffThreshold": "Handoff Threshold", - "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.", - "contextRelayMaxMessages": "Max Messages For Summary", - "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.", - "contextRelaySummaryModel": "Summary Model", - "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.", - "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.", - "advancedHint": "Pozostaw puste, aby użyć globalnych ustawień domyślnych. Zastępują one ustawienia poszczególnych dostawców.", - "failoverBeforeRetry": "Przełączenie awaryjne przed ponowną próbą", - "maxSetRetries": "Maksymalna liczba powtórzeń zestawu", - "setRetryDelayMs": "Ustaw opóźnienie ponownej próby (ms)", - "moveUp": "Przesuń się w górę", + "concurrencyPerModel": "Współbieżność / Model", + "queueTimeout": "Timeout kolejki (ms)", + "contextRelayHandoffThreshold": "Próg handoff", + "contextRelayHandoffThresholdHelp": "Gdy użycie quota osiągnie ten próg, OmniRoute generuje ustrukturyzowane podsumowanie handoff, zanim aktywne konto zostanie wyczerpane.", + "contextRelayMaxMessages": "Maksymalna liczba wiadomości do podsumowania", + "contextRelayMaxMessagesHelp": "Ogranicza, jak duża część najnowszej historii jest skracana do podsumowania relay.", + "contextRelaySummaryModel": "Model podsumowujący", + "contextRelaySummaryModelHelp": "Opcjonalny model nadpisujący, używany wyłącznie do generowania podsumowania handoff. Pozostaw puste, aby ponownie użyć aktywnego combo model.", + "contextRelayProviderNote": "Context Relay generuje obecnie handoffs dla rotacji kont Codex. Połącz je z wieloma kontami tego samego provider, aby uzyskać najlepszą ciągłość.", + "advancedHint": "Pozostaw puste, aby użyć globalnych wartości domyślnych. Nadpisują one ustawienia per-provider.", + "failoverBeforeRetry": "Failover przed ponowną próbą", + "maxSetRetries": "Maksymalna liczba prób dla zestawu", + "setRetryDelayMs": "Opóźnienie ponownej próby zestawu (ms)", + "moveUp": "Przesuń w górę", "moveDown": "Przesuń w dół", "removeModel": "Usuń", "saving": "Zapisywanie...", - "weighted": "Ważona", - "leastUsed": "Najrzadziej używany", - "costOpt": "Opcja kosztowa", - "strategyGuideTitle": "How to use this strategy", - "strategyGuideWhen": "When to use", - "strategyGuideAvoid": "Avoid when", - "strategyGuideExample": "Example", + "weighted": "Ważony", + "leastUsed": "Najmniej używany", + "costOpt": "Cost-Opt", + "strategyGuideTitle": "Jak korzystać z tej strategii", + "strategyGuideWhen": "Kiedy używać", + "strategyGuideAvoid": "Kiedy unikać", + "strategyGuideExample": "Przykład", "strategyGuide": { "priority": { - "when": "You have one preferred model and only want fallback on failure.", - "avoid": "You need request distribution across models.", - "example": "Primary coding model with cheaper backup for outages." + "when": "Gdy masz jeden preferowany model i chcesz fallback tylko w przypadku awarii.", + "avoid": "Gdy potrzebujesz dystrybucji żądań między wieloma models.", + "example": "Główny model do kodowania z tańszą kopią zapasową na wypadek awarii." }, "weighted": { - "when": "You need controlled traffic split across models.", - "avoid": "You cannot maintain accurate weights over time.", - "example": "80% stable model + 20% canary model rollout." + "when": "Gdy potrzebujesz kontrolowanego podziału ruchu między models.", + "avoid": "Gdy nie możesz utrzymać dokładnych wag w czasie.", + "example": "80% stabilny model + 20% wdrożenie typu canary model." }, "round-robin": { - "when": "You want predictable and even distribution.", - "avoid": "Models differ too much in latency or cost.", - "example": "Same model on multiple accounts to spread throughput." + "when": "Gdy chcesz uzyskać przewidywalną i równomierną dystrybucję.", + "avoid": "Gdy models różnią się zbyt mocno pod względem opóźnienia lub kosztu.", + "example": "Ten sam model na wielu kontach w celu rozłożenia przepustowości." }, "random": { - "when": "You want simple distribution with minimal setup.", - "avoid": "You need strict traffic guarantees.", - "example": "Quick prototyping with equivalent models." + "when": "Gdy chcesz prostej dystrybucji przy minimalnej konfiguracji.", + "avoid": "Gdy potrzebujesz ścisłych gwarancji dotyczących ruchu.", + "example": "Szybkie prototypowanie z równoważnymi models." }, "least-used": { - "when": "You want adaptive balancing based on live demand.", - "avoid": "Traffic is too low to benefit from usage balancing.", - "example": "Mixed workloads where one model often gets overloaded." + "when": "Gdy chcesz adaptacyjnego równoważenia na podstawie bieżącego zapotrzebowania.", + "avoid": "Gdy ruch jest zbyt niski, aby czerpać korzyści z równoważenia użycia.", + "example": "Mieszane obciążenia, w których jeden model często ulega przeciążeniu." }, "cost-optimized": { - "when": "Cost reduction is your top priority.", - "avoid": "Pricing data is missing or outdated.", - "example": "Background or batch jobs where lower cost is preferred." + "when": "Gdy redukcja kosztów jest najwyższym priorytetem.", + "avoid": "Gdy dane o cenach są niedostępne lub nieaktualne.", + "example": "Zadania w tle lub wsadowe, gdzie preferowany jest niższy koszt." }, "reset-aware": { - "when": "Przekierowujesz między wieloma kontami dzięki telemetrii przydziałów i różnym oknom resetowania.", - "avoid": "Dane telemetryczne dotyczące przydziałów są niedostępne dla większości kont.", - "example": "Wolisz cotygodniowe resetowanie konta na poziomie 60% jutro niż resetowanie konta na poziomie 80% później." + "when": "Gdy kierujesz ruch przez wiele kont z telemetryczną obsługą quota i różnymi oknami resetowania.", + "avoid": "Gdy telemetria quota jest niedostępna dla większości kont.", + "example": "Preferowanie tygodniowego konta wykorzystanego w 60%, które resetuje się jutro, nad kontem wykorzystanym w 80%, które resetuje się później." }, "strict-random": { - "when": "Use when you want perfectly even spread — each model used once before repeating.", - "avoid": "Avoid when models have different quality or latency and order matters.", - "example": "Example: Multiple accounts of the same model to distribute usage evenly." + "when": "Używaj, gdy chcesz uzyskać idealnie równomierne rozłożenie — każdy model jest używany raz przed powtórzeniem.", + "avoid": "Unikaj, gdy models mają różną jakość lub opóźnienie, a kolejność ma znaczenie.", + "example": "Przykład: Wiele kont tego samego model w celu równomiernego rozłożenia użycia." }, "p2c": { - "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.", - "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.", - "example": "Example: High-throughput inference across 4+ equivalent model endpoints." + "when": "Używaj, gdy chcesz uzyskać wybór o niskim opóźnieniu przy użyciu algorytmu Power-of-Two-Choices.", + "avoid": "Unikaj dla małych combos z 2 lub mniejszą liczbą models — brak korzyści w porównaniu do round-robin.", + "example": "Przykład: Wnioskowanie o wysokiej przepustowości przez ponad 4 równoważne endpoints model." }, "context-relay": { - "when": "Use when long sessions must survive account rotation without losing the working context.", - "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.", - "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion." + "when": "Używaj, gdy długie sesje muszą przetrwać rotację kont bez utraty kontekstu roboczego.", + "avoid": "Unikaj, gdy przełączanie kont jest rzadkie lub gdy nie chcesz dodatkowych żądań podsumowania.", + "example": "Przykład: Sesje Codex rotujące między wieloma kontami blisko wyczerpania quota." }, "fill-first": { - "when": "Użyj, jeśli chcesz całkowicie wyczerpać limit jednego dostawcy przed przejściem do następnego.", - "avoid": "Unikaj sytuacji, gdy potrzebujesz równoważenia obciążenia na poziomie żądania między dostawcami.", - "example": "Przykład: Wykorzystaj wszystkie kredyty Deepgram o wartości 200 USD, zanim wrócisz do Groq." + "when": "Używaj, gdy chcesz całkowicie wyczerpać quota jednego provider przed przejściem do następnego.", + "avoid": "Unikaj, gdy potrzebujesz równoważenia obciążenia na poziomie pojedynczych żądań między wieloma providers.", + "example": "Przykład: Zużycie całego kredytu 200 USD w Deepgram przed przejściem na fallback do Groq." }, "auto": { - "when": "Używaj, gdy potrzebujesz wieloczynnikowego routingu punktacji na podstawie kosztów, opóźnień i jakości.", - "avoid": "Unikaj, gdy potrzebujesz ścisłego uporządkowania priorytetów lub trwałości historycznej.", - "example": "Przykład: zrównoważ żądania pomiędzy modelami o różnych mocach." + "when": "Używaj, gdy potrzebujesz wieloczynnikowego routingu punktowego opartego na koszcie, opóźnieniu i jakości.", + "avoid": "Unikaj, gdy wymagasz ścisłego sortowania według priorytetów lub trwałości historycznej.", + "example": "Przykład: Równoważenie żądań między models o różnych mocnych stronach." }, "lkgp": { - "when": "Użyj, jeśli chcesz wyznaczać trasy na podstawie historycznych wskaźników powodzenia i wydajności.", + "when": "Używaj, gdy chcesz kierować ruch na podstawie historycznego współczynnika sukcesu i wydajności.", "avoid": "Unikaj, gdy dane historyczne są ograniczone lub niewiarygodne.", - "example": "Przykład: Kieruj do modeli z dobrym doświadczeniem w zakresie określonych zadań." + "example": "Przykład: Kierowanie ruchu do models o dobrych wynikach w określonych zadaniach." }, "context-optimized": { - "when": "Użyj, gdy chcesz zoptymalizować użycie okna kontekstowego w różnych modelach.", - "avoid": "Unikaj, gdy modele mają podobną długość kontekstu lub zadania są proste.", - "example": "Przykład: Rozłóż długie konwersacje pomiędzy modelami z większymi oknami kontekstowymi." + "when": "Używaj, gdy musisz zoptymalizować użycie okna kontekstowego między różnymi models.", + "avoid": "Unikaj, gdy models mają podobne długości kontekstu lub zadania są proste.", + "example": "Przykład: Rozdzielanie długich rozmów do models z większymi oknami kontekstowymi." } }, "advancedHelp": { - "maxRetries": "How many retries are attempted before failing a request.", - "retryDelay": "Initial wait between retries. Higher values reduce burst pressure.", - "timeout": "Maximum request duration before aborting.", - "healthcheck": "Skips unhealthy models/providers from routing decisions.", - "concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.", - "queueTimeout": "How long a request can wait in queue before timing out.", - "failoverBeforeRetry": "Po włączeniu każdy błąd nadrzędny powoduje natychmiastowe przełączenie awaryjne do następnego celu kombi, pomijając wszystkie ponowne próby i zastępcze adresy URL.", - "maxSetRetries": "Liczba ponownych prób wykonania pełnego zestawu docelowego, gdy każdy cel zakończy się niepowodzeniem. 0 = brak ponawiania ustawionego poziomu.", - "setRetryDelayMs": "Opóźnienie między ponawianiem prób na poziomie zestawu, dające czas na rozwiązanie przejściowych problemów." + "maxRetries": "Ile prób ponowienia jest podejmowanych przed oznaczeniem żądania jako nieudane.", + "retryDelay": "Początkowy czas oczekiwania między próbami. Wyższe wartości zmniejszają nagłe obciążenie (burst pressure).", + "timeout": "Maksymalny czas trwania żądania przed jego przerwaniem.", + "healthcheck": "Pomija niesprawne models/providers przy podejmowaniu decyzji o routingu.", + "concurrencyPerModel": "Maksymalna liczba jednoczesnych żądań dozwolona per model w round-robin.", + "queueTimeout": "Jak długo żądanie może czekać w kolejce przed przekroczeniem limitu czasu (timeout).", + "failoverBeforeRetry": "Po włączeniu, każdy błąd upstream wyzwala natychmiastowy failover na kolejny cel combo, pomijając wszystkie próby ponowienia i fallback URLs.", + "maxSetRetries": "Liczba prób ponowienia dla całego zestawu docelowego, gdy każdy cel zawiedzie. 0 = brak ponowienia na poziomie zestawu.", + "setRetryDelayMs": "Opóźnienie między próbami ponowienia na poziomie zestawu, dające czas na rozwiązanie problemów przejściowych.", + "disableSessionStickiness": "Rotuj do innego połączenia przy każdym żądaniu zamiast przypinać całą konwersację do jednego połączenia na podstawie skrótu (hash) pierwszej wiadomości. Nadpisuje globalną wartość domyślną. Pozostaw jako Inherit, aby zachować trafienia prompt-cache dla czatów wieloturowych." }, - "templatesTitle": "Quick templates", - "templatesDescription": "Apply a starting profile, then adjust models and config.", - "templateApply": "Apply template", - "templateHighAvailability": "High availability", - "templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.", - "templateCostSaver": "Cost saver", - "templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.", - "templateBalanced": "Balanced load", - "templateBalancedDesc": "Least-used routing to spread demand over time.", - "usageGuideHide": "Hide", - "usageGuideDontShowAgain": "Don't show again", - "usageGuideShow": "Show guide", - "quickTestTitle": "Combo ready to validate", - "quickTestDescription": "Run a test now to confirm fallback and latency behavior.", - "testNow": "Test now", - "pricingCoverage": "Pricing coverage", - "pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.", - "pricingAvailable": "Pricing available", - "pricingMissing": "No pricing", - "pricingAvailableShort": "priced", - "pricingMissingShort": "no-price", - "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", - "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", - "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", - "filterAll": "All", - "filterIntelligent": "Intelligent", - "filterDeterministic": "Deterministic", - "filterEmptyTitle": "No combos match this strategy filter.", - "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.", - "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.", - "readinessTitle": "Gotowy do zapisania?", - "readinessDescription": "Przed utworzeniem lub aktualizacją tej kombinacji przejrzyj listę kontrolną.", - "readinessCheckName": "Nazwa kombinacji jest prawidłowa", + "templatesTitle": "Szybkie szablony", + "templatesDescription": "Zastosuj profil startowy, a następnie dostosuj models i konfigurację.", + "templateApply": "Zastosuj szablon", + "templateHighAvailability": "Wysoka dostępność", + "templateHighAvailabilityDesc": "Routing priorytetowy z kontrolą stanu i bezpiecznymi próbami ponowienia.", + "templateCostSaver": "Oszczędzanie kosztów", + "templateCostSaverDesc": "Routing zoptymalizowany pod kątem kosztów dla zadań z priorytetem budżetu.", + "templateBalanced": "Zbalansowane obciążenie", + "templateBalancedDesc": "Routing typu least-used w celu rozłożenia zapotrzebowania w czasie.", + "usageGuideHide": "Ukryj", + "usageGuideDontShowAgain": "Nie pokazuj ponownie", + "usageGuideShow": "Pokaż przewodnik", + "quickTestTitle": "Combo gotowe do walidacji", + "quickTestDescription": "Uruchom test teraz, aby potwierdzić działanie fallback i opóźnienia.", + "testNow": "Testuj teraz", + "pricingCoverage": "Pokrycie cenowe", + "pricingCoverageHint": "Opcja cost-optimized działa najlepiej, gdy wszystkie combo models mają określone ceny.", + "pricingAvailable": "Ceny są dostępne", + "pricingMissing": "Brak cen", + "pricingAvailableShort": "wycenione", + "pricingMissingShort": "brak ceny", + "warningRoundRobinSingleModel": "Round-robin jest najbardziej użyteczny z co najmniej 2 models.", + "warningCostOptimizedPartialPricing": "Tylko {priced} z {total} models ma określone ceny. Routing może być tylko częściowo świadomy kosztów.", + "warningCostOptimizedNoPricing": "Nie znaleziono danych o cenach dla tego combo. Routing cost-optimized może działać w nieoczekiwany sposób.", + "filterAll": "Wszystkie", + "filterIntelligent": "Inteligentne", + "filterDeterministic": "Deterministyczne", + "filterEmptyTitle": "Żadne combos nie pasują do tego filtra strategii.", + "filterEmptyIntelligentDescription": "Utwórz combo auto lub LKGP, aby zapełnić dashboard inteligentnego routingu.", + "filterEmptyDeterministicDescription": "Obecnie istnieją tylko combos auto i LKGP. Przełącz z powrotem na Wszystkie lub utwórz deterministyczne combo.", + "readinessTitle": "Gotowe do zapisania?", + "readinessDescription": "Przejrzyj listę kontrolną przed utworzeniem lub aktualizacją tego combo.", + "readinessCheckName": "Nazwa combo jest prawidłowa", "readinessCheckModels": "Wybrano co najmniej jeden model", - "readinessCheckWeights": "Suma ważona wynosi 100%", - "readinessCheckWeightsOptional": "Reguła wagi nie jest wymagana", + "readinessCheckWeights": "Suma wag wynosi 100%", + "readinessCheckWeightsOptional": "Reguła wag nie jest wymagana", "readinessCheckPricing": "Dane cenowe są dostępne", "readinessCheckPricingOptional": "Reguła cenowa nie jest wymagana", - "saveBlockedTitle": "Zapisywanie jest zablokowane do czasu naprawienia następujących elementów:", - "saveBlockName": "Zdefiniuj nazwę kombinacji.", + "saveBlockedTitle": "Zapisywanie jest zablokowane, dopóki następujące elementy nie zostaną naprawione:", + "saveBlockName": "Zdefiniuj nazwę combo.", "saveBlockModels": "Dodaj co najmniej jeden model.", "saveBlockWeighted": "Ustaw wagi na 100% (obecnie: {total}%).", - "saveBlockPricing": "Dodaj cenę dla co najmniej jednego modelu lub wybierz inną strategię.", - "recommendationsLabel": "Recommended setup", - "applyRecommendations": "Apply recommendations", - "recommendationsUpdated": "Recommendations updated for {strategy}.", - "recommendationsApplied": "Recommendations applied to this combo.", - "intelligentPanelTitle": "Intelligent Routing Dashboard", - "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.", - "configOnlyStatus": "__MISSING__:Configuration View", - "configOnlyHint": "__MISSING__:This panel shows routing inputs only. Live breaker state is available on the Health page.", - "routingInputs": "__MISSING__:Routing Inputs", - "routingInputsHint": "__MISSING__:Mode pack and weighting stay here; breaker runtime state stays on the Health page.", - "emailVisibilityHint": "__MISSING__:Account emails here follow the global privacy toggle.", - "emailVisibilityTooltip": "__MISSING__:Use the eye icon to reveal or hide account emails globally across combos, providers and quota screens.", - "manualModel": "__MISSING__:Manual model", - "manualModelInvalid": "__MISSING__:Enter a model as provider/model.", - "manualModelUnknownProvider": "__MISSING__:Unknown provider prefix.", - "builderDynamicAccountShort": "__MISSING__:Dynamic account", - "builderNeedValidName": "__MISSING__:Define a valid combo name before continuing.", - "statusOverview": "Status Overview", - "normalOperation": "Normal Operation", - "allProvidersHealthy": "Providers are reporting healthy routing conditions.", - "incidentMode": "Incident Mode", - "highCircuitBreakerRate": "High circuit breaker trip rate detected.", - "activeModePack": "Active Mode Pack", - "modePackUpdated": "Mode pack updated to {pack}.", - "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.", - "providerScores": "Provider Scores", - "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.", - "excludedProviders": "Excluded Providers", - "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.", - "noExcludedProviders": "No providers are currently excluded.", + "saveBlockPricing": "Dodaj ceny dla co najmniej jednego model lub wybierz inną strategię.", + "recommendationsLabel": "Zalecana konfiguracja", + "applyRecommendations": "Zastosuj zalecenia", + "recommendationsUpdated": "Zaktualizowano zalecenia dla {strategy}.", + "recommendationsApplied": "Zastosowano zalecenia do tego combo.", + "intelligentPanelTitle": "Dashboard inteligentnego routingu", + "intelligentPanelDesc": "Ocenianie i stan zdrowia w czasie rzeczywistym dla tego combo z auto-routing.", + "configOnlyStatus": "Widok konfiguracji", + "configOnlyHint": "Ten panel pokazuje tylko wejścia routingu. Bieżący stan circuit breaker jest dostępny na stronie Health.", + "routingInputs": "Wejścia routingu", + "routingInputsHint": "Mode pack i ważenie pozostają tutaj; stan wykonawczy circuit breaker pozostaje na stronie Health.", + "emailVisibilityHint": "Adresy e-mail kont w tym miejscu podlegają globalnemu przełącznikowi prywatności.", + "emailVisibilityTooltip": "Użyj ikony oka, aby globalnie pokazać lub ukryć adresy e-mail kont na ekranach combos, providers i quota.", + "manualModel": "Ręczny model", + "manualModelInvalid": "Wprowadź model w formacie provider/model.", + "manualModelUnknownProvider": "Nieznany prefiks provider.", + "builderDynamicAccountShort": "Dynamiczne konto", + "builderNeedValidName": "Zdefiniuj prawidłową nazwę combo przed kontynuowaniem.", + "statusOverview": "Przegląd statusu", + "normalOperation": "Normalne działanie", + "allProvidersHealthy": "Providers zgłaszają prawidłowe warunki routingu.", + "incidentMode": "Tryb incydentu", + "highCircuitBreakerRate": "Wykryto wysoki wskaźnik wyzwalania circuit breaker.", + "activeModePack": "Aktywny Mode pack", + "modePackUpdated": "Zaktualizowano Mode pack na {pack}.", + "modePackHint": "Przełącz presety, aby wpłynąć na silnik routingu bez przebudowywania combo.", + "providerScores": "Wyniki dla provider", + "allProvidersEvaluated": "Nie skonfigurowano puli kandydatów. Wszyscy aktywni providers są oceniani w czasie rzeczywistym.", + "excludedProviders": "Wykluczeni providers", + "excludedProvidersHint": "Providers z otwartym (OPEN) circuit breaker są tymczasowo wykluczeni z routingu.", + "noExcludedProviders": "Obecnie żaden z providers nie jest wykluczony.", "cooldownMinutes": "Cooldown: {minutes}m", - "builderIntelligentTitle": "Intelligent Routing Configuration", - "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.", - "candidatePoolLabel": "Candidate Pool", - "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.", - "candidatePoolEmpty": "No active providers available yet.", - "candidatePoolAllProviders": "All providers", - "modePackLabel": "Mode Pack", - "routerStrategyLabel": "Router Strategy", - "strategyRules": "Rules (6-Factor Scoring)", + "builderIntelligentTitle": "Konfiguracja inteligentnego routingu", + "builderIntelligentDesc": "Skonfiguruj wieloczynnikowy silnik oceniania dla tego combo z auto-routingiem.", + "candidatePoolLabel": "Pula kandydatów", + "candidatePoolHint": "Wybierz, których providers ten silnik ma oceniać. Pozostaw puste, aby użyć wszystkich aktywnych providers.", + "candidatePoolEmpty": "Brak dostępnych aktywnych providers.", + "candidatePoolAllProviders": "Wszyscy providers", + "modePackLabel": "Mode pack", + "routerStrategyLabel": "Strategia routera", + "strategyRules": "Reguły (ocenianie 6-czynnikowe)", "explorationRateLabel": "Exploration Rate", - "explorationRateHint": "{percent}% of requests can explore non-optimal providers.", - "budgetCapLabel": "Budget Cap (USD / request)", - "budgetCapPlaceholder": "No limit", - "advancedWeightsTitle": "Advanced: Scoring Weights", + "explorationRateHint": "{percent}% żądań może eksplorować nieoptymalnych providers.", + "budgetCapLabel": "Limit budżetu (USD / żądanie)", + "budgetCapPlaceholder": "Brak limitu", + "advancedWeightsTitle": "Zaawansowane: Wagi oceniania", "weightQuota": "Quota", - "weightHealth": "Health", - "weightCostInv": "Cost", - "weightLatencyInv": "Latency", + "weightHealth": "Zdrowie", + "weightCostInv": "Koszt", + "weightLatencyInv": "Opóźnienie", "weightTaskFit": "Task Fit", - "weightStability": "Stability", + "weightStability": "Stabilność", "weightTierPriority": "Tier", - "reviewIntelligentTitle": "Intelligent Routing Config", + "reviewIntelligentTitle": "Konfiguracja inteligentnego routingu", "strategyRecommendations": { "priority": { - "title": "Fail-safe baseline", - "description": "Use one primary model and keep fallback chain short and reliable.", - "tip1": "Put your most reliable model first.", - "tip2": "Keep 1-2 backup models with similar quality.", - "tip3": "Use safe retries to absorb transient provider failures." + "title": "Bezpieczna linia bazowa", + "description": "Użyj jednego głównego model i utrzymuj łańcuch fallback krótki i niezawodny.", + "tip1": "Umieść najbardziej niezawodny model na początku.", + "tip2": "Zachowaj 1-2 models zapasowe o podobnej jakości.", + "tip3": "Użyj bezpiecznych powtórzeń, aby zamortyzować przejściowe awarie provider." }, "weighted": { - "title": "Controlled traffic split", - "description": "Great for canary rollouts and gradual migration between models.", - "tip1": "Start with conservative split like 90/10.", - "tip2": "Keep the total at 100% and auto-balance after changes.", - "tip3": "Monitor success and latency before increasing canary weight." + "title": "Kontrolowany podział ruchu", + "description": "Doskonałe do wdrożeń typu canary i stopniowej migracji między models.", + "tip1": "Rozpocznij od ostrożnego podziału, na przykład 90/10.", + "tip2": "Utrzymuj sumę na poziomie 100% i automatycznie bilansuj po zmianach.", + "tip3": "Monitoruj sukces i opóźnienie przed zwiększeniem wagi canary." }, "round-robin": { - "title": "Predictable load sharing", - "description": "Best when models are equivalent and you need smooth distribution.", - "tip1": "Use at least 2 models.", - "tip2": "Set concurrency limits to avoid burst overload.", - "tip3": "Use queue timeout to fail fast under saturation." + "title": "Przewidywalny podział obciążenia", + "description": "Najlepsze, gdy models są równoważne i potrzebna jest płynna dystrybucja.", + "tip1": "Użyj co najmniej 2 models.", + "tip2": "Ustaw limity współbieżności, aby uniknąć przeciążenia nagłym wzrostem ruchu.", + "tip3": "Użyj queue timeout, aby szybko zgłosić błąd w przypadku nasycenia." }, "random": { - "title": "Quick spread with low setup", - "description": "Use when you need simple distribution without strict guarantees.", - "tip1": "Use models with similar latency profiles.", - "tip2": "Keep retries enabled to absorb random misses.", - "tip3": "Prefer this for experimentation, not strict SLAs." + "title": "Szybkie rozproszenie przy minimalnej konfiguracji", + "description": "Użyj, gdy potrzebujesz prostej dystrybucji bez ścisłych gwarancji.", + "tip1": "Użyj models o podobnych profilach opóźnień.", + "tip2": "Pozostaw włączone powtórzenia, aby zamortyzować losowe niepowodzenia.", + "tip3": "Preferuj to rozwiązanie do eksperymentów, nie do ścisłych umów SLA." }, "least-used": { - "title": "Adaptive balancing", - "description": "Routes to less-used models to reduce hotspots over time.", - "tip1": "Works better under continuous traffic.", - "tip2": "Combine with health checks for safer balancing.", - "tip3": "Track per-model usage to validate distribution gains." + "title": "Adaptacyjne równoważenie", + "description": "Kieruje ruch do rzadziej używanych models, aby z czasem redukować przeciążenia punktowe.", + "tip1": "Działa lepiej przy ciągłym ruchu.", + "tip2": "Połącz z kontrolami zdrowia (health checks) dla bezpieczniejszego równoważenia.", + "tip3": "Śledź użycie poszczególnych models, aby zweryfikować korzyści z dystrybucji." }, "cost-optimized": { - "title": "Budget-first routing", - "description": "Routes to lower-cost models when pricing metadata is available.", - "tip1": "Ensure pricing coverage for all selected models.", - "tip2": "Keep a quality fallback for hard prompts.", - "tip3": "Use for batch/background jobs where cost is the main KPI." + "title": "Routing z priorytetem budżetu", + "description": "Kieruje ruch do tańszych models, gdy dane cenowe są dostępne.", + "tip1": "Upewnij się, że dane cenowe są dostępne dla wszystkich wybranych models.", + "tip2": "Zachowaj wysokiej jakości fallback dla trudnych zapytań.", + "tip3": "Używaj do zadań wsadowych/w tle, gdzie koszt jest głównym wskaźnikiem KPI." }, "reset-aware": { - "title": "Rotacja kont z możliwością resetowania", - "description": "Równoważy pozostały limit dostawcy względem czasu resetowania.", - "tip1": "Użyj jawnych kroków dotyczących konta lub routingu tagów konta w przypadku dostawców korzystających z telemetrii przydziałów.", - "tip2": "Dostosuj sesję do tygodniowych ciężarów, gdy krótkotrwałe wyczerpanie jest bardziej ryzykowne.", - "tip3": "Staraj się, aby krawat był mały, aby równoważne konta nadal rotowały sprawiedliwie." + "title": "Rotacja kont uwzględniająca reset", + "description": "Bilansuje pozostałą quota u provider w stosunku do czasu resetu.", + "tip1": "Użyj jawnych kroków konta lub routingu opartego na tagach kont dla providers z telemetryczną obsługą quota.", + "tip2": "Dostosuj wagi sesyjne w stosunku do tygodniowych, gdy krótkoterminowe wyczerpanie jest bardziej ryzykowne.", + "tip3": "Utrzymuj wąskie pasmo remisowe, aby równorzędne konta nadal rotowały sprawiedliwie." }, "strict-random": { - "title": "Shuffle deck distribution", - "description": "Each model is used exactly once per cycle before reshuffling.", - "tip1": "Use at least 2 models for meaningful distribution.", - "tip2": "Works best with equivalent-performance models.", - "tip3": "Ideal for load balancing across multiple API accounts." + "title": "Rozkład losowy bez powtórzeń (Shuffle)", + "description": "Każdy model jest używany dokładnie raz w cyklu przed ponownym wymieszaniem.", + "tip1": "Użyj co najmniej 2 models dla sensownej dystrybucji.", + "tip2": "Działa najlepiej z models o zbliżonej wydajności.", + "tip3": "Idealne do równoważenia obciążenia (load balancing) na wielu kontach API." }, "fill-first": { - "description": "Wyczerp limity dostawców sekwencyjnie, a następnie cofnij je.", - "tip1": "Używaj do routingu opartego na przydziałach z wyraźnymi łańcuchami awaryjnymi.", - "tip2": "Dokładnie ustalaj limity, aby uniknąć przedwczesnego cofnięcia się.", - "tip3": "Działa najlepiej z dostawcami oferującymi bezpłatne poziomy lub pakiety kredytowe.", - "title": "Wyczerpanie kwot" + "description": "Wyczerpuj quota u provider sekwencyjnie przed zastosowaniem fallback.", + "tip1": "Używaj do routingu opartego na quota z jasnymi łańcuchami fallback.", + "tip2": "Ustawiaj quota dokładnie, aby uniknąć przedwczesnego fallback.", + "tip3": "Działa najlepiej z providers oferującymi darmowe pakiety (free tiers) lub pulę środków.", + "title": "Wyczerpanie quota" }, "auto": { - "description": "Trasa oparta na punktacji w czasie rzeczywistym pod kątem kosztów, opóźnień, jakości i kondycji.", - "tip1": "Pozwól silnikowi automatycznie zrównoważyć wiele czynników.", - "tip2": "Monitoruj, które czynniki wpływają na decyzje dotyczące routingu w dziennikach.", - "tip3": "Używaj w przypadku złożonych obciążeń, w których nie dominuje żaden pojedynczy czynnik.", + "description": "Wyznaczaj routing na podstawie oceniania w czasie rzeczywistym pod kątem kosztów, opóźnień, jakości i stanu zdrowia.", + "tip1": "Pozwól silnikowi automatycznie bilansować wiele czynników.", + "tip2": "Monitoruj w logach, które czynniki wpływają na decyzje o routingu.", + "tip3": "Używaj do złożonych zadań, w których żaden pojedynczy czynnik nie dominuje.", "title": "Optymalizacja wieloczynnikowa" }, "lkgp": { - "description": "Trasa oparta na historycznych wynikach i wzorcach sukcesu.", - "tip1": "Wymaga wystarczającej historii żądań w celu uzyskania dokładnych przewidywań.", - "tip2": "Dobre w przypadku obciążeń ze spójnymi wzorcami wydajności modelu.", - "tip3": "Monitoruj dokładność przewidywań i w razie potrzeby dostosowuj wagi.", - "title": "Trasowanie oparte na historii" + "description": "Wyznaczaj routing na podstawie historycznej wydajności i wzorców sukcesu.", + "tip1": "Wymaga wystarczającej historii żądań do dokładnych przewidywań.", + "tip2": "Dobre dla obciążeń o spójnych wzorcach wydajności dla models.", + "tip3": "Monitoruj dokładność przewidywań i dostosowuj wagi w razie potrzeby.", + "title": "Routing oparty na historii" }, "context-optimized": { - "description": "Optymalizuj routing w oparciu o wykorzystanie okna kontekstowego i wydajność tokena.", - "tip1": "Kieruj długie rozmowy do modeli z większymi oknami kontekstowymi.", - "tip2": "Monitoruj wykorzystanie kontekstu, aby uniknąć marnowania tokenów.", - "tip3": "Najlepsze dla konwersacyjnej sztucznej inteligencji wymagającej obszernego przechowywania kontekstu.", + "description": "Optymalizuj routing na podstawie użycia okna kontekstowego i wydajności token.", + "tip1": "Kieruj długie konwersacje do models z większymi oknami kontekstowymi.", + "tip2": "Monitoruj wykorzystanie kontekstu, aby uniknąć marnowania token.", + "tip3": "Najlepsze dla konwersacyjnego AI wymagającego długiego utrzymywania kontekstu.", "title": "Optymalizacja kontekstu" }, "context-relay": { - "description": "Najlepiej, gdy spodziewana jest rotacja kont, a kolejne konto musi dziedziczyć uproszczone podsumowanie zadań.", - "tip1": "Używaj w przypadku dostawców rotujących konta dla tej samej rodziny modeli.", - "tip2": "Ustaw próg przekazania poniżej twardych granic przydziału dla czasu generowania podsumowania.", - "tip3": "Ustaw dedykowany model podsumowujący tylko wtedy, gdy podstawowy jest zbyt drogi lub niestabilny.", + "description": "Najlepsze, gdy oczekiwana jest rotacja kont, a kolejne konto musi odziedziczyć uproszczone podsumowanie zadania.", + "tip1": "Używaj z providers rotującymi konta w ramach tej samej rodziny model.", + "tip2": "Ustaw próg handoff poniżej twardych limitów quota dla czasu generowania podsumowania.", + "tip3": "Ustawiaj dedykowany model podsumowania tylko wtedy, gdy główny jest zbyt drogi lub niestabilny.", "title": "Priorytet ciągłości sesji" }, "p2c": { - "description": "Skieruj się do dostawcy o najniższym obciążeniu prądowym na podstawie wskaźników w czasie rzeczywistym.", - "tip1": "Monitoruj wskaźniki kondycji dostawcy, aby uzyskać dokładną ocenę obciążenia.", - "tip2": "Działa najlepiej w przypadku jednorodnych pul dostawców.", - "tip3": "Dostosuj czułość, aby uniknąć oscylacji podczas szczytów ruchu.", - "title": "Moc dwóch wyborów" + "description": "Kieruj routing do provider z najniższym bieżącym obciążeniem na podstawie metryk w czasie rzeczywistym.", + "tip1": "Monitoruj metryki stanu zdrowia provider w celu dokładnej oceny obciążenia.", + "tip2": "Działa najlepiej z jednorodnymi pulami provider.", + "tip3": "Dostosuj czułość, aby uniknąć oscylacji podczas nagłych wzrostów ruchu.", + "title": "Power of Two Choices" } }, "templateFreeStack": "Free Stack ($0)", - "templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models). Zero cost, never stops coding.", - "auto": "Auto Combo", - "autoDesc": "Self-healing smart routing pool (Performance optimized)", - "lkgp": "LKGP Mode", - "lkgpDesc": "Last Known Good Provider (Predictable resilience)", - "wizardGuideTitle": "Getting Started with Combos", - "wizardGuideDesc": "Create model combos to route AI traffic intelligently", - "wizardGuideHint": "or click + Create Combo above", - "createFirstCombo": "Create Your First Combo", - "wizardStep1Title": "Name Your Combo", - "wizardStep1Desc": "Give your combo a unique name to identify it in routing rules", - "wizardStep2Title": "Add Models", - "wizardStep2Desc": "Select AI models and arrange their fallback priority order", - "wizardStep3Title": "Choose Strategy", - "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", - "wizardStep4Title": "Review & Save", - "wizardStep4Desc": "Review your configuration and activate the combo", - "emailVisibilityStateOn": "On", - "emailVisibilityStateOff": "Off", - "reorderHandle": "Drag to reorder", - "failedReorder": "Failed to reorder models", - "builderFlowTitle": "Combo Builder Flow", + "templateFreeStackDesc": "Round-robin po wszystkich darmowych providers: Kiro (Claude), Qoder (5 models), Qwen (4 models). Zerowy koszt, nigdy nie przestaje kodować.", + "auto": "Inteligentne Auto", + "autoDesc": "Samonaprawiająca się inteligentna pula routingu z ocenianiem wieloczynnikowym", + "lkgp": "Tryb LKGP", + "lkgpDesc": "Priorytetyzuje ostatni provider, który pomyślnie zrealizował żądanie", + "wizardGuideTitle": "Pierwsze kroki z combos", + "wizardGuideDesc": "Twórz model combos, aby inteligentnie kierować ruch AI", + "wizardGuideHint": "lub kliknij + Create Combo powyżej", + "createFirstCombo": "Utwórz swoje pierwsze combo", + "wizardStep1Title": "Nazwij swoje combo", + "wizardStep1Desc": "Nadaj swojemu combo unikalną nazwę, aby zidentyfikować je w regułach routingu", + "wizardStep2Title": "Dodaj models", + "wizardStep2Desc": "Wybierz AI models i ustaw ich kolejność priorytetu fallback", + "wizardStep3Title": "Wybierz strategię", + "wizardStep3Desc": "Wybierz, jak żądania są rozdzielane między models - dostępnych jest 14 strategii", + "wizardStep4Title": "Przejrzyj i zapisz", + "wizardStep4Desc": "Przejrzyj konfigurację i aktywuj combo", + "emailVisibilityStateOn": "Wł.", + "emailVisibilityStateOff": "Wył.", + "reorderHandle": "Przeciągnij, aby zmienić kolejność", + "failedReorder": "Nie udało się zmienić kolejności dla models", + "builderFlowTitle": "Przepływ Combo Builder", "builderStage": { "basics": { - "label": "Basics", - "description": "Name and starting template" + "label": "Podstawy", + "description": "Nazwa i szablon startowy" }, "steps": { - "label": "Steps", - "description": "Provider, model, and account selection" + "label": "Kroki", + "description": "Wybór provider, model i konta" }, "strategy": { - "label": "Strategy", - "description": "Routing behavior and advanced settings" + "label": "Strategia", + "description": "Zachowanie routingu i ustawienia zaawansowane" }, "intelligent": { - "label": "Smart Routing", - "description": "Auto-routing candidate pool, presets, and scoring" + "label": "Inteligentny routing", + "description": "Pula kandydatów auto-routingu, presety i ocenianie" }, "review": { - "label": "Review", - "description": "Final validation before saving" + "label": "Podsumowanie", + "description": "Ostateczna weryfikacja przed zapisaniem" } }, - "builderStageVisited": "Stage completed", - "builderStageCurrent": "Current stage", - "builderStagePending": "Pending", - "builderStageLocked": "Locked — complete previous stage first", - "builderTitle": "Build a Combo", - "builderBrowseCatalog": "Browse catalog", + "builderStageVisited": "Krok zakończony", + "builderStageCurrent": "Bieżący krok", + "builderStagePending": "Oczekujący", + "builderStageLocked": "Zablokowany — najpierw ukończ poprzedni krok", + "builderTitle": "Zbuduj combo", + "builderBrowseCatalog": "Przeglądaj katalog", "builderProvider": "Provider", - "builderLoadingProviders": "Loading providers...", - "builderSelectProvider": "Select provider", + "builderLoadingProviders": "Ładowanie providers...", + "builderSelectProvider": "Wybierz provider", "builderModel": "Model", - "builderSelectModel": "Select model", - "builderProviderFirst": "Pick provider first", - "builderAccount": "Account", - "builderPreview": "Preview", - "builderAddStep": "Add step", - "builderDuplicateExact": "Dokładny krok dostawcy/modelu/konta jest już w zestawie.", - "builderComboRef": "Combo Ref", - "builderAddComboRef": "Add combo reference", - "builderComboRefStep": "Add combo reference", - "builderPinnedAccount": "Pinned Account", - "builderLegacyEntry": "Legacy entry", - "reviewName": "Name", - "reviewStrategy": "Strategy", - "reviewSteps": "Steps", - "reviewAccounts": "Accounts", + "builderSelectModel": "Wybierz model", + "builderProviderFirst": "Najpierw wybierz provider", + "builderAccount": "Konto", + "builderPreview": "Podgląd", + "builderAddStep": "Dodaj krok", + "builderDuplicateExact": "Dokładnie ten krok provider/model/konto znajduje się już w combo.", + "builderComboRef": "Referencja combo", + "builderAddComboRef": "Dodaj referencję combo", + "builderComboRefStep": "Dodaj referencję combo", + "builderPinnedAccount": "Przypięte konto", + "builderLegacyEntry": "Wpis legacy", + "reviewName": "Nazwa", + "reviewStrategy": "Strategia", + "reviewSteps": "Kroki", + "reviewAccounts": "Konta", "reviewProviders": "Providers", - "reviewComboRefs": "Combo References", - "reviewAdvanced": "Advanced Settings", - "reviewAgentFlags": "Agent Flags", - "reviewSequence": "Model Sequence", - "reviewNoSteps": "No steps configured", - "builderStagesDescription": "Ukończ każdy etap, aby zdefiniować kombinacje, zbudować kroki, wybrać strategię routingu i przejrzeć wyniki.", - "builderStepsDescription": "Zbuduj każdy krok kombinacji w kolejności: dostawca, model, a następnie konto. Umożliwia to ponowne wykorzystanie tego samego dostawcy i modelu na różnych kontach.", - "selectProvider": "Wybierz dostawcę", - "selectProviderPlaceholder": "Wybierz dostawcę", + "reviewComboRefs": "Referencje combo", + "reviewAdvanced": "Ustawienia zaawansowane", + "reviewAgentFlags": "Flagi agenta", + "reviewSequence": "Sekwencja models", + "reviewNoSteps": "Brak skonfigurowanych kroków", + "builderStagesDescription": "Ukończ każdy etap po kolei, aby zdefiniować combos, zbudować kroki, wybrać strategię routingu i przejrzeć wyniki.", + "builderStepsDescription": "Zbuduj każdy krok combo po kolei: provider, model, a następnie konto. Pozwala to na ponowne użycie tego samego provider i model na różnych kontach.", + "selectProvider": "Wybierz Provider", + "selectProviderPlaceholder": "Wybierz provider", "selectModel": "Wybierz Model", - "selectModelPlaceholder": "Najpierw wybierz dostawcę", - "selectAccount": "Wybierz Konto", - "selectComboToReference": "Wybierz kombinację, do której chcesz się odwołać", - "comboReference": "Odniesienie do kombinacji", - "addComboReference": "Dodaj odwołanie do kombinacji", - "addStepBeforeContinue": "Zanim przejdziesz do następnego etapu, dodaj przynajmniej jeden krok.", + "selectModelPlaceholder": "Najpierw wybierz provider", + "selectAccount": "Wybierz konto", + "selectComboToReference": "Wybierz combo do odwołania", + "comboReference": "Referencja combo", + "addComboReference": "Dodaj referencję combo", + "addStepBeforeContinue": "Dodaj co najmniej jeden krok przed przejściem do następnego etapu.", "previewNextStep": "Podgląd następnego kroku", - "autoSelectAccount": "Automatycznie wybierz konto w czasie wykonywania", + "autoSelectAccount": "Automatycznie wybierz konto w runtime", "modePackBalanced": "Zrównoważony", - "modePackBudget": "Budżet", + "modePackBudget": "Budżetowy", "modePackPerformance": "Wydajność", - "modePackCustom": "Niestandardowe", - "browseLegacyCatalog": "Przeglądaj starszy katalog combo", + "modePackCustom": "Niestandardowy", + "browseLegacyCatalog": "Przeglądaj katalog legacy combo", "agentFeaturesTitle": "Funkcje agenta", - "agentFeaturesDescription": "Włącz zaawansowane funkcje dla agentów korzystających z tej kombinacji", + "agentFeaturesDescription": "Włącz zaawansowane funkcje dla agentów korzystających z tego combo", + "responseValidationTitle": "Walidacja odpowiedzi", + "responseValidationHelp": "Przełącz na następny cel (failover), gdy treść odpowiedzi 200 OK nie przejdzie tych testów (zawartość asystenta).", + "responseValidationForbidden": "Niedozwolone ciągi znaków (jeden w linii)", + "responseValidationRequired": "Wymagane ciągi znaków (jeden w linii)", + "responseValidationMinLength": "Minimalna długość zawartości (znaki)", + "responseValidationJsonPaths": "Testy JSON-path", + "responseValidationAddCheck": "+ Dodaj test", "agentFeaturesSystemMessageOverride": "Zastąp komunikat systemowy", - "agentFeaturesSystemMessagePlaceholder": "Jesteś doświadczonym asystentem...", + "agentFeaturesSystemMessagePlaceholder": "You are an expert assistant...", "agentFeaturesSystemMessageHint": "Zastąpienie komunikatu systemowego dla agentów", - "agentFeaturesToolFilterRegex": "/wzór-regex/", - "agentFeaturesToolFilterHint": "Narzędzie filtrujące wyrażenie regularne dla agentów", - "agentFeaturesContextCacheHint": "Włącz pamięć podręczną kontekstową dla narzędzi agenta", - "agentFeaturesContextCacheProtection": "Chroń pamięć podręczną przed mutacjami narzędzi agenta", + "agentFeaturesToolFilterRegex": "/regex-pattern/", + "agentFeaturesToolFilterHint": "Regex filtrowania narzędzi dla agentów", + "agentFeaturesContextCacheHint": "Włącz in-context cache dla narzędzi agenta", + "agentFeaturesContextCacheProtection": "Chroń cache przed modyfikacjami przez narzędzia agenta", "agentFeaturesContextLength": "Długość kontekstu", "agentFeaturesContextLengthPlaceholder": "np. 128000", - "agentFeaturesContextLengthHint": "Definiuje okno kontekstowe dla tej kombinacji w /v1/models.", - "agentFeaturesContextLengthErrorInteger": "Długość kontekstu musi być prawidłową liczbą całkowitą", - "agentFeaturesContextLengthErrorRange": "Długość kontekstu musi mieścić się w przedziale od 1000 do 2000000", - "compressionOverride": "Zastąpienie kompresji", - "modePack": "Pakiet trybów" + "agentFeaturesContextLengthHint": "Definiuje okno kontekstu dla tego combo w /v1/models.", + "agentFeaturesContextLengthErrorInteger": "Długość kontekstu musi być liczbą całkowitą", + "agentFeaturesContextLengthErrorRange": "Długość kontekstu musi wynosić od 1000 do 2000000", + "compressionOverride": "Nadpisanie kompresji", + "modePack": "Mode Pack", + "disableSessionStickiness": "Wyłącz session stickiness", + "sessionStickinessEnabled": "Stickiness włączone", + "sessionStickinessDisabled": "Stickiness wyłączone" }, "costs": { "title": "Koszty", - "pageDescription": "Śledź wydatki, analizuj trendy i zarządzaj budżetem AI u wszystkich dostawców", + "pageDescription": "Śledzenie wydatków, analiza trendów i zarządzanie budżetem AI dla wszystkich providers", "overview": "Przegląd", "budget": "Budżet", - "totalCost": "Całkowity koszt", + "totalCost": "Koszt całkowity", "breakdown": "Podział kosztów", "noData": "Brak danych o kosztach", - "byModel": "Według modelu", - "byProvider": "Przez Dostawcę", + "byModel": "Według model", + "byProvider": "Według provider", "range7d": "7 dni", "range30d": "30 dni", "range90d": "90 dni", - "range180d": "180 Days", - "range365d": "365 Days", - "rangeAll": "Cały czas", - "spend30d": "Spend30D", - "activeModels": "Active Models", - "selectedWindow": "Selected Window", - "activeProviders": "Active Providers", - "overviewTitle": "Overview Title", - "spend7d": "Spend7D", - "avgCostPerRequest": "Avg Cost Per Request", - "noCostDataDescription": "No Cost Data Description", - "spendToday": "Spend Today", - "overviewLoadFailed": "Overview Load Failed", - "overviewDescription": "Overview Description", - "providerShare": "Provider Share", - "topProviders": "Top Providers", - "costTrend": "Cost Trend", - "noCostDataTitle": "No Cost Data Title", - "topModels": "Top Models", - "requestsInWindow": "Requests In Window", - "tokenUsage": "Użycie tokena", - "totalTokens": "Suma tokenów", - "inputTokens": "Tokeny wejściowe", - "outputTokens": "Tokeny wyjściowe", - "inputOutputRatio": "Stosunek wejścia/wyjścia", - "tokens": "żetony", + "range180d": "180 dni", + "range365d": "365 dni", + "rangeAll": "Od początku", + "spend30d": "Wydatki 30D", + "activeModels": "Aktywne models", + "selectedWindow": "Wybrany okres", + "activeProviders": "Aktywni providers", + "overviewTitle": "Przegląd kosztów", + "spend7d": "Wydatki 7D", + "avgCostPerRequest": "Śr. koszt / zapytanie", + "noCostDataDescription": "Wyślij zapytania, aby zobaczyć dane o kosztach. Koszty są automatycznie śledzone dla wszystkich providers.", + "spendToday": "Dzisiejsze wydatki", + "overviewLoadFailed": "Nie udało się załadować przeglądu kosztów", + "overviewDescription": "Podział wydatków w czasie rzeczywistym dla wszystkich połączonych providers i models", + "providerShare": "Udział providers", + "topProviders": "Główni providers", + "costTrend": "Trend kosztów", + "noCostDataTitle": "Brak danych o kosztach", + "topModels": "Najlepsze models", + "requestsInWindow": "Zapytania w wybranym okresie", + "tokenUsage": "Zużycie tokens", + "totalTokens": "Łącznie tokens", + "inputTokens": "Wejściowe tokens", + "outputTokens": "Wyjściowe tokens", + "inputOutputRatio": "Stosunek input/output", + "tokens": "tokens", "routingEfficiency": "Wydajność routingu", - "fallbackCount": "Żądania zastępcze", - "fallbackRate": "Współczynnik rezerwowy", - "modelCoverage": "Pokrycie modelu", - "modelCoverageDesc": "% żądań z jawnym modelem", - "outOfRequests": "z {total} żądań", - "costByApiKey": "Koszt według klucza API", + "fallbackCount": "Zapytania fallback", + "fallbackRate": "Wskaźnik fallback", + "modelCoverage": "Pokrycie models", + "modelCoverageDesc": "% zapytań z jawnym model", + "outOfRequests": "z {total} zapytań", + "costByApiKey": "Koszt według API Key", "costByAccount": "Koszt według konta", - "apiKeyName": "Klucz API", + "apiKeyName": "API Key", "account": "Konto", - "requests": "Żądania", + "requests": "Zapytania", "cost": "Koszt", - "dayStreak": "passa dnia", - "weeklyUsagePattern": "Tygodniowy wzór użycia", + "dayStreak": "dni z rzędu", + "weeklyUsagePattern": "Tygodniowy wzorzec zużycia", "activityHeatmap": "Aktywność (365 dni)", "less": "Mniej", "more": "Więcej", "monthlyForecast": "Prognoza miesięczna", "forecastBasis": "Na podstawie ostatnich {days} dni", - "avgDailyCost": "Śr. koszt dzienny", + "avgDailyCost": "Średni dzienny koszt", "daysRemaining": "Pozostało {days} dni", "periodComparison": "Porównanie okresów", "previousPeriod": "Poprzednia połowa", - "currentPeriod": "Obecna połowa", + "currentPeriod": "Bieżąca połowa", "exportCSV": "Eksportuj jako CSV", "exportJSON": "Eksportuj jako JSON", - "legacyFreeLabel": "__MISSING__:Legacy / Free", - "costExplorerTitle": "Eksplorator kosztów", - "costExplorerDescription": "Analizuj wydatki według dostawcy, modelu, klucza API, konta lub poziomu usługi.", - "groupProvider": "Dostawca", - "groupModel": "Typ modelu", - "groupApiKey": "Klucz API", + "legacyFreeLabel": "Legacy / Free", + "costExplorerTitle": "Cost Explorer", + "costExplorerDescription": "Eksploracja wydatków według provider, model, API Key, konta lub poziomu usługi.", + "groupProvider": "Provider", + "groupModel": "Model", + "groupApiKey": "API Key", "groupAccount": "Konto", "groupServiceTier": "Poziom usługi", - "serviceTierFast": "__MISSING__:Fast", - "serviceTierFlex": "__MISSING__:Flex", - "serviceTierStandard": "__MISSING__:Standard", - "serviceTierBreakdownTitle": "__MISSING__:Service Tier", - "serviceTierBreakdownSubtitle": "__MISSING__:Fast / Flex / Standard split", - "serviceTierUsageSaved": "__MISSING__:usage saved", - "serviceTierCostSaved": "__MISSING__:saved", - "serviceTierCostShareSuffix": "__MISSING__:of cost", + "serviceTierFast": "Fast", + "serviceTierFlex": "Flex", + "serviceTierStandard": "Standard", + "serviceTierBreakdownTitle": "Poziom usługi", + "serviceTierBreakdownSubtitle": "Podział na Fast / Flex / Standard", + "serviceTierUsageSaved": "zaoszczędzone zużycie", + "serviceTierCostSaved": "zaoszczędzone", + "serviceTierCostShareSuffix": "kosztów", "dimension": "Wymiar", "share": "Udział", - "legacyOrFree": "Starsze / bezpłatne", + "legacyOrFree": "Legacy / Free", "filterRows": "Filtruj wiersze…", - "filterCostExplorerRows": "Filtruj wiersze eksploratora kosztów", + "filterCostExplorerRows": "Filtruj wiersze Cost Explorer", "noMatchingCostRows": "Brak pasujących wierszy kosztów", - "noMatchingCostRowsDescription": "Dostosuj tekst wyszukiwania, grupowanie lub wybrane okno czasowe.", - "showingCostRows": "Wyświetlono {shown} z {total} pasujących wierszy.", - "showingTopCostRows": "Wyświetlono {shown} z {total} pasujących wierszy (top 50)." + "noMatchingCostRowsDescription": "Dostosuj wyszukiwany tekst, grupowanie lub wybrany okres.", + "showingCostRows": "Wyświetlanie {shown} z {total} pasujących wierszy.", + "showingTopCostRows": "Wyświetlanie {shown} z {total} pasujących wierszy (top 50)." }, "endpoint": { - "title": "Punkt końcowy interfejsu API", - "available": "Dostępne punkty końcowe", - "cloudProxy": "Serwer proxy w chmurze", - "disableConfirm": "Czy na pewno chcesz wyłączyć serwer proxy w chmurze?", - "baseUrl": "Bazowy adres URL", + "title": "API Endpoint", + "available": "Dostępne endpoints", + "cloudProxy": "Cloud Proxy", + "disableConfirm": "Czy na pewno wyłączyć cloud proxy?", + "baseUrl": "Bazowy URL", "apiKeyLabel": "Klucz API", "registeredKeys": "Zarejestrowane klucze", - "chatCompletions": "Zakończenia czatu", - "responses": "Odpowiedzi", - "listModels": "Lista modeli", - "usingCloudProxy": "Korzystanie z serwera proxy w chmurze", - "usingLocalServer": "Korzystanie z serwera lokalnego", - "machineId": "Identyfikator maszyny: {id}...", - "disableCloud": "Wyłącz chmurę", - "enableCloud": "Włącz chmurę", - "modelsAcrossEndpoints": "{models} modele w {endpoints} punktach końcowych", - "loadingModels": "Loading available models...", - "chatDesc": "Czat strumieniowy i niestreamingowy ze wszystkimi dostawcami", - "embeddings": "Osadzenia", - "embeddingsDesc": "Osadzanie tekstu dla potoków wyszukiwania i RAG", - "imageGeneration": "Generowanie obrazu", - "imageDesc": "Generuj obrazy na podstawie podpowiedzi tekstowych", - "rerank": "Zmień rangę", - "rerankDesc": "Zmień rangę dokumentów według trafności dla zapytania", - "audioTranscription": "Transkrypcja dźwięku", - "audioTranscriptionDesc": "Transkrypcja plików audio na tekst (szeptem)", - "textToSpeech": "Tekst na mowę", - "textToSpeechDesc": "Konwertuj tekst na naturalnie brzmiącą mowę", - "musicGeneration": "Music Generation", - "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", - "moderations": "Moderacje", - "moderationsDesc": "Moderowanie treści i klasyfikacja bezpieczeństwa", - "responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows", - "listModelsDesc": "List all available models across all connected providers", - "settingsApiDesc": "Read and modify OmniRoute configuration via API", + "chatCompletions": "Chat Completions", + "responses": "Responses", + "listModels": "List Models", + "usingCloudProxy": "Używanie Cloud Proxy", + "usingLocalServer": "Używanie lokalnego serwera", + "machineId": "ID maszyny: {id}...", + "disableCloud": "Wyłącz Cloud", + "enableCloud": "Włącz Cloud", + "modelsAcrossEndpoints": "{models} models w obrębie {endpoints} endpoints", + "loadingModels": "Ładowanie dostępnych models...", + "chatDesc": "Czat strumieniowy i niestrumieniowy ze wszystkimi providers", + "embeddings": "Embeddings", + "embeddingsDesc": "Embeddings tekstowe dla wyszukiwania i potoków RAG", + "imageGeneration": "Generowanie obrazów", + "imageDesc": "Generowanie obrazów na podstawie promptów tekstowych", + "rerank": "Rerank", + "rerankDesc": "Rerankowanie dokumentów według trafności do zapytania", + "audioTranscription": "Transkrypcja audio", + "audioTranscriptionDesc": "Transkrypcja plików audio na tekst (Whisper)", + "textToSpeech": "Text to Speech", + "textToSpeechDesc": "Konwersja tekstu na naturalnie brzmiącą mowę", + "musicGeneration": "Generowanie muzyki", + "musicDesc": "Generowanie muzyki i ścieżek dźwiękowych przez ComfyUI (Stable Audio, MusicGen)", + "moderations": "Moderacja", + "moderationsDesc": "Moderacja treści i klasyfikacja bezpieczeństwa", + "responsesDesc": "OpenAI Responses API dla Codex i zaawansowanych przepływów agentowych", + "listModelsDesc": "Lista wszystkich dostępnych models u wszystkich połączonych providers", + "settingsApiDesc": "Odczyt i modyfikacja konfiguracji OmniRoute przez API", "settingsApi": "Settings API", "categoryCore": "Główne API", - "categoryMedia": "Media i Multi-Modal", - "categorySearch": "Search & Discovery", - "categoryUtility": "Narzędzia i Zarządzanie", + "categoryMedia": "Multimedia i multimodalność", + "categorySearch": "Wyszukiwanie i odkrywanie", + "categoryUtility": "Narzędzia i zarządzanie", "webSearch": "Web Search", - "webSearchDesc": "Unified web search across multiple providers with automatic failover and caching", + "webSearchDesc": "Zunifikowane wyszukiwanie w sieci u wielu providers z automatycznym przełączaniem awaryjnym i buforowaniem", "searchProvider": "Search Provider", - "searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.", - "enableCloudTitle": "Włącz serwer proxy w chmurze", - "whatYouGet": "Co otrzymasz", - "cloudBenefitAccess": "Uzyskaj dostęp do swojego API z dowolnego miejsca na świecie", - "cloudBenefitShare": "Z łatwością udostępniaj punkt końcowy swojemu zespołowi", - "cloudBenefitPorts": "Nie ma potrzeby otwierania portów ani konfigurowania zapory ogniowej", + "searchProviderDesc": "Ten provider jest używany do wyszukiwania w sieci przez POST /v1/search. Nie jest wymagana konfiguracja model — search providers są gotowe do użycia po podłączeniu klucza API.", + "enableCloudTitle": "Włącz Cloud Proxy", + "whatYouGet": "Korzyści", + "cloudBenefitAccess": "Dostęp do API z dowolnego miejsca na świecie", + "cloudBenefitShare": "Łatwe udostępnianie endpoint zespołowi", + "cloudBenefitPorts": "Brak konieczności otwierania portów czy konfiguracji zapory sieciowej", "cloudBenefitEdge": "Szybka globalna sieć brzegowa", - "cloudSessionNote": "Cloud będzie przechowywać Twoją sesję uwierzytelniania przez 1 dzień. Jeśli nie zostanie użyty, zostanie automatycznie usunięty.", - "cloudUnstableNote": "Chmura jest obecnie niestabilna z Claude Code OAuth w niektórych przypadkach.", - "cloudConnected": "Serwer proxy chmury podłączony!", - "connectingToCloud": "Łączę z chmurą...", + "cloudSessionNote": "Cloud przechowuje sesję uwierzytelniania przez 1 dzień. W przypadku braku aktywności zostanie ona automatycznie usunięta.", + "cloudUnstableNote": "Cloud może być obecnie niestabilny z Claude Code OAuth w niektórych przypadkach.", + "cloudConnected": "Połączono z Cloud Proxy!", + "connectingToCloud": "Łączenie z cloud...", "verifyingConnection": "Weryfikacja połączenia...", "connecting": "Łączenie...", - "verifying": "Weryfikuję...", + "verifying": "Weryfikacja...", "connected": "Połączono!", - "disableCloudTitle": "Wyłącz serwer proxy w chmurze", - "disableWarning": "Wszystkie sesje autoryzacji zostaną usunięte z chmury.", - "syncingData": "Synchronizowanie najnowszych danych...", - "disablingCloud": "Wyłączam chmurę...", - "syncing": "Synchronizowanie...", - "disabling": "Wyłączam...", - "cloudConnectedVerified": "Cloud Proxy podłączony i zweryfikowany!", - "connectedVerificationPending": "Połączono — weryfikacja w toku", - "connectedVerificationPendingWithError": "Połączono — weryfikacja w toku: {error}", - "cloudDisabledSuccess": "Chmura została pomyślnie wyłączona", - "syncedSuccess": "Zsynchronizowano pomyślnie", - "failedDisable": "Nie udało się wyłączyć chmury", - "failedEnable": "Nie udało się włączyć chmury", - "cloudRequestTimeout": "Upłynął limit czasu żądania w chmurze", - "cloudRequestFailed": "Żądanie w chmurze nie powiodło się", - "cloudWorkerUnreachable": "Nie udało się połączyć z pracownikiem chmury. Upewnij się, że usługa w chmurze jest uruchomiona (npm run dev w /cloud).", + "disableCloudTitle": "Wyłącz Cloud Proxy", + "disableWarning": "Wszystkie sesje uwierzytelniania zostaną usunięte z cloud.", + "syncingData": "Synchronizacja najnowszych danych...", + "disablingCloud": "Wyłączanie cloud...", + "syncing": "Synchronizacja...", + "disabling": "Wyłączanie...", + "cloudConnectedVerified": "Cloud Proxy połączony i zweryfikowany!", + "connectedVerificationPending": "Połączono — oczekiwanie na weryfikację", + "connectedVerificationPendingWithError": "Połączono — oczekiwanie na weryfikację: {error}", + "cloudDisabledSuccess": "Pomyślnie wyłączono Cloud", + "syncedSuccess": "Pomyślnie zsynchronizowano", + "failedDisable": "Nie udało się wyłączyć cloud", + "failedEnable": "Nie udało się włączyć cloud", + "cloudRequestTimeout": "Limit czasu żądania cloud", + "cloudRequestFailed": "Żądanie cloud nie powiodło się", + "cloudWorkerUnreachable": "Nie można połączyć się z cloud workerem. Upewnij się, że usługa cloud jest uruchomiona (npm run dev w /cloud).", "connectionFailed": "Połączenie nie powiodło się", - "syncFailed": "Nie udało się zsynchronizować danych w chmurze", + "syncFailed": "Nie udało się zsynchronizować danych cloud", "cloudflaredTitle": "Cloudflare Quick Tunnel", - "cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.", - "cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart.", - "cloudflaredEnable": "Enable Tunnel", - "cloudflaredInstallAndEnable": "Install & Enable", - "cloudflaredDisable": "Stop Tunnel", - "cloudflaredRunning": "Running", - "cloudflaredStarting": "Starting", - "cloudflaredStoppedState": "Stopped", - "cloudflaredNotInstalled": "Not installed", - "cloudflaredUnsupported": "Unsupported", - "cloudflaredError": "Error", - "cloudflaredStarted": "Cloudflare tunnel started", - "cloudflaredStopped": "Cloudflare tunnel stopped", - "cloudflaredRequestFailed": "Failed to update Cloudflare tunnel", - "cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.", - "cloudflaredUnsupportedNote": "This platform is not supported for managed installation.", - "cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.", - "cloudflaredLastError": "Last error: {error}", - "providerModelsTitle": "{provider} — Modele", - "noModelsForProvider": "Brak dostępnych modeli tego dostawcy.", + "cloudflaredDescription": "Utwórz Cloudflare Quick Tunnel dla tego endpoint.", + "cloudflaredUrlNotice": "Tworzy tymczasowy Cloudflare Quick Tunnel. URL zmienia się po każdym restarcie.", + "cloudflaredEnable": "Włącz tunel", + "cloudflaredInstallAndEnable": "Zainstaluj i włącz", + "cloudflaredDisable": "Zatrzymaj tunel", + "cloudflaredRunning": "Uruchomiony", + "cloudflaredStarting": "Uruchamianie", + "cloudflaredStoppedState": "Zatrzymany", + "cloudflaredNotInstalled": "Niezainstalowany", + "cloudflaredUnsupported": "Niewspierany", + "cloudflaredError": "Błąd", + "cloudflaredStarted": "Tunel Cloudflare został uruchomiony", + "cloudflaredStopped": "Tunel Cloudflare został zatrzymany", + "cloudflaredRequestFailed": "Nie udało się zaktualizować tunelu Cloudflare", + "cloudflaredTemporaryNote": "Adresy Quick Tunnel URL są tymczasowe i zmieniają się po każdym restarcie.", + "cloudflaredUnsupportedNote": "Ta platforma nie jest wspierana dla instalacji zarządzanych. Zainstaluj cloudflared ręcznie lub wskaż CLOUDFLARED_BIN na istniejący plik wykonywalny.", + "cloudflaredIdleNote": "Utwórz tymczasowy Cloudflare Quick Tunnel dla tego endpoint.", + "cloudflaredLastError": "Ostatni błąd: {error}", + "providerModelsTitle": "{provider} — Models", + "noModelsForProvider": "Brak dostępnych models dla tego provider.", "chat": "Czat", - "embedding": "Osadzanie", + "embedding": "Embedding", "image": "Obraz", - "custom": "niestandardowe", - "modelsCount": "{count, plural, one {# model} other {# models}}", - "sectionTitle": "Integration Surface", - "sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints", - "tabApis": "OpenAI-compatible APIs", - "tabProtocols": "Protocols", - "tabsAria": "Endpoint sections", - "protocolsTitle": "Protocols", - "protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.", - "mcpCardTitle": "MCP Server", - "mcpCardDescription": "Model Context Protocol over stdio", - "a2aCardTitle": "A2A Server", + "custom": "custom", + "modelsCount": "{count, plural, one {# model} other {# modeli}}", + "sectionTitle": "Obszar integracji", + "sectionDescription": "Interfejsy API zgodne z OpenAI i operacyjne endpoints protokołów", + "tabApis": "Interfejsy API zgodne z OpenAI", + "tabProtocols": "Protokoły", + "tabsAria": "Sekcje endpoint", + "protocolsTitle": "Protokoły", + "protocolsDescription": "MCP i A2A to najwyższej klasy endpoints z dedykowanymi narzędziami do obserwacji i kontroli.", + "mcpCardTitle": "Serwer MCP", + "mcpCardDescription": "Model Context Protocol przez stdio", + "a2aCardTitle": "Serwer A2A", "a2aCardDescription": "Agent2Agent JSON-RPC endpoint", - "protocolToolsLabel": "Tools", - "protocolTasksLabel": "Tasks", - "protocolActiveStreamsLabel": "Active streams", - "protocolLastActivity": "Last activity", - "quickStart": "Quick Start", - "openMcpDashboard": "Open MCP management", - "openA2aDashboard": "Open A2A management", - "mcpQuickStartTitle": "MCP Quick Start", - "mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.", - "mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.", - "mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.", - "a2aQuickStartTitle": "A2A Quick Start", - "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", - "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "protocolToolsLabel": "Narzędzia", + "protocolTasksLabel": "Zadania", + "protocolActiveStreamsLabel": "Aktywne strumienie", + "protocolLastActivity": "Ostatnia aktywność", + "quickStart": "Szybki start", + "openMcpDashboard": "Otwórz zarządzanie MCP", + "openA2aDashboard": "Otwórz zarządzanie A2A", + "mcpQuickStartTitle": "Szybki start MCP", + "mcpQuickStartStep1": "Uruchom serwer MCP za pomocą `omniroute --mcp`.", + "mcpQuickStartStep2": "Skonfiguruj klienta MCP, aby łączył się przez transport stdio.", + "mcpQuickStartStep3": "Wywołuj narzędzia, takie jak `omniroute_get_health` i `omniroute_list_combos`.", + "a2aQuickStartTitle": "Szybki start A2A", + "a2aQuickStartStep1": "Wykryj kartę agenta pod adresem `/.well-known/agent.json`.", + "a2aQuickStartStep2": "Wyślij żądania JSON-RPC do `POST /a2a` za pomocą `message/send` lub `message/stream`.", + "a2aQuickStartStep3": "Śledź zadania i kontroluj je za pomocą `tasks/get` i `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", - "messagesApi": "Wiadomości", - "messagesApiDesc": "Natywny format API Anthropic Messages dla dostawców zgodnych z Claude", - "imageEdits": "Edycja obrazu", - "imageEditsDesc": "Edytuj i modyfikuj istniejące obrazy za pomocą AI (inpainting, outpainting, wariacje)", - "batchApi": "Wsadowe API", - "batchApiDesc": "Przetwarzaj duże partie żądań asynchronicznie (kompatybilny z OpenAI)", - "filesApi": "Pliki API", - "filesApiDesc": "Przesyłaj pliki i zarządzaj nimi w celu przetwarzania wsadowego", - "videoGeneration": "Video Generation", - "videoDesc": "Generate videos using AI models like ComfyUI and Stable Video Diffusion.", - "tailscaleRequestFailed": "Failed to load Tailscale status", - "tailscaleEnableFailed": "Failed to enable Tailscale Funnel", - "tailscaleWaitingForLogin": "Complete the Tailscale login in the opened browser tab. OmniRoute will retry automatically.", - "tailscaleLoginTimedOut": "Timed out waiting for Tailscale login", - "tailscaleWaitingForFunnel": "Enable Funnel for this device in the opened browser tab. OmniRoute will keep polling.", - "tailscaleFunnelTimedOut": "Timed out waiting for Tailscale Funnel to be enabled", - "tailscaleStarted": "Tailscale Funnel enabled", - "tailscaleDisableFailed": "Failed to disable Tailscale Funnel", - "tailscaleStopped": "Tailscale Funnel disabled", - "tailscaleInstallFailed": "Failed to install Tailscale", - "tailscaleInstallProgress": "Working...", - "tailscaleInstalled": "Tailscale installed successfully", - "tailscaleRunning": "Running", - "tailscaleNeedsLogin": "Needs Login", - "tailscaleStoppedState": "Stopped", - "tailscaleNotInstalled": "Not installed", - "tailscaleUnsupported": "Unsupported", - "tailscaleError": "Error", - "tailscaleDisable": "Stop Funnel", - "tailscaleInstallAndEnable": "Install & Enable", - "tailscaleLoginAndEnable": "Login & Enable", - "tailscaleEnable": "Enable Funnel", - "tailscaleUrlNotice": "Uses your Tailscale .ts.net address. Login and Funnel approval may be required on first use.", + "completionsLegacyDesc": "Archiwalne uzupełnianie tekstu OpenAI — akceptuje zarówno format ciągu tekstowego prompt, jak i tablicę komunikatów messages", + "messagesApi": "Messages", + "messagesApiDesc": "Natywny format Anthropic Messages API dla providers zgodnych z Claude", + "imageEdits": "Edycja obrazów", + "imageEditsDesc": "Edycja i modyfikacja istniejących obrazów za pomocą AI (inpainting, outpainting, wariacje)", + "batchApi": "Batch API", + "batchApiDesc": "Asynchroniczne przetwarzanie dużych partii żądań (zgodne z OpenAI)", + "filesApi": "Files API", + "filesApiDesc": "Przesyłanie i zarządzanie plikami do przetwarzania wsadowego", + "videoGeneration": "Generowanie wideo", + "videoDesc": "Generowanie wideo przy użyciu models AI, takich jak ComfyUI i Stable Video Diffusion.", + "tailscaleRequestFailed": "Nie udało się załadować statusu Tailscale", + "tailscaleEnableFailed": "Nie udało się włączyć Tailscale Funnel", + "tailscaleWaitingForLogin": "Dokończ logowanie Tailscale w otwartej karcie przeglądarki. OmniRoute spróbuje ponownie automatycznie.", + "tailscaleLoginTimedOut": "Przekroczono limit czasu oczekiwania na logowanie Tailscale", + "tailscaleWaitingForFunnel": "Włącz Funnel dla tego urządzenia w otwartej karcie przeglądarki. OmniRoute będzie kontynuować odpytywanie.", + "tailscaleFunnelTimedOut": "Przekroczono limit czasu oczekiwania na włączenie Tailscale Funnel", + "tailscaleStarted": "Tailscale Funnel włączony", + "tailscaleDisableFailed": "Nie udało się wyłączyć Tailscale Funnel", + "tailscaleStopped": "Tailscale Funnel wyłączony", + "tailscaleInstallFailed": "Nie udało się zainstalować Tailscale", + "tailscaleInstallProgress": "Praca w toku...", + "tailscaleInstalled": "Pomyślnie zainstalowano Tailscale", + "tailscaleRunning": "Uruchomiony", + "tailscaleNeedsLogin": "Wymaga logowania", + "tailscaleStoppedState": "Zatrzymany", + "tailscaleNotInstalled": "Niezainstalowany", + "tailscaleUnsupported": "Niewspierany", + "tailscaleError": "Błąd", + "tailscaleDisable": "Zatrzymaj Funnel", + "tailscaleInstallAndEnable": "Zainstaluj i włącz", + "tailscaleLoginAndEnable": "Zaloguj się i włącz", + "tailscaleEnable": "Włącz Funnel", + "tailscaleUrlNotice": "Używa adresu Tailscale .ts.net. Przy pierwszym użyciu może być wymagane logowanie i zatwierdzenie Funnel.", "tailscaleTitle": "Tailscale Funnel", - "tailscaleNeedsLoginHint": "Authenticate this machine with Tailscale, then enable Funnel.", - "tailscaleBinaryPath": "Binary: {path}", - "tailscaleLastError": "Last error: {error}", - "tailscaleInstallTitle": "Install Tailscale", - "tailscaleInstallIntro": "Installs Tailscale on this machine and prepares OmniRoute to enable Funnel.", - "tailscaleInstallPasswordHint": "On macOS and Linux, sudo may be required for the package install and daemon start.", - "tailscaleSudoPlaceholder": "Optional sudo password", - "tailscaleInstalling": "Installing", - "tailscaleSudoLabel": "Hasło Sudo (wymagane w systemie macOS/Linux)", - "ngrokTitle": "Tunel Ngrok", - "ngrokRunning": "Bieganie", - "ngrokStarting": "Rozpoczęcie", + "tailscaleNeedsLoginHint": "Uwierzytelnij tę maszynę w Tailscale, a następnie włącz Funnel.", + "tailscaleBinaryPath": "Plik binarny: {path}", + "tailscaleLastError": "Ostatni błąd: {error}", + "tailscaleInstallTitle": "Zainstaluj Tailscale", + "tailscaleInstallIntro": "Instaluje Tailscale na tej maszynie i przygotowuje OmniRoute do włączenia Funnel.", + "tailscaleInstallPasswordHint": "Na macOS i Linux może być wymagane sudo do instalacji pakietu i uruchomienia demona.", + "tailscaleSudoPlaceholder": "Opcjonalne hasło sudo", + "tailscaleInstalling": "Instalowanie", + "tailscaleSudoLabel": "Hasło sudo (wymagane na macOS/Linux)", + "ngrokTitle": "Tunel ngrok", + "ngrokRunning": "Uruchomiony", + "ngrokStarting": "Uruchamianie", "ngrokStoppedState": "Zatrzymany", - "ngrokNeedsAuth": "Potrzebuje autoryzacji", - "ngrokNotInstalled": "Nie zainstalowano", - "ngrokUnsupported": "Nieobsługiwane", + "ngrokNeedsAuth": "Wymaga autoryzacji", + "ngrokNotInstalled": "Niezainstalowany", + "ngrokUnsupported": "Niewspierany", "ngrokError": "Błąd", "ngrokEnable": "Włącz tunel", "ngrokDisable": "Zatrzymaj tunel", "ngrokUrlNotice": "Tworzy publiczny tunel ngrok.", - "ngrokAuthTokenLabel": "Authtoken (wymagany, jeśli nie ustawiono NGROK_AUTTOKEN)", - "ngrokAuthTokenPlaceholder": "Wprowadź swój token uwierzytelniający ngrok", + "ngrokAuthTokenLabel": "Authtoken (wymagany, jeśli NGROK_AUTHTOKEN nie jest ustawiony)", + "ngrokAuthTokenPlaceholder": "Wprowadź authtoken ngrok", "ngrokLastError": "Ostatni błąd: {error}", - "ngrokStarted": "Ruszył tunel Ngrok", - "ngrokStopped": "Tunel Ngrok zatrzymał się", - "ngrokRequestFailed": "Nie udało się zaktualizować tunelu Ngrok", + "ngrokStarted": "Tunel ngrok został uruchomiony", + "ngrokStopped": "Tunel ngrok został zatrzymany", + "ngrokRequestFailed": "Nie udało się zaktualizować tunelu ngrok", "apiEndpointsCatalogUnavailable": "Katalog API niedostępny", - "apiEndpointsSearchPlaceholder": "Wyszukaj punkty końcowe...", + "apiEndpointsSearchPlaceholder": "Szukaj endpoints...", "apiEndpointsRequiresAuth": "Wymaga autoryzacji", - "apiEndpointsNoMatch": "Żaden punkt końcowy nie pasuje do Twojego filtra", - "vscodeAliasTitle": "__MISSING__:VS Code Token Alias", - "vscodeAliasDescriptionReady": "__MISSING__:Ready-to-paste compatibility URLs using the /api/v1/vscode/TOKEN/... endpoint.", - "vscodeAliasDescriptionError": "__MISSING__:Showing placeholder URLs because CLI keys could not be loaded in this session.", - "vscodeAliasDescriptionLoading": "__MISSING__:Loading CLI keys. Placeholder URLs are shown until a key is available.", - "vscodeAliasDescriptionPlaceholder": "__MISSING__:Showing placeholder URLs. Create or activate an API key in CLI Tools to replace TOKEN.", - "vscodeAliasManage": "__MISSING__:CLI Tools", - "vscodeAliasBaseLabel": "__MISSING__:VS Code base", - "vscodeAliasModelsLabel": "__MISSING__:VS Code models", - "vscodeAliasChatLabel": "__MISSING__:VS Code chat", - "localServer": "Serwer lokalny", - "cloudOmniroute": "Chmura OmniRoute", - "copyUrl": "Skopiuj adres URL", - "badgeLoopbackTooltip": "__MISSING__:This endpoint is only accessible locally (loopback only)", - "badgeAlwaysProtectedTooltip": "__MISSING__:This endpoint is always protected and requires authorization", - "badgeInternalTooltip": "__MISSING__:This is an internal system endpoint", - "tierAll": "__MISSING__:All", - "tierAuth": "__MISSING__:Authenticated", - "tierLoopback": "__MISSING__:Loopback", - "tierAlwaysProtected": "__MISSING__:Always Protected", - "tierPublic": "__MISSING__:Public", - "hideInternal": "__MISSING__:Hide Internal", - "showInternal": "__MISSING__:Show Internal", - "customSystemPromptTitle": "Custom System Prompt", - "customSystemPromptDescription": "Inject a custom system prompt into every model request", - "customSystemPromptPlaceholder": "e.g. Always respond in pirate speak..." + "apiEndpointsNoMatch": "Brak endpoints pasujących do filtra", + "vscodeAliasTitle": "VS Code Token Alias", + "vscodeAliasDescriptionReady": "Gotowe do wklejenia adresy URL zgodności korzystające z endpoint /api/v1/vscode/TOKEN/...", + "vscodeAliasDescriptionError": "Wyświetlanie zastępczych adresów URL, ponieważ w tej sesji nie można było załadować kluczy CLI.", + "vscodeAliasDescriptionLoading": "Ładowanie kluczy CLI. Zastępcze adresy URL są wyświetlane do momentu udostępnienia klucza.", + "vscodeAliasDescriptionPlaceholder": "Wyświetlanie zastępczych adresów URL. Utwórz lub aktywuj klucz API w CLI Tools, aby zastąpić TOKEN.", + "vscodeAliasManage": "CLI Tools", + "vscodeAliasBaseLabel": "VS Code base", + "vscodeAliasModelsLabel": "VS Code models", + "vscodeAliasChatLabel": "VS Code chat", + "localServer": "Lokalny serwer", + "cloudOmniroute": "Cloud OmniRoute", + "copyUrl": "Kopiuj URL", + "badgeLoopbackTooltip": "Ten endpoint jest dostępny wyłącznie lokalnie (tylko pętla zwrotna/loopback)", + "badgeAlwaysProtectedTooltip": "Ten endpoint jest zawsze chroniony i wymaga autoryzacji", + "badgeInternalTooltip": "To jest wewnętrzny endpoint systemowy", + "tierAll": "Wszystkie", + "tierAuth": "Uwierzytelnione", + "tierLoopback": "Loopback", + "tierAlwaysProtected": "Zawsze chronione", + "tierPublic": "Publiczne", + "hideInternal": "Ukryj wewnętrzne", + "showInternal": "Pokaż wewnętrzne", + "customSystemPromptTitle": "Własny prompt systemowy", + "customSystemPromptDescription": "Wstrzykiwanie niestandardowego system prompt do każdego żądania model", + "customSystemPromptPlaceholder": "np. Zawsze odpowiadaj w języku piratów..." }, "endpoints": { "tabProxy": "Endpoint Proxy", "tabApiEndpoints": "API Endpoints", "apiEndpointsTitle": "API Endpoints", - "apiEndpointsDescription": "Backend API endpoints that can be consumed by other applications and services. This section will list all available REST APIs with documentation and testing capabilities.", - "comingSoon": "Coming Soon", - "plannedFeatures": "Planned Features", - "featureRestApi": "REST API endpoint catalog with interactive documentation", - "featureWebhooks": "Webhook configuration and event subscriptions", - "featureSwagger": "OpenAPI / Swagger spec auto-generation", - "featureAuth": "API key and OAuth scope management per endpoint" + "apiEndpointsDescription": "Backendowe API endpoints, które mogą być konsumowane przez inne aplikacje i usługi. Ta sekcja zawiera listę wszystkich dostępnych REST API wraz z dokumentacją i możliwościami testowania.", + "comingSoon": "Wkrótce", + "plannedFeatures": "Planowane funkcje", + "featureRestApi": "Katalog REST API endpoints z interaktywną dokumentacją", + "featureWebhooks": "Konfiguracja webhook i subskrypcje zdarzeń", + "featureSwagger": "Automatyczne generowanie specyfikacji OpenAPI / Swagger", + "featureAuth": "Zarządzanie kluczami API i zakresem OAuth na endpoint" }, "mcpDashboard": { - "loading": "Loading MCP dashboard...", - "activate": "activate", - "deactivate": "deactivate", - "confirmSwitchCombo": "Potwierdzić kombinację {action} „{combo}”?", - "switchComboFailed": "Nie udało się przełączyć stanu kombinacji.", - "switchComboSuccess": "Kombinacja „{combo}” została zaktualizowana.", - "confirmApplyProfile": "Zastosować profil odporności „{profile}”?", + "loading": "Ładowanie MCP dashboard...", + "activate": "aktywuj", + "deactivate": "deaktywuj", + "confirmSwitchCombo": "Potwierdzić {action} combo \"{combo}\"?", + "switchComboFailed": "Nie udało się zmienić stanu combo.", + "switchComboSuccess": "Combo \"{combo}\" zaktualizowane.", + "confirmApplyProfile": "Zastosować profil odporności \"{profile}\"?", "applyProfileFailed": "Nie udało się zastosować profilu odporności.", - "applyProfileSuccess": "Zastosowano profil „{profile}”.", - "confirmResetBreakers": "Zresetować wszystkie wyłączniki automatyczne?", - "resetBreakersFailed": "Nie udało się zresetować wyłączników automatycznych.", - "resetBreakersSuccess": "Reset wyłączników automatycznych.", - "processStatus": "Stan procesu", - "online": "W Internecie", - "offline": "Nieaktywny", - "disableLabel": "__MISSING__:Disable {label}", - "enableLabel": "__MISSING__:Enable {label}", - "transportMode": "__MISSING__:Transport Mode", - "transportStdioDesc": "__MISSING__:Local — IDE spawns process via omniroute --mcp", - "transportSseDesc": "__MISSING__:Remote — Server-Sent Events over HTTP", - "transportStreamableHttpDesc": "__MISSING__:Remote — Modern bidirectional HTTP", - "copy": "__MISSING__:Copy", - "mcpDashboardCopyUrl": "Skopiuj adres URL", - "mcpDisabledTitle": "__MISSING__:MCP is disabled", - "mcpDisabledDesc": "__MISSING__:Enable MCP above to configure transport mode and view server telemetry.", - "mcpIntro": "__MISSING__:Model Context Protocol — {tools} tools across {scopes} scopes, {transports} transports (stdio / SSE / Streamable HTTP).", - "mcpStep1": "__MISSING__:Run via {code}", - "mcpStep2": "__MISSING__:Configure your MCP client to connect over stdio transport.", - "mcpStep3": "__MISSING__:Invoke tools like {code1} and {code2}.", + "applyProfileSuccess": "Profil \"{profile}\" zastosowany.", + "confirmResetBreakers": "Zresetować wszystkie circuit breakers?", + "resetBreakersFailed": "Nie udało się zresetować circuit breakers.", + "resetBreakersSuccess": "Circuit breakers zresetowane.", + "processStatus": "Status procesu", + "online": "Online", + "offline": "Offline", + "disableLabel": "Wyłącz {label}", + "enableLabel": "Włącz {label}", + "transportMode": "Tryb transportu", + "transportStdioDesc": "Lokalny — IDE uruchamia proces przez omniroute --mcp", + "transportSseDesc": "Zdalny — Server-Sent Events przez HTTP", + "transportStreamableHttpDesc": "Zdalny — Nowoczesny dwukierunkowy HTTP", + "copy": "Kopiuj", + "mcpDashboardCopyUrl": "Kopiuj URL", + "mcpDisabledTitle": "MCP jest wyłączone", + "mcpDisabledDesc": "Włącz MCP powyżej, aby skonfigurować tryb transportu i wyświetlić telemetrię serwera.", + "mcpIntro": "Model Context Protocol — {tools} narzędzi w {scopes} zakresach, {transports} transporty (stdio / SSE / Streamable HTTP).", + "mcpStep1": "Uruchom przez {code}", + "mcpStep2": "Skonfiguruj klienta MCP, aby połączyć się przez transport stdio.", + "mcpStep3": "Wywołuj narzędzia takie jak {code1} i {code2}.", "pid": "PID", - "sessionUptime": "Session uptime", - "lastHeartbeat": "Last heartbeat", - "activity24h": "Activity (24h)", - "totalCalls": "Total calls", - "successRate": "Success rate", - "avgLatency": "Avg latency", - "topTools": "Top tools", - "noToolCalls24h": "No tool calls in the last 24 hours.", - "runtimeDetails": "Runtime details", + "sessionUptime": "Czas działania sesji", + "lastHeartbeat": "Ostatni heartbeat", + "activity24h": "Aktywność (24h)", + "totalCalls": "Łączna liczba wywołań", + "successRate": "Wskaźnik sukcesu", + "avgLatency": "Średnie opóźnienie", + "topTools": "Najpopularniejsze narzędzia", + "noToolCalls24h": "Brak wywołań narzędzi w ciągu ostatnich 24 godzin.", + "runtimeDetails": "Szczegóły środowiska uruchomieniowego", "transport": "Transport", - "scopesEnforced": "Scopes enforced", - "yes": "yes", - "no": "no", - "lastCall": "Last call", - "heartbeatPath": "Heartbeat path", - "operationalControls": "Operational controls", - "switchCombo": "Switch combo", - "inactive": "inactive", - "active": "active", - "activateCombo": "Activate combo", - "deactivateCombo": "Deactivate combo", - "applyResilienceProfile": "Apply resilience profile", - "profileAggressive": "aggressive", - "profileBalanced": "balanced", - "profileConservative": "conservative", - "applyProfile": "Apply profile", - "resetCircuitBreakers": "Reset circuit breakers", - "resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.", - "resetAllBreakers": "Reset all breakers", - "toolsAndScopes": "Tools and scopes", - "tableTool": "Tool", - "tableScopes": "Scopes", - "tablePhase": "Phase", - "tableAudit": "Audit", - "auditLog": "Audit log", - "auditSummary": "Calls: {total} | page {page} of {totalPages}", - "allTools": "All tools", - "allResults": "All results", - "success": "Success", - "failure": "Failure", + "scopesEnforced": "Wymuszone zakresy", + "yes": "tak", + "no": "nie", + "lastCall": "Ostatnie wywołanie", + "heartbeatPath": "Ścieżka heartbeat", + "operationalControls": "Kontrola operacyjna", + "switchCombo": "Przełącz combo", + "inactive": "nieaktywny", + "active": "aktywny", + "activateCombo": "Aktywuj combo", + "deactivateCombo": "Deaktywuj combo", + "applyResilienceProfile": "Zastosuj profil odporności", + "profileAggressive": "agresywny", + "profileBalanced": "zbalansowany", + "profileConservative": "konserwatywny", + "applyProfile": "Zastosuj profil", + "resetCircuitBreakers": "Zresetuj circuit breakers", + "resetCircuitBreakersHelp": "Czyszczenie bieżącego stanu circuit breakers i liczników błędów dla providers.", + "resetAllBreakers": "Zresetuj wszystkie circuit breakers", + "toolsAndScopes": "Narzędzia i zakresy", + "tableTool": "Narzędzie", + "tableScopes": "Zakresy", + "tablePhase": "Faza", + "tableAudit": "Audyt", + "auditLog": "Dziennik audytu", + "auditSummary": "Wywołania: {total} | strona {page} z {totalPages}", + "allTools": "Wszystkie narzędzia", + "allResults": "Wszystkie wyniki", + "success": "Sukces", + "failure": "Błąd", "apiKeyIdPlaceholder": "apiKeyId", - "loadingAuditEntries": "Loading audit entries...", - "noAuditEntriesForFilters": "No audit entries found for current filters.", - "tableTimestamp": "Timestamp", - "tableDuration": "Duration", - "tableResult": "Result", - "tableApiKey": "API key", - "failed": "failed", - "previous": "Previous", - "next": "Next", - "apiKeyId": "Api Key Id", + "loadingAuditEntries": "Ładowanie wpisów audytu...", + "noAuditEntriesForFilters": "Nie znaleziono wpisów audytu dla bieżących filtrów.", + "tableTimestamp": "Znacznik czasu", + "tableDuration": "Czas trwania", + "tableResult": "Wynik", + "tableApiKey": "Klucz API", + "failed": "nieudane", + "previous": "Poprzedni", + "next": "Następny", + "apiKeyId": "ID klucza API", "offset": "Offset", "limit": "Limit", - "tool": "Tool" + "tool": "Narzędzie" }, "a2aDashboard": { - "loading": "Loading A2A dashboard...", - "confirmCancelTask": "Cancel task {taskId}?", - "cancelTaskFailed": "Failed to cancel task.", - "cancelTaskSuccess": "Task {taskId} cancelled.", - "smokeSendFailed": "message/send smoke test failed.", - "smokeSendSuccessWithTask": "message/send ok (task {taskId}).", + "loading": "Ładowanie A2A dashboard...", + "confirmCancelTask": "Anulować zadanie {taskId}?", + "cancelTaskFailed": "Nie udało się anulować zadania.", + "cancelTaskSuccess": "Zadanie {taskId} anulowane.", + "smokeSendFailed": "smoke test message/send nie powiódł się.", + "smokeSendSuccessWithTask": "message/send ok (zadanie {taskId}).", "smokeSendSuccess": "message/send ok.", - "smokeStreamFailed": "message/stream smoke test failed.", - "smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).", - "smokeStreamNoTaskId": "message/stream finished without task id.", - "health": "Health", + "smokeStreamFailed": "smoke test message/stream nie powiódł się.", + "smokeStreamSuccessWithTask": "message/stream ok (zadanie {taskId}{stateSuffix}).", + "smokeStreamNoTaskId": "message/stream zakończone bez ID zadania.", + "health": "Kondycja", "ok": "ok", - "totalTasks": "Total tasks", - "activeStreams": "Active streams", - "lastTask": "Last task", - "taskStateOverview": "Task state overview", + "totalTasks": "Łączna liczba zadań", + "activeStreams": "Aktywne strumienie", + "lastTask": "Ostatnie zadanie", + "taskStateOverview": "Przegląd stanów zadań", "state": { - "submitted": "submitted", - "working": "working", - "completed": "completed", - "failed": "failed", - "cancelled": "cancelled" + "submitted": "przesłane", + "working": "w toku", + "completed": "zakończone", + "failed": "nieudane", + "cancelled": "anulowane" }, - "agentCard": "Agent card", - "agentCardPath": "__MISSING__:/.well-known/agent.json", - "version": "Version", + "agentCard": "Karta agenta", + "agentCardPath": "/.well-known/agent.json", + "version": "Wersja", "url": "URL", - "capabilities": "Capabilities", - "agentCardNotAvailable": "Agent card not available.", - "quickValidation": "Quick validation", - "quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.", - "runMessageSend": "Run message/send", - "runMessageStream": "Run message/stream", - "taskManagement": "Task management", - "taskSummary": "{total} tasks | page {page} of {totalPages}", - "allStates": "all", - "allSkills": "all skills", - "loadingTasks": "Loading tasks...", - "noTasksForFilters": "No tasks found for current filters.", - "tableTask": "Task", - "tableSkill": "Skill", - "tableState": "State", - "tableUpdated": "Updated", - "tableActions": "Actions", - "view": "View", - "cancel": "Cancel", - "previous": "Previous", - "next": "Next", - "taskDetail": "Task detail", - "close": "Close", - "metadata": "Metadata", - "events": "Events", - "artifacts": "Artifacts", - "tablePhase": "Table Phase", + "capabilities": "Możliwości", + "agentCardNotAvailable": "Karta agenta niedostępna.", + "quickValidation": "Szybka walidacja", + "quickValidationDescription": "Wykonuje wywołania próbne (smoke) przez aktywny endpoint `/a2a`.", + "runMessageSend": "Uruchom message/send", + "runMessageStream": "Uruchom message/stream", + "taskManagement": "Zarządzanie zadaniami", + "taskSummary": "{total} zadań | strona {page} z {totalPages}", + "allStates": "wszystkie", + "allSkills": "wszystkie umiejętności", + "loadingTasks": "Ładowanie zadań...", + "noTasksForFilters": "Nie znaleziono zadań dla bieżących filtrów.", + "tableTask": "Zadanie", + "tableSkill": "Umiejętność", + "tableState": "Stan", + "tableUpdated": "Zaktualizowano", + "tableActions": "Akcje", + "view": "Wyświetl", + "cancel": "Anuluj", + "previous": "Poprzedni", + "next": "Następny", + "taskDetail": "Szczegóły zadania", + "close": "Zamknij", + "metadata": "Metadane", + "events": "Zdarzenia", + "artifacts": "Artefakty", + "tablePhase": "Faza tabeli", "offset": "Offset", "limit": "Limit", - "skill": "Skill", + "skill": "Umiejętność", "rpcEndpoint": "POST /a2a", - "rpcMethodSend": "wiadomość/wyślij", - "rpcMethodStream": "wiadomość/strumień", - "rpcMethodGet": "zadania/otrzymuj", - "rpcMethodCancel": "zadania/anuluj", + "rpcMethodSend": "message/send", + "rpcMethodStream": "message/stream", + "rpcMethodGet": "tasks/get", + "rpcMethodCancel": "tasks/cancel", "serviceLabel": "A2A", - "online": "__MISSING__:Online", - "offline": "__MISSING__:Offline", - "disableLabel": "__MISSING__:Disable {label}", - "enableLabel": "__MISSING__:Enable {label}", - "a2aDisabledTitle": "__MISSING__:A2A is disabled", - "a2aDisabledDesc": "__MISSING__:Enable A2A above to view task telemetry, agent details, and validation tools.", - "a2aIntro": "__MISSING__:Agent2Agent JSON-RPC 2.0 endpoint — send tasks, stream responses, cancel in-flight jobs.", - "a2aStep1": "__MISSING__:Discover the agent card at {code}.", - "a2aStep2": "__MISSING__:Send JSON-RPC to {code1} using {code2} or {code3}.", - "a2aStep3": "__MISSING__:Track and cancel tasks with {code1} and {code2}." + "online": "Online", + "offline": "Offline", + "disableLabel": "Wyłącz {label}", + "enableLabel": "Włącz {label}", + "a2aDisabledTitle": "A2A jest wyłączone", + "a2aDisabledDesc": "Włącz A2A powyżej, aby wyświetlić telemetrię zadań, szczegóły agenta i narzędzia walidacji.", + "a2aIntro": "Endpoint Agent2Agent JSON-RPC 2.0 — wysyłanie zadań, strumieniowanie odpowiedzi, anulowanie uruchomionych zadań.", + "a2aStep1": "Odkryj kartę agenta pod adresem {code}.", + "a2aStep2": "Wyślij JSON-RPC do {code1} przy użyciu {code2} lub {code3}.", + "a2aStep3": "Śledź i anuluj zadania za pomocą {code1} i {code2}." }, "memory": { "a": "A", - "actions": "Actions", - "addMemory": "Add Memory", - "allTypes": "All Types", + "actions": "Akcje", + "addMemory": "Dodaj pamięć", + "allTypes": "Wszystkie typy", "cancel": "Anuluj", - "checkHealth": "Sprawdź zdrowie", - "checkingHealth": "Sprawdzam…", - "compactOld": "__MISSING__:Compact old", + "checkHealth": "Sprawdź stan", + "checkingHealth": "Sprawdzanie…", + "compactOld": "Kompaktuj starą", "concept": { - "title": "__MISSING__:Conversational Memory", - "description": "__MISSING__:OmniRoute learns from every conversation, remembering facts, episodes, procedures, and semantic concepts that make responses more accurate and context-aware.", - "howWorksToggle": "__MISSING__:How it works", - "howWorksContent": "__MISSING__:1. Automatic extraction: at the end of each response, facts and episodes are detected and saved automatically.\n2. Retrieval: before each response, the most relevant memories are searched via FTS5 (exact), vector (semantic), or hybrid RRF.\n3. Injection: relevant memories are injected into the assistant context to improve response quality.\n4. Management: use this page to view, edit, export, and compact old memories." + "title": "Pamięć konwersacyjna", + "description": "OmniRoute uczy się na podstawie każdej konwersacji, zapamiętując fakty, epizody, procedury i pojęcia semantyczne, co sprawia, że odpowiedzi są bardziej dokładne i świadome kontekstu.", + "howWorksToggle": "Jak to działa", + "howWorksContent": "1. Automatyczna ekstrakcja: pod koniec każdej odpowiedzi fakty i epizody są automatycznie wykrywane i zapisywane.\n2. Pobieranie: przed każdą odpowiedzią najbardziej trafne wpisy pamięci są wyszukiwane przez FTS5 (dokładne), wektorowo (semantycznie) lub hybrydowo przez RRF.\n3. Wstrzykiwanie: istotne wpisy pamięci są wstrzykiwane do kontekstu asystenta w celu poprawy jakości odpowiedzi.\n4. Zarządzanie: ta strona służy do przeglądania, edycji, eksportowania i kompaktowania starej pamięci." }, - "content": "Content", + "content": "Treść", "contentPlaceholder": "Wartość lub treść JSON do zapamiętania", - "created": "Created", - "delete": "Delete", - "deleteConfirmDesc": "__MISSING__:This action cannot be undone. The memory will be permanently removed.", - "deleteConfirmTitle": "__MISSING__:Delete memory?", - "description": "View and manage stored memory entries", - "editMemory": "__MISSING__:Edit memory", + "created": "Utworzono", + "delete": "Usuń", + "deleteConfirmDesc": "Tej operacji nie można cofnąć. Pamięć zostanie trwale usunięta.", + "deleteConfirmTitle": "Usunąć pamięć?", + "description": "Podgląd i zarządzanie zapisanymi wpisami pamięci", + "editMemory": "Edytuj pamięć", "editModal": { - "title": "__MISSING__:Edit Memory", - "metadataLabel": "__MISSING__:Metadata (JSON)", - "metadataInvalid": "__MISSING__:Invalid JSON", - "saveFailed": "__MISSING__:Failed to save memory" + "title": "Edytuj pamięć", + "metadataLabel": "Metadane (JSON)", + "metadataInvalid": "Nieprawidłowy JSON", + "saveFailed": "Nie udało się zapisać pamięci" }, "embedding": { - "autoLabel": "__MISSING__:Automatic", - "autoDesc": "__MISSING__:Uses best available: remote provider > static > transformers", - "remoteLabel": "__MISSING__:Remote provider", - "remoteDesc": "__MISSING__:Uses embedding via provider API (requires API key)", - "staticLabel": "__MISSING__:Static local (potion)", - "staticDesc": "__MISSING__:Local embedding without WASM or external dependencies", - "transformersLabel": "__MISSING__:Transformers.js (MiniLM)", - "transformersDesc": "__MISSING__:Local embedding via @huggingface/transformers (~400MB RAM)", - "providerModelLabel": "__MISSING__:Provider / Model", - "noRemoteProviders": "__MISSING__:No providers with configured API key", - "selectProviderModel": "__MISSING__:Select a model", - "staticEnabledLabel": "__MISSING__:Enable Static Potion", - "staticEnabledDesc": "__MISSING__:Download and use potion-base-8M model locally", - "transformersEnabledLabel": "__MISSING__:Enable Transformers.js", - "transformersEnabledDesc": "__MISSING__:Opt-in for local MiniLM (~400MB RAM, ~3s cold start)", - "transformersWarning": "__MISSING__:Requires ~400MB RAM and ~3s cold start on the first semantic query." + "autoLabel": "Automatycznie", + "autoDesc": "Używa najlepszej dostępnej opcji: zdalny provider > statyczna > transformers", + "remoteLabel": "Zdalny provider", + "remoteDesc": "Używa osadzania przez API provider (wymaga klucza API)", + "staticLabel": "Statyczne lokalne (potion)", + "staticDesc": "Lokalne osadzanie bez WASM ani zewnętrznych zależności", + "transformersLabel": "Transformers.js (MiniLM)", + "transformersDesc": "Lokalne osadzanie przez @huggingface/transformers (~400 MB RAM)", + "providerModelLabel": "Provider / Model", + "noRemoteProviders": "Brak providers ze skonfigurowanym kluczem API", + "selectProviderModel": "Wybierz model", + "staticEnabledLabel": "Włącz Static Potion", + "staticEnabledDesc": "Pobierz i używaj model potion-base-8M lokalnie", + "transformersEnabledLabel": "Włącz Transformers.js", + "transformersEnabledDesc": "Zezwól na lokalny MiniLM (~400 MB RAM, ~3 s zimnego startu)", + "transformersWarning": "Wymaga ~400 MB RAM i ~3 s zimnego startu przy pierwszym zapytaniu semantycznym." }, "emptyState": { - "title": "__MISSING__:No memories yet", - "description": "__MISSING__:Memories are created automatically from conversations. You can also add them manually using the button above." + "title": "Brak wpisów pamięci", + "description": "Wpisy pamięci są tworzone automatycznie na podstawie konwersacji. Można je również dodać ręcznie za pomocą powyższego przycisku." }, "engine": { - "statusTitle": "__MISSING__:Engine Status", - "embeddingTitle": "__MISSING__:Embedding Source", - "rerankTitle": "__MISSING__:Rerank (optional)", - "reindexNow": "__MISSING__:Reindex now", - "reindexStarted": "__MISSING__:Reindexing started ({pending} pending)", - "reindexFailed": "__MISSING__:Failed to start reindexing", - "keywordLabel": "__MISSING__:Keyword (FTS5)", - "keywordReason": "__MISSING__:Keyword search always available", - "embeddingLabel": "__MISSING__:Embedding", - "vectorStoreLabel": "__MISSING__:Vector Store", - "qdrantLabel": "__MISSING__:Qdrant", - "rerankLabel": "__MISSING__:Rerank", - "qdrantDisabled": "__MISSING__:Disabled", - "qdrantOk": "__MISSING__:Healthy ({latencyMs}ms)", - "qdrantError": "__MISSING__:Connection error", - "needsReindex": "__MISSING__:{count} memory(ies) need reindexing", - "configureCta": "__MISSING__:Configure", - "vectorStoreInstallHint": "__MISSING__:To enable vector search: npm install sqlite-vec (needs native Node.js, not WASM), then restart." + "statusTitle": "Status silnika", + "embeddingTitle": "Źródło osadzania", + "rerankTitle": "Rerank (opcjonalnie)", + "reindexNow": "Ponownie indeksuj teraz", + "reindexStarted": "Rozpoczęto ponowne indeksowanie (oczekujące: {pending})", + "reindexFailed": "Nie udało się rozpocząć ponownego indeksowania", + "keywordLabel": "Słowo kluczowe (FTS5)", + "keywordReason": "Wyszukiwanie słów kluczowych jest zawsze dostępne", + "embeddingLabel": "Osadzanie", + "vectorStoreLabel": "Vector Store", + "qdrantLabel": "Qdrant", + "rerankLabel": "Rerank", + "qdrantDisabled": "Wyłączone", + "qdrantOk": "W normie ({latencyMs} ms)", + "qdrantError": "Błąd połączenia", + "needsReindex": "{count} wpis(ów) pamięci wymaga ponownego indeksowania", + "configureCta": "Konfiguruj", + "vectorStoreInstallHint": "Aby włączyć wyszukiwanie wektorowe: npm install sqlite-vec (wymaga natywnego Node.js, nie WASM), a następnie zrestartuj." }, - "episodic": "Episodic", - "export": "Export", - "factual": "Factual", - "healthUnknown": "Zdrowie nieznane", + "episodic": "Epizodyczna", + "export": "Eksportuj", + "factual": "Faktyczna", + "healthUnknown": "Nieznany stan", "hitRate": "Hit Rate", - "import": "Import", - "importError": "__MISSING__:Failed to import file", - "importResult": "__MISSING__:{imported} imported, {skipped} skipped", - "key": "Key", - "keyPlaceholder": "np. motyw.preferencji.użytkownika", - "loading": "Loading memories...", - "memories": "Memories", - "next": "Następny", - "noMemories": "No memories found", - "pageInfo": "Strona {page} z {totalPages} (łącznie {total})", - "pipelineError": "Błąd rurociągu", - "pipelineOk": "Potok OK ({latencyMs}ms)", + "import": "Importuj", + "importError": "Nie udało się zaimportować pliku", + "importResult": "Zaimportowano: {imported}, pominięto: {skipped}", + "key": "Klucz", + "keyPlaceholder": "np. user.preferences.theme", + "loading": "Ładowanie...", + "memories": "Wpisy pamięci", + "next": "Dalej", + "noMemories": "Nie znaleziono wpisów pamięci", + "pageInfo": "Strona {page} z {totalPages} (łącznie: {total})", + "pipelineError": "Błąd pipeline", + "pipelineOk": "Pipeline OK ({latencyMs} ms)", "playground": { - "infoTitle": "__MISSING__:Memory Playground", - "infoDesc": "__MISSING__:Simulate what would be retrieved for a given query. No memories are modified — read-only preview.", - "queryLabel": "__MISSING__:Test query", - "queryPlaceholder": "__MISSING__:Type a question or test phrase...", - "strategyLabel": "__MISSING__:Strategy", - "strategyExact": "__MISSING__:Exact (FTS5)", - "strategySemantic": "__MISSING__:Semantic (vector)", - "strategyHybrid": "__MISSING__:Hybrid (RRF)", - "budgetLabel": "__MISSING__:Budget (tokens)", - "simulate": "__MISSING__:Simulate", - "resultsTitle": "__MISSING__:{count} result(s)", - "resolutionTitle": "__MISSING__:Search resolution", - "resolutionEmbedding": "__MISSING__:Embedding", - "resolutionStore": "__MISSING__:Vector store", - "resolutionStrategy": "__MISSING__:Strategy used", - "rerankApplied": "__MISSING__:Rerank applied", - "fallback": "__MISSING__:Fallback", - "noResults": "__MISSING__:No memories found for this query.", - "tokensUsed": "__MISSING__:tokens used", - "none": "__MISSING__:none", - "errorFetch": "__MISSING__:Failed to fetch preview" + "infoTitle": "Playground pamięci", + "infoDesc": "Symuluj, co zostałoby pobrane dla danego zapytania. Wpisy pamięci nie są modyfikowane — podgląd tylko do odczytu.", + "queryLabel": "Zapytanie testowe", + "queryPlaceholder": "Wpisz pytanie lub frazę testową...", + "strategyLabel": "Strategia", + "strategyExact": "Dokładna (FTS5)", + "strategySemantic": "Semantyczna (wektorowa)", + "strategyHybrid": "Hybrydowa (RRF)", + "budgetLabel": "Budżet (tokens)", + "simulate": "Symuluj", + "resultsTitle": "{count} wynik(ów)", + "resolutionTitle": "Rozstrzygnięcie wyszukiwania", + "resolutionEmbedding": "Osadzanie", + "resolutionStore": "Vector store", + "resolutionStrategy": "Użyta strategia", + "rerankApplied": "Zastosowano rerank", + "fallback": "Fallback", + "noResults": "Nie znaleziono wpisów pamięci dla tego zapytania.", + "tokensUsed": "użyte tokens", + "none": "brak", + "errorFetch": "Nie udało się pobrać podglądu" }, - "previous": "Poprzedni", - "procedural": "Procedural", + "previous": "Wstecz", + "procedural": "Proceduralna", "qdrant": { - "title": "__MISSING__:Qdrant (Vector Store Tier 2)", - "description": "__MISSING__:Optional Qdrant integration for scalable semantic search", - "enableLabel": "__MISSING__:Enable Qdrant", - "enableDesc": "__MISSING__:When enabled, Qdrant is used as the primary vector store", - "testConnection": "__MISSING__:Test connection", - "testing": "__MISSING__:Testing...", - "statusActive": "__MISSING__:Active", - "statusError": "__MISSING__:Error", - "statusDisabled": "__MISSING__:Disabled", - "healthOk": "__MISSING__:Connection OK ({latencyMs}ms)", - "healthError": "__MISSING__:Connection error", - "saved": "__MISSING__:Settings saved", - "saveError": "__MISSING__:Failed to save", - "portLabel": "__MISSING__:Port", - "embeddingModelLabel": "__MISSING__:Embedding Model", - "optional": "__MISSING__:optional", - "apiKeyKeepPlaceholder": "__MISSING__:Leave blank to keep current key", - "apiKeyOptional": "__MISSING__:Leave blank if not using authentication", - "removeApiKey": "__MISSING__:Remove", - "quickSelectModel": "__MISSING__:Quick select", - "searchTestTitle": "__MISSING__:Semantic search test", - "searchPlaceholder": "__MISSING__:Type a test query...", - "searching": "__MISSING__:Searching...", - "search": "__MISSING__:Search", - "cleanupTitle": "__MISSING__:Clean up old points", - "cleanupDesc": "__MISSING__:Remove Qdrant points for expired memories (retention period).", - "cleaning": "__MISSING__:Cleaning...", - "cleanNow": "__MISSING__:Clean now", - "cleanupSuccess": "__MISSING__:{count} point(s) removed", - "cleanupFailed": "__MISSING__:Cleanup failed" + "title": "Qdrant (Vector Store Tier 2)", + "description": "Opcjonalna integracja z Qdrant do skalowalnego wyszukiwania semantycznego", + "enableLabel": "Włącz Qdrant", + "enableDesc": "Po włączeniu Qdrant będzie używany jako główny vector store", + "banner": "Vector store poziomu 2 — zewnętrzna, skalowalna alternatywa dla wbudowanego sqlite-vec (poziom 1). Włącz tylko przy bardzo dużym zestawie pamięci lub potrzebie współdzielenia pamięci między instancjami; dla większości użytkowników sqlite-vec jest wystarczający. Po włączeniu staje się głównym magazynem i automatycznie przełącza się na fallback do sqlite-vec w przypadku braku łączności.", + "hostHelp": "Lokalny Docker: http://localhost:6333 · Qdrant Cloud: URL klastra", + "collectionHelp": "Dowolna nazwa — OmniRoute utworzy ją przy pierwszym użyciu", + "embeddingModelHelp": "Automatycznie ustawia wymiar wektora przy pierwszym użyciu. Istniejące wpisy pamięci nie są uzupełniane, a zmiana model po zapisaniu danych wymaga nowej kolekcji.", + "testConnection": "Testuj połączenie", + "testing": "Testowanie...", + "statusActive": "Aktywny", + "statusError": "Błąd", + "statusDisabled": "Wyłączony", + "healthOk": "Połączenie OK ({latencyMs} ms)", + "healthError": "Błąd połączenia", + "saved": "Ustawienia zapisane", + "saveError": "Nie udało się zapisać", + "portLabel": "Port", + "embeddingModelLabel": "Model osadzania", + "optional": "opcjonalnie", + "apiKeyKeepPlaceholder": "Pozostaw puste, aby zachować obecny klucz", + "apiKeyOptional": "Pozostaw puste, jeśli uwierzytelnianie nie jest używane", + "removeApiKey": "Usuń", + "quickSelectModel": "Szybki wybór", + "searchTestTitle": "Test wyszukiwania semantycznego", + "searchPlaceholder": "Wpisz zapytanie testowe...", + "searching": "Wyszukiwanie...", + "search": "Szukaj", + "cleanupTitle": "Wyczyść stare punkty", + "cleanupDesc": "Usuń punkty Qdrant dla wygasłych wpisów pamięci (okres przechowywania).", + "cleaning": "Czyszczenie...", + "cleanNow": "Wyczyść teraz", + "cleanupSuccess": "Usunięto {count} punkt(ów)", + "cleanupFailed": "Czyszczenie nie powiodło się" }, "rerank": { - "enableLabel": "__MISSING__:Enable Rerank", - "enableDesc": "__MISSING__:Reorders results with a reranking model after search", - "warning": "__MISSING__:Rerank adds +200-500ms latency and additional cost per request. Use sparingly.", - "providerModelLabel": "__MISSING__:Rerank Provider / Model", - "noProviderWithKey": "__MISSING__:No provider with configured API key. Configure a provider to use rerank.", - "selectProviderModel": "__MISSING__:Select a provider/model" + "enableLabel": "Włącz Rerank", + "enableDesc": "Zmienia kolejność wyników za pomocą model rerankingu po wyszukaniu", + "warning": "Rerank dodaje +200-500 ms opóźnienia i dodatkowy koszt za żądanie. Używaj oszczędnie.", + "providerModelLabel": "Rerank Provider / Model", + "noProviderWithKey": "Brak provider ze skonfigurowanym kluczem API. Skonfiguruj provider, aby używać rerank.", + "selectProviderModel": "Wybierz provider/model" }, "save": "Zapisz", - "saving": "__MISSING__:Saving...", - "search": "Search memories...", - "semantic": "Semantic", + "saving": "Zapisywanie...", + "search": "Przeszukaj pamięć...", + "semantic": "Semantyczna", "summarize": { - "title": "__MISSING__:Compact old memories", - "noCandidates": "__MISSING__:No memories eligible for compaction (criteria: >30 days old).", - "candidatesDesc": "__MISSING__:{count} memories will be compacted into summaries. This action cannot be undone.", - "confirm": "__MISSING__:Compact now" + "title": "Kompaktuj starą pamięć", + "noCandidates": "Brak wpisów pamięci kwalifikujących się do kompaktowania (kryterium: >30 dni).", + "candidatesDesc": "{count} wpis(ów) pamięci zostanie skompaktowanych do podsumowań. Tej operacji nie można cofnąć.", + "confirm": "Kompaktuj teraz" }, "tabs": { - "memories": "__MISSING__:Memories", - "playground": "__MISSING__:Playground", - "engine": "__MISSING__:Engine" + "memories": "Pamięć", + "playground": "Playground", + "engine": "Silnik" }, - "title": "Memory Management", - "tokensUsed": "Tokens Used", + "title": "Zarządzanie pamięcią", + "tokensUsed": "Użyte tokens", "tooltip": { - "totalEntries": "__MISSING__:Total memories stored for this API key", - "tokensUsed": "__MISSING__:Estimated total tokens occupied by active memories", - "hitRate": "__MISSING__:Read-by-ID cache hit rate (not semantic recall accuracy)", - "factual": "__MISSING__:Objective, permanent facts from user context", - "episodic": "__MISSING__:Events and experiences from conversation history", - "procedural": "__MISSING__:Procedures, workflows, and instructions the assistant should follow", - "semantic": "__MISSING__:Concepts, preferences, and domain knowledge" + "totalEntries": "Łączna liczba wpisów pamięci zapisanych dla tego klucza API", + "tokensUsed": "Szacowana łączna liczba tokens zajmowana przez aktywną pamięć", + "hitRate": "Współczynnik trafień pamięci podręcznej dla odczytu po ID (nie dokładność dopasowania semantycznego)", + "factual": "Obiektywne, trwałe fakty z kontekstu użytkownika", + "episodic": "Wydarzenia i doświadczenia z historii konwersacji", + "procedural": "Procedury, przepływy pracy i instrukcje, które asystent powinien realizować", + "semantic": "Pojęcia, preferencje i wiedza dziedzinowa" }, - "totalEntries": "Total Entries", - "type": "Type", - "memoryEnabled": "__MISSING__:Memory enabled" + "totalEntries": "Łączna liczba wpisów", + "type": "Typ", + "memoryEnabled": "Pamięć włączona" }, "skills": { - "title": "Skills", - "description": "Manage and monitor AI skills", - "skillsTab": "Skills", - "executionsTab": "Executions", + "title": "Umiejętności", + "description": "Zarządzaj i monitoruj umiejętności AI", + "skillsTab": "Umiejętności", + "executionsTab": "Uruchomienia", "sandboxTab": "Sandbox", - "loading": "Loading skills...", - "noSkills": "No skills found", - "noExecutions": "No executions found", - "enabled": "Enabled", - "disabled": "Disabled", - "version": "Version", - "tableDescription": "Description", - "skill": "Skill", + "loading": "Ładowanie umiejętności...", + "noSkills": "Nie znaleziono umiejętności", + "noExecutions": "Nie znaleziono uruchomień", + "enabled": "Włączone", + "disabled": "Wyłączone", + "delete": "Usuń", + "version": "Wersja", + "tableDescription": "Opis", + "skill": "Umiejętność", "status": "Status", - "duration": "Duration", - "time": "Time", - "sandboxConfig": "Sandbox Configuration", - "cpuLimit": "CPU Limit", - "cpuLimitDesc": "Maximum execution time per skill", - "memoryLimit": "Memory Limit", - "memoryLimitDesc": "Maximum memory allocation", + "duration": "Czas trwania", + "time": "Czas", + "sandboxConfig": "Konfiguracja Sandbox", + "cpuLimit": "Limit CPU", + "cpuLimitDesc": "Maksymalny czas wykonania na umiejętność", + "memoryLimit": "Limit pamięci", + "memoryLimitDesc": "Maksymalna alokacja pamięci", "timeout": "Timeout", - "timeoutDesc": "Maximum wait time for response", - "networkAccess": "Network Access", - "networkAccessDesc": "Allow outbound network requests", - "mode": "Mode", + "timeoutDesc": "Maksymalny czas oczekiwania na odpowiedź", + "networkAccess": "Dostęp do sieci", + "networkAccessDesc": "Zezwalaj na wychodzące żądania sieciowe", + "mode": "Tryb", "q": "Q", "filterSkillsPlaceholder": "Filtruj umiejętności według nazwy, opisu lub tagu", "allModes": "Wszystkie tryby", - "totalSkills": "__MISSING__:Total Skills", - "enabledSkills": "__MISSING__:Enabled", - "totalExecutions": "__MISSING__:Executions", - "successRate": "__MISSING__:Success Rate", - "marketplaceTab": "__MISSING__:Marketplace", - "applyFilters": "__MISSING__:Apply filters", - "popularDefaultsLabel": "__MISSING__:Popular by default for selected provider:", - "onMode": "__MISSING__:ON", - "offMode": "__MISSING__:OFF", - "autoMode": "__MISSING__:AUTO", - "installSkillButton": "__MISSING__:Install Skill", - "installSkillModalTitle": "__MISSING__:Install Skill", - "installJsonPlaceholder": "__MISSING__:Paste skill manifest JSON here...", - "installing": "__MISSING__:Installing...", - "installSuccess": "__MISSING__:Skill installed ({id})", - "installError": "__MISSING__:Install failed", - "invalidJson": "__MISSING__:Invalid JSON", - "searchMarketplacePlaceholder": "__MISSING__:Search skills...", - "searchMarketplace": "__MISSING__:Search Marketplace", - "marketplaceEmpty": "__MISSING__:No skills found in marketplace", - "marketplaceError": "__MISSING__:Search failed", - "installingFromMarketplace": "__MISSING__:Installing from marketplace...", - "popularSkills": "__MISSING__:Popular Skills", - "skillsMarketplace": "Rynek umiejętności", - "searching": "__MISSING__:Searching...", - "pageInfo": "__MISSING__:Page {page} of {totalPages} ({total} total)", - "previous": "__MISSING__:Previous", - "next": "__MISSING__:Next", - "activeProvider": "__MISSING__:Active provider:", - "changeInSettings": "__MISSING__:Change this in Settings → Memory & Skills.", - "installs": "__MISSING__:installs", - "marketplaceSkillsMpHint": "__MISSING__:Configure your SkillsMP API key in Settings to browse the marketplace.", - "marketplaceSkillsShHint": "__MISSING__:Search the skills.sh open directory to discover and install agent skills.", - "installSkillModalDesc": "__MISSING__:Paste a skill manifest JSON or upload a .json file.", - "uploadJson": "__MISSING__:Upload JSON", - "cancel": "__MISSING__:Cancel", + "totalSkills": "Łącznie umiejętności", + "enabledSkills": "Włączone", + "totalExecutions": "Uruchomienia", + "successRate": "Skuteczność", + "marketplaceTab": "Marketplace", + "applyFilters": "Zastosuj filtry", + "popularDefaultsLabel": "Popularne domyślnie dla wybranego provider:", + "onMode": "WŁ.", + "offMode": "WYŁ.", + "autoMode": "AUTO", + "installSkillButton": "Zainstaluj umiejętność", + "installSkillModalTitle": "Zainstaluj umiejętność", + "installJsonPlaceholder": "Wklej tutaj manifest JSON umiejętności...", + "installing": "Instalowanie...", + "installSuccess": "Zainstalowano umiejętność ({id})", + "installError": "Instalacja nie powiodła się", + "invalidJson": "Nieprawidłowy JSON", + "searchMarketplacePlaceholder": "Szukaj umiejętności...", + "searchMarketplace": "Przeszukaj Marketplace", + "marketplaceEmpty": "Nie znaleziono umiejętności w Marketplace", + "marketplaceError": "Wyszukiwanie nie powiodło się", + "installingFromMarketplace": "Instalowanie z Marketplace...", + "popularSkills": "Popularne umiejętności", + "skillsMarketplace": "Marketplace umiejętności", + "searching": "Wyszukiwanie...", + "pageInfo": "Strona {page} z {totalPages} (łącznie: {total})", + "previous": "Wstecz", + "next": "Dalej", + "activeProvider": "Aktywny provider:", + "changeInSettings": "Zmień to w Settings → Memory & Skills.", + "installs": "instalacji", + "marketplaceSkillsMpHint": "Skonfiguruj swój klucz API SkillsMP w Settings, aby przeglądać Marketplace.", + "marketplaceSkillsShHint": "Przeszukaj otwarty katalog skills.sh, aby odkryć i zainstalować umiejętności agenta.", + "installSkillModalDesc": "Wklej manifest JSON umiejętności lub prześlij plik .json.", + "uploadJson": "Prześlij JSON", + "cancel": "Anuluj", "installSkill": "Zainstaluj umiejętność" }, "health": { "title": "Stan systemu", - "description": "Monitorowanie w czasie rzeczywistym Twojej instancji OmniRoute", - "healthy": "Zdrowy", + "description": "Monitorowanie instancji OmniRoute w czasie rzeczywistym", + "healthy": "Sprawny", "degraded": "Zdegradowany", - "down": "W dół", - "uptime": "Czas pracy", + "down": "Niedostępny", + "uptime": "Uptime", "memory": "Pamięć", "memoryRss": "Pamięć (RSS)", - "heap": "Kupa", - "cpu": "Procesor", + "heap": "Heap", + "cpu": "CPU", "database": "Baza danych", "version": "Wersja", "lastCheck": "Ostatnia kontrola", - "providerHealth": "Zdrowie dostawcy", - "systemMetrics": "Metryki systemu", - "tokenHealth": "Tokenowe zdrowie", + "providerHealth": "Stan Providerów", + "systemMetrics": "Metryki systemowe", + "tokenHealth": "Stan tokenów", "refreshAll": "Odśwież wszystko", "checkNow": "Sprawdź teraz", - "loadingHealth": "Ładowanie danych zdrowotnych...", - "failedToLoad": "Nie udało się załadować danych o stanie zdrowia: {error}", - "retry": "Spróbuj ponownie", - "allOperational": "Wszystkie systemy sprawne", - "issuesDetected": "Wykryto problemy systemowe", + "loadingHealth": "Ładowanie danych o stanie...", + "failedToLoad": "Nie udało się załadować danych o stanie: {error}", + "retry": "Ponów", + "allOperational": "Wszystkie systemy działają sprawnie", + "issuesDetected": "Wykryto problemy z systemem", "updatedAt": "Zaktualizowano {time}", "latency": "Opóźnienie", "latencyP50": "p50", - "latencyP95": "s. 95", - "latencyP99": "str. 99", + "latencyP95": "p95", + "latencyP99": "p99", "millisecondsShort": "{value}ms", "notAvailable": "—", "totalRequests": "Łączna liczba żądań", "noDataYet": "Brak danych", - "promptCache": "Natychmiastowa pamięć podręczna", + "promptCache": "Prompt Cache", "entries": "Wpisy", - "hitRate": "Współczynnik trafień", - "hitsMisses": "Trafienia/chybienia", - "signatureCache": "Pamięć podręczna podpisów", + "hitRate": "Hit Rate", + "hitsMisses": "Trafienia / Chybienia", + "signatureCache": "Signature Cache", "signatureDefaults": "Domyślne", "signatureTool": "Narzędzie", "signatureFamily": "Rodzina", "signatureSession": "Sesja", - "recovering": "Odzyskiwanie", - "noCBData": "Brak dostępnych danych dotyczących wyłącznika automatycznego. Najpierw złóż kilka próśb.", - "providerHealthStatusAria": "Stan zdrowia dostawcy", - "issuesLabel": "Wykryto problemy", - "operational": "Operacyjny", - "providers": "Dostawcy", - "configuredProvidersLabel": "Skonfigurowane w panelu kontrolnym", - "configuredProvidersHint": "Dostawcy z poświadczeniami zapisanymi w /dashboard/providers, niezależnie od stanu środowiska wykonawczego.", - "activeProviders": "{count} active", - "activeProvidersHint": "Skonfigurowani dostawcy aktualnie obsługują żądania routingu.", - "monitoredProviders": "{count} monitored", - "monitoredProvidersHint": "Dostawcy są obecnie śledzeni przez monitory stanu wyłączników.", - "healthyCount": "{count} zdrowy", - "nodeVersion": "Węzeł {version}", - "failures": "{count} błąd", - "failuresPlural": "{count} niepowodzenia", + "recovering": "Przywracanie", + "noCBData": "Brak danych circuit breaker. Wykonaj najpierw kilka żądań.", + "providerHealthStatusAria": "Stan sprawności Providerów", + "issuesLabel": "Wykryte problemy", + "operational": "Sprawny", + "providers": "Providers", + "configuredProvidersLabel": "Skonfigurowane w dashboardzie", + "configuredProvidersHint": "Providers z danymi uwierzytelniającymi zapisanymi w /dashboard/providers, niezależnie od stanu uruchomieniowego.", + "activeProviders": "{count} aktywnych", + "activeProvidersHint": "Skonfigurowane providers aktualnie włączone do routowania żądań.", + "monitoredProviders": "{count} monitorowanych", + "monitoredProvidersHint": "Providers aktualnie śledzone przez monitory stanu circuit-breaker.", + "healthyCount": "{count} sprawnych", + "nodeVersion": "Node {version}", + "failures": "{count} niepowodzenie", + "failuresPlural": "{count} niepowodzeń", "lastFailure": "Ostatni", - "rateLimitStatus": "Stan limitu stawki", - "activeLimiters": "{count} aktywny ogranicznik", - "activeLimitersPlural": "{count} aktywne limitery", + "rateLimitStatus": "Stan Rate Limit", + "activeLimiters": "{count} aktywny limiter", + "activeLimitersPlural": "{count} aktywnych limiterów", "queued": "W kolejce", "queuedCount": "{count} w kolejce", - "running": "bieganie", - "runningCount": "{count} działa", + "running": "w toku", + "runningCount": "{count} w toku", "ok": "OK", "activeLockouts": "Aktywne blokady", - "resetConfirm": "Zresetować wszystkie wyłączniki automatyczne do stanu prawidłowego? Spowoduje to wyczyszczenie wszystkich liczników błędów i przywrócenie wszystkich dostawców do stanu operacyjnego.", - "resetAllTitle": "Zresetuj wszystkie wyłączniki automatyczne do stanu prawidłowego", - "resetting": "Resetuję...", + "resetConfirm": "Zresetować wszystkie circuit breakery do stanu sprawnego? Spowoduje to wyczyszczenie wszystkich liczników błędów i przywrócenie sprawności wszystkich Providers.", + "resetAllTitle": "Zresetuj wszystkie circuit breakery do stanu sprawnego", + "resetting": "Resetowanie...", "resetAll": "Zresetuj wszystko", "until": "Do {time}", - "limitExhausted": "Exhausted", - "learnedFromHeaders": "Learned from headers", - "remainingOfLimit": "{remaining}/{limit} remaining", - "throttleStatus": "Throttle: {value}", - "lastHeaderUpdate": "Header update: {age}", - "databaseHealth": "Kondycja bazy danych", - "stickyBoundSessions": "Sesje klejone", - "sessionsByApiKey": "Sesje według klucza API", - "noActiveSessionsTracked": "Nie śledzono jeszcze żadnych aktywnych sesji.", - "noSessionQuotaMonitorsActive": "Brak aktywnych monitorów przydziału sesji.", - "gracefulDegradationStatus": "Pełen wdzięku stan degradacji", - "additionalModels": "+{count} więcej modeli", - "providerHealthMatrixTitle": "__MISSING__:Provider Health Matrix", - "providerHealthMatrixDescription": "__MISSING__:Provider × account × model states from breakers, cooldowns, lockouts and logs.", - "healthMatrixRange": "__MISSING__:Health matrix range", - "providerFilter": "__MISSING__:Provider filter", - "onlyIssues": "__MISSING__:Only issues", - "refresh": "__MISSING__:Refresh", - "accounts": "__MISSING__:Accounts", - "models": "__MISSING__:Models", - "issues": "__MISSING__:Issues", - "loadingProviderHealthMatrix": "__MISSING__:Loading provider health matrix...", - "failedProviderHealthMatrix": "__MISSING__:Failed to load Provider Health Matrix: {error}", - "noProvidersMatchedFilters": "__MISSING__:No providers matched the current filters.", - "modelPillSummary": "__MISSING__:{requests} req · {successRate} success · {latency} avg", - "modelLockoutSummary": "__MISSING__:{reason} · {duration} left", - "locked": "__MISSING__:locked", - "inferred": "__MISSING__:inferred", - "inactive": "__MISSING__:Inactive", - "noConnectionId": "__MISSING__:no connection id", - "accountModelSummary": "__MISSING__:{connectionId} · {count} models", - "cooldown": "__MISSING__:cooldown", - "durationRemaining": "__MISSING__:{duration} remaining", - "noSyncedModelsOrTraffic": "__MISSING__:No synced models or recent traffic yet.", - "providerRowSummary": "__MISSING__:{active}/{total} active accounts · {requests} req · {successRate} success · {latency} avg", - "cooldownCount": "__MISSING__:{count} cooldown", - "lockoutCount": "__MISSING__:{count} lockouts", - "issueCount": "__MISSING__:{count} issues", - "score": "__MISSING__:Score", - "lastRequest": "__MISSING__:Last request", - "lastError": "__MISSING__:Last error" + "limitExhausted": "Wyczerpany", + "learnedFromHeaders": "Pobrane z nagłówków", + "remainingOfLimit": "Pozostało {remaining}/{limit}", + "throttleStatus": "Dławienie: {value}", + "lastHeaderUpdate": "Aktualizacja nagłówka: {age}", + "databaseHealth": "Stan bazy danych", + "stickyBoundSessions": "Sesje sticky-bound", + "sessionsByApiKey": "Sesje według API key", + "noActiveSessionsTracked": "Nie śledzi się jeszcze żadnych aktywnych sesji.", + "noSessionQuotaMonitorsActive": "Brak aktywnych monitorów quota sesji.", + "gracefulDegradationStatus": "Stan Graceful Degradation", + "additionalModels": "+{count} kolejnych models", + "providerHealthMatrixTitle": "Provider Health Matrix", + "providerHealthMatrixDescription": "Stany provider × konto × model z breakerów, cooldownów, blokad i logów.", + "healthMatrixRange": "Zakres macierzy stanu", + "providerFilter": "Filtr Providerów", + "onlyIssues": "Tylko problemy", + "refresh": "Odśwież", + "accounts": "Konta", + "models": "Models", + "issues": "Problemy", + "loadingProviderHealthMatrix": "Ładowanie Provider Health Matrix...", + "failedProviderHealthMatrix": "Nie udało się załadować Provider Health Matrix: {error}", + "noProvidersMatchedFilters": "Żadne Providers nie pasują do obecnych filtrów.", + "modelPillSummary": "{requests} req · {successRate} sukces · {latency} avg", + "modelLockoutSummary": "{reason} · pozostało {duration}", + "locked": "zablokowany", + "inferred": "wywnioskowany", + "inactive": "Nieaktywny", + "noConnectionId": "brak ID połączenia", + "accountModelSummary": "{connectionId} · {count} models", + "cooldown": "cooldown", + "durationRemaining": "pozostało {duration}", + "noSyncedModelsOrTraffic": "Brak zsynchronizowanych models lub niedawnego ruchu.", + "providerRowSummary": "{active}/{total} aktywnych kont · {requests} req · {successRate} sukces · {latency} avg", + "cooldownCount": "{count} cooldown", + "lockoutCount": "{count} blokad", + "issueCount": "{count} problemów", + "score": "Wynik", + "lastRequest": "Ostatnie żądanie", + "lastError": "Ostatni błąd" }, "telemetry": { "title": "Telemetria systemu", - "description": "Ciągłe sygnały żądania, czasu działania, sesji i pamięci z tego procesu OmniRoute.", - "uptime": "Czas pracy", + "description": "Bieżące sygnały dotyczące żądań, środowiska uruchomieniowego, sesji i pamięci z tego procesu OmniRoute.", + "uptime": "Uptime", "totalRequests": "Łączna liczba żądań", "avgLatency": "Średnie opóźnienie", - "errorRate": "Poziom błędów", + "errorRate": "Wskaźnik błędów", "activeConnections": "Aktywne połączenia", - "memoryUsage": "Wykorzystanie pamięci", + "memoryUsage": "Zużycie pamięci", "latencyTrend": "Trend opóźnień", "throughputTrend": "Trend przepustowości", - "memoryTrend": "Trend pamięciowy", + "memoryTrend": "Trend pamięci", "refresh": "Odśwież", "updatedAt": "Zaktualizowano {time}", - "loadFailed": "Nie udało się załadować danych telemetrycznych.", + "loadFailed": "Nie udało się załadować telemetrii.", "partialData": "Telemetria jest częściowo dostępna: {error}" }, "mitm": { - "title": "Pełnomocnik MITM", - "description": "Przejrzysty serwer proxy do przechwytywania i kierowania żądań klientów.", - "enable": "Włącz serwer proxy MITM", - "enableDesc": "Rozpocznij lub zatrzymaj proces lokalnego przechwytywania i zastąpienia DNS.", - "status": "Stan", - "running": "Bieganie", + "title": "MITM Proxy", + "description": "Przezroczysty serwer proxy do przechwytywania i routowania żądań klientów.", + "enable": "Włącz MITM Proxy", + "enableDesc": "Uruchom lub zatrzymaj lokalny proces przechwytywania i nadpisywania DNS.", + "status": "Status", + "running": "Uruchomiony", "stopped": "Zatrzymany", - "start": "Zacznij", - "stop": "Zatrzymaj się", + "start": "Uruchom", + "stop": "Zatrzymaj", "refresh": "Odśwież", "port": "Port proxy", - "apiKey": "Klucz API routera", - "apiKeyPlaceholder": "Opcjonalne; wraca do klucza lokalnego", - "sudoPassword": "Hasło Sudo", - "cachedPassword": "Buforowane dla tego procesu", + "apiKey": "API Key routera", + "apiKeyPlaceholder": "Opcjonalnie; w przypadku braku używany jest lokalny klucz", + "sudoPassword": "Hasło sudo", + "cachedPassword": "Zapisane w pamięci podręcznej dla tego procesu", "saveSettings": "Zapisz ustawienia", - "settingsSaved": "Ustawienia MITM zostały zapisane.", - "startedSuccess": "Uruchomiono serwer proxy MITM.", - "stoppedSuccess": "Serwer proxy MITM został zatrzymany.", + "settingsSaved": "Ustawienia MITM zapisane.", + "startedSuccess": "Uruchomiono MITM proxy.", + "stoppedSuccess": "Zatrzymano MITM proxy.", "saveFailed": "Nie udało się zaktualizować ustawień MITM.", "loadFailed": "Nie udało się załadować ustawień MITM.", - "invalidPort": "Przechwytywanie przezroczystego MITM wymaga obecnie portu 443.", + "invalidPort": "Przezroczyste przechwytywanie MITM wymaga obecnie portu 443.", "certificate": "Certyfikat CA", - "certificateReady": "Certyfikat jest dostępny do instalacji zaufania klienta.", + "certificateReady": "Certyfikat jest dostępny do instalacji jako zaufany u klienta.", "certificateMissing": "Certyfikat nie został jeszcze wygenerowany.", - "available": "Dostępne", + "available": "Dostępny", "missing": "Brak", "downloadCert": "Pobierz certyfikat CA", - "regenerateCert": "Zregeneruj certyfikat", + "regenerateCert": "Wygeneruj ponownie certyfikat", "regenerateConfirm": "Spowoduje to unieważnienie istniejącego zaufania klienta. Kontynuować?", - "regenerateSuccess": "Zregenerowano certyfikat MITM.", - "regenerateFailed": "Nie udało się ponownie wygenerować certyfikatu MITM.", + "regenerateSuccess": "Wygenerowano ponownie certyfikat MITM.", + "regenerateFailed": "Nie udało się wygenerować ponownie certyfikatu MITM.", "targetRoutes": "Trasy docelowe", "interceptedRequests": "Przechwycone żądania", "activeConnections": "Aktywne połączenia", - "dnsConfigured": "Skonfigurowano DNS", + "dnsConfigured": "DNS skonfigurowany", "pid": "PID", "lastIntercept": "Ostatnie przechwycenie", "target": "Cel", - "host": "Gospodarz", + "host": "Host", "localPort": "Port lokalny", - "endpoints": "Punkty końcowe", + "endpoints": "Endpoints", "enabled": "Włączone", - "configured": "Skonfigurowane", + "configured": "Skonfigurowano", "yes": "Tak", "no": "Nie", - "noTargets": "Nie skonfigurowano tras docelowych." + "noTargets": "Brak skonfigurowanych tras docelowych." }, "limits": { - "title": "Limity i kwoty", - "rateLimit": "Limit stawki", + "title": "Limity i Quotas", + "rateLimit": "Rate Limit", "remaining": "Pozostało", "requestsPerMinute": "Żądania/min", - "tokensPerMinute": "Tokeny/min", + "tokensPerMinute": "Tokens/min", "dailyLimit": "Limit dzienny" }, "logs": { - "title": "Dzienniki", - "requestLogs": "Poproś o logi", - "proxyLogs": "Dzienniki proxy", - "auditLog": "Dziennik audytu", + "title": "Logi", + "requestLogs": "Logi żądań", + "proxyLogs": "Logi proxy", + "auditLog": "Log audytu", "console": "Konsola", - "auditLogDesc": "Działania administracyjne i zdarzenia związane z bezpieczeństwem", + "auditLogDesc": "Działania administracyjne i zdarzenia bezpieczeństwa", "loading": "Ładowanie...", "refresh": "Odśwież", "filterByAction": "Filtruj według działania...", - "filterByActor": "Filtruj według aktora...", - "filterEntriesAria": "Filtruj wpisy dziennika audytu", - "filterByActionTypeAria": "Filtruj według typu akcji", - "filterByActorAria": "Filtruj według aktora", - "refreshAuditLogAria": "Odśwież dziennik audytu", - "tableAria": "Wpisy dziennika audytu", - "failedFetchAuditLog": "Nie udało się pobrać dziennika kontroli", - "showing": "Wyświetlanie wpisów {count} (przesunięcie {offset})", + "filterByActor": "Filtruj według wykonawcy...", + "filterEntriesAria": "Filtruj wpisy logu audytu", + "filterByActionTypeAria": "Filtruj według typu działania", + "filterByActorAria": "Filtruj według wykonawcy", + "refreshAuditLogAria": "Odśwież log audytu", + "tableAria": "Wpisy logu audytu", + "failedFetchAuditLog": "Nie udało się pobrać logu audytu", + "showing": "Wyświetlanie {count} wpisów (offset {offset})", "search": "Szukaj", "timestamp": "Znacznik czasu", - "action": "Akcja", - "actor": "Aktor", + "action": "Działanie", + "actor": "Wykonawca", "target": "Cel", "details": "Szczegóły", "ipAddress": "Adres IP", "notAvailable": "—", - "noEntries": "Nie znaleziono wpisów w dzienniku kontroli", + "noEntries": "Nie znaleziono wpisów w logu audytu", "previous": "Poprzedni", "next": "Następny", - "providerWarningTitle": "Provider Warning Title", - "viewDetails": "View Details", - "eventMetadata": "Event Metadata", - "eventPayload": "Event Payload", - "requestId": "Request Id", - "providerWarningDesc": "Provider Warning Desc", + "providerWarningTitle": "Ostrzeżenia Providerów", + "viewDetails": "Wyświetl szczegóły", + "eventMetadata": "Metadane zdarzenia", + "eventPayload": "Payload zdarzenia", + "requestId": "ID żądania", + "providerWarningDesc": "Niektóre Providers zwróciły ostrzeżenia podczas przetwarzania żądania", "a": "A", "offset": "Offset", "limit": "Limit", "status": "Status", - "resourceType": "Resource Type", - "totalEntries": "Total Entries", - "tab": "Tab", - "auditModalSubtitle": "Audit Modal Subtitle", - "close": "Close", - "runningRequests": "Active Requests", - "runningRequestsDesc": "Real-time view of currently running upstream requests", + "resourceType": "Typ zasobu", + "totalEntries": "Łączna liczba wpisów", + "tab": "Karta", + "auditModalSubtitle": "Szczegóły i metadane zdarzenia", + "close": "Zamknij", + "runningRequests": "Aktywne żądania", + "runningRequestsDesc": "Widok w czasie rzeczywistym aktualnie uruchomionych żądań upstream", "clearAll": "Wyczyść wszystko", "confirmClearActiveRequests": "Wyczyścić wszystkie aktywne żądania?", "model": "Model", "provider": "Provider", - "account": "Account", - "elapsed": "Elapsed", - "activeStage": "__MISSING__:Stage", - "activeStageUnknown": "__MISSING__:Not sent to upstream yet", - "activeStageRegistered": "__MISSING__:Registered", - "activeStagePayloadPrepared": "__MISSING__:Payload prepared", - "activeStageWaitingAccountSlot": "__MISSING__:Waiting for account slot", - "activeStageWaitingRateLimit": "__MISSING__:Waiting for rate limiter", - "activeStageRateLimitSlotAcquired": "__MISSING__:Rate limit slot acquired", - "activeStageSendingToProvider": "__MISSING__:Sending to upstream", - "activeStageProviderResponseStarted": "__MISSING__:Upstream response started", - "count": "Count", + "account": "Konto", + "elapsed": "Czas trwania", + "activeStage": "Etap", + "activeStageUnknown": "Nie wysłano jeszcze do upstream", + "activeStageRegistered": "Zarejestrowano", + "activeStagePayloadPrepared": "Payload przygotowany", + "activeStageWaitingAccountSlot": "Oczekiwanie na slot konta", + "activeStageWaitingRateLimit": "Oczekiwanie na rate limiter", + "activeStageRateLimitSlotAcquired": "Uzyskano slot rate limit", + "activeStageSendingToProvider": "Wysyłanie do upstream", + "activeStageProviderResponseStarted": "Rozpoczęto odpowiedź upstream", + "count": "Liczba", "payloads": "Payloads", - "viewPayloads": "View", - "activeCount": "{count} active", - "clientPayload": "Client Request Payload", - "upstreamPayload": "Upstream Provider Payload", - "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", - "export": "Export", - "exporting": "Exporting...", - "exportFailed": "Export failed", - "cleanHistoryButton": "__MISSING__:Clean history", - "cleanHistoryTitle": "__MISSING__:Clean log history?", - "cleanHistoryMessage": "__MISSING__:This permanently clears all request log rows, legacy detail rows, and local artifact files under DATA_DIR/call_logs. The live page will refresh after cleanup.", - "cleanHistoryConfirm": "__MISSING__:Clean history", - "cleanHistoryCancel": "__MISSING__:Cancel", - "cleanHistorySuccess": "__MISSING__:Cleaned {deleted} log entries, {deletedArtifacts} artifacts, and {deletedDetailedLogs} legacy detail rows.", - "cleanHistoryEmpty": "__MISSING__:No request log history was found.", - "cleanHistoryFailed": "__MISSING__:Failed to clean log history.", - "timeRange": "Time Range", - "lastNHours": "Last {hours}", - "defaultRange": "default", + "viewPayloads": "Wyświetl", + "activeCount": "{count} aktywnych", + "clientPayload": "Payload żądania klienta", + "upstreamPayload": "Payload Providera upstream", + "upstreamNotSentYet": "Nie wysłano jeszcze do upstream", + "runningRequestDetailMeta": "Konto: {account} — Czas: {elapsed}", + "export": "Eksportuj", + "exporting": "Eksportowanie...", + "exportFailed": "Eksport nie powiódł się", + "cleanHistoryButton": "Wyczyść historię", + "cleanHistoryTitle": "Wyczyścić historię logów?", + "cleanHistoryMessage": "Spowoduje to trwałe wyczyszczenie wszystkich wierszy logów żądań, starszych wierszy szczegółów oraz lokalnych plików artefaktów w katalogu DATA_DIR/call_logs. Po wyczyszczeniu strona zostanie odświeżona.", + "cleanHistoryConfirm": "Wyczyść historię", + "cleanHistoryCancel": "Anuluj", + "cleanHistorySuccess": "Wyczyszczono {deleted} wpisów logów, {deletedArtifacts} artefaktów i {deletedDetailedLogs} starszych wierszy szczegółów.", + "cleanHistoryEmpty": "Nie znaleziono historii logów żądań.", + "cleanHistoryFailed": "Nie udało się wyczyścić historii logów.", + "timeRange": "Zakres czasu", + "lastNHours": "Ostatnie {hours}", + "defaultRange": "domyślny", "consoleViewer": { - "fetchFailed": "Failed to fetch logs", - "copyFailed": "Failed to copy log entry", - "copyLogEntry": "Copy log entry" + "fetchFailed": "Nie udało się pobrać logów", + "copyFailed": "Nie udało się skopiować wpisu logu", + "copyLogEntry": "Skopiuj wpis logu" }, - "compressionLogTitle": "__MISSING__:Compression Log", - "compressionLogEmpty": "__MISSING__:No compressed requests yet. Compression stats will appear here when requests are processed with compression enabled.", - "tokens": "__MISSING__:tokens" + "compressionLogTitle": "Log kompresji", + "compressionLogEmpty": "Brak jeszcze skompresowanych żądań. Statystyki kompresji pojawią się tutaj, gdy żądania będą przetwarzane z włączoną kompresją.", + "tokens": "tokens" }, "onboarding": { "welcome": "Witamy", - "tiers": "__MISSING__:Tiers", + "tiers": "Poziomy", "security": "Bezpieczeństwo", - "test": "Testuj", - "ready": "Gotowy!", + "test": "Test", + "ready": "Gotowe!", "setPassword": "Ustaw hasło", - "addProvider": "Dodaj swojego pierwszego dostawcę", + "addProvider": "Dodaj pierwszy provider", "getStarted": "Rozpocznij", "skip": "Pomiń", - "skipWizard": "Całkowicie pomiń kreatora", + "skipWizard": "Pomiń kreator całkowicie", "skipPassword": "Pomiń konfigurację hasła", "skipAndContinue": "Pomiń i kontynuuj", "passwordLabel": "Hasło", "confirmPassword": "Potwierdź hasło", "enterPassword": "Wprowadź hasło", "confirmPasswordPlaceholder": "Potwierdź hasło", - "passwordsMismatch": "Hasła nie pasują", - "setupComplete": "Konfiguracja ukończona!", - "goToDashboard": "Przejdź do Panelu →", - "welcomeDesc": "OmniRoute to lokalny serwer proxy API AI. Kieruje żądania do wielu dostawców AI z równoważeniem obciążenia, przełączaniem awaryjnym i śledzeniem użycia.", - "multiProvider": "Wielu dostawców", + "passwordsMismatch": "Hasła nie pasują do siebie", + "setupComplete": "Konfiguracja zakończona!", + "goToDashboard": "Przejdź do dashboard →", + "welcomeDesc": "OmniRoute to lokalne proxy API AI. Przekierowuje zapytania do wielu AI providers z równoważeniem obciążenia, failover i śledzeniem użycia.", + "multiProvider": "Multi-Provider", "usageTracking": "Śledzenie użycia", - "securityDesc": "Ustaw hasło, aby chronić swój pulpit nawigacyjny, lub na razie pomiń.", - "providerDesc": "Połącz swojego pierwszego dostawcę AI. Możesz dodać więcej później.", + "securityDesc": "Ustaw hasło, aby zabezpieczyć dashboard, lub pomiń na razie.", + "providerDesc": "Połącz pierwszego AI provider. Więcej można dodać później.", "apiKeyRequired": "Klucz API (wymagany)", - "customUrlOptional": "Niestandardowy adres URL (opcjonalnie)", - "testDesc": "Sprawdźmy, czy połączenie Twojego dostawcy działa.", + "customUrlOptional": "Niestandardowy URL (opcjonalnie)", + "testDesc": "Zweryfikujmy, czy połączenie z provider działa.", "runTest": "Uruchom test połączenia", "testingConnection": "Testowanie połączenia...", - "connectionSuccessful": "Połączenie pomyślne! Twój dostawca jest gotowy.", - "noProviderFound": "Nie znaleziono dostawcy. Możesz dodać je później z poziomu panelu kontrolnego.", - "testFailed": "Test nie powiódł się, ale możesz to skonfigurować później.", - "couldNotTest": "Nie można teraz przetestować. Możesz przetestować z poziomu pulpitu nawigacyjnego.", - "doneDesc": "Wszystko gotowe! Twoja instancja OmniRoute jest skonfigurowana i gotowa do zastępowania żądań AI.", - "yourEndpoint": "Twój punkt końcowy:", + "connectionSuccessful": "Połączenie udane! Provider jest gotowy.", + "noProviderFound": "Nie znaleziono provider. Można dodać go później z poziomu dashboard.", + "testFailed": "Test nie powiódł się, ale można skonfigurować to później.", + "couldNotTest": "Nie udało się teraz przeprowadzić testu. Można przetestować z poziomu dashboard.", + "doneDesc": "Wszystko gotowe! Instancja OmniRoute jest skonfigurowana i gotowa do obsługi zapytań AI jako proxy.", + "yourEndpoint": "Adres endpoint:", "continue": "Kontynuuj", - "retry": "Spróbuj ponownie", + "retry": "Ponów próbę", "failedSetPassword": "Nie udało się ustawić hasła. Spróbuj ponownie.", - "failedAddProvider": "Nie udało się dodać dostawcy. Spróbuj ponownie.", + "failedAddProvider": "Nie udało się dodać provider. Spróbuj ponownie.", "connectionError": "Błąd połączenia. Spróbuj ponownie.", - "provider": "Dostawca", - "apiKeyHelp": "Klucz API to hasło do usług AI. Pobierz go ze strony internetowej swojego dostawcy (np. platforma.openai.com, console.anthropic.com).", + "provider": "Provider", + "apiKeyHelp": "Klucz API to hasło do usług AI. Można go uzyskać na stronie internetowej provider (np. platform.openai.com, console.anthropic.com).", "tier": { - "subtitle": "OmniRoute dzieli dostawców na trzy poziomy, więc routing preferuje najpierw najbardziej niezawodną i najtańszą ścieżkę.", + "subtitle": "OmniRoute organizuje providers w trzy tiers, aby routing najpierw wybierał najbardziej niezawodną i najtańszą ścieżkę.", + "flowCaption": "Zapytania przechodzą najpierw przez quota subskrypcji, następnie przez tanich providers płatnych za token, a na końcu przez providers free-tier — automatycznie, bez dodatkowej konfiguracji.", + "afterSetup": "po konfiguracji.", "tier1": { "label": "Klienci premium", - "description": "Najwyższej klasy interfejsy CLI z natywnymi przepływami uwierzytelniania i modelami wnioskowania." + "description": "Pierwszorzędne CLI z natywnymi przepływami auth i models rozumowania." }, "tier2": { - "label": "Optymalizacja kosztów", - "description": "Tani dostawcy o dużej przepustowości wykorzystywani do codziennego ruchu." + "label": "Zoptymalizowane pod kątem kosztów", + "description": "Tani providers o wysokiej przepustowości, używani do codziennego ruchu." }, "tier3": { - "label": "Rezerwa i specjalność", - "description": "Lokalnie hostowane lub specjalne punkty końcowe używane jako rezerwowe." + "label": "Fallback i specjalistyczne", + "description": "Lokalnie hostowane lub specjalistyczne endpoints używane jako fallback." }, - "configure": "Skonfiguruj dostawców" + "configure": "Skonfiguruj providers" }, - "tierFlowDiagramAlt": "3-poziomowy diagram rezerwowy OmniRoute", + "tierFlowDiagramAlt": "Schemat fallback 3-poziomowego OmniRoute", "apiKeyMgmt": "Zarządzanie kluczami API" }, "providers": { - "title": "Dostawcy", - "Account Deactivated": "__MISSING__:Account Deactivated", - "allProviders": "Wszyscy dostawcy", - "audioProviders": "Dostawcy dźwięku", - "showFreeOnly": "Tylko bezpłatne", - "addProvider": "Dodaj dostawcę", - "addFirstProvider": "Dodaj swojego pierwszego dostawcę", - "addFirstProviderDesc": "Połącz się z dostawcą AI, aby rozpocząć kierowanie żądań przez OmniRoute. Możesz korzystać z bezpłatnych dostawców, kluczy API lub kont OAuth.", + "title": "Providers", + "Account Deactivated": "Konto dezaktywowane", + "allProviders": "Wszystkie Providers", + "audioProviders": "Audio Providers", + "showFreeOnly": "Tylko darmowe", + "addProvider": "Dodaj Provider", + "addFirstProvider": "Dodaj pierwszego Provider", + "addFirstProviderDesc": "Połącz AI provider, aby rozpocząć routing żądań przez OmniRoute. Można użyć darmowych providers, kluczy API lub kont OAuth.", "learnMore": "Dowiedz się więcej", + "importFromFile": "Import z pliku", + "importFromFileTitle": "Import providers z pliku", + "importFromFileDescription": "Prześlij plik CSV lub JSON zawierający listę wielu providers (każdy wiersz może reprezentować inny typ provider). Przejrzyj przetworzone wiersze poniżej i wybierz te, które mają zostać zaimportowane.", + "importFromFileChoose": "Wybierz plik", + "importFromFileSelectHint": "{count} z {total} wybranych", + "importFromFileColProvider": "Provider", + "importFromFileColName": "Nazwa", + "importFromFileColBaseUrl": "Bazowy URL", + "importFromFileErrorLine": "Wiersz {line}: {reason}", + "importErrorMissingProvider": "brak provider", + "importErrorMissingName": "brak nazwy", + "importErrorMissingApiKey": "brak klucza API", + "importErrorInvalidPriority": "nieprawidłowy priorytet (musi być 1-100)", + "importErrorMalformedRow": "nieprawidłowy format wiersza", + "importErrorNotArray": "plik musi zawierać tablicę JSON", + "importFromFileImporting": "Importowanie…", + "importFromFileImport": "Importuj {count} providers", + "importFromFileResult": "Zaimportowano {success} providers (niepowodzenie: {failed})", "adaptaTutorial": { - "title": "__MISSING__:How to connect Adapta Web", - "introPrefix": "__MISSING__:Adapta authenticates through Clerk. The token", - "introSuffix": "__MISSING__:is a long-lived JWT that lets OmniRoute refresh sessions automatically.", - "or": "__MISSING__:or", - "step1Title": "__MISSING__:Open Adapta chat", - "step1DescPrefix": "__MISSING__:Open", - "step1DescSuffix": "__MISSING__:and sign in with your Gold or Business account.", - "step2Title": "__MISSING__:Open DevTools", - "step2DescPrefix": "__MISSING__:Press", - "step2DescSuffix": "__MISSING__:to open Developer Tools.", - "step3Title": "__MISSING__:Go to Application → Cookies", - "step3DescPrefix": "__MISSING__:In the", - "step3DescMiddle": "__MISSING__:expand", - "step3DescSuffix": "__MISSING__:and click", - "step4Title": "__MISSING__:Copy the cookie value for", - "step4DescPrefix": "__MISSING__:Find the cookie named", - "step4DescMiddle": "__MISSING__:in the list. Click it and copy the content from the", - "step4DescSuffix": "__MISSING__:column. It starts with", - "step5Title": "__MISSING__:Paste it here and save", - "step5DescPrefix": "__MISSING__:Click", - "step5DescMiddle": "__MISSING__:paste the", - "step5DescSuffix": "__MISSING__:value into the API Key field, then save. OmniRoute will refresh the session automatically.", - "tipLabel": "__MISSING__:Tip:", - "tipPrefix": "__MISSING__:The", - "tipSuffix": "__MISSING__:cookie is long-lived, usually for months. You only need to renew it if you sign out or Adapta invalidates the session." + "title": "Jak połączyć Adapta Web", + "introPrefix": "Adapta uwierzytelnia się przez Clerk. Token", + "introSuffix": "to długożyciowy JWT, który umożliwia OmniRoute automatyczne odświeżanie sesji.", + "or": "lub", + "step1Title": "Otwórz czat Adapta", + "step1DescPrefix": "Otwórz", + "step1DescSuffix": "i zaloguj się na konto Gold lub Business.", + "step2Title": "Otwórz DevTools", + "step2DescPrefix": "Naciśnij", + "step2DescSuffix": "aby otworzyć Narzędzia deweloperskie.", + "step3Title": "Przejdź do Application → Cookies", + "step3DescPrefix": "W sekcji", + "step3DescMiddle": "rozwiń", + "step3DescSuffix": "i kliknij", + "step4Title": "Skopiuj wartość cookie dla", + "step4DescPrefix": "Znajdź cookie o nazwie", + "step4DescMiddle": "na liście. Kliknij je i skopiuj zawartość z kolumny", + "step4DescSuffix": "Zaczyna się od", + "step5Title": "Wklej tutaj i zapisz", + "step5DescPrefix": "Kliknij", + "step5DescMiddle": "wklej wartość", + "step5DescSuffix": "w pole API Key, a następnie zapisz. OmniRoute automatycznie odświeży sesję.", + "tipLabel": "Wskazówka:", + "tipPrefix": "To", + "tipSuffix": "cookie jest długożyciowe, zazwyczaj przez miesiące. Odnowienie jest wymagane tylko w przypadku wylogowania lub unieważnienia sesji przez Adapta." }, - "editProvider": "Edytuj dostawcę", - "deleteProvider": "Usuń dostawcę", - "noProviders": "Nie skonfigurowano żadnych dostawców", - "modelAvailability": "Dostępność modelu", + "editProvider": "Edytuj Provider", + "deleteProvider": "Usuń Provider", + "noProviders": "Brak skonfigurowanych providers", + "modelAvailability": "Dostępność models", "accounts": "Konta", "newAccount": "Nowe konto", - "deleteConfirm": "Czy na pewno chcesz usunąć tego dostawcę?", + "deleteConfirm": "Czy na pewno usunąć ten provider?", "testing": "Testowanie...", - "testConnection": "Połączenie testowe", + "testConnection": "Testuj połączenie", "testSuccess": "Połączenie pomyślne", "testFailed": "Połączenie nie powiodło się", - "available": "Dostępne", - "cooldown": "Czas odnowienia", - "unavailable": "Niedostępne", + "available": "Dostępny", + "cooldown": "Cooldown", + "unavailable": "Niedostępny", "unknown": "Nieznany", "oauthLabel": "OAuth", - "compatibleLabel": "Kompatybilny", + "compatibleLabel": "Zgodny", "chat": "Czat", "responses": "Odpowiedzi", "messages": "Wiadomości", - "oauthProviders": "Dostawcy protokołu OAuth", - "freeProviders": "Bezpłatni dostawcy", - "apiKeyProviders": "Dostawcy kluczy API", - "compatibleProviders": "Dostawcy obsługujący klucz API", - "testAll": "Przetestuj wszystko", + "oauthProviders": "OAuth Providers", + "freeProviders": "Darmowe Providers", + "apiKeyProviders": "API Key Providers", + "compatibleProviders": "Zgodni API Key Providers", + "testAll": "Testuj wszystko", "reorderByAvailability": "Zmień kolejność", - "reorderByAvailabilityTitle": "Uporządkuj połączenia według dostępności", - "reorderByAvailabilityError": "Nie udało się uporządkować połączeń według dostępności", - "distributeProxies": "__MISSING__:Distribute Proxies", - "distributing": "__MISSING__:Distributing...", - "selectedCount": "__MISSING__:{count, plural, one {# selected} other {# selected}}", - "accountsCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "testAllOAuth": "Przetestuj wszystkie połączenia OAuth", - "testAllFree": "Przetestuj wszystkie bezpłatne połączenia", - "testAllApiKey": "Przetestuj wszystkie połączenia klucza API", - "testAllCompatible": "Przetestuj wszystkie kompatybilne połączenia", - "testAllModels": "__MISSING__:Test all models", - "testAllModelsConfirm": "__MISSING__:Test all visible models? Failed models will be hidden if auto-hide is enabled.", - "testingAllModels": "__MISSING__:Testing {done}/{total}...", - "testAllResults": "__MISSING__:{ok} of {total} models working", - "noModelsToTest": "__MISSING__:No models match the current filter", - "showAllModels": "__MISSING__:All", + "reorderByAvailabilityTitle": "Zmień kolejność połączeń według dostępności", + "reorderByAvailabilityError": "Nie udało się zmienić kolejności połączeń według dostępności", + "distributeProxies": "Rozdziel proxy", + "distributing": "Rozdzielanie...", + "selectedCount": "{count, plural, one {# wybrany} other {# wybranych}}", + "accountsCount": "{count, plural, one {# konto} other {# kont}}", + "testAllOAuth": "Testuj wszystkie połączenia OAuth", + "testAllFree": "Testuj wszystkie darmowe połączenia", + "testAllApiKey": "Testuj wszystkie połączenia API Key", + "testAllCompatible": "Testuj wszystkie zgodne połączenia", + "testAllModels": "Testuj wszystkie models", + "testAllModelsConfirm": "Przetestować wszystkie widoczne models? Te, które nie przejdą testu, zostaną ukryte, jeśli włączone jest automatyczne ukrywanie.", + "testingAllModels": "Testowanie {done}/{total}...", + "testAllResults": "{ok} z {total} models działa", + "noModelsToTest": "Brak models pasujących do bieżącego filtra", + "showAllModels": "Wszystkie", "showVisibleOnly": "Tylko widoczne", "freeFilterAll": "Wszystkie", "freeFilterFreeOnly": "Tylko darmowe", "freeFilterPaidOnly": "Tylko płatne", - "sortFreeFirst": "__MISSING__:Free first", + "sortFreeFirst": "Najpierw darmowe", "showHiddenOnly": "Tylko ukryte", "filterByVisibility": "Filtruj według widoczności", - "autoHideFailed": "__MISSING__:Auto-hide failed models", - "autoHideFailedHint": "__MISSING__:When enabled, Test all hides non-transient failures from public catalogs such as /v1/models. Single-model tests never auto-hide.", - "connected": "{count} Połączono", - "errorCount": "{count} Błąd ({code})", - "errorCountNoCode": "{count} Błąd", - "testAllCompleted": "__MISSING__:Tested {total} models: {ok} OK, {failed} failed", - "modelAutoHidden": "__MISSING__:Model {model} auto-hidden (test failed)", + "autoHideFailed": "Automatycznie ukrywaj nieudane models", + "autoHideFailedHint": "Gdy ta opcja jest włączona, Testuj wszystko ukrywa trwałe błędy z publicznych katalogów, takich jak /v1/models. Testy pojedynczych models nigdy nie są automatycznie ukrywane.", + "connected": "{count} połączono", + "errorCount": "{count} błąd ({code})", + "errorCountNoCode": "{count} błąd", + "testAllCompleted": "Przetestowano {total} models: {ok} OK, {failed} nie powiodło się", + "modelAutoHidden": "Model {model} automatycznie ukryty (test nie powiódł się)", "filterAll": "Wszystkie", "filterVisible": "Tylko widoczne", "filterHidden": "Tylko ukryte", - "modelsHiddenCount": "__MISSING__:{count} hidden", - "warningCount": "{count} Ostrzeżenie", + "modelsHiddenCount": "{count} ukrytych", + "warningCount": "{count} ostrzeżenie", "noConnections": "Brak połączeń", - "expiredBadge": "Expired", - "expiringSoonBadge": "Expiring Soon", - "freeTier": "Poziom bezpłatny", - "freeTierAvailable": "Dostępny poziom bezpłatny", - "hasFreeTooltip": "__MISSING__:Free tier available", - "noAuthLabel": "__MISSING__:No Auth", - "noAuthProviders": "__MISSING__:No Auth Providers", - "upstreamProxyLabel": "__MISSING__:Upstream Proxy", - "freeAggregated": "__MISSING__:All providers with free tier (also shown in their native category)", + "expiredBadge": "Wygasło", + "expiringSoonBadge": "Wkrótce wygasa", + "freeTier": "Free Tier", + "freeTierAvailable": "Dostępna darmowa warstwa", + "hasFreeTooltip": "Dostępna darmowa warstwa", + "noAuthLabel": "Bez uwierzytelniania", + "noAuthProviders": "Providers bez uwierzytelniania", + "upstreamProxyLabel": "Upstream Proxy", + "freeAggregated": "Wszyscy providers z darmową warstwą (widoczni również w swojej natywnej kategorii)", "deprecated": "Przestarzałe", - "deprecatedProvider": "Ten dostawca został wycofany", + "deprecatedProvider": "Ten provider jest przestarzały", "riskNotice": { - "title": "__MISSING__:Before continuing", - "tooltip": "__MISSING__:Provider with usage caveats — click for details", - "oauth": "__MISSING__:This provider uses your official product session/OAuth, which is not authorized for proxy/router use. We don't recommend intensive autonomous agent usage (OpenCloud-style, long multi-step flows, large batches) — the upstream may react by restricting or banning the account. Use at your own risk.", - "webCookie": "__MISSING__:This provider authenticates through your web session cookies. The upstream service may invalidate the session at any time, requiring you to log in again. Not recommended for long unattended operations. Use at your own risk.", - "deprecated": "__MISSING__:This provider was discontinued by its upstream and may stop working without notice. Existing connections may continue working until the upstream fully removes access. Consider alternatives.", - "dontShowAgain": "__MISSING__:Don't show this again for this provider", - "understand": "__MISSING__:I understand, continue", - "cancel": "__MISSING__:Cancel" + "title": "Przed kontynuowaniem", + "tooltip": "Provider z zastrzeżeniami dotyczącymi użytkowania — kliknij, aby uzyskać szczegóły", + "oauth": "Ten provider korzysta z oficjalnej sesji produktu/OAuth, która nie jest autoryzowana do użytku jako proxy/router. Nie zalecamy intensywnego korzystania z autonomicznych agentów (w stylu OpenCloud, długich wieloetapowych przepływów, dużych partii) — upstream może zareagować ograniczeniem lub zablokowaniem konta. Użycie na własne ryzyko.", + "webCookie": "Ten provider uwierzytelnia się za pomocą plików cookie sesji internetowej. Usługa upstream może unieważnić sesję w dowolnym momencie, co będzie wymagać ponownego zalogowania. Opcja ta nie jest zalecana do długich operacji bez nadzoru. Użycie na własne ryzyko.", + "deprecated": "Ten provider został wycofany przez dostawcę upstream i może przestać działać bez powiadomienia. Istniejące połączenia mogą nadal działać, dopóki upstream całkowicie nie usunie dostępu. Rozważ rozwiązania alternatywne.", + "dontShowAgain": "Nie pokazuj tego ponownie dla tego provider", + "understand": "Rozumiem, kontynuuj", + "cancel": "Anuluj" }, - "disabled": "Niepełnosprawny", - "enableProvider": "Włącz dostawcę", - "disableProvider": "Wyłącz dostawcę", - "testResults": "Wyniki testu", - "noCompatibleYet": "Nie dodano jeszcze żadnych kompatybilnych dostawców", - "compatibleHint": "Użyj powyższych przycisków, aby dodać punkty końcowe kompatybilne z OpenAI lub Anthropic", - "addOpenAICompatible": "Dodaj kompatybilność z OpenAI", - "addAnthropicCompatible": "Dodaj kompatybilność antropiczną", - "addNewProvider": "Dodaj nowego dostawcę", - "backToProviders": "Powrót do dostawców", - "configureNewProvider": "Skonfiguruj nowego dostawcę AI do użycia z aplikacjami.", - "providerLabel": "Dostawca", - "selectProvider": "Wybierz dostawcę", - "selectedProvider": "Wybrany dostawca", + "disabled": "Wyłączone", + "enableProvider": "Włącz provider", + "disableProvider": "Wyłącz provider", + "testResults": "Wyniki testów", + "noCompatibleYet": "Nie dodano jeszcze żadnych zgodnych providers", + "compatibleHint": "Użyj przycisków powyżej, aby dodać endpoints zgodne z OpenAI lub Anthropic", + "addOpenAICompatible": "Dodaj zgodny z OpenAI", + "addAnthropicCompatible": "Dodaj zgodny z Anthropic", + "addNewProvider": "Dodaj nowy Provider", + "backToProviders": "Powrót do Providers", + "configureNewProvider": "Skonfiguruj nowy AI provider do użycia ze swoimi aplikacjami.", + "providerLabel": "Provider", + "selectProvider": "Wybierz provider", + "selectedProvider": "Wybrany provider", "authMethod": "Metoda uwierzytelniania", "apiKeyLabel": "Klucz API", - "apiKeyRequired": "Wymagany jest klucz API", - "selectProviderRequired": "Wybierz dostawcę", - "enterApiKey": "Wprowadź swój klucz API", - "apiKeySecure": "Twój klucz API zostanie zaszyfrowany i bezpiecznie przechowywany.", - "oauth2Connect": "Połącz się z OAuth2", + "apiKeyRequired": "Klucz API jest wymagany", + "selectProviderRequired": "Należy wybrać provider", + "enterApiKey": "Wprowadź klucz API", + "apiKeySecure": "Klucz API zostanie zaszyfrowany i bezpiecznie zapisany.", + "oauth2Connect": "Połącz przez OAuth2", "oauth2Label": "OAuth2", - "oauth2Desc": "Połącz swoje konto za pomocą uwierzytelniania OAuth2.", + "oauth2Desc": "Połącz konto przy użyciu uwierzytelniania OAuth2.", "displayName": "Nazwa wyświetlana", - "displayNamePlaceholder": "np. produkcyjne API, środowisko deweloperskie", - "displayNameHint": "Opcjonalne. Przyjazna nazwa identyfikująca tę konfigurację.", + "displayNamePlaceholder": "np. Produkcyjne API, Środowisko deweloperskie", + "displayNameHint": "Opcjonalnie. Przyjazna nazwa ułatwiająca identyfikację tej konfiguracji.", "active": "Aktywny", - "activeDescription": "Włącz tego dostawcę do użytku w swoich aplikacjach", + "activeDescription": "Włącz ten provider do użytku w swoich aplikacjach", "cancel": "Anuluj", - "createProvider": "Utwórz dostawcę", - "failedCreate": "Nie udało się utworzyć dostawcy", - "errorOccurred": "Wystąpił błąd. Spróbuj ponownie.", - "modelStatus": "Stan modelu", - "showConfiguredOnly": "Configured only", - "allModelsOperational": "Wszystkie modele sprawne", - "modelsWithIssues": "{count} modele z problemami", - "allModelsNormal": "Wszystkie modele reagują normalnie.", - "cooldownCleared": "Czas odnowienia usunięty dla {model}", - "failedClearCooldown": "Nie udało się wyczyścić czasu odnowienia", - "loadingAvailability": "Ładowanie dostępności modelu...", - "clearCooldown": "Jasne", + "createProvider": "Utwórz Provider", + "failedCreate": "Nie udało się utworzyć provider", + "errorOccurred": "Wystąpił błąd. Proszę spróbować ponownie.", + "modelStatus": "Status model", + "showConfiguredOnly": "Tylko skonfigurowane", + "allModelsOperational": "Wszystkie models działają sprawnie", + "modelsWithIssues": "{count} models z problemami", + "allModelsNormal": "Wszystkie models odpowiadają normalnie.", + "cooldownCleared": "Wyczyszczono cooldown dla {model}", + "failedClearCooldown": "Nie udało się wyczyścić cooldown", + "loadingAvailability": "Ładowanie dostępności models...", + "clearCooldown": "Wyczyść", "clearing": "Czyszczenie...", "until": "Do {time}", - "providerTestFailed": "Test dostawcy nie powiódł się", - "providerTestTimeout": "Provider test timed out — too many connections to test at once", - "modeTest": "{mode} Test", - "passedCount": "{count} zaliczone", - "failedCount": "{count} nie powiodło się", - "testedCount": "{count} przetestowane", + "providerTestFailed": "Test provider nie powiódł się", + "providerTestTimeout": "Przekroczono limit czasu testu provider — zbyt wiele połączeń do przetestowania jednocześnie", + "modeTest": "Test {mode}", + "passedCount": "{count} zaliczonych", + "failedCount": "{count} nieudanych", + "testedCount": "{count} przetestowanych", "millisecondsAbbr": "{value}ms", "okShort": "OK", - "errorShort": "BŁĄD", + "errorShort": "ERROR", "noActiveConnectionsInGroup": "Nie znaleziono aktywnych połączeń dla tej grupy.", - "allTestsPassed": "Wszystkie {total} testy zaliczone", - "testSummary": "{passed}/{total} zaliczone, {failed} nie powiodło się", - "nameLabel": "Imię", - "prefixLabel": "Przedrostek", - "baseUrlLabel": "Bazowy adres URL", - "apiTypeLabel": "Typ interfejsu API", - "prefixHint": "Wymagane. Unikalny przedrostek nazw modeli.", + "allTestsPassed": "Wszystkie testy ({total}) zakończyły się pomyślnie", + "testSummary": "{passed}/{total} zaliczonych, {failed} nieudanych", + "nameLabel": "Nazwa", + "prefixLabel": "Prefiks", + "baseUrlLabel": "Bazowy URL", + "apiTypeLabel": "Typ API", + "prefixHint": "Wymagane. Unikalny prefiks dla nazw models.", "nameHint": "Wymagane. Przyjazna etykieta dla tego węzła.", - "baseUrlHint": "Wymagane. Podstawowy adres URL interfejsu API dostawcy.", - "anthropicPrefixPlaceholder": "AC-prod", + "baseUrlHint": "Wymagane. Bazowy URL API provider.", + "iconUrlLabel": "URL ikony", + "iconUrlHint": "Opcjonalnie. URL obrazu wyświetlany jako ikona tego provider.", + "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", - "validateConnection": "Sprawdź połączenie", - "validating": "Sprawdzanie poprawności...", - "connectionValid": "Połączenie jest ważne!", - "connectionFailed": "Połączenie nie powiodło się. Sprawdź adres URL i klucz.", - "testKeyLabel": "Testuj klucz API", - "testKeyPlaceholder": "sk-... (tylko do sprawdzenia)", - "providerNotFound": "Nie znaleziono dostawcy", + "validateConnection": "Zweryfikuj połączenie", + "validating": "Weryfikowanie...", + "connectionValid": "Połączenie jest prawidłowe!", + "connectionFailed": "Połączenie nie powiodło się. Sprawdź URL i klucz.", + "testKeyLabel": "Testowy klucz API", + "testKeyPlaceholder": "sk-... (tylko do weryfikacji)", + "providerNotFound": "Nie znaleziono provider", "deleteConnectionConfirm": "Usunąć to połączenie?", - "deleteConnectionConfirmNamed": "Czy na pewno chcesz usunąć {name}? Tej czynności nie można cofnąć.", - "batchDeleteSelected": "Delete Selected ({count})", - "batchDeleteConfirm": "Delete {count} connection(s)? This action cannot be undone.", - "batchDeleteSuccess": "Deleted {count} connection(s)", - "batchActivateSelected": "__MISSING__:Activate", - "batchDeactivateSelected": "__MISSING__:Deactivate", - "batchRetestSelected": "__MISSING__:Retest", - "batchActivateSuccess": "__MISSING__:Activated {count} connection(s)", - "batchDeactivateSuccess": "__MISSING__:Deactivated {count} connection(s)", - "batchUpdatePartial": "__MISSING__:{count} updated, {skipped} skipped (no longer exist)", - "batchUpdateNone": "__MISSING__:No connections were updated (they may no longer exist)", - "batchRetestLimit": "__MISSING__:Retest up to {max} connections at a time", - "noConnectionsToTest": "__MISSING__:No matching connections to test", - "batchDeleteConfirmTitle": "__MISSING__:Delete connections", - "batchDeleteConfirmButton": "__MISSING__:Delete", + "deleteConnectionConfirmNamed": "Czy na pewno usunąć {name}? Tej operacji nie można cofnąć.", + "batchDeleteSelected": "Usuń zaznaczone ({count})", + "batchDeleteConfirm": "Usunąć {count} połączeń? Tej operacji nie można cofnąć.", + "batchDeleteSuccess": "Usunięto {count} połączeń", + "batchActivateSelected": "Aktywuj", + "batchDeactivateSelected": "Dezaktywuj", + "batchRetestSelected": "Ponów test", + "batchActivateSuccess": "Aktywowano {count} połączeń", + "batchDeactivateSuccess": "Dezaktywowano {count} połączeń", + "batchUpdatePartial": "{count} zaktualizowano, {skipped} pominięto (już nie istnieją)", + "batchUpdateNone": "Nie zaktualizowano żadnych połączeń (mogą już nie istnieć)", + "batchRetestLimit": "Ponów test maksymalnie {max} połączeń jednocześnie", + "noConnectionsToTest": "Brak pasujących połączeń do przetestowania", + "batchDeleteConfirmTitle": "Usuń połączenia", + "batchDeleteConfirmButton": "Usuń", "filterActive": "Aktywne", "filterError": "Błąd", - "filterBanned": "Zbanowane", - "filterCreditsExhausted": "Wyczerpane kredyty", - "noFilteredConnections": "__MISSING__:No connections match the current filter.", + "filterBanned": "Zablokowane", + "filterCreditsExhausted": "Środki wyczerpane", + "noFilteredConnections": "Brak połączeń pasujących do bieżącego filtra.", "failedSetAlias": "Nie udało się ustawić aliasu", - "setAliasSuccess": "__MISSING__:Alias {alias} set", - "deleteAliasSuccess": "__MISSING__:Alias {alias} deleted", + "setAliasSuccess": "Ustawiono alias {alias}", + "deleteAliasSuccess": "Usunięto alias {alias}", "failedSaveConnection": "Nie udało się zapisać połączenia", - "failedSaveConnectionRetry": "Nie udało się zapisać połączenia. Spróbuj ponownie.", + "failedSaveConnectionRetry": "Nie udało się zapisać połączenia. Proszę spróbować ponownie.", "failedRetestConnection": "Nie udało się ponownie przetestować połączenia", - "deleteCompatibleNodeConfirm": "Usunąć ten {type} Zgodny węzeł?", - "anthropicCompatibleDetails": "Szczegóły zgodności antropicznej", - "openaiCompatibleDetails": "Szczegóły zgodności z OpenAI", - "messagesApi": "Interfejs API wiadomości", - "responsesApi": "API odpowiedzi", + "deleteCompatibleNodeConfirm": "Usunąć ten węzeł kompatybilny z {type}?", + "anthropicCompatibleDetails": "Szczegóły kompatybilności z Anthropic", + "openaiCompatibleDetails": "Szczegóły kompatybilności z OpenAI", + "messagesApi": "Messages API", + "responsesApi": "Responses API", "embeddings": "Embeddings", - "audioTranscriptions": "Audio Transcriptions", + "audioTranscriptions": "Transkrypcje audio", "audioSpeech": "Audio Speech", - "imagesGenerations": "Images Generations", - "chatCompletions": "Zakończenia czatu", + "imagesGenerations": "Generowanie obrazów", + "chatCompletions": "Chat Completions", "importingModels": "Importowanie...", - "importFromModels": "Importuj z /modele", - "modelsImported": "{count} models imported", - "allModelsAlreadyImported": "Wszystkie modele są już zaimportowane", - "noNewModelsToImport": "Brak nowych modeli do zaimportowania — wszystkie modele są już w rejestrze lub na liście modeli niestandardowych", - "skippingExistingModels": "Pomijanie {count} istniejących modeli", - "autoSync": "Automatyczna synchronizacja", - "autoSyncTooltip": "Automatycznie odświeża listę modeli co 24 godziny (konfigurowalne przez MODEL_SYNC_INTERVAL_HOURS)", - "autoSyncEnabled": "Automatyczna synchronizacja włączona — modele będą okresowo odświeżane", - "autoSyncDisabled": "Automatyczna synchronizacja wyłączona", - "autoSyncToggleFailed": "Nie udało się przełączyć automatycznej synchronizacji", - "clearAllModels": "Wyczyść wszystkie modele", - "clearAllModelsConfirm": "Czy na pewno chcesz usunąć wszystkie modele dla tego dostawcy?", - "clearAllModelsSuccess": "Wszystkie modele wyczyszczone", - "clearAllModelsFailed": "Nie udało się wyczyścić modeli", - "addConnectionToImport": "Dodaj połączenie, aby umożliwić importowanie.", - "noModelsConfigured": "Nie skonfigurowano żadnych modeli", - "connectionCount": "{count} połączenia", - "fetchingModels": "Pobieram dostępne modele...", - "failedFetchModels": "Nie udało się pobrać modeli", - "noFreeModelsFound": "__MISSING__:No free models found for this provider — nothing imported.", - "fetchModelsSuccess": "__MISSING__:Found {count} new models", - "fetchModelsFailed": "__MISSING__:Could not auto-fetch models (you can retry from settings)", - "noModelsFound": "Nie znaleziono żadnych modeli", + "importFromModels": "Importuj z /models", + "modelsImported": "Zaimportowano {count} models", + "allModelsAlreadyImported": "Wszystkie models zostały już zaimportowane", + "noNewModelsToImport": "Brak nowych models do zaimportowania — wszystkie models znajdują się już w rejestrze lub na liście niestandardowych models", + "skippingExistingModels": "Pomijanie {count} istniejących models", + "autoSync": "Auto-Sync", + "autoSyncTooltip": "Automatyczne odświeżanie listy models co 24h (konfigurowalne przez MODEL_SYNC_INTERVAL_HOURS)", + "autoSyncEnabled": "Auto-sync włączony — models będą odświeżane okresowo", + "autoSyncDisabled": "Auto-sync wyłączony", + "autoSyncToggleFailed": "Nie udało się przełączyć auto-sync", + "clearAllModels": "Wyczyść wszystkie models", + "clearAllModelsConfirm": "Czy na pewno usunąć wszystkie models dla tego provider? Tej operacji nie można cofnąć.", + "clearAllModelsSuccess": "Wszystkie models zostały wyczyszczone", + "clearAllModelsFailed": "Nie udało się wyczyścić models", + "addConnectionToImport": "Należy dodać połączenie, aby umożliwić importowanie.", + "noModelsConfigured": "Brak skonfigurowanych models", + "connectionCount": "{count} połączeń", + "fetchingModels": "Pobieranie dostępnych models...", + "failedFetchModels": "Nie udało się pobrać models", + "noFreeModelsFound": "Nie znaleziono darmowych models dla tego provider — nic nie zaimportowano.", + "fetchModelsSuccess": "Znaleziono {count} nowych models", + "fetchModelsFailed": "Nie udało się automatycznie pobrać models (można spróbować ponownie w ustawieniach)", + "noModelsFound": "Nie znaleziono models", "importFailed": "Import nie powiódł się", - "noNewModelsAdded": "Nie dodano żadnych nowych modeli.", - "adding": "Dodawanie...", - "close": "Close", - "importingModelsTitle": "Importowanie modeli", - "copyModel": "Skopiuj model", - "filterModels": "Filtruj modele…", - "testAllRateLimited": "__MISSING__:Rate limit reached, stopped early", - "hideFailedAuto": "__MISSING__:Auto-hide failed models", - "selectAllModels": "Select all", - "hideAllModels": "Ukryj wszystkie", - "modelsActive": "aktywne", + "noNewModelsAdded": "Nie dodano żadnych nowych models.", + "adding": "Dodawanie…", + "close": "Zamknij", + "importingModelsTitle": "Importowanie models", + "copyModel": "Kopiuj model", + "filterModels": "Filtruj models...", + "testAllRateLimited": "Osiągnięto rate limit, zatrzymano wcześniej", + "hideFailedAuto": "Automatyczne ukrywanie nieudanych models", + "selectAllModels": "Zaznacz wszystko", + "hideAllModels": "Ukryj wszystko", + "modelsActive": "Aktywne", "showModel": "Pokaż model", "hideModel": "Ukryj model", "removeModel": "Usuń model", "rateLimitProtected": "Chronione", - "rateLimitUnprotected": "Niechroniony", - "enableRateLimitProtection": "Kliknij, aby włączyć ochronę limitu szybkości", - "disableRateLimitProtection": "Kliknij, aby wyłączyć ochronę limitu szybkości", - "testAllProgress": "__MISSING__:Tested {done}/{total}", - "testAllFailedHidden": "__MISSING__:{count} failed models hidden", - "testAllDone": "__MISSING__:All models tested", - "productionKey": "Klucz produkcyjny", - "enterNewApiKey": "Wprowadź nowy klucz API", - "codexApplyModalTitle": "Zastosuj się do lokalnego kodeksu", + "rateLimitUnprotected": "Niechronione", + "providerQuotaShort": "Quota", + "hideConnectionFromProviderQuota": "Ukryj to konto przed Provider Quota", + "showConnectionInProviderQuota": "Pokaż to konto w Provider Quota", + "quotaVisibilityUpdateFailed": "Nie udało się zaktualizować widoczności Provider Quota", + "enableRateLimitProtection": "Kliknij, aby włączyć ochronę rate limit", + "disableRateLimitProtection": "Kliknij, aby wyłączyć ochronę rate limit", + "testAllProgress": "Przetestowano {done}/{total}", + "testAllFailedHidden": "Ukryto {count} nieudanych models", + "testAllDone": "Wszystkie models zostały przetestowane", + "productionKey": "Production Key", + "enterNewApiKey": "Wprowadź nowy API key", + "codexApplyModalTitle": "Zastosuj do lokalnego Codex", "codexApplyTargetLabel": "Ścieżka docelowa", "codexApplyBackupLabel": "Kopie zapasowe", - "codexApplyWarning": "Zastąpi to istniejący plik auth.json. Kontynuować?", - "codexApplyConfirmCheckbox": "Potwierdzam, że chcę zastąpić istniejący plik auth.json", + "codexApplyWarning": "To zastąpi istniejący plik auth.json. Kontynuować?", + "codexApplyConfirmCheckbox": "Potwierdzam zastąpienie istniejącego pliku auth.json", "codexApply": "Zastosuj", - "bulkTabSingle": "Pojedynczy", - "bulkTabBulkAdd": "Dodaj zbiorczo", - "bulkAddFormatHint": "Jeden klucz na linię. Format: nazwa|apiKey lub po prostu apiKey (nazywany automatycznie według indeksu).", - "bulkValidateKeys": "Zweryfikuj każdy klucz przed zapisaniem (wolniej)", + "bulkTabSingle": "Pojedyncze", + "bulkTabBulkAdd": "Bulk Add", + "bulkAddFormatHint": "Jeden klucz w linii. Format: nazwa|apiKey lub samo apiKey (nazwane automatycznie wg indeksu).", + "bulkValidateKeys": "Waliduj każdy klucz przed zapisaniem (wolniejsze)", "bulkAddAllKeys": "Dodaj wszystkie klucze", - "bulkAddedCount": "{count, plural, one {# key added} other {# keys added}}", - "bulkFailedCount": "{count, plural, one {# failed} other {# failed}}", - "optional": "Opcjonalne", - "anthropicCompatibleName": "Kompatybilny z antropią", - "openaiCompatibleName": "Kompatybilny z OpenAI", - "failedImportModels": "Nie udało się zaimportować modeli", - "noModelsReturnedFromEndpoint": "Z punktu końcowego /models nie zwrócono żadnych modeli.", - "importingModelsProgress": "Importowanie {current} z {total} modeli...", - "foundModelsStartingImport": "Znaleziono {count} modeli. Rozpoczynam importowanie...", + "bulkAddedCount": "{count, plural, one {# dodany klucz} other {# dodanych kluczy}}", + "bulkFailedCount": "{count, plural, one {# nieudany} other {# nieudanych}}", + "optional": "Opcjonalnie", + "anthropicCompatibleName": "Anthropic Compatible", + "openaiCompatibleName": "OpenAI Compatible", + "compatibleDefaultModelLabel": "Domyślny model", + "compatibleDefaultModelHint": "Wprowadź ID model dokładnie tak, jak oczekuje tego kompatybilny endpoint. Ten model zostanie zapisany jako domyślny dla połączenia.", + "failedImportModels": "Nie udało się zaimportować models", + "noModelsReturnedFromEndpoint": "Brak zwróconych models z endpoint /models.", + "importingModelsProgress": "Importowanie {current} z {total} models...", + "foundModelsStartingImport": "Znaleziono {count} models. Rozpoczynanie importu...", "importingModelById": "Importowanie {modelId}...", - "importSuccessCount": "Pomyślnie zaimportowano {count, plural, one {# model} other {# models}}!", - "noNewModelsAddedExisting": "Nie dodano żadnych nowych modeli (wszystkie już istnieją).", - "importDoneCount": "✓ Gotowe! {count, plural, one {# model imported.} other {# models imported.}}", + "importSuccessCount": "Pomyślnie zaimportowano {count, plural, one {# model} other {# modeli}}!", + "noNewModelsAddedExisting": "Nie dodano nowych models (wszystkie już istnieją).", + "importDoneCount": "✓ Gotowe! {count, plural, one {Zaimportowano # model.} other {Zaimportowano # modeli.}}", "unexpectedErrorOccurred": "Wystąpił nieoczekiwany błąd", - "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", - "messagesPath": "wiadomości", - "responsesPath": "odpowiedzi", - "chatCompletionsPath": "czat/uzupełnienia", + "connectionCountLabel": "{count, plural, one {# połączenie} other {# połączeń}}", + "messagesPath": "messages", + "responsesPath": "responses", + "chatCompletionsPath": "chat/completions", "add": "Dodaj", "edit": "Edytuj", "delete": "Usuń", - "anthropic": "Antropiczny", + "anthropic": "Anthropic", "openai": "OpenAI", "singleConnectionPerCompatible": "Dozwolone jest tylko jedno połączenie na kompatybilny węzeł. Dodaj kolejny węzeł, jeśli potrzebujesz więcej połączeń.", "connections": "Połączenia", - "providerProxyTitleConfigured": "Serwer proxy dostawcy: {host}", - "configured": "skonfigurowany", - "providerProxyConfigureHint": "Skonfiguruj serwer proxy dla wszystkich połączeń tego dostawcy", - "providerProxy": "Pełnomocnik dostawcy", - "repairEnv": "Repair env", - "repairEnvWorking": "Repairing...", - "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.", - "repairEnvSuccess": "OAuth defaults restored", - "repairEnvFailed": "Failed to repair .env", - "noConnectionsYet": "Nie ma jeszcze żadnych połączeń", - "addFirstConnectionHint": "Aby rozpocząć, dodaj swoje pierwsze połączenie", + "providerProxyTitleConfigured": "Proxy dla provider: {host}", + "configured": "skonfigurowano", + "providerProxyConfigureHint": "Skonfiguruj proxy dla wszystkich połączeń tego provider", + "providerProxy": "Provider Proxy", + "repairEnv": "Napraw env", + "repairEnvWorking": "Naprawianie...", + "repairEnvHint": "Przywróć brakujące domyślne ustawienia OAuth do .env bez nadpisywania istniejących wartości.", + "repairEnvSuccess": "Przywrócono domyślne ustawienia OAuth", + "repairEnvFailed": "Nie udało się naprawić .env", + "noConnectionsYet": "Brak połączeń", + "addFirstConnectionHint": "Dodaj pierwsze połączenie, aby rozpocząć", "addConnection": "Dodaj połączenie", - "availableModels": "Dostępne modele", - "builtInModels": "Built-in models", - "builtInModelsHint": "Registry models for this provider. Use the pencil to set compatibility options.", + "availableModels": "Dostępne models", + "builtInModels": "Wbudowane models", + "builtInModelsHint": "Models z rejestru dla tego provider. Użyj ołówka, aby ustawić opcje kompatybilności.", "pageAutoRefresh": "Strona odświeży się automatycznie...", "statusDisabled": "wyłączone", - "statusConnected": "podłączony", - "statusRuntimeIssue": "problem z czasem wykonania", - "statusAuthFailed": "autoryzacja nie powiodła się", - "statusRateLimited": "stawka ograniczona", + "statusConnected": "połączone", + "statusRuntimeIssue": "problem ze środowiskiem uruchomieniowym", + "statusAuthFailed": "błąd autoryzacji", + "statusRateLimited": "rate limited", "statusNetworkIssue": "problem z siecią", - "statusTestUnsupported": "test nieobsługiwany", + "statusTestUnsupported": "test niewspierany", "statusUnavailable": "niedostępne", - "statusFailed": "nie powiodło się", + "statusFailed": "niepowodzenie", "statusError": "błąd", "oauthAccount": "Konto OAuth", - "errorTypeRuntime": "Lokalny czas wykonania", - "errorTypeUpstreamAuth": "Autoryzacja nadrzędna", - "errorTypeMissingCredential": "Brakujące poświadczenie", - "errorTypeRefreshFailed": "Odświeżanie nie powiodło się", + "errorTypeRuntime": "Local runtime", + "errorTypeUpstreamAuth": "Upstream auth", + "errorTypeMissingCredential": "Brakujące dane uwierzytelniające", + "errorTypeRefreshFailed": "Odświeżenie nie powiodło się", "errorTypeTokenExpired": "Token wygasł", - "errorTypeRateLimited": "Cena ograniczona", + "errorTypeRateLimited": "Rate limited", "errorTypeUpstreamUnavailable": "Upstream niedostępny", "errorTypeNetworkError": "Błąd sieci", - "errorTypeTestUnsupported": "Test nieobsługiwany", - "errorTypeUpstreamError": "Błąd w górę", - "errorTypeCreditsExhausted": "__MISSING__:No credits", - "errorTypeBanned": "__MISSING__:403 Banned", - "proxySourceGlobal": "Globalny", - "proxySourceProvider": "Dostawca", - "proxySourceKey": "Klucz", - "proxyConfiguredBySource": "Pełnomocnik ({source}): {host}", - "proxyOn": "__MISSING__:Proxy On", - "proxyOff": "__MISSING__:Direct (bypass proxy)", - "proxyEnabledTitle": "__MISSING__:Proxy is enabled for this connection", - "proxyDisabledTitle": "__MISSING__:Direct connection — bypasses every proxy (including the global proxy) for this connection", - "perKeyProxyOn": "__MISSING__:Per-key", - "perKeyProxyOff": "__MISSING__:Connection", - "perKeyProxyEnabledTitle": "__MISSING__:Per-key proxy assignment enabled for this provider", - "perKeyProxyDisabledTitle": "__MISSING__:Per-key proxy assignment disabled for this provider", - "autoPriority": "Automatycznie: {priority}", - "proxy": "Pełnomocnik", - "retestAuthentication": "Przetestuj ponownie uwierzytelnianie", - "retest": "Przetestuj ponownie", + "errorTypeTestUnsupported": "Test niewspierany", + "errorTypeUpstreamError": "Błąd upstream", + "errorTypeCreditsExhausted": "Brak środków", + "errorTypeBanned": "403 Banned", + "proxySourceGlobal": "Global", + "proxySourceProvider": "Provider", + "proxySourceKey": "Key", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "proxyOn": "Proxy włączone", + "proxyOff": "Bezpośrednio (omiń proxy)", + "proxyEnabledTitle": "Proxy jest włączone dla tego połączenia", + "proxyDisabledTitle": "Połączenie bezpośrednie — omija każde proxy (w tym globalne proxy) dla tego połączenia", + "perKeyProxyOn": "Per-key", + "perKeyProxyOff": "Połączenie", + "perKeyProxyEnabledTitle": "Przypisywanie proxy per-key włączone dla tego provider", + "perKeyProxyDisabledTitle": "Przypisywanie proxy per-key wyłączone dla tego provider", + "autoPriority": "Auto: {priority}", + "proxy": "Proxy", + "retestAuthentication": "Ponownie przetestuj uwierzytelnianie", + "retest": "Testuj ponownie", "disableConnection": "Wyłącz połączenie", "enableConnection": "Włącz połączenie", "reauthenticateConnection": "Ponownie uwierzytelnij to połączenie", "proxyConfig": "Konfiguracja proxy", - "aliasExistsAlert": "Alias „{alias}” już istnieje. Użyj innego modelu lub edytuj istniejący alias.", - "aliasInputPlaceholder": "alias name", - "clickToSetAlias": "Click to set alias", - "clickToEditAlias": "Alias: {alias} (click to edit)", - "openRouterAnyModelHint": "OpenRouter obsługuje każdy model. Dodawaj modele i twórz aliasy, aby uzyskać szybki dostęp.", - "modelIdFromOpenRouter": "Identyfikator modelu (z OpenRouter)", - "openRouterModelPlaceholder": "antropiczny/claude-3-opus", - "customModels": "Modele niestandardowe", - "customModelsHint": "Dodaj identyfikatory modeli, których nie ma na liście domyślnej. Będą one dostępne do routingu.", - "normalizeToolCallIdLabel": "Normalize tool call IDs to 9 characters (e.g. Mistral)", - "preserveDeveloperRoleLabel": "Keep OpenAI Responses developer role (do not map to system)", - "compatAdjustmentsTitle": "Compatibility", - "compatButtonLabel": "Compatibility", + "aliasExistsAlert": "Alias \"{alias}\" już istnieje. Użyj innego model lub edytuj istniejący alias.", + "aliasInputPlaceholder": "nazwa aliasu", + "clickToSetAlias": "Kliknij, aby ustawić alias", + "clickToEditAlias": "Alias: {alias} (kliknij, aby edytować)", + "openRouterAnyModelHint": "OpenRouter wspiera dowolny model. Dodaj models i twórz aliasy dla szybkiego dostępu.", + "modelIdFromOpenRouter": "ID model (z OpenRouter)", + "openRouterModelPlaceholder": "anthropic/claude-3-opus", + "customModels": "Custom Models", + "customModelsHint": "Dodaj identyfikatory ID model, których nie ma na liście domyślnej. Będą one dostępne do routingu.", + "normalizeToolCallIdLabel": "Normalizuj identyfikatory tool call ID do 9 znaków (np. Mistral)", + "preserveDeveloperRoleLabel": "Zachowaj OpenAI Responses developer role (nie mapuj na system)", + "compatAdjustmentsTitle": "Kompatybilność", + "compatButtonLabel": "Kompatybilność", "compatToolIdShort": "Tool ID 9", "compatDeveloperShort": "Developer role", - "compatDoNotPreserveDeveloper": "Do not preserve developer role", + "compatDoNotPreserveDeveloper": "Nie zachowuj developer role", "compatBadgeNoPreserve": "No preserve", - "compatProtocolLabel": "Client request protocol", - "compatProtocolHint": "These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).", + "compatProtocolLabel": "Protokół żądania klienta", + "compatProtocolHint": "Te opcje mają zastosowanie, gdy OmniRoute wykryje ten kształt żądania (OpenAI Chat, Responses API lub Anthropic Messages).", "compatProtocolOpenAI": "OpenAI Chat Completions", "compatProtocolOpenAIResponses": "OpenAI Responses API", "compatProtocolClaude": "Anthropic Messages", - "targetFormatLabel": "__MISSING__:Target Format", - "targetFormatHint": "__MISSING__:Override the upstream wire format. Use 'Anthropic Messages' to route OpenAI-compatible providers (e.g. opencode-go) through the /v1/messages endpoint.", - "targetFormatAuto": "__MISSING__:Default (auto)", - "targetFormatGemini": "__MISSING__:Gemini", - "targetFormatAntigravity": "__MISSING__:Antigravity", - "contextWindowOverrideLabel": "__MISSING__:Context Window Override", - "contextWindowOverridePlaceholder": "__MISSING__:e.g. 131072", - "contextWindowOverrideHint": "__MISSING__:Manually set this model's real context window (tokens) when the provider misreports it. Wins over auto-detected/catalog values and prevents combo routing from dropping the model.", - "contextWindowOverrideInvalid": "__MISSING__:Context window override must be a positive whole number of tokens", - "compatUpstreamHeadersLabel": "Extra upstream headers", - "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", - "compatUpstreamHeaderName": "Header name", - "compatUpstreamHeaderValue": "Value", - "compatUpstreamAddRow": "Add header", - "compatUpstreamRemoveRow": "Remove row", - "compatBadgeUpstreamHeaders": "Headers", - "perModelQuotaLabel": "Per Model Quota Label", - "perModelQuotaDescription": "Per Model Quota Description", - "importFreeModelsOnlyLabel": "__MISSING__:Import only free models", - "importFreeModelsOnlyHint": "__MISSING__:When enabled, only this provider's free models are imported. Paid models are skipped.", - "perModelQuotaToggle": "Przełącz limit dla modelu", - "modelId": "Identyfikator modelu", + "targetFormatLabel": "Format docelowy", + "targetFormatHint": "Nadpisz format transmisji upstream. Użyj 'Anthropic Messages', aby kierować żądania do OpenAI-compatible providers (np. opencode-go) przez endpoint /v1/messages.", + "targetFormatAuto": "Domyślny (auto)", + "targetFormatGemini": "Gemini", + "targetFormatAntigravity": "Antigravity", + "contextWindowOverrideLabel": "Nadpisanie okna kontekstu (Context Window Override)", + "contextWindowOverridePlaceholder": "np. 131072", + "contextWindowOverrideHint": "Ręcznie ustaw rzeczywiste okno kontekstu tego model (tokens), gdy provider podaje błędne informacje. Wygrywa z automatycznie wykrytymi/katalogowymi wartościami i zapobiega odrzuceniu model przez routing combo.", + "contextWindowOverrideInvalid": "Nadpisanie okna kontekstu musi być dodatnią liczbą całkowitą tokens", + "visionCapableLabel": "Obsługa Vision", + "visionCapableHint": "Ręcznie oznacz ten model jako obsługujący Vision, gdy metadane wykrywania provider nie zgłaszają modalności wejściowej obrazu (częste w przypadku self-hosted/lokalnych backendów).", + "compatParamFiltersLabel": "Param Filters", + "compatBlockedParamsHint": "Zablokowane parametry (usuwane z żądań)", + "compatAllowedParamsHint": "Dozwolone parametry (dodawane ponownie po usunięciu)", + "paramFiltersSectionTitle": "Param Filters", + "paramFiltersSectionHint": "Usuń lub dodaj ponownie parametry żądania przed wysłaniem do tego provider. Używane w celu uniknięcia błędów 400 od providers, którzy odrzucają niektóre parametry (np. NVIDIA NIM odrzuca thinking).", + "paramFiltersBlockedLabel": "Zablokowane parametry", + "paramFiltersBlockedHint": "Te parametry są usuwane z wychodzących żądań (lista blokowanych).", + "paramFiltersAllowedLabel": "Dozwolone parametry", + "paramFiltersAllowedHint": "Te parametry są dodawane ponownie po usunięciu z listy blokowanych (tylko jeśli klient je wysłał).", + "paramFiltersAutoLearnLabel": "Automatyczna nauka na podstawie błędów 400", + "paramFiltersAutoLearnHint": "Po włączeniu, jeśli upstream zwróci błąd 400 z komunikatem \"Unsupported parameter: X\", parametr zostanie automatycznie dodany do listy blokowanych, a żądanie zostanie ponowione.", + "paramFiltersSaving": "Zapisywanie…", + "paramFiltersSaveChanges": "Zapisz zmiany", + "paramFiltersResetToDefault": "Przywróć domyślne", + "paramFiltersLoadError": "Nie udało się załadować konfiguracji filtrów parametrów: {error}", + "paramFiltersSaveSuccess": "Zapisano konfigurację filtrów parametrów", + "paramFiltersSaveError": "Nie udało się zapisać konfiguracji filtrów parametrów: {error}", + "paramFiltersResetSuccess": "Zresetowano konfigurację filtrów parametrów do domyślnych", + "paramFiltersResetError": "Nie udało się zresetować konfiguracji filtrów parametrów: {error}", + "interceptionSectionTitle": "Przechwytywanie narzędzi webowych", + "interceptionSectionHint": "Przekierowanie natywnych wywołań narzędzi web_search / web_fetch tego Providera przez własne endpointy wyszukiwania i pobierania OmniRoute, zamiast zezwalania Providerowi na ich natywne uruchamianie. Domyślnie wyłączone — dotychczasowe zachowanie pozostaje bez zmian.", + "interceptSearchLabel": "Przechwytywanie web_search", + "interceptSearchHint": "Przepisywanie natywnych wywołań narzędzi web_search do /v1/search w OmniRoute.", + "interceptFetchLabel": "Przechwytywanie web_fetch", + "interceptFetchHint": "Przepisywanie natywnych wywołań narzędzi web_fetch do /v1/web/fetch w OmniRoute.", + "interceptionLoadError": "Nie udało się załadować ustawień przechwytywania: {error}", + "interceptionSaveError": "Nie udało się zapisać ustawień przechwytywania: {error}", + "compatUpstreamHeadersLabel": "Dodatkowe nagłówki upstream", + "compatUpstreamHeadersHint": "Ustawienie o wysokich uprawnieniach — ten sam poziom zaufania, co edycja danych uwierzytelniających API dla provider; powinno być używane wyłącznie przez zaufanych administratorów. Scalane po dodaniu autoryzacji przez OmniRoute na podstawie klucza API dla provider. Jeśli niestandardowy nagłówek ma taką samą nazwę jak istniejący (np. Authorization), wprowadzona wartość w pełni zastępuje automatycznie wygenerowany nagłówek (w tym Bearer token) — upstream zobaczy tylko wpisaną wartość, a nie klucz z ustawień. Błędna konfiguracja może spowodować błąd 401 lub uszkodzenie autoryzacji upstream. Jeden wiersz na nagłówek (np. dodatkowe Authentication dla niektórych bramek). Najedź myszą lub kliknij pole, aby wyświetlić podgląd. Zapisuje się po utracie fokusu (blur), kliknięciu poza obszarem lub zamknięciu tego panelu.", + "compatUpstreamHeaderName": "Nazwa nagłówka", + "compatUpstreamHeaderValue": "Wartość", + "compatUpstreamAddRow": "Dodaj nagłówek", + "compatUpstreamRemoveRow": "Usuń wiersz", + "compatBadgeUpstreamHeaders": "Nagłówki", + "perModelQuotaLabel": "Quota na model", + "perModelQuotaDescription": "Gdy włączone, błędy 429/404 blokują tylko konkretny model, a nie całe połączenie. Używaj dla providers z rate limit na model (np. ModelScope).", + "importFreeModelsOnlyLabel": "Importuj tylko darmowe models", + "importFreeModelsOnlyHint": "Gdy włączone, importowane są tylko darmowe models tego provider. Płatne models są pomijane.", + "perModelQuotaToggle": "Przełącznik quota na model", + "modelId": "ID model", "customModelPlaceholder": "np. gpt-4.5-turbo", "loading": "Ładowanie...", - "removeCustomModel": "Usuń model niestandardowy", - "noCustomModels": "Nie dodano jeszcze żadnych modeli niestandardowych.", - "allSuggestedAliasesExist": "Wszystkie sugerowane aliasy już istnieją. Wybierz inny model lub usuń sprzeczne aliasy.", - "failedSaveCustomModel": "Nie udało się zapisać modelu niestandardowego", + "removeCustomModel": "Usuń niestandardowy model", + "noCustomModels": "Nie dodano jeszcze żadnych niestandardowych models.", + "allSuggestedAliasesExist": "Wszystkie sugerowane aliasy już istnieją. Wybierz inny model lub usuń konfliktowe aliasy.", + "failedSaveCustomModel": "Nie udało się zapisać niestandardowego model", "modelAddedSuccess": "Model {modelId} został pomyślnie dodany", - "failedAddModelTryAgain": "Nie udało się dodać modelu. Spróbuj ponownie.", - "failedSaveImportedModel": "Nie udało się zapisać zaimportowanego modelu w niestandardowej bazie danych", - "failedImportModelsTryAgain": "Nie udało się zaimportować modeli. Spróbuj ponownie.", - "failedRemoveModelFromDatabase": "Nie udało się usunąć modelu z bazy danych", + "failedAddModelTryAgain": "Nie udało się dodać model. Spróbuj ponownie.", + "failedSaveImportedModel": "Nie udało się zapisać zaimportowanego model do niestandardowej bazy danych", + "failedImportModelsTryAgain": "Nie udało się zaimportować models. Spróbuj ponownie.", + "failedRemoveModelFromDatabase": "Nie udało się usunąć model z bazy danych", "modelRemovedSuccess": "Model został pomyślnie usunięty", - "failedDeleteModelTryAgain": "Nie udało się usunąć modelu. Spróbuj ponownie.", - "compatibleModelsDescription": "Dodaj ręcznie modele kompatybilne z {type} lub zaimportuj je z punktu końcowego /models.", - "anthropicCompatibleModelPlaceholder": "klauzula-3-opus-20240229", + "failedDeleteModelTryAgain": "Nie udało się usunąć model. Spróbuj ponownie.", + "compatibleModelsDescription": "Dodaj ręcznie models kompatybilne z {type} lub zaimportuj je z endpoint /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", "openaiCompatibleModelPlaceholder": "gpt-4o", - "apiKeyValidationFailed": "Weryfikacja klucza API nie powiodła się. Sprawdź swój klucz i spróbuj ponownie.", - "addProviderApiKeyTitle": "Dodaj klucz API {provider}", - "checking": "Sprawdzam...", + "apiKeyValidationFailed": "Weryfikacja klucza API nie powiodła się. Sprawdź klucz i spróbuj ponownie.", + "addProviderApiKeyTitle": "Dodaj klucz API dla {provider}", + "checking": "Sprawdzanie...", "check": "Sprawdź", - "valid": "Ważne", - "invalid": "Nieprawidłowe", + "valid": "Poprawny", + "invalid": "Niepoprawny", "creating": "Tworzenie...", - "validationChecksAnthropicCompatible": "Walidacja sprawdza {provider} poprzez weryfikację klucza API.", - "validationChecksOpenAiCompatible": "Walidacja sprawdza {provider} poprzez /models na podstawowym adresie URL.", + "validationChecksAnthropicCompatible": "Weryfikacja sprawdza {provider} poprzez sprawdzenie klucza API.", + "validationChecksOpenAiCompatible": "Weryfikacja sprawdza {provider} przez /models pod bazowym URL.", "priorityLabel": "Priorytet", "saving": "Zapisywanie...", "save": "Zapisz", "editConnection": "Edytuj połączenie", "accountName": "Nazwa konta", - "email": "E-mail", - "healthCheckMinutes": "Kontrola stanu (min)", - "healthCheckHint": "Proaktywny interwał odświeżania tokenu. 0 = wyłączone.", - "deselectAllModels": "Deselect all", - "modelsActiveCount": "{active}/{total} active", - "noModelsMatch": "No models match \"{filter}\"", - "groupLabel": "Environment", - "groupPlaceholder": "e.g. eKaizen, Personal", + "email": "Email", + "healthCheckMinutes": "Health Check (min)", + "healthCheckHint": "Interwał proaktywnego odświeżania token. 0 = wyłączone.", + "deselectAllModels": "Odznacz wszystkie", + "modelsActiveCount": "{active}/{total} aktywnych", + "noModelsMatch": "Brak models pasujących do \"{filter}\"", + "groupLabel": "Środowisko", + "groupPlaceholder": "np. eKaizen, Osobiste", "failedTestConnection": "Nie udało się przetestować połączenia", - "failed": "Nie udało się", - "leaveBlankKeepCurrentApiKey": "Pozostaw puste, aby zachować bieżący klucz API.", - "editCompatibleTitle": "Edytuj {type} Kompatybilny", - "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.", + "failed": "Niepowodzenie", + "leaveBlankKeepCurrentApiKey": "Pozostaw puste, aby zachować obecny klucz API.", + "editCompatibleTitle": "Edytuj kompatybilne z {type}", + "compatibleBaseUrlHint": "Główny URL API kompatybilnego z {type}. Użyj Advanced Settings dla niestandardowych ścieżek endpoint.", "apiKeyForCheck": "Klucz API (do sprawdzenia)", - "testModelIdLabel": "__MISSING__:Model ID (optional)", - "testModelIdPlaceholder": "__MISSING__:e.g. my-model-id", - "testModelIdHint": "__MISSING__:If the provider lacks a /models endpoint, enter a model ID to validate via /chat/completions instead.", - "compatibleProdPlaceholder": "{type} Kompatybilny (Prod)", - "tokenRefreshed": "Token refreshed successfully", - "tokenRefreshFailed": "Token refresh failed", - "applyCodexAuthLocal": "Apply auth", - "exportCodexAuthFile": "Export auth", + "testModelIdLabel": "ID model (opcjonalnie)", + "testModelIdPlaceholder": "np. my-model-id", + "testModelIdHint": "Jeśli provider nie posiada endpoint /models, wprowadź ID model, aby dokonać weryfikacji przez /chat/completions.", + "compatibleProdPlaceholder": "{type} Compatible (Prod)", + "tokenRefreshed": "Pomyślnie odświeżono token", + "tokenRefreshFailed": "Odświeżenie token nie powiodło się", + "applyCodexAuthLocal": "Zastosuj autoryzację", + "exportCodexAuthFile": "Eksportuj autoryzację", "applyClaudeAuthLocal": "Zastosuj autoryzację", "exportClaudeAuthFile": "Eksportuj autoryzację", "importClaudeAuth": "Importuj autoryzację", - "claudeApplyModalTitle": "Zastosuj do lokalnego kodu Claude", + "claudeApplyModalTitle": "Zastosuj do lokalnego Claude Code", "claudeApplyTargetLabel": "Ścieżka docelowa", "claudeApplyBackupLabel": "Kopie zapasowe", "claudeApplyMcpHint": "Istniejący stan MCP OAuth zostanie zachowany.", - "claudeApplyWarning": "Zastąpi to istniejącą sekcję claudeAiOauth. Kontynuować?", - "claudeApplyConfirmCheckbox": "Potwierdzam, że chcę zastąpić istniejącą sekcję claudeAiOauth", + "claudeApplyWarning": "To zastąpi istniejącą sekcję claudeAiOauth. Kontynuować?", + "claudeApplyConfirmCheckbox": "Potwierdzam chęć zastąpienia istniejącej sekcji claudeAiOauth", "claudeApply": "Zastosuj", - "claudeAuthAppliedLocal": "Autoryzacja Claude'a zastosowana lokalnie", - "claudeAuthApplyFailed": "Nie udało się zastosować lokalnego uwierzytelnienia Claude", - "claudeAuthExported": "Wyeksportowano plik autoryzacyjny Claude", - "claudeAuthExportFailed": "Nie udało się wyeksportować pliku uwierzytelniającego Claude", - "claudeImportModalTitle": "Importuj autoryzację Claude'a", - "claudeImportTabSingle": "Pojedynczy", - "claudeImportTabBulk": "luzem", + "claudeAuthAppliedLocal": "Autoryzacja Claude została zastosowana lokalnie", + "claudeAuthApplyFailed": "Nie udało się zastosować autoryzacji Claude lokalnie", + "claudeAuthExported": "Plik autoryzacji Claude został wyeksportowany", + "claudeAuthExportFailed": "Nie udało się wyeksportować pliku autoryzacji Claude", + "claudeImportModalTitle": "Importuj autoryzację Claude", + "claudeImportTabSingle": "Pojedyncze", + "claudeImportTabBulk": "Masowe", "claudeImportTabUpload": "Prześlij plik", "claudeImportTabPaste": "Wklej JSON", - "claudeImportFileLabel": "Wybierz plik .credentials.json", + "claudeImportFileLabel": "Wybierz .credentials.json", "claudeImportPasteLabel": "Wklej zawartość JSON", - "claudeImportEmailLabel": "Adres e-mail konta", + "claudeImportEmailLabel": "Email konta", "claudeImportNameLabel": "Nazwa połączenia (opcjonalnie)", "claudeImportOverwriteLabel": "Zastąp istniejące połączenie, jeśli konto już istnieje", "claudeImportSubmit": "Importuj", "claudeImportSuccess": "Połączenie Claude zostało pomyślnie zaimportowane", - "claudeImportInvalidJson": "Nie można przeanalizować pliku jako JSON", + "claudeImportInvalidJson": "Nie udało się sparsować pliku jako JSON", "claudeImportInvalidShape": "Plik nie jest prawidłowym plikiem .credentials.json", - "claudeImportDuplicate": "Konto już istnieje — włącz opcję „Zastąp istniejące”, aby je zastąpić", - "claudeImportIdentityUnverified": "Bootstrap nie mógł zweryfikować konta. Włącz opcję „Zastąp istniejące” lub podaj adres e-mail.", - "claudeImportFailed": "Nie udało się zaimportować uwierzytelnienia Claude", + "claudeImportDuplicate": "Konto już istnieje — włącz \"Replace existing\", aby je nadpisać", + "claudeImportIdentityUnverified": "Bootstrap nie mógł zweryfikować konta. Włącz \"Replace existing\" lub podaj email.", + "claudeImportFailed": "Nie udało się zaimportować autoryzacji Claude", "claudeImportBulkModeUpload": "Prześlij pliki", "claudeImportBulkModePaste": "Wklej tablicę JSON", "claudeImportBulkModeZip": "Prześlij ZIP", - "claudeImportBulkUploadHint": "Upuść lub pobierz maksymalnie 50 plików .credentials.json (każdy po 256 KB, łącznie 10 MB).", + "claudeImportBulkUploadHint": "Przeciągnij lub wybierz do 50 plików .credentials.json (maks. 256KB każdy, łącznie 10MB).", "claudeImportBulkPasteHint": "Wklej tablicę obiektów: [{ json, name?, email? }...]", - "claudeImportBulkZipHint": "ZIP zawierający wpisy .json. Maks. 50 wpisów, 10 MB po rozpakowaniu.", - "claudeImportBulkSubmit": "Zaimportuj wszystko", - "claudeImportBulkSuccess": "Zaimportowano połączenia {count} Claude", + "claudeImportBulkZipHint": "Plik ZIP zawierający wpisy .json. Maks. 50 wpisów, 10MB po rozpakowaniu.", + "claudeImportBulkSubmit": "Importuj wszystkie", + "claudeImportBulkSuccess": "Zaimportowano {count} połączeń Claude", "claudeImportBulkFailed": "Nie udało się zaimportować niektórych wpisów", - "claudeImportBulkZipExtracting": "Wyodrębniam ZIP…", - "claudeImportBulkZipError": "Nie udało się wyodrębnić ZIP", - "geminiAuthAppliedLocal": "Autoryzacja Gemini stosowana lokalnie", - "geminiAuthApplyFailed": "Nie udało się zastosować lokalnego uwierzytelnienia Gemini", - "geminiAuthExported": "Wyeksportowano plik uwierzytelniający Gemini", - "geminiAuthExportFailed": "Nie udało się wyeksportować pliku uwierzytelniającego Gemini", + "claudeImportBulkZipExtracting": "Rozpakowywanie ZIP…", + "claudeImportBulkZipError": "Nie udało się rozpakować pliku ZIP", + "geminiAuthAppliedLocal": "Autoryzacja Gemini została zastosowana lokalnie", + "geminiAuthApplyFailed": "Nie udało się zastosować autoryzacji Gemini lokalnie", + "geminiAuthExported": "Plik autoryzacji Gemini został wyeksportowany", + "geminiAuthExportFailed": "Nie udało się wyeksportować pliku autoryzacji Gemini", "geminiImportModalTitle": "Importuj autoryzację Gemini", - "geminiImportTabSingle": "Pojedynczy", - "geminiImportTabBulk": "luzem", + "geminiImportTabSingle": "Pojedyncze", + "geminiImportTabBulk": "Masowe", "geminiImportTabUpload": "Prześlij plik", "geminiImportTabPaste": "Wklej JSON", - "geminiImportFileLabel": "Wybierz plik oauth_creds.json", + "geminiImportFileLabel": "Wybierz oauth_creds.json", "geminiImportPasteLabel": "Wklej zawartość JSON", - "geminiImportEmailLabel": "Adres e-mail konta", + "geminiImportEmailLabel": "Email konta", "geminiImportNameLabel": "Nazwa połączenia (opcjonalnie)", "geminiImportOverwriteLabel": "Zastąp istniejące połączenie, jeśli konto już istnieje", "geminiImportSubmit": "Importuj", "geminiImportSuccess": "Połączenie Gemini zostało pomyślnie zaimportowane", - "geminiImportInvalidJson": "Nie można przeanalizować pliku jako JSON", + "geminiImportInvalidJson": "Nie udało się sparsować pliku jako JSON", "geminiImportInvalidShape": "Plik nie jest prawidłowym plikiem oauth_creds.json", - "geminiImportDuplicate": "Konto już istnieje — włącz opcję „Zastąp istniejące”, aby je zastąpić", - "geminiImportIdentityUnverified": "Nie można zweryfikować tożsamości z id_token. Włącz opcję „Zastąp istniejące” lub podaj adres e-mail.", - "geminiImportFailed": "Nie udało się zaimportować uwierzytelnienia Gemini", + "geminiImportDuplicate": "Konto już istnieje — włącz \"Replace existing\", aby je nadpisać", + "geminiImportIdentityUnverified": "Nie udało się zweryfikować tożsamości na podstawie id_token. Włącz \"Replace existing\" lub podaj email.", + "geminiImportFailed": "Nie udało się zaimportować autoryzacji Gemini", "geminiImportBulkModeUpload": "Prześlij pliki", "geminiImportBulkModePaste": "Wklej tablicę JSON", "geminiImportBulkModeZip": "Prześlij ZIP", - "geminiImportBulkUploadHint": "Upuść lub pobierz maksymalnie 50 plików oauth_creds.json (każdy po 256 KB, łącznie 10 MB).", + "geminiImportBulkUploadHint": "Przeciągnij lub wybierz do 50 plików oauth_creds.json (maks. 256KB każdy, łącznie 10MB).", "geminiImportBulkPasteHint": "Wklej tablicę obiektów: [{ json, name?, email? }...]", - "geminiImportBulkZipHint": "ZIP zawierający wpisy oauth_creds.json. Maks. 50 wpisów, 10 MB po rozpakowaniu.", - "geminiImportBulkSubmit": "Zaimportuj wszystko", - "geminiImportBulkSuccess": "Zaimportowano połączenia {count} Gemini", + "geminiImportBulkZipHint": "Plik ZIP zawierający wpisy oauth_creds.json. Maks. 50 wpisów, 10MB po rozpakowaniu.", + "geminiImportBulkSubmit": "Importuj wszystkie", + "geminiImportBulkSuccess": "Zaimportowano {count} połączeń Gemini", "geminiImportBulkFailed": "Nie udało się zaimportować niektórych wpisów", - "geminiImportBulkZipExtracting": "Wyodrębniam ZIP…", - "geminiImportBulkZipError": "Nie udało się wyodrębnić ZIP", - "codexAuthAppliedLocal": "Codex auth.json applied locally", - "codexAuthApplyFailed": "Failed to apply Codex auth.json locally", - "codexAuthExported": "Codex auth.json exported", - "codexAuthExportFailed": "Failed to export Codex auth.json", - "codexCliGuideButton": "__MISSING__:Codex CLI Guide", - "codexCliGuideTitle": "__MISSING__:Codex CLI Guide", - "codexCliGuideLoading": "__MISSING__:Loading guide...", - "codexCliGuideLoadFailed": "__MISSING__:Could not load the guide.", - "codexExternalLinkButton": "__MISSING__:External Codex link", - "codexExternalLinkModalTitle": "__MISSING__:External Codex link", - "codexExternalLinkModalDescription": "__MISSING__:Share this single-use link with the person who will authenticate the Codex account. They open it in their own browser, complete the OpenAI login, and the connection is registered here. The link expires in 15 minutes.", - "codexExternalLinkGenerating": "__MISSING__:Generating link...", - "codexExternalLinkWaiting": "__MISSING__:Waiting for browser authentication. This window refreshes automatically.", - "codexExternalLinkCreateFailed": "__MISSING__:Failed to generate the link.", - "codexExternalLinkNetworkError": "__MISSING__:Could not contact the server.", - "codexExternalLinkConnected": "__MISSING__:Codex account connected through the external link.", - "codexExternalLinkExpired": "__MISSING__:The link expired before completion.", + "geminiImportBulkZipExtracting": "Rozpakowywanie ZIP…", + "geminiImportBulkZipError": "Nie udało się rozpakować pliku ZIP", + "codexAuthAppliedLocal": "Plik Codex auth.json został zastosowany lokalnie", + "codexAuthApplyFailed": "Nie udało się zastosować pliku Codex auth.json lokalnie", + "codexAuthExported": "Plik Codex auth.json został wyeksportowany", + "codexAuthExportFailed": "Nie udało się wyeksportować pliku Codex auth.json", + "codexCliGuideButton": "Codex CLI Guide", + "codexCliGuideTitle": "Codex CLI Guide", + "codexCliGuideLoading": "Ładowanie przewodnika...", + "codexCliGuideLoadFailed": "Nie udało się załadować przewodnika.", + "codexExternalLinkButton": "Zewnętrzny link Codex", + "codexExternalLinkModalTitle": "Zewnętrzny link Codex", + "codexExternalLinkModalDescription": "Udostępnij ten jednorazowy link osobie, która uwierzytelni konto Codex. Po otwarciu go w przeglądarce i zalogowaniu się do OpenAI, połączenie zostanie zarejestrowane tutaj. Link wygasa za 15 minut.", + "codexExternalLinkGenerating": "Generowanie linku...", + "codexExternalLinkWaiting": "Oczekiwanie na uwierzytelnienie w przeglądarce. To okno odświeży się automatycznie.", + "codexExternalLinkCreateFailed": "Nie udało się wygenerować linku.", + "codexExternalLinkNetworkError": "Nie udało się nawiązać połączenia z serwerem.", + "codexExternalLinkConnected": "Konto Codex zostało połączone za pomocą zewnętrznego linku.", + "codexExternalLinkExpired": "Link wygasł przed zakończeniem procesu.", "importCodexAuth": "Importuj autoryzację", - "codexImportModalTitle": "Importuj autoryzację Kodeksu", - "codexImportTabSingle": "Pojedynczy", - "codexImportTabBulk": "luzem", + "codexImportModalTitle": "Importuj autoryzację Codex", + "codexImportTabSingle": "Pojedyncze", + "codexImportTabBulk": "Masowe", "codexImportTabUpload": "Prześlij plik", "codexImportTabPaste": "Wklej JSON", - "codexImportFileLabel": "Wybierz plik auth.json", - "codexImportFileHint": "Wybierz plik auth.json wyeksportowany z Codexu lub z OmniRoute.", + "codexImportFileLabel": "Wybierz auth.json", + "codexImportFileHint": "Wybierz plik auth.json wyeksportowany z Codex lub z OmniRoute.", "codexImportPasteLabel": "Wklej zawartość JSON", - "codexImportEmailLabel": "Adres e-mail konta", - "codexImportEmailHint": "Automatycznie wykryte z pliku; edytować w razie potrzeby.", + "codexImportEmailLabel": "Email konta", + "codexImportEmailHint": "Wykryto automatycznie z pliku; edytuj w razie potrzeby.", "codexImportNameLabel": "Nazwa połączenia (opcjonalnie)", "codexImportOverwriteLabel": "Zastąp istniejące połączenie, jeśli konto już istnieje", "codexImportSubmit": "Importuj", - "codexImportSuccess": "Połączenie Kodeksu zostało pomyślnie zaimportowane", - "codexImportInvalidJson": "Nie można przeanalizować pliku jako JSON", - "codexImportInvalidShape": "Plik nie jest prawidłowym plikiem auth.json Codex", - "codexImportDuplicate": "Konto już istnieje — włącz opcję „Zastąp istniejące”, aby je zastąpić", - "codexImportFailed": "Nie udało się zaimportować uwierzytelnienia Codex", + "codexImportSuccess": "Połączenie Codex zostało pomyślnie zaimportowane", + "codexImportInvalidJson": "Nie udało się sparsować pliku jako JSON", + "codexImportInvalidShape": "Plik nie jest prawidłowym plikiem Codex auth.json", + "codexImportDuplicate": "Konto już istnieje — włącz \"Replace existing\", aby je nadpisać", + "codexImportFailed": "Nie udało się zaimportować autoryzacji Codex", "codexImportDetectedEmail": "Wykryto: {email}", - "codexImportNoEmailDetected": "W pliku nie wykryto adresu e-mail", + "codexImportNoEmailDetected": "Nie wykryto adresu email w pliku", "codexImportBulkModeUpload": "Prześlij pliki", "codexImportBulkModePaste": "Wklej listę", "codexImportBulkModeZip": "Archiwum ZIP", "codexImportBulkUploadHint": "Wybierz wiele plików .json lub przeciągnij i upuść", - "codexImportBulkPasteHint": "Tablica JSON [ {...}, {...} ] lub wiele JSON oddzielonych --- w osobnej linii", + "codexImportBulkPasteHint": "Tablica JSON [ {...}, {...} ] lub wiele obiektów JSON oddzielonych znakiem --- w nowej linii", "codexImportBulkZipHint": "Prześlij plik .zip zawierający pliki auth.json (maks. 50 plików, 10 MB)", - "codexImportBulkSubmit": "Zaimportuj konta {count}", - "codexImportBulkLimit": "Maksymalnie 50 plików na import", - "codexImportBulkSuccess": "{count} zaimportowano", + "codexImportBulkSubmit": "Importuj {count} kont", + "codexImportBulkLimit": "Maks. 50 plików na import", + "codexImportBulkSuccess": "Zaimportowano {count}", "codexImportBulkFailed": "{count} nie powiodło się", - "codexImportBulkZipExtracting": "Wyodrębniam ZIP…", + "codexImportBulkZipExtracting": "Wyodrębnianie ZIP…", "codexImportBulkZipError": "Nie udało się wyodrębnić ZIP", - "advancedSettings": "Advanced Settings", - "chatPathLabel": "Chat Endpoint Path", + "advancedSettings": "Ustawienia zaawansowane", + "chatPathLabel": "Ścieżka endpointu czatu", "chatPathPlaceholder": "/chat/completions", - "chatPathHint": "Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)", - "modelsPathLabel": "Models Endpoint Path", + "chatPathHint": "Niestandardowa ścieżka czatu dla providers z niestandardowymi API (np. /v4/chat/completions)", + "modelsPathLabel": "Ścieżka endpointu models", "modelsPathPlaceholder": "/models", - "modelsPathHint": "Custom models path for validation (e.g. /v4/models)", - "statusDeactivated": "Deactivated (Manual)", - "statusBanned": "Banned / Sandbox Violation", - "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted", - "showEmails": "Show all emails", - "hideEmails": "Hide all emails", + "modelsPathHint": "Niestandardowa ścieżka models do walidacji (np. /v4/models)", + "clientIdentityLabel": "Tożsamość klienta", + "clientIdentityHint": "Opcjonalnie. Dodaje nagłówki fingerprint klienta (np. User-Agent) pasujące do znanego CLI dla kompatybilnych bram, które ich oczekują.", + "statusDeactivated": "Dezaktywowany (Ręcznie)", + "statusBanned": "Zablokowany / Naruszenie Sandbox", + "statusCreditsExhausted": "Niewystarczające środki / Wyczerpany quota", + "showEmails": "Pokaż wszystkie adresy e-mail", + "hideEmails": "Ukryj wszystkie adresy e-mail", "a": "A", - "accountConcurrencyCapHint": "Account Concurrency Cap Hint", - "accountConcurrencyCapLabel": "Account Concurrency Cap Label", - "accountIdHint": "Account Id Hint", - "accountIdLabel": "Account Id Label", - "accountIdPlaceholder": "Account Id Placeholder", - "addAnotherApiKey": "Add another API key or paste multiple keys", - "addCcCompatible": "Add Cc Compatible", - "aggregatorsGateways": "Aggregators Gateways", - "enterpriseCloud": "Przedsiębiorstwo i chmura", - "apiFormatLabel": "Api Format Label", - "apiKeyOptionalHint": "Api Key Optional Hint", - "apiKeyOptionalLabel": "Api Key Optional Label", - "apiRegionChina": "Api Region China", - "apiRegionHint": "Api Region Hint", - "apiRegionInternational": "Api Region International", - "apiRegionLabel": "Api Region Label", - "apikey": "Apikey", + "accountConcurrencyCapHint": "Maksymalna liczba współbieżnych żądań, jaką może obsłużyć to połączenie/konto. Konta subskrypcyjne zazwyczaj pozwalają tylko na kilka (1–3) — przekroczenie limitu powoduje błędy 429 i cooldowny. Pozostaw puste dla wartości domyślnej.", + "accountConcurrencyCapLabel": "Limit współbieżności konta", + "accountIdHint": "Wymagane przez niektórych providers (np. Cloudflare Workers AI) wraz z tokenem API.", + "accountIdLabel": "Account ID", + "accountIdPlaceholder": "ID konta provider", + "addAnotherApiKey": "Dodaj kolejny klucz API lub wklej wiele kluczy", + "addCcCompatible": "Dodaj CC Compatible", + "aggregatorsGateways": "Agregatory i gateways", + "enterpriseCloud": "Enterprise i Cloud", + "apiFormatLabel": "Etykieta formatu API", + "apiKeyOptionalHint": "Wskazówka: klucz API opcjonalny", + "apiKeyOptionalLabel": "Klucz API opcjonalny", + "apiRegionChina": "Region API Chiny", + "apiRegionHint": "Wskazówka dotycząca regionu API", + "apiRegionInternational": "Międzynarodowy region API", + "apiRegionLabel": "Region API", + "apikey": "Klucz API", "audio": "Audio", - "audioProvidersHeading": "Audio Providers Heading", - "cloudAgentProviders": "Dostawcy agentów w chmurze", - "audioShortLabel": "Audio Short Label", - "azureOpenAiBaseUrlHint": "Azure Open Ai Base Url Hint", - "bailianBaseUrlHint": "Bailian Base Url Hint", - "claudeWebCookieHint": "Open claude.ai → DevTools → Application → Cookies → claude.ai, copy the 'sessionKey' value. Also need cf_clearance, __cf_bm, _cfuvid for Cloudflare.", + "audioProvidersHeading": "Nagłówek Audio Providers", + "cloudAgentProviders": "Cloud Agent Providers", + "audioShortLabel": "Audio", + "azureOpenAiBaseUrlHint": "Wskazówka dotycząca bazowego URL Azure OpenAI", + "bailianBaseUrlHint": "Wskazówka dotycząca bazowego URL Bailian", + "claudeWebCookieHint": "Otwórz claude.ai → DevTools → Application → Cookies → claude.ai, skopiuj wartość „sessionKey”. Wymagane są również cf_clearance, __cf_bm, _cfuvid dla Cloudflare.", "claudeWebCookiePlaceholder": "sessionKey=sk-ant-...", - "blackboxWebCookieHint": "Blackbox Web Cookie Hint", - "blackboxWebCookiePlaceholder": "Blackbox Web Cookie Placeholder", - "t3ChatWebCookieHint": "Otwórz t3.chat → DevTools → Aplikacja → Pamięć lokalna → https://t3.chat, skopiuj „convex-session-id”. Następnie otwórz DevTools → Network, skopiuj pełny nagłówek Cookie z dowolnego żądania czatu. Wklej obie wartości w polach poniżej.", - "t3ChatWebCookiePlaceholder": "wypukły-id-sesji=abc123...", - "blockClaudeExtraUsageDescription": "Block Claude Extra Usage Description", - "blockClaudeExtraUsageLabel": "Block Claude Extra Usage Label", - "disableCoolingDescription": "__MISSING__:Skip the transient cooldown so this connection stays eligible even after recoverable errors (terminal states like banned/expired still apply).", - "disableCoolingLabel": "__MISSING__:Disable cooldown for this connection", - "bulkPasteAdded": "{count, plural, one {1 key added} other {# keys added}}", - "bulkPasteDuplicatesIgnored": "{count, plural, one {1 duplicate skipped} other {# duplicates skipped}}", - "bulkPasteHint": "Paste one API key per line. Empty lines are ignored and duplicate keys are skipped.", - "ccCompatibleBaseUrlHint": "Cc Compatible Base Url Hint", - "ccCompatibleBaseUrlPlaceholder": "Cc Compatible Base Url Placeholder", - "ccCompatibleChatPathHint": "Cc Compatible Chat Path Hint", - "ccCompatibleContext1mDescription": "Cc Compatible Context1M Description", - "ccCompatibleContext1mLabel": "Cc Compatible Context1M Label", - "ccCompatibleRedactThinkingDescription": "Adds the redact-thinking beta header for CC Compatible upstreams that require hidden Claude thinking streams.", - "ccCompatibleRedactThinkingLabel": "Enable redact-thinking beta", - "ccCompatibleSummarizeThinkingDescription": "Adds `display: \"summarized\"` to CC Compatible thinking requests so supported Claude models stream visible thinking deltas.", - "ccCompatibleSummarizeThinkingLabel": "Enable summarized thinking display", - "ccCompatibleDetailsTitle": "Cc Compatible Details Title", - "ccCompatibleLabel": "Cc Compatible Label", - "ccCompatibleModelsDescription": "Cc Compatible Models Description", - "ccCompatibleNameHint": "Cc Compatible Name Hint", - "ccCompatibleNamePlaceholder": "Cc Compatible Name Placeholder", - "ccCompatiblePrefixHint": "Cc Compatible Prefix Hint", - "ccCompatiblePrefixPlaceholder": "Cc Compatible Prefix Placeholder", - "ccCompatibleValidationHint": "Cc Compatible Validation Hint", - "claudeExtraUsageShort": "Claude Extra Usage Short", - "claudeExtraUsageToggleTitle": "Claude Extra Usage Toggle Title", - "codex5hToggleTitle": "Codex5H Toggle Title", - "codexFastServiceTierDescription": "Use the priority service tier for Codex requests when available.", - "codexFastServiceTierLabel": "Codex fast service tier", - "codexWeeklyToggleTitle": "Codex Weekly Toggle Title", - "compatUpstreamHeaderNamePlaceholder": "Compat Upstream Header Name Placeholder", - "compatUpstreamHeaderValuePlaceholder": "Compat Upstream Header Value Placeholder", - "compatible": "Compatible", - "configuredCount": "Configured Count", - "consoleApiKeyOracleHint": "Console Api Key Oracle Hint", - "consoleApiKeyOracleLabel": "Console Api Key Oracle Label", - "consoleApiKeyOraclePlaceholder": "Console Api Key Oracle Placeholder", - "newApiUserIdLabel": "Identyfikator użytkownika New-API", + "blackboxWebCookieHint": "Wskazówka dotycząca ciasteczka sieciowego Blackbox", + "blackboxWebCookiePlaceholder": "Wpisz ciasteczko sieciowe Blackbox", + "t3ChatWebCookieHint": "Otwórz t3.chat → DevTools → Application → Local Storage → https://t3.chat, skopiuj „convex-session-id”. Następnie otwórz DevTools → Network, skopiuj pełny nagłówek Cookie z dowolnego żądania czatu. Wklej obie wartości w poniższe pola.", + "t3ChatWebCookiePlaceholder": "convex-session-id=abc123...", + "grokWebCookieHint": "Wskazówka dotycząca ciasteczka sieciowego Grok", + "blockClaudeExtraUsageDescription": "Ukryj dodatkowe wiersze użycia Claude zgłaszane przez niektórych providers, gdy duplikują one podstawowe rozliczanie token.", + "blockClaudeExtraUsageLabel": "Blokuj zduplikowane wiersze użycia Claude", + "disableCoolingDescription": "Pomiń tymczasowy cooldown, aby to połączenie pozostało kwalifikowalne nawet po błędach podlegających naprawie (stany terminalne, takie jak banned/expired, nadal obowiązują).", + "disableCoolingLabel": "Wyłącz cooldown dla tego połączenia", + "bulkPasteAdded": "{count, plural, one {Dodano 1 klucz} other {Dodano # kluczy}}", + "bulkPasteDuplicatesIgnored": "{count, plural, one {Pominięto 1 duplikat} other {Pominięto # duplikatów}}", + "bulkPasteHint": "Wklej jeden klucz API w wierszu. Puste linie są ignorowane, a zduplikowane klucze są pomijane.", + "ccCompatibleBaseUrlHint": "Bazowy URL dla przekaźnika tylko dla Claude Code. Nie dołączaj /messages.", + "ccCompatibleBaseUrlPlaceholder": "https://relay.example.com/v1", + "ccCompatibleChatPathHint": "Domyślnie ścieżka Messages API dla Claude Code. Zmień tylko wtedy, gdy przekaźnik dokumentuje inną ścieżkę.", + "ccCompatibleContext1mDescription": "Dodaje nagłówek beta context-1m, gdy wybrany model Claude go obsługuje.", + "ccCompatibleContext1mLabel": "Włącz 1M context beta", + "ccCompatibleRedactThinkingDescription": "Dodaje nagłówek beta redact-thinking dla upstreams CC Compatible, które wymagają ukrytych strumieni myślenia Claude.", + "ccCompatibleRedactThinkingLabel": "Włącz redact-thinking beta", + "ccCompatibleSummarizeThinkingDescription": "Dodaje `display: \"summarized\"` do żądań myślenia CC Compatible, aby obsługiwane models Claude przesyłały strumieniowo widoczne delty myślenia.", + "ccCompatibleSummarizeThinkingLabel": "Włącz wyświetlanie podsumowanego myślenia", + "ccCompatibleDetailsTitle": "Szczegóły CC-compatible relay", + "ccCompatibleLabel": "CC Compatible", + "ccCompatibleModelsDescription": "CC-compatible relays nie udostępniają listy models. Dodaj model IDs Claude, które akceptuje ten relay.", + "ccCompatibleNameHint": "Nazwa wyświetlana dla tego przekaźnika tylko dla Claude Code.", + "ccCompatibleNamePlaceholder": "CC Relay Production", + "ccCompatiblePrefixHint": "Używane w aliasach models, takich jak prefix/model-id.", + "ccCompatiblePrefixPlaceholder": "cc", + "ccCompatibleValidationHint": "Używaj tego provider tylko dla relays, które obsługują wyłącznie klientów Claude Code. OmniRoute przepisuje każde przychodzące żądanie na format zgodny z Claude Code, aby te relays mogły je zaakceptować. Jeśli chcesz używać tylko Claude Code CLI lub nie masz pewności, co oznacza ten typ przekaźnika, użyj zamiast tego zwykłego provider kompatybilnego z Anthropic.", + "claudeExtraUsageShort": "Dodatkowe użycie", + "claudeExtraUsageToggleTitle": "Blokuj dodatkowe rozliczanie użycia Claude dla tego połączenia", + "codex5hToggleTitle": "Śledź 5-godzinny quota Codex dla tego połączenia", + "codexFastServiceTierDescription": "Użyj priorytetowej klasy usług (tier) dla żądań Codex, jeśli jest dostępna.", + "codexFastServiceTierLabel": "Szybka klasa usług (tier) Codex", + "codexWeeklyToggleTitle": "Śledź tygodniowy quota Codex dla tego połączenia", + "compatUpstreamHeaderNamePlaceholder": "Nazwa nagłówka kompatybilności upstream", + "compatUpstreamHeaderValuePlaceholder": "Wartość nagłówka kompatybilności upstream", + "compatible": "Kompatybilny", + "configuredCount": "Skonfigurowana liczba", + "consoleApiKeyOracleHint": "Wskazówka dotycząca Oracle klucza API konsoli", + "consoleApiKeyOracleLabel": "Etykieta Oracle klucza API konsoli", + "consoleApiKeyOraclePlaceholder": "Symbol zastępczy Oracle klucza API konsoli", + "newApiUserIdLabel": "ID użytkownika New-API", "newApiUserIdPlaceholder": "np. 12345", - "newApiUserIdHint": "Wartość nagłówka New-Api-User AgentRouter, używana razem z kluczem API konsoli do pobierania salda limitu.", - "cpaModeDisabledTitle": "Cpa Mode Disabled Title", - "cpaModeEnabledTitle": "Cpa Mode Enabled Title", - "customUserAgentHint": "Custom User Agent Hint", - "customUserAgentLabel": "Custom User Agent Label", - "databricksBaseUrlHint": "Databricks Base Url Hint", - "defaultThinkingStrengthHint": "Used when a request does not specify reasoning effort.", - "defaultThinkingStrengthLabel": "Default thinking strength", - "deleteAllExtraApiKeys": "Delete all", - "excludedModelsHint": "Excluded Models Hint", - "excludedModelsLabel": "Excluded Models Label", - "excludedModelsPlaceholder": "Excluded Models Placeholder", - "expirationBannerExpired": "Expiration Banner Expired", - "expirationBannerExpiredDesc": "Expiration Banner Expired Desc", - "expirationBannerExpiringSoon": "Expiration Banner Expiring Soon", - "expirationBannerExpiringSoonDesc": "Expiration Banner Expiring Soon Desc", - "extraApiKeyMasked": "Key {index}: {prefix}••••{suffix}", - "extraApiKeysHint": "Extra Api Keys Hint", - "extraApiKeysLabel": "Extra Api Keys Label", - "apiKeyHealthLabel": "API Key Health", - "apiKeyStatusActive": "Active", - "apiKeyStatusWarning": "Warning ({count} failures)", - "apiKeyStatusInvalid": "Invalid", - "primaryKey": "Primary Key", - "apiKeyInvalidAlert": "{count} API key(s) marked as invalid due to authentication failures in connections: {connections}. They will be skipped in rotation. Click to review.", - "apiKeyInvalidAlertTitle": "API Key Health Alert", - "apiKeyWarningAlert": "{count} API key(s) in warning state due to elevated failure rate in connections: {connections}. Review to prevent rotation issues.", - "apiKeyWarningAlertTitle": "API Key Warning", - "googlePseInfo": "Google Pse Info", - "antigravityProjectIdHint": "Opcjonalne zastąpienie żądań kodu chmury antygrawitacyjnej. Pozostaw puste, aby użyć projektu wykrytego podczas Google OAuth.", - "antigravityClientProfileLabel": "__MISSING__:Client profile", - "antigravityClientProfileHint": "__MISSING__:Choose which Antigravity client identity OmniRoute presents to the API.", - "antigravityClientProfileIde": "__MISSING__:IDE", - "antigravityClientProfileHarness": "__MISSING__:Harness / CLI", - "codexFastTierActiveChip": "__MISSING__:Codex Fast tier is active", - "tierFast": "__MISSING__:Fast", - "antigravityProjectIdLabel": "Identyfikator projektu Google Cloud", - "antigravityProjectIdPlaceholder": "identyfikator mojego-gcp-projektu", - "grokWebCookieHint": "Grok Web Cookie Hint", - "grokWebCookiePlaceholder": "Grok Web Cookie Placeholder", - "herokuBaseUrlHint": "Heroku Base Url Hint", - "hideEmail": "Hide Email", + "newApiUserIdHint": "Wartość nagłówka AgentRouter New-Api-User, używana wraz z konsolowym kluczem API do pobierania salda quota.", + "cpaModeDisabledTitle": "Tryb zgodności CLIProxyAPI jest wyłączony", + "cpaModeEnabledTitle": "Tryb zgodności CLIProxyAPI jest włączony", + "customUserAgentHint": "Wskazówka dotycząca niestandardowego User Agent", + "customUserAgentLabel": "Niestandardowy User Agent", + "databricksBaseUrlHint": "Wskazówka dotycząca bazowego URL Databricks", + "defaultThinkingStrengthHint": "Używane, gdy żądanie nie określa wysiłku rozumowania.", + "defaultThinkingStrengthLabel": "Domyślna siła myślenia", + "deleteAllExtraApiKeys": "Usuń wszystko", + "excludedModelsHint": "Wskazówka dotycząca wykluczonych models", + "excludedModelsLabel": "Wykluczone models", + "excludedModelsPlaceholder": "Wpisz wykluczone models", + "expirationBannerExpired": "Baner wygaśnięcia: wygasł", + "expirationBannerExpiredDesc": "Opis baneru wygaśnięcia: wygasł", + "expirationBannerExpiringSoon": "Baner wygaśnięcia: wkrótce wygaśnie", + "expirationBannerExpiringSoonDesc": "Opis baneru wygaśnięcia: wkrótce wygaśnie", + "extraApiKeyMasked": "Klucz {index}: {prefix}••••{suffix}", + "extraApiKeysHint": "Wskazówka dotycząca dodatkowych kluczy API", + "extraApiKeysLabel": "Dodatkowe klucze API", + "apiKeyHealthLabel": "Stan klucza API", + "apiKeyStatusActive": "Aktywny", + "apiKeyStatusWarning": "Ostrzeżenie ({count} niepowodzeń)", + "apiKeyStatusInvalid": "Nieprawidłowy", + "primaryKey": "Klucz główny", + "apiKeyInvalidAlert": "{count} klucz(y) API oznaczono jako nieprawidłowe z powodu błędów uwierzytelniania w połączeniach: {connections}. Zostaną one pominięte w rotacji. Kliknij, aby przejrzeć.", + "apiKeyInvalidAlertTitle": "Alert stanu klucza API", + "apiKeyWarningAlert": "{count} klucz(y) API w stanie ostrzeżenia z powodu podwyższonego wskaźnika niepowodzeń w połączeniach: {connections}. Przejrzyj je, aby uniknąć problemów z rotacją.", + "apiKeyWarningAlertTitle": "Ostrzeżenie dotyczące klucza API", + "googlePseInfo": "Informacje Google PSE", + "antigravityProjectIdHint": "Opcjonalne nadpisanie dla żądań Antigravity Cloud Code. Pozostaw puste, aby użyć projektu wykrytego podczas Google OAuth.", + "antigravityClientProfileLabel": "Profil klienta", + "antigravityClientProfileHint": "Wybierz, którą tożsamość klienta Antigravity OmniRoute ma prezentować w API.", + "antigravityClientProfileIde": "IDE", + "antigravityClientProfileHarness": "Harness / CLI", + "codexFastTierActiveChip": "Klasa usług (tier) Codex Fast jest aktywna", + "tierFast": "Fast", + "antigravityProjectIdLabel": "Google Cloud Project ID", + "antigravityProjectIdPlaceholder": "my-gcp-project-id", + "grokWebCookiePlaceholder": "Wpisz ciasteczko sieciowe Grok", + "herokuBaseUrlHint": "Wskazówka dotycząca bazowego URL Heroku", + "hideEmail": "Ukryj adres e-mail", "imageProviders": "Image Providers", "videoProviders": "Generowanie wideo", - "embeddingRerankProviders": "Osadzania i zmiana rankingu", - "imagesShortLabel": "Images Short Label", - "llmProviders": "Llm Providers", - "localProviderApiKeyOptionalHint": "Local Provider Api Key Optional Hint", - "localProviderBaseUrlHint": "Local Provider Base Url Hint", + "embeddingRerankProviders": "Embeddings i Rerank", + "imagesShortLabel": "Obrazy", + "llmProviders": "LLM Providers", + "localProviderApiKeyOptionalHint": "Wskazówka: klucz API dla lokalnego provider jest opcjonalny", + "localProviderBaseUrlHint": "Wskazówka dotycząca bazowego URL lokalnego provider", "localProviders": "Local Providers", - "maxConcurrentWholeNumberError": "Max Concurrent Whole Number Error", - "museSparkWebCookieHint": "Muse Spark Web Cookie Hint", - "museSparkWebCookiePlaceholder": "Muse Spark Web Cookie Placeholder", - "oauth": "Oauth", - "openCliTools": "Open Cli Tools", - "openSettings": "Open Settings", - "openaiResponsesStoreDescription": "Allow compatible Responses API requests to preserve stored response state.", + "maxConcurrentWholeNumberError": "Błąd: maksymalna współbieżność musi być liczbą całkowitą", + "m365TierLabel": "Klasa usług (tier) Copilot", + "m365TierHint": "Wybierz obszar (surface) Microsoft 365 Copilot, którego ma używać to połączenie. Individual to domyślny konsumencki BizChat; Education oraz Enterprise (work) wybierają obszary swoich dzierżaw (tenants).", + "m365TierIndividualOption": "Individual (domyślny)", + "m365TierEduOption": "Education", + "m365TierEnterpriseOption": "Enterprise / Work", + "museSparkWebCookieHint": "Wskazówka dotycząca ciasteczka sieciowego Muse Spark", + "museSparkWebCookiePlaceholder": "Wpisz ciasteczko sieciowe Muse Spark", + "oauth": "OAuth", + "openCliTools": "Otwórz narzędzia CLI", + "openSettings": "Otwórz ustawienia", + "openaiResponsesStoreDescription": "Zezwalaj kompatybilnym żądaniom Responses API na zachowanie zapisanego stanu odpowiedzi.", "openaiResponsesStoreLabel": "OpenAI Responses store", - "perplexitySearchSharedKeyInfo": "Perplexity Search Shared Key Info", - "perplexityWebCookieHint": "Perplexity Web Cookie Hint", - "perplexityWebCookiePlaceholder": "Perplexity Web Cookie Placeholder", - "personalAccessTokenLabel": "Personal Access Token Label", - "qoderPatHint": "Qoder Pat Hint", - "qoderPatPlaceholder": "Qoder Pat Placeholder", - "rateLimitOverridesSection": "__MISSING__:Rate Limit Overrides", - "rateLimitOverridesMaxConcurrentHint": "__MISSING__:Max concurrent requests override for this connection. Overrides the account-level cap.", - "rateLimitOverridesMaxConcurrentLabel": "__MISSING__:Max Concurrent (Rate Limit)", - "rateLimitOverridesMinTimeHint": "__MISSING__:Minimum time (ms) between requests. Overrides the default rate limiter delay.", - "rateLimitOverridesMinTimeLabel": "__MISSING__:Min Interval (ms)", - "rateLimitOverridesRpmHint": "__MISSING__:Max requests per minute for this connection. Overrides the provider default.", - "rateLimitOverridesRpmLabel": "__MISSING__:RPM (Requests/min)", - "rateLimitOverridesTpdHint": "__MISSING__:Max tokens per day for this connection. Overrides the provider default.", - "rateLimitOverridesTpdLabel": "__MISSING__:TPD (Tokens/day)", - "rateLimitOverridesTpmHint": "__MISSING__:Max tokens per minute for this connection. Overrides the provider default.", - "rateLimitOverridesTpmLabel": "__MISSING__:TPM (Tokens/min)", - "refreshOauthTokenTitle": "Refresh Oauth Token Title", - "regionHint": "Region Hint", - "regionLabel": "Region Label", - "removeThisKey": "Remove This Key", - "routingTagsHint": "Routing Tags Hint", - "routingTagsLabel": "Routing Tags Label", - "routingTagsPlaceholder": "Routing Tags Placeholder", - "search": "Search", - "searchEngineIdHint": "Search Engine Id Hint", - "searchEngineIdLabel": "Search Engine Id Label", - "searchEngineIdRequired": "Search Engine Id Required", - "searchProvider": "Search Provider", - "searchProviderDesc": "Search Provider Desc", - "searchProviders": "Wyszukaj dostawców...", - "searchByModel": "__MISSING__:Search by model…", - "searchProvidersHeading": "Search Providers Heading", - "searxngBaseUrlHint": "Searxng Base Url Hint", - "searxngInfo": "Searxng Info", - "sessionCookieLabel": "Session Cookie Label", - "showEmail": "Show Email", - "snowflakeBaseUrlHint": "Snowflake Base Url Hint", - "supportedEndpointAudio": "Supported Endpoint Audio", - "supportedEndpointChat": "Supported Endpoint Chat", - "supportedEndpointEmbeddings": "Supported Endpoint Embeddings", - "supportedEndpointImages": "Supported Endpoint Images", - "supportedEndpointsLabel": "Supported Endpoints Label", - "tagGroupHint": "Tag Group Hint", - "tagGroupLabel": "Tag Group Label", - "tagGroupPlaceholder": "Tag Group Placeholder", - "testModel": "Test Model", - "testingModel": "Testing Model", - "toggleOffShort": "Toggle Off Short", - "toggleOnShort": "Toggle On Short", - "tokenExpiredBadge": "Token Expired Badge", - "tokenExpiredTitle": "Token Expired Title", - "tokenExpiresSoonTitle": "Token Expires Soon Title", - "tokenShort": "Token Short", - "totalKeysRotating": "{count, plural, one {1 key rotating} other {# keys rotating}}", - "unhideModel": "Unhide Model", + "perplexitySearchSharedKeyInfo": "Informacje o udostępnionym kluczu wyszukiwania Perplexity Search", + "perplexityWebCookieHint": "Wskazówka dotycząca ciasteczka sieciowego Perplexity", + "perplexityWebCookiePlaceholder": "Wpisz ciasteczko sieciowe Perplexity", + "personalAccessTokenLabel": "Osobisty token dostępu", + "qoderPatHint": "Wklej osobisty token dostępu (PAT) Qoder. Wygeneruj go w lokalizacji Qoder → Settings → Personal Access Tokens.", + "qoderPatPlaceholder": "Osobisty token dostępu Qoder", + "rateLimitOverridesSection": "Nadpisania limitów szybkości (rate limit)", + "rateLimitOverridesMaxConcurrentHint": "Nadpisanie maksymalnej współbieżności żądań dla tego połączenia. Nadpisuje limit na poziomie konta.", + "rateLimitOverridesMaxConcurrentLabel": "Maks. współbieżność (rate limit)", + "rateLimitOverridesMinTimeHint": "Minimalny czas (ms) między żądaniami. Nadpisuje domyślne opóźnienie rate limiter.", + "rateLimitOverridesMinTimeLabel": "Min. odstęp (ms)", + "rateLimitOverridesRpmHint": "Maksymalna liczba żądań na minutę dla tego połączenia. Nadpisuje wartość domyślną provider.", + "rateLimitOverridesRpmLabel": "RPM (żądania/min)", + "rateLimitOverridesTpdHint": "Maksymalna liczba tokens na dzień dla tego połączenia. Nadpisuje wartość domyślną provider.", + "rateLimitOverridesTpdLabel": "TPD (tokens/dzień)", + "rateLimitOverridesTpmHint": "Maksymalna liczba tokens na minutę dla tego połączenia. Nadpisuje wartość domyślną provider.", + "rateLimitOverridesTpmLabel": "TPM (tokens/min)", + "refreshOauthTokenTitle": "Odśwież token OAuth", + "regionHint": "Wskazówka dotycząca regionu", + "regionLabel": "Region", + "removeThisKey": "Usuń ten klucz", + "routingTagsHint": "Wskazówka dotycząca tagów routingu", + "routingTagsLabel": "Tagi routingu", + "routingTagsPlaceholder": "Wpisz tagi routingu", + "search": "Szukaj", + "searchEngineIdHint": "Wskazówka ID silnika wyszukiwania", + "searchEngineIdLabel": "Etykieta ID silnika wyszukiwania", + "searchEngineIdRequired": "Wymagane ID silnika wyszukiwania", + "searchProvider": "Provider wyszukiwania", + "searchProviderDesc": "Opis provider wyszukiwania", + "searchProviders": "Providers wyszukiwania", + "searchByModel": "Szukaj po model…", + "searchProvidersHeading": "Nagłówek wyszukiwania Providers", + "searxngBaseUrlHint": "Wskazówka bazowego URL Searxng", + "searxngInfo": "Informacje o Searxng", + "sessionCookieLabel": "Etykieta cookie sesji", + "showEmail": "Pokaż e-mail", + "snowflakeBaseUrlHint": "Wskazówka bazowego URL Snowflake", + "supportedEndpointAudio": "Audio", + "supportedEndpointChat": "Chat", + "supportedEndpointEmbeddings": "Embeddings", + "supportedEndpointImages": "Images", + "supportedEndpointsLabel": "Obsługiwane endpoints", + "tagGroupHint": "Wskazówka grupy tagów", + "tagGroupLabel": "Etykieta grupy tagów", + "tagGroupPlaceholder": "Placeholder grupy tagów", + "testModel": "Testuj model", + "testingModel": "Testowanie model", + "toggleOffShort": "Wył.", + "toggleOnShort": "Wł.", + "tokenExpiredBadge": "Etykieta wygasłego token", + "tokenExpiredTitle": "Tytuł wygasłego token", + "tokenExpiresSoonTitle": "Tytuł - token wkrótce wygaśnie", + "tokenShort": "Token", + "totalKeysRotating": "{count, plural, one {1 rotujący klucz} other {# rotujących kluczy}}", + "unhideModel": "Pokaż model", "upstreamProxyProviders": "Upstream Proxy Providers", - "validationModelIdHint": "Validation Model Id Hint", - "validationModelIdLabel": "Validation Model Id Label", - "validationModelIdPlaceholder": "Validation Model Id Placeholder", - "vertexServiceAccountPlaceholder": "Paste your Service Account JSON ({\"type\":\"service_account\",\"project_id\":\"…\",\"client_email\":\"…\",\"private_key\":\"…\"}) or an OAuth access_token", + "validationModelIdHint": "Model używany do weryfikacji klucza API. Pozostaw puste, aby użyć pierwszego dostępnego model dla provider.", + "validationModelIdLabel": "Model weryfikacyjny", + "validationModelIdPlaceholder": "np. meta-llama/llama-3.1-8b-instruct", + "vertexServiceAccountPlaceholder": "Wklej Service Account JSON ({\"type\":\"service_account\",\"project_id\":\"…\",\"client_email\":\"…\",\"private_key\":\"…\"}) lub OAuth access_token", "webCookieProviders": "Web Cookie Providers", - "weeklyShort": "Weekly Short", - "xiaomiMimoBaseUrlHint": "Xiaomi Mimo Base Url Hint", - "zedImportButton": "Zed Import Button", - "zedImportFailed": "Zed Import Failed", - "zedImportHint": "Zed Import Hint", - "zedImportNetworkError": "Zed Import Network Error", - "zedImportNone": "Zed Import None", - "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing", - "freeTierProviders": "Dostawcy bezpłatnego poziomu", - "freeTierLabel": "Dostępny poziom bezpłatny", - "freeTierProvidersDesc": "Dostawcy z bezpłatnymi poziomami — niektórzy wymagają rejestracji klucza API, inni w ogóle nie potrzebują poświadczeń.", - "providerSummaryAll": "Razem", - "ideProviders": "Dostawcy IDE", - "ideProvidersDesc": "Redaktorzy z wbudowaną subskrypcją AI. Użyj strony dostawcy, aby zaimportować poświadczenia bezpośrednio z pęku kluczy IDE.", - "noIdeProviders": "Żaden dostawca IDE nie pasuje do bieżących filtrów.", - "providerDetailFastTierTooltip": "Domyślnie zastosuj warstwę Codex Fast do wszystkich połączeń Codex", - "providerDetailFastDefaultLabel": "Szybkie ustawienie domyślne", + "weeklyShort": "Tygodniowo", + "xiaomiMimoBaseUrlHint": "Wskazówka bazowego URL Xiaomi Mimo", + "zedImportButton": "Przycisk importu Zed", + "zedImportFailed": "Import Zed nie powiódł się", + "zedImportHint": "Wskazówka importu Zed", + "zedImportNetworkError": "Błąd sieci przy imporcie Zed", + "zedImportNone": "Brak importu Zed", + "zedImportSuccess": "Import Zed zakończony sukcesem", + "zedImporting": "Importowanie Zed", + "freeTierProviders": "Free Tier Providers", + "freeTierLabel": "Dostępny darmowy poziom", + "freeTierProvidersDesc": "Providers z darmowymi poziomami — niektóre wymagają rejestracji klucza API, inne nie wymagają żadnych danych uwierzytelniających.", + "providerSummaryAll": "Suma", + "ideProviders": "IDE Providers", + "ideProvidersDesc": "Edytory z wbudowaną subskrypcją AI. Użyj strony provider, aby zaimportować dane uwierzytelniające bezpośrednio z pęku kluczy IDE.", + "noIdeProviders": "Żadne IDE providers nie pasują do aktualnych filtrów.", + "providerDetailFastTierTooltip": "Domyślnie zastosuj poziom Codex Fast dla wszystkich połączeń Codex", + "providerDetailFastDefaultLabel": "Domyślny Fast", "providerDetailBrowserManualConnect": "Połączenie przez przeglądarkę/ręczne", - "providerDetailAuthUrl": "Adres URL uwierzytelniania", - "providerDetailCallbackUrl": "Adres URL wywołania zwrotnego", + "providerDetailAuthUrl": "Auth URL", + "providerDetailCallbackUrl": "Callback URL", "providerDetailValidClaudeCredentialsFile": "Prawidłowy plik danych uwierzytelniających Claude", - "providerDetailPathAutoDetectedAllOs": "Ścieżka jest wykrywana automatycznie w zależności od systemu operacyjnego (Linux/Mac/Windows).", + "providerDetailPathAutoDetectedAllOs": "Ścieżka jest wykrywana automatycznie dla każdego systemu operacyjnego (Linux/Mac/Windows).", "providerDetailMyClaudeAccountPlaceholder": "Moje konto Claude", - "providerDetailPathAutoDetected": "Ścieżka jest wykrywana automatycznie w zależności od systemu operacyjnego (Linux/Mac).", - "webFetch": "__MISSING__:Web Fetch", - "webFetchTooltip": "__MISSING__:Providers that extract content from web URLs (HTML → Markdown, scrape, screenshot)", - "webFetchProvidersHeading": "__MISSING__:Web Fetch Providers", - "compatibleProvidersDesc": "__MISSING__:OpenAI-compatible and Anthropic-compatible endpoints you host or configure. Point any OpenAI SDK to your own URL and route requests here.", - "oauthProvidersDesc": "__MISSING__:Providers authenticated via OAuth — sign in once and OmniRoute handles token rotation automatically.", - "webCookieProvidersDesc": "Dostawcy ci używają sesji internetowych przeglądarki, plików cookie lub tokenów sieciowych zamiast kluczy API. Otwórz dostawcę, aby dodać wymagane poświadczenia sesji.", - "apiKeyProvidersDesc": "__MISSING__:Standard API key providers. Add your key once and OmniRoute routes, retries, and rate-limits on your behalf.", - "noAuthProvidersDesc": "__MISSING__:Open endpoints that require no credentials — ready to use immediately without any sign-up.", - "upstreamProxyProvidersDesc": "__MISSING__:Route outbound traffic through an upstream proxy before it reaches the provider. Useful for corporate networks or traffic inspection.", - "webFetchProvidersDesc": "__MISSING__:Providers that fetch and extract content from web URLs. Use them to ground prompts with live web data.", - "aggregatorsGatewaysDesc": "__MISSING__:Multi-provider aggregators and AI gateways that expose a single unified API across dozens of underlying models.", - "enterpriseCloudDesc": "__MISSING__:Enterprise-tier and cloud-hosted models with enhanced SLAs, compliance certifications, and dedicated capacity.", - "cloudAgentProvidersDesc": "__MISSING__:Autonomous cloud agents that execute long-running tasks with plan approval and live status tracking.", - "localProvidersDesc": "__MISSING__:Self-hosted models running on your own hardware. No data leaves your infrastructure.", - "searchProvidersDesc": "__MISSING__:Web and document search providers. Attach them to LLM calls for Retrieval-Augmented Generation.", - "audioProvidersDesc": "__MISSING__:Text-to-speech and speech-to-text providers for voice I/O and audio transcription pipelines.", - "embeddingRerankProvidersDesc": "__MISSING__:Vector embedding and reranking providers for semantic search, RAG pipelines, and similarity scoring.", - "imageProvidersDesc": "__MISSING__:Image generation and vision providers — create images from text or analyse existing ones.", - "videoProvidersDesc": "__MISSING__:Video generation providers. Create short video clips from text prompts or images.", - "onboardingWizard": "Kreator wdrażania dostawcy", - "onboardingWizardShort": "Kreator wdrożenia", - "onboardingWizardDescription": "Połącz dostawców obsługujących klucz API, niestandardowo zgodnych i OAuth z walidacją, trwałością i natychmiastowym testem połączenia.", - "onboardingStepType": "Wpisz", - "onboardingStepProvider": "Dostawca", - "onboardingStepCredentials": "Poświadczenia", + "providerDetailPathAutoDetected": "Ścieżka jest wykrywana automatycznie dla każdego systemu operacyjnego (Linux/Mac).", + "webFetch": "Web Fetch", + "webFetchTooltip": "Providers wyodrębniające zawartość z sieciowych URL (HTML → Markdown, pobieranie zawartości, zrzut ekranu)", + "webFetchProvidersHeading": "Web Fetch Providers", + "compatibleProvidersDesc": "Kompatybilne z OpenAI oraz Anthropic endpoints hostowane lub konfigurowane lokalnie. Skieruj dowolny SDK OpenAI na własny URL i kieruj tutaj zapytania.", + "oauthProvidersDesc": "Providers uwierzytelniani przez OAuth — zaloguj się raz, a OmniRoute automatycznie zajmie się rotacją token.", + "webCookieProvidersDesc": "Te providers używają sesji przeglądarki, plików cookie lub web tokens zamiast kluczy API. Otwórz provider, aby dodać wymagane dane uwierzytelniające sesji.", + "apiKeyProvidersDesc": "Standardowi providers klucza API. Dodaj klucz raz, a OmniRoute zajmie się przekierowywaniem, ponawianiem prób i rate limit.", + "noAuthProvidersDesc": "Otwarte endpoints niewymagające danych uwierzytelniających — gotowe do użycia natychmiast bez rejestracji.", + "upstreamProxyProvidersDesc": "Kierowanie ruchu wychodzącego przez upstream proxy zanim dotrze on do provider. Przydatne w sieciach korporacyjnych lub do inspekcji ruchu.", + "webFetchProvidersDesc": "Providers, które pobierają i wyodrębniają zawartość z sieciowych URL. Użyj ich, aby zasilić prompty aktualnymi danymi z sieci.", + "aggregatorsGatewaysDesc": "Agregatorzy multi-provider oraz bramki AI udostępniające jedno spójne API dla dziesiątek bazowych models.", + "enterpriseCloudDesc": "Klasy Enterprise oraz hostowane w chmurze models z rozszerzonymi SLA, certyfikatami zgodności i dedykowaną wydajnością.", + "cloudAgentProvidersDesc": "Autonomiczni agenci chmurowi wykonujący długotrwałe zadania z zatwierdzaniem planu i śledzeniem statusu na żywo.", + "localProvidersDesc": "Hostowane lokalnie models uruchamiane na własnym sprzęcie. Żadne dane nie opuszczają infrastruktury.", + "searchProvidersDesc": "Providers wyszukiwania w sieci i dokumentach. Dołącz je do wywołań LLM w celu Retrieval-Augmented Generation.", + "audioProvidersDesc": "Providers zamiany tekstu na mowę i mowy na tekst do obsługi głosu we/wy i potoków transkrypcji audio.", + "embeddingRerankProvidersDesc": "Providers osadzania wektorowego (embedding) i zmiany rankingu (reranking) dla wyszukiwania semantycznego, potoków RAG i oceny podobieństwa.", + "imageProvidersDesc": "Providers generowania obrazów i wizji — twórz obrazy z tekstu lub analizuj istniejące.", + "videoProvidersDesc": "Providers generowania wideo. Twórz krótkie klipy wideo z promptów tekstowych lub obrazów.", + "onboardingWizard": "Kreator onboarding provider", + "onboardingWizardShort": "Kreator onboarding", + "onboardingWizardDescription": "Połącz klucz API, własne kompatybilne oraz OAuth providers z walidacją, trwałością i natychmiastowym testem połączenia.", + "onboardingStepType": "Typ", + "onboardingStepProvider": "Provider", + "onboardingStepCredentials": "Dane uwierzytelniające", "onboardingStepResult": "Wynik", - "onboardingTypeApiKeyTitle": "Dostawca klucza API", - "onboardingTypeApiKeyText": "Korzystaj z wbudowanych dostawców, takich jak OpenAI, Anthropic, Gemini, Groq, Azure i innych.", - "onboardingTypeCustomTitle": "Niestandardowy kompatybilny dostawca", - "onboardingTypeCustomText": "Utwórz punkt końcowy zgodny z OpenAI, Anthropic lub Claude Code i dodaj jego klucz.", - "onboardingTypeOAuthTitle": "Dostawca OAuth", - "onboardingTypeOAuthText": "Wykorzystaj ponownie istniejący protokół OAuth, kod urządzenia lub lokalne przepływy importu dla dostawców kodowania.", - "onboardingChooseOAuthProvider": "Wybierz dostawcę OAuth", - "onboardingChooseApiKeyProvider": "Wybierz dostawcę klucza API", - "onboardingChooseProviderDescription": "Wybierz dostawcę, a kreator przeprowadzi Cię przez proces uwierzytelniania i testowanie.", + "onboardingTypeApiKeyTitle": "Provider klucza API", + "onboardingTypeApiKeyText": "Użyj wbudowanych providers, takich jak OpenAI, Anthropic, Gemini, Groq, Azure i innych.", + "onboardingTypeCustomTitle": "Własny kompatybilny provider", + "onboardingTypeCustomText": "Utwórz endpoint kompatybilny z OpenAI, Anthropic lub Claude Code i dodaj jego klucz.", + "onboardingTypeOAuthTitle": "Provider OAuth", + "onboardingTypeOAuthText": "Użyj ponownie istniejących przepływów OAuth, device-code lub lokalnego importu dla providers kodowania.", + "onboardingChooseOAuthProvider": "Wybierz provider OAuth", + "onboardingChooseApiKeyProvider": "Wybierz provider klucza API", + "onboardingChooseProviderDescription": "Wybierz provider, a kreator przeprowadzi proces konfiguracji danych uwierzytelniających i testowania.", "onboardingChangeType": "Zmień typ", - "onboardingChangeProvider": "Zmień dostawcę", - "onboardingSearchProviders": "Dostawcy wyszukiwania…", + "onboardingChangeProvider": "Zmień provider", + "onboardingSearchProviders": "Szukaj providers…", "onboardingApiKeyOptional": "Klucz API opcjonalny", - "onboardingProviderConnected": "Dostawca podłączony", - "onboardingProviderSavedWithWarnings": "Dostawca zapisany z ostrzeżeniami", - "onboardingProviderFinished": "Zakończono wdrażanie dostawcy", - "onboardingYourProviderConnection": "Twoje połączenie z dostawcą", - "onboardingTestPassed": "Test zaliczony", + "onboardingProviderConnected": "Połączono provider", + "onboardingProviderSavedWithWarnings": "Zapisano provider z ostrzeżeniami", + "onboardingProviderFinished": "Zakończono onboarding provider", + "onboardingYourProviderConnection": "Połączenie provider", + "onboardingTestPassed": "Test powiódł się", "onboardingTestFailed": "Test nie powiódł się", - "onboardingOpenProviderDetails": "Otwórz szczegóły dostawcy", - "onboardingTryInPlayground": "Spróbuj na placu zabaw", + "onboardingOpenProviderDetails": "Otwórz szczegóły provider", + "onboardingTryInPlayground": "Wypróbuj w playground", "onboardingDefaultConnectionName": "{provider} Podstawowy", - "onboardingTestingConnection": "Testuję połączenie dostawcy…", - "onboardingValidatingCredentials": "Sprawdzam poświadczenia…", - "onboardingSavingConnection": "Zapisuję połączenie z dostawcą…", - "onboardingProviderFailed": "Wdrożenie dostawcy nie powiodło się", - "onboardingCreatingCompatibleProvider": "Tworzę kompatybilnego dostawcę…", - "onboardingSavingCompatibleConnection": "Zapisuję połączenie zgodnego dostawcy…", - "onboardingCustomProviderFallbackName": "Dostawca niestandardowy", - "onboardingCustomProviderFailed": "Wdrożenie dostawcy niestandardowego nie powiodło się", + "onboardingTestingConnection": "Testowanie połączenia provider…", + "onboardingValidatingCredentials": "Walidacja danych uwierzytelniających…", + "onboardingSavingConnection": "Zapisywanie połączenia provider…", + "onboardingProviderFailed": "Onboarding provider nie powiódł się", + "onboardingCreatingCompatibleProvider": "Tworzenie kompatybilnego provider…", + "onboardingSavingCompatibleConnection": "Zapisywanie połączenia kompatybilnego provider…", + "onboardingCustomProviderFallbackName": "Własny provider", + "onboardingCustomProviderFailed": "Onboarding własnego provider nie powiódł się", "onboardingLoadingOAuthConnection": "Ładowanie połączenia OAuth…", - "onboardingOAuthNoConnectionFound": "OAuth zostało zakończone, ale nie znaleziono połączenia z dostawcą.", - "onboardingOAuthFailed": "Wdrożenie OAuth nie powiodło się", + "onboardingOAuthNoConnectionFound": "Zakończono OAuth, ale nie znaleziono połączenia provider.", + "onboardingOAuthFailed": "Onboarding OAuth nie powiódł się", "onboardingAddProvider": "Dodaj {provider}", "onboardingConnectionName": "Nazwa połączenia", "onboardingApiKeyOptionalLabel": "Klucz API (opcjonalnie)", - "onboardingBaseUrlOverride": "Zastąpienie podstawowego adresu URL", - "onboardingBaseUrlOverrideHint": "Opcjonalne. Przechowywane jako dostawcaSpecificData.baseUrl.", + "onboardingBaseUrlOverride": "Nadpisanie bazowego URL", + "onboardingBaseUrlOverrideHint": "Opcjonalnie. Przechowywane jako providerSpecificData.baseUrl.", "onboardingRegion": "Region", - "onboardingSearchCx": "Szukaj CX / identyfikator wyszukiwarki", - "onboardingProviderSpecificIdPlaceholder": "Opcjonalny identyfikator specyficzny dla dostawcy", - "onboardingCustomUserAgent": "Niestandardowy agent użytkownika", - "onboardingWorking": "Pracuję…", - "onboardingValidateSaveTest": "Sprawdź, zapisz i przetestuj", - "onboardingBack": "Powrót", - "onboardingCreateCustomCompatibleProvider": "Utwórz niestandardowego kompatybilnego dostawcę", - "onboardingCreateCustomCompatibleDescription": "Kreator najpierw tworzy węzeł dostawcy, a następnie przechowuje i testuje jego połączenie klucza API.", + "onboardingSearchCx": "Wyszukiwanie CX / ID silnika", + "onboardingProviderSpecificIdPlaceholder": "Opcjonalne ID specyficzne dla provider", + "onboardingCustomUserAgent": "Własny User-Agent", + "onboardingWorking": "Przetwarzanie…", + "onboardingValidateSaveTest": "Zweryfikuj, zapisz i przetestuj", + "onboardingBack": "Wstecz", + "onboardingCreateCustomCompatibleProvider": "Utwórz własny kompatybilny provider", + "onboardingCreateCustomCompatibleDescription": "Kreator najpierw tworzy węzeł provider, a następnie zapisuje i testuje jego połączenie klucza API.", "onboardingProtocol": "Protokół", "onboardingOpenAiCompatible": "Kompatybilny z OpenAI", - "onboardingAnthropicCompatible": "Kompatybilny z antropią", + "onboardingAnthropicCompatible": "Kompatybilny z Anthropic", "onboardingClaudeCodeCompatible": "Kompatybilny z Claude Code", - "onboardingProviderPrefix": "Prefiks dostawcy", - "onboardingProviderPrefixHint": "Służy do generowania identyfikatora zarządzanego dostawcy.", + "onboardingProviderPrefix": "Prefiks provider", + "onboardingProviderPrefixHint": "Używany do wygenerowania zarządzanego ID provider.", "onboardingChatPath": "Ścieżka czatu", - "onboardingModelsPath": "Ścieżka modeli", - "onboardingCreateSaveTest": "Twórz, zapisuj i testuj", + "onboardingModelsPath": "Ścieżka models", + "onboardingCreateSaveTest": "Utwórz, zapisz i przetestuj", "onboardingConnectProvider": "Połącz {provider}", - "onboardingOAuthFlowDescription": "OmniRoute otworzy istniejący przepływ OAuth dla tego dostawcy. Po zalogowaniu kreator ponownie ładuje zapisane połączenie i przeprowadza ten sam test połączenia, co strona dostawcy.", - "onboardingStartOAuthFlow": "Rozpocznij przepływ OAuth", - "passthroughModelsDescription": "{provider} akceptuje identyfikatory modeli natywne dla dostawcy. Importuj z /models lub dodaj niestandardowe identyfikatory dla routingu.", - "bedrockModelsDescription": "Modele Amazon Bedrock są objęte zakresem regionu AWS. Importuj z /models lub dodaj identyfikatory modeli Bedrock włączone w wybranym regionie.", - "bedrockModelPlaceholder": "antropiczny.claude-sonnet-4-6", - "addProviderSessionCookieTitle": "Dodaj plik cookie sesji {provider}", - "addProviderWebTokenTitle": "Dodaj token sieciowy {provider}", + "onboardingOAuthFlowDescription": "OmniRoute otworzy istniejący przepływ OAuth dla tego provider. Po zalogowaniu kreator ponownie załaduje zapisane połączenie i uruchomi ten sam test połączenia, co strona provider.", + "onboardingStartOAuthFlow": "Uruchom przepływ OAuth", + "passthroughModelsDescription": "{provider} akceptuje natywne ID models dla provider. Zaimportuj z /models lub dodaj własne ID do routing.", + "bedrockModelsDescription": "Models Amazon Bedrock są ograniczone do regionu AWS. Zaimportuj z /models lub dodaj Bedrock ID models włączone w wybranym regionie.", + "bedrockModelPlaceholder": "anthropic.claude-sonnet-4-6", + "addProviderSessionCookieTitle": "Dodaj cookie sesji {provider}", + "openWebProviderSite": "Otwórz {host}", + "addProviderWebTokenTitle": "Dodaj web token {provider}", "addProviderConnectionTitle": "Dodaj połączenie {provider}", - "webTokenCredentialLabel": "Token sesji internetowej", - "webNoAuthCredentialLabel": "Nie jest wymagane żadne poświadczenie", - "webCookieCredentialHint": "Wymagany plik cookie: {credential}. Wklej wartość nagłówka Cookie z sesji internetowej, w której się zalogowałeś {provider}. Nie dołączaj przedrostka Cookie:.", - "webTokenCredentialHint": "Dane uwierzytelniające: {credential}. Wklej wartość tokena z własnej sesji internetowej {provider}, w której się zalogowałeś, lub eksport HAR DevTools, jeśli dostawca to obsługuje.", - "webCookieEditHint": "Pozostaw puste, aby zachować plik cookie bieżącej sesji. Wymagany plik cookie: {credential}.", - "webTokenEditHint": "Pozostaw puste, aby zachować bieżący token sesji internetowej. Dane uwierzytelniające: {credential}.", - "webSessionGuideTitle": "Jak uzyskać dane uwierzytelniające sesję", - "webSessionGuideIntro": "{provider} używa sesji internetowej przeglądarki zamiast klucza API.", - "webCookieRequiredCredential": "Wymagany plik cookie: {credential}", + "webTokenCredentialLabel": "Token sesji web", + "webNoAuthCredentialLabel": "Dane uwierzytelniające nie są wymagane", + "webCookieCredentialHint": "Wymagane cookie: {credential}. Wklej wartość nagłówka Cookie z własnej zalogowanej sesji web {provider}. Nie dołączaj prefiksu Cookie:.", + "webTokenCredentialHint": "Dane uwierzytelniające: {credential}. Wklej wartość token z własnej zalogowanej sesji web {provider} lub eksport HAR z DevTools, jeśli provider go obsługuje.", + "webCookieEditHint": "Pozostaw puste, aby zachować bieżące cookie sesji. Wymagane cookie: {credential}.", + "webTokenEditHint": "Pozostaw puste, aby zachować bieżący token sesji web. Dane uwierzytelniające: {credential}.", + "webSessionGuideTitle": "Jak uzyskać dane uwierzytelniające sesji", + "webSessionGuideIntro": "{provider} używa sesji przeglądarki zamiast klucza API.", + "webCookieRequiredCredential": "Wymagane cookie: {credential}", "webTokenRequiredCredential": "Wymagany token: {credential}", - "webSessionGuideStep1": "Zaloguj się do {provider} w swojej przeglądarce.", - "webSessionGuideStep2": "Otwórz narzędzia programistyczne przeglądarki i sprawdź żądanie wysłane przez aplikację internetową.", - "webSessionGuideStep3": "Skopiuj wymagane dane uwierzytelniające z domeny dostawcy. W przypadku plików cookie skopiuj tylko wartość nagłówka Cookie i pomiń Cookie:.", - "webSessionGuideStep4": "Wklej go tutaj i sprawdź połączenie. Jeśli przestanie działać, zaloguj się ponownie i zastąp ją nową wartością.", - "webSessionSecurityHint": "Traktuj to jak hasło: może uzyskać dostęp do Twojego zalogowanego konta internetowego, dopóki nie wygaśnie lub nie zostanie unieważnione.", - "webNoAuthGuideTitle": "Nie jest wymagane żadne poświadczenie", - "webNoAuthGuideBody": "{provider} nie potrzebuje klucza API ani pliku cookie. Zapisz połączenie, aby móc korzystać z bezpłatnego internetowego punktu końcowego.", - "webSessionCredentialValidationFailed": "Weryfikacja danych logowania sesji nie powiodła się. Zaloguj się ponownie, skopiuj nowe dane uwierzytelniające i spróbuj ponownie.", - "checkCookie": "Sprawdź plik cookie", + "webSessionGuideStep1": "Zaloguj się do {provider} w przeglądarce.", + "webSessionGuideStep2": "Otwórz narzędzia deweloperskie przeglądarki i zbadaj żądanie wysłane przez aplikację webową.", + "webSessionGuideStep3": "Skopiuj wymagane dane uwierzytelniające z własnej domeny provider. W przypadku cookies skopiuj tylko wartość nagłówka Cookie i pomiń Cookie:.", + "webSessionGuideStep4": "Wklej tutaj i sprawdź połączenie. Jeśli przestanie działać, zaloguj się ponownie i zastąp nową wartością.", + "webSessionSecurityHint": "Należy traktować to jak hasło: może zapewniać dostęp do zalogowanego konta webowego, dopóki nie wygaśnie lub nie zostanie unieważnione.", + "webNoAuthGuideTitle": "Dane uwierzytelniające niewymagane", + "webNoAuthGuideBody": "{provider} nie wymaga klucza API ani cookie. Zapisz połączenie, aby korzystać z jego darmowego web endpoint.", + "webSessionCredentialValidationFailed": "Błąd walidacji danych uwierzytelniających sesji. Zaloguj się ponownie, skopiuj nowe dane uwierzytelniające i spróbuj ponownie.", + "checkCookie": "Sprawdź cookie", "checkWebToken": "Sprawdź token", - "huggingchatLabel": "__MISSING__:HuggingChat (Free)", - "huggingchatDesc": "__MISSING__:Free LLM chat via huggingface.co/chat", - "poeWebLabel": "__MISSING__:Poe Web", - "poeWebDesc": "__MISSING__:Multi-model chat via poe.com", - "veniceWebLabel": "__MISSING__:Venice Web", - "veniceWebDesc": "__MISSING__:Privacy-focused AI chat", - "v0VercelWebLabel": "__MISSING__:v0 Vercel Web", - "v0VercelWebDesc": "__MISSING__:AI code generation via v0.dev", - "kimiWebLabel": "__MISSING__:Kimi Web", - "kimiWebDesc": "__MISSING__:Moonshot AI consumer chat via www.kimi.com (international, Connect-RPC API)", - "doubaoWebLabel": "__MISSING__:Doubao Web", - "doubaoWebDesc": "__MISSING__:ByteDance AI chat via doubao.com", - "visionCapableLabel": "__MISSING__:Vision capable", - "visionCapableHint": "__MISSING__:Manually flag this model as vision-capable when the provider's discovery metadata doesn't report an image input modality (common for self-hosted/local backends).", - "kimiOfficialSupporterBadge": "Official Supporter", - "kimiOfficialSupporterTooltip": "Kimi (Moonshot AI) is an official OmniRoute launch partner" + "huggingchatLabel": "HuggingChat (Darmowy)", + "huggingchatDesc": "Darmowy czat LLM przez huggingface.co/chat", + "poeWebLabel": "Poe Web", + "poeWebDesc": "Czat wielomodelowy przez poe.com", + "veniceWebLabel": "Venice Web", + "veniceWebDesc": "Czat AI skupiony na prywatności", + "v0VercelWebLabel": "v0 Vercel Web", + "v0VercelWebDesc": "Generowanie kodu AI przez v0.dev", + "kimiWebLabel": "Kimi Web", + "kimiWebDesc": "Konsumencki czat Moonshot AI przez www.kimi.com (międzynarodowy, Connect-RPC API)", + "doubaoWebLabel": "Dola Web", + "doubaoWebDesc": "Czat AI ByteDance przez dola.com", + "overrideBaseUrlAdvanced": "Zaawansowane: nadpisz bazowy URL", + "overrideBaseUrlHint": "Zaawansowane: skieruj ten wbudowany provider na niestandardowy endpoint. Pozostaw puste, aby użyć domyślnego.", + "bulkAddFormatHintCloudflare": "Jeden klucz na linię. Format: name|accountId|apiKey (Cloudflare account ID + API token).", + "lmarenaWebCookieHint": "Otwórz arena.ai, zaloguj się, a następnie skopiuj pełny nagłówek Cookie z żądania Network. Dołącz arena-auth-prod-v1.0 i arena-auth-prod-v1.1 (oraz kolejne fragmenty, jeśli występują), najlepiej z cf_clearance. Nie wklejaj samego pustego cookie arena-auth-prod-v1. Opcjonalnie: providerSpecificData.recaptchaV3Token, jeśli create-evaluation nadal zwraca 403.", + "kimiOfficialSupporterBadge": "Oficjalny wspierający", + "kimiOfficialSupporterTooltip": "Kimi (Moonshot AI) jest oficjalnym partnerem premiery OmniRoute" }, "settings": { "title": "Ustawienia", - "general": "Generał", + "general": "Ogólne", "security": "Bezpieczeństwo", "appearance": "Wygląd", - "routing": "Trasowanie", - "cache": "Pamięć podręczna", - "resilience": "Odporność", - "routingSettingsIntro": "Kontroluje sposób, w jaki Twoje żądania są kierowane, przekształcane i wysyłane do dostawców sztucznej inteligencji.", - "routingOpDropParagraphContainsLabel": "__MISSING__:Drop paragraph (contains)", - "routingOpDropParagraphStartsWithLabel": "__MISSING__:Drop paragraph (starts with)", - "routingOpReplaceTextLabel": "__MISSING__:Replace text", - "routingOpReplaceRegexLabel": "__MISSING__:Replace regex", - "routingOpDropBlockContainsLabel": "__MISSING__:Drop block (contains)", - "routingOpPrependSystemBlockLabel": "__MISSING__:Prepend system block", - "routingOpAppendSystemBlockLabel": "__MISSING__:Append system block", - "routingOpInjectBillingHeaderLabel": "__MISSING__:Inject billing header", - "routingOpObfuscateWordsLabel": "__MISSING__:Obfuscate words (ZWJ)", - "routingOpDropParagraphContainsDesc": "__MISSING__:Removes any paragraph (text block split on blank lines) inside the system prompt whose text contains ANY of the listed substrings. Use to strip third-party client fingerprints like 'github.com/anomalyco/opencode' or 'docs.openwebui.com' that Anthropic's classifier flags.", - "routingOpDropParagraphStartsWithDesc": "__MISSING__:Removes any paragraph that STARTS WITH one of the listed prefixes. Use for identity lines like 'You are OpenCode' or 'You are Open WebUI' that announce the calling client.", - "routingOpReplaceTextDesc": "__MISSING__:Replaces a literal substring with another literal substring. Use for known trigger phrases — e.g. rewrite 'Here is some useful information about the environment you are running in:' to 'Environment context you are running in:' (an empirically-validated trigger phrase).", - "routingOpReplaceRegexDesc": "__MISSING__:Replaces text matching a regular expression. Use when you need patterns (character classes, optional whitespace, anchors) instead of literal substrings. A malformed pattern is caught at runtime when the op runs.", - "routingOpDropBlockContainsDesc": "__MISSING__:Removes ENTIRE system blocks (not just paragraphs) whose text contains any of the listed substrings. Use when a whole block is fingerprint-bearing and you want it gone — e.g. an injected MCP-server description.", - "routingOpPrependSystemBlockDesc": "__MISSING__:Inserts a new text block at the FRONT of the system array. Use to add the SDK identity 'You are a Claude agent, built on Anthropic's Claude Agent SDK.' that Anthropic's classifier expects.", - "routingOpAppendSystemBlockDesc": "__MISSING__:Inserts a new text block at the END of the system array. Use for cosmetic additions that don't need to be at position [0].", - "routingOpInjectBillingHeaderDesc": "__MISSING__:Prepends the special 'x-anthropic-billing-header: cc_version=...; cc_entrypoint=...; cch=...;' text block that Anthropic's classifier validates. Required for CC bridge relay endpoints; for the native claude provider OmniRoute already injects its own billing line so this op is usually redundant there.", - "routingOpObfuscateWordsDesc": "__MISSING__:Inserts a Zero-Width-Joiner character after the first letter of each listed word, so 'opencode' becomes 'o‍pencode'. Reads identical to humans but bypasses classifier word matches. Targets system blocks, user/assistant messages, and tool descriptions.", - "routingNeedlesHint": "__MISSING__:List of substrings. A paragraph matches if it contains ANY one of them. Add one per line via 'Add entry'.", - "routingPrefixesHint": "__MISSING__:List of strings. A paragraph matches if it starts with any one of them (leading whitespace is trimmed before matching).", - "routingCaseSensitiveHint": "__MISSING__:When ON, 'OpenCode' and 'opencode' are different strings. When OFF (default), the comparison ignores case.", - "routingMatchLiteralHint": "__MISSING__:Exact literal substring to find. No regex syntax — special chars like . * ? are treated as themselves.", - "routingReplacementTextHint": "__MISSING__:Replacement string. Leave blank to delete the match. The output preserves surrounding text.", - "routingAllOccurrencesHint": "__MISSING__:When ON (default), every instance is replaced. When OFF, only the first match is replaced.", - "routingPatternHint": "__MISSING__:JavaScript regex source. Don't wrap in slashes — just 'foo(.*)bar'. Server rejects patterns that fail to compile.", - "routingRegexFlagsHint": "__MISSING__:JavaScript regex flags (g = all matches, i = case-insensitive, s = dot matches newline, m = multiline). Default 'g'.", - "routingBlockTextHint": "__MISSING__:Full text of the new system block. Use a literal string; the system block stores text only.", - "routingIdempotencyKeyHint": "__MISSING__:Optional. If set, the op skips when a block whose text starts with this key is already present. Prevents double-prepend on retries.", - "routingBillingEntrypointHint": "__MISSING__:Value injected as 'cc_entrypoint='. Anthropic accepts 'sdk-cli' (Agent SDK), 'cli' (Claude Code CLI), or other documented values.", - "routingBillingVersionFormatHint": "__MISSING__:How the 3-char build hash after cc_version= is computed. 'ex-machina' = sha256 of CCH_SALT+chars-from-first-user-msg+version (per-message). 'omniroute-daystamp' = sha256 of YYYY-MM-DD+version (stable per-day).", - "routingBillingCchAlgoHint": "__MISSING__:How the 5-char cch= token is computed. 'sha256-first-user' = sha256 of first user message text. 'xxhash64-body' = body-level signing fills it later. 'static-zero' = literal '00000' placeholder.", - "routingObfuscateWordsHint": "__MISSING__:Lowercase words to obfuscate. ZWJ insertion is applied case-insensitively, so 'opencode' also matches 'OpenCode' and 'OPENCODE'.", - "routingObfuscateTargetsHint": "__MISSING__:Which body regions to scan for the words: system blocks, user/assistant messages, and/or tool descriptions.", - "routingObfuscateTargetsLabel": "__MISSING__:Targets", - "routingSummarizeDropParagraphContains": "__MISSING__:drop paragraphs containing: {items}", - "routingSummarizeDropParagraphStartsWith": "__MISSING__:drop paragraphs starting with: {items}", - "routingSummarizeReplaceText": "__MISSING__:replace \"{match}\" → \"{replacement}\"", - "routingSummarizeReplaceRegex": "__MISSING__:regex /{pattern}/{flags} → \"{replacement}\"", - "routingSummarizeDropBlockContains": "__MISSING__:drop blocks containing: {items}", - "routingSummarizePrependSystemBlock": "__MISSING__:prepend block: \"{text}\"", - "routingSummarizeAppendSystemBlock": "__MISSING__:append block: \"{text}\"", - "routingSummarizeInjectBillingHeader": "__MISSING__:inject billing header (entrypoint={entrypoint}, version={versionFormat}, cch={cchAlgo})", - "routingSummarizeObfuscateWords": "__MISSING__:obfuscate {count} word(s) via ZWJ in {targets}", - "routingDefaultAutoVariantLKGP": "__MISSING__:Last Known Good Provider", - "routingDefaultAutoVariantLKGPDesc": "__MISSING__:Last Known Good Provider", - "routingDefaultAutoVariantCoding": "__MISSING__:Quality-first for code", - "routingDefaultAutoVariantCodingDesc": "__MISSING__:Quality-first for code", - "routingDefaultAutoVariantFast": "__MISSING__:Low-latency routing", - "routingDefaultAutoVariantFastDesc": "__MISSING__:Low-latency routing", - "routingDefaultAutoVariantCheap": "__MISSING__:Cost-optimized", - "routingDefaultAutoVariantCheapDesc": "__MISSING__:Cost-optimized", - "routingDefaultAutoVariantOffline": "__MISSING__:High availability", - "routingDefaultAutoVariantOfflineDesc": "__MISSING__:High availability", - "routingDefaultAutoVariantSmart": "__MISSING__:Best discovery (10% explore)", - "routingDefaultAutoVariantSmartDesc": "__MISSING__:Best discovery (10% explore)", - "routingOpSummaryCount": "__MISSING__:{count, plural, =0 {no ops} one {# op} other {# ops}}", - "routingOpEnabled": "__MISSING__:enabled", - "routingOpDisabled": "__MISSING__:disabled", - "routingOpStatusSeparator": "__MISSING__: ·", - "resilienceSettingsIntro": "Automatyczne ponawianie prób, czas oczekiwania i powrót po awarii w przypadku niepowodzenia dostawcy.", - "aiSettingsIntro": "Ustawienia specyficzne dla sztucznej inteligencji dotyczące budżetu, zachowania modelu i kompresji.", - "systemPrompt": "Monit systemowy", - "thinkingBudget": "Myślący budżet", - "proxy": "Pełnomocnik", + "routing": "Routing", + "cache": "Cache", + "resilience": "Niezawodność", + "description": "Opis", + "enable": "Włącz", + "disable": "Wyłącz", + "update": "Aktualizuj", + "routingSettingsIntro": "Kontroluje sposób, w jaki żądania są kierowane, przekształcane i wysyłane do AI providers.", + "routingOpDropParagraphContainsLabel": "Usuń akapit (zawiera)", + "routingOpDropParagraphStartsWithLabel": "Usuń akapit (zaczyna się od)", + "routingOpReplaceTextLabel": "Zastąp tekst", + "routingOpReplaceRegexLabel": "Zastąp regex", + "routingOpDropBlockContainsLabel": "Usuń blok (zawiera)", + "routingOpPrependSystemBlockLabel": "Dodaj blok systemowy na początku", + "routingOpAppendSystemBlockLabel": "Dodaj blok systemowy na końcu", + "routingOpInjectBillingHeaderLabel": "Wstrzyknij billing header", + "routingOpObfuscateWordsLabel": "Zaciemnij słowa (ZWJ)", + "routingOpDropParagraphContainsDesc": "Usuwa dowolny akapit (blok tekstu oddzielony pustymi liniami) wewnątrz system prompt, którego tekst zawiera DOWOLNY z podanych podciągów. Służy do usuwania sygnatur zewnętrznych klientów, takich jak 'github.com/anomalyco/opencode' lub 'docs.openwebui.com', które flaguje klasyfikator firmy Anthropic.", + "routingOpDropParagraphStartsWithDesc": "Usuwa dowolny akapit, który ZACZYNA SIĘ OD jednego z podanych prefiksów. Służy do usuwania linii tożsamości, takich jak 'You are OpenCode' lub 'You are Open WebUI', które identyfikują dzwoniącego klienta.", + "routingOpReplaceTextDesc": "Zastępuje dosłowny podciąg innym dosłownym podciągiem. Służy do znanych fraz wyzwalających — np. przepisania 'Here is some useful information about the environment you are running in:' na 'Environment context you are running in:' (empirycznie zweryfikowana fraza wyzwalająca).", + "routingOpReplaceRegexDesc": "Zastępuje tekst pasujący do wyrażenia regularnego. Służy do wzorców (klas znaków, opcjonalnych białych znaków, kotwic) zamiast dosłownych podciągów. Niepoprawny wzorzec jest wyłapywany w czasie wykonywania, gdy op jest uruchamiane.", + "routingOpDropBlockContainsDesc": "Usuwa CAŁE bloki systemowe (nie tylko akapity), których tekst zawiera dowolny z podanych podciągów. Służy do usuwania całych bloków zawierających sygnatury — np. wstrzykniętego opisu serwera MCP.", + "routingOpPrependSystemBlockDesc": "Wstawia nowy blok tekstu na POCZĄTKU tablicy system. Służy do dodawania tożsamości SDK 'You are a Claude agent, built on Anthropic's Claude Agent SDK.', której oczekuje klasyfikator firmy Anthropic.", + "routingOpAppendSystemBlockDesc": "Wstawia nowy blok tekstu na KOŃCU tablicy system. Służy do kosmetycznych dodatków, które nie muszą znajdować się na pozycji [0].", + "routingOpInjectBillingHeaderDesc": "Dodaje na początku specjalny blok tekstu 'x-anthropic-billing-header: cc_version=...; cc_entrypoint=...; cch=...;', który jest walidowany przez klasyfikator firmy Anthropic. Wymagane dla endpoints przekaźnika CC bridge; dla natywnego provider claude OmniRoute wstrzykuje już własną linię billingową, więc ten op jest tam zazwyczaj nadmiarowy.", + "routingOpObfuscateWordsDesc": "Wstawia znak Zero-Width-Joiner po pierwszej literze każdego wymienionego słowa, dzięki czemu 'opencode' staje się 'o‍pencode'. Dla ludzi tekst wygląda identycznie, ale omija dopasowania słów klasyfikatora. Celuje w bloki systemowe, wiadomości użytkownika/asystenta i opisy narzędzi.", + "routingNeedlesHint": "Lista podciągów. Akapit pasuje, jeśli zawiera DOWOLNY z nich. Dodaj po jednym wpisie w linii za pomocą 'Add entry'.", + "routingPrefixesHint": "Lista ciągów znaków. Akapit pasuje, jeśli zaczyna się od dowolnego z nich (początkowe białe znaki są usuwane przed dopasowaniem).", + "routingCaseSensitiveHint": "Gdy włączone, 'OpenCode' i 'opencode' są traktowane jako różne ciągi znaków. Gdy wyłączone (domyślnie), porównanie ignoruje wielkość liter.", + "routingMatchLiteralHint": "Dokładny dosłowny podciąg do wyszukania. Brak składni regex — znaki specjalne, takie jak . * ?, są traktowane dosłownie.", + "routingReplacementTextHint": "Ciąg zamienny. Pozostaw puste, aby usunąć dopasowanie. Wynik zachowuje otaczający tekst.", + "routingAllOccurrencesHint": "Gdy włączone (domyślnie), zastępowane są wszystkie wystąpienia. Gdy wyłączone, zastępowane jest tylko pierwsze dopasowanie.", + "routingPatternHint": "Źródło regex JavaScript. Nie otaczaj ukośnikami — po prostu 'foo(.*)bar'. Serwer odrzuca wzorce, które nie kompilują się pomyślnie.", + "routingRegexFlagsHint": "Flagi regex JavaScript (g = wszystkie dopasowania, i = ignorowanie wielkości liter, s = kropka dopasowuje nową linię, m = wielolinijkowy). Domyślnie 'g'.", + "routingBlockTextHint": "Pełny tekst nowego bloku systemowego. Użyj dosłownego ciągu znaków; blok systemowy przechowuje wyłącznie tekst.", + "routingIdempotencyKeyHint": "Opcjonalnie. Jeśli ustawione, op jest pomijany, gdy blok, którego tekst zaczyna się od tego klucza, jest już obecny. Zapobiega podwójnemu dodawaniu na początku przy ponownych próbach.", + "routingBillingEntrypointHint": "Wartość wstrzykiwana jako 'cc_entrypoint='. Anthropic akceptuje 'sdk-cli' (Agent SDK), 'cli' (Claude Code CLI) lub inne udokumentowane wartości.", + "routingBillingVersionFormatHint": "Sposób obliczania 3-znakowego hasha kompilacji po cc_version=. 'ex-machina' = sha256 z CCH_SALT+znaki-z-pierwszej-wiadomości-użytkownika+wersja (dla każdej wiadomości). 'omniroute-daystamp' = sha256 z YYYY-MM-DD+wersja (stabilne na dany dzień).", + "routingBillingCchAlgoHint": "Sposób obliczania 5-znakowego token cch=. 'sha256-first-user' = sha256 tekstu pierwszej wiadomości użytkownika. 'xxhash64-body' = podpis na poziomie body uzupełnia go później. 'static-zero' = dosłowny placeholder '00000'.", + "routingObfuscateWordsHint": "Słowa pisane małymi literami do zaciemnienia. Wstawianie ZWJ jest stosowane bez uwzględniania wielkości liter, więc 'opencode' pasuje również do 'OpenCode' i 'OPENCODE'.", + "routingObfuscateTargetsHint": "Obszary body do przeszukania pod kątem słów: bloki systemowe, wiadomości użytkownika/asystenta i/lub opisy narzędzi.", + "routingObfuscateTargetsLabel": "Obszary docelowe", + "routingSummarizeDropParagraphContains": "usuń akapity zawierające: {items}", + "routingSummarizeDropParagraphStartsWith": "usuń akapity zaczynające się od: {items}", + "routingSummarizeReplaceText": "zastąp \"{match}\" → \"{replacement}\"", + "routingSummarizeReplaceRegex": "regex /{pattern}/{flags} → \"{replacement}\"", + "routingSummarizeDropBlockContains": "usuń bloki zawierające: {items}", + "routingSummarizePrependSystemBlock": "dodaj na początku blok: \"{text}\"", + "routingSummarizeAppendSystemBlock": "dodaj na końcu blok: \"{text}\"", + "routingSummarizeInjectBillingHeader": "wstrzyknij billing header (entrypoint={entrypoint}, version={versionFormat}, cch={cchAlgo})", + "routingSummarizeObfuscateWords": "zaciemnij {count} słowo(a) za pomocą ZWJ w {targets}", + "routingDefaultAutoVariantLKGP": "Ostatni znany dobry Provider", + "routingDefaultAutoVariantLKGPDesc": "Ostatni znany dobry Provider", + "routingDefaultAutoVariantCoding": "Najwyższa jakość dla kodu", + "routingDefaultAutoVariantCodingDesc": "Najwyższa jakość dla kodu", + "routingDefaultAutoVariantFast": "Routing o niskich opóźnieniach", + "routingDefaultAutoVariantFastDesc": "Routing o niskich opóźnieniach", + "routingDefaultAutoVariantCheap": "Zoptymalizowany pod kątem kosztów", + "routingDefaultAutoVariantCheapDesc": "Zoptymalizowany pod kątem kosztów", + "routingDefaultAutoVariantOffline": "Wysoka dostępność", + "routingDefaultAutoVariantOfflineDesc": "Wysoka dostępność", + "routingDefaultAutoVariantSmart": "Najlepsze odkrywanie (10% eksploracji)", + "routingDefaultAutoVariantSmartDesc": "Najlepsze odkrywanie (10% eksploracji)", + "routingOpSummaryCount": "{count, plural, =0 {brak operacji} one {# operacja} other {# operacji}}", + "routingOpEnabled": "włączone", + "routingOpDisabled": "wyłączone", + "routingOpStatusSeparator": "·", + "resilienceSettingsIntro": "Automatyczne ponawianie prób, czas schładzania (cooldown) i fallback, gdy providers ulegną awarii.", + "aiSettingsIntro": "Ustawienia specyficzne dla AI dotyczące thinking budget, zachowania models i kompresji.", + "systemPrompt": "System Prompt", + "thinkingBudget": "Thinking Budget", + "proxy": "Proxy", "httpProxy": "HTTP Proxy", "1proxy": "1proxy", - "proxySubTabsAria": "Proxy sections", + "proxySubTabsAria": "Sekcje proxy", "requestBodyLimitTitle": "Request Body Limit", - "requestBodyLimitDescription": "Maximum API payload size accepted before a request body is parsed. Dedicated upload routes keep at least their built-in 100 MB limit.", - "requestBodyLimitInputLabel": "Request body limit in MB", - "requestBodyLimitEmptyError": "Enter a limit in MB", - "requestBodyLimitWholeNumberError": "Use a whole number", - "requestBodyLimitMinimumError": "Minimum is {min} MB", - "requestBodyLimitMaximumError": "Maximum is {max} MB", - "requestBodyLimitLoadFailed": "Failed to load request limit settings", - "requestBodyLimitSaveSuccess": "Request body limit saved", - "requestBodyLimitSaveFailed": "Failed to save request body limit", - "requestBodyLimitSaving": "Saving...", - "requestBodyLimitSave": "Save", - "requestBodyLimitCurrent": "Current: {value}", - "mitmProxy": "Pełnomocnik MITM", - "pricing": "Ceny", - "storage": "Przechowywanie", - "policies": "Zasady", - "ipFilter": "Filtr IP", - "comboDefaults": "Domyślne ustawienia kombinacji", - "fallbackChains": "Łańcuchy rezerwowe", + "requestBodyLimitDescription": "Maksymalny rozmiar payload API akceptowany przed sparsowaniem request body. Dedykowane upload routes zachowują co najmniej swój wbudowany limit 100 MB.", + "requestBodyLimitInputLabel": "Limit Request Body w MB", + "requestBodyLimitEmptyError": "Wprowadź limit w MB", + "requestBodyLimitWholeNumberError": "Wprowadź liczbę całkowitą", + "requestBodyLimitMinimumError": "Minimum to {min} MB", + "requestBodyLimitMaximumError": "Maksimum to {max} MB", + "requestBodyLimitLoadFailed": "Nie udało się załadować ustawień limitu Request Body", + "requestBodyLimitSaveSuccess": "Zapisano limit Request Body", + "requestBodyLimitSaveFailed": "Nie udało się zapisać limitu Request Body", + "requestBodyLimitSaving": "Zapisywanie...", + "requestBodyLimitSave": "Zapisz", + "requestBodyLimitCurrent": "Aktualnie: {value}", + "mitmProxy": "MITM Proxy", + "pricing": "Pricing", + "storage": "Storage", + "policies": "Policies", + "ipFilter": "IP Filter", + "comboDefaults": "Ustawienia domyślne combo", + "fallbackChains": "Łańcuchy fallback", "changePassword": "Zmień hasło", "enablePassword": "Włącz hasło", - "darkMode": "Tryb ciemny", - "lightMode": "Tryb światła", + "darkMode": "Dark Mode", + "lightMode": "Light Mode", "memoryTitle": "Memory", - "memoryDesc": "Persistent cross-session conversational memory", - "memoryEnabled": "Enable Memory", - "memoryEnabledDesc": "When enabled, OmniRoute will inject relevant past context.", - "memoryTokenCostWarning": "__MISSING__:Heads up: with memory enabled, OmniRoute injects up to {tokens} tokens of retrieved context into every chat request — this increases token usage and cost. To skip injection for a specific request, send the \"x-omniroute-no-memory: true\" header.", - "maxTokens": "Max Tokens", - "retentionDays": "Retention", - "recent": "Recent", - "recentDesc": "Chronological window", - "semantic": "Semantic", - "semanticDesc": "Vector search", - "hybrid": "Hybrid", - "hybridDesc": "Recent + Semantic", + "memoryDesc": "Trwała pamięć konwersacyjna między sesjami", + "memoryEnabled": "Włącz Memory", + "memoryEnabledDesc": "Po włączeniu OmniRoute wstrzyknie odpowiedni przeszły kontekst.", + "memoryTokenCostWarning": "Uwaga: przy włączonej pamięci OmniRoute wstrzykuje do {tokens} tokens pobranego kontekstu do każdego żądania czatu — zwiększa to zużycie tokens i koszty. Aby pominąć wstrzykiwanie dla określonego żądania, wyślij nagłówek \"x-omniroute-no-memory: true\".", + "maxTokens": "Maksymalna liczba tokens", + "retentionDays": "Retencja", + "recent": "Ostatnie", + "recentDesc": "Okno chronologiczne", + "semantic": "Semantyczne", + "semanticDesc": "Wyszukiwanie wektorowe", + "hybrid": "Hybrydowe", + "hybridDesc": "Ostatnie + Semantyczne", "skillsTitle": "Skills", - "skillsDesc": "Tools for models", - "skillsEnabled": "Enable Skills", - "skillsEnabledDesc": "Allows agents to trigger functions.", - "skillsComingSoon": "Skills marketplace coming soon.", - "memorySkillsTitle": "Memory & Skills", - "memorySkillsDesc": "Persistent context & capabilities", - "modelsDevTitle": "Model Database", - "modelsDevDesc": "Auto-sync pricing, capabilities & specs from models.dev", - "modelsDevEnabled": "Enable models.dev Sync", - "modelsDevEnabledDesc": "Fetch model pricing, capabilities, and specs from the open-source models.dev database", - "modelsDevInterval": "Sync Interval", - "syncNow": "Sync Now", - "syncing": "Syncing...", - "lastSync": "Last sync", - "never": "Never", - "justNow": "właśnie teraz", - "modelsDevStats": "Sync Statistics", - "modelsDevStatsDesc": "Current models.dev data coverage", - "providers": "Dostawcy", - "modelsWithPricing": "Models with Pricing", - "capabilities": "Capabilities", - "lastSyncCount": "Last Sync Count", - "lastSyncFull": "Last full sync", - "modelsDevInfo": "How It Works", - "modelsDevInfoDesc": "models.dev is an open-source database of AI model specifications maintained by the SST/OpenCode team. It provides pricing, capabilities, context limits, and modalities for 4,000+ models across 100+ providers.", - "modelsDevInfoResolution": "Pricing resolution order (highest priority first):", + "skillsDesc": "Narzędzia dla models", + "skillsEnabled": "Włącz Skills", + "skillsEnabledDesc": "Umożliwia agentom wywoływanie funkcji.", + "skillsComingSoon": "Skills marketplace już wkrótce.", + "memorySkillsTitle": "Memory i Skills", + "memorySkillsDesc": "Trwały kontekst i możliwości", + "modelsDevTitle": "Baza danych models", + "modelsDevDesc": "Automatyczna synchronizacja cenników, możliwości i specyfikacji z models.dev", + "modelsDevEnabled": "Włącz synchronizację z models.dev", + "modelsDevEnabledDesc": "Pobieraj cenniki, możliwości i specyfikacje models z otwartoźródłowej bazy danych models.dev", + "modelsDevInterval": "Interwał synchronizacji", + "syncNow": "Synchronizuj teraz", + "syncing": "Synchronizowanie...", + "lastSync": "Ostatnia synchronizacja", + "never": "Nigdy", + "justNow": "Przed chwilą", + "modelsDevStats": "Statystyki synchronizacji", + "modelsDevStatsDesc": "Aktualne pokrycie danych models.dev", + "providers": "Providers", + "modelsWithPricing": "Models z cennikiem", + "capabilities": "Możliwości (capabilities)", + "lastSyncCount": "Liczba przy ostatniej synchronizacji", + "lastSyncFull": "Ostatnia pełna synchronizacja", + "modelsDevInfo": "Jak to działa", + "modelsDevInfoDesc": "models.dev to otwartoźródłowa baza danych specyfikacji AI models utrzymywana przez zespół SST/OpenCode. Zapewnia informacje o cennikach, możliwościach, limitach kontekstu i modalnościach dla ponad 4000 models u ponad 100 providers.", + "modelsDevInfoResolution": "Kolejność rozstrzygania cenników (od najwyższego priorytetu):", "modelsDevInfoOrder": "User Override → models.dev → LiteLLM → Hardcoded Default", - "systemTheme": "Temat systemu", - "debugToggle": "Enable Debug Mode", - "homePinProviderQuotaToHome": "Pin Information to Home Page", - "homeProviderQuotaLimits": "Provider Quota Limits", - "homeProviderQuotaLimitsDesc": "Pin the Provider Quota status container (with Refresh All button) to the top of the Home page.", - "homeQuickStart": "Quick Start", - "homeQuickStartDesc": "Show the Quick Start panel on the Home page.", - "homeProviderTopology": "Provider Topology", - "homeProviderTopologyDesc": "Show the Provider Topology on the Home page.", - "accountEmailVisibility": "__MISSING__:Account email visibility", - "accountEmailVisibilityDesc": "__MISSING__:Show full account emails across providers, combos, logs, quota, and playground screens. Turn this off to mask them by default.", - "sidebarVisibilityToggle": "Show Sidebar Items", - "enableCache": "Włącz pamięć podręczną", - "cacheTTL": "Pamięć podręczna TTL", - "maxCacheSize": "Maksymalny rozmiar pamięci podręcznej", - "clearCache": "Wyczyść pamięć podręczną", - "cacheCleared": "Cache cleared successfully", - "clearCacheFailed": "Failed to clear cache", - "cacheHits": "Trafienia w pamięci podręcznej", - "cacheMisses": "Brak pamięci podręcznej", + "systemTheme": "Motyw systemowy", + "debugToggle": "Włącz tryb debugowania", + "logToolSourcesToggle": "Rejestruj źródła narzędzi (Log Tool Sources)", + "logToolSourcesDescription": "Emituje diagnostyczną linię dziennika dla każdego żądania, podsumowującą liczbę narzędzi oraz podział na źródła MCP/hosted/client.", + "homePinProviderQuotaToHome": "Przypnij informacje do strony głównej", + "homeProviderQuotaLimits": "Limity quota dla Provider", + "homeProviderQuotaLimitsDesc": "Przypnij kontener stanu Provider Quota (z przyciskiem Odśwież wszystko) na górze strony głównej.", + "homeQuickStart": "Szybki start", + "homeQuickStartDesc": "Pokaż panel Szybki start na stronie głównej.", + "homeProviderTopology": "Topologia Provider", + "homeProviderTopologyDesc": "Pokaż Topologię Provider na stronie głównej.", + "accountEmailVisibility": "Widoczność e-mail konta", + "accountEmailVisibilityDesc": "Wyświetlanie pełnych adresów e-mail kont w widokach providers, combos, logów, quota i playground. Wyłączenie tej opcji spowoduje ich domyślne maskowanie.", + "sidebarVisibilityToggle": "Pokaż elementy paska bocznego", + "enableCache": "Włącz cache", + "cacheTTL": "Cache TTL", + "maxCacheSize": "Maksymalny rozmiar cache", + "clearCache": "Wyczyść cache", + "cacheCleared": "Pomyślnie wyczyszczono cache", + "clearCacheFailed": "Nie udało się wyczyścić cache", + "cacheHits": "Trafienia cache", + "cacheMisses": "Chybienia cache", "hitRate": "Współczynnik trafień", - "cacheEntries": "Wpisy w pamięci podręcznej", - "cacheSettings": "Cache Settings", - "semanticCache": "Semantic Cache", - "maxEntries": "Max Entries", - "ttlMinutes": "TTL (minutes)", - "promptCache": "Natychmiastowa pamięć podręczna", - "strategy": "Strategy", - "preserveClientCache": "Preserve Client Cache", - "enabled": "Enabled", - "loading": "Loading...", + "cacheEntries": "Wpisy cache", + "cacheSettings": "Ustawienia cache", + "semanticCache": "Cache semantyczny", + "maxEntries": "Maksymalna liczba wpisów", + "ttlMinutes": "TTL (minuty)", + "promptCache": "Prompt cache", + "strategy": "Strategia", + "preserveClientCache": "Zachowaj cache klienta", + "enabled": "Włączone", + "loading": "Ładowanie…", "saving": "Zapisywanie...", - "save": "Save", - "circuitBreaker": "Wyłącznik automatyczny", - "retryPolicy": "Zasady ponawiania prób", + "save": "Zapisz", + "circuitBreaker": "Circuit Breaker", + "retryPolicy": "Polityka ponownych prób", "maxRetries": "Maksymalna liczba ponownych prób", - "retryDelay": "Opóźnienie ponownej próby", - "timeoutMs": "Limit czasu (ms)", - "enableSystemPrompt": "Włącz monit systemowy", - "systemPromptText": "Tekst monitu systemowego", - "autoDisableBannedAccounts": "Auto-Disable Banned Accounts", - "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", - "autoDisableThreshold": "Ban Threshold", - "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "customBannedSignals": "__MISSING__:Banned Keywords", - "customBannedSignalsDesc": "__MISSING__:Additional keywords that trigger permanent account ban detection. Built-in keywords always apply.", - "customBannedSignalsPlaceholder": "__MISSING__:e.g. api key revoked", - "noCustomBannedSignals": "__MISSING__:No custom keywords. Only built-in keywords are active.", + "retryDelay": "Opóźnienie ponownych prób", + "timeoutMs": "Timeout (ms)", + "enableSystemPrompt": "Włącz prompt systemowy", + "systemPromptText": "Tekst promptu systemowego", + "autoDisableBannedAccounts": "Automatyczne wyłączanie zablokowanych kont", + "autoDisableDescription": "Trwałe oznaczanie połączeń provider jako dezaktywowane, jeśli zwrócą one określone końcowe sygnały blokady (np. HTTP 403 'verify your account'). Spowoduje to usunięcie ich z rotacji combo.", + "autoDisableThreshold": "Próg blokady", + "autoDisableThresholdDesc": "Liczba kolejnych sygnałów blokady wymagana do trwałej dezaktywacji.", + "customBannedSignals": "Zablokowane słowa kluczowe", + "customBannedSignalsDesc": "Dodatkowe słowa kluczowe wyzwalające wykrywanie trwałej blokady konta. Wbudowane słowa kluczowe mają zawsze zastosowanie.", + "customBannedSignalsPlaceholder": "np. api key revoked", + "noCustomBannedSignals": "Brak niestandardowych słów kluczowych. Aktywne są tylko wbudowane słowa kluczowe.", "resilienceStructureTitle": "Resilience Structure", - "resilienceStructureDesc": "Ta strona służy jedynie do konfiguracji zachowania. Stan wyłącznika na żywo jest wyświetlany na stronie Stan. Ponowne próby specyficzne dla kombinacji i kontrola szczeliny okrężnej pozostają w ustawieniach kombinacji.", - "enableThinking": "Włącz myślenie", - "maxThinkingTokens": "Żetony Max Thinking", - "enableProxy": "Włącz serwer proxy", - "perKeyProxyEnabled": "__MISSING__:Enable per-key proxy assignment", - "perKeyProxyEnabledDesc": "__MISSING__:When enabled, each provider connection can use its own proxy assignment", - "proxyUrl": "Adres URL serwera proxy", - "pricingRates": "Format stawek cenowych", - "currentPricing": "Aktualny przegląd cen", - "loadingPricing": "Ładowanie danych cenowych...", - "noPricing": "Brak danych o cenach", + "resilienceStructureDesc": "Ta strona służy wyłącznie do konfiguracji zachowania. Bieżący stan circuit breaker jest wyświetlany na stronie Health. Konfiguracja retry specyficzna dla combo oraz sterowanie slotami round-robin pozostają w ustawieniach combo.", + "enableThinking": "Włącz thinking", + "maxThinkingTokens": "Maksymalna liczba thinking tokens", + "enableProxy": "Włącz proxy", + "perKeyProxyEnabled": "Włącz przypisywanie proxy do każdego klucza", + "perKeyProxyEnabledDesc": "Po włączeniu każde połączenie provider może używać własnego przypisanego proxy.", + "proxyUrl": "URL proxy", + "pricingRates": "Format stawek cennika", + "currentPricing": "Przegląd aktualnego cennika", + "loadingPricing": "Ładowanie danych cennika...", + "noPricing": "Brak dostępnych danych cennika", "input": "Wejście", "output": "Wyjście", - "cached": "Buforowane", - "reasoning": "Rozumowanie", - "cacheCreation": "Tworzenie pamięci podręcznej", - "customPricing": "Ceny niestandardowe", + "cached": "Z cache", + "reasoning": "Reasoning", + "cacheCreation": "Tworzenie cache", + "customPricing": "Cennik niestandardowy", "databaseSize": "Rozmiar bazy danych", "backupDb": "Kopia zapasowa bazy danych", "restoreDb": "Przywróć bazę danych", "exportData": "Eksportuj dane", "importData": "Importuj dane", "clearData": "Wyczyść wszystkie dane", - "clearDataConfirm": "Spowoduje to trwałe usunięcie wszystkich danych. Czy jesteś pewien?", - "enableRequestLogs": "Włącz dzienniki żądań", - "logRetention": "Przechowywanie dziennika", - "ipWhitelist": "Biała lista adresów IP", - "ipBlacklist": "Czarna lista adresów IP", - "addIP": "Dodaj adres IP", - "savedSuccessfully": "Ustawienia zostały zapisane pomyślnie", - "ai": "sztuczna inteligencja", + "clearDataConfirm": "Spowoduje to trwałe usunięcie wszystkich danych. Czy na pewno chcesz kontynuować?", + "enableRequestLogs": "Włącz logi żądań", + "logRetention": "Retencja logów", + "ipWhitelist": "Biała lista IP", + "ipBlacklist": "Czarna lista IP", + "addIP": "Dodaj IP", + "savedSuccessfully": "Pomyślnie zapisano ustawienia", + "ai": "AI", "advanced": "Zaawansowane", - "localMode": "Tryb lokalny — wszystkie dane przechowywane na Twoim komputerze", + "localMode": "Tryb lokalny — wszystkie dane są przechowywane na tym urządzeniu", "settingsSectionsAria": "Sekcje ustawień", - "switchThemes": "Przełączaj między jasnymi i ciemnymi motywami", - "themeSelectionAria": "Wybór tematu", - "themeLight": "Światło", + "switchThemes": "Przełączanie między motywem jasnym a ciemnym", + "themeSelectionAria": "Wybór motywu", + "themeLight": "Jasny", "themeDark": "Ciemny", - "themeSystem": "Systemu", - "endpointTunnelVisibility": "Widoczność tunelu końcowego", - "endpointTunnelVisibilityDesc": "Ukryj kontrolki tunelu na stronie Punkt końcowy bez zmiany stanu tunelu.", - "showCloudflareTunnel": "Szybki tunel Cloudflare", - "showCloudflareTunnelDesc": "Pokaż elementy sterujące szybkiego tunelu Cloudflare na stronie Punkt końcowy.", - "showTailscaleFunnel": "Lejek z łuską ogonową", - "showTailscaleFunnelDesc": "Pokaż elementy sterujące Lejka ze skalą ogonową na stronie Punkt końcowy.", - "showNgrokTunnel": "Tunel Ngrok", - "showNgrokTunnelDesc": "Pokaż elementy sterujące tunelu ngrok na stronie Punkt końcowy.", - "sidebarVisibility": "Hide sidebar items", - "sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.", - "sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...", - "hideHealthLogs": "Ukryj dzienniki kontroli stanu", - "hideHealthLogsDesc": "Gdy opcja jest włączona, pomiń komunikaty [HealthCheck] w konsoli serwera", + "themeSystem": "Systemowy", + "endpointTunnelVisibility": "Widoczność tunelu endpoint", + "endpointTunnelVisibilityDesc": "Ukrywanie kontrolek tunelu na stronie Endpoint bez zmiany stanu tunelu.", + "showCloudflareTunnel": "Cloudflare Quick Tunnel", + "showCloudflareTunnelDesc": "Pokaż kontrolki Cloudflare Quick Tunnel na stronie Endpoint.", + "showTailscaleFunnel": "Tailscale Funnel", + "showTailscaleFunnelDesc": "Pokaż kontrolki Tailscale Funnel na stronie Endpoint.", + "showNgrokTunnel": "ngrok Tunnel", + "showNgrokTunnelDesc": "Pokaż kontrolki ngrok Tunnel na stronie Endpoint.", + "sidebarVisibility": "Ukryj elementy paska bocznego", + "sidebarVisibilityDesc": "Ukrywanie dowolnej pozycji nawigacji paska bocznego w celu zmniejszenia natłoku informacji wizualnych, bez wyłączania jakichkolwiek funkcji.", + "sidebarVisibilityHint": "Dowolna sekcja paska bocznego jest ukrywana automatycznie, gdy wszystkie jej pozycje zostaną ukryte.", + "hideHealthLogs": "Ukryj logi Health Check", + "hideHealthLogsDesc": "Gdy włączone, ukrywaj komunikaty [HealthCheck] w konsoli serwera.", "themeAccent": "Kolor motywu", - "themeAccentDesc": "Wybierz gotowy kolor lub utwórz własny motyw z jednego koloru", + "themeAccentDesc": "Wybierz gotowy kolor lub utwórz własny motyw oparty na jednym kolorze.", "themeCreate": "Utwórz motyw", - "themeCustom": "Motyw niestandardowy", + "themeCustom": "Niestandardowy motyw", "themeBlue": "Niebieski", "themeRed": "Czerwony", "themeGreen": "Zielony", @@ -5098,332 +5207,360 @@ "themeOrange": "Pomarańczowy", "themeCyan": "Cyjan", "whitelabeling": "Branding", - "whitelabelingDesc": "Customize the application name and logo", - "appName": "Application Name", - "appNameDesc": "Display name shown in sidebar and browser tab", - "customLogo": "Custom Logo URL", - "customLogoDesc": "URL to your custom logo image", - "uploadLogo": "Upload Logo", - "resetLogo": "Reset to Default", - "logoPreview": "Preview", - "customFavicon": "Browser Favicon", - "customFaviconDesc": "URL to your custom favicon (shown in browser tab)", - "uploadFavicon": "Upload Favicon", - "resetFavicon": "Reset Favicon", - "faviconPreview": "Favicon Preview", - "flushCache": "Opróżnij pamięć podręczną", - "flushing": "Płukanie…", + "whitelabelingDesc": "Dostosowywanie nazwy i logo aplikacji.", + "appName": "Nazwa aplikacji", + "appNameDesc": "Nazwa wyświetlana na pasku bocznym i karcie przeglądarki.", + "customLogo": "URL niestandardowego logo", + "customLogoDesc": "URL do niestandardowego obrazu logo.", + "uploadLogo": "Prześlij logo", + "resetLogo": "Przywróć domyślne", + "logoPreview": "Podgląd", + "customFavicon": "Favicon przeglądarki", + "customFaviconDesc": "URL do niestandardowej ikony favicon (wyświetlanej na karcie przeglądarki).", + "uploadFavicon": "Prześlij favicon", + "resetFavicon": "Resetuj favicon", + "faviconPreview": "Podgląd favicon", + "flushCache": "Opróżnij cache", + "flushing": "Opróżnianie…", "size": "Rozmiar", - "hits": "Hity", - "evictions": "Eksmisje", - "loadingCacheStats": "Ładowanie statystyk pamięci podręcznej…", - "globalProxy": "Globalny pełnomocnik", - "globalProxyDesc": "Skonfiguruj globalny wychodzący serwer proxy dla wszystkich wywołań API. Poszczególni dostawcy, kombinacje i klucze mogą to zastąpić.", - "noGlobalProxy": "Nie skonfigurowano globalnego serwera proxy", - "proxyPool": "__MISSING__:Proxy Pool", - "freePool": "__MISSING__:Free Pool", - "proxyDocumentation": "__MISSING__:Proxy Documentation", - "proxyGlobalConfigTab": "__MISSING__:Global Config", - "proxyPoolTab": "__MISSING__:Proxy Pool", - "freePoolTab": "__MISSING__:Free Pool", - "proxyDocumentationTab": "__MISSING__:Documentation", - "bulkHealthcheck": "Bulk Healthcheck", - "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", - "healthcheckTesting": "Testing...", - "healthcheckAll": "Healthcheck All", - "healthcheckFailed": "Failed to run healthcheck", - "healthcheckTestingAll": "Testing all proxies in parallel...", - "healthcheckTotal": "Total", - "healthcheckWorking": "Working", - "healthcheckFailedLabel": "Failed", + "hits": "Trafienia", + "evictions": "Usunięcia", + "loadingCacheStats": "Loading cache stats…", + "globalProxy": "Globalne proxy", + "globalProxyDesc": "Konfiguracja globalnego proxy wychodzącego dla wszystkich wywołań API. Poszczególni providers, combos i klucze mogą to nadpisać.", + "noGlobalProxy": "Brak skonfigurowanego globalnego proxy", + "proxyPool": "Pula proxy", + "freePool": "Darmowa pula", + "proxyDocumentation": "Dokumentacja proxy", + "proxyGlobalConfigTab": "Konfiguracja globalna", + "proxyPoolTab": "Pula proxy", + "freePoolTab": "Darmowa pula", + "proxyDocumentationTab": "Dokumentacja", + "bulkHealthcheck": "Zbiorczy Healthcheck", + "bulkHealthcheckDesc": "Testowanie wszystkich skonfigurowanych proxy pod kątem docelowego URL w celu znalezienia działających.", + "healthcheckTesting": "Testowanie...", + "healthcheckAll": "Wykonaj Healthcheck dla wszystkich", + "healthcheckFailed": "Nie udało się uruchomić Healthcheck", + "healthcheckTestingAll": "Testowanie wszystkich proxy równolegle...", + "healthcheckTotal": "Razem", + "healthcheckWorking": "Działające", + "healthcheckFailedLabel": "Nieudane", "healthcheckStatus": "Status", - "healthcheckProxyUrl": "Proxy URL", - "healthcheckLatency": "Latency", - "proxyDocumentationScopeTitle": "__MISSING__:Proxy scope resolution", - "proxyDocumentationScopeDescBefore": "__MISSING__:OmniRoute resolves the outbound proxy in priority order:", - "proxyDocumentationScopeOrder": "__MISSING__:combo → account → provider → global", - "proxyDocumentationScopeDescAfter": "__MISSING__:. The most specific scope wins.", - "proxyDocumentationAddTitle": "__MISSING__:Adding a custom proxy", - "proxyDocumentationAddDescBefore": "__MISSING__:Go to the", - "proxyDocumentationAddDescMiddle": "__MISSING__: tab → click", - "proxyDocumentationAddCta": "__MISSING__:+ Add proxy", - "proxyDocumentationAddDescAfter": "__MISSING__:. Fill in type (http/https/socks5), host, and port. Optionally assign it to a scope.", - "proxyDocumentationBulkTitle": "__MISSING__:Bulk import format", - "proxyDocumentationBulkDesc": "__MISSING__:Pipe-delimited fields:", - "proxyDocumentationSocks5DescBefore": "__MISSING__:SOCKS5 proxies are disabled by default. Set", - "proxyDocumentationFreePoolDesc": "__MISSING__:The Free Pool tab aggregates proxies from 1proxy, Proxifly, and IPLocate. Use ⊕ to test and promote a proxy to your registry. Only proxies that pass the connectivity test are added.", - "proxyDocumentationVercelRelayDescBefore": "__MISSING__:The Vercel Relay is an outbound edge relay — not an inbound tunnel. Deploying one sends LLM API calls through Vercel's dynamic IPs, bypassing datacenter geo-blocks and rate limits. The relay is protected by a generated secret header", - "proxyDocumentationVercelRelayDescAfter": "__MISSING__:Your Vercel token is used only during deploy and is never stored.", - "vercelRelayTokenRequired": "__MISSING__:Token is required", - "vercelRelayDeployFailed": "__MISSING__:Deploy failed", - "vercelRelayTokenHint": "__MISSING__:Token is used only during deploy — never stored.", - "denoRelayTokenRequired": "__MISSING__:Deno Deploy token is required", - "denoRelayOrgDomainRequired": "__MISSING__:Organization domain is required", - "denoRelayDeployFailed": "__MISSING__:Deno Deploy failed", - "denoRelayTokenHint": "__MISSING__:Organization token (prefix ddo_) from console.deno.com → Organization → Settings → Organization Tokens. Used once for deploy and never stored.", - "denoRelayOrgDomainHint": "__MISSING__:Your Deno Deploy organization's default domain (e.g. acme.deno.net). The relay will be reachable at https://..deno.net.", - "proxyFreePoolFilterProtocol": "__MISSING__:Filter by protocol", - "proxyFreePoolProtocol": "__MISSING__:Protocol", - "proxyFreePoolCountryPlaceholder": "__MISSING__:Country (e.g. US)", - "proxyFreePoolFilterCountry": "__MISSING__:Filter by country", - "proxyFreePoolMinQualityPlaceholder": "__MISSING__:Min quality", - "proxyFreePoolMinQualityLabel": "__MISSING__:Minimum quality score", - "proxyFreePoolSyncAll": "__MISSING__:Sync All", - "proxyFreePoolTotal": "__MISSING__:Total", - "proxyFreePoolInPool": "__MISSING__:In pool", - "proxyFreePoolAvgQuality": "__MISSING__:Avg quality", - "proxyFreePoolSelected": "__MISSING__:{count} selected", - "proxyFreePoolAddSelected": "__MISSING__:Add selected to pool", - "proxyFreePoolAddVisible": "__MISSING__:Add all visible to pool", - "proxyFreePoolSource": "__MISSING__:Source", - "proxyFreePoolHostPort": "__MISSING__:Host:Port", - "proxyFreePoolType": "__MISSING__:Type", - "proxyFreePoolCountry": "__MISSING__:Country", - "proxyFreePoolQuality": "__MISSING__:Quality", - "proxyFreePoolLatency": "__MISSING__:Latency", - "proxyFreePoolEmpty": "__MISSING__:No proxies found. Click Sync All to fetch from sources.", - "close": "__MISSING__:Close", - "cancel": "__MISSING__:Cancel", - "globalLabel": "Globalny", - "configure": "Skonfiguruj", - "globalSystemPrompt": "Monit systemu globalnego", + "healthcheckProxyUrl": "URL proxy", + "healthcheckLatency": "Opóźnienie", + "proxyDocumentationScopeTitle": "Rozstrzyganie zakresu proxy", + "proxyDocumentationScopeDescBefore": "OmniRoute ustala proxy wychodzące w kolejności priorytetów:", + "proxyDocumentationScopeOrder": "combo → account → provider → global", + "proxyDocumentationScopeDescAfter": ". Wygrywa najbardziej szczegółowy zakres.", + "proxyDocumentationAddTitle": "Dodawanie niestandardowego proxy", + "proxyDocumentationAddDescBefore": "Przejdź do zakładki", + "proxyDocumentationAddDescMiddle": "→ kliknij", + "proxyDocumentationAddCta": "+ Dodaj proxy", + "proxyDocumentationAddDescAfter": ". Wprowadź typ (http/https/socks5), host oraz port. Opcjonalnie przypisz go do zakresu.", + "proxyDocumentationBulkTitle": "Format masowego importu", + "proxyDocumentationBulkDesc": "Pola rozdzielane znakiem pionowej kreski (pipe):", + "proxyDocumentationSocks5DescBefore": "Serwery proxy SOCKS5 są domyślnie wyłączone. Ustaw", + "proxyDocumentationFreePoolDesc": "Zakładka Free Pool agreguje serwery proxy z 1proxy, Proxifly oraz IPLocate. Użyj ⊕, aby przetestować i przenieść proxy do rejestru. Dodawane są tylko te serwery proxy, które przejdą test łączności.", + "proxyDocumentationVercelRelayDescBefore": "Vercel Relay to wyjściowy przekaźnik brzegowy (edge relay) — nie tunel wejściowy. Wdrożenie go powoduje wysyłanie wywołań API LLM przez dynamiczne adresy IP Vercel, co pozwala ominąć blokady geograficzne centrów danych i ograniczenia rate limit. Przekaźnik jest chroniony wygenerowanym nagłówkiem z sekretem.", + "proxyDocumentationVercelRelayDescAfter": "Token Vercel jest używany wyłącznie podczas wdrażania i nigdy nie jest przechowywany.", + "vercelRelayTokenRequired": "Token jest wymagany", + "vercelRelayDeployFailed": "Wdrożenie nie powiodło się", + "vercelRelayTokenHint": "Token jest używany wyłącznie podczas wdrażania — nigdy nie jest przechowywany.", + "denoRelayTokenRequired": "Token Deno Deploy jest wymagany", + "denoRelayOrgDomainRequired": "Domena organizacji jest wymagana", + "denoRelayDeployFailed": "Deno Deploy nie powiodło się", + "denoRelayTokenHint": "Token organizacji (z prefiksem ddo_) z console.deno.com → Organization → Settings → Organization Tokens. Używany jednorazowo do wdrożenia i nigdy nieprzechowywany.", + "denoRelayOrgDomainHint": "Domyślna domena organizacji w Deno Deploy (np. acme.deno.net). Przekaźnik będzie dostępny pod adresem https://..deno.net.", + "proxyFreePoolFilterProtocol": "Filtruj według protokołu", + "proxyFreePoolProtocol": "Protokół", + "proxyFreePoolCountryPlaceholder": "Kraj (np. US)", + "proxyFreePoolFilterCountry": "Filtruj według kraju", + "proxyFreePoolMinQualityPlaceholder": "Minimalna jakość", + "proxyFreePoolMinQualityLabel": "Minimalna ocena jakości", + "proxyFreePoolSyncAll": "Synchronizuj wszystko", + "proxyFreePoolTotal": "Razem", + "proxyFreePoolInPool": "W puli", + "proxyFreePoolAvgQuality": "Średnia jakość", + "proxyFreePoolSelected": "Wybrano {count}", + "proxyFreePoolAddSelected": "Dodaj wybrane do puli", + "proxyFreePoolAddVisible": "Dodaj wszystkie widoczne do puli", + "proxyFreePoolSource": "Źródło", + "proxyFreePoolHostPort": "Host:Port", + "proxyFreePoolType": "Typ", + "proxyFreePoolCountry": "Kraj", + "proxyFreePoolQuality": "Jakość", + "proxyFreePoolLatency": "Opóźnienie", + "proxyFreePoolEmpty": "Nie znaleziono żadnych serwerów proxy. Kliknij Synchronizuj wszystko, aby pobrać dane ze źródeł.", + "proxyFreePoolSearchPlaceholder": "Szukaj hosta…", + "proxyFreePoolSearchLabel": "Wyszukaj proxy według hosta", + "proxyFreePoolSortLabel": "Sortuj proxy", + "proxyFreePoolSortQuality": "Jakość", + "proxyFreePoolSortLatency": "Opóźnienie", + "proxyFreePoolSortRecent": "Ostatnio zweryfikowane", + "proxyFreePoolListTotal": "Na liście", + "proxyFreePoolLoadMore": "Załaduj więcej", + "close": "Zamknij", + "cancel": "Anuluj", + "globalLabel": "Globalne", + "configure": "Konfiguruj", + "globalSystemPrompt": "Globalny prompt systemowy", "saved": "Zapisano", - "beforePromptLabel": "__MISSING__:Before Prompt", - "beforePromptDesc": "__MISSING__:Injected before agent/provider system instructions", - "beforePromptPlaceholder": "__MISSING__:Instructions inserted before agent/provider prompt...", - "afterPromptLabel": "__MISSING__:After Prompt", - "afterPromptDesc": "__MISSING__:Injected after agent/provider system instructions", - "afterPromptPlaceholder": "__MISSING__:Instructions inserted after agent/provider prompt...", + "beforePromptLabel": "Przed promptem", + "beforePromptDesc": "Wstrzykiwane przed instrukcjami systemowymi agenta/provider.", + "beforePromptPlaceholder": "Instrukcje wstawiane przed promptem agenta/provider...", + "afterPromptLabel": "Po prompcie", + "afterPromptDesc": "Wstrzykiwane po instrukcjach systemowych agenta/provider.", + "afterPromptPlaceholder": "Instrukcje wstawiane po prompcie agenta/provider...", "chars": "{count} znaków", - "thinkingBudgetTitle": "Myślący budżet", - "thinkingBudgetDesc": "Kontroluj użycie tokenu wnioskowania AI we wszystkich żądaniach", - "passthrough": "Przejście", - "passthroughDesc": "Żadnych zmian – klient kontroluje myślenie o budżecie", - "auto": "Automat", - "autoDesc": "Pozbądź się całej konfiguracji myślenia — pozwól dostawcy zdecydować", - "custom": "Niestandardowe", - "customDesc": "Ustaw stały budżet tokenów dla wszystkich żądań", + "thinkingBudgetTitle": "Budżet na thinking", + "thinkingBudgetDesc": "Kontrolowanie zużycia tokens reasoning AI we wszystkich żądaniach.", + "passthrough": "Passthrough", + "passthroughDesc": "Brak zmian — klient kontroluje budżet na thinking.", + "auto": "Auto Combo", + "autoDesc": "Samonaprawiająca się pula inteligentnego routingu (zoptymalizowana pod kątem wydajności)", + "custom": "Niestandardowy", + "customDesc": "Ustawienie stałego budżetu tokens dla wszystkich żądań.", "adaptive": "Adaptacyjny", - "adaptiveDesc": "Skaluj budżet w oparciu o złożoność żądania", - "effortNone": "Brak (0 tokenów)", - "effortLow": "Niski (1 tys. tokenów)", - "effortMedium": "Średni (10 tys. tokenów)", - "effortHigh": "Wysoki (128 tys. tokenów)", - "tokenBudget": "Budżet tokenowy", - "tokens": "żetony", - "baseEffortLevel": "Podstawowy poziom wysiłku", - "adaptiveHint": "Tryb adaptacyjny skaluje się od tego poziomu podstawowego w oparciu o liczbę komunikatów, użycie narzędzia i długość podpowiedzi.", + "adaptiveDesc": "Skalowanie budżetu na podstawie złożoności żądania.", + "effortNone": "Brak (0 tokens)", + "effortLow": "Niski (1K tokens)", + "effortMedium": "Średni (10K tokens)", + "effortHigh": "Wysoki (128K tokens)", + "tokenBudget": "Budżet tokens", + "tokens": "tokens", + "baseEffortLevel": "Bazowy poziom wysiłku", + "adaptiveHint": "Tryb adaptacyjny skaluje się od tego poziomu bazowego na podstawie liczby komunikatów, użycia narzędzi oraz długości promptu.", "requireLogin": "Wymagaj logowania", - "requireLoginDesc": "Po włączeniu pulpit nawigacyjny wymaga hasła. Gdy WYŁ., dostęp bez logowania.", + "requireLoginDesc": "Gdy włączone, dashboard wymaga hasła. Gdy wyłączone, dostęp bez logowania.", "currentPassword": "Aktualne hasło", "enterCurrentPassword": "Wprowadź aktualne hasło", "newPassword": "Nowe hasło", "enterNewPassword": "Wprowadź nowe hasło", "confirmPassword": "Potwierdź nowe hasło", "confirmPasswordPlaceholder": "Potwierdź nowe hasło", - "passwordsNoMatch": "Hasła nie pasują", + "passwordsNoMatch": "Hasła są niezgodne", "passwordUpdated": "Hasło zostało pomyślnie zaktualizowane", "failedUpdatePassword": "Nie udało się zaktualizować hasła", "errorOccurred": "Wystąpił błąd", - "updatePassword": "Zaktualizuj hasło", + "updatePassword": "Aktualizuj hasło", "setPassword": "Ustaw hasło", - "apiEndpointProtection": "Ochrona punktów końcowych API", - "requireAuthModels": "Wymagaj klucza API dla /models", - "requireAuthModelsDesc": "Po włączeniu punkt końcowy /v1/models zwraca 404 dla nieuwierzytelnionych żądań. Zapobiega odkrywaniu modelu przez nieautoryzowanych użytkowników.", + "apiEndpointProtection": "Ochrona API endpoint", + "requireAuthModels": "Wymagaj API key dla /models", + "requireAuthModelsDesc": "Gdy włączone, endpoint /v1/models zwraca 404 dla nieuwierzytelnionych żądań. Zapobiega wykrywaniu models przez nieautoryzowanych użytkowników.", "authModelHeading": "Aktywny model autoryzacji", - "authModelClient": "Punkty końcowe interfejsu API klienta (/v1/*, /chat/*, /responses/*, /codex/*, /messages/*) wymagają klucza API nośnika.", - "authModelManagement": "Punkty końcowe zarządzania (/dashboard, /api/*) wymagają sesji pulpitu nawigacyjnego lub poświadczeń zarządzania.", - "authModelPublic": "Publiczne są tylko trasy logowania, stanu zdrowia i ładowania początkowego.", - "bruteForceProtection": "Ochrona przed brutalną siłą logowania", - "bruteForceProtectionDesc": "Ogranicz i zablokuj /api/auth/login po powtarzających się błędach z tego samego adresu IP.", - "corsAllowedOrigins": "CORS dozwolone pochodzenie", - "corsAllowedOriginsDesc": "Rozdzielana przecinkami lista źródeł przeglądarek, które mogą łączyć się z tym serwerem. Pusta lista = brak dostępu CORS przeglądarki (serwer-serwer nadal działa). Używaj CORS_ALLOW_ALL=true env var tylko do programowania.", - "blockedProviders": "Zablokowani dostawcy", - "blockedProvidersDesc": "Ukryj określonych dostawców w odpowiedzi /v1/models. Zablokowani dostawcy nie będą wyświetlani na listach modeli.", - "providersBlocked": "{count} dostawcy zablokowani w /models", + "authModelClient": "Klienckie endpoints API (/v1/*, /chat/*, /responses/*, /codex/*, /messages/*) wymagają klucza API Bearer.", + "authModelManagement": "Endpoints zarządzania (/dashboard, /api/*) wymagają sesji dashboard lub poświadczeń zarządzania.", + "authModelPublic": "Tylko trasy login, health i bootstrap są publiczne.", + "bruteForceProtection": "Ochrona przed brute-force przy logowaniu", + "bruteForceProtectionDesc": "Ograniczaj i blokuj /api/auth/login po wielokrotnych nieudanych próbach z tego samego IP.", + "corsAllowedOrigins": "Dozwolone źródła CORS", + "corsAllowedOriginsDesc": "Rozdzielona przecinkami lista źródeł przeglądarki uprawnionych do wywoływania tego serwera. Pusta lista = brak dostępu CORS z przeglądarki (dostęp server-to-server nadal działa). Używaj zmiennej środowiskowej CORS_ALLOW_ALL=true tylko w celach deweloperskich.", + "blockedProviders": "Zablokowane Providers", + "blockedProvidersDesc": "Ukryj określone providers z odpowiedzi /v1/models. Zablokowane providers nie pojawią się na listach model.", + "providersBlocked": "{count} provider(s) zablokowanych w /models", "blockProviderTitle": "Zablokuj {provider}", "unblockProviderTitle": "Odblokuj {provider}", - "cliFingerprint": "CLI Fingerprint Matching", - "cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.", - "cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active", - "enableFingerprintTitle": "Enable fingerprint for {provider}", - "disableFingerprintTitle": "Disable fingerprint for {provider}", - "systemTransforms": "Potok transformacji bloku systemowego", - "systemTransformsDesc": "Potok przekształceń uporządkowany dla poszczególnych dostawców zastosowany do treści żądania przed przekazaniem dalej. Obsługuje dowolny identyfikator dostawcy.", - "systemTransformsAddProvider": "Dodaj dostawcę", - "systemTransformsAddProviderPlaceholder": "Wybierz dostawcę…", - "systemTransformsAddProviderAllConfigured": "Wszyscy dostawcy są już skonfigurowani", - "systemTransformsRemoveProvider": "Usuń dostawcę", - "systemTransformsNoProviders": "Nie skonfigurowano żadnych dostawców. Aby rozpocząć, dodaj dostawcę.", - "systemTransformsOpMoveUp": "Przesuń się w górę", + "cliFingerprint": "Dopasowywanie fingerprint CLI", + "cliFingerprintDesc": "Normalizuj nagłówki żądania i pola body, aby dopasować je do sygnatur oficjalnego narzędzia CLI. Włącz dla każdego provider.", + "cliFingerprintEnabled": "{count} provider(s) z aktywnym fingerprint CLI", + "enableFingerprintTitle": "Włącz fingerprint dla {provider}", + "disableFingerprintTitle": "Wyłącz fingerprint dla {provider}", + "systemTransforms": "Potok transformacji system-block", + "systemTransformsDesc": "Uporządkowany potok transformacji dla każdego provider, stosowany do body żądania przed przekazaniem. Obsługuje dowolne ID provider.", + "systemTransformsAddProvider": "Dodaj provider", + "systemTransformsAddProviderPlaceholder": "Wybierz provider…", + "systemTransformsAddProviderAllConfigured": "Wszystkie providers zostały już skonfigurowane", + "systemTransformsRemoveProvider": "Usuń provider", + "systemTransformsNoProviders": "Brak skonfigurowanych providers. Dodaj provider, aby rozpocząć.", + "systemTransformsOpMoveUp": "Przesuń w górę", "systemTransformsOpMoveDown": "Przesuń w dół", - "systemTransformsOpDelete": "Usuń op", + "systemTransformsOpDelete": "Usuń operację", "routingStrategy": "Strategia routingu", - "routingAdvancedGuideTitle": "Zaawansowane wskazówki dotyczące tras", - "routingAdvancedGuideHint1": "Użyj opcji Fill First, aby uzyskać przewidywalny priorytet, Round Robin, aby zapewnić uczciwość, i P2C, aby zapewnić odporność na opóźnienia.", - "routingAdvancedGuideHint2": "Jeśli dostawcy różnią się jakością/kosztami, zacznij od opcji Koszt w przypadku pracy w tle i opcji Najmniej używane w celu zapewnienia zrównoważonego zużycia.", - "fillFirst": "Najpierw wypełnij", - "fillFirstDesc": "Korzystaj z kont w kolejności priorytetów", - "roundRobin": "Okrągły Robin", - "roundRobinDesc": "Przeglądaj wszystkie konta", + "routingAdvancedGuideTitle": "Zaawansowane wskazówki dotyczące routingu", + "routingAdvancedGuideHint1": "Ta strategia jest synchronizowana zarówno z nowymi domyślnymi ustawieniami combo, jak i globalnym fallback routingiem kont.", + "routingAdvancedGuideHint2": "Użyj Fill First dla przewidywalnego priorytetu kont, Round Robin oraz Sticky Limit dla pakietów kont, a także P2C dla odporności na opóźnienia.", + "fillFirst": "Fill First", + "fillFirstDesc": "Używaj kont w kolejności priorytetu", + "roundRobin": "Round Robin", + "roundRobinDesc": "Cykliczne przechodzenie przez wszystkie konta", "p2c": "P2C", - "p2cDesc": "Wybierz 2 losowo i użyj zdrowszego", - "random": "Losowe", - "randomDesc": "Losowe konto na każde żądanie", - "leastUsed": "Najrzadziej używany", - "leastUsedDesc": "Wybierz ostatnio używane konto", - "costOpt": "Opcja kosztowa", + "p2cDesc": "Wybierz 2 losowe, użyj sprawniejszego", + "random": "Random", + "randomDesc": "Losowe konto dla każdego żądania", + "leastUsed": "Least Used", + "leastUsedDesc": "Wybierz najdawniej używane konto", + "costOpt": "Cost Opt", "costOptDesc": "Preferuj najtańsze dostępne konto", - "resetAware": "Resetowanie RR", - "resetAwareDesc": "Preferuj konta ze zdrowym pozostałym limitem i bliższymi resetami", + "resetAware": "Reset-Aware RR", + "resetAwareDesc": "Preferuj konta ze zdrową pozostałą quota i bliskim czasem resetu", "strictRandom": "Strict Random", - "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling", - "stickyLimit": "Lepki limit", - "stickyLimitDesc": "Połączenia na konto przed zmianą", - "modelAliases": "Aliasy modeli", - "modelAliasesTitle": "Aliasy modeli", - "modelAliasesDesc": "Remap model names using exact matches or wildcard patterns.", + "strictRandomDesc": "Tasowanie talii — używa każdego konta raz przed ponownym przetasowaniem", + "stickyLimit": "Sticky Limit", + "stickyLimitDesc": "Liczba wywołań na konto przed przełączeniem, gdy globalny fallback kont używa Round Robin", + "routingStrategyTitle": "Strategia routingu", + "routingStrategySubtitle": "Zgodność z 9router: round-robin kont, sticky limits i rotacja combo", + "accountRoundRobin": "Round Robin", + "accountRoundRobinDesc": "Cykliczne przechodzenie przez konta w celu dystrybucji obciążenia", + "comboRoundRobin": "Combo Round Robin", + "comboRoundRobinDesc": "Cykliczne przechodzenie przez cele combo zamiast ciągłego rozpoczynania od pierwszego", + "comboStickyLimit": "Combo Sticky Limit", + "comboStickyLimitDesc": "Liczba wywołań na cel combo przed przełączeniem", + "routingStrategyAccountSummary": "Dystrybucja żądań na konta z limitem {limit} wywołań na konto.", + "routingStrategyFillFirstSummary": "Używanie kont w kolejności priorytetu (Fill First).", + "routingStrategyComboSummary": " Combos rotują po {limit} wywołaniach na cel.", + "routingStrategyComboFallbackSummary": " Combos używają skonfigurowanej strategii każdego combo (domyślny priorytet/fallback).", + "providerAccountRoutingTitle": "Routing wielokontowy", + "providerAccountRoutingDesc": "Nadpisz globalną strategię kont dla tego provider (zgodność z 9router).", + "providerRoutingStrategy": "Strategia kont", + "providerRoutingInheritGlobal": "Dziedzicz globalne ustawienie domyślne", + "modelAliases": "Aliasy model", + "modelAliasesTitle": "Aliasy model", + "modelAliasesDesc": "Remapuj nazwy model za pomocą dokładnych dopasowań lub wzorców wildcard.", "addCustomAlias": "Dodaj niestandardowy alias", - "deprecatedModelId": "Przestarzały ID modelu", - "newModelId": "Nowy ID modelu", + "deprecatedModelId": "Przestarzałe ID model", + "newModelId": "Nowe ID model", "customAliases": "Niestandardowe aliasy", "builtInAliases": "Wbudowane aliasy", "backgroundDegradationTitle": "Degradacja zadań w tle", - "backgroundDegradationDesc": "Automatycznie wykrywa zadania w tle (tytuły, streszczenia) i kieruje do tańszych modeli", + "backgroundDegradationDesc": "Automatycznie wykrywaj zadania w tle (tytuły, podsumowania) i kieruj do tańszych models", "enableDegradation": "Włącz degradację zadań w tle", - "enableDegradationHint": "Gdy włączone, zadania w tle, takie jak generowanie tytułów i podsumowań, są automatycznie kierowane do tańszych modeli", + "enableDegradationHint": "Po włączeniu, zadania w tle, takie jak generowanie tytułów i podsumowań, są automatycznie kierowane do tańszych models", "tasksDetected": "Wykryte zadania", - "degradationMap": "Mapa degradacji modeli", - "premiumModel": "Model premium", + "degradationMap": "Mapa degradacji model", + "premiumModel": "Premium model", "cheapModel": "Tani model", "detectionPatterns": "Wzorce wykrywania", - "newPattern": "np. \"wygeneruj tytuł\"", + "newPattern": "np. \"generate a title\"", "aliasPatternPlaceholder": "claude-sonnet-*", "aliasTargetPlaceholder": "claude-sonnet-4-20250514", - "pattern": "Wzór", - "targetModel": "Model docelowy", + "pattern": "Wzorzec", + "targetModel": "Docelowy model", "add": "+ Dodaj", "session": "Sesja", "sessionDetailsAria": "Szczegóły sesji", - "status": "Stan", - "authenticated": "Uwierzytelnione", + "status": "Status", + "authenticated": "Uwierzytelniony", "guest": "Gość", "loginTime": "Czas logowania", "sessionAge": "Wiek sesji", "browser": "Przeglądarka", "clearLocalData": "Wyczyść dane lokalne", "logout": "Wyloguj się", - "clearLocalDataConfirm": "Wyczyścić wszystkie dane lokalne? Spowoduje to zresetowanie Twoich preferencji.", + "clearLocalDataConfirm": "Wyczyścić wszystkie dane lokalne? Spowoduje to zresetowanie preferencji.", "unknown": "Nieznany", - "systemActor": "systemu", + "systemActor": "system", "ipAccessControl": "Kontrola dostępu IP", "ipAccessControlDesc": "Blokuj lub zezwalaj na określone adresy IP", - "ipModeDisabled": "Niepełnosprawny", + "ipModeDisabled": "Wyłączone", "ipModeBlacklist": "Czarna lista", "ipModeWhitelist": "Biała lista", "ipModeWhitelistPriority": "Priorytet WL", "addIpAddress": "Dodaj adres IP", "ipAddressPlaceholder": "192.168.1.0/24 lub 10.0.*.*", - "block": "+ Blok", - "allow": "+ Zezwól", - "blocked": "Zablokowano ({count})", + "block": "+ Blokuj", + "allow": "+ Zezwalaj", + "blocked": "Zablokowane ({count})", "allowed": "Dozwolone ({count})", - "temporaryBans": "Tymczasowe bany ({count})", + "temporaryBans": "Tymczasowe blokady ({count})", "minLeft": "Pozostało {min}m", "auditLog": "Dziennik audytu", - "searchAuditLogs": "Przeszukaj dzienniki kontrolne...", - "failedLoadAuditLog": "Nie udało się załadować dziennika kontroli", - "noAuditEvents": "Nie znaleziono żadnych zdarzeń kontrolnych", + "searchAuditLogs": "Przeszukaj dzienniki audytu...", + "failedLoadAuditLog": "Nie udało się załadować dziennika audytu", + "noAuditEvents": "Nie znaleziono zdarzeń audytowych", "action": "Akcja", "actor": "Aktor", "details": "Szczegóły", "time": "Czas", - "fallbackChainsTitle": "Łańcuchy rezerwowe", - "fallbackChainsDesc": "Zdefiniuj kolejność zastępczą dostawcy dla każdego modelu", + "fallbackChainsTitle": "Łańcuchy fallback", + "fallbackChainsDesc": "Zdefiniuj kolejność fallback dla provider per model", "addChain": "+ Dodaj łańcuch", - "modelName": "Nazwa modelu", + "modelName": "Nazwa model", "modelNamePlaceholder": "claude-sonnet-4-20250514", - "providersCommaSeparated": "Dostawcy (oddzieleni przecinkami, w kolejności priorytetów)", - "providersCommaSeparatedPlaceholder": "antropiczny, openai, bliźnięta", + "providersCommaSeparated": "Providers (oddzielone przecinkami, w kolejności priorytetu)", + "providersCommaSeparatedPlaceholder": "anthropic, openai, gemini", "createChain": "Utwórz łańcuch", - "noFallbackChains": "Żadnych łańcuchów awaryjnych", - "noFallbackChainsDesc": "Utwórz łańcuch, aby zdefiniować kolejność zastępczą dostawcy dla modelu.", - "loadingFallbackChains": "Ładuję łańcuchy zastępcze...", - "deleteChainConfirm": "Usunąć łańcuch zastępczy dla „{model}”?", - "chainCreated": "Łańcuch stworzony dla {model}", - "chainDeleted": "Łańcuch usunięty dla {model}", + "noFallbackChains": "Brak łańcuchów fallback", + "noFallbackChainsDesc": "Utwórz łańcuch, aby zdefiniować kolejność fallback dla provider dla danego model.", + "loadingFallbackChains": "Ładowanie łańcuchów fallback...", + "deleteChainConfirm": "Usunąć łańcuch fallback dla \"{model}\"?", + "chainCreated": "Utworzono łańcuch dla {model}", + "chainDeleted": "Usunięto łańcuch dla {model}", "failedCreateChain": "Nie udało się utworzyć łańcucha", "failedDeleteChain": "Nie udało się usunąć łańcucha", "deleteChain": "Usuń łańcuch", - "fillModelAndProviders": "Podaj nazwę modelu i dostawców", - "addAtLeastOneProvider": "Dodaj co najmniej jednego dostawcę", - "comboDefaultsTitle": "Domyślne ustawienia kombinacji", - "comboDefaultsGuideTitle": "Jak dostroić domyślne ustawienia kombinacji", - "comboDefaultsGuideHint1": "Utrzymuj niską liczbę ponownych prób w przepływach o małych opóźnieniach; zwiększaj limit czasu tylko dla zadań o długim generowaniu.", - "comboDefaultsGuideHint2": "Użyj zastąpienia dostawcy, gdy jeden z dostawców wymaga innego zachowania związanego z przekroczeniem limitu czasu/ponownej próby niż globalne ustawienia domyślne.", + "fillModelAndProviders": "Proszę podać nazwę model oraz providers", + "addAtLeastOneProvider": "Dodaj co najmniej jednego provider", + "comboDefaultsTitle": "Domyślne ustawienia combo", + "comboDefaultsGuideTitle": "Jak dostroić domyślne ustawienia combo", + "comboDefaultsGuideHint1": "Utrzymuj niską liczbę powtórzeń w przepływach o niskim opóźnieniu; zwiększaj timeout tylko dla długich zadań generowania.", + "comboDefaultsGuideHint2": "Używaj nadpisań dla provider, gdy jeden provider wymaga innego zachowania timeout/retries niż globalne wartości domyślne.", "globalComboConfig": "Globalna konfiguracja combo", "defaultStrategy": "Domyślna strategia", - "defaultStrategyDesc": "Stosowane do nowych kombinacji bez wyraźnej strategii", - "comboStrategyAria": "Strategia kombinacji", - "priority": "Priorytet", - "weighted": "Ważona", + "defaultStrategyDesc": "Stosowana do nowych combos bez jawnej strategii i synchronizowana z globalnym fallback routingiem kont", + "comboStrategyAria": "Strategia combo", + "priority": "Priority", + "weighted": "Weighted", "contextRelay": "Context Relay", - "contextRelayDesc": "Hands off context between providers with automatic summarization", - "maxRetriesLabel": "Maksymalna liczba ponownych prób", - "retryDelayLabel": "Opóźnienie ponownej próby (ms)", - "timeoutLabel": "Limit czasu (ms)", - "healthCheck": "Kontrola stanu zdrowia", - "healthCheckDesc": "Wstępnie sprawdź dostępność dostawcy", - "trackMetrics": "Śledź metryki", - "trackMetricsDesc": "Rejestruj metryki żądań kombinacji", - "providerOverrides": "Zastąpienia dostawcy", - "providerOverridesDesc": "Zastąp limit czasu i liczbę ponownych prób na dostawcę. Ustawienia dostawcy zastępują globalne ustawienia domyślne.", - "providerMaxRetriesAria": "{provider} maksymalna liczba ponownych prób", - "providerTimeoutAria": "{provider} przekroczenie limitu czasu ms", - "removeProviderOverrideAria": "Usuń zastąpienie {provider}", - "newProviderNamePlaceholder": "np. google, otwórz...", - "newProviderNameAria": "Nowa nazwa dostawcy", - "retries": "ponawia próby", - "ms": "pani", - "saveComboDefaults": "Zapisz domyślne ustawienia kombinacji", + "contextRelayDesc": "Routing w stylu Priority z automatycznym przekazywaniem kontekstu (handoffs), gdy następuje rotacja kont", + "maxRetriesLabel": "Maksymalna liczba retries", + "retryDelayLabel": "Opóźnienie retry (ms)", + "timeoutLabel": "Timeout (ms)", + "healthCheck": "Health Check", + "healthCheckDesc": "Wstępne sprawdzanie dostępności provider", + "trackMetrics": "Śledzenie metryk", + "trackMetricsDesc": "Rejestruj metryki żądań dla każdego combo", + "providerOverrides": "Nadpisania dla Provider", + "providerOverridesDesc": "Nadpisz timeout i retries dla każdego provider. Ustawienia dla Provider nadpisują globalne wartości domyślne.", + "providerMaxRetriesAria": "{provider} max retries", + "providerTimeoutAria": "{provider} timeout ms", + "removeProviderOverrideAria": "Usuń nadpisanie dla {provider}", + "selectProviderPlaceholder": "Wybierz provider...", + "searchProviderPlaceholder": "Przeszukaj providers...", + "searchProviderAria": "Przeszukaj providers", + "newProviderNamePlaceholder": "np. google, openai...", + "newProviderNameAria": "Nowa nazwa provider", + "retries": "retries", + "ms": "ms", + "saveComboDefaults": "Zapisz domyślne ustawienia Combo", "maxNestingDepth": "Maksymalna głębokość zagnieżdżenia", - "concurrencyPerModel": "Współbieżność/model", - "queueTimeout": "Limit czasu kolejki (ms)", - "contextRelayHandoffThreshold": "Handoff Threshold", - "contextRelayMaxMessages": "Max Messages For Summary", - "contextRelaySummaryModel": "Summary Model", - "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", - "providerProfiles": "Profile dostawców", - "providerProfilesDesc": "Oddzielne ustawienia odporności dla dostawców OAuth (opartych na sesji) i kluczy API (mierzonych). Dostawcy protokołu OAuth mają bardziej rygorystyczne progi ze względu na niższe limity stawek.", - "oauthProviders": "Dostawcy protokołu OAuth", - "apiKeyProviders": "Dostawcy kluczy API", - "transientCooldown": "Przejściowe odnowienie", - "rateLimitCooldown": "Czas odnowienia limitu szybkości", - "maxBackoffLevel": "Maksymalny poziom wycofania", + "concurrencyPerModel": "Współbieżność / Model", + "queueTimeout": "Timeout kolejki (ms)", + "queueDepth": "Głębokość kolejki", + "contextRelayHandoffThreshold": "Próg Handoff", + "contextRelayMaxMessages": "Maksymalna liczba wiadomości do podsumowania", + "contextRelaySummaryModel": "Model podsumowujący", + "contextRelayProviderNote": "Context Relay obecnie generuje handoffs dla kont Codex i używa tych wartości jako globalnych ustawień domyślnych dla nowych lub nieskonfigurowanych combos.", + "providerProfiles": "Profile Provider", + "providerProfilesDesc": "Oddzielne ustawienia odporności dla providers typu OAuth (opartych na sesji) oraz API Key (mierzonych). Providers typu OAuth mają bardziej rygorystyczne progi z powodu niższych rate limits.", + "oauthProviders": "OAuth Providers", + "apiKeyProviders": "API Key Providers", + "transientCooldown": "Transient Cooldown", + "rateLimitCooldown": "Rate Limit Cooldown", + "maxBackoffLevel": "Maksymalny poziom Backoff", "cbThreshold": "Próg CB", - "cbResetTime": "Czas resetowania CB", - "rateLimiting": "Ograniczanie szybkości", - "rateLimitingDesc": "Dostawcy kluczy API mają automatycznie ograniczone stawki z bezpiecznymi ustawieniami domyślnymi. Limity są pobierane z nagłówków odpowiedzi i dostosowują się z czasem.", - "defaultSafetyNet": "Domyślna siatka bezpieczeństwa", - "rpm": "obr./min", - "minGap": "Minimalna przerwa", - "maxConcurrent": "Maksymalna liczba współbieżnych", - "activeLimiters": "Aktywne ograniczniki", - "noActiveLimiters": "Nie ma jeszcze aktywnych ograniczników szybkości.", - "reservoir": "Zbiornik", - "running": "Bieganie", + "cbResetTime": "Czas resetu CB", + "rateLimiting": "Rate Limiting", + "rateLimitingDesc": "API Key providers are automatically rate-limited with safe defaults. Limits are learned from response headers and adapt over time.", + "defaultSafetyNet": "Domyślny Safety Net", + "rpm": "RPM", + "minGap": "Min Gap", + "maxConcurrent": "Maksymalna współbieżność", + "activeLimiters": "Aktywne Limiters", + "noActiveLimiters": "Brak aktywnych rate limiters.", + "reservoir": "Reservoir", + "running": "Uruchomione", "queued": "W kolejce", - "circuitBreakers": "Wyłączniki automatyczne", - "breakerStateClosed": "Zamknięte", - "breakerStateOpen": "Otwórz", - "breakerStateHalfOpen": "Półotwarte", - "tripped": "{count} potknął się", - "healthy": "{count} zdrowy", - "resetAll": "Zresetuj wszystko", - "noCircuitBreakers": "Żadne wyłączniki automatyczne nie są jeszcze aktywne. Są tworzone automatycznie, gdy żądania przepływają przez potok kombi.", - "failures": "{count} awarie", + "circuitBreakers": "Circuit Breakers", + "breakerStateClosed": "Zamknięty", + "breakerStateOpen": "Otwarty", + "breakerStateHalfOpen": "Półotwarty", + "tripped": "{count} wyzwolonych", + "healthy": "{count} sprawnych", + "resetAll": "Resetuj wszystko", + "noCircuitBreakers": "Brak aktywnych circuit breakerów. Są one tworzone automatycznie, gdy żądania przepływają przez potok combo.", + "failures": "{count} niepowodzeń", "policiesLocked": "Zasady i zablokowane identyfikatory", - "allOperational": "Wszystkie systemy działają — brak blokad i zadziałań wyłączników", + "allOperational": "Wszystkie systemy sprawne — brak blokad lub wyzwolonych circuit breakerów", "loadingPolicies": "Ładowanie zasad...", "lockedIdentifiers": "Zablokowane identyfikatory", "unlockedIdentifier": "Odblokowano: {identifier}", @@ -5432,31 +5569,31 @@ "unlocking": "Odblokowywanie...", "failedUnlock": "Nie udało się odblokować", "failedLoadWithStatus": "Nie udało się załadować: {status}", - "failedLoadResilience": "Nie udało się wczytać stanu odporności", + "failedLoadResilience": "Nie udało się załadować statusu odporności", "saveFailed": "Zapisywanie nie powiodło się", "resetFailed": "Resetowanie nie powiodło się", - "loadingResilience": "Ładowanie stanu odporności...", - "retry": "Spróbuj ponownie", - "systemStorage": "System i pamięć masowa", - "allDataLocal": "Wszystkie dane przechowywane lokalnie na Twoim komputerze", + "loadingResilience": "Ładowanie statusu odporności...", + "retry": "Ponów", + "systemStorage": "Przechowywanie danych", + "allDataLocal": "Wszystkie dane są przechowywane lokalnie na tym urządzeniu", "databasePath": "Ścieżka bazy danych", - "export": "__MISSING__:Export", + "export": "Eksportuj", "exportDatabase": "Eksportuj bazę danych", "exportAll": "Eksportuj wszystko (.tar.gz)", "importDatabase": "Importuj bazę danych", "confirmDbImport": "Potwierdź import bazy danych", - "confirmDbImportDesc": "Spowoduje to zastąpienie wszystkich bieżących danych treścią z {file}. Kopia zapasowa zostanie utworzona automatycznie przed importem.", + "confirmDbImportDesc": "Spowoduje to zastąpienie wszystkich aktualnych danych zawartością z {file}. Przed importem zostanie automatycznie utworzona kopia zapasowa.", "yesImport": "Tak, importuj", "lastBackup": "Ostatnia kopia zapasowa", - "noBackupYet": "Nie ma jeszcze kopii zapasowej", - "backupNow": "Utwórz kopię zapasową teraz", + "noBackupYet": "Brak kopii zapasowej", + "backupNow": "Utwórz kopię zapasową", "backupRestore": "Kopia zapasowa i przywracanie", - "viewBackups": "Zobacz kopie zapasowe", + "viewBackups": "Pokaż kopie zapasowe", "hide": "Ukryj", - "backupRetentionDesc": "Migawki bazy danych są tworzone automatycznie przed przywróceniem i co 15 minut w przypadku zmiany danych. Przechowywanie: 24 godziny na dobę + 30 codziennych kopii zapasowych z inteligentną rotacją.", + "backupRetentionDesc": "Migawki bazy danych są tworzone automatycznie przed przywracaniem oraz co 15 minut, gdy dane ulegają zmianie. Przechowywanie: 24 godzinne + 30 dziennych kopii zapasowych z inteligentną rotacją.", "loadingBackups": "Ładowanie kopii zapasowych...", - "noBackupsYet": "Nie są jeszcze dostępne żadne kopie zapasowe. Kopie zapasowe zostaną utworzone automatycznie w przypadku zmiany danych.", - "backupsAvailable": "Dostępne są {count} kopie zapasowe", + "noBackupsYet": "Brak dostępnych kopii zapasowych. Kopie zapasowe będą tworzone automatycznie przy zmianach danych.", + "backupsAvailable": "{count} dostępnych kopii zapasowych", "refresh": "Odśwież", "confirm": "Potwierdzić?", "yes": "Tak", @@ -5467,1074 +5604,1163 @@ "exportFailedWithError": "Eksport nie powiódł się: {error}", "fullExportFailedWithError": "Pełny eksport nie powiódł się: {error}", "backupCreated": "Utworzono kopię zapasową: {file}", - "restoreSuccess": "Przywrócony! {connections} połączenia, {nodes} węzły, {combos} kombinacje, {apiKeys} klucze API.", - "importSuccess": "Baza danych zaimportowana! {connections} połączenia, {nodes} węzły, {combos} kombinacje, {apiKeys} klucze API.", + "restoreSuccess": "Przywrócono! Połączenia: {connections}, węzły: {nodes}, combos: {combos}, klucze API: {apiKeys}.", + "importSuccess": "Zaimportowano bazę danych! Połączenia: {connections}, węzły: {nodes}, combos: {combos}, klucze API: {apiKeys}.", "minutesAgo": "{count}m temu", "hoursAgo": "{count}h temu", "daysAgo": "{count}d temu", - "backupReasonManual": "instrukcja", - "backupReasonPreRestore": "wstępne przywrócenie", - "connectionsCount": "{count, plural, one {# connection} other {# connections}}", - "noChangesSinceBackup": "Żadnych zmian od ostatniej kopii zapasowej", + "backupReasonManual": "ręczna", + "backupReasonPreRestore": "przed przywróceniem", + "connectionsCount": "{count, plural, one {# połączenie} other {# połączeń}}", + "noChangesSinceBackup": "Brak zmian od ostatniej kopii zapasowej", "backupFailed": "Tworzenie kopii zapasowej nie powiodło się", "restoreFailed": "Przywracanie nie powiodło się", "importFailed": "Import nie powiódł się", - "errorDuringRestore": "Podczas przywracania wystąpił błąd", + "errorDuringRestore": "Wystąpił błąd podczas przywracania", "errorDuringImport": "Wystąpił błąd podczas importu", - "modelPricing": "Ceny modeli", - "modelPricingDesc": "Konfiguruj stawki kosztów dla każdego modelu • Wszystkie stawki w tokenach $/1M", + "modelPricing": "Cennik model", + "modelPricingDesc": "Skonfiguruj stawki kosztów dla model • Wszystkie stawki w $/1M tokens", + "modelOverridesTitle": "Nadpisania model", + "modelOverridesDesc": "Nadpisz możliwości provider/model używane do routingu i kształtowania żądań. Cele używają tego samego formatu provider/model co combos.", + "searchModelOverrideTargets": "Szukaj provider/model...", + "selectedModel": "Wybrany model", + "configured": "skonfigurowano", + "none": "Brak", + "modelOverrideValuePlaceholder": "Wartość liczbowa", + "addKeyValue": "Dodaj wartość klucza", + "noModelOverrides": "Brak skonfigurowanych nadpisań dla tego model.", + "modelOverrideLoadFailed": "Nie udało się załadować nadpisań model", + "modelOverrideSaved": "Zapisano nadpisanie model", + "modelOverrideRemoved": "Usunięto nadpisanie model", + "modelOverrideSaveFailed": "Nie udało się zapisać nadpisania model", + "modelOverrideRemoveFailed": "Nie udało się usunąć nadpisania model", "registry": "Rejestr", - "priced": "Wyceniony", - "searchProvidersModels": "Wyszukaj dostawców lub modele...", + "priced": "Wycenione", + "searchProvidersModels": "Szukaj providers lub models...", "showAll": "Pokaż wszystko", - "noProvidersMatch": "Żaden dostawca nie pasuje do Twojego wyszukiwania.", - "howPricingWorks": "Jak działa cena", - "cacheWrite": "Zapis w pamięci podręcznej", - "unsaved": "niezapisany", - "resetDefaults": "Zresetuj ustawienia domyślne", - "saveProvider": "Zapisz dostawcę", - "model": "Modelka", - "models": "modele", - "moreProviders": "{count} więcej dostawców", - "withPricing": "ze skonfigurowaną ceną", - "policiesCircuitBreakers": "Zasady i wyłączniki automatyczne", + "noProvidersMatch": "Brak providers pasujących do wyszukiwania.", + "howPricingWorks": "Jak działa wycena", + "cacheWrite": "Cache Write", + "unsaved": "niezapisane", + "resetDefaults": "Przywróć domyślne", + "saveProvider": "Zapisz Provider", + "model": "model", + "models": "models", + "moreProviders": "{count} kolejnych providers", + "withPricing": "ze skonfigurowaną wyceną", + "policiesCircuitBreakers": "Zasady i circuit breakery", "activeIssuesDetected": "Wykryto aktywne problemy", "off": "Wyłączone", - "resetPricingConfirm": "Zresetować wszystkie ceny {provider} do wartości domyślnych?", - "pricingDescInput": "Wejście: tokeny wysłane do modelu", - "pricingDescOutput": "Dane wyjściowe: wygenerowano tokeny", - "pricingDescCached": "Buforowane: ponownie wykorzystane dane wejściowe (~50% szybkości wprowadzania)", - "pricingDescReasoning": "Rozumowanie: żetony myślenia (wraca do Wyjścia)", - "pricingDescCacheWrite": "Zapis w pamięci podręcznej: tworzenie wpisów w pamięci podręcznej (powraca do opcji Wejście)", - "pricingDescFormula": "Koszt = (wejście × współczynnik_wejściowy) + (wyjście × współczynnik_wyjściowy) + (pamięć podręczna × szybkość_pamięci) na milion tokenów.", - "pricingSettingsTitle": "Ustawienia cenowe", - "totalModels": "Wszystkie modele", - "active": "Aktywny", - "costCalculation": "Kalkulacja kosztów", - "costCalculationDesc": "Koszty są obliczane na podstawie użycia tokena i stawek cenowych skonfigurowanych dla każdego modelu.", - "pricingFormat": "Formularz cenowy", - "pricingFormatDesc": "Wszystkie stawki podane są w tokenach $/1 milion (dolary na milion tokenów).", - "tokenTypes": "Typy tokenów", - "inputTokenDesc": "Standardowe tokeny zachęty", - "outputTokenDesc": "Żetony ukończenia/odpowiedzi", - "cachedTokenDesc": "Tokeny wejściowe w pamięci podręcznej (zwykle 50% szybkości wprowadzania)", - "reasoningTokenDesc": "Specjalne żetony rozumowania/myślenia (awaryjne tempo produkcji)", - "cacheCreationTokenDesc": "Tokeny używane do tworzenia wpisów w pamięci podręcznej (powrót do szybkości wprowadzania)", - "customPricingNote": "Możesz zastąpić domyślne ceny dla określonych modeli. Zastąpienia niestandardowe mają pierwszeństwo przed automatycznie wykrytymi cenami.", - "editPricing": "Edytuj ceny", - "viewFullDetails": "Zobacz pełne szczegóły", - "themeCoral": "Koral", - "adaptiveVolumeRouting": "Adaptive Volume Routing", - "adaptiveVolumeRoutingDesc": "Scale connections dynamically based on payload volume and throughput pressure.", + "resetPricingConfirm": "Zresetować całą wycenę dla {provider} do wartości domyślnych?", + "pricingDescInput": "Wejście (Input): tokens wysłane do model", + "pricingDescOutput": "Wyjście (Output): tokens wygenerowane", + "pricingDescCached": "Cached: ponownie użyte wejście (~50% stawki wejściowej)", + "pricingDescReasoning": "Reasoning: tokens myślenia (fallback do Output)", + "pricingDescCacheWrite": "Cache Write: tworzenie wpisów w cache (fallback do Input)", + "pricingDescFormula": "Koszt = (input × input_rate) + (output × output_rate) + (cached × cached_rate) na milion tokens.", + "pricingSettingsTitle": "Ustawienia wyceny", + "totalModels": "Suma models", + "active": "Aktywne", + "costCalculation": "Obliczanie kosztów", + "costCalculationDesc": "Koszty are obliczane na podstawie zużycia tokens i stawek wyceny skonfigurowanych dla każdego model.", + "pricingFormat": "Format wyceny", + "pricingFormatDesc": "Wszystkie stawki są podawane w $/1M tokens (dolary za milion tokens).", + "tokenTypes": "Typy tokens", + "inputTokenDesc": "Standardowe tokens promptu", + "outputTokenDesc": "Tokens uzupełnienia/odpowiedzi", + "cachedTokenDesc": "Tokens cached wejściowe (zazwyczaj 50% stawki wejściowej)", + "reasoningTokenDesc": "Specjalne tokens reasoning/myślenia (fallback do stawki wyjściowej)", + "cacheCreationTokenDesc": "Tokens używane do tworzenia wpisów cache (fallback do stawki wejściowej)", + "customPricingNote": "Można nadpisać domyślną wycenę dla określonych models. Niestandardowe nadpisania mają priorytet nad automatycznie wykrytą wyceną.", + "editPricing": "Edytuj wycenę", + "viewFullDetails": "Pokaż pełne szczegóły", + "themeCoral": "Koralowy", + "adaptiveVolumeRouting": "Adaptacyjny routing wolumenowy", + "adaptiveVolumeRoutingDesc": "Skaluj połączenia dynamicznie w oparciu o wolumen ładunku (payload) i ciśnienie przepustowości.", "lkgpToggleTitle": "Last Known Good Provider (LKGP)", - "lkgpToggleDesc": "When enabled, the router remembers which provider last served a successful response and tries it first on subsequent requests.", - "echoRequestedModelTitle": "__MISSING__:Echo requested model name in responses", - "echoRequestedModelDesc": "__MISSING__:When enabled, the response `model` field echoes the alias or combo name the client requested instead of the upstream model name. Fixes strict clients (e.g. Claude Desktop) that reject a response whose model does not match the request.", - "webSearchRouteTitle": "__MISSING__:Web search routing", - "webSearchRouteDesc": "__MISSING__:When a request includes a native web_search tool, route the whole request to this model instead of the default — useful for providers that don't implement Anthropic's web_search server tool. Leave blank to disable.", - "webSearchRoutePlaceholder": "__MISSING__:e.g. openrouter,anthropic/claude-3.5-sonnet", - "clearLkgpCache": "Clear LKGP Cache", - "lkgpCacheCleared": "LKGP cache cleared successfully", - "lkgpCacheClearFailed": "Failed to clear LKGP cache", - "days": "Days", - "lkgp": "LKGP Mode", - "lkgpDesc": "Last Known Good Provider (Predictable resilience)", - "maintenance": "Maintenance", - "purgeExpiredLogs": "Purge Expired Logs", - "purgeLogsFailed": "Failed to purge logs", + "lkgpToggleDesc": "Po włączeniu router zapamiętuje, który provider ostatnio pomyślnie obsłużył odpowiedź i próbuje go w pierwszej kolejności przy kolejnych żądaniach.", + "echoRequestedModelTitle": "Echo nazwy żądanego model w odpowiedziach", + "echoRequestedModelDesc": "Po włączeniu pole `model` w odpowiedzi odzwierciedla nazwę aliasu lub combo, o którą prosił klient, zamiast nazwy model upstream. Rozwiązuje to problem z rygorystycznymi klientami (np. Claude Desktop), którzy odrzucają odpowiedź, której model nie pasuje do żądania.", + "webSearchRouteTitle": "Routing wyszukiwania sieciowego", + "webSearchRouteDesc": "Gdy żądanie zawiera natywne narzędzie web_search, skieruj całe żądanie do tego model zamiast domyślnego — przydatne dla providers, którzy nie implementują serwerowego narzędzia web_search firmy Anthropic. Pozostaw puste, aby wyłączyć.", + "webSearchRoutePlaceholder": "Wyszukaj lub wybierz model...", + "paidModelPatternWarning": "Ten wzorzec pasuje tylko do płatnych models — włącz płatne models lub dostosuj wzorzec.", + "clearLkgpCache": "Wyczyść cache LKGP", + "lkgpCacheCleared": "Pomyślnie wyczyszczono cache LKGP", + "lkgpCacheClearFailed": "Nie udało się wyczyścić cache LKGP", + "days": "Dni", + "lkgp": "Tryb LKGP", + "lkgpDesc": "Last Known Good Provider (Przewidywalna odporność)", + "maintenance": "Konserwacja", + "purgeExpiredLogs": "Usuń przeterminowane logi", + "purgeLogsFailed": "Nie udało się usunąć logów", + "logsDeleted": "{count, plural, =0 {Nie usunięto wygasłych logów} one {Usunięto # wygasły log} other {Usunięto # wygasłych logów}}", + "resetUsageData": "Resetuj dane użycia", + "resetUsageDataDesc": "Wybierz, jak daleko wstecz chcesz usunąć dane użycia, logi żądań i dane analityczne. Konfiguracja provider, połączenia, klucze API, combos i ustawienia zostaną zachowane. Tej operacji nie można cofnąć.", + "resetUsagePeriod_5m": "5 minut", + "resetUsagePeriod_1h": "1 godzinę", + "resetUsagePeriod_3h": "3 godziny", + "resetUsagePeriod_6h": "6 godzin", + "resetUsagePeriod_12h": "12 godzin", + "resetUsagePeriod_1d": "1 dzień", + "resetUsagePeriod_7d": "7 dni", + "resetUsagePeriod_30d": "30 dni", + "resetUsagePeriod_all": "Od początku", + "resetUsageSuccess": "{count, plural, =0 {Nie usunięto żadnych wierszy danych użycia} one {Zresetowano dane użycia (usunięto # wiersz)} other {Zresetowano dane użycia (usunięto # wierszy)}}", + "resetUsageFailed": "Nie udało się zresetować danych użycia", + "reset": "Resetuj", + "resetting": "Resetowanie...", "contextOpt": "Context Optimized", - "contextOptDesc": "Routes based on context window requirements and conversation length", - "priorityDesc": "Sequential fallback - tries provider 1 first, then provider 2, and so on", - "weightedDesc": "Distributes traffic by percentage weights across providers", - "modelRoutingTitle": "Model Routing Rules", - "modelRoutingDesc": "Automatically route models to specific combos using glob patterns", - "addRule": "Add Rule", - "routeToCombo": "Route to Combo", - "selectCombo": "Select combo...", - "priorityHint": "Higher = checked first. Use 10+ for specific patterns.", - "patternHint": "Use * for any chars, ? for single char. Case-insensitive.", - "noRoutingRules": "No routing rules configured. Requests use the global combo by default.", - "routingRuleHint": "Add a rule like claude-opus* -> frontier-combo to automatically route requests.", - "deleteRoutingRule": "Delete this model routing rule?", - "exactMatchMode": "Exact Match", - "wildcardPatternMode": "Wildcard Pattern", - "exactMatchModeDesc": "Use exact aliases for deprecated or renamed model IDs.", - "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.", - "noExactAliasesConfigured": "No exact-match aliases configured.", - "wildcardRulesTitle": "Wildcard Rules", - "noWildcardAliasesConfigured": "No wildcard aliases configured.", - "overview": "Overview", - "unknownError": "Unknown Error", - "pricingSourceLiteLLM": "Pricing Source Lite Llm", - "clearSyncedPricingConfirm": "Clear Synced Pricing Confirm", - "clearSyncedPricingFailed": "Clear Synced Pricing Failed", - "pricingSourceUser": "Pricing Source User", - "pageDescription": "Page Description", - "pricingSyncStatus": "Pricing Sync Status", + "contextOptDesc": "Wykonuje routing na podstawie wymagań okna kontekstu i długości konwersacji", + "priorityDesc": "Sekwencyjny fallback — próbuje najpierw provider 1, potem provider 2 i tak dalej", + "weightedDesc": "Dystrybuuje ruch według wag procentowych między providers", + "modelRoutingTitle": "Reguły Model Routing", + "modelRoutingDesc": "Automatycznie kieruj models do określonych combos za pomocą wzorców glob", + "addRule": "Dodaj regułę", + "routeToCombo": "Kieruj do Combo", + "selectCombo": "Wybierz combo...", + "priorityHint": "Wyższy = sprawdzany najpierw. Użyj 10+ dla określonych wzorców.", + "patternHint": "Użyj * dla dowolnych znaków, ? dla pojedynczego znaku. Wielkość liter bez znaczenia.", + "noRoutingRules": "Brak skonfigurowanych reguł routingu. Żądania domyślnie korzystają z globalnego combo.", + "routingRuleHint": "Dodaj regułę taką jak claude-opus* -> frontier-combo, aby automatycznie kierować żądania.", + "deleteRoutingRule": "Usunąć tę regułę routingu model?", + "exactMatchMode": "Dokładne dopasowanie", + "wildcardPatternMode": "Wzorzec wildcard", + "exactMatchModeDesc": "Użyj dokładnych aliasów dla wycofanych lub zmienionych model IDs.", + "wildcardPatternModeDesc": "Użyj aliasów wildcard z * i ? gdy rodzina models powinna mapować się na jeden cel.", + "noExactAliasesConfigured": "Brak skonfigurowanych aliasów dokładnego dopasowania.", + "wildcardRulesTitle": "Reguły Wildcard", + "noWildcardAliasesConfigured": "Brak skonfigurowanych aliasów wildcard.", + "overview": "Przegląd", + "unknownError": "Nieznany błąd", + "pricingSourceLiteLLM": "LiteLLM (Społeczność)", + "clearSyncedPricingConfirm": "Wyczyścić wszystkie zsynchronizowane dane wyceny? Zamiast tego zostaną użyte wartości domyślne provider.", + "clearSyncedPricingFailed": "Nie udało się wyczyścić zsynchronizowanej wyceny", + "pricingSourceUser": "Nadpisanie użytkownika", + "pageDescription": "Zarządzaj ustawieniami aplikacji, aliasami model, wyceną i regułami routingu", + "pricingSyncStatus": "Status synchronizacji", "whitelist": "Whitelist", - "syncDisabled": "Sync Disabled", - "pricingLoadFailed": "Pricing Load Failed", - "pricingSyncDescription": "Pricing Sync Description", - "clearSyncedPricingSuccess": "Clear Synced Pricing Success", - "clearSyncedPricingFailedWithReason": "Nie udało się wyczyścić cen: {reason}", - "pricingSourceDefault": "Pricing Source Default", - "pricingSyncSuccess": "Pricing Sync Success", - "enableSyncError": "Enable Sync Error", - "syncEnabled": "Sync Enabled", + "syncDisabled": "Synchronizacja wyłączona", + "pricingLoadFailed": "Nie udało się załadować danych wyceny", + "pricingSyncDescription": "Automatycznie synchronizuj wycenę model z zewnętrznych źródeł, aby zachować dokładność obliczeń kosztów", + "clearSyncedPricingSuccess": "Pomyślnie wyczyszczono zsynchronizowane dane wyceny", + "clearSyncedPricingFailedWithReason": "Nie udało się wyczyścić wyceny: {reason}", + "pricingSourceDefault": "Wbudowane domyślne", + "pricingSyncSuccess": "Pomyślnie zsynchronizowano wycenę", + "enableSyncError": "Nie udało się przełączyć synchronizacji wyceny", + "syncEnabled": "Synchronizacja włączona", "blacklist": "Blacklist", - "pricingSourceModelsDev": "Pricing Source Models Dev", - "syncedModels": "Synced Models", - "budget": "Budget", - "pricingSyncTitle": "Pricing Sync Title", - "pricingResetFailedWithReason": "Nie udało się zresetować cen: {reason}", - "tab": "Tab", - "pricingSavedProvider": "Ceny zapisane dla {provider}", - "pricingSyncFailed": "Pricing Sync Failed", - "pricingSaveFailedWithReason": "Nie udało się zapisać cen: {reason}", - "pricingResetProvider": "Reset cen dla {provider}", - "nextSync": "Next Sync", - "pricingSyncFailedWithReason": "Synchronizacja cen nie powiodła się: {reason}", - "clearSyncedPricing": "Clear Synced Pricing", - "compressionTitle": "Prompt Compression", - "compressionDesc": "Reduce token usage by compressing prompts before sending to providers", - "tokenSaverTitle": "__MISSING__:Token Saver", - "tokenSaverSubtitle": "__MISSING__:Spend fewer tokens on every request.", - "tokenSaverToolOutput": "__MISSING__:Tool output", - "tokenSaverToolOutputDesc": "__MISSING__:Clean git, grep, ls, tree, and log output before it reaches the provider.", - "tokenSaverLlmOutput": "__MISSING__:LLM output", - "tokenSaverLlmOutputDesc": "__MISSING__:Inject terse response instructions without rewriting provider output.", - "tokenSaverInputCompression": "__MISSING__:Input compression", - "tokenSaverInputCompressionDesc": "__MISSING__:Rewrite eligible chat history while preserving code, URLs, and intent.", - "tokenSaverFineTunePrefix": "__MISSING__:Fine-tune each engine on", - "tokenSaverFineTuneSuffix": "__MISSING__:or combine engines per request on", - "compressionMode": "Compression Mode", - "compressionModeOff": "Off", - "compressionModeOffDesc": "No compression applied", + "pricingSourceModelsDev": "Models.dev", + "syncedModels": "Zsynchronizowane models", + "budget": "Budżet", + "pricingSyncTitle": "Synchronizacja wyceny", + "pricingResetFailedWithReason": "Nie udało się zresetować wyceny: {reason}", + "tab": "Zakładka", + "pricingSavedProvider": "Zapisano wycenę dla {provider}", + "pricingSyncFailed": "Synchronizacja wyceny nie powiodła się", + "pricingSaveFailedWithReason": "Nie udało się zapisać wyceny: {reason}", + "pricingResetProvider": "Zresetowano wycenę dla {provider}", + "nextSync": "Następna synchronizacja", + "pricingSyncFailedWithReason": "Synchronizacja wyceny nie powiodła się: {reason}", + "clearSyncedPricing": "Wyczyść zsynchronizowaną wycenę", + "compressionTitle": "Kompresja promptów", + "compressionDesc": "Zmniejsz zużycie tokens poprzez kompresję promptów przed wysłaniem do providers", + "compressionGuidanceFullGuideLink": "Pełny przewodnik kompresji", + "compressionGuidanceShow": "Szczegóły", + "compressionGuidanceHide": "Ukryj szczegóły", + "compressionGuidanceSafeDefault": "Bezpieczna domyślna", + "compressionGuidanceCacheImpact": "Wpływ na cache", + "tokenSaverTitle": "Token Saver", + "tokenSaverSubtitle": "Zużywaj mniej tokens przy każdym zapytaniu.", + "tokenSaverToolOutput": "Wyjście narzędzi", + "tokenSaverToolOutputDesc": "Czyszczenie danych wyjściowych git, grep, ls, tree i log, zanim trafią do provider.", + "tokenSaverLlmOutput": "Dane wyjściowe LLM", + "tokenSaverLlmOutputDesc": "Wstrzykiwanie zwięzłych instrukcji odpowiedzi bez modyfikowania wyjścia z provider.", + "tokenSaverInputCompression": "Kompresja danych wejściowych", + "tokenSaverInputCompressionDesc": "Modyfikacja kwalifikującej się historii czatu przy zachowaniu kodu, URL i intencji.", + "tokenSaverFineTunePrefix": "Precyzyjne dostrajanie każdego silnika dla", + "tokenSaverFineTuneSuffix": "lub łączenie silników na zapytanie dla", + "compressionMode": "Tryb kompresji", + "compressionModeOff": "Wyłączone", + "compressionModeOffDesc": "Brak zastosowanej kompresji", "compressionModeLite": "Lite", - "compressionModeLiteDesc": "Whitespace and blank line reduction", + "compressionModeLiteDesc": "Redukcja spacji i pustych linii", "compressionModeStandard": "Standard (Caveman)", - "compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs", - "compressionModeAggressive": "Aggressive", - "compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings", + "compressionModeStandardDesc": "Kompresja oparta na regułach z ponad 30 wzorcami, zachowuje bloki kodu i URL", + "compressionModeAggressive": "Agresywny", + "compressionModeAggressiveDesc": "Podsumowanie + kompresja wyników narzędzi + progresywne starzenie dla maksymalnych oszczędności", "compressionModeUltra": "Ultra", - "compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication", - "compressionAggressiveConfig": "Agresywna konfiguracja silnika", - "compressionAggressiveConfigDesc": "Dostosuj podsumowanie, kompresję narzędzia i progi starzenia", - "compressionUltraConfig": "Konfiguracja Ultra Engine", - "compressionUltraConfigDesc": "Dostosuj czyszczenie heurystyczne, rezerwę SLM i progi dla poszczególnych wiadomości", - "compressionUltraRate": "Zachowaj stawkę", - "compressionUltraMinScore": "Minimalny próg wyniku", - "compressionUltraSlmFallback": "Powrót do trybu agresywnego", - "compressionUltraModelPath": "Ścieżka modelu SLM", - "compressionUltraEngine": "__MISSING__:Ultra tier", - "compressionUltraEngineHeuristic": "__MISSING__:Heuristic (Tier-A, default)", - "compressionUltraEngineSlm": "__MISSING__:SLM (LLMLingua-2, opt-in)", - "compressionUltraSlmHint": "__MISSING__:SLM downloads a small ONNX model on first use (cold-start) and transparently falls back to the heuristic on timeout or if unavailable.", - "compressionUltraSlmPrewarm": "__MISSING__:Pre-warm SLM model on enable", - "compressionSummarizerEnabled": "Włącz podsumowanie", - "compressionMaxTokensPerMessage": "Maksymalna liczba tokenów na wiadomość", + "compressionModeUltraDesc": "Heurystyczne przycinanie token z opcjonalnym lokalnym SLM fallback", + "compressionAggressiveConfig": "Konfiguracja silnika agresywnego", + "compressionAggressiveConfigDesc": "Dostrajanie podsumowania, kompresji narzędzi oraz progów starzenia", + "compressionUltraConfig": "Konfiguracja silnika Ultra", + "compressionUltraConfigDesc": "Dostrajanie heurystycznego przycinania, SLM fallback oraz progów na wiadomość", + "compressionUltraRate": "Wskaźnik zachowania", + "compressionUltraMinScore": "Minimalny próg oceny", + "compressionUltraSlmFallback": "Fallback do trybu agresywnego", + "compressionUltraModelPath": "Ścieżka do model SLM", + "compressionUltraEngine": "Poziom Ultra", + "compressionUltraEngineHeuristic": "Heurystyczny (Poziom A, domyślny)", + "compressionUltraEngineSlm": "SLM (LLMLingua-2, opcjonalny)", + "compressionUltraSlmHint": "SLM pobiera mały model ONNX przy pierwszym użyciu (zimny start) i płynnie stosuje fallback do heurystyki w przypadku przekroczenia limitu czasu lub braku dostępności.", + "compressionUltraSlmPrewarm": "Wstępne ładowanie model SLM przy włączeniu", + "compressionSummarizerEnabled": "Włącz podsumowywanie", + "compressionMaxTokensPerMessage": "Maksymalna liczba tokens na wiadomość", "compressionMinSavings": "Minimalny próg oszczędności", "compressionAgingThresholds": "Progi starzenia", - "compressionAgingThresholdsDesc": "Liczba najnowszych wiadomości przechowywanych na każdym poziomie starzenia się (wyższa = bardziej zachowana)", + "compressionAgingThresholdsDesc": "Liczba ostatnich wiadomości zachowywanych na każdym poziomie starzenia (wyższa wartość = więcej zachowanych)", "compressionToolStrategies": "Strategie wyników narzędzi", - "compressionToolStrategiesDesc": "Przełącz strategie kompresji dla różnych typów wyników narzędzi", - "compressionGeneral": "General Settings", - "compressionAutoTrigger": "Auto-Trigger Threshold", - "compressionCacheTTL": "Cache TTL", - "compressionPreserveSystem": "Preserve System Prompt", - "compressionCavemanConfig": "Caveman Engine Configuration", - "compressionCavemanConfigDesc": "Fine-tune the rule-based compression engine", - "compressionRoles": "Compress Message Roles", + "compressionToolStrategiesDesc": "Przełączanie strategii kompresji dla różnych typów wyników narzędzi", + "compressionGeneral": "Ustawienia ogólne", + "compressionAutoTrigger": "Próg automatycznego wyzwalania", + "compressionCacheTTL": "TTL pamięci podręcznej", + "compressionPreserveSystem": "Zachowaj system prompt", + "compressionPreserveSystemAlways": "Zawsze", + "compressionPreserveSystemWhenNoCache": "Brak cache", + "compressionPreserveSystemNever": "Nigdy", + "compressionLiveZoneTitle": "Strefa Live dopasowana do cache", + "compressionLiveZoneDesc": "Utrzymywanie stabilnego skompresowanego prefiksu konwersacji i przetwarzanie tylko nowo dodanych elementów.", + "compressionCavemanConfig": "Konfiguracja silnika Caveman", + "compressionCavemanConfigDesc": "Dostrajanie silnika kompresji opartego na regułach", + "compressionCavemanPanelHint": "Włączenie/wyłączenie oraz poziom ustawia się w panelu:", + "compressionRoles": "Kompresuj role wiadomości", "compressionRoleUser": "User", "compressionRoleAssistant": "Assistant", "compressionRoleSystem": "System", - "compressionMinLength": "Minimum Message Length", - "compressionSkipRules": "Skip Compression Rules", - "compressionSkipRulesDesc": "Click rules to skip them during compression", - "compressionPreservePatterns": "Preserve Patterns", - "compressionPreservePatternsDesc": "Regex patterns that are never compressed (one per line)", - "compressionLogTitle": "Compression Log", - "compressionLogEmpty": "No compressed requests yet. Compression stats will appear here when requests are processed with compression enabled.", - "minutes": "minuty", + "compressionMinLength": "Minimalna długość wiadomości", + "compressionSkipRules": "Pomiń reguły kompresji", + "compressionSkipRulesDesc": "Kliknięcie reguł powoduje ich pominięcie podczas kompresji", + "compressionPreservePatterns": "Zachowaj wzorce", + "compressionPreservePatternsDesc": "Wzorce regex, które nigdy nie są kompresowane (jeden na linię)", + "compressionLogTitle": "Log kompresji", + "compressionLogEmpty": "Brak skompresowanych żądań. Statystyki kompresji pojawią się tutaj po przetworzeniu żądań z włączoną kompresją.", + "minutes": "minut", "compressionModeRtk": "RTK", - "compressionModeRtkDesc": "Command-aware tool output filtering", + "compressionModeRtkDesc": "Filtrowanie danych wyjściowych narzędzi z uwzględnieniem poleceń", "compressionModeStacked": "Stacked", - "compressionModeStackedDesc": "RTK tool-output filtering followed by Caveman message compression", - "qdrantTitle": "Qdrant (Vector memory)", - "qdrantDesc": "Optional. Indexes semantic memories in an external vector database for faster retrieval.", - "qdrantStatusActive": "Active", - "qdrantStatusError": "Error", - "qdrantStatusDisabled": "Disabled", - "qdrantEnable": "Enable Qdrant", - "qdrantEnableDesc": "When enabled, semantic/hybrid strategy can use Qdrant to retrieve memories.", - "qdrantTesting": "Testing...", - "qdrantTestConnection": "Test connection", - "qdrantSaved": "Configuration saved", - "qdrantSaveError": "Failed to save configuration", - "qdrantHostHint": "Without port. Example: 127.0.0.1 or http://qdrant", + "compressionModeStackedDesc": "Filtrowanie danych wyjściowych narzędzi RTK, a następnie kompresja wiadomości Caveman", + "qdrantTitle": "Qdrant (Pamięć wektorowa)", + "qdrantDesc": "Opcjonalnie. Indeksuje pamięć semantyczną w zewnętrznej wektorowej bazie danych w celu szybszego wyszukiwania.", + "qdrantStatusActive": "Aktywny", + "qdrantStatusError": "Błąd", + "qdrantStatusDisabled": "Wyłączony", + "qdrantEnable": "Włącz Qdrant", + "qdrantEnableDesc": "Po włączeniu strategia semantyczna/hybrydowa może używać Qdrant do odzyskiwania pamięci.", + "qdrantTesting": "Testowanie...", + "qdrantTestConnection": "Testuj połączenie", + "qdrantSaved": "Zapisano konfigurację", + "qdrantSaveError": "Nie udało się zapisać konfiguracji", + "qdrantHostHint": "Bez portu. Przykład: 127.0.0.1 lub http://qdrant", "qdrantPort": "Port", - "qdrantPortHint": "Qdrant default: 6333", - "qdrantCollectionHint": "Where memory points will be stored.", - "qdrantEmbeddingModel": "Embedding model", - "qdrantHelpTitle": "Quick setup help", - "qdrantHelpQuickTitle": "Quick setup (Qdrant + OpenRouter)", - "qdrantHelpStep1": "1. Host: Qdrant IP/URL, Port: 6333, Collection: omniroute_memory.", - "qdrantHelpStep2": "2. If using nvidia/llama-nemotron-embed-vl-1b-v2:free, use collection dimension 2048.", - "qdrantHelpStep3": "3. Model field: openrouter/nvidia/llama-nemotron-embed-vl-1b-v2:free.", - "qdrantHelpStep4": "4. Save, test connection, then test search.", - "qdrantEmbeddingQuickSelect": "Quick select from discovered models...", + "qdrantPortHint": "Domyślny dla Qdrant: 6333", + "qdrantCollectionHint": "Miejsce przechowywania punktów pamięci.", + "qdrantEmbeddingModel": "Model embeddingu", + "qdrantHelpTitle": "Pomoc szybkiej konfiguracji", + "qdrantHelpQuickTitle": "Szybka konfiguracja (Qdrant + OpenRouter)", + "qdrantHelpStep1": "1. Host: IP/URL Qdrant, Port: 6333, Kolekcja: omniroute_memory.", + "qdrantHelpStep2": "2. W przypadku korzystania z nvidia/llama-nemotron-embed-vl-1b-v2:free, użyj wymiaru kolekcji 2048.", + "qdrantHelpStep3": "3. Pole Model: openrouter/nvidia/llama-nemotron-embed-vl-1b-v2:free.", + "qdrantHelpStep4": "4. Zapisz, przetestuj połączenie, a następnie przetestuj wyszukiwanie.", + "qdrantEmbeddingQuickSelect": "Szybki wybór spośród wykrytych models...", "qdrantEmbeddingInputPlaceholder": "openai/text-embedding-3-small", - "qdrantEmbeddingHint": "Format: provider/model. The provider credential must be configured.", - "qdrantApiKeyPlaceholderKeep": "(leave empty to keep current key)", - "qdrantApiKeyPlaceholderOptional": "(leave empty if not used)", - "qdrantSaveHint": "Tip: edit host/port/collection/model and click Save. API key is optional.", - "qdrantSearchTestTitle": "Search test", - "qdrantSearchTestDesc": "Generates embedding and searches in Qdrant.", - "qdrantSearchPlaceholder": "Example: user preferences, history, etc", - "qdrantNoResults": "No results (or Qdrant is not configured).", - "qdrantCleanupTitle": "Retention and cleanup", - "qdrantCleanupDesc": "Removes expired and old points based on", - "searching": "Searching...", - "cleaning": "Cleaning...", - "cleanNow": "Clean now", - "optional": "Opcjonalne", - "current": "Aktualny", + "qdrantEmbeddingHint": "Format: provider/model. Dane uwierzytelniające dla provider muszą być skonfigurowane.", + "qdrantApiKeyPlaceholderKeep": "(pozostaw puste, aby zachować obecny klucz)", + "qdrantApiKeyPlaceholderOptional": "(pozostaw puste, jeśli nie jest używane)", + "qdrantSaveHint": "Wskazówka: edytuj host/port/kolekcję/model i kliknij Zapisz. Klucz API jest opcjonalny.", + "qdrantSearchTestTitle": "Test wyszukiwania", + "qdrantSearchTestDesc": "Generuje embedding i przeszukuje Qdrant.", + "qdrantSearchPlaceholder": "Przykład: preferencje użytkownika, historia, itp.", + "qdrantNoResults": "Brak wyników (lub Qdrant nie jest skonfigurowany).", + "qdrantCleanupTitle": "Przechowywanie i czyszczenie", + "qdrantCleanupDesc": "Usuwa wygasłe i stare punkty na podstawie", + "searching": "Wyszukiwanie...", + "cleaning": "Czyszczenie...", + "cleanNow": "Wyczyść teraz", + "optional": "Opcjonalnie", + "current": "Bieżący", "remove": "Usuń", "search": "Szukaj", - "oneproxyTitle": "1proxy Bezpłatny rynek proxy", - "oneproxyTotalProxies": "Razem proxy", + "oneproxyTitle": "Rynek darmowych proxy 1proxy", + "oneproxyTotalProxies": "Wszystkie proxy", "oneproxyAvgQuality": "Średnia jakość", "resilienceScope": "Zakres:", "resilienceTrigger": "Wyzwalacz:", "resilienceEffect": "Efekt:", - "resilienceRequestQueueTitle": "Request Queue & Rate", - "resilienceAutoEnableApiKeyProviders": "Auto-enable for API-key providers", - "resilienceRequestsPerMinute": "Requests per minute", - "resilienceMinTimeBetweenRequests": "Minimum time between requests", - "resilienceConcurrentRequests": "Concurrent requests", + "resilienceRequestQueueTitle": "Kolejka i szybkość żądań", + "resilienceAutoEnableApiKeyProviders": "Automatyczne włączanie dla providers z kluczem API", + "resilienceRequestsPerMinute": "Żądania na minutę", + "resilienceMinTimeBetweenRequests": "Minimalny czas między żądaniami", + "resilienceConcurrentRequests": "Współbieżne żądania", "resilienceMaxQueueWaitTime": "Maksymalny czas oczekiwania w kolejce", - "resilienceBaseCooldown": "Base cooldown", - "resilienceUseUpstreamRetryHints": "Use upstream retry hints", - "resilienceDefaultPerProvider": "Default (per provider)", - "resilienceAlwaysOn": "Always on", - "resilienceAlwaysOff": "Always off", + "resilienceBaseCooldown": "Bazowy cooldown", + "resilienceUseUpstreamRetryHints": "Używaj wskazówek ponawiania z upstream", + "resilienceDefaultPerProvider": "Domyślnie (na provider)", + "resilienceAlwaysOn": "Zawsze włączone", + "resilienceAlwaysOff": "Zawsze wyłączone", "routingRemoveEntry": "Usuń wpis", - "routingNeedlesSubstrings": "Igły (podciągi do dopasowania)", - "routingCaseSensitive": "Wielkość liter ma znaczenie", - "routingPrefixes": "Przedrostki", - "routingMatch": "Mecz", - "routingReplacement": "Wymiana", - "routingReplaceAllOccurrences": "Zamień wszystkie wystąpienia", - "routingPatternRegex": "Wzór (wyrażenie regularne)", + "routingNeedlesSubstrings": "Needles (podciągi do dopasowania)", + "routingCaseSensitive": "Uwzględniaj wielkość liter", + "routingPrefixes": "Prefiksy", + "routingMatch": "Dopasowanie", + "routingReplacement": "Zamiennik", + "routingReplaceAllOccurrences": "Zastąp wszystkie wystąpienia", + "routingPatternRegex": "Wzorzec (regex)", "routingFlags": "Flagi", - "routingNeedles": "Igły", + "routingNeedles": "Needles", "routingBlockText": "Zablokuj tekst", "routingIdempotencyKey": "Klucz idempotencji", - "routingEntrypoint": "Punkt wejścia", + "routingEntrypoint": "Entrypoint", "routingVersionFormat": "Format wersji", "routingCchAlgorithm": "Algorytm CCH", "routingWordsToObfuscate": "Słowa do zaciemnienia (ZWJ wstawiane po pierwszym znaku)", - "logsSettingsTitle": "Ustawienia dzienników", - "detailedLogsLabel": "Szczegółowe dzienniki włączone", - "detailedLogsDesc": "Włącz szczegółowe rejestrowanie żądań/odpowiedzi", - "callLogPipelineLabel": "Potok dziennika połączeń", - "callLogPipelineDesc": "Włącz potok przetwarzania dziennika połączeń", + "logsSettingsTitle": "Ustawienia logów", + "detailedLogsLabel": "Szczegółowe logi włączone", + "detailedLogsDesc": "Włącz szczegółowe logowanie żądań/odpowiedzi", + "callLogPipelineLabel": "Potok logów połączeń", + "callLogPipelineDesc": "Włącz potok przetwarzania logów połączeń", "maxDetailSizeLabel": "Maksymalny rozmiar szczegółów (KB)", - "maxDetailSizeDesc": "Maksymalny rozmiar szczegółowych wpisów dziennika", + "maxDetailSizeDesc": "Maksymalny rozmiar szczegółowych wpisów w logach", "ringBufferSizeLabel": "Rozmiar bufora pierścieniowego", - "ringBufferSizeDesc": "Rozmiar bufora pierścieniowego dla kłód", - "semanticCacheEnabledLabel": "Semantyczna pamięć podręczna włączona", - "semanticCacheMaxSizeLabel": "Maksymalny rozmiar pamięci podręcznej semantycznej", - "semanticCacheMaxSizeDesc": "Maksymalna liczba wpisów w semantycznej pamięci podręcznej", - "semanticCacheTTLLabel": "Semantyczna pamięć podręczna TTL", - "promptCacheEnabledLabel": "Włączono pamięć podręczną podpowiedzi", - "promptCacheEnabledDesc": "Włącz buforowanie podpowiedzi", - "promptCacheStrategyLabel": "Strategia szybkiej pamięci podręcznej", - "promptCacheStrategyDesc": "Strategia szybkiego buforowania", - "alwaysPreserveClientCacheLabel": "Zawsze zachowaj pamięć podręczną klienta", - "alwaysPreserveClientCacheDesc": "Zasady zachowania pamięci podręcznej klienta", - "logRetentionPolicyTitle": "Polityka przechowywania logów", - "resilienceUseUpstream429HintsForBreaker": "Skorzystaj z podpowiedzi 429 (breaker)", + "ringBufferSizeDesc": "Rozmiar bufora pierścieniowego dla logów", + "semanticCacheEnabledLabel": "Semantyczny cache włączony", + "semanticCacheMaxSizeLabel": "Maksymalny rozmiar semantycznego cache", + "semanticCacheMaxSizeDesc": "Maksymalna liczba wpisów w semantycznym cache", + "semanticCacheTTLLabel": "TTL semantycznego cache", + "promptCacheEnabledLabel": "Prompt cache włączony", + "promptCacheEnabledDesc": "Włącz buforowanie prompt", + "promptCacheStrategyLabel": "Strategia prompt cache", + "promptCacheStrategyDesc": "Strategia buforowania prompt", + "alwaysPreserveClientCacheLabel": "Zawsze zachowuj cache klienta", + "alwaysPreserveClientCacheDesc": "Polityka zachowania cache klienta", + "logRetentionPolicyTitle": "Polityka retencji logów", + "resilienceUseUpstream429HintsForBreaker": "Używaj wskazówek 429 z upstream (breaker)", "appearanceLogoPreviewAlt": "Podgląd logo", - "appearanceFaviconPreviewAlt": "Podgląd Favikony", + "appearanceFaviconPreviewAlt": "Podgląd favicon", "oneproxyLastSync": "Ostatnia synchronizacja", "oneproxyAllProtocols": "Wszystkie protokoły", - "oneproxyCountryCodePlaceholder": "Kod kraju (np. USA)", + "oneproxyCountryCodePlaceholder": "Kod kraju (np. US)", "oneproxyMinQualityPlaceholder": "Minimalna jakość", - "oneproxyLoadingProxies": "Ładowanie serwerów proxy...", + "oneproxyLoadingProxies": "Ładowanie proxy...", "oneproxyLastSyncLabel": "Ostatnia synchronizacja:", "oneproxyProxiesFetched": "Pobrane proxy:", - "oneproxyConsecutiveFailures": "Kolejne awarie:", + "oneproxyConsecutiveFailures": "Kolejne niepowodzenia:", "oneproxyErrorLabel": "Błąd:", "oneproxyNever": "Nigdy", - "oneproxySyncStatusTitle": "Stan synchronizacji", + "oneproxySyncStatusTitle": "Status synchronizacji", "oneproxySuccess": "Sukces", - "oneproxyFailed": "Nie udało się", - "routingAntigravitySignatureTitle": "Tryb pamięci podręcznej sygnatur antygrawitacyjnych", - "routingAntigravitySignatureDesc": "__MISSING__:Control whether OmniRoute reuses only stored Gemini thought signatures or accepts validated client-provided signatures in Antigravity-compatible tool-call flows.", - "routingAntigravitySignatureEnabledLabel": "__MISSING__:Enabled", - "routingAntigravitySignatureEnabledDesc": "__MISSING__:Current behavior. Ignore client-provided signatures and keep using the stored OmniRoute flow.", - "routingAntigravitySignatureBypassLabel": "__MISSING__:Bypass", - "routingAntigravitySignatureBypassDesc": "__MISSING__:Accept client-provided signatures after lightweight validation and fall back to the stored signature when invalid.", - "routingAntigravitySignatureBypassStrictLabel": "__MISSING__:Bypass Strict", - "routingAntigravitySignatureBypassStrictDesc": "__MISSING__:Require full protobuf validation before accepting a client-provided signature.", - "routingHeaderFingerprintTitle": "Odcisk palca nagłówka (na dostawcę)", + "oneproxyFailed": "Niepowodzenie", + "routingAntigravitySignatureTitle": "Tryb cache sygnatur Antigravity", + "routingAntigravitySignatureDesc": "Kontrola nad tym, czy OmniRoute ponownie używa tylko zapisanych sygnatur myśli Gemini, czy akceptuje zweryfikowane sygnatury dostarczone przez klienta w przepływach wywołań narzędzi zgodnych z Antigravity.", + "routingAntigravitySignatureEnabledLabel": "Włączone", + "routingAntigravitySignatureEnabledDesc": "Bieżące zachowanie. Ignoruj sygnatury dostarczone przez klienta i nadal używaj zapisanego przepływu OmniRoute.", + "routingAntigravitySignatureBypassLabel": "Obejście", + "routingAntigravitySignatureBypassDesc": "Akceptuj sygnatury dostarczone przez klienta po lekkiej walidacji i stosuj fallback do zapisanej sygnatury w przypadku jej nieprawidłowości.", + "routingAntigravitySignatureBypassStrictLabel": "Rygorystyczne obejście", + "routingAntigravitySignatureBypassStrictDesc": "Wymagaj pełnej walidacji protobuf przed zaakceptowaniem sygnatury dostarczonej przez klienta.", + "routingHeaderFingerprintTitle": "Odcisk palca nagłówka (na provider)", "routingServerRejectedSave": "⚠ Serwer odrzucił zapis:", "routingAddTransformOp": "Dodaj operację transformacji", - "routingClientCacheControlTitle": "Kontrola pamięci podręcznej klienta", - "routingClientCacheControlDesc": "__MISSING__:Configure whether OmniRoute preserves client-provided cache_control markers", - "routingClientCacheControlAutoDesc": "__MISSING__:For deterministic Claude-compatible flows, preserve client-provided cache_control as-is. If the request has no cache_control, OmniRoute does not inject any bridge-owned markers for CC-compatible third-party proxy compatibility.", - "routingClientCacheControlAlwaysLabel": "__MISSING__:Always Preserve", - "routingClientCacheControlAlwaysDesc": "__MISSING__:Always forward client-provided cache_control headers to upstream providers as-is.", - "routingClientCacheControlNeverLabel": "__MISSING__:Never Preserve", - "routingClientCacheControlNeverDesc": "__MISSING__:Always remove client cache_control headers and let OmniRoute manage caching where native provider flows support it.", - "routingZeroConfigTitle": "Automatyczne wyznaczanie tras bez konfiguracji", - "routingZeroConfigDesc": "__MISSING__:Enable automatic provider selection using the auto/ prefix. When enabled, requests to auto, auto/coding, auto/fast, etc. will dynamically route across all connected providers.", - "routingDefaultAutoVariant": "Domyślny wariant automatyczny", - "visionBridge": "Most Wizji", - "visionBridgeDesc": "__MISSING__:Run an automatic vision-to-text fallback before routing image requests to text-only models.", - "visionBridgeEnabledLabel": "__MISSING__:Enabled", - "visionBridgeEnabledDesc": "__MISSING__:Toggle the pre-call bridge that replaces image parts with extracted text.", - "visionBridgeModel": "Model mostu", + "routingClientCacheControlTitle": "Kontrola cache klienta", + "routingClientCacheControlDesc": "Skonfiguruj, czy OmniRoute zachowuje znaczniki cache_control dostarczone przez klienta", + "routingClientCacheControlAutoDesc": "W przypadku deterministycznych przepływów zgodnych z Claude zachowaj cache_control dostarczone przez klienta w niezmienionej formie. Jeśli żądanie nie zawiera cache_control, OmniRoute nie wstrzykuje żadnych znaczników należących do mostu w celu zachowania kompatybilności z zewnętrznymi proxy zgodnymi z CC.", + "routingClientCacheControlAlwaysLabel": "Zawsze zachowuj", + "routingClientCacheControlAlwaysDesc": "Zawsze przekazuj nagłówki cache_control dostarczone przez klienta do upstream providers w niezmienionej formie.", + "routingClientCacheControlNeverLabel": "Nigdy nie zachowuj", + "routingClientCacheControlNeverDesc": "Zawsze usuwaj nagłówki cache_control klienta i pozwól OmniRoute zarządzać pamięcią podręczną tam, gdzie natywne przepływy provider to obsługują.", + "routingZeroConfigTitle": "Auto-routing zero-config", + "routingZeroConfigDesc": "Włącz automatyczny wybór provider za pomocą prefiksu auto/. Po włączeniu żądania do auto, auto/coding, auto/fast itp. będą dynamicznie kierowane do wszystkich połączonych providers.", + "routingDefaultAutoVariant": "Domyślny wariant auto", + "visionBridge": "Vision Bridge", + "visionBridgeDesc": "Uruchom automatyczny fallback vision-to-text przed przekierowaniem żądań obrazów do wyłącznie tekstowych models.", + "visionBridgeEnabledLabel": "Włączone", + "visionBridgeEnabledDesc": "Przełącz mostek przed połączeniem, który zastępuje części obrazu wyodrębnionym tekstem.", + "visionBridgeModel": "Bridge model", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", - "visionBridgeModelHint": "__MISSING__:Any OmniRoute model ID that supports vision can be used here.", - "visionBridgePrompt": "Komunikat dotyczący mostu", - "visionBridgePromptPlaceholder": "Opisz zwięźle ten obraz.", - "visionBridgePromptHint": "__MISSING__:Sent to the vision model before the extracted description is injected back into the original request.", + "visionBridgeModelHint": "Można tu użyć dowolnego ID model OmniRoute obsługującego vision.", + "visionBridgePrompt": "Bridge Prompt", + "visionBridgePromptPlaceholder": "Opisz krótko ten obraz.", + "visionBridgePromptHint": "Wysyłane do vision model przed ponownym wstrzyknięciem wyodrębnionego opisu do oryginalnego żądania.", "visionBridgeTimeoutMs": "Limit czasu (ms)", "visionBridgeMaxImagesPerRequest": "Maksymalna liczba obrazów na żądanie", - "resilienceMaxBackoffSteps": "Max backoff steps", - "resilienceProviderBreakerTitle": "Circuit Breaker per Provider", - "resilienceFailureThreshold": "Failure threshold", - "resilienceDegradationThreshold": "Degradation threshold", - "resilienceResetTimeout": "Zresetuj limit czasu", - "resilienceFailureThresholdLabel": "Próg awarii", - "resilienceResetTimeoutLabel": "Zresetuj limit czasu", - "resilienceConnectionCooldownTitle": "Connection Cooldown", - "resilienceUseUpstreamRetryHintsLabel": "Skorzystaj ze wskazówek dotyczących ponownej próby przesłania", - "resilienceUseUpstream429BreakerLabel": "Skorzystaj z podpowiedzi 429 (breaker)", - "resilienceMaxBackoffStepsLabel": "Maksymalne kroki wycofywania", + "resilienceMaxBackoffSteps": "Maksymalna liczba kroków backoff", + "resilienceProviderBreakerTitle": "Circuit Breaker na Provider", + "resilienceFailureThreshold": "Próg niepowodzeń", + "resilienceDegradationThreshold": "Próg degradacji", + "resilienceResetTimeout": "Limit czasu resetowania", + "resilienceFailureThresholdLabel": "Próg niepowodzeń", + "resilienceResetTimeoutLabel": "Limit czasu resetowania", + "resilienceConnectionCooldownTitle": "Cooldown połączenia", + "resilienceUseUpstreamRetryHintsLabel": "Używaj sugestii ponawiania upstream", + "resilienceUseUpstream429BreakerLabel": "Używaj sugestii 429 upstream (breaker)", + "resilienceMaxBackoffStepsLabel": "Maksymalna liczba kroków backoff", "resilienceYes": "Tak", "resilienceNo": "Nie", - "resilienceDefault": "Default", - "storageDatabaseBackupRetention": "Przechowywanie kopii zapasowych bazy danych", - "storageDatabaseBackups": "__MISSING__:Database backups", - "storagePurgeData": "Usuń dane", - "storagePurgeDataDesc": "__MISSING__:Immediately delete all records without applying retention checks. Use with caution.", - "storageRetentionCleanup": "__MISSING__:Retention Settings", - "storageRetentionCleanupDesc": "__MISSING__:Configure operational record retention and database backup cleanup.", - "retentionCallDays": "__MISSING__:Call {count}d", - "retentionAppDays": "__MISSING__:App {count}d", - "retentionRows": "__MISSING__:{count} rows", - "retentionQuotaSnapshots": "Migawki przydziału (dni)", - "retentionCompressionAnalytics": "__MISSING__:Compression Analytics (days)", - "retentionMcpAudit": "Audyt MCP (dni)", - "retentionA2aEvents": "Wydarzenia A2A (dni)", - "retentionCallLogs": "Dzienniki połączeń (dni)", - "retentionUsageHistory": "Historia użytkowania (dni)", + "resilienceDefault": "Domyślny", + "storageDatabaseBackupRetention": "Okres przechowywania kopii zapasowych bazy danych", + "storageDatabaseBackups": "Kopie zapasowe bazy danych", + "storagePurgeData": "Wyczyść dane", + "storagePurgeDataDesc": "Natychmiast usuń wszystkie rekordy bez stosowania kontroli retencji. Używaj ostrożnie.", + "storageRetentionCleanup": "Ustawienia retencji", + "storageRetentionCleanupDesc": "Skonfiguruj retencję rekordów operacyjnych i oczyszczanie kopii zapasowych bazy danych.", + "retentionCallDays": "Wywołania {count} d", + "retentionAppDays": "Aplikacja {count} d", + "retentionRows": "{count} wierszy", + "retentionQuotaSnapshots": "Migawki quota (dni)", + "retentionCompressionAnalytics": "Analityka kompresji (dni)", + "retentionMcpAudit": "Audit MCP (dni)", + "retentionA2aEvents": "Zdarzenia A2A (dni)", + "retentionCallLogs": "Logi wywołań (dni)", + "retentionUsageHistory": "Historia użycia (dni)", "retentionMemoryEntries": "Wpisy pamięci (dni)", - "saveRetentionSettings": "__MISSING__:Save retention settings", - "storageAutoVacuumMode": "Tryb automatycznego odkurzania", - "storageScheduledVacuum": "Zaplanowana próżnia", - "storageVacuumHour": "Godzina próżni (0-23)", - "storagePageSize": "Rozmiar strony (w bajtach)", + "retentionXpAuditLog": "Log audytu XP (dni)", + "saveRetentionSettings": "Zapisz ustawienia retencji", + "storageAutoVacuumMode": "Tryb Auto Vacuum", + "storageScheduledVacuum": "Zaplanowane vacuum", + "storageVacuumHour": "Godzina vacuum (0-23)", + "storagePageSize": "Rozmiar strony (bajty)", "storageDatabaseSize": "Rozmiar bazy danych", "storagePageCount": "Liczba stron", - "storageFreelistCount": "Liczba bezpłatnych list", - "storageLastVacuum": "Ostatnia próżnia", + "storageFreelistCount": "Liczba freelist", + "storageLastVacuum": "Ostatnie vacuum", "storageLastOptimization": "Ostatnia optymalizacja", "storageIntegrityCheck": "Kontrola integralności", "storageIntegrityOk": "✓ OK", "storageIntegrityError": "✗ Błąd", - "storageUsageTokenBuffer": "Bufor tokenów użycia", - "storageUsageTokenBufferDesc": "__MISSING__:Extra tokens added to reported usage to account for system prompt overhead.", - "storageUsageTokenBufferHint": "__MISSING__:Set to 0 to report raw provider token counts. Default: 2000.", - "storageUsageTokenBufferCurrent": "__MISSING__:Current: {value}", + "storageUsageTokenBuffer": "Bufor użycia tokens", + "storageUsageTokenBufferDesc": "Dodatkowe tokens dodawane do raportowanego użycia, aby uwzględnić narzut system prompt.", + "storageUsageTokenBufferHint": "Ustaw na 0, aby raportować surową liczbę tokens provider. Domyślnie: 2000.", + "storageUsageTokenBufferCurrent": "Bieżąca wartość: {value}", + "redisLauncherTitle": "Lokalny Redis", + "redisLauncherDesc": "Uruchomienie jednym kliknięciem kontenera Redis 7 (Podman lub Docker) na potrzeby pamięci podręcznej odpowiedzi, śledzenia quota i rate limit.", + "redisLauncherRefresh": "Odśwież", + "redisLauncherStop": "Zatrzymaj", + "redisLauncherLaunching": "Uruchamianie...", + "redisLauncherLaunch": "Uruchom Redis", + "redisLauncherContainer": "Kontener", + "redisLauncherRunning": "Działa", + "redisLauncherReachable": "Dostępny", + "redisLauncherError": "Błąd: {message}", + "redisLauncherHint": "Odpowiednik uruchomienia `omniroute redis up`. Kontener ma nazwę `omniroute-redis` i nasłuchuje na 127.0.0.1:6379.", "compressionSettingsAutoTriggerMode": "Tryb automatycznego wyzwalania", - "compressionSettingsMcpDescriptionCompression": "Kompresja opisu MCP", - "mcpAccessibilityTitle": "__MISSING__:MCP accessibility output", - "compressionSettingsCavemanIntensity": "Intensywność jaskiniowca", - "compressionSettingsCavemanOutputMode": "Tryb wyjściowy jaskiniowca", - "compressionSettingsOutputStyles": "__MISSING__:Output styles", - "compressionStylesTileTitle": "__MISSING__:Output styles", + "compressionSettingsMcpDescriptionCompression": "Kompresja opisów MCP", + "mcpAccessibilityTitle": "Wyjście dostępności MCP", + "compressionSettingsCavemanIntensity": "Intensywność Caveman", + "compressionSettingsCavemanOutputMode": "Tryb wyjściowy Caveman", + "compressionSettingsOutputStyles": "Style wyjściowe", + "compressionStylesTileTitle": "Style wyjściowe", "compressionSettingsOutputIntensity": "Intensywność wyjściowa", - "compressionSettingsAutoClarityBypass": "Automatyczne obejście przejrzystości", - "resilienceWaitForCooldown": "Poczekaj na odnowienie", + "compressionSettingsAutoClarityBypass": "Automatyczne omijanie przejrzystości", + "resilienceWaitForCooldown": "Czekaj na cooldown", "resilienceEnableServerSideWait": "Włącz oczekiwanie po stronie serwera", - "resilienceMaximumRetries": "Maksymalna liczba ponownych prób", - "resilienceMaximumWaitPerRetry": "Maksymalny czas oczekiwania na ponowną próbę", - "memorySkillsSkillsmpMarketplace": "Rynek umiejętności MP", + "resilienceMaximumRetries": "Maksymalna liczba ponowień", + "resilienceMaximumWaitPerRetry": "Maksymalny czas oczekiwania na ponowienie", + "memorySkillsSkillsmpMarketplace": "Marketplace SkillsMP", "memorySkillsFailedToSave": "Nie udało się zapisać", "memorySkillsApiKey": "Klucz API", - "memorySkillsActiveSkillsProvider": "Dostawca aktywnych umiejętności", - "cliproxyapiFallback": "Rozwiązanie awaryjne CLIProxyAPI", - "cliproxyapiEnableFallback": "Włącz rezerwę CLIProxyAPI", - "cliproxyapiUrl": "Adres URL CLIProxyAPI", - "cliproxyapiStatus": "Stan CLIProxyAPI", + "memorySkillsActiveSkillsProvider": "Aktywny Skills Provider", + "cliproxyapiFallback": "CLIProxyAPI Fallback", + "cliproxyapiEnableFallback": "Włącz CLIProxyAPI Fallback", + "cliproxyapiUrl": "CLIProxyAPI URL", + "cliproxyapiStatus": "CLIProxyAPI Status", "cliproxyapiNotDetected": "Nie wykryto", - "cliproxyapiImportAuthTitle": "__MISSING__:Import accounts from CLIProxyAPI", - "cliproxyapiImportAuthDesc": "__MISSING__:Import the OAuth accounts CLIProxyAPI already saved in ~/.cli-proxy-api/ as OmniRoute connections, so you don't have to log in to each account again. Supported account types (Gemini, Codex, Claude, Antigravity, Qwen, Kimi) are imported; others are skipped.", - "cliproxyapiImportAuthButton": "__MISSING__:Import accounts", - "payloadRulesTitle": "Zasady dotyczące ładunku", - "payloadRulesDesc": "__MISSING__:Configure request payload mutations by model and protocol. Changes are persisted in settings and hot reloaded into the runtime immediately after save.", - "payloadRuleDefaultTitle": "__MISSING__:default", - "payloadRuleDefaultDesc": "__MISSING__:Applies params only when the target path is missing from the outgoing payload.", - "payloadRuleOverrideTitle": "__MISSING__:override", - "payloadRuleOverrideDesc": "__MISSING__:Forces values onto the payload, replacing anything already present at that path.", - "payloadRuleFilterTitle": "__MISSING__:filter", - "payloadRuleFilterDesc": "__MISSING__:Removes blocked params from the payload before the upstream request is sent.", - "payloadRuleDefaultRawTitle": "__MISSING__:defaultRaw", - "payloadRuleDefaultRawDesc": "__MISSING__:Like default, but string values are parsed as JSON first when possible. The legacy input alias default-raw is also accepted on save.", - "payloadEditorTitle": "__MISSING__:Editor", - "payloadEditorDesc": "__MISSING__:Use the runtime schema shape: default, override, filter, defaultRaw. The API also accepts the legacy input key default-raw.", - "payloadEditorReady": "__MISSING__:Ready", - "payloadResetInfo": "__MISSING__:Editor reset to the neutral template. Save to apply it.", - "payloadSaveSuccess": "__MISSING__:Payload rules saved and hot reloaded.", - "payloadJsonParseError": "__MISSING__:JSON parse error: {error}", - "payloadMustBeObject": "__MISSING__:Payload rules must be a JSON object.", - "payloadInvalidJson": "__MISSING__:Invalid JSON payload.", - "payloadValidJsonRequired": "__MISSING__:Payload rules must be valid JSON before saving.", - "savePayloadRules": "__MISSING__:Save Payload Rules", - "requestLimitsTitle": "__MISSING__:Request Limits", - "requestLimitsDesc": "__MISSING__:Configure global request limits and concurrency guards.", - "maxRequestSizeLabel": "__MISSING__:Max Request Size (MB)", - "maxRequestSizeDesc": "__MISSING__:Maximum allowed size for incoming API requests.", - "maxResponseSizeLabel": "__MISSING__:Max Response Size (MB)", - "maxResponseSizeDesc": "__MISSING__:Maximum allowed size for outgoing API responses.", - "maxRequestTokensLabel": "__MISSING__:Max Request Tokens", - "maxRequestTokensDesc": "__MISSING__:Maximum total tokens allowed in a single request.", - "maxResponseTokensLabel": "__MISSING__:Max Response Tokens", - "maxResponseTokensDesc": "__MISSING__:Maximum total tokens allowed in a single response.", - "modelCooldownsTitle": "Modele w czasie odnowienia", - "modelCooldownsEmpty": "Brak modeli w fazie odnowienia.", - "responsesStateTitle": "__MISSING__:Responses State", - "responsesStateDesc": "__MISSING__:Control how OmniRoute forwards previous_response_id.", - "responsesStateModeLabel": "__MISSING__:previous_response_id handling", - "responsesStateModeAuto": "__MISSING__:Auto", - "responsesStateModeStrip": "__MISSING__:Strip", - "responsesStateModePreserve": "__MISSING__:Preserve", - "responsesStateHint": "__MISSING__:Auto strips previous_response_id unless a connection explicitly enables OpenAI Responses storage. Strip is safest for stateless clients such as VS Code Custom Endpoint; context then depends on the client sending full history.", - "responsesStateSaveError": "__MISSING__:Failed to update Responses state setting", - "codexFastTierTitle": "Szybki poziom Kodeksu", - "codexFastTierDesc": "Globalnie wstrzyknij service_tier=priority dla żądań OpenAI Codex.", - "codexFastTierHint": "Po włączeniu OmniRoute dodaje service_tier=priority do wychodzących żądań Kodeksu dla połączeń, które nie określają jeszcze warstwy. Warstwa priorytetowa wymaga klucza API OpenAI Enterprise lub ścieżki Kodeksu uwierzytelniania ChatGPT; inne typy kluczy otrzymają od OpenAI błąd związany z poziomem. Ustawienia poszczególnych połączeń na stronie dostawcy Kodeksu mają pierwszeństwo.", - "codexFastTierSaveError": "Nie udało się zaktualizować ustawienia szybkiego poziomu Codex", - "codexFastTierTierLabel": "__MISSING__:Service tier", - "codexFastTierTierPriority": "__MISSING__:Priority", - "codexFastTierTierFlex": "__MISSING__:Flex", - "codexFastTierTierDefault": "__MISSING__:Default", - "codexFastTierModelsLabel": "__MISSING__:Fast-tier models", - "codexFastTierModelsHint": "__MISSING__:Only checked models receive service_tier when Fast Tier is enabled.", - "codexFastTierModelCheckbox": "__MISSING__:Enable Fast Tier for {model}", - "claudeFastModeTitle": "Tryb szybki Claude'a", - "claudeFastModeDesc": "Włącz wybrane żądania Claude'a w tryb Anthropic Fast (prędkość: „szybka”).", - "claudeFastModeHint": "Anthropic oficjalnie nie obsługuje trybu szybkiego dla klientów w stylu SDK. Po włączeniu OmniRoute przekazuje nagłówek X-CPA-Force-Fast-Mode, dzięki czemu sparowana kompilacja CLIProxyAPI może wyrazić zgodę na fałszowanie punktu wejścia. Tylko wymienione modele Opus są sprawdzane po stronie klienta przez Anthropic. Poziom subskrypcji, plan maksymalny i saldo środków w trybie szybkim są nadal wymuszane po stronie serwera — Anthropic może zwrócić out_of_credits nawet wtedy, gdy przełącznik jest włączony.", - "claudeFastModeModelsLabel": "Dotyczy modeli ({count})", - "claudeFastModeModelCheckbox": "Włącz tryb szybki dla {model}", - "claudeFastModeSaveError": "Nie udało się zaktualizować ustawienia trybu szybkiego Claude", + "cliproxyapiImportAuthTitle": "Importuj konta z CLIProxyAPI", + "cliproxyapiImportAuthDesc": "Importuj konta OAuth, które CLIProxyAPI zapisał już w ~/.cli-proxy-api/ jako połączenia OmniRoute, aby nie trzeba było ponownie logować się na każde konto. Obsługiwane typy kont (Gemini, Codex, Claude, Antigravity, Qwen, Kimi) zostaną zaimportowane; inne zostaną pominięte.", + "cliproxyapiImportAuthButton": "Importuj konta", + "payloadRulesTitle": "Reguły Payload", + "payloadRulesDesc": "Skonfiguruj mutacje payload żądania według model i protokołu. Zmiany są zapisywane w ustawieniach i natychmiast po zapisie przeładowywane na gorąco (hot reload) do runtime.", + "payloadRuleDefaultTitle": "default", + "payloadRuleDefaultDesc": "Stosuje parametry tylko wtedy, gdy w wychodzącym payload brakuje ścieżki docelowej.", + "payloadRuleOverrideTitle": "override", + "payloadRuleOverrideDesc": "Wymusza wartości w payload, zastępując wszystko, co już znajduje się pod tą ścieżką.", + "payloadRuleFilterTitle": "filter", + "payloadRuleFilterDesc": "Usuwa zablokowane parametry z payload przed wysłaniem żądania upstream.", + "payloadRuleDefaultRawTitle": "defaultRaw", + "payloadRuleDefaultRawDesc": "Podobnie jak default, ale wartości tekstowe są najpierw parsowane jako JSON, jeśli to możliwe. Starszy alias wejściowy default-raw jest również akceptowany przy zapisie.", + "payloadEditorTitle": "Edytor", + "payloadEditorDesc": "Użyj kształtu schematu runtime: default, override, filter, defaultRaw. API akceptuje również starszy klucz wejściowy default-raw.", + "payloadEditorReady": "Gotowy", + "payloadResetInfo": "Edytor został zresetowany do neutralnego szablonu. Zapisz, aby go zastosować.", + "payloadSaveSuccess": "Reguły payload zostały zapisane i przeładowane na gorąco (hot reload).", + "payloadJsonParseError": "Błąd parsowania JSON: {error}", + "payloadMustBeObject": "Reguły payload muszą być obiektem JSON.", + "payloadInvalidJson": "Nieprawidłowy payload JSON.", + "payloadValidJsonRequired": "Reguły payload muszą być prawidłowym obiektem JSON przed zapisaniem.", + "savePayloadRules": "Zapisz reguły payload", + "requestLimitsTitle": "Limity żądań", + "requestLimitsDesc": "Skonfiguruj globalne limity żądań i zabezpieczenia współbieżności.", + "maxRequestSizeLabel": "Maksymalny rozmiar żądania (MB)", + "maxRequestSizeDesc": "Maksymalny dozwolony rozmiar przychodzących żądań API.", + "maxResponseSizeLabel": "Maksymalny rozmiar odpowiedzi (MB)", + "maxResponseSizeDesc": "Maksymalny dozwolony rozmiar wychodzących odpowiedzi API.", + "maxRequestTokensLabel": "Maksymalna liczba tokens w żądaniu", + "maxRequestTokensDesc": "Maksymalna łączna liczba tokens dozwolona w pojedynczym żądaniu.", + "maxResponseTokensLabel": "Maksymalna liczba tokens w odpowiedzi", + "maxResponseTokensDesc": "Maksymalna łączna liczba tokens dozwolona w pojedynczej odpowiedzi.", + "modelCooldownsTitle": "Models w cooldown", + "modelCooldownsEmpty": "Obecnie brak models w cooldown.", + "responsesStateTitle": "Stan Responses", + "responsesStateDesc": "Kontroluj, jak OmniRoute przekazuje previous_response_id.", + "responsesStateModeLabel": "Obsługa previous_response_id", + "responsesStateModeAuto": "Auto", + "responsesStateModeStrip": "Usuń", + "responsesStateModePreserve": "Zachowaj", + "responsesStateHint": "Auto usuwa previous_response_id, chyba że połączenie jawnie włącza przechowywanie OpenAI Responses. Strip jest najbezpieczniejszy dla bezstanowych klientów, takich jak VS Code Custom Endpoint; kontekst zależy wtedy od klienta wysyłającego pełną historię.", + "responsesStateSaveError": "Nie udało się zaktualizować ustawienia stanu Responses", + "codexFastTierTitle": "Codex Fast Tier", + "codexFastTierDesc": "Globalnie wstrzykuje service_tier=priority dla żądań OpenAI Codex.", + "codexFastTierHint": "Po włączeniu OmniRoute dodaje service_tier=priority do wychodzących żądań Codex dla połączeń, które nie określają jeszcze tier. Priority tier wymaga klucza API OpenAI Enterprise lub ścieżki Codex ChatGPT-auth; inne typy kluczy otrzymają błąd związany z tier od OpenAI. Ustawienia dla poszczególnych połączeń na stronie provider Codex mają pierwszeństwo.", + "codexFastTierSaveError": "Nie udało się zaktualizować ustawienia Codex Fast Tier", + "codexAutoPingTitle": "Codex Quota Auto-Ping", + "codexAutoPingDesc": "Opcjonalnie (opt-in) na połączenie: wysyła małe żądanie tuż po zresetowaniu okna sesji Codex, dzięki czemu nie jest ono zimne, gdy jest potrzebne.", + "codexAutoPingWarning": "Zużywa niewielką część rzeczywistej Codex quota przy każdym pingowaniu. Domyślnie wyłączone — włączaj tylko dla połączeń, na których aktywnie polegasz.", + "codexAutoPingSaveError": "Nie udało się zaktualizować ustawienia Codex Auto-Ping", + "codexAutoPingToggleAria": "Przełącz auto-ping Codex quota dla {connection}", + "codexFastTierTierLabel": "Service tier", + "codexFastTierTierPriority": "Priority", + "codexFastTierTierFlex": "Flex", + "codexFastTierTierDefault": "Domyślny", + "codexFastTierModelsLabel": "Models Fast-tier", + "codexFastTierModelsHint": "Tylko zaznaczone models otrzymują service_tier, gdy Fast Tier jest włączony.", + "codexFastTierModelCheckbox": "Włącz Fast Tier dla {model}", + "claudeFastModeTitle": "Claude Fast Mode", + "claudeFastModeDesc": "Włącz wybrane żądania Claude do Anthropic Fast Mode (speed:\"fast\").", + "claudeFastModeHint": "Anthropic nie obsługuje oficjalnie Fast Mode dla klientów typu SDK. Po włączeniu OmniRoute przekazuje nagłówek X-CPA-Force-Fast-Mode, dzięki czemu sparowana wersja CLIProxyAPI może sfałszować entrypoint poprzez opt-in. Tylko wymienione models Opus są ograniczane przez kontrolę Anthropic po stronie klienta. Poziom subskrypcji, plan Max oraz saldo kredytów Fast Mode są nadal sprawdzane po stronie serwera — Anthropic może zwrócić out_of_credits, nawet gdy przełącznik jest włączony.", + "claudeFastModeModelsLabel": "Zastosowano do models ({count})", + "claudeFastModeModelCheckbox": "Włącz Fast Mode dla {model}", + "claudeFastModeSaveError": "Nie udało się zaktualizować ustawienia Claude Fast Mode", "authz": { - "title": "__MISSING__:Authorization Inventory", - "description": "__MISSING__:5-tier route classification with live bypass policy. Read shows the full taxonomy; mutations re-prompt for the management password.", - "loading": "__MISSING__:Loading inventory…", - "loadError": "__MISSING__:Failed to load authz inventory", + "cors": { + "wildcard": { + "title": "CORS jest otwarty dla każdego źródła (CORS_ALLOW_ALL=true)", + "desc": "Dowolna witryna może wywołać API tego serwera z przeglądarki odwiedzającego. Używaj tylko w zaufanych sieciach — ustaw jawne źródła w ALLOWED_ORIGINS i wyłącz CORS_ALLOW_ALL na produkcji." + } + }, + "title": "Inwentarz autoryzacji", + "description": "5-poziomowa klasyfikacja tras z aktywną polityką obejścia. Odczyt pokazuje pełną taksonomię; modyfikacje wymagają ponownego podania hasła zarządzania.", + "loading": "Ładowanie inwentarza…", + "loadError": "Nie udało się załadować inwentarza autoryzacji", "tier": { - "LOCAL_ONLY": "__MISSING__:Local only", - "ALWAYS_PROTECTED": "__MISSING__:Always protected", - "MANAGEMENT": "__MISSING__:Management", - "CLIENT_API": "__MISSING__:Client API", - "PUBLIC": "__MISSING__:Public" + "LOCAL_ONLY": "Tylko lokalnie", + "ALWAYS_PROTECTED": "Zawsze chronione", + "MANAGEMENT": "Zarządzanie", + "CLIENT_API": "Client API", + "PUBLIC": "Publiczne" }, "bypass": { - "section": "__MISSING__:Manage-scope bypass", + "section": "Obejście z zakresem manage", "kill_switch": { - "label": "__MISSING__:Bypass kill-switch", - "desc": "__MISSING__:Master toggle. When off, no LOCAL_ONLY prefix is reachable from non-loopback regardless of the per-prefix list." + "label": "Kill-switch obejścia", + "desc": "Główny przełącznik. Gdy jest wyłączony, żaden prefiks LOCAL_ONLY nie jest osiągalny z adresów innych niż loopback, niezależnie od listy prefiksów." }, "prefix": { - "label": "__MISSING__:Bypassable prefixes", - "desc": "__MISSING__:LOCAL_ONLY prefixes that manage-scope API keys (or dashboard sessions) may reach from non-loopback hosts.", - "add": "__MISSING__:Add prefix", - "placeholder": "__MISSING__:/api/mcp/v2/", - "empty": "__MISSING__:No prefixes configured. Bypass effectively off." + "label": "Prefiksy z możliwością obejścia", + "desc": "Prefiksy LOCAL_ONLY, do których klucze API z zakresem manage (lub sesje dashboard) mogą uzyskiwać dostęp z hostów innych niż loopback.", + "add": "Dodaj prefiks", + "placeholder": "/api/mcp/v2/", + "empty": "Brak skonfigurowanych prefiksów. Obejście jest faktycznie wyłączone." }, - "cli_tools_runtime_note": "__MISSING__:Spawn-capable prefix. Compile-time deny; cannot be made bypassable. Shown read-only." + "cli_tools_runtime_note": "Prefiks z możliwością uruchamiania procesów (spawn). Odmowa na etapie kompilacji; nie można zezwolić na obejście. Pokazano w trybie tylko do odczytu." }, "password": { "prompt": { - "label": "__MISSING__:Current password", - "desc": "__MISSING__:Re-confirm to apply security-impacting changes." + "label": "Aktualne hasło", + "desc": "Potwierdź ponownie, aby zastosować zmiany wpływające na bezpieczeństwo." }, - "placeholder": "__MISSING__:Current management password", - "cancel": "__MISSING__:Cancel", - "submit": "__MISSING__:Apply" + "placeholder": "Aktualne hasło zarządzania", + "cancel": "Anuluj", + "submit": "Zastosuj" }, - "save": "__MISSING__:Save changes", - "saved": "__MISSING__:Authz settings updated", - "pending": "__MISSING__:Unsaved changes", + "save": "Zapisz zmiany", + "saved": "Ustawienia autoryzacji zaktualizowane", + "pending": "Niezapisane zmiany", "badge": { - "bypassable": "__MISSING__:Bypassable via manage scope", - "strict": "__MISSING__:Strict loopback", - "auth_required": "__MISSING__:Auth required", - "public": "__MISSING__:Public", - "always_protected": "__MISSING__:Always protected", - "spawn_capable": "__MISSING__:Spawn-capable" + "bypassable": "Możliwość obejścia przez zakres manage", + "strict": "Rygorystyczny loopback", + "auth_required": "Wymagana autoryzacja", + "public": "Publiczne", + "always_protected": "Zawsze chronione", + "spawn_capable": "Z możliwością uruchamiania procesów (spawn)" }, "error": { - "PASSWORD_REQUIRED": "__MISSING__:Current password required to apply these changes.", - "PASSWORD_MISMATCH": "__MISSING__:Current password is incorrect.", - "INSUFFICIENT_SCOPE": "__MISSING__:API key lacks the manage scope.", - "BYPASS_PREFIX_NOT_ALLOWED": "__MISSING__:One or more prefixes target spawn-capable routes and cannot be bypassed.", - "GENERIC": "__MISSING__:Failed to update authz settings." + "PASSWORD_REQUIRED": "Wymagane jest aktualne hasło, aby zastosować te zmiany.", + "PASSWORD_MISMATCH": "Aktualne hasło jest niepoprawne.", + "INSUFFICIENT_SCOPE": "Klucz API nie posiada zakresu manage.", + "BYPASS_PREFIX_NOT_ALLOWED": "Jeden lub więcej prefiksów wskazuje na trasy z możliwością uruchamiania procesów (spawn) i nie mogą być one ominięte.", + "GENERIC": "Nie udało się zaktualizować ustawień autoryzacji." } }, - "resilienceBaseCooldownLabel": "Podstawowy czas odnowienia", + "resilienceBaseCooldownLabel": "Bazowy cooldown", "scopeLabel": "Zakres", "triggerLabel": "Wyzwalacz", "effectLabel": "Efekt", "statusEnabled": "Włączone", - "statusDisabled": "Niepełnosprawny", - "resilienceRequestQueueScope": "Na kolejkę żądań", - "resilienceRequestQueueTrigger": "Przed wysłaniem do upstream", - "resilienceRequestQueueEffect": "Kolejkuje żądania, ogranicza współbieżność i rozdziela wywołania", - "resilienceRequestQueueDesc": "Ta warstwa kontroluje tylko kolejkowanie i tempo. Nie przechowuje czasów odnowienia ani otwartych wyłączników.", + "statusDisabled": "Wyłączone", + "resilienceRequestQueueScope": "Dla kolejki żądań", + "resilienceRequestQueueTrigger": "Przed wysłaniem do upstreamu", + "resilienceRequestQueueEffect": "Kolejkuje żądania, ogranicza współbieżność i rozdziela wywołania w czasie", + "resilienceRequestQueueDesc": "Ta warstwa kontroluje tylko kolejkowanie i tempo wywołań. Nie przechowuje okresów schładzania ani nie otwiera bezpieczników (circuit breakers).", "resilienceAutoEnableApiKeyProvidersDesc": "Domyślnie włącza ochronę kolejki dla aktywnych połączeń klucza API.", "resilienceMaxQueueWait": "Maksymalny czas oczekiwania w kolejce", - "resilienceConnectionCooldownScope": "Indywidualne połączenie", - "resilienceConnectionCooldownTrigger": "Gdy połączenie zwraca przejściową awarię przesyłania danych", - "resilienceConnectionCooldownEffect": "Tymczasowo pomija to połączenie i zwiększa wycofywanie w przypadku powtarzających się błędów", - "resilienceConnectionCooldownDesc": "Podstawowy czas odnowienia obejmuje przejściowe awarie połączenia. Gdy włączone są wskazówki dotyczące ponownych prób przesyłania danych, jawne okno dostawcy zastępuje lokalny czas odnowienia.", - "resilienceUseUpstreamRetryHintsDesc": "Używa wartości ponownej próby/resetu od dostawcy nadrzędnego, jeśli są dostępne.", - "resilienceUseUpstream429BreakerHints": "Użyj wskazówek 429, aby uzyskać czas odnowienia niszczyciela", - "resilienceUseUpstream429BreakerHintsShort": "Skorzystaj z podpowiedzi 429", - "resilienceUseUpstream429BreakerHintsDesc": "Zastosuj sygnały „Ponów próbę po” / wyczerpanie limitu z 429 odpowiedzi do czasu schładzania wyłącznika. Domyślnie stosowana jest polityka dotycząca poszczególnych dostawców: domyślnie włączona jest opcja bezpośrednich dostawców usług w chmurze; dostawcy odwrotnego proxy, dostawcy hostowani na własnym serwerze i dostawcy wspierani przez CLI są domyślnie wyłączeni. Niezależnie od opcji „Użyj wskazówek dotyczących ponownej próby”.", - "resilienceProviderBreakerScope": "Cały dostawca", - "resilienceProviderBreakerTrigger": "Ostateczne awarie transportu/serwera po wyczerpaniu rezerwowego połączenia", - "resilienceProviderBreakerEffect": "Tymczasowo blokuje tego dostawcę do czasu upłynięcia czasu resetowania", - "resilienceProviderBreakerDesc": "Stan wyłącznika na żywo pojawia się tylko na stronie Kondycja. Limity szybkości 429 w zakresie połączenia pozostają w czasie oczekiwania na połączenie i nie powodują wyłączenia wyłącznika dostawcy.", - "resilienceResetTime": "Zresetuj czas", - "resilienceWaitForCooldownTitle": "Poczekaj na ochłodzenie", - "resilienceWaitForCooldownScope": "Aktualne żądanie klienta", - "resilienceWaitForCooldownTrigger": "Kiedy wszystkie połączenia kandydatów już ostygną", - "resilienceWaitForCooldownEffect": "Czeka na serwerze i ponawia próbę po upłynięciu pierwszego czasu odnowienia", - "resilienceWaitForCooldownDesc": "Ma to wpływ tylko na bieżące żądanie. Nie przechowuje stanu połączenia ani dostawcy.", + "resilienceConnectionCooldownScope": "Pojedyncze połączenie", + "resilienceConnectionCooldownTrigger": "Gdy połączenie zwraca tymczasowy błąd upstreamu", + "resilienceConnectionCooldownEffect": "Tymczasowo pomija to połączenie i zwiększa opóźnienie (backoff) przy powtarzających się błędach", + "resilienceConnectionCooldownDesc": "Bazowy cooldown obejmuje tymczasowe błędy połączeń. Gdy wskazówki ponownej próby (retry) z upstreamu są włączone, jawne okno providera nadpisuje lokalny cooldown.", + "resilienceUseUpstreamRetryHintsDesc": "Używa wartości retry-after/reset z upstream providera, gdy są dostępne.", + "resilienceUseUpstream429BreakerHints": "Używaj wskazówek 429 z upstreamu dla cooldown bezpiecznika", + "resilienceUseUpstream429BreakerHintsShort": "Używaj wskazówek 429 z upstreamu", + "resilienceUseUpstream429BreakerHintsDesc": "Zastosuj sygnały Retry-After / quota-exhausted z odpowiedzi 429 do czasu trwania cooldown bezpiecznika (circuit-breaker). Domyślnie używana jest polityka per-provider: bezpośredni chmurowi providers są domyślnie włączeni; providers typu reverse-proxy, self-hosted oraz CLI są domyślnie wyłączeni. Niezależnie od \"Używaj wskazówek ponownej próby z upstreamu\".", + "resilienceProviderBreakerScope": "Cały provider", + "resilienceProviderBreakerTrigger": "Ostateczne błędy transportu/serwera po wyczerpaniu fallback połączenia", + "resilienceProviderBreakerEffect": "Tymczasowo blokuje tego providera do momentu upływu czasu resetowania", + "resilienceProviderBreakerDesc": "Bieżący stan bezpiecznika pojawia się tylko na stronie Health. Ograniczenia rate limit o zakresie połączenia pozostają w obszarze Connection Cooldown i nie aktywują bezpiecznika providera.", + "resilienceResetTime": "Czas resetowania", + "resilienceWaitForCooldownTitle": "Czekaj na cooldown", + "resilienceWaitForCooldownScope": "Bieżące żądanie klienta", + "resilienceWaitForCooldownTrigger": "Gdy wszystkie kandydackie połączenia są już w trakcie schładzania", + "resilienceWaitForCooldownEffect": "Czeka na serwerze i ponawia próbę po wygaśnięciu pierwszego cooldown", + "resilienceWaitForCooldownDesc": "Wpływa to tylko na bieżące żądanie. Nie przechowuje stanu połączenia ani providera.", "resilienceEnableServerWait": "Włącz oczekiwanie po stronie serwera", - "resilienceEnableServerWaitDesc": "Po włączeniu OmniRoute czeka na upłynięcie pierwszego czasu odnowienia i automatycznie ponawia próbę.", - "resilienceMaxAttempts": "Maksymalne próby", + "resilienceEnableServerWaitDesc": "Po włączeniu OmniRoute czeka na wygaśnięcie pierwszego cooldown i automatycznie ponawia próbę.", + "resilienceMaxAttempts": "Maksymalna liczba prób", "resilienceMaxWaitPerAttempt": "Maksymalny czas oczekiwania na próbę", - "resilienceProviderCooldownTitle": "__MISSING__:Provider Cooldown", - "resilienceProviderCooldownScope": "__MISSING__:All combo requests", - "resilienceProviderCooldownTrigger": "__MISSING__:When a provider/connection fails", - "resilienceProviderCooldownEffect": "__MISSING__:Skips the failed provider for a cooldown period before retrying", - "resilienceProviderCooldownDesc": "__MISSING__:Prevents subsequent requests from re-walking the same failing providers. Cooldown scales exponentially with consecutive failures.", - "resilienceProviderCooldownEnabled": "__MISSING__:Enable global provider cooldown", - "resilienceProviderCooldownEnabledDesc": "__MISSING__:When enabled, failed providers are tracked globally and skipped for a cooldown period.", - "resilienceProviderCooldownMin": "__MISSING__:Minimum cooldown", - "resilienceProviderCooldownMax": "__MISSING__:Maximum cooldown", - "forcedFingerprintTitle": "Always enabled for {provider} — required for OAuth account safety; cannot be turned off.", - "forcedFingerprintBadge": "Required", - "codexSessionAffinityTitle": "Powinowactwo sesji Kodeksu", - "codexSessionAffinityDesc": "Utrzymuje jedną rozmowę w Kodeksie na tym samym koncie przez tyle sekund. 0 wyłącza to.", - "codexSessionAffinityTtl": "Powinowactwo TTL (sekundy)", - "resetAwareQuotaCacheTitle": "Pamięć podręczna przydziałów z możliwością resetowania", - "resetAwareQuotaCacheDesc": "Buforuje dane telemetryczne dotyczące przydziału tylko na potrzeby zamawiania z możliwością resetowania. Wstępna inspekcja przydziału nadal chroni żądania. 0/0 utrzymuje pobieranie na żywo.", - "resetAwareQuotaCacheTtl": "Świeży TTL (sekundy)", - "resetAwareQuotaCacheMaxStale": "Maksymalne przestarzałe (sekundy)", - "qdrantCleanupSuccess": "OK: usunięto {count} punktów (przechowywanie: {days} dni)", - "qdrantCleanupFailed": "Czyszczenie nie powiodło się", + "resilienceComboCooldownWaitTitle": "Oczekiwanie na cooldown combo typu quota-share", + "resilienceComboCooldownWaitDesc": "Tylko dla combos typu quota-share: przeczekaj krótki, tymczasowy cooldown i wyślij ponownie zamiast natychmiastowego zwracania 429. Nigdy nie czeka na quota_exhausted.", + "resilienceComboCooldownWaitToggleDesc": "Tylko combos typu quota-share; nigdy nie czeka na quota_exhausted.", + "resilienceComboCooldownMaxWaitMs": "Maksymalny czas oczekiwania na próbę", + "resilienceComboCooldownBudgetMs": "Całkowity budżet czasu oczekiwania", + "resilienceQuotaShareConcurrencyTitle": "Współbieżność na połączenie dla quota-share", + "resilienceQuotaShareConcurrencyDesc": "Tylko dla combos typu quota-share: gdy połączenie ustawia limit Max Concurrent, szereguj współbieżne żądania do tego konta subskrypcji, aby nigdy nie przekroczyć jego limitu. Nadmiarowe żądania czekają w kolejce zamiast zwracania błędu 429. Limit pochodzi z pola Max Concurrent każdego połączenia; ten przełącznik jedynie włącza lub wyłącza jego uwzględnianie.", + "resilienceQuotaShareConcurrencyToggleDesc": "Tylko combos typu quota-share; uwzględnia limit Max Concurrent każdego połączenia.", + "resilienceProviderCooldownTitle": "Cooldown providera", + "resilienceProviderCooldownScope": "Wszystkie żądania combo", + "resilienceProviderCooldownTrigger": "Gdy provider/połączenie ulegnie awarii", + "resilienceProviderCooldownEffect": "Pomija uszkodzonego providera na czas cooldownu przed ponowną próbą", + "resilienceProviderCooldownDesc": "Zapobiega przechodzeniu kolejnych żądań przez te same uszkodzone providers. Cooldown skaluje się wykładniczo przy kolejnych awariach.", + "resilienceProviderCooldownEnabled": "Włącz globalny cooldown providera", + "resilienceProviderCooldownEnabledDesc": "Po włączeniu awarie providers są śledzone globalnie i pomijane na czas cooldownu.", + "resilienceProviderCooldownMin": "Minimalny cooldown", + "resilienceProviderCooldownMax": "Maksymalny cooldown", + "forcedFingerprintTitle": "Zawsze włączone dla {provider} — wymagane dla bezpieczeństwa konta OAuth; nie można wyłączyć.", + "forcedFingerprintBadge": "Wymagane", + "sessionAffinityTitle": "Powinowactwo sesji (session affinity)", + "sessionAffinityDesc": "Utrzymuje jedną konwersację na tym samym koncie przez określoną liczbę sekund dla dowolnego providera. 0 wyłącza tę opcję.", + "sessionAffinityTtl": "TTL powinowactwa (sekundy)", + "resetAwareQuotaCacheTitle": "Pamięć podręczna quota uwzględniająca resetowanie", + "resetAwareQuotaCacheDesc": "Buforuje telemetrię quota wyłącznie na potrzeby sortowania uwzględniającego resetowanie. Weryfikacja wstępna (preflight) quota nadal chroni żądania. Wartość 0/0 utrzymuje pobieranie na żywo.", + "resetAwareQuotaCacheTtl": "Fresh TTL (sekundy)", + "resetAwareQuotaCacheMaxStale": "Max stale (sekundy)", + "qdrantCleanupSuccess": "OK: usunięto {count} punkt(ów) (retencja: {days} dni)", + "qdrantCleanupFailed": "Oczyszczanie nie powiodło się", "qdrantCleanupError": "Błąd: {error}", - "vercelRelaySuccess": "__MISSING__:Vercel Relay deployed successfully", - "vercelRelayButton": "__MISSING__:Deploy Vercel Relay", - "vercelRelayModalTitle": "__MISSING__:Deploy Vercel Relay", - "vercelRelayWarning": "__MISSING__:Warning: A Vercel deployment token is required. This token will only be used to create the serverless relay and will never be stored by OmniRoute.", - "vercelRelayTokenLabel": "__MISSING__:Vercel Access Token", - "vercelRelayProjectNameLabel": "__MISSING__:Vercel Project Name", - "vercelRelayFreeTierNote": "__MISSING__:Relays are lightweight proxy endpoints deployed on Vercel's free tier to bypass local network/region limitations.", - "vercelRelayDeploying": "__MISSING__:Deploying...", - "vercelRelayDeploy": "__MISSING__:Deploy", - "deployRelayButton": "__MISSING__:Deploy Relay", - "denoRelayButton": "__MISSING__:Deploy Deno Relay", - "denoRelayModalTitle": "__MISSING__:Deploy Deno Relay", - "denoRelayWarning": "__MISSING__:Warning: A Deno Deploy organization token is required. This token will only be used to create the relay app and will never be stored by OmniRoute.", - "denoRelayTokenLabel": "__MISSING__:Deno Deploy Organization Token", - "denoRelayOrgDomainLabel": "__MISSING__:Organization Domain", - "denoRelayProjectNameLabel": "__MISSING__:Deno App Name", - "denoRelayFreeTierNote": "__MISSING__:Deno Deploy v2 runs on a global edge network. Free tier: 1M requests & 100GiB outbound traffic per month, no per-request CPU limits, up to 20 active apps & 50 custom domains.", - "denoRelayDeploying": "__MISSING__:Deploying...", - "denoRelayDeploy": "__MISSING__:Deploy", - "cloudflareRelaySuccess": "__MISSING__:Cloudflare Relay deployed successfully", - "cloudflareRelayButton": "__MISSING__:Deploy Cloudflare Relay", - "cloudflareRelayModalTitle": "__MISSING__:Deploy Cloudflare Worker Relay", - "cloudflareRelayWarning": "__MISSING__:Deploys a Cloudflare Worker that proxies LLM requests through Cloudflare's edge network — masking the host IP behind dynamic Cloudflare addresses. The Worker enforces a one-time auth secret so the public workers.dev URL cannot be reused as an open relay.", - "cloudflareRelayTokenHowto": "__MISSING__:Create the API token under My Profile -> API Tokens -> Create Token -> Custom Token -> Account / Workers Scripts / Edit.", - "cloudflareRelayAccountIdLabel": "__MISSING__:Cloudflare Account ID", - "cloudflareRelayAccountIdHint": "__MISSING__:Found on the right side of the Cloudflare dashboard overview page.", - "cloudflareRelayApiTokenLabel": "__MISSING__:Cloudflare API Token", - "cloudflareRelayApiTokenHint": "__MISSING__:Requires 'Workers Scripts: Edit' permission. The token is used only at deploy time and is never stored.", - "cloudflareRelayProjectNameLabel": "__MISSING__:Worker Name", - "cloudflareRelayFreeTierNote": "__MISSING__:Free tier: 100,000 requests/day per Cloudflare account.", - "cloudflareRelayDeploying": "__MISSING__:Deploying...", - "cloudflareRelayDeploy": "__MISSING__:Deploy", - "cloudflareRelayCredsRequired": "__MISSING__:Account ID and API Token are required", - "cloudflareRelayDeployFailed": "__MISSING__:Deploy failed", - "modelLockout": "__MISSING__:Model Lockout", - "modelLockoutPageDescription": "__MISSING__:Configure which HTTP error codes trigger per-model lockout and control the cooldown behavior.", - "modelLockoutEnabled": "__MISSING__:Enable Model Lockout", - "modelLockoutEnabledDescription": "__MISSING__:When enabled, models that fail with configured error codes are temporarily locked to prevent retry loops.", - "modelLockoutErrorCodes": "__MISSING__:Error Codes", - "modelLockoutErrorCodesDescription": "__MISSING__:HTTP status codes that trigger model lockout. Type a code and click Add, or select from suggestions.", - "modelLockoutBaseCooldown": "__MISSING__:Base Cooldown (ms)", - "modelLockoutBaseCooldownDescription": "__MISSING__:Initial cooldown duration in milliseconds before a model can be retried.", - "modelLockoutMaxCooldown": "__MISSING__:Max Cooldown (ms)", - "modelLockoutMaxCooldownDescription": "__MISSING__:Maximum cooldown duration in milliseconds. Prevents excessively long lockouts.", - "modelLockoutExponentialBackoff": "__MISSING__:Exponential Backoff", - "modelLockoutExponentialBackoffDescription": "__MISSING__:When enabled, each consecutive failure increases the cooldown duration exponentially.", - "modelLockoutMaxBackoffSteps": "__MISSING__:Max Backoff Steps", - "modelLockoutMaxBackoffStepsDescription": "__MISSING__:Maximum number of backoff steps before the cooldown stops growing. The Max Cooldown cap is reached first in most configurations, making this a safety ceiling for when Max Cooldown is raised.", - "codexAutoPingTitle": "Codex Quota Auto-Ping", - "codexAutoPingDesc": "Opt-in per connection: sends a tiny request right after a Codex session window resets so it isn't cold when you need it.", - "codexAutoPingWarning": "Consumes a small amount of real Codex quota on every ping. Off by default — enable only for connections you actively rely on.", - "codexAutoPingSaveError": "Failed to update Codex Auto-Ping setting", - "codexAutoPingToggleAria": "Toggle Codex quota auto-ping for {connection}" + "vercelRelaySuccess": "Vercel Relay pomyślnie wdrożony", + "vercelRelayButton": "Wdróż Vercel Relay", + "vercelRelayModalTitle": "Wdróż Vercel Relay", + "vercelRelayWarning": "Ostrzeżenie: Wymagany jest token wdrożeniowy Vercel. Token ten zostanie użyty wyłącznie do utworzenia bezserwerowego przekaźnika (relay) i nigdy nie będzie przechowywany przez OmniRoute.", + "vercelRelayTokenLabel": "Vercel Access Token", + "vercelRelayProjectNameLabel": "Vercel Project Name", + "vercelRelayFreeTierNote": "Przekaźniki (relays) to lekkie endpoints proxy wdrażane w darmowej usłudze Vercel w celu obejścia lokalnych ograniczeń sieciowych/regionalnych.", + "vercelRelayDeploying": "Wdrażanie...", + "vercelRelayDeploy": "Wdróż", + "deployRelayButton": "Wdróż Relay", + "denoRelayButton": "Wdróż Deno Relay", + "denoRelayModalTitle": "Wdróż Deno Relay", + "denoRelayWarning": "Ostrzeżenie: Wymagany jest token organizacji Deno Deploy. Token ten zostanie użyty wyłącznie do utworzenia aplikacji przekaźnikowej i nigdy nie będzie przechowywany przez OmniRoute.", + "denoRelayTokenLabel": "Deno Deploy Organization Token", + "denoRelayOrgDomainLabel": "Domena organizacji", + "denoRelayProjectNameLabel": "Nazwa aplikacji Deno", + "denoRelayFreeTierNote": "Deno Deploy v2 działa w globalnej sieci edge. Darmowa usługa: 1 mln żądań i 100 GiB transferu wychodzącego miesięcznie, brak limitów procesora na żądanie, do 20 aktywnych aplikacji i 50 własnych domen.", + "denoRelayDeploying": "Wdrażanie...", + "denoRelayDeploy": "Wdróż", + "cloudflareRelaySuccess": "Cloudflare Relay pomyślnie wdrożony", + "cloudflareRelayButton": "Wdróż Cloudflare Relay", + "cloudflareRelayModalTitle": "Wdróż Cloudflare Worker Relay", + "cloudflareRelayWarning": "Wdraża usługę Cloudflare Worker, która przesyła żądania models przez sieć edge Cloudflare — maskując IP hosta za dynamicznymi adresami Cloudflare. Worker wymusza jednorazowy sekret autoryzacyjny, aby publiczny URL workers.dev nie mógł być ponownie użyty jako otwarty relay.", + "cloudflareRelayTokenHowto": "Utwórz token API w sekcji My Profile -> API Tokens -> Create Token -> Custom Token -> Account / Workers Scripts / Edit.", + "cloudflareRelayAccountIdLabel": "Cloudflare Account ID", + "cloudflareRelayAccountIdHint": "Znajduje się po prawej stronie strony głównej dashboard Cloudflare.", + "cloudflareRelayApiTokenLabel": "Cloudflare API Token", + "cloudflareRelayApiTokenHint": "Wymaga uprawnień 'Workers Scripts: Edit'. Token jest używany tylko podczas wdrażania i nigdy nie jest przechowywany.", + "cloudflareRelayProjectNameLabel": "Nazwa Workera", + "cloudflareRelayFreeTierNote": "Darmowa usługa: 100 000 żądań dziennie na konto Cloudflare.", + "cloudflareRelayDeploying": "Wdrażanie...", + "cloudflareRelayDeploy": "Wdróż", + "cloudflareRelayCredsRequired": "Account ID oraz API Token są wymagane", + "cloudflareRelayDeployFailed": "Wdrażanie nie powiodło się", + "modelLockout": "Model Lockout", + "modelLockoutPageDescription": "Skonfiguruj, które kody błędów HTTP wyzwalają blokadę per-model i kontroluj zachowanie cooldown.", + "modelLockoutEnabled": "Włącz Model Lockout", + "modelLockoutEnabledDescription": "Po włączeniu, models, które ulegną awarii ze skonfigurowanymi kodami błędów, są tymczasowo blokowane, aby zapobiec pętlom ponawiania prób.", + "modelLockoutErrorCodes": "Kody błędów", + "modelLockoutErrorCodesDescription": "Kody statusu HTTP, które wyzwalają model lockout. Wpisz kod i kliknij Dodaj, lub wybierz z sugestii.", + "modelLockoutBaseCooldown": "Bazowy Cooldown (ms)", + "modelLockoutBaseCooldownDescription": "Początkowy czas trwania cooldown w milisekundach, zanim model będzie mógł zostać ponownie wywołany.", + "modelLockoutMaxCooldown": "Maksymalny Cooldown (ms)", + "modelLockoutMaxCooldownDescription": "Maksymalny czas trwania cooldown w milisekundach. Zapobiega nadmiernie długim blokadom.", + "modelLockoutExponentialBackoff": "Wykładniczy backoff", + "modelLockoutExponentialBackoffDescription": "Po włączeniu każde kolejne niepowodzenie wykładniczo zwiększa czas cooldownu.", + "modelLockoutMaxBackoffSteps": "Maksymalna liczba kroków backoff", + "modelLockoutMaxBackoffStepsDescription": "Maksymalna liczba kroków backoff, zanim cooldown przestanie rosnąć. W większości konfiguracji limit Max Cooldown jest osiągany jako pierwszy, co stanowi próg bezpieczeństwa w przypadku podniesienia Max Cooldown.", + "disableSessionStickiness": "Wyłącz lepkość sesji", + "disableSessionStickinessDesc": "combos typu round-robin i random zmieniają połączenie przy każdym żądaniu, zamiast przypinać całą konwersację do jednego połączenia na podstawie hasha pierwszej wiadomości. Pozostaw wyłączone, aby zachować trafienia prompt-cache dla wieloturowych czatów. Nadpisania per-combo mają pierwszeństwo." }, "contextRtk": { - "title": "RTK Engine", - "description": "Command-aware compression for tool output, terminal logs and build results.", - "enabled": "Enabled", - "intensity": "Intensity", - "intensityMinimal": "Minimal", - "intensityStandard": "Standard", - "intensityAggressive": "Aggressive", - "toolResults": "Tool results", - "assistantMessages": "Assistant messages", - "codeBlocks": "Code blocks", + "title": "Silnik RTK", + "description": "Kompresja uwzględniająca komendy dla danych wyjściowych narzędzi, logów terminala i wyników budowania.", + "enabled": "Włączone", + "intensity": "Intensywność", + "intensityMinimal": "Minimalna", + "intensityStandard": "Standardowa", + "intensityAggressive": "Agresywna", + "toolResults": "Wyniki narzędzi", + "assistantMessages": "Wiadomości asystenta", + "codeBlocks": "Bloki kodu", "filterCatalog": "Katalog filtrów", "filterCatalogDesc": "Dostępne filtry wyjściowe według kategorii", "guidedConfig": "Konfiguracja", - "guidedConfigDesc": "Dostosuj sposób, w jaki RTK filtruje wyjście terminala", - "maxLines": "Max lines", - "maxChars": "Max chars", + "guidedConfigDesc": "Dostosowanie sposobu, w jaki RTK filtruje dane wyjściowe terminala", + "maxLines": "Maksymalna liczba linii", + "maxChars": "Maksymalna liczba znaków", "deduplicateThreshold": "Próg deduplikacji", - "customFilters": "Filtry niestandardowe", + "customFilters": "Własne filtry", "detectedType": "Wykryty typ", - "confidence": "Zaufanie", + "confidence": "Pewność", "beforeAfter": "Przed / Po", - "trustProjectFilters": "Zaufaj filtrom projektów", - "rawOutputRetention": "Zachowanie surowego sygnału wyjściowego", + "trustProjectFilters": "Ufaj filtrom projektu", + "rawOutputRetention": "Retencja surowych danych wyjściowych", "rawOutputNever": "Nigdy", - "rawOutputFailures": "Awarie", + "rawOutputFailures": "Niepowodzenia", "rawOutputAlways": "Zawsze", - "rawOutputMaxBytes": "Maksymalna liczba bajtów na wyjściu surowym", - "filterTesting": "Filter Testing", - "pasteOutput": "Paste tool output to test filtering...", - "presetHigh": "Agresywny", - "presetLow": "Światło", + "rawOutputMaxBytes": "Maksymalna liczba bajtów surowych danych wyjściowych", + "filterTesting": "Testowanie filtrów", + "pasteOutput": "Wklej dane wyjściowe narzędzia, aby przetestować filtrowanie...", + "presetHigh": "Agresywna", + "presetLow": "Lekka", "presetMaxChars": "Maksymalna liczba znaków wyjściowych", - "presetMaxLines": "Maksymalne linie wyjściowe", - "presetMedium": "Standardowe", - "run": "Run", - "result": "Result", - "previewEmpty": "Run a sample to preview RTK output.", - "detected": "Detected", - "masterSwitchOffAlert": "__MISSING__:Token Saver master switch is OFF — these settings will not affect requests until you turn it on from the Endpoint page.", - "tokensFiltered": "Tokens filtered", - "filtersActive": "Filters active", - "requests": "Requests", - "avgSavings": "Avg savings", - "simpleMode": "Proste", - "advancedMode": "Zaawansowane", - "searchFilters": "Filtry wyszukiwania...", - "tooltipDedup": "Jak agresywnie usuwać powtarzające się linie.", - "tooltipMaxChars": "Maksymalna liczba znaków na blok wyjściowy.", - "tooltipMaxLines": "Maksymalna liczba wierszy, które należy zachować w wynikach poleceń. Nadmiar jest obcinany.", - "learnDiscoverTitle": "__MISSING__:Learn & Discover filters", - "learnDiscoverDesc": "__MISSING__:Mine your captured command output (Raw Output retention must be on) to suggest new RTK filters. Suggestions only — you review and save them.", - "discoverHeading": "__MISSING__:Discover repeated noise", - "discoverButton": "__MISSING__:Scan samples", - "discoverScanning": "__MISSING__:Scanning…", - "discoverEmpty": "__MISSING__:No repeated noise found. Enable Raw Output retention and run a few commands first.", - "discoverSamples": "__MISSING__:{count} sample(s) scanned", - "discoverHits": "__MISSING__:{hits}× across samples", - "learnHeading": "__MISSING__:Learn a filter for a command", - "learnCommandPlaceholder": "__MISSING__:e.g. npm install", - "learnButton": "__MISSING__:Suggest filter", - "learnEmpty": "__MISSING__:No suggestion yet. Type a command you have run and scan.", - "learnSamplesUsed": "__MISSING__:Learned from {count} matching sample(s)", - "suggestionError": "__MISSING__:Could not load suggestions. Check management auth and try again." + "presetMaxLines": "Maksymalna liczba linii wyjściowych", + "presetMedium": "Standardowa", + "run": "Uruchom", + "result": "Wynik", + "previewEmpty": "Uruchom próbkę, aby wyświetlić podgląd danych wyjściowych RTK.", + "detected": "Wykryto", + "masterSwitchOffAlert": "Główny przełącznik Token Saver jest WYŁĄCZONY — te ustawienia nie wpłyną na żądania, dopóki nie zostanie on włączony w Compression Settings.", + "tokensFiltered": "Filtrowane tokens", + "filtersActive": "Aktywne filtry", + "requests": "Żądania", + "avgSavings": "Średnie oszczędności", + "simpleMode": "Prosty", + "advancedMode": "Zaawansowany", + "searchFilters": "Wyszukaj filtry...", + "tooltipDedup": "Określa, jak agresywnie usuwać powtarzające się linie.", + "tooltipMaxChars": "Maksymalna liczba znaków na blok danych wyjściowych.", + "tooltipMaxLines": "Maksymalna liczba linii zachowywanych z danych wyjściowych komendy. Nadmiar zostanie obcięty.", + "learnDiscoverTitle": "Ucz się i odkrywaj filtry", + "learnDiscoverDesc": "Analizuje przechwycone dane wyjściowe komend (retencja surowych danych wyjściowych musi być włączona), aby sugerować nowe filtry RTK. To tylko sugestie — należy je przejrzeć i zapisać.", + "discoverHeading": "Odkryj powtarzający się szum", + "discoverButton": "Skanuj próbki", + "discoverScanning": "Skanowanie…", + "discoverEmpty": "Nie znaleziono powtarzającego się szumu. Włącz retencję surowych danych wyjściowych i najpierw uruchom kilka komend.", + "discoverSamples": "Zeskanowane próbki: {count}", + "discoverHits": "{hits}× w próbkach", + "learnHeading": "Naucz się filtra dla komendy", + "learnCommandPlaceholder": "np. npm install", + "learnButton": "Sugeruj filtr", + "learnEmpty": "Brak sugestii. Wpisz uruchomioną komendę i uruchom skanowanie.", + "learnSamplesUsed": "Nauczono na podstawie {count} pasujących próbek", + "suggestionError": "Nie można załadować sugestii. Sprawdź autoryzację zarządzania i spróbuj ponownie.", + "tomlImportTitle": "Importuj filtry RTK TOML", + "tomlImportDesc": "Waliduje filtry RTK TOML schematu v1 i instaluje je globalnie. Instalacja zapisuje dane w DATA_DIR/rtk/filters.toml; istniejące pliki są zastępowane dopiero po wyraźnym potwierdzeniu.", + "tomlChooseFile": "Wybierz plik TOML", + "tomlImportPlaceholder": "Wklej tutaj zawartość pliku RTK filters.toml...", + "tomlValidate": "Waliduj", + "tomlValidating": "Walidacja…", + "tomlInstall": "Zainstaluj globalnie", + "tomlInstalling": "Instalowanie…", + "tomlConfirmOverwrite": "Zastąp istniejący plik globalny i utwórz kopię zapasową", + "tomlValidationPassed": "Walidacja powiodła się", + "tomlValidationFailed": "Walidacja zakończona niepowodzeniem testów inline", + "tomlValidationSummary": "{filters} filtr(ów), {tests} test(ów) inline", + "tomlInstalled": "Zainstalowano w {path}", + "tomlBackupCreated": "Utworzono kopię zapasową poprzedniego pliku.", + "tomlTestCount": "{count} test(ów)", + "tomlTestPassed": "Powodzenie", + "tomlTestFailed": "Błąd", + "tomlImportError": "Nie można przetworzyć pliku RTK TOML.", + "tomlFileReadError": "Nie można odczytać wybranego pliku TOML." }, "contextCombos": { - "title": "Compression Combos", - "description": "Define how engines are combined for different routing scenarios.", - "createCombo": "Create Compression Combo", - "editCombo": "Edit", - "deleteCombo": "Delete", - "deleteConfirm": "Delete this compression combo?", + "title": "Combos kompresji", + "description": "Definiuje, jak silniki są łączone dla różnych scenariuszy routingu.", + "createCombo": "Utwórz combo kompresji", + "editCombo": "Edytuj", + "deleteCombo": "Usuń", + "deleteConfirm": "Usunąć to combo kompresji?", "pipeline": "Pipeline", - "addStep": "Add Step", - "removeStep": "Remove", - "name": "Name", - "descriptionField": "Description", - "languagePacks": "Language Packs", - "outputMode": "Output Mode", - "assignToRouting": "Assign to Routing Combos", - "noAssignments": "No routing combos available", - "default": "Default", - "setAsDefault": "Set as Default", - "save": "Save", - "cancel": "Cancel", - "enabled": "Enabled" + "addStep": "Dodaj krok", + "removeStep": "Usuń", + "name": "Nazwa", + "descriptionField": "Opis", + "languagePacks": "Pakiety językowe", + "outputMode": "Tryb wyjściowy", + "assignToRouting": "Przypisz do combos routingu", + "noAssignments": "Brak dostępnych combos routingu", + "default": "Domyślne", + "setAsDefault": "Ustaw jako domyślne", + "save": "Zapisz", + "cancel": "Anuluj", + "enabled": "Włączone" }, "contextCaveman": { - "title": "Caveman Engine", - "description": "Rule-based message compression, language packs, analytics and output mode controls.", - "advancedConfig": "Zaawansowana konfiguracja", - "advancedConfigDesc": "Dostosuj zachowanie kompresji", - "aggressiveSettings": "Agresywne ustawienia", - "aggressiveSettingsDesc": "Maksymalna kompresja z potencjalnymi kompromisami w zakresie jakości", - "requests": "Requests", - "tokensSaved": "Tokens saved", - "savingsPercent": "Savings %", - "avgLatency": "Avg latency", - "languagePacks": "Language Packs", - "languagePacksDesc": "Enable compression rules for specific languages.", - "labelAutoTrigger": "Automatyczna kompresja, gdy kontekst przekracza", - "labelCompressionRate": "Siła ściskania", - "labelMaxTokens": "Tokeny docelowe na wiadomość", + "title": "Silnik Caveman", + "description": "Kompresja wiadomości oparta na regułach, pakiety językowe, analityka i kontrola trybu wyjściowego.", + "advancedConfig": "Konfiguracja zaawansowana", + "advancedConfigDesc": "Precyzyjne dostrajanie zachowania kompresji", + "aggressiveSettings": "Ustawienia agresywne", + "aggressiveSettingsDesc": "Maksymalna kompresja z potencjalnym kompromisem jakościowym", + "requests": "Żądania", + "tokensSaved": "Oszczędzone tokens", + "savingsPercent": "Oszczędność %", + "avgLatency": "Średnie opóźnienie", + "languagePacks": "Pakiety językowe", + "languagePacksDesc": "Włącz reguły kompresji dla określonych języków.", + "labelAutoTrigger": "Automatyczna kompresja, gdy kontekst przekroczy", + "labelCompressionRate": "Siła kompresji", + "labelMaxTokens": "Docelowe tokens na wiadomość", "labelMinLength": "Minimalna długość wiadomości", - "labelMinSavings": "Minimalna liczba tokenów do zapisania", - "enabled": "Enabled", - "autoDetect": "Auto-detect language", - "rulesCount": "{count} rules", - "inputCompressionTitle": "__MISSING__:Input compression", - "inputCompressionDesc": "__MISSING__:Rewrite chat history with shorter wording. Reduces input tokens by ~50%.", - "analyticsTitle": "Compression Analytics", - "noAnalytics": "No compression analytics yet.", + "labelMinSavings": "Minimalna liczba tokens do oszczędzenia", + "enabled": "Włączone", + "autoDetect": "Automatyczne wykrywanie języka", + "rulesCount": "{count} reguł", + "inputCompressionTitle": "Kompresja wejściowa", + "inputCompressionDesc": "Przepisywanie historii czatu za pomocą krótszych sformułowań. Zmniejsza liczbę wejściowych tokens o ~50%.", + "analyticsTitle": "Analityka kompresji", + "noAnalytics": "Brak danych analitycznych dotyczących kompresji.", "outputMode": "Tryb wyjściowy", - "outputModeDesc": "Instructs the LLM to respond in a terse, compact format.", - "outputModeTitle": "Output Mode", + "outputModeDesc": "Kontrola sposobu wyświetlania skompresowanych danych wyjściowych", + "outputModeTitle": "Tryb wyjściowy", "quickSettings": "Szybkie ustawienia", - "quickSettingsDesc": "Podstawowe ustawienia kompresji na początek", - "autoClarity": "Auto-Clarity Bypass", - "bypassConditions": "Bypass conditions", - "bypassConditionsList": "bezpieczeństwo, nieodwracalne, wyjaśniające, wrażliwe na porządek", - "simpleMode": "Proste", - "advancedMode": "Zaawansowane", - "tooltipAutoTrigger": "Automatycznie kompresuj, gdy kontekst przekracza ten rozmiar.", - "tooltipCompressionRate": "0,0 = brak, 1,0 = maksimum. 0,5 = zrównoważone.", - "tooltipMaxTokens": "Docelowa liczba tokenów po kompresji. Niższy = bardziej agresywny.", - "tooltipMinLength": "Wiadomości krótsze niż ta nie są kompresowane. Niższy = większa kompresja.", - "tooltipMinSavings": "Kompresuj tylko wtedy, gdy pozwala zaoszczędzić co najmniej tyle tokenów.", + "quickSettingsDesc": "Podstawowe ustawienia kompresji na start", + "autoClarity": "Obejście Auto-Clarity", + "bypassConditions": "Warunki pominięcia", + "bypassConditionsList": "security, irreversible, clarification, order-sensitive", + "simpleMode": "Prosty", + "advancedMode": "Zaawansowany", + "tooltipAutoTrigger": "Automatycznie kompresuj, gdy wielkość kontekstu przekroczy ten rozmiar.", + "tooltipCompressionRate": "0.0 = brak, 1.0 = maksymalna. 0.5 = zbalansowana.", + "tooltipMaxTokens": "Docelowa liczba tokens po kompresji. Niższa = bardziej agresywna.", + "tooltipMinLength": "Wiadomości krótsze niż ta wartość nie są kompresowane. Niższa = większa kompresja.", + "tooltipMinSavings": "Kompresuj tylko wtedy, gdy pozwala to zaoszczędzić co najmniej tyle tokens.", "ultraSettings": "Ustawienia Ultra", - "ultraSettingsDesc": "Kompresja semantyczna oparta na technologii SLM", + "ultraSettingsDesc": "Kompresja semantyczna oparta na SLM", "preview": { - "lite": "Respond concise. Preserve technical terms, code, errors, URLs, and identifiers.", - "full": "Respond terse and compact. Preserve all technical substance.", - "ultra": "Respond ultra terse with common technical abbreviations. Preserve exact symbols." + "lite": "Odpowiadaj zwięźle. Zachowuj terminy techniczne, kod, błędy, adresy URL i identyfikatory.", + "full": "Odpowiadaj krótko i zwięźle. Zachowuj całą treść merytoryczną.", + "ultra": "Odpowiadaj ultra zwięźle przy użyciu powszechnych skrótów technicznych. Zachowuj dokładne symbole." } }, "translator": { - "title": "Tłumacz", - "metaTitle": "Plac zabaw dla tłumaczy | OmniRoute", - "metaDescription": "Debuguj, testuj i wizualizuj tłumaczenia formatów API między dostawcami", - "playgroundTitle": "Plac zabaw dla tłumaczy", - "playground": "Plac zabaw", - "realtime": "Działalność tłumaczeniowa w czasie rzeczywistym", - "chatTester": "Tester czatu", - "testBench": "Stanowisko testowe", - "liveMonitor": "Monitor na żywo", - "modeDescriptionPlayground": "Wklej treść żądania API i zobacz, jak OmniRoute tłumaczy ją pomiędzy formatami dostawców (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", - "modeDescriptionChatTester": "Wysyłaj prawdziwe prośby o czat za pośrednictwem OmniRoute i sprawdzaj cały proces w obie strony: dane wejściowe, przetłumaczone żądanie, odpowiedź dostawcy i przetłumaczone dane wyjściowe.", - "modeDescriptionTestBench": "Uruchamiaj predefiniowane scenariusze i porównuj kompatybilność między dostawcami i modelami.", - "modeDescriptionLiveMonitor": "Oglądaj wydarzenia związane z tłumaczeniami w czasie rzeczywistym, gdy żądania przepływają przez OmniRoute.", - "modeDescriptionFallback": "Debuguj, testuj i wizualizuj, jak OmniRoute tłumaczy żądania API między dostawcami.", - "recentTranslations": "Najnowsze tłumaczenia", - "noTranslations": "Nie ma jeszcze żadnych tłumaczeń", + "title": "Translator", + "metaTitle": "Translator Playground | OmniRoute", + "metaDescription": "Debuguj, testuj i wizualizuj tłumaczenia formatów API między providers", + "playgroundTitle": "Translator Playground", + "playground": "Playground", + "realtime": "Aktywność tłumaczeń w czasie rzeczywistym", + "chatTester": "Chat Tester", + "testBench": "Test Bench", + "liveMonitor": "Live Monitor", + "modeDescriptionPlayground": "Wklej dowolną treść żądania API i zobacz, jak OmniRoute tłumaczy ją między formatami providers (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Wysyłaj rzeczywiste żądania czatu przez OmniRoute i sprawdzaj pełną ścieżkę: wejście, przetłumaczone żądanie, odpowiedź provider i przetłumaczone wyjście.", + "modeDescriptionTestBench": "Uruchamiaj zdefiniowane scenariusze i porównuj kompatybilność między providers i models.", + "modeDescriptionLiveMonitor": "Obserwuj zdarzenia tłumaczenia w czasie rzeczywistym, gdy żądania przepływają przez OmniRoute.", + "modeDescriptionFallback": "Debuguj, testuj i wizualizuj, jak OmniRoute tłumaczy żądania API między providers.", + "recentTranslations": "Ostatnie tłumaczenia", + "noTranslations": "Brak tłumaczeń", "source": "Źródło", "target": "Cel", "time": "Czas", - "model": "Modelka", - "status": "Stan", + "model": "Model", + "status": "Status", "latency": "Opóźnienie", - "totalTranslations": "Całkowita liczba tłumaczeń", - "successful": "Pomyślne", + "totalTranslations": "Suma tłumaczeń", + "successful": "Udane", "errors": "Błędy", "avgLatency": "Średnie opóźnienie", "millisecondsShort": "{value}ms", "notAvailableSymbol": "—", - "liveAutoRefreshing": "Na żywo — automatyczne odświeżanie", + "liveAutoRefreshing": "Live — Automatyczne odświeżanie", "paused": "Wstrzymano", - "eventsAppearHint": "Zdarzenia związane z tłumaczeniem pojawiają się tutaj, gdy żądania przepływają przez OmniRoute. Aby wygenerować zdarzenia, użyj dowolnej z poniższych metod:", - "chatTesterTab": "Zakładka Tester czatu", - "testBenchTab": "Zakładka Stanowisko testowe", + "eventsAppearHint": "Zdarzenia tłumaczenia pojawiają się tutaj, gdy żądania przepływają przez OmniRoute. Użyj dowolnej z tych metod, aby wygenerować zdarzenia:", + "chatTesterTab": "Zakładka Chat Tester", + "testBenchTab": "Zakładka Test Bench", "externalApiCalls": "Zewnętrzne wywołania API", - "ideCliIntegrations": "Integracje IDE/CLI", - "inMemoryNote": "Uwaga: Zdarzenia są przechowywane w pamięci i resetowane po ponownym uruchomieniu serwera.", + "ideCliIntegrations": "Integracje z IDE/CLI", + "inMemoryNote": "Uwaga: Zdarzenia są przechowywane w pamięci i zostaną zresetowane po restarcie serwera.", "ok": "OK", - "errorShort": "BŁĄD", + "errorShort": "ERR", "formatConverter": "Konwerter formatów", - "formatConverterDescription": "Wklej lub wpisz treść żądania JSON. Tłumacz automatycznie wykryje format źródłowy i przekonwertuje go na format docelowy. Użyj tego, aby debugować sposób, w jaki OmniRoute tłumaczy żądania między formatami (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", - "translationPathHubSpoke": "{source} → OpenAI (średniozaawansowany) → {target}", - "translationPathDirect": "{source} → {target} (bezpośredni tłumacz)", - "translationPathPassthrough": "Ten sam format – bez konieczności tłumaczenia", - "openaiIntermediatePanel": "Średniozaawansowany OpenAI", + "formatConverterDescription": "Wklej lub wpisz treść żądania JSON. Translator automatycznie wykryje format źródłowy i przekonwertuje go na format docelowy. Użyj tego, aby debugować, jak OmniRoute tłumaczy żądania między formatami (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "translationPathHubSpoke": "{source} → OpenAI (pośredni) → {target}", + "translationPathDirect": "{source} → {target} (bezpośredni translator)", + "translationPathPassthrough": "Ten sam format — tłumaczenie nie jest wymagane", + "openaiIntermediatePanel": "OpenAI Intermediate", "autoFeaturesTitle": "Co OmniRoute robi automatycznie", "autoFeaturesCount": "8 funkcji", - "featureReasoningCache": "Pamięć podręczna rozumowania", - "featureReasoningCacheDesc": "Ponownie wstawia buforowaną treść rozumowania dla modeli trybu myślenia (DeepSeek V4, Kimi K2, Qwen), gdy klienci pomijają ją w historii rozmów.", - "featureSchemaCoercion": "Przymus schematu", - "featureSchemaCoercionDesc": "Naprawia uszkodzone schematy narzędzi: dodaje brakujące dodatkowe właściwości, oczyszcza długie opisy, normalizuje zagnieżdżone obiekty.", + "featureReasoningCache": "Reasoning Cache", + "featureReasoningCacheDesc": "Ponownie wstrzykuje zbuforowany reasoning_content dla models w trybie thinking (DeepSeek V4, Kimi K2, Qwen), gdy klienci pomijają go w historii konwersacji.", + "featureSchemaCoercion": "Schema Coercion", + "featureSchemaCoercionDesc": "Naprawia uszkodzone schematy narzędzi: dodaje brakujące additionalProperties, oczyszcza długie opisy, normalizuje zagnieżdżone obiekty.", "featureRoleNormalization": "Normalizacja ról", - "featureRoleNormalizationDesc": "Twórca map → system dla celów innych niż OpenAI. Mapuje system → użytkownika dla modeli, które nie obsługują roli systemowej.", - "featureToolCallIds": "Normalizacja identyfikatora wywołania narzędzia", - "featureToolCallIdsDesc": "Generuje unikalne identyfikatory wywołań narzędzi, gdy ich brakuje. Normalizuje do formatu 9-znakowego dla dostawców takich jak Mistral.", - "featureMissingToolResponse": "Wtrysk reakcji narzędzia", - "featureMissingToolResponseDesc": "Wstrzykuje puste komunikaty o wynikach narzędzia, gdy klienci wysyłają wywołania narzędzi bez odpowiadających im odpowiedzi.", - "featureThinkingBudget": "Myślący budżet", - "featureThinkingBudgetDesc": "Automatycznie zarządza konfiguracją myślenia. Usuwa parametry myślenia, gdy ostatnia wiadomość nie pochodzi od użytkownika.", - "featureDirectPaths": "Bezpośrednie ścieżki tłumaczeń", - "featureDirectPathsDesc": "Niektóre pary formatów (Claude → Gemini) mają bezpośrednie tłumacze, które omijają centrum OpenAI, tworząc dokładniejsze dane wyjściowe.", - "featureImageMapping": "Mapowanie rozmiaru obrazu", - "featureImageMappingDesc": "Tłumaczy konwencje wymiarów obrazu pomiędzy formatami API (np. poziomy szczegółowości OpenAI → wymiary Gemini).", + "featureRoleNormalizationDesc": "Mapuje developer→system dla celów innych niż OpenAI. Mapuje system→user dla models, które nie obsługują roli system.", + "featureToolCallIds": "Normalizacja ID wywołań narzędzi", + "featureToolCallIdsDesc": "Generates unikalne IDs tool_call, gdy ich brakuje. Normalizuje do formatu 9-znakowego dla providers takich jak Mistral.", + "featureMissingToolResponse": "Wstrzykiwanie odpowiedzi narzędzi", + "featureMissingToolResponseDesc": "Wstrzykuje puste komunikaty tool_result, gdy klienci wysyłają tool_calls bez odpowiadających im odpowiedzi.", + "featureThinkingBudget": "Thinking Budget", + "featureThinkingBudgetDesc": "Automatycznie zarządza konfiguracją thinking. Usuwa parametry thinking, gdy ostatnia wiadomość nie pochodzi od użytkownika.", + "featureDirectPaths": "Bezpośrednie ścieżki tłumaczenia", + "featureDirectPathsDesc": "Niektóre pary formatów (Claude→Gemini) mają bezpośrednie translatory, które omijają hub OpenAI, generując dokładniejszy output.", + "featureImageMapping": "Mapowanie rozmiaru obrazów", + "featureImageMappingDesc": "Tłumaczy konwencje wymiarów obrazów między formatami API (np. poziomy szczegółowości OpenAI → wymiary Gemini).", "input": "Wejście", "output": "Wyjście", - "auto": "Automat", + "auto": "Auto", "swapFormats": "Zamień formaty", "translateAction": "Przetłumacz", - "clear": "Jasne", + "clear": "Wyczyść", "inputPlaceholder": "Wklej tutaj treść żądania lub wybierz szablon poniżej...", "exampleTemplates": "Przykładowe szablony", "exampleTemplatesHint": "— Kliknij, aby załadować", "templateLoadHint": "Szablon ładuje żądanie w formacie {format}. Zmień format źródłowy, aby załadować w innym formacie.", - "compatibilityTester": "Tester kompatybilności", - "compatibilityReport": "Raport zgodności", - "testBenchDescription": "Uruchamiaj predefiniowane scenariusze (prosty czat, wywoływanie narzędzi itp.), aby zweryfikować tłumaczenie i zgodność dostawcy. Wybierz format źródłowy i dostawcę docelowego, a następnie uruchom wszystkie testy, aby sprawdzić procent zgodności. Użyj tego, aby dowiedzieć się, które funkcje działają u różnych dostawców.", - "targetProvider": "Dostawca docelowy", + "compatibilityTester": "Compatibility Tester", + "compatibilityReport": "Raport kompatybilności", + "testBenchDescription": "Uruchamiaj zdefiniowane scenariusze (Simple Chat, Tool Calling itp.), aby zweryfikować tłumaczenie i kompatybilność z provider. Wybierz format źródłowy i docelowy provider, a następnie uruchom wszystkie testy, aby zobaczyć procent kompatybilności. Użyj tego, aby dowiedzieć się, które funkcje działają u różnych providers.", + "targetProvider": "Docelowy Provider", "runAllTests": "Uruchom wszystkie testy", "runTest": "Uruchom test", "reRun": "Uruchom ponownie", - "running": "Bieganie...", - "passed": "minęło", - "failed": "nie powiodło się", - "passedIconLabel": "✅ Zdane", - "chunks": "kawałki", - "scenarioSimpleChat": "Prosty czat", - "scenarioToolCalling": "Wywołanie narzędzia", - "scenarioMultiTurn": "Wieloobrotowy", - "scenarioThinking": "Myślenie", - "scenarioSystemPrompt": "Monit systemowy", - "scenarioStreaming": "Transmisja strumieniowa", + "running": "Uruchamianie...", + "passed": "zaliczony", + "failed": "nieudany", + "passedIconLabel": "✅ Zaliczony", + "chunks": "fragmenty", + "scenarioSimpleChat": "Simple Chat", + "scenarioToolCalling": "Tool Calling", + "scenarioMultiTurn": "Multi-turn", + "scenarioThinking": "Thinking", + "scenarioSystemPrompt": "System Prompt", + "scenarioStreaming": "Streaming", "templateNames": { - "simple-chat": "Prosty czat", - "tool-calling": "Wywołanie narzędzia", - "multi-turn": "Wieloobrotowy", - "thinking": "Myślenie", - "system-prompt": "Monit systemowy", - "streaming": "Transmisja strumieniowa", - "vision": "Wizja", - "schema-coercion": "Przymus schematu" + "simple-chat": "Simple Chat", + "tool-calling": "Tool Calling", + "multi-turn": "Multi-turn", + "thinking": "Thinking", + "system-prompt": "System Prompt", + "streaming": "Streaming", + "vision": "Vision", + "schema-coercion": "Schema Coercion" }, "templateDescriptions": { - "simple-chat": "Podstawowy SMS", + "simple-chat": "Podstawowa wiadomość tekstowa", "tool-calling": "Wywołanie funkcji/narzędzia", - "multi-turn": "Rozmowa z historią", - "thinking": "Rozszerzone myślenie/rozumowanie", + "multi-turn": "Konwersacja z historią", + "thinking": "Rozszerzone myślenie / rozumowanie", "system-prompt": "Złożone instrukcje systemowe", "streaming": "Żądanie przesyłania strumieniowego SSE", - "vision": "Żądanie multimodalne z wejściem obrazu", - "schema-coercion": "Wymuszanie strukturalnych danych wyjściowych/JSON" + "vision": "Żądanie multimodalne z obrazem jako wejściem", + "schema-coercion": "Strukturyzowane wyjście / wymuszanie schematu JSON" }, "templatePayloads": { "simpleChat": { - "system": "Jesteś pomocnym asystentem.", - "userGreeting": "Witam! Jak się dzisiaj masz?" + "system": "Pomocny asystent.", + "userGreeting": "Witaj! Jak się dzisiaj miewasz?" }, "toolCalling": { "userWeather": "Jaka jest pogoda w São Paulo?", - "toolDescription": "Uzyskaj aktualną pogodę dla danej lokalizacji", + "toolDescription": "Pobierz aktualną pogodę dla lokalizacji", "cityNameDescription": "Nazwa miasta" }, "multiTurn": { - "system": "Jesteś asystentem kodowania.", - "userInitial": "Napisz funkcję sortującą tablicę w Pythonie.", - "assistantExample": "Oto prosta funkcja sortowania: ```pyton\ndef sort_array(arr): zwróć posortowane (arr)\n```", - "userFollowUp": "Teraz posortuj w kolejności malejącej." + "system": "Asystent programowania.", + "userInitial": "Napisz funkcję do sortowania tablicy w Python.", + "assistantExample": "Oto prosta funkcja sortowania: ```python\ndef sort_array(arr): return sorted(arr)\n```", + "userFollowUp": "Teraz zmień ją tak, aby sortowała malejąco." }, "thinking": { "question": "Jaka jest suma pierwszych 100 liczb pierwszych?" }, "systemPrompt": { - "systemInstruction": "Jesteś starszym inżynierem oprogramowania specjalizującym się w systemach rozproszonych. Odpowiadaj na pytania zwięźle, korzystając z najlepszych praktyk branżowych. W stosownych przypadkach zawsze podawaj przykłady kodu. Sformatuj swoje odpowiedzi, korzystając z przecen.", - "question": "Jak zaimplementować wzór wyłącznika?" + "systemInstruction": "Doświadczony inżynier oprogramowania specjalizujący się w systemach rozproszonych. Odpowiadaj zwięźle, korzystając z najlepszych praktyk branżowych. Zawsze podawaj przykłady kodu, gdy są one istotne. Formatuj odpowiedzi przy użyciu markdown.", + "question": "Jak zaimplementować wzorzec circuit breaker?" }, "streaming": { - "prompt": "Opowiedz mi krótką historię o robocie uczącym się malować." + "prompt": "Opowiedz krótką historię o robocie, który uczy się malować." }, "vision": { - "system": "Jesteś asystentem, który precyzyjnie opisuje obrazy.", - "userPrompt": "Co jest pokazane na tym obrazku?", + "system": "Asystent, który precyzyjnie opisuje obrazy.", + "userPrompt": "Co przedstawia ten obraz?", "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/600px-PNG_transparency_demonstration_1.png" }, "schemaCoercion": { - "userPrompt": "Sprawdź pogodę dla Tokio, używając jednostek metrycznych i dołącz rozkład godzinowy.", - "toolDescription": "Pobierz pogodę dla miasta za pomocą opcji strukturalnych.", - "cityDescription": "Miasto, którego dotyczy zapytanie, np. „Tokio” lub „Nowy Jork”." + "userPrompt": "Sprawdź pogodę dla Tokio w jednostkach metrycznych i dołącz podział godzinowy.", + "toolDescription": "Pobierz pogodę dla miasta ze strukturyzowanymi opcjami.", + "cityDescription": "Miasto do zapytania, np. 'Tokio' lub 'Nowy Jork'." } }, "openaiCompatibleLabel": "Kompatybilny z OpenAI", - "anthropicCompatibleLabel": "Kompatybilny z antropią", + "anthropicCompatibleLabel": "Kompatybilny z Anthropic", "noTemplateForFormat": "Brak szablonu dla tego formatu", "translationFailed": "Tłumaczenie nie powiodło się: {error}", - "pipelineDebugger": "Debuger potoku", - "translationPipeline": "Potok tłumaczeń", - "pipelineVisualization": "Wizualizacja rurociągu", - "pipelineVisualizationHint": "Wyślij wiadomość, aby zobaczyć, jak Twoje żądanie przechodzi przez wykrywanie → tłumaczenie → połączenie z dostawcą.", - "chatTesterDescription": "Wysyłaj wiadomości w określonym formacie klienta i sprawdzaj każdy etap procesu tłumaczenia.", - "chatTesterFlow": "Żądanie klienta → Wykrywanie formatu → Średniozaawansowany OpenAI → Format dostawcy → Odpowiedź", + "pipelineDebugger": "Pipeline Debugger", + "translationPipeline": "Translation Pipeline", + "pipelineVisualization": "Wizualizacja Pipeline", + "pipelineVisualizationHint": "Wyślij wiadomość, aby zobaczyć, jak żądanie przepływa przez detekcję → tłumaczenie → wywołanie provider.", + "chatTesterDescription": "Wysyłaj wiadomości w określonym formacie klienta i sprawdzaj każdy krok w Translation Pipeline.", + "chatTesterFlow": "Żądanie klienta → Wykrywanie formatu → OpenAI Intermediate → Format Provider → Odpowiedź", "clickStepToInspect": "Kliknij dowolny krok, aby sprawdzić dane na tym etapie.", "clientFormat": "Format klienta", - "provider": "Dostawca", - "modelPlaceholder": "Wybierz lub wpisz nazwę modelu...", - "sendMessageToSeePipeline": "Wyślij wiadomość, aby zobaczyć proces tłumaczenia", - "chatMessageHintPrefix": "Twoja wiadomość zostanie sformatowana jako", - "chatMessageHintSuffix": "żądanie, przetłumaczone w potoku i wysłane do wybranego dostawcy.", - "youWithFormat": "Ty ({format})", + "provider": "Provider", + "modelPlaceholder": "Wybierz lub wpisz nazwę model...", + "sendMessageToSeePipeline": "Wyślij wiadomość, aby zobaczyć Translation Pipeline", + "chatMessageHintPrefix": "Wiadomość zostanie sformatowana jako żądanie", + "chatMessageHintSuffix": "przetłumaczona przez pipeline i wysłana do wybranego provider.", + "youWithFormat": "Użytkownik ({format})", "assistant": "Asystent", "typeMessage": "Wpisz wiadomość...", "send": "Wyślij", "clientRequest": "Żądanie klienta", - "clientRequestDescription": "Treść żądania, jaką wysłałby Twój klient", - "formatDetected": "Wykryto format", + "clientRequestDescription": "Treść żądania w postaci, w jakiej wysłałby ją klient", + "formatDetected": "Wykryty format", "formatDetectedDescription": "OmniRoute automatycznie wykrywa format API na podstawie struktury żądania", - "openaiIntermediate": "Średniozaawansowany OpenAI", + "openaiIntermediate": "OpenAI Intermediate", "openaiIntermediateDescription": "Wszystkie formaty są najpierw normalizowane do formatu OpenAI (uniwersalny most)", - "providerFormat": "Format dostawcy", - "providerFormatDescription": "Format OpenAI jest tłumaczony na natywny format dostawcy", - "providerResponse": "Odpowiedź dostawcy", - "providerResponseRawDescription": "Surowa odpowiedź z interfejsu API dostawcy", - "providerResponseSseDescription": "Surowy strumień SSE z interfejsu API dostawcy", + "providerFormat": "Format Provider", + "providerFormatDescription": "Format OpenAI jest tłumaczony na natywny format provider", + "providerResponse": "Odpowiedź Provider", + "providerResponseRawDescription": "Surowa odpowiedź z API provider", + "providerResponseSseDescription": "Surowy strumień SSE z API provider", "unexpectedError": "Wystąpił nieoczekiwany błąd", "error": "Błąd", "errorMessage": "Błąd: {message}", "requestFailed": "Żądanie nie powiodło się", - "noTextExtracted": "(Nie wyodrębniono tekstu)", - "liveMonitorMemoryNote": "Zdarzenia są zapisywane w pamięci i tracone po ponownym uruchomieniu.", - "liveMonitorMemoryCapNote": "Zachowanych maksymalnie 200 zdarzeń.", + "noTextExtracted": "(Brak wyodrębnionego tekstu)", + "liveMonitorMemoryNote": "Zdarzenia są przechowywane w pamięci i zostaną utracone przy restarcie.", + "liveMonitorMemoryCapNote": "Zachowywane jest maksymalnie 200 zdarzeń.", "eventSourcesLabel": "Źródła zdarzeń:", - "eventSourceTranslatorPage": "• Strona tłumacza (Tester czatu, Stanowisko testowe)", - "eventSourceMainPipeline": "• Główny potok żądań (ruch CLI/IDE/API)", - "liveMonitorDescriptionPrefix": "Pokazuje zdarzenia związane z tłumaczeniem podczas przepływu wywołań API przez OmniRoute. Zdarzenia pochodzą z bufora w pamięci (resetują się przy ponownym uruchomieniu). Użyj", - "liveMonitorDescriptionSuffix": "lub zewnętrzne wywołania API w celu wygenerowania zdarzeń.", - "streamTransformer": "Transformator strumieniowy", - "modeDescriptionStreamTransformer": "Uruchamiaj strumienie SSE dotyczące uzupełniania czatu za pośrednictwem transformatora Odpowiedzi.", - "streamTransformerTitle": "Transformator strumieniowy odpowiedzi", - "streamTransformerDescription": "Wklej strumień SSE zakończenia czatu, przepuść go przez transformator Odpowiedzi OmniRoute i sprawdź wyemitowane zdarzenia odpowiedzi.* przed podłączeniem klienta.", + "eventSourceTranslatorPage": "• Strona Translator (Chat Tester, Test Bench)", + "eventSourceMainPipeline": "• Główny pipeline żądań (ruch CLI/IDE/API)", + "liveMonitorDescriptionPrefix": "Pokazuje zdarzenia tłumaczenia, gdy wywołania API przepływają przez OmniRoute. Zdarzenia pochodzą z bufora w pamięci (resetuje się przy restarcie). Użyj", + "liveMonitorDescriptionSuffix": ", lub zewnętrznych wywołań API, aby wygenerować zdarzenia.", + "streamTransformer": "Stream Transformer", + "modeDescriptionStreamTransformer": "Uruchamiaj strumienie SSE chat completions przez Responses transformer.", + "streamTransformerTitle": "Responses Stream Transformer", + "streamTransformerDescription": "Wklej strumień SSE chat completions, przepuść go przez Responses transformer OmniRoute i sprawdź wyemitowane zdarzenia response.* przed podłączeniem klienta.", "loadTextSample": "Załaduj próbkę tekstu", - "loadToolSample": "Załaduj przykład wywołania narzędzia", - "transformToResponses": "Przekształć w odpowiedzi", - "rawChatSseInput": "Surowe zakończenia czatu SSE", - "transformedResponsesSse": "Przekształcone odpowiedzi API SSE", - "noResultsYet": "Jeszcze żadnych wyników", - "transformedEvents": "Przekształcone wydarzenia", - "uniqueEventTypes": "Unikalne typy wydarzeń", + "loadToolSample": "Załaduj próbkę tool-call", + "transformToResponses": "Przekształć na Responses", + "rawChatSseInput": "Surowy strumień SSE chat completions", + "transformedResponsesSse": "Przekształcony Responses API SSE", + "noResultsYet": "Brak wyników", + "transformedEvents": "Przekształcone zdarzenia", + "uniqueEventTypes": "Unikalne typy zdarzeń", "inputLines": "Linie wejściowe", "outputLines": "Linie wyjściowe", - "transformedEventTimeline": "Przekształcona oś czasu wydarzenia", - "transformerTimelineHint": "Uruchom transformator, aby sprawdzić kolejność emitowanych zdarzeń respond.output_*.", + "transformedEventTimeline": "Oś czasu przekształconych zdarzeń", + "transformerTimelineHint": "Urunhom transformer, aby sprawdzić wyemitowane zdarzenia response.output_* po kolei.", "eventType": "Typ zdarzenia", "eventPreview": "Podgląd", - "comboRouted": "Kombinacja kierowana", - "uniqueEndpoints": "Unikalne punkty końcowe", + "comboRouted": "Przekierowano przez combo", + "uniqueEndpoints": "Unikalne endpoints", "routeDetails": "Szczegóły trasy", - "comboBadge": "Kombinacja", - "routeEndpointLabel": "Punkt końcowy", + "comboBadge": "Combo", + "routeEndpointLabel": "Endpoint", "routeConnectionLabel": "Połączenie", - "scenarioVision": "Wizja (rozumienie obrazu)", - "scenarioSchemaCoercion": "Wymuszenie schematu (wyjście strukturalne)", + "scenarioVision": "Vision (rozumienie obrazu)", + "scenarioSchemaCoercion": "Koercja schematu (strukturyzowane dane wyjściowe)", "techniques": "Techniki:", - "friendlyTitle": "__MISSING__:Translator", - "friendlySubtitle": "__MISSING__:Use your existing app with any provider — without rewriting code.", - "conceptHeadline": "__MISSING__:Your app speaks one API's \"language\". The Translator converts it to use another provider.", - "conceptDiagramAppLabel": "__MISSING__:Your app", - "conceptDiagramSourceLabel": "__MISSING__:Source format", - "conceptDiagramHubLabel": "__MISSING__:OpenAI (hub)", - "conceptDiagramTargetLabel": "__MISSING__:Target provider", - "conceptDiagramExampleApp": "__MISSING__:e.g. Anthropic SDK", - "conceptDiagramExampleSource": "__MISSING__:claude", - "conceptDiagramExampleTarget": "__MISSING__:Gemini", - "conceptHowItWorksToggle": "__MISSING__:How it works", - "conceptHowItWorksBody": "__MISSING__:Your app sends a request in its own format. The Translator detects the format, converts it through OpenAI as an intermediate hub (or directly when a direct translator is available), sends it to the chosen provider, and returns the response converted back to your app's format.", - "tabTranslate": "__MISSING__:Translate", - "tabMonitor": "__MISSING__:Monitor", - "tabTranslateAriaLabel": "__MISSING__:Go to the Translate tab", - "tabMonitorAriaLabel": "__MISSING__:Go to the Monitor tab", - "simpleAppUsesLabel": "__MISSING__:My app uses", - "simpleAppUsesHint": "__MISSING__:The API format your app speaks (e.g. Anthropic SDK = claude).", - "simpleSendToLabel": "__MISSING__:Send to", - "simpleSendToHint": "__MISSING__:Where to actually send the request (a provider connected in OmniRoute).", - "simpleStartWithLabel": "__MISSING__:Start with", - "simpleStartWithExamplePlaceholder": "__MISSING__:Select a ready-made example", - "simpleStartWithCustomOption": "__MISSING__:Paste your request (advanced)", - "simpleModeLabel": "__MISSING__:Mode", - "simpleModePreview": "__MISSING__:Preview translation only", - "simpleModeSend": "__MISSING__:Send and see response", - "simpleAdvancedToggle": "__MISSING__:Advanced", - "simpleInputPanelTitle": "__MISSING__:Input", - "simpleInputPanelHint": "__MISSING__:Free-text message or ready-made example", - "simpleResultPanelTitle": "__MISSING__:Translation + Response", - "narratedDetected": "__MISSING__:✓ Detected: {format}", - "narratedTranslating": "__MISSING__:Translating to {target}...", - "narratedSending": "__MISSING__:Sending to {target}...", - "narratedSuccess": "__MISSING__:→ translated to {target} · response in {latency}ms", - "narratedError": "__MISSING__:Failed: {reason}", - "narratedSeeTranslatedJson": "__MISSING__:see translated JSON", - "narratedSeePipeline": "__MISSING__:see pipeline", - "advancedSectionTitle": "__MISSING__:Advanced", - "advancedSectionSubtitle": "__MISSING__:Raw JSON, pipeline and technical tools. Everything here is the same as the old tabs — just reorganized.", - "advancedRawJsonTitle": "__MISSING__:Raw JSON (auto-detect + Monaco)", - "advancedRawJsonSubtitle": "__MISSING__:Paste a JSON request; the format is detected automatically.", - "advancedPipelineTitle": "__MISSING__:OpenAI intermediate pipeline", - "advancedPipelineSubtitle": "__MISSING__:Visualize each translation step (hub-and-spoke).", - "advancedStreamTransformTitle": "__MISSING__:Stream Transformer (Chat → Responses SSE)", - "advancedStreamTransformSubtitle": "__MISSING__:Converts Chat Completions SSE into Responses API.", - "advancedTestBenchTitle": "__MISSING__:Test Bench (8 scenarios)", - "advancedTestBenchSubtitle": "__MISSING__:Runs all scenarios and reports pass/fail + compatibility %.", - "advancedCompressionTitle": "__MISSING__:Compression Preview", - "advancedCompressionSubtitle": "__MISSING__:Estimate token savings across different compression modes.", - "monitorOriginHint": "__MISSING__:Events generated by Translate or the main pipeline appear here in real time.", - "monitorEmptyCta": "__MISSING__:Go to the Translate tab and send a request — it will appear here.", - "monitorOpenTranslateButton": "__MISSING__:Go to Translate", - "pipelineStepClientRequest": "__MISSING__:Client Request", - "pipelineStepClientRequestDesc": "__MISSING__:Request received in client format", - "pipelineStepFormatDetected": "__MISSING__:Format Detected", - "pipelineStepFormatDetectedDesc": "__MISSING__:Auto-detected source format", - "pipelineStepOpenAIIntermediate": "__MISSING__:OpenAI Intermediate", - "pipelineStepOpenAIIntermediateDesc": "__MISSING__:Translated to OpenAI hub format", - "pipelineStepProviderFormat": "__MISSING__:Provider Format", - "pipelineStepProviderFormatDesc": "__MISSING__:Translated to provider target format", - "pipelineStepProviderResponse": "__MISSING__:Provider Response", - "pipelineStepProviderResponseDesc": "__MISSING__:Streaming response from provider", - "conceptDiagramArrow1": "__MISSING__:speaks", - "conceptDiagramArrow2": "__MISSING__:translates", - "conceptDiagramArrow3": "__MISSING__:converts", - "conceptDiagramExampleHub": "__MISSING__:OpenAI", - "conceptDiagramHubTooltip": "__MISSING__:Intermediate hub used by the translator to convert between formats that don't have a direct mapping.", - "conceptDiagramSourceTooltip": "__MISSING__:The API format your app speaks (e.g., Anthropic SDK = claude).", - "conceptDiagramTargetTooltip": "__MISSING__:The provider where the request will actually be sent.", - "compressionEmptyHint": "__MISSING__:Fill in the input field on the Translate tab (Simple Controls or Raw JSON) to enable the preview.", - "compressionModeLabel": "__MISSING__:Compression mode", - "compressionPreviewButton": "__MISSING__:Preview Compression", - "compressionPreviewing": "__MISSING__:Previewing…" + "friendlyTitle": "Translator", + "friendlySubtitle": "Używanie istniejącej aplikacji z dowolnym provider — bez konieczności przepisywania kodu.", + "conceptHeadline": "Aplikacja komunikuje się w „języku” jednego API. Translator konwertuje zapytania, aby korzystać z innego provider.", + "conceptDiagramAppLabel": "Aplikacja", + "conceptDiagramSourceLabel": "Format źródłowy", + "conceptDiagramHubLabel": "OpenAI (hub)", + "conceptDiagramTargetLabel": "Docelowy provider", + "conceptDiagramExampleApp": "np. Anthropic SDK", + "conceptDiagramExampleSource": "claude", + "conceptDiagramExampleTarget": "Gemini", + "conceptHowItWorksToggle": "Jak to działa", + "conceptHowItWorksBody": "Aplikacja wysyła zapytanie w swoim formacie. Translator wykrywa format, konwertuje go za pośrednictwem OpenAI jako pośredni hub (lub bezpośrednio, gdy bezpośredni translator jest dostępny), przesyła do wybranego provider i zwraca odpowiedź przekonwertowaną z powrotem na format aplikacji.", + "tabTranslate": "Tłumaczenie", + "tabMonitor": "Monitor", + "tabTranslateAriaLabel": "Przejdź do zakładki Tłumaczenie", + "tabMonitorAriaLabel": "Przejdź do zakładki Monitor", + "simpleAppUsesLabel": "Aplikacja używa", + "simpleAppUsesHint": "Format API, którym posługuje się aplikacja (np. Anthropic SDK = claude).", + "simpleSendToLabel": "Wyślij do", + "simpleSendToHint": "Gdzie wysłać zapytanie (provider połączony w OmniRoute).", + "simpleStartWithLabel": "Rozpocznij od", + "simpleStartWithExamplePlaceholder": "Wybierz gotowy przykład", + "simpleStartWithCustomOption": "Wklej własne zapytanie (zaawansowane)", + "simpleModeLabel": "Tryb", + "simpleModePreview": "Tylko podgląd tłumaczenia", + "simpleModeSend": "Wyślij i wyświetl odpowiedź", + "simpleAdvancedToggle": "Zaawansowane", + "simpleInputPanelTitle": "Wejście", + "simpleInputPanelHint": "Wiadomość tekstowa lub gotowy przykład", + "simpleResultPanelTitle": "Tłumaczenie + odpowiedź", + "narratedDetected": "✓ Wykryto: {format}", + "narratedTranslating": "Tłumaczenie na format {target}...", + "narratedSending": "Wysyłanie do {target}...", + "narratedSuccess": "→ przetłumaczono na format {target} · odpowiedź w {latency}ms", + "narratedError": "Błąd: {reason}", + "narratedSeeTranslatedJson": "pokaż przetłumaczony JSON", + "narratedSeePipeline": "pokaż pipeline", + "advancedSectionTitle": "Zaawansowane", + "advancedSectionSubtitle": "Surowy JSON, pipeline i narzędzia techniczne. Wszystko tutaj jest takie samo jak w starych zakładkach — tylko zreorganizowane.", + "advancedRawJsonTitle": "Surowy JSON (autodetekcja + Monaco)", + "advancedRawJsonSubtitle": "Wklej zapytanie JSON; format zostanie wykryty automatycznie.", + "advancedPipelineTitle": "Pośredni pipeline OpenAI", + "advancedPipelineSubtitle": "Wizualizacja każdego kroku tłumaczenia (hub-and-spoke).", + "advancedStreamTransformTitle": "Stream Transformer (Chat → Responses SSE)", + "advancedStreamTransformSubtitle": "Konwertuje Chat Completions SSE na Responses API.", + "advancedTestBenchTitle": "Test Bench (8 scenariuszy)", + "advancedTestBenchSubtitle": "Uruchamia wszystkie scenariusze i raportuje stan zaliczony/niezaliczony oraz % zgodności.", + "advancedCompressionTitle": "Podgląd kompresji", + "advancedCompressionSubtitle": "Szacowanie oszczędności tokens przy użyciu różnych trybów kompresji.", + "monitorOriginHint": "Zdarzenia generowane przez Translate lub główny pipeline pojawiają się tutaj w czasie rzeczywistym.", + "monitorEmptyCta": "Przejdź do zakładki Tłumaczenie i wyślij zapytanie — pojawi się ono tutaj.", + "monitorOpenTranslateButton": "Przejdź do Tłumaczenie", + "pipelineStepClientRequest": "Zapytanie klienta", + "pipelineStepClientRequestDesc": "Zapytanie odebrane w formacie klienta", + "pipelineStepFormatDetected": "Wykryto format", + "pipelineStepFormatDetectedDesc": "Automatycznie wykryty format źródłowy", + "pipelineStepOpenAIIntermediate": "Format pośredni OpenAI", + "pipelineStepOpenAIIntermediateDesc": "Przetłumaczono na format hub OpenAI", + "pipelineStepProviderFormat": "Format Provider", + "pipelineStepProviderFormatDesc": "Przetłumaczono na docelowy format provider", + "pipelineStepProviderResponse": "Odpowiedź Provider", + "pipelineStepProviderResponseDesc": "Strumieniowa odpowiedź od provider", + "conceptDiagramArrow1": "obsługuje", + "conceptDiagramArrow2": "tłumaczy", + "conceptDiagramArrow3": "konwertuje", + "conceptDiagramExampleHub": "OpenAI", + "conceptDiagramHubTooltip": "Pośredni hub używany przez translator do konwersji między formatami, które nie mają bezpośredniego mapowania.", + "conceptDiagramSourceTooltip": "Format API, którym posługuje się aplikacja (np. Anthropic SDK = claude).", + "conceptDiagramTargetTooltip": "Provider, do którego faktycznie zostanie wysłane zapytanie.", + "compressionEmptyHint": "Wypełnij pole wejściowe w zakładce Tłumaczenie (Proste sterowanie lub Surowy JSON), aby włączyć podgląd.", + "compressionModeLabel": "Tryb kompresji", + "compressionPreviewButton": "Podgląd kompresji", + "compressionPreviewing": "Generowanie podglądu…" }, "usage": { "title": "Użycie", - "loggerTab": "Rejestrator", - "proxyTab": "Pełnomocnik", + "loggerTab": "Logger", + "proxyTab": "Proxy", "budgetManagement": "Zarządzanie budżetem", - "budgetSaved": "Limity budżetu zostały zapisane", + "budgetSaved": "Zapisano limity budżetu", "budgetSaveFailed": "Nie udało się zapisać budżetu", "loadingBudgetData": "Ładowanie danych budżetu...", - "noApiKeysTitle": "Brak kluczy API", - "noApiKeysDescription": "Najpierw dodaj klucze API, aby skonfigurować limity budżetu.", - "apiKey": "Klucz API", + "noApiKeysTitle": "Brak API Keys", + "noApiKeysDescription": "Najpierw dodaj API keys, aby skonfigurować limity budżetu.", + "apiKey": "API Key", "todaysSpend": "Dzisiejsze wydatki", "thisMonth": "W tym miesiącu", "setLimits": "Ustaw limity", @@ -6542,113 +6768,113 @@ "monthlyLimitUsd": "Limit miesięczny (USD)", "warningThresholdPercent": "Próg ostrzegawczy (%)", "dailyLimitPlaceholder": "np. 5.00", - "monthlyLimitPlaceholder": "np. 50,00", + "monthlyLimitPlaceholder": "np. 50.00", "warningThresholdPlaceholder": "80", "saveLimits": "Zapisz limity", "budgetOk": "Budżet OK — pozostało {remaining}", - "budgetExceeded": "Przekroczono budżet — żądania mogą zostać zablokowane", + "budgetExceeded": "Budżet przekroczony — żądania mogą zostać zablokowane", "totalRequests": "Łączna liczba żądań", "noDataYet": "Brak danych", "latency": "Opóźnienie", "latencyP50": "p50", - "latencyP95": "s. 95", - "latencyP99": "str. 99", - "promptCache": "Natychmiastowa pamięć podręczna", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Prompt Cache", "systemHealth": "Stan systemu", "entries": "Wpisy", - "activeCount": "{count} aktywny", - "openCircuitBreakersDetected": "Wykryto otwarte wyłączniki automatyczne", - "hitRate": "Współczynnik trafień", - "hitsMisses": "Trafienia/chybienia", - "circuitBreakers": "Wyłączniki automatyczne", + "activeCount": "{count} aktywnych", + "openCircuitBreakersDetected": "Wykryto otwarte circuit breakers", + "hitRate": "Hit Rate", + "hitsMisses": "Hits / Misses", + "circuitBreakers": "Circuit Breakers", "lockedIPs": "Zablokowane adresy IP", - "lockoutsAutoRefreshHint": "Blokady limitów prędkości dla poszczególnych modeli • Automatyczne odświeżanie 10 s", - "lockedCount": "{count, plural, one {# locked} other {# locked}}", - "timeLeft": "Pozostało {time}", + "lockoutsAutoRefreshHint": "Blokady rate limit per-model • Auto-refresh 10s", + "lockedCount": "{count, plural, one {# zablokowany} other {# zablokowanych}}", + "timeLeft": "Pozostało: {time}", "howItWorks": "Jak to działa", - "howItWorksSubtitle": "Dowiedz się, jak oceny weryfikują Twoje odpowiedzi LLM", - "define": "Zdefiniuj", - "defineStepDescription": "Twórz przypadki testowe z podpowiedziami wejściowymi i oczekiwanymi kryteriami wyjściowymi, korzystając ze strategii takich jak zawiera, wyrażenie regularne lub dopasowanie dokładne.", - "run": "Biegnij", - "runStepDescription": "Wykonuj przypadki testowe na punktach końcowych LLM za pośrednictwem OmniRoute. Każdy przypadek wysyłany jest jako prawdziwe żądanie API.", - "evaluate": "Oceń", - "evaluateStepDescription": "Odpowiedzi porównuje się z oczekiwanymi kryteriami. Zobacz wynik pozytywny/nieudany dla każdego przypadku ze wskaźnikami opóźnień i szczegółowymi informacjami zwrotnymi.", - "evalsStrategyContainsLabel": "__MISSING__:Contains", - "evalsStrategyExactLabel": "__MISSING__:Exact Match", - "evalsStrategyRegexLabel": "__MISSING__:Regex", - "evalsStrategyCustomLabel": "__MISSING__:Custom Logic", - "evalsStrategyContainsDescription": "__MISSING__:Checks if the LLM output contains the expected substring.", - "evalsStrategyExactDescription": "__MISSING__:Checks if the LLM output exactly matches the expected value.", - "evalsStrategyRegexDescription": "__MISSING__:Validates the LLM output against a regular expression pattern.", - "evalsStrategyCustomDescription": "__MISSING__:Custom evaluation logic (configured via JSON).", - "historyColumnSuiteName": "__MISSING__:Suite Name", - "historyColumnTarget": "__MISSING__:Target", - "historyColumnPassRate": "__MISSING__:Pass Rate", - "historyColumnAvgLatencyMs": "__MISSING__:Avg Latency", - "historyColumnCreatedAt": "__MISSING__:Executed", + "howItWorksSubtitle": "Dowiedz się, jak ewaluacje weryfikują odpowiedzi LLM", + "define": "Definiowanie", + "defineStepDescription": "Tworzenie przypadków testowych z promptami wejściowymi i oczekiwanymi kryteriami wyjściowymi przy użyciu strategii takich jak contains, regex lub exact match.", + "run": "Uruchamianie", + "runStepDescription": "Uruchamianie przypadków testowych dla endpoints LLM za pośrednictwem OmniRoute. Każdy przypadek jest wysyłany jako rzeczywiste żądanie API.", + "evaluate": "Ocena", + "evaluateStepDescription": "Odpowiedzi są porównywane z oczekiwanymi kryteriami. Zobacz status pass/fail dla każdego przypadku wraz z metrykami opóźnienia i szczegółowymi informacjami zwrotnymi.", + "evalsStrategyContainsLabel": "Contains", + "evalsStrategyExactLabel": "Exact Match", + "evalsStrategyRegexLabel": "Regex", + "evalsStrategyCustomLabel": "Niestandardowa logika", + "evalsStrategyContainsDescription": "Sprawdza, czy wynik LLM zawiera oczekiwany podciąg.", + "evalsStrategyExactDescription": "Sprawdza, czy wynik LLM dokładnie pasuje do oczekiwanej wartości.", + "evalsStrategyRegexDescription": "Waliduje wynik LLM pod kątem dopasowania do wyrażenia regularnego.", + "evalsStrategyCustomDescription": "Niestandardowa logika ewaluacji (konfigurowana przez JSON).", + "historyColumnSuiteName": "Nazwa zestawu", + "historyColumnTarget": "Cel", + "historyColumnPassRate": "Pass Rate", + "historyColumnAvgLatencyMs": "Śr. opóźnienie", + "historyColumnCreatedAt": "Uruchomiono", "evalSuites": "Zestawy ewaluacyjne", - "evalSuitesHint": "Kliknij zestaw, aby wyświetlić przypadki testowe, a następnie uruchom, aby ocenić punkty końcowe LLM", - "evalsLoading": "Ładowanie pakietów eval...", - "noEvalSuitesFound": "Nie znaleziono apartamentów Eval", - "noEvalSuitesDescription": "Zestawy Eval można definiować za pomocą interfejsu API lub w kodzie. Testują wyniki modelu pod kątem oczekiwanych wyników, korzystając ze strategii takich jak zawiera, wyrażenie regularne, dopasowanie dokładne i funkcje niestandardowe.", - "columnCase": "Sprawa", - "columnStatus": "Stan", + "evalSuitesHint": "Kliknij zestaw, aby wyświetlić przypadki testowe, a następnie uruchom, aby ocenić endpoints LLM", + "evalsLoading": "Ładowanie zestawów ewaluacyjnych...", + "noEvalSuitesFound": "Nie znaleziono zestawów ewaluacyjnych", + "noEvalSuitesDescription": "Zestawy ewaluacyjne mogą być definiowane przez API lub w kodzie. Testują one wyniki model pod kątem oczekiwanych rezultatów przy użyciu strategii takich jak contains, regex, exact match oraz funkcji niestandardowych.", + "columnCase": "Przypadek", + "columnStatus": "Status", "columnLatency": "Opóźnienie", "columnDetails": "Szczegóły", - "columnModel": "Modelka", + "columnModel": "Model", "columnStrategy": "Strategia", "columnExpected": "Oczekiwane", - "statsSuites": "Apartamenty", + "statsSuites": "Zestawy", "statsTestCases": "Przypadki testowe", - "statsModels": "Modele", - "statsCoverage": "Zasięg", - "statsStrategiesCount": "{count} strategie", + "statsModels": "Models", + "statsCoverage": "Pokrycie", + "statsStrategiesCount": "{count} strategii", "evaluationStrategies": "Strategie ewaluacji", - "modelsUnderTest": "Modele w fazie testów", - "searchSuitesPlaceholder": "Wyszukaj apartamenty...", - "passSuffix": "przejść", - "casesCount": "{count, plural, one {# case} other {# cases}}", - "runEval": "Uruchom Eval", - "runAllSuites": "Uruchom wszystko", + "modelsUnderTest": "Models under test", + "searchSuitesPlaceholder": "Szukaj zestawów...", + "passSuffix": "pass", + "casesCount": "{count, plural, one {# przypadek} other {# przypadków}}", + "runEval": "Uruchom ewaluację", + "runAllSuites": "Uruchom wszystkie", "runAllRunning": "Uruchamianie wszystkich...", "runAllProgress": "Uruchamianie {current}/{total}: {name}", - "runAllFailedSuites": "{count, plural, one {# suite failed} other {# suites failed}}", - "runAllCompleted": "Uruchomiono {suites} pakietów — {passed} przeszło, {failed} nie powiodło się", - "runAllCompletedWithFailures": "Prowadził {completed} apartamentów; {failedSuites} nie udało się ukończyć", - "runningProgress": "Uruchamiam {current}/{total}...", - "passRate": "wskaźnik zdawalności", - "summaryBreakdown": "{passed} zaliczony · {failed} nieudany · {total} łącznie", - "passedIconLabel": "✅ Zdane", - "failedIconLabel": "❌ Nie udało się", - "resultPassed": "Minęło", - "resultFailed": "Nie udało się", + "runAllFailedSuites": "{count, plural, one {# nieudany zestaw} other {# nieudanych zestawów}}", + "runAllCompleted": "Uruchomiono {suites} zestawów — {passed} zakończonych sukcesem, {failed} nieudanych", + "runAllCompletedWithFailures": "Uruchomiono {completed} zestawów; {failedSuites} nie udało się ukończyć", + "runningProgress": "Uruchamianie {current}/{total}...", + "passRate": "pass rate", + "summaryBreakdown": "{passed} sukces · {failed} porażka · {total} łącznie", + "passedIconLabel": "✅ Sukces", + "failedIconLabel": "❌ Błąd", + "resultPassed": "Sukces", + "resultFailed": "Błąd", "expandResult": "Rozwiń szczegóły wyniku", "collapseResult": "Zwiń szczegóły wyniku", - "detailsContains": "Zawiera: „{term}”", - "detailsRegex": "Wyrażenie regularne: {pattern}", - "detailsExpected": "Oczekiwano: „{expected}”", + "detailsContains": "Contains: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Expected: \"{expected}\"", "expectedOutputLabel": "Oczekiwany wynik", - "noResultsYet": "Jeszcze żadnych wyników", + "noResultsYet": "Brak wyników", "testCasesCount": "Przypadki testowe ({count})", - "noTestCasesDefined": "Nie zdefiniowano przypadków testowych", - "runEvalHint": "Kliknij „Uruchom ocenę”, aby wykonać wszystkie przypadki w punkcie końcowym LLM. Każdy test wysyła prawdziwe żądanie poprzez OmniRoute.", - "notifyNoTestCases": "Dla tego pakietu nie zdefiniowano żadnych przypadków testowych", - "notifyAllCasesPassed": "Wszystkie {total} sprawy zaliczone ✅", - "notifySomeCasesFailed": "{passed}/{total} zaliczone, {failed} nie powiodło się", - "notifyEvalRunFailed": "Próba ewaluacyjna nie powiodła się", - "notifyEvalTitle": "Wartość: {name}", - "modelEvals": "Oceny modeli", - "evalsHeroDescription": "Przetestuj i zweryfikuj punkty końcowe LLM, uruchamiając predefiniowane zestawy ewaluacyjne. Każdy pakiet zawiera przypadki testowe, które wysyłają rzeczywiste podpowiedzi za pośrednictwem OmniRoute i porównują odpowiedzi z oczekiwanymi kryteriami — pomagając wykrywać regresje, porównywać modele i zapewniać jakość odpowiedzi u różnych dostawców.", + "noTestCasesDefined": "Brak zdefiniowanych przypadków testowych", + "runEvalHint": "Kliknij „Run Eval”, aby uruchomić wszystkie przypadki dla swojego endpoint LLM. Każdy test wysyła rzeczywiste żądanie przez OmniRoute.", + "notifyNoTestCases": "Brak zdefiniowanych przypadków testowych dla tego zestawu", + "notifyAllCasesPassed": "Wszystkie przypadki ({total}) zakończone sukcesem ✅", + "notifySomeCasesFailed": "{passed}/{total} zakończonych sukcesem, {failed} nieudanych", + "notifyEvalRunFailed": "Uruchomienie ewaluacji nie powiodło się", + "notifyEvalTitle": "Ewaluacja: {name}", + "modelEvals": "Ewaluacje models", + "evalsHeroDescription": "Testuj i waliduj swoje endpoints LLM poprzez uruchamianie predefiniowanych zestawów ewaluacyjnych. Każdy zestaw zawiera przypadki testowe, które wysyłają rzeczywiste prompty przez OmniRoute i porównują odpowiedzi z oczekiwanymi kryteriami — pomagając wykrywać regresje, porównywać models i zapewniać jakość odpowiedzi u różnych providers.", "qualityValidation": "Walidacja jakości", - "modelComparison": "Porównanie modeli", + "modelComparison": "Porównanie models", "regressionDetection": "Wykrywanie regresji", - "latencyBenchmarks": "Testy porównawcze opóźnień", - "modelLockouts": "Blokady modeli", - "noLockouts": "Żaden model nie jest obecnie zablokowany", + "latencyBenchmarks": "Benchmarki opóźnienia", + "modelLockouts": "Model Lockouts", + "noLockouts": "Brak aktualnie zablokowanych models", "activeSessions": "Aktywne sesje", "noSessions": "Brak aktywnych sesji", - "sessionsHint": "Sesje pojawiają się, gdy żądania przepływają przez serwer proxy", - "sessionsTrackedHint": "Śledzone poprzez odcisk palca na żądanie • Automatyczne odświeżanie 5 s", + "sessionsHint": "Sesje pojawiają się, gdy żądania przepływają przez proxy", + "sessionsTrackedHint": "Śledzone za pomocą fingerprintingu żądań • Auto-refresh 5s", "session": "Sesja", "age": "Wiek", "requests": "Żądania", @@ -6659,283 +6885,304 @@ "durationHoursShort": "{value}h", "reasonSeparator": "-", "notAvailableSymbol": "-", - "providerLimits": "Limity dostawcy", - "noProviders": "Brak podłączonych dostawców", - "connectProvidersForQuota": "Połącz się z dostawcami za pomocą protokołu OAuth, aby śledzić limity przydziału interfejsu API i wykorzystanie.", - "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "providerLimits": "Provider Limits", + "noProviders": "Brak połączonych providers", + "connectProvidersForQuota": "Połącz się z providers za pomocą OAuth, aby śledzić limity quota i zużycie API.", + "accountsCount": "{count, plural, one {# konto} other {# kont}}", "filteredFromCount": "(odfiltrowano z {count})", "autoRefresh": "Automatyczne odświeżanie", "refreshAll": "Odśwież wszystko", "loadingQuotas": "Ładowanie...", + "showMoreQuotas": "Pokaż {count} więcej", + "showLessQuotas": "Pokaż mniej", "account": "Konto", - "modelQuotas": "Kwoty modelowe", - "lastUsed": "Last Refreshed", - "actions": "Działania", - "refreshQuota": "Odśwież limit", + "modelQuotas": "Model Quotas", + "lastUsed": "Ostatnio odświeżono", + "actions": "Akcje", + "refreshQuota": "Odśwież quota", "today": "Dzisiaj", "tomorrow": "Jutro", "dayTimeFormat": "{day}, {time}", - "inDuration": "w {duration}", - "notApplicable": "Nie dotyczy", + "inDuration": "za {duration}", + "notApplicable": "N/D", "rawPlanWithValue": "Surowy plan: {plan}", - "noPlanFromProvider": "Brak planu od dostawcy", - "tokenExpiresIn": "__MISSING__:Token expires in {time}", - "tokenExpired": "__MISSING__:Token expired", - "noQuotaData": "Brak danych dotyczących kwot", - "cardExpand": "__MISSING__:Expand", - "cardCollapse": "__MISSING__:Collapse", - "moreQuotas": "__MISSING__:+{count} more", - "ungrouped": "Ungrouped", - "viewFlat": "Flat", - "viewByEnvironment": "By Environment", - "noQuotaDataAvailable": "Brak dostępnych danych dotyczących kwot", - "noAccountsForTierFilter": "Nie znaleziono kont dla filtra poziomów", - "tierAll": "Wszystko", - "tierEnterprise": "Przedsiębiorstwo", - "tierTeam": "Zespół", - "tierBusiness": "Biznes", + "noPlanFromProvider": "Brak planu od provider", + "tokenExpiresIn": "Token wygasa za {time}", + "tokenExpired": "Token wygasł", + "noQuotaData": "Brak danych quota", + "cardExpand": "Rozwiń", + "cardCollapse": "Zwiń", + "moreQuotas": "+{count} więcej", + "ungrouped": "Niegrupowane", + "viewFlat": "Płaski", + "viewByEnvironment": "Według środowiska", + "noQuotaDataAvailable": "Brak dostępnych danych quota", + "noAccountsForTierFilter": "Nie znaleziono kont dla filtra tieru", + "tierAll": "Wszystkie", + "tierEnterprise": "Enterprise", + "tierTeam": "Team", + "tierBusiness": "Business", "tierUltra": "Ultra", - "tierPro": "Zawodowiec", - "tierPlus": "Dodatkowo", - "tierFree": "Bezpłatny", - "tierLite": "__MISSING__:Lite", + "tierPro": "Pro", + "tierPlus": "Plus", + "tierFree": "Free", + "tierLite": "Lite", "tierUnknown": "Nieznany", - "statTotal": "__MISSING__:Total", - "statCritical": "__MISSING__:Critical", - "statAlert": "__MISSING__:Alert", - "statHealthy": "__MISSING__:Healthy", - "filterPurchaseTypeLabel": "__MISSING__:Type", - "filterTierLabel": "__MISSING__:Tier", - "purchaseAll": "__MISSING__:All", - "purchaseOauthSub": "__MISSING__:Subscription", - "purchaseOauthFree": "__MISSING__:OAuth Free", - "purchaseApiKey": "__MISSING__:API Key", - "creditsLabel": "__MISSING__:Credits", - "creditBalanceHint": "__MISSING__:Remaining balance", - "unlimitedLabel": "__MISSING__:Unlimited", - "refreshing": "__MISSING__:Refreshing", - "resetsIn": "__MISSING__:Resets in", - "editCutoffs": "Edytuj odcięcia", + "statTotal": "Suma", + "statCritical": "Krytyczny", + "statAlert": "Alert", + "statHealthy": "Zdrowy", + "filterPurchaseTypeLabel": "Typ", + "filterTierLabel": "Tier", + "purchaseAll": "Wszystkie", + "purchaseOauthSub": "Subskrypcja", + "purchaseOauthFree": "OAuth Free", + "purchaseApiKey": "API Key", + "creditsLabel": "Kredyty", + "creditBalanceHint": "Pozostałe saldo", + "unlimitedLabel": "Bez limitu", + "refreshing": "Odświeżanie...", + "resetsIn": "Resetuje się za", + "editCutoffs": "Edytuj punkty odcięcia", "forceRefresh": "Odśwież teraz", - "suiteBuilderSaveFailed": "Failed to save suite", - "clone": "Klon", + "resetCreditsLabel": "Resetuj kredyty", + "redeemResetCredit": "Zrealizuj reset", + "manageResetCredits": "Wyświetl kredyty", + "viewResetCredits": "Wyświetl kredyty resetujące", + "resetCreditsModalTitle": "Codex reset credits", + "resetCreditsModalExplainer": "Kredyty są uporządkowane według daty wygaśnięcia. Automatyczna realizacja zawsze używa kredytu, który wygasa jako pierwszy.", + "resetCreditsLoadFailed": "Nie udało się załadować kredytów resetujących", + "resetCreditsDetailsUnavailable": "Szczegóły kredytów są obecnie niedostępne. Odśwież i spróbuj ponownie.", + "noResetCreditsAvailable": "Brak dostępnych kredytów resetujących.", + "resetCreditDefaultTitle": "Pełny reset", + "resetCreditExpiresFirst": "Wygasa najpierw", + "resetCreditExpiresAt": "Wygasa {date}", + "resetCreditNoExpiry": "Brak daty wygaśnięcia", + "redeemThisResetCredit": "Zrealizuj", + "confirmRedeemResetCreditTitle": "Zrealizować ten kredyt resetujący?", + "confirmRedeemResetCredit": "Natychmiastowa realizacja resetuje odpowiednie okna zużycia Codex i trwale zużywa ten kredyt.", + "confirmRedeemResetCreditButton": "Zrealizuj kredyt", + "resetCreditRedeemed": "Zrealizowano reset", + "resetCreditRedeemFailed": "Nie udało się zrealizować kredytu resetującego", + "suiteBuilderSaveFailed": "Nie udało się zapisać zestawu", + "clone": "Sklonuj", "exportSuite": "Eksportuj", "importSuite": "Importuj", - "suiteExported": "Pakiet wyeksportowany", - "suiteExportFailed": "Nie udało się wyeksportować pakietu", - "suiteImportReady": "Załadowano import pakietu do sprawdzenia", - "suiteImportFailed": "Nie udało się zaimportować pakietu", - "suiteImportInvalid": "Nieprawidłowy pakiet eval JSON", + "suiteExported": "Wyeksportowano zestaw", + "suiteExportFailed": "Nie udało się wyeksportować zestawu", + "suiteImportReady": "Import zestawu załadowany do przeglądu", + "suiteImportFailed": "Nie udało się zaimportować zestawu", + "suiteImportInvalid": "Nieprawidłowy JSON zestawu ewaluacji", "suiteBuilderCloneSuffix": "kopia", - "suiteBuilderImportedSuite": "Importowany pakiet", + "suiteBuilderImportedSuite": "Zaimportowany zestaw", "scorecardTitle": "Scorecard", "evalApiKey": "API Key", "scorecardPassRate": "Pass Rate", "targetTypeModel": "Model", - "actualOutputLabel": "Actual Output", - "evalTargetHint": "Select a model or combo to evaluate.", - "suiteBuilderDeleted": "Suite deleted successfully", - "suiteBuilderCaseCardHint": "Define the input prompt and expected output criteria.", - "nextResetUtc": "Next reset (UTC)", - "scorecardHint": "Aggregated pass rates across all evaluation suites.", - "suiteLatestRunsHint": "Most recent evaluation runs for this suite.", - "saving": "Saving", - "suiteBuilderCaseModelLabel": "Model (optional)", - "evalControlsTitle": "Evaluation Controls", - "suiteBuilderEditTitle": "Edit Eval Suite", - "suiteBuilderCaseStrategyLabel": "Validation Strategy", - "notifySelectDifferentCompareTarget": "Please select a different target for comparison", - "recentRunsHint": "Showing the most recent evaluation runs. Click a run to see detailed results.", - "evalCompareHint": "Optionally compare results against a second target.", - "suiteBuilderCaseInvalid": "This case has validation errors. Please fix before saving.", - "historyEmpty": "No evaluation history yet", - "suiteBuilderUpdated": "Suite updated successfully", - "resetInterval": "Reset Interval", - "suiteBuilderCreateTitle": "Create Eval Suite", - "activePeriodSpend": "Active Period Spend", - "evalApiKeyHint": "Select which API key to use for evaluation requests.", - "evalCompareOptional": "Compare (optional)", - "suiteBuilderDeleteFailed": "Failed to delete suite", - "suiteBuilderCaseSystemPromptPlaceholder": "Optional system instructions...", - "scorecardCases": "Cases", - "runCompletedWithScore": "Evaluation completed — {score}% pass rate", - "suiteBuilderCustomBadge": "Custom", - "targetSuiteDefaults": "Suite defaults", - "suiteBuilderDeleteConfirm": "Are you sure you want to delete this suite? This action cannot be undone.", - "suiteBuilderNameLabel": "Suite Name", - "scorecardSuites": "Suites", - "evalCompareTarget": "Compare Target", - "suiteBuilderCaseModelPlaceholder": "e.g. gpt-4o-mini", - "evalControlsHint": "Configure your evaluation target and API key, then run suites to validate model quality.", - "recentRunsTitle": "Recent Runs", + "actualOutputLabel": "Rzeczywisty wynik", + "evalTargetHint": "Wybierz model lub combo do ewaluacji.", + "suiteBuilderDeleted": "Pomyślnie usunięto zestaw", + "suiteBuilderCaseCardHint": "Zdefiniuj prompt wejściowy i oczekiwane kryteria wyjściowe.", + "nextResetUtc": "Następny reset (UTC)", + "scorecardHint": "Agregowane pass rates dla wszystkich zestawów ewaluacyjnych.", + "suiteLatestRunsHint": "Najnowsze uruchomienia ewaluacji dla tego zestawu.", + "saving": "Zapisywanie...", + "suiteBuilderCaseModelLabel": "Model (opcjonalnie)", + "evalControlsTitle": "Kontrola ewaluacji", + "suiteBuilderEditTitle": "Edytuj zestaw ewaluacyjny", + "suiteBuilderCaseStrategyLabel": "Strategia walidacji", + "notifySelectDifferentCompareTarget": "Wybierz inny cel do porównania", + "recentRunsHint": "Pokazywanie najnowszych uruchomień ewaluacji. Kliknij uruchomienie, aby zobaczyć szczegółowe wyniki.", + "evalCompareHint": "Opcjonalnie porównaj wyniki z drugim celem.", + "suiteBuilderCaseInvalid": "Ten przypadek zawiera błędy walidacji. Napraw je przed zapisaniem.", + "historyEmpty": "Brak historii ewaluacji", + "suiteBuilderUpdated": "Pomyślnie zaktualizowano zestaw", + "resetInterval": "Interwał resetowania", + "suiteBuilderCreateTitle": "Utwórz zestaw ewaluacyjny", + "activePeriodSpend": "Wydatki w aktywnym okresie", + "evalApiKeyHint": "Wybierz, który API Key ma być użyty do żądań ewaluacyjnych.", + "evalCompareOptional": "Porównaj (opcjonalnie)", + "suiteBuilderDeleteFailed": "Nie udało się usunąć zestawu", + "suiteBuilderCaseSystemPromptPlaceholder": "Opcjonalne instrukcje systemowe...", + "scorecardCases": "Przypadki", + "runCompletedWithScore": "Ewaluacja zakończona — pass rate na poziomie {score}%", + "suiteBuilderCustomBadge": "Niestandardowy", + "targetSuiteDefaults": "Ustawienia domyślne pakietu", + "suiteBuilderDeleteConfirm": "Czy na pewno chcesz usunąć ten pakiet? Tej operacji nie można cofnąć.", + "suiteBuilderNameLabel": "Nazwa pakietu", + "scorecardSuites": "Pakiety", + "evalCompareTarget": "Cel porównania", + "suiteBuilderCaseModelPlaceholder": "np. gpt-4o-mini", + "evalControlsHint": "Skonfiguruj cel ewaluacji i klucz API, a następnie uruchom pakiety, aby zweryfikować jakość, jaką oferuje model.", + "recentRunsTitle": "Ostatnie uruchomienia", "suiteBuilderCaseSystemPromptLabel": "System Prompt", - "suiteBuilderCaseExpectedPlaceholder": "e.g. def fibonacci", - "suiteBuilderCaseExpectedPlaceholderContains": "np. zdecydowanie Fibonacciego", - "suiteBuilderCaseExpectedPlaceholderExact": "Wklej dokładnie oczekiwaną odpowiedź", + "suiteBuilderCaseExpectedPlaceholder": "np. def fibonacci", + "suiteBuilderCaseExpectedPlaceholderContains": "np. def fibonacci", + "suiteBuilderCaseExpectedPlaceholderExact": "Wklej dokładną oczekiwaną odpowiedź", "suiteBuilderCaseExpectedPlaceholderRegex": "np. ^\\\\s*\\\\{.*\\\\}\\\\s*$", - "suiteBuilderCaseExpectedHintRegex": "Użyj wyrażenia regularnego JavaScript bez zawijania ukośników.", - "suiteBuilderNamePlaceholder": "e.g. Coding Quality Suite", - "suiteBuilderAddCase": "Add Case", - "cancel": "Cancel", - "evalTarget": "Target", - "suiteBuilderCaseNameLabel": "Case Name", - "weeklyLimitUsd": "Weekly Limit (USD)", - "suiteBuilderCaseUserPromptPlaceholder": "e.g. Write a fibonacci function in Python", - "suiteBuilderNameRequired": "Suite name is required", + "suiteBuilderCaseExpectedHintRegex": "Użyj wyrażenia regularnego JavaScript bez ukośników.", + "suiteBuilderNamePlaceholder": "np. Coding Quality Suite", + "suiteBuilderAddCase": "Dodaj przypadek", + "cancel": "Anuluj", + "evalTarget": "Cel", + "suiteBuilderCaseNameLabel": "Nazwa przypadku", + "weeklyLimitUsd": "Limit tygodniowy (USD)", + "suiteBuilderCaseUserPromptPlaceholder": "np. Write a fibonacci function in Python", + "suiteBuilderNameRequired": "Nazwa pakietu jest wymagana", "suiteBuilderCaseUserPromptLabel": "User Prompt", - "daily": "Daily", - "resultErrorLabel": "Error", - "suiteBuilderBuiltInBadge": "Built-in", - "suiteBuilderCaseCardTitle": "Test Case", - "suiteBuilderDuplicateCase": "Duplikat", - "weeklyLimitPlaceholder": "e.g. 50.00", - "suiteBuilderCaseTagsHint": "Comma-separated tags for organizing test cases.", - "notifyEvalRunFailedWithReason": "Evaluation failed: {reason}", - "weekly": "Weekly", - "runEvalRunning": "Running evaluation...", - "delete": "Delete", - "resetTimeUtc": "Reset Time (UTC)", - "evalApiKeyAuto": "Auto (use default)", - "suiteBuilderDescriptionPlaceholder": "Optional description of what this suite tests...", - "targetComparisonTitle": "Target Comparison", - "save": "Save", - "suiteBuilderCreated": "Suite created successfully", - "suiteLatestRuns": "Latest Runs", - "suiteBuilderCaseExpectedLabel": "Expected Value", - "historyLatency": "Latency", - "suiteBuilderCaseTagsPlaceholder": "e.g. coding, python", + "daily": "Dzienny", + "resultErrorLabel": "Błąd", + "suiteBuilderBuiltInBadge": "Wbudowany", + "suiteBuilderCaseCardTitle": "Przypadek testowy", + "suiteBuilderDuplicateCase": "Duplikuj", + "weeklyLimitPlaceholder": "np. 50.00", + "suiteBuilderCaseTagsHint": "Tagi oddzielone przecinkami do organizowania przypadków testowych.", + "notifyEvalRunFailedWithReason": "Ewaluacja nie powiodła się: {reason}", + "weekly": "Tygodniowy", + "runEvalRunning": "Uruchamianie ewaluacji...", + "delete": "Usuń", + "resetTimeUtc": "Czas resetu (UTC)", + "evalApiKeyAuto": "Auto (użyj domyślnego)", + "suiteBuilderDescriptionPlaceholder": "Opcjonalny opis tego, co testuje ten pakiet...", + "targetComparisonTitle": "Porównanie celów", + "save": "Zapisz", + "suiteBuilderCreated": "Pakiet został pomyślnie utworzony", + "suiteLatestRuns": "Ostatnie uruchomienia", + "suiteBuilderCaseExpectedLabel": "Oczekiwana wartość", + "historyLatency": "Opóźnienie", + "suiteBuilderCaseTagsPlaceholder": "np. coding, python", "targetTypeCombo": "Combo", - "scorecardPassed": "Passed", - "suiteBuilderCaseTagsLabel": "Tags", - "suiteBuilderNewSuite": "New Suite", - "notifyEvalLoadFailed": "Failed to load evaluation data", - "notConfigured": "Not Configured", - "suiteBuilderCaseNamePlaceholder": "e.g. Python fibonacci test", - "intervalLabel": "Interval", - "suiteBuilderCreateAction": "Create Suite", - "suiteBuilderCasesHint": "Each case sends a prompt and validates the response.", - "suiteBuilderUpdatedAt": "Updated", - "errorBadge": "Error", - "suiteBuilderCasesTitle": "Test Cases", - "edit": "Edit", - "monthly": "Monthly", - "suiteBuilderCasesRequired": "At least one test case is required", - "weeklyLimitSummary": "Weekly budget limit summary", - "suiteBuilderDescriptionLabel": "Description", - "targetComparisonHint": "Side-by-side comparison of evaluation results between targets.", - "compareCompletedWithScore": "Comparison completed — {score}% pass rate", - "staleQuotaTooltip": "Last refresh failed — showing cached data", - "quotaThresholdLabel": "Został Min", - "quotaCutoffsColumnHelp": "Zatrzymaj żądania, gdy pozostały przydział spadnie do tej wartości procentowej lub poniżej.", - "quotaCutoffsButtonDefault": "Domyślne", - "quotaCutoffsButtonHelp": "Edytuj minimalne pozostałe limity przydziału dla tego konta.", - "quotaCutoffsButtonDisabled": "Dla tego konta nie są jeszcze dostępne żadne okna przydziału.", - "deactivateAccount": "__MISSING__:Deactivate account (stop routing)", - "activateAccount": "__MISSING__:Activate account (resume routing)", - "accountActivated": "__MISSING__:Account activated", - "accountDeactivated": "__MISSING__:Account deactivated", - "toggleActiveFailed": "__MISSING__:Failed to update account status", - "quotaCutoffsTitle": "Ograniczenia przydziałów dla {name} ({provider})", - "quotaCutoffsExplainer": "Zastąp minimalny pozostały procent przydziału, w którym to konto przestaje być wybierane w każdym oknie przydziału. Pozostaw puste, aby odziedziczyć domyślnego dostawcę.", - "quotaCutoffsDefaultHint": "Domyślna pozostała min: {default}%", - "quotaCutoffsResetAll": "Zresetuj wszystko", - "quotaCutoffsNoWindows": "Dla tego konta nie są jeszcze dostępne żadne okna przydziału.", + "scorecardPassed": "Zaliczony", + "suiteBuilderCaseTagsLabel": "Tagi", + "suiteBuilderNewSuite": "Nowy pakiet", + "notifyEvalLoadFailed": "Nie udało się załadować danych ewaluacji", + "notConfigured": "Nie skonfigurowano", + "suiteBuilderCaseNamePlaceholder": "np. Python fibonacci test", + "intervalLabel": "Interwał", + "suiteBuilderCreateAction": "Utwórz pakiet", + "suiteBuilderCasesHint": "Każdy przypadek wysyła prompt i weryfikuje odpowiedź.", + "suiteBuilderUpdatedAt": "Zaktualizowano", + "errorBadge": "Błąd", + "suiteBuilderCasesTitle": "Przypadki testowe", + "edit": "Edytuj", + "monthly": "Miesięczny", + "suiteBuilderCasesRequired": "Wymagany jest przynajmniej jeden przypadek testowy", + "weeklyLimitSummary": "Podsumowanie tygodniowego limitu budżetu", + "suiteBuilderDescriptionLabel": "Opis", + "targetComparisonHint": "Bezpośrednie porównanie wyników ewaluacji między celami.", + "compareCompletedWithScore": "Porównanie zakończone — współczynnik zaliczeń: {score}%", + "staleQuotaTooltip": "Ostatnie odświeżenie nie powiodło się — wyświetlanie danych z pamięci podręcznej", + "quotaThresholdLabel": "Pozostałe min.", + "quotaCutoffsColumnHelp": "Zatrzymaj żądania, gdy pozostała quota spadnie do tej wartości procentowej lub poniżej.", + "quotaCutoffsButtonDefault": "Domyślnie", + "quotaCutoffsButtonHelp": "Edytuj limity odcięcia minimalnej pozostałej quota dla tego konta.", + "quotaCutoffsButtonDisabled": "Dla tego konta nie są jeszcze dostępne żadne okna quota.", + "deactivateAccount": "Dezaktywuj konto (zatrzymaj routing)", + "activateAccount": "Aktywuj konto (wznów routing)", + "accountActivated": "Konto aktywowane", + "accountDeactivated": "Konto dezaktywowane", + "toggleActiveFailed": "Nie udało się zaktualizować statusu konta", + "quotaCutoffsTitle": "Limity odcięcia quota dla {name} ({provider})", + "quotaCutoffsExplainer": "Nadpisz minimalny procent pozostałej quota, przy którym to konto przestaje być wybierane dla każdego okna quota. Pozostaw puste, aby odziedziczyć domyślne ustawienia provider.", + "quotaCutoffsDefaultHint": "Domyślna minimalna pozostała: {default}%", + "quotaCutoffsResetAll": "Resetuj wszystko", + "quotaCutoffsNoWindows": "Dla tego konta nie są jeszcze dostępne żadne okna quota.", "quotaThresholdInvalid": "Wprowadź liczbę całkowitą od 0 do 100.", "budgetKpiToday": "Dzisiaj", "budgetKpiThisMonth": "W tym miesiącu", - "budgetKpiProjEom": "Projekt EOM", - "budgetKpiBlocked": "Zablokowano", - "budgetKpiAtRisk": "Ryzykowne", + "budgetKpiProjEom": "Proj. EOM", + "budgetKpiBlocked": "Zablokowane", + "budgetKpiAtRisk": "Zagrożone", "budgetKpiActiveKeys": "Aktywne klucze", "budgetSearchKeysPlaceholder": "Szukaj kluczy...", - "budgetSortPctUsed": "Sortuj: % wykorzystanych ↓", - "budgetSortTodayDollar": "Sortuj: Dzisiaj $ ↓", - "budgetSortMonthDollar": "Sortuj: Miesiąc $ ↓", - "budgetSortNameAZ": "Sortuj: Nazwa (A–Z)", - "budgetColDailyLim": "Limit dzienny", - "budgetColMonthlyLim": "Limit miesięczny", - "budgetColUsedPct": "Zużyty%", - "percentUsed": "__MISSING__:{pct}% used", + "budgetSortPctUsed": "Sortowanie: % zużycia ↓", + "budgetSortTodayDollar": "Sortowanie: Dzisiaj $ ↓", + "budgetSortMonthDollar": "Sortowanie: Miesiąc $ ↓", + "budgetSortNameAZ": "Sortowanie: Nazwa (A–Z)", + "budgetColDailyLim": "Lim. dzienny", + "budgetColMonthlyLim": "Lim. miesięczny", + "budgetColUsedPct": "Zużycie %", + "percentUsed": "{pct}% zużyte", "budgetLoading": "Ładowanie…", - "budgetNoKeysMatch": "Żaden klucz nie pasuje do filtrów", + "budgetNoKeysMatch": "Brak kluczy pasujących do filtrów", "budgetLinearExtrapolation": "ekstrapolacja liniowa", - "budgetThisMonthSoFar": "Jak na razie w tym miesiącu", - "budgetProjectedEndOfMonth": "Przewidywany koniec miesiąca", - "budgetByProvider": "przez dostawcę", - "budgetDailyDollar": "Codziennie $", - "budgetWeeklyDollar": "Co tydzień $", + "budgetThisMonthSoFar": "Dotychczas w tym miesiącu", + "budgetProjectedEndOfMonth": "Prognozowany koniec miesiąca", + "budgetByProvider": "według provider", + "budgetDailyDollar": "Dziennie $", + "budgetWeeklyDollar": "Tygodniowo $", "budgetMonthlyDollar": "Miesięcznie $", - "budgetWarnAtPct": "Ostrzegaj w %", - "quotaAlerts": "Alerty dotyczące limitów", - "quotaTableRefreshing": "⟳ Orzeźwiające...", + "budgetWarnAtPct": "Ostrzegaj przy %", + "quotaAlerts": "Alerty quota", + "quotaTableRefreshing": "⟳ Odświeżanie...", "noSpendLast30Days": "Brak wydatków w ciągu ostatnich 30 dni", - "updatedShort": "__MISSING__:Updated", - "lastRefreshed": "__MISSING__:Last refreshed", - "providerQuota": "__MISSING__:Provider Quota", - "providerQuotaHomeHint": "__MISSING__:Live status across connected accounts" + "updatedShort": "Zaktualizowano", + "lastRefreshed": "Ostatnio odświeżono", + "providerQuota": "Provider Quota", + "providerQuotaHomeHint": "Status na żywo na połączonych kontach" }, "modals": { "waitingAuth": "Oczekiwanie na autoryzację", - "verificationUrl": "Adres URL weryfikacji", - "yourCode": "Twój kod", + "verificationUrl": "Weryfikacyjny URL", + "yourCode": "Kod", "remoteAccess": "Zdalny dostęp:", "connectedSuccess": "Połączono pomyślnie!", "connectionFailed": "Połączenie nie powiodło się", - "chooseAuthMethod": "Wybierz metodę uwierzytelniania:", - "awsBuilderId": "Identyfikator konstruktora AWS", - "awsIamIdentity": "Centrum tożsamości AWS IAM", + "chooseAuthMethod": "Wybór metody autoryzacji:", + "awsBuilderId": "AWS Builder ID", + "awsIamIdentity": "AWS IAM Identity Center", "googleAccount": "Konto Google", - "githubAccount": "Konto GitHuba", + "githubAccount": "Konto GitHub", "importToken": "Importuj token", "pasteToken": "Wklej token odświeżania z Kiro IDE.", - "awsRegion": "Regionu AWS", - "autoDetecting": "Automatyczne wykrywanie tokenów...", - "readingFromCache": "Odczyt z pamięci podręcznej AWS SSO", - "readingFromCursor": "Odczyt z bazy danych Cursor IDE", + "awsRegion": "AWS Region", + "autoDetecting": "Automatyczne wykrywanie tokens...", + "readingFromCache": "Odczytywanie z pamięci podręcznej AWS SSO", + "readingFromCursor": "Odczytywanie z bazy danych Cursor IDE", "initializing": "Inicjowanie...", - "pricingConfig": "Konfiguracja cen", - "loadingPricing": "Ładowanie danych cenowych...", - "pricingRatesFormat": "Format stawek cenowych", - "noPricingData": "Brak danych o cenach", - "noModelsFound": "Nie znaleziono żadnych modeli" + "pricingConfig": "Konfiguracja cennika", + "loadingPricing": "Ładowanie danych cennika...", + "pricingRatesFormat": "Format stawek cennika", + "noPricingData": "Brak dostępnych danych cennika", + "noModelsFound": "Nie znaleziono models" }, "loggers": { - "allProviders": "Wszyscy dostawcy", - "allModels": "Wszystkie modele", + "allProviders": "Wszyscy Providers", + "allModels": "Wszystkie Models", "allAccounts": "Wszystkie konta", "allApiKeys": "Wszystkie klucze API", "allTypes": "Wszystkie typy", "allLevels": "Wszystkie poziomy", "modelAZ": "Model A-Z", "modelZA": "Model Z-A", - "loadingLogs": "Ładowanie dzienników...", - "loadingProxyLogs": "Ładowanie dzienników proxy...", - "noLogEntries": "Nie znaleziono wpisów w dzienniku", - "noPayloadData": "Brak danych ładunku dla tego wpisu dziennika.", - "proxyEvent": "Wydarzenie proxy", - "proxy": "Pełnomocnik", - "level": "Poziom", + "loadingLogs": "Ładowanie logów...", + "loadingProxyLogs": "Ładowanie logów proxy...", + "noLogEntries": "Nie znaleziono wpisów w logach", + "noPayloadData": "Brak dostępnych danych payload dla tego wpisu.", + "proxyEvent": "Zdarzenie proxy", + "proxy": "Proxy", + "level": "Level", "directNative": "Bezpośrednie (natywne)", - "combo": "Kombinacja", - "inputTokens": "ja:", + "combo": "Combo", + "inputTokens": "I:", "outputTokens": "O:" }, "stats": { "usageOverview": "Przegląd użycia", - "outputTokens": "Tokeny wyjściowe", + "outputTokens": "Wyjściowe tokens", "totalCost": "Całkowity koszt", - "usageByModel": "Użycie według modelu", + "usageByModel": "Użycie według model", "usageByAccount": "Użycie według konta", - "failedToLoad": "Nie udało się załadować statystyk użytkowania.", - "tokenHealth": "Tokenowe zdrowie", - "totalOAuth": "Całkowite uwierzytelnienie OAuth", - "healthy": "Zdrowy", + "failedToLoad": "Nie udało się załadować statystyk użycia.", + "tokenHealth": "Kondycja token", + "totalOAuth": "Suma OAuth", + "healthy": "Prawidłowy", "warning": "Ostrzeżenie", - "errored": "Błąd", - "lastCheck": "Ostatnia kontrola", + "errored": "Z błędem", + "lastCheck": "Ostatnie sprawdzenie", "noData": "Brak danych", - "share": "Udostępnij", - "unableToLoad": "Nie można załadować wskaźników systemowych", + "share": "Udział", + "unableToLoad": "Nie można załadować metryk systemowych", "product": "Produkt", "resources": "Zasoby", "company": "Firma" @@ -6945,539 +7192,539 @@ "signIn": "Zaloguj się", "enterPassword": "Wprowadź hasło, aby kontynuować", "password": "Hasło", - "unifiedProxy": "Ujednolicony serwer proxy API AI", - "unifiedAiApiProxy": "Ujednolicony serwer proxy API AI", - "unifiedAiApiProxyDesc": "Kieruj żądania do wielu dostawców AI za pośrednictwem jednego punktu końcowego. Wbudowane równoważenie obciążenia, przełączanie awaryjne i śledzenie użycia.", + "unifiedProxy": "Jednolity Proxy API AI", + "unifiedAiApiProxy": "Jednolity Proxy API AI", + "unifiedAiApiProxyDesc": "Kieruj zapytania do wielu AI providers przez pojedynczy endpoint. Wbudowane równoważenie obciążenia, failover oraz śledzenie użycia.", "passwordNotEnabled": "Ochrona hasłem nie jest włączona", "loading": "Ładowanie...", "invalidPassword": "Nieprawidłowe hasło", "errorOccurredRetry": "Wystąpił błąd. Spróbuj ponownie.", - "configureInstance": "Skonfigurujmy Twoją instancję OmniRoute", - "runOnboardingWizard": "Uruchom kreatora wdrażania, aby ustawić hasło i połączyć się z pierwszym dostawcą AI.", - "startOnboarding": "Rozpocznij wdrażanie", - "secureYourInstance": "Zabezpiecz swoją instancję", - "setPasswordDescription": "Ustaw hasło, aby chronić swój pulpit nawigacyjny i zabezpieczyć punkty końcowe API przed nieautoryzowanym dostępem.", + "configureInstance": "Skonfiguruj instancję OmniRoute", + "runOnboardingWizard": "Uruchom kreator onboarding, aby ustawić hasło i połączyć pierwszego AI provider.", + "startOnboarding": "Rozpocznij onboarding", + "secureYourInstance": "Zabezpiecz instancję", + "setPasswordDescription": "Ustaw hasło, aby chronić dashboard i zabezpieczyć endpoints API przed nieautoryzowanym dostępem.", "configurePassword": "Skonfiguruj hasło", "continue": "Kontynuuj", "windowWillClose": "To okno zamknie się automatycznie...", - "closeTabNow": "Możesz już zamknąć tę zakładkę.", - "copyUrlManual": "Skopiuj adres URL z paska adresu i wklej go w aplikacji.", - "accessDeniedDescription": "Nie masz uprawnień dostępu do tego zasobu. Sprawdź swój klucz API lub skontaktuj się z administratorem.", - "goToDashboard": "Przejdź do Panelu", - "featureMultiProviderTitle": "Wielu dostawców", - "featureMultiProviderDesc": "OpenAI, Anthropic, Google i nie tylko", + "closeTabNow": "Można teraz zamknąć tę kartę.", + "copyUrlManual": "Skopiuj URL z paska adresu i wklej go w aplikacji.", + "accessDeniedDescription": "Brak uprawnień do dostępu do tego zasobu. Sprawdź klucz API lub skontaktuj się z administratorem.", + "goToDashboard": "Przejdź do dashboard", + "featureMultiProviderTitle": "Multi-Provider", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google i inne", "featureLoadBalancingTitle": "Równoważenie obciążenia", - "featureLoadBalancingDesc": "Rozpowszechniaj żądania inteligentnie", + "featureLoadBalancingDesc": "Inteligentne dystrybuowanie zapytań", "featureUsageTrackingTitle": "Śledzenie użycia", - "featureUsageTrackingDesc": "Monitoruj koszty i tokeny", - "resetPassword": "Zresetuj hasło", - "resetDescription": "Wybierz metodę odzyskania dostępu do pulpitu nawigacyjnego", + "featureUsageTrackingDesc": "Monitorowanie kosztów i tokens", + "resetPassword": "Resetuj hasło", + "resetDescription": "Wybierz metodę odzyskiwania dostępu do dashboard", "stopServer": "Zatrzymaj serwer OmniRoute", "processing": "Przetwarzanie...", - "pleaseWait": "Poczekaj, aż zakończymy autoryzację.", - "authSuccess": "Autoryzacja pomyślna!", - "copyUrl": "Skopiuj ten adres URL", - "accessDenied": "Odmowa dostępu", - "methodCliTitle": "Metoda 1: Reset CLI", - "methodCliDescription": "Uruchom następującą komendę na serwerze, na którym działa OmniRoute:", - "methodCliHint": "Spowoduje to wyświetlenie monitu o ustawienie nowego hasła. Najpierw należy zatrzymać serwer.", + "pleaseWait": "Proszę czekać na zakończenie autoryzacji.", + "authSuccess": "Autoryzacja powiodła się!", + "copyUrl": "Skopiuj ten URL", + "accessDenied": "Dostęp zabroniony", + "methodCliTitle": "Metoda 1: Reset przez CLI", + "methodCliDescription": "Uruchom następujące polecenie na serwerze, na którym działa OmniRoute:", + "methodCliHint": "To pozwoli na ustawienie nowego hasła. Najpierw należy zatrzymać serwer.", "methodManualTitle": "Metoda 2: Reset ręczny", - "methodManualDescription": "Usuń hasło z bazy danych i przy uruchomieniu ustaw nowe:", + "methodManualDescription": "Usuń hasło z bazy danych i ustaw nowe przy uruchomieniu:", "setPasswordInYour": "Ustaw nowe hasło w swoim", - "fileLabelSuffix": "plik:", - "newPasswordPlaceholder": "twoje_nowe_hasło", + "fileLabelSuffix": "pliku:", + "newPasswordPlaceholder": "your_new_password", "deleteSettingsFile": "Usuń", - "orRemovePasswordHashField": "lub usuń pole hasłoHash", - "restartServerWithNewPassword": "Zrestartuj serwer - będzie używał nowego hasła", + "orRemovePasswordHashField": "lub usuń pole passwordHash", + "restartServerWithNewPassword": "Uruchom ponownie serwer - użyje on nowego hasła", "backToLogin": "Powrót do logowania", - "forgotPassword": "Zapomniałeś hasła?", - "defaultPasswordHint": "Default password: CHANGEME (unless INITIAL_PASSWORD was set)", - "Authorization": "Autoryzacja", - "Content-Disposition": "Dyspozycja treści", - "waitingForAuthorization": "Waiting for authorization...", - "waitingForGoogleAuthorization": "Waiting for Google authorization...", - "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", - "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...", - "waitingForQoderAuthorization": "Waiting for Qoder authorization...", - "exchangingCodeForTokens": "Exchanging code for tokens...", - "nodeIncompatibleTitle": "Incompatible Node.js Version", - "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", - "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "forgotPassword": "Zapomniane hasło?", + "defaultPasswordHint": "Domyślne hasło: CHANGEME (chyba że ustawiono INITIAL_PASSWORD)", + "Authorization": "Authorization", + "Content-Disposition": "Content-Disposition", + "waitingForAuthorization": "Oczekiwanie na autoryzację...", + "waitingForGoogleAuthorization": "Oczekiwanie na autoryzację Google...", + "waitingForOpenAIAuthorization": "Oczekiwanie na autoryzację OpenAI...", + "waitingForAntigravityAuthorization": "Oczekiwanie na autoryzację Antigravity...", + "waitingForQoderAuthorization": "Oczekiwanie na autoryzację Qoder...", + "exchangingCodeForTokens": "Wymiana kodu na tokens...", + "nodeIncompatibleTitle": "Niezgodna wersja Node.js", + "nodeIncompatibleDesc": "Uruchomiono Node.js {version}, która wykracza poza wspieraną politykę bezpiecznego środowiska uruchomieniowego OmniRoute. Użyj załatanej wersji Node.js 20.x lub 22.x LTS.", + "nodeIncompatibleFixLabel": "Rozwiązanie: zainstaluj załataną wersję Node.js 22 LTS", + "nodeIncompatibleHint": "OmniRoute wymaga Node.js 22.22.2+ (22.x LTS) lub 24.0.0+ (24.x LTS). Zalecany jest Node 24 LTS." }, "landing": { "brandName": "OmniRoute", - "navigateHome": "Przejdź do domu", + "navigateHome": "Przejdź do strony głównej", "toggleMenu": "Przełącz menu", "featuresLink": "Funkcje", - "docsLink": "Dokumenty", + "docsLink": "Docs", "github": "GitHub", - "versionLive": "wersja 1.0 jest już dostępna", - "oneEndpoint": "Jeden punkt końcowy dla", - "allProviders": "Wszyscy dostawcy sztucznej inteligencji", - "heroDescription": "Serwer proxy punktu końcowego AI z panelem WWW — port JavaScript CLIProxyAPI. Bezproblemowo współpracuje z Claude Code, OpenAI Codex, Cline, RooCode i innymi narzędziami CLI.", + "versionLive": "Wersja v1.0 jest już dostępna", + "oneEndpoint": "Jeden endpoint dla", + "allProviders": "Wszyscy AI Providers", + "heroDescription": "Proxy endpoint AI z dashboard webowym - port JavaScript CLIProxyAPI. Działa płynnie z Claude Code, OpenAI Codex, Cline, RooCode i innymi narzędziami CLI.", "getStarted": "Rozpocznij", - "viewOnGithub": "Zobacz na GitHubie", + "viewOnGithub": "Zobacz na GitHub", "powerfulFeatures": "Potężne funkcje", - "featuresSubtitle": "Wszystko, czego potrzebujesz do zarządzania infrastrukturą AI w jednym miejscu, stworzonym z myślą o skali.", - "featureUnifiedEndpointTitle": "Ujednolicony punkt końcowy", - "featureUnifiedEndpointDesc": "Uzyskaj dostęp do wszystkich dostawców za pośrednictwem jednego standardowego adresu URL interfejsu API.", + "featuresSubtitle": "Wszystko, czego potrzebujesz do zarządzania infrastrukturą AI w jednym miejscu, stworzone z myślą o skalowalności.", + "featureUnifiedEndpointTitle": "Jednolity endpoint", + "featureUnifiedEndpointDesc": "Dostęp do wszystkich providers przez pojedynczy standardowy URL API.", "featureEasySetupTitle": "Łatwa konfiguracja", - "featureEasySetupDesc": "Rozpocznij pracę w ciągu kilku minut za pomocą polecenia npx.", - "featureModelFallbackTitle": "Model zastępczy", - "featureModelFallbackDesc": "Automatycznie przełączaj dostawców w przypadku awarii lub dużych opóźnień.", + "featureEasySetupDesc": "Uruchomienie w kilka minut za pomocą polecenia npx.", + "featureModelFallbackTitle": "Model fallback", + "featureModelFallbackDesc": "Automatyczne przełączanie providers w przypadku awarii lub wysokich opóźnień.", "featureUsageTrackingTitle": "Śledzenie użycia", - "featureUsageTrackingDesc": "Szczegółowa analiza i monitorowanie kosztów we wszystkich modelach.", - "featureOAuthApiKeysTitle": "Klucze OAuth i API", - "featureOAuthApiKeysDesc": "Bezpiecznie zarządzaj danymi uwierzytelniającymi w jednym skarbcu.", + "featureUsageTrackingDesc": "Szczegółowa analityka i monitorowanie kosztów we wszystkich models.", + "featureOAuthApiKeysTitle": "OAuth i klucze API", + "featureOAuthApiKeysDesc": "Bezpieczne zarządzanie poświadczeniami w jednym sejfie.", "featureCloudSyncTitle": "Synchronizacja w chmurze", - "featureCloudSyncDesc": "Błyskawicznie synchronizuj konfiguracje na różnych urządzeniach.", - "featureCliSupportTitle": "Wsparcie CLI", - "featureCliSupportDesc": "Współpracuje z Claude Code, Codex, Cline, Cursor i nie tylko.", - "featureDashboardTitle": "Pulpit nawigacyjny", - "featureDashboardDesc": "Wizualny pulpit nawigacyjny do analizy ruchu w czasie rzeczywistym.", + "featureCloudSyncDesc": "Natychmiastowa synchronizacja konfiguracji między urządzeniami.", + "featureCliSupportTitle": "Wsparcie dla CLI", + "featureCliSupportDesc": "Działa z Claude Code, Codex, Cline, Cursor i innymi.", + "featureDashboardTitle": "Dashboard", + "featureDashboardDesc": "Wizualny dashboard do analizy ruchu w czasie rzeczywistym.", "howItWorks": "Jak działa OmniRoute", - "howItWorksDescription": "Dane płynnie przepływają z Twojej aplikacji przez naszą inteligentną warstwę routingu do najlepszego dostawcy dla danego zadania.", + "howItWorksDescription": "Dane przepływają płynnie z aplikacji przez naszą inteligentną warstwę routingu do najlepszego provider do danego zadania.", "howItWorksStep1Title": "1. CLI i SDK", - "howItWorksStep1Description": "Twoje żądania zaczynają się od ulubionych narzędzi lub naszego ujednoliconego pakietu SDK. Po prostu zmień podstawowy adres URL.", - "howItWorksStep2Title": "2. Koncentrator OmniRoute", - "howItWorksStep2Description": "Nasz silnik analizuje monity, sprawdza stan dostawcy i trasy pod kątem najniższych opóźnień lub kosztów.", - "howItWorksStep3Title": "3. Dostawcy sztucznej inteligencji", - "howItWorksStep3Description": "Żądanie jest natychmiast spełniane przez OpenAI, Anthropic, Gemini lub inne.", + "howItWorksStep1Description": "Zapytania rozpoczynają się od ulubionych narzędzi lub naszego jednolitego SDK. Wystarczy zmienić bazowy URL.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Nasz silnik analizuje prompt, sprawdza stan zdrowia provider i kieruje ruch dla najniższych opóźnień lub kosztów.", + "howItWorksStep3Title": "3. AI Providers", + "howItWorksStep3Description": "Zapytanie jest natychmiast realizowane przez OpenAI, Anthropic, Gemini lub inne podmioty.", "getStartedIn30Seconds": "Rozpocznij w 30 sekund", - "getStartedDescription": "Zainstaluj OmniRoute, skonfiguruj dostawców za pomocą panelu internetowego i rozpocznij przekierowywanie żądań AI.", + "getStartedDescription": "Zainstaluj OmniRoute, skonfiguruj swoje providers przez dashboard sieciowy i zacznij kierować zapytania AI.", "installOmniRoute": "Zainstaluj OmniRoute", "installStepDescription": "Uruchom polecenie npx, aby natychmiast uruchomić serwer", - "openDashboard": "Otwórz Panel", - "openDashboardStepDescription": "Skonfiguruj dostawców i klucze API za pośrednictwem interfejsu internetowego", - "routeRequests": "Żądania dotyczące trasy", + "openDashboard": "Otwórz dashboard", + "openDashboardStepDescription": "Skonfiguruj providers i klucze API przez interfejs sieciowy", + "routeRequests": "Kieruj zapytania", "routeRequestsStepDescription": "Skieruj swoje narzędzia CLI na {endpoint}", - "terminal": "terminala", + "terminal": "terminal", "copy": "Kopiuj", "copied": "✓ Skopiowano", - "startingOmniRoute": "Uruchamiam OmniRoute...", - "serverRunningOnLabel": "Serwer działa", - "dashboardLabel": "Pulpit nawigacyjny", - "readyToRoute": "Gotowy do trasy! ✓", - "configureProvidersNote": "📝 Skonfiguruj dostawców w panelu kontrolnym lub użyj zmiennych środowiskowych", + "startingOmniRoute": "Uruchamianie OmniRoute...", + "serverRunningOnLabel": "Serwer działa na", + "dashboardLabel": "Dashboard", + "readyToRoute": "Gotowy do routingu! ✓", + "configureProvidersNote": "📝 Skonfiguruj providers w dashboard lub użyj zmiennych środowiskowych", "dataLocation": "Lokalizacja danych:", "dataLocationMacLinux": "macOS/Linux:", - "dataLocationWindows": "Okna:", + "dataLocationWindows": "Windows:", "product": "Produkt", - "dashboardLink": "Pulpit nawigacyjny", - "changelog": "Dziennik zmian", + "dashboardLink": "Dashboard", + "changelog": "Changelog", "resources": "Zasoby", "documentation": "Dokumentacja", "npm": "NPM", - "legal": "Legalne", + "legal": "Kwestie prawne", "mitLicense": "Licencja MIT", - "footerTagline": "Ujednolicony punkt końcowy do generowania sztucznej inteligencji. Z łatwością łącz się, kieruj i zarządzaj dostawcami sztucznej inteligencji.", + "footerTagline": "Scentralizowany endpoint do generowania AI. Łatwo łącz, kieruj i zarządzaj swoimi AI providers.", "copyright": "© {year} OmniRoute. Wszelkie prawa zastrzeżone.", - "flowToolClaudeCode": "Claude'a Koda", - "flowToolOpenAICodex": "Kodeks OpenAI", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "OpenAI Codex", "flowToolCline": "Cline", - "flowToolCursor": "Kursor", + "flowToolCursor": "Cursor", "flowProviderOpenAI": "OpenAI", - "flowProviderAnthropic": "Antropiczny", - "flowProviderGemini": "Bliźnięta", - "flowProviderGithubCopilot": "Drugi pilot GitHuba", + "flowProviderAnthropic": "Anthropic", + "flowProviderGemini": "Gemini", + "flowProviderGithubCopilot": "GitHub Copilot", "interactiveDiagram": "Interaktywny diagram widoczny na pulpicie", "ctaTitle": "Chcesz uprościć swoją infrastrukturę AI?", - "ctaDescription": "Dołącz do programistów, którzy usprawniają integrację sztucznej inteligencji za pomocą OmniRoute. Oprogramowanie typu open source i na początek bezpłatne.", - "startFree": "Zacznij za darmo", + "ctaDescription": "Dołącz do programistów, którzy usprawniają swoje integracje AI za pomocą OmniRoute. Open source i za darmo na start.", + "startFree": "Rozpocznij za darmo", "readDocumentation": "Przeczytaj dokumentację" }, "docs": { "title": "Dokumentacja", "quickStart": "Szybki start", - "deploymentGuides": "Przewodniki wdrażania", + "deploymentGuides": "Instrukcje wdrożenia", "features": "Funkcje", - "supportedProviders": "Obsługiwani dostawcy", - "supportedProvidersToc": "Dostawcy", + "supportedProviders": "Obsługiwane providers", + "supportedProvidersToc": "Providers", "commonUseCases": "Typowe przypadki użycia", - "clientCompatibility": "Zgodność klienta", - "protocolsToc": "Protocols", - "apiReference": "Dokumentacja API", - "managementApiReference": "Management API Reference", - "managementApiDescription": "Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.", + "clientCompatibility": "Kompatybilność klientów", + "protocolsToc": "Protokoły", + "apiReference": "Referencja API", + "managementApiReference": "Referencja API zarządzania", + "managementApiDescription": "Automatyzacja endpoints dla rejestru proxy, przypisywania zakresów i migracji starszych wersji proxy.", "method": "Metoda", "path": "Ścieżka", - "notes": "Notatki", - "modelPrefixes": "Przedrostki modeli", - "prefix": "Przedrostek", + "notes": "Uwagi", + "modelPrefixes": "Prefiksy model", + "prefix": "Prefiks", "troubleshooting": "Rozwiązywanie problemów", - "supportsChat": "Obsługuje punkty końcowe czatu i odpowiedzi.", - "oauthAutoRefresh": "Połączenie OAuth z automatycznym odświeżaniem tokena.", - "fullStreaming": "Pełna obsługa transmisji strumieniowej dla wszystkich modeli.", - "docsLabel": "Dokumenty", - "docsHeroDescription": "Brama AI dla LLM wielu dostawców. Jeden punkt końcowy dla OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor i ponad 20 innych dostawców.", - "openDashboard": "Otwórz Panel", - "endpointPage": "Strona punktu końcowego", + "supportsChat": "Obsługuje endpoints chat i responses.", + "oauthAutoRefresh": "Połączenie OAuth z automatycznym odświeżaniem token.", + "fullStreaming": "Pełna obsługa streamingu dla wszystkich models.", + "docsLabel": "Dokumentacja", + "docsHeroDescription": "Brama AI dla multi-provider LLMs. Jeden endpoint dla OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor i ponad 20 innych providers.", + "openDashboard": "Otwórz dashboard", + "endpointPage": "Strona endpoint", "github": "GitHub", "reportIssue": "Zgłoś problem", "onThisPage": "Na tej stronie", "documentationVersion": "Dokumentacja - v{version}", "quickStartStep1Title": "1. Zainstaluj i uruchom", - "quickStartStep1Prefix": "Biegnij", + "quickStartStep1Prefix": "Uruchom", "quickStartStep1Middle": "lub sklonuj z GitHub i uruchom", - "quickStartStep2Title": "2. Utwórz klucz API", - "quickStartStep2Text": "Przejdź do Punkt końcowy -> Zarejestrowane klucze. Wygeneruj jeden klucz na środowisko.", - "quickStartStep3Title": "3. Połącz dostawców", - "quickStartStep3Text": "Dodaj konta dostawców za pomocą loginu OAuth, klucza API lub automatycznego łączenia w warstwie bezpłatnej.", - "quickStartStep4Title": "4. Ustaw podstawowy adres URL klienta", - "quickStartStep4Prefix": "Wskaż klienta IDE lub API", - "quickStartStep4Suffix": "Użyj na przykład prefiksu dostawcy", - "deploySetupTitle": "Przewodnik konfiguracji", - "deploySetupText": "Instalacja krok po kroku, konfiguracja środowiska i instrukcja pierwszego uruchomienia OmniRoute.", - "deployElectronTitle": "Pulpit elektronowy", - "deployElectronText": "Uruchom OmniRoute jako natywną aplikację komputerową w systemach Windows, macOS i Linux.", - "deployDockerTitle": "Doker", - "deployDockerText": "Wdrożenie kontenerowe za pomocą Docker Compose; gotowy na stosy produkcyjne i Kubernetes.", + "quickStartStep2Title": "2. Utwórz API key", + "quickStartStep2Text": "Przejdź do Endpoint -> Registered Keys. Wygeneruj jeden klucz na środowisko.", + "quickStartStep3Title": "3. Połącz providers", + "quickStartStep3Text": "Dodaj konta provider za pomocą logowania OAuth, API key lub automatycznego połączenia poziomu darmowego.", + "quickStartStep4Title": "4. Ustaw bazowy URL klienta", + "quickStartStep4Prefix": "Skieruj IDE lub klienta API na", + "quickStartStep4Suffix": "Użyj prefiksu provider, na przykład", + "deploySetupTitle": "Instrukcja konfiguracji", + "deploySetupText": "Instalacja krok po kroku, konfiguracja środowiska i pierwsze uruchomienie OmniRoute.", + "deployElectronTitle": "Electron Desktop", + "deployElectronText": "Uruchom OmniRoute jako natywną aplikację desktopową na systemach Windows, macOS i Linux.", + "deployDockerTitle": "Docker", + "deployDockerText": "Wdrożenie kontenerowe za pomocą Docker Compose; gotowe dla stosów produkcyjnych i Kubernetes.", "deployVmTitle": "Maszyna wirtualna", - "deployVmText": "Samodzielny host na dowolnej maszynie wirtualnej z systemem Linux. Obejmuje jednostkę systemową, rotację dzienników i narzędzia do tworzenia kopii zapasowych.", + "deployVmText": "Self-host na dowolnej VM Linux. Zawiera usługę systemd, rotację logów i narzędzia do tworzenia kopii zapasowych.", "deployFlyTitle": "Fly.io", - "deployFlyText": "Wdróż w środowisku wykonawczym brzegowym Fly.io za pomocą jednego pliku fly.toml i jednego polecenia wdrażania.", + "deployFlyText": "Wdróż na Fly.io edge runtime z jednym fly.toml i pojedynczym poleceniem deploy.", "deployPwaTitle": "PWA", - "deployPwaText": "Zainstaluj OmniRoute jako progresywną aplikację internetową w przeglądarkach na Androidzie, iOS i na komputerze.", + "deployPwaText": "Zainstaluj OmniRoute jako Progressive Web App na Androidzie, iOS i przeglądarkach desktopowych.", "deployTermuxTitle": "Termux (Android)", - "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser.", - "featureRoutingTitle": "Routing wielu dostawców", - "featureRoutingText": "Kieruj żądania do ponad 30 dostawców AI za pośrednictwem jednego punktu końcowego kompatybilnego z OpenAI. Obsługuje interfejsy API czatu, odpowiedzi, dźwięku i obrazu.", - "featureCombosTitle": "Kombinacje i balansowanie", - "featureCombosText": "Twórz kombinacje modeli z łańcuchami awaryjnymi i strategiami równoważenia: okrężne, priorytetowe, losowe, najrzadziej używane i zoptymalizowane pod względem kosztów.", - "featureUsageTitle": "Śledzenie wykorzystania i kosztów", - "featureUsageText": "Liczenie tokenów w czasie rzeczywistym, kalkulacja kosztów dla każdego dostawcy/modelu oraz szczegółowy podział wykorzystania według klucza API i konta.", - "featureAnalyticsTitle": "Panel analityczny", - "featureAnalyticsText": "Analityka wizualna z wykresami żądań, tokenów, błędów, opóźnień, kosztów i popularności modelu w czasie.", - "featureHealthTitle": "Monitorowanie zdrowia", - "featureHealthText": "Kontrole stanu na żywo, status dostawcy, stany wyłączników i automatyczne wykrywanie limitów szybkości z wykładniczym wycofywaniem.", - "featureCliTitle": "Narzędzia interfejsu wiersza polecenia", - "featureCliText": "Zarządzaj konfiguracjami IDE, eksportuj/importuj kopie zapasowe, odkrywaj profile Codexu i konfiguruj ustawienia z poziomu pulpitu nawigacyjnego.", - "featureSecurityTitle": "Bezpieczeństwo i zasady", - "featureSecurityText": "Uwierzytelnianie kluczem API, filtrowanie IP, ochrona przed wtryskiem, zasady domeny, zarządzanie sesjami i rejestrowanie audytu.", - "featureCloudSyncTitle": "Synchronizacja w chmurze", - "featureCloudSyncText": "Zsynchronizuj swoją konfigurację z Cloudflare Workers, aby uzyskać zdalny dostęp za pomocą szyfrowanych poświadczeń i automatycznego przełączania awaryjnego.", - "providersAcrossConnectionTypes": "{count} dostawców dla trzech typów połączeń.", - "manageProviders": "Zarządzaj dostawcami", - "providersCount": "{count} dostawców", - "providerTypeFree": "Poziom bezpłatny", + "deployTermuxText": "Uruchom OmniRoute w trybie headless na Androidzie przez Termux. Uzyskaj dostęp do dashboard z przeglądarki mobilnej.", + "featureRoutingTitle": "Routing pomiędzy wieloma providers", + "featureRoutingText": "Kierowanie żądań do ponad 30 AI providers przez pojedynczy, kompatybilny z OpenAI endpoint. Obsługuje API dla chat, responses, audio i obrazów.", + "featureCombosTitle": "Combos i równoważenie", + "featureCombosText": "Tworzenie combos model z łańcuchami fallback i strategiami równoważenia obciążenia: round-robin, priority, random, least-used i cost-optimized.", + "featureUsageTitle": "Śledzenie użycia i kosztów", + "featureUsageText": "Zliczanie token w czasie rzeczywistym, kalkulacja kosztów na provider/model oraz szczegółowy podział użycia według API key i konta.", + "featureAnalyticsTitle": "Dashboard analityki", + "featureAnalyticsText": "Wizualna analityka z wykresami żądań, tokens, błędów, opóźnień, kosztów i popularności model w czasie.", + "featureHealthTitle": "Monitorowanie stanu (Health)", + "featureHealthText": "Bieżące testy stanu, status provider, stany circuit breaker i automatyczne wykrywanie rate limit z exponential backoff.", + "featureCliTitle": "Narzędzia CLI", + "featureCliText": "Zarządzanie konfiguracjami IDE, eksport/import kopii zapasowych, wykrywanie profili codex i konfiguracja ustawień z poziomu dashboard.", + "featureSecurityTitle": "Bezpieczeństwo i polityki", + "featureSecurityText": "Uwierzytelnianie API key, filtrowanie IP, prompt injection guard, polityki domenowe, zarządzanie sesjami i logowanie audytowe.", + "featureCloudSyncTitle": "Cloud Sync", + "featureCloudSyncText": "Synchronizacja konfiguracji z Cloudflare Workers w celu zdalnego dostępu z zaszyfrowanymi danymi uwierzytelniającymi i automatycznym przełączaniem awaryjnym (failover).", + "providersAcrossConnectionTypes": "{count} providers w trzech typach połączeń.", + "manageProviders": "Zarządzanie Providers", + "providersCount": "{count} providers", + "providerTypeFree": "Poziom darmowy (Free Tier)", "providerTypeOAuth": "OAuth", - "providerTypeApiKey": "Klucz API", - "useCaseSingleEndpointTitle": "Jeden punkt końcowy dla wielu dostawców", - "useCaseSingleEndpointText": "Wskaż klientom jeden podstawowy adres URL i trasę według prefiksu modelu (na przykład: gh/, cc/, kr/, openai/).", - "useCaseFallbackTitle": "Przełączanie awaryjne i modelowe za pomocą kombinacji", - "useCaseFallbackText": "Twórz modele łączone w panelu kontrolnym i utrzymuj stabilną konfigurację klienta, podczas gdy dostawcy zmieniają się wewnętrznie.", + "providerTypeApiKey": "API Key", + "useCaseSingleEndpointTitle": "Pojedynczy endpoint dla wielu providers", + "useCaseSingleEndpointText": "Skieruj klientów na jeden bazowy URL i przekierowuj według prefiksu model (na przykład: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback i przełączanie model z combos", + "useCaseFallbackText": "Tworzenie combo models w Dashboard i zachowanie stabilnej konfiguracji klienta podczas rotacji providers.", "useCaseUsageVisibilityTitle": "Widoczność użycia, kosztów i debugowania", - "useCaseUsageVisibilityText": "Śledź tokeny i koszty według dostawcy, konta i klucza API na kartach Użycie i Analityka.", - "clientCherryStudioTitle": "Wiśniowe Studio", - "baseUrlLabel": "Bazowy adres URL", - "chatEndpointLabel": "Punkt końcowy czatu", - "modelRecommendationLabel": "Rekomendacja modelu: wyraźny przedrostek", - "clientCodexTitle": "Modele drugiego pilota w Kodeksie/GitHub", - "clientCodexBullet1": "Użyj identyfikatorów modeli z", - "clientCodexBullet2": "Modele z rodziny Codex automatycznie kierują się do", - "clientCodexBullet3": "Modele inne niż Kodeks są kontynuowane", - "clientCursorTitle": "Kursor IDE", - "clientCursorBullet1": "Użyj", - "clientCursorBullet1Suffix": "przedrostek dla modeli kursora.", - "clientCursorBullet2": "Połączenie OAuth - zaloguj się ze strony Dostawcy.", - "clientClaudeTitle": "Kod Claude'a / Antygrawitacja", - "clientClaudeBullet1Prefix": "Użyj", + "useCaseUsageVisibilityText": "Śledzenie tokens i kosztów według provider, konta oraz API key w zakładkach Usage i Analytics.", + "clientCherryStudioTitle": "Cherry Studio", + "baseUrlLabel": "Base URL", + "chatEndpointLabel": "Chat endpoint", + "modelRecommendationLabel": "Rekomendacja model: jawny prefiks", + "clientCodexTitle": "Models Codex / GitHub Copilot", + "clientCodexBullet1": "Używanie ID model z", + "clientCodexBullet2": "Models z rodziny Codex automatycznie kierują do", + "clientCodexBullet3": "Models inne niż Codex są kontynuowane na", + "clientCursorTitle": "Cursor IDE", + "clientCursorBullet1": "Użycie", + "clientCursorBullet1Suffix": "prefiksu dla Cursor models.", + "clientCursorBullet2": "Połączenie OAuth - logowanie ze strony Providers.", + "clientClaudeTitle": "Claude Code / Antigravity", + "clientClaudeBullet1Prefix": "Użycie", "clientClaudeBullet1Middle": "(Claude) lub", - "clientClaudeBullet1Suffix": "Przedrostek (Antygrawitacja).", - "clientWindsurfTitle": "Windsurfing", - "clientWindsurfBullet1": "Użyj OmniRoute jako podstawowego adresu URL zgodnego z OpenAI i zachowaj jawne przedrostki dostawców dla routingu deterministycznego.", - "clientWindsurfBullet2": "Wskaż modele na `/v1/chat/completions` dla ogólnego ruchu i zachowaj `/v1/responses` dla przepływów w stylu Codexu.", - "clientWindsurfBullet3": "Użyj Dashboard -> CLI Tools, aby uzyskać gotowy przewodnik konfiguracji Windsurfingu.", + "clientClaudeBullet1Suffix": "(Antigravity) prefiksu.", + "clientWindsurfTitle": "Windsurf", + "clientWindsurfBullet1": "Używanie OmniRoute jako bazowego URL kompatybilnego z OpenAI i zachowanie jawnych prefiksów provider dla deterministycznego routingu.", + "clientWindsurfBullet2": "Kierowanie models na `/v1/chat/completions` dla ogólnego ruchu i zachowanie `/v1/responses` dla przepływów w stylu Codex.", + "clientWindsurfBullet3": "Użycie Dashboard -> CLI Tools w celu uzyskania gotowego przewodnika konfiguracji Windsurf.", "clientClineTitle": "Cline", - "clientClineBullet1": "Cline działa najlepiej z wyraźnymi prefiksami dostawcy/modelu, więc router nigdy nie musi zgadywać backendu.", - "clientClineBullet2": "Użyj `/v1/chat/completions` dla modeli ogólnych i ponownie użyj tego samego podstawowego adresu URL OmniRoute na różnych kontach.", - "clientClineBullet3": "Użyj panelu dostawców, aby sprawdzić poprawność klucza OAuth/API przed debugowaniem problemów ze środowiskiem wykonawczym Cline.", - "clientKimiTitle": "Kodowanie Kimi", - "clientKimiBullet1": "Używaj OmniRoute jako stabilnego podstawowego adresu URL podczas rotacji kont lub kombinacji dostawców pod spodem.", - "clientKimiBullet2": "Preferuj modele z prefiksami w przepływach kodowania, aby rezerwa i ścieżka audytu pozostały wyraźne.", - "clientKimiBullet3": "Użyj `/v1/responses`, jeśli chcesz natywnego routingu w stylu Responses dla klientów korzystających z narzędzi.", - "protocolsTitle": "Protocols: MCP & A2A", - "protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.", + "clientClineBullet1": "Cline działa najlepiej z jawnymi prefiksami provider/model, dzięki czemu router nigdy nie musi zgadywać backendu.", + "clientClineBullet2": "Używanie `/v1/chat/completions` dla ogólnych models i ponowne używanie tego samego bazowego URL OmniRoute na różnych kontach.", + "clientClineBullet3": "Użycie dashboard Providers do walidacji OAuth/API key przed debugowaniem problemów wykonawczych Cline.", + "clientKimiTitle": "Kimi Coding", + "clientKimiBullet1": "Używanie OmniRoute jako stabilnego bazowego URL podczas rotacji kont lub combos provider pod spodem.", + "clientKimiBullet2": "Preferowanie models z prefiksem w przepływach kodowania, aby fallback i ścieżka audytu pozostały jawne.", + "clientKimiBullet3": "Używanie `/v1/responses` przy potrzebie natywnego routingu w stylu Responses dla klientów korzystających z narzędzi.", + "protocolsTitle": "Protokoły: MCP & A2A", + "protocolsDescription": "OmniRoute udostępnia dwa protokoły operacyjne oprócz interfejsów API kompatybilnych z OpenAI: MCP do wykonywania narzędzi i A2A dla przepływów pracy agent-to-agent.", "protocolMcpTitle": "MCP (Model Context Protocol)", - "protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.", - "protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.", - "protocolMcpStep2": "Point your MCP client to stdio transport.", - "protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.", + "protocolMcpDesc": "Używanie MCP przez stdio, aby umożliwić klientom wykrywanie i wywoływanie narzędzi OmniRoute z widocznością audytu.", + "protocolMcpStep1": "Uruchomienie transportu MCP za pomocą `omniroute --mcp`.", + "protocolMcpStep2": "Skierowanie klienta MCP na transport stdio.", + "protocolMcpStep3": "Wywołanie `omniroute_get_health` i `omniroute_list_combos` w celu walidacji połączenia.", "protocolA2aTitle": "A2A (Agent2Agent)", - "protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.", - "protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.", - "protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.", - "protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.", - "protocolTroubleshootingTitle": "Protocol Troubleshooting", - "protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.", - "protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.", - "protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.", - "endpointChatNote": "Punkt końcowy czatu zgodny z OpenAI (domyślnie).", - "endpointResponsesNote": "Punkt końcowy interfejsu API odpowiedzi (Kodeks, seria o).", - "endpointModelsNote": "Katalog modeli dla wszystkich podłączonych dostawców.", + "protocolA2aDesc": "Używanie A2A JSON-RPC do przesyłania zadań synchronicznie lub przez streaming SSE.", + "protocolA2aStep1": "Odczyt `/.well-known/agent.json` w celu wykrywania agentów.", + "protocolA2aStep2": "Wysyłanie żądań `message/send` lub `message/stream` do `POST /a2a`.", + "protocolA2aStep3": "Zarządzanie cyklem życia zadań za pomocą `tasks/get` i `tasks/cancel`.", + "protocolTroubleshootingTitle": "Rozwiązywanie problemów z protokołami", + "protocolTroubleshooting1": "Jeśli status MCP jest offline, należy zweryfikować, czy proces stdio działa i plik heartbeat jest aktualizowany.", + "protocolTroubleshooting2": "Jeśli zadania A2A pozostają w stanie `working`, należy sprawdzić `/api/a2a/tasks/:id` oraz zdarzenia strumienia pod kątem stanu końcowego.", + "protocolTroubleshooting3": "Używanie `/dashboard/mcp` i `/dashboard/a2a` do kontroli operacyjnej i widoczności audytu.", + "endpointChatNote": "Kompatybilny z OpenAI endpoint chat (domyślny).", + "endpointResponsesNote": "Endpoint API responses (Codex, o-series).", + "endpointModelsNote": "Katalog model dla wszystkich połączonych providers.", "endpointAudioNote": "Transkrypcja audio (Deepgram, AssemblyAI).", - "endpointSpeechNote": "Generowanie mowy tekstowej (ElevenLabs, OpenAI TTS).", - "endpointEmbeddingsNote": "Generowanie osadzeń tekstu (OpenAI, Cohere, Voyage).", - "endpointImagesNote": "Generowanie obrazu (NanoBanana).", - "endpointRewriteChatNote": "Przepisz pomocnika dla klientów bez /v1.", - "endpointRewriteResponsesNote": "Przepisz pomocnika dla odpowiedzi bez /v1.", - "endpointRewriteModelsNote": "Przepisz pomocnika do wykrywania modelu bez /v1.", - "mgmtProxiesListNote": "List saved proxy registry items (supports pagination).", - "mgmtProxiesCreateNote": "Create a reusable proxy item in the registry.", - "mgmtProxiesHealthNote": "Get 24h/rolling health metrics per saved proxy from proxy logs.", - "mgmtProxiesBulkAssignNote": "Assign or clear one proxy across many scope IDs in one request.", - "mgmtAssignmentsListNote": "List proxy assignments by scope, scope_id, or proxy_id.", - "mgmtAssignmentsUpdateNote": "Assign or clear proxy for global/provider/account/combo scope.", - "mgmtLegacyMigrationNote": "Import legacy proxyConfig maps into registry assignments.", - "modelPrefixesDescriptionStart": "Użyj prefiksu dostawcy przed nazwą modelu, aby przekierować do określonego dostawcy. Przykład:", - "modelPrefixesDescriptionEnd": "trasy do GitHub Copilot.", - "provider": "Dostawca", - "type": "Wpisz", - "troubleshootingModelRouting": "Jeśli klientowi nie powiedzie się routing modelu, użyj jawnego dostawcy/modelu (na przykład: gh/gpt-5.1-codex).", - "troubleshootingAmbiguousModels": "Jeśli otrzymujesz niejednoznaczne błędy modelu, wybierz prefiks dostawcy zamiast samego identyfikatora modelu.", - "troubleshootingCodexFamily": "W przypadku modeli z rodziny GitHub Codex zachowaj model jako gh/codex-model; router wybiera opcję /odpowiada automatycznie.", - "troubleshootingTestConnection": "Użyj Panelu sterowania > Dostawcy > Testuj połączenie przed testowaniem z IDE lub klientów zewnętrznych.", - "troubleshootingCircuitBreaker": "Jeśli dostawca pokazuje, że wyłącznik jest otwarty, poczekaj na ochłodzenie lub sprawdź stronę Zdrowie, aby uzyskać szczegółowe informacje.", - "troubleshootingOAuth": "W przypadku dostawców OAuth należy ponownie uwierzytelnić, jeśli tokeny wygasną. Sprawdź wskaźnik stanu karty dostawcy.", - "endpointCompletionsNote": "Starszy punkt końcowy uzupełnień do generowania tekstu.", - "endpointModerationsNote": "Moderowanie treści i klasyfikacja bezpieczeństwa.", - "endpointRerankNote": "Ponowna klasyfikacja dokumentów w celu generowania wspomaganego wyszukiwaniem (Cohere, Jina).", - "endpointSearchNote": "Wyszukiwarka internetowa u 5 dostawców (Serper, Brave, Exa, Tavily, Perplexity).", - "endpointSearchAnalyticsNote": "Analityka i metryki dotyczące żądań wyszukiwania.", + "endpointSpeechNote": "Generowanie mowy (ElevenLabs, OpenAI TTS).", + "endpointEmbeddingsNote": "Generowanie embeddings tekstu (OpenAI, Cohere, Voyage).", + "endpointImagesNote": "Generowanie obrazów (NanoBanana).", + "endpointRewriteChatNote": "Pomocnik przepisywania dla klientów bez /v1.", + "endpointRewriteResponsesNote": "Pomocnik przepisywania dla Responses bez /v1.", + "endpointRewriteModelsNote": "Pomocnik przepisywania do wykrywania model bez /v1.", + "mgmtProxiesListNote": "Lista zapisanych pozycji rejestru proxy (obsługuje stronicowanie).", + "mgmtProxiesCreateNote": "Tworzenie pozycji proxy wielokrotnego użytku w rejestrze.", + "mgmtProxiesHealthNote": "Pobieranie 24-godzinnych/kroczących metryk zdrowia dla każdego zapisanego proxy z logów proxy.", + "mgmtProxiesBulkAssignNote": "Przypisanie lub wyczyszczenie jednego proxy dla wielu scope IDs w jednym żądaniu.", + "mgmtAssignmentsListNote": "Lista przypisań proxy według scope, scope_id lub proxy_id.", + "mgmtAssignmentsUpdateNote": "Przypisanie lub wyczyszczenie proxy dla zakresu global/provider/account/combo.", + "mgmtLegacyMigrationNote": "Import starych map proxyConfig do przypisań rejestru.", + "modelPrefixesDescriptionStart": "Użycie prefiksu provider przed nazwą model w celu skierowania ruchu do określonego provider. Przykład:", + "modelPrefixesDescriptionEnd": "kieruje do GitHub Copilot.", + "provider": "Provider", + "type": "Typ", + "troubleshootingModelRouting": "Jeśli klient zgłasza błąd z routingiem model, należy użyć jawnego provider/model (na przykład: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "W przypadku błędów o niejednoznacznych models należy wybrać prefiks provider zamiast samego model ID.", + "troubleshootingCodexFamily": "Dla models z rodziny GitHub Codex należy zachować model jako gh/codex-model; router automatycznie wybierze /responses.", + "troubleshootingTestConnection": "Użycie Dashboard > Providers > Test Connection przed testowaniem z poziomu IDE lub klientów zewnętrznych.", + "troubleshootingCircuitBreaker": "Jeśli provider wykazuje otwarty circuit breaker, należy odczekać czas schładzania (cooldown) lub sprawdzić stronę Health w celu uzyskania szczegółów.", + "troubleshootingOAuth": "W przypadku providers OAuth należy przeprowadzić ponowną autoryzację, jeśli wygasną tokens. Sprawdzić wskaźnik statusu na karcie provider.", + "endpointCompletionsNote": "Stary endpoint completions do generowania tekstu.", + "endpointModerationsNote": "Moderacja treści i klasyfikacja bezpieczeństwa.", + "endpointRerankNote": "Rerank dokumentów dla generowania wspomaganego wyszukiwaniem (Cohere, Jina).", + "endpointSearchNote": "Wyszukiwanie sieciowe z 5 providers (Serper, Brave, Exa, Tavily, Perplexity).", + "endpointSearchAnalyticsNote": "Analityka i metryki dla żądań wyszukiwania.", "endpointVideoNote": "Generowanie wideo (przepływy pracy ComfyUI, SD WebUI).", - "endpointMusicNote": "Generowanie muzyki za pomocą przepływów pracy ComfyUI.", - "endpointMessagesNote": "Punkt końcowy wiadomości antropicznych.", - "endpointCountTokensNote": "Zlicz tokeny dla danego ładunku komunikatu.", - "endpointFilesNote": "Przesyłanie plików dla wejść multimodalnych.", + "endpointMusicNote": "Generowanie muzyki przez przepływy pracy ComfyUI.", + "endpointMessagesNote": "Natywny dla Anthropic endpoint messages.", + "endpointCountTokensNote": "Zliczanie tokens dla danego ładunku wiadomości (payload).", + "endpointFilesNote": "Przesyłanie plików dla danych wejściowych multimodalnych.", "endpointBatchesNote": "Przetwarzanie wsadowe dla zbiorczych żądań API.", - "endpointWsNote": "Punkt końcowy WebSocket do przesyłania strumieniowego w czasie rzeczywistym.", - "mgmtProvidersListNote": "Lista wszystkich zarejestrowanych połączeń dostawców.", - "mgmtProvidersCreateNote": "Utwórz nowe połączenie dostawcy.", - "mgmtProvidersUpdateNote": "Zaktualizuj istniejące połączenie dostawcy.", - "mgmtProvidersDeleteNote": "Usuń połączenie dostawcy.", - "mgmtProvidersTestNote": "Przetestuj łączność i uwierzytelnianie u dostawcy.", - "mgmtProvidersModelsNote": "Lista dostępnych modeli dla konkretnego dostawcy.", - "mgmtSettingsGetNote": "Pobierz bieżące ustawienia aplikacji.", - "mgmtSettingsUpdateNote": "Zaktualizuj ustawienia aplikacji.", - "mgmtPayloadRulesGetNote": "Pobierz reguły transformacji ładunku.", - "mgmtPayloadRulesUpdateNote": "Zaktualizuj reguły transformacji ładunku.", + "endpointWsNote": "Endpoint WebSocket do strumieniowania w czasie rzeczywistym.", + "mgmtProvidersListNote": "Lista wszystkich zarejestrowanych połączeń provider.", + "mgmtProvidersCreateNote": "Tworzenie nowego połączenia provider.", + "mgmtProvidersUpdateNote": "Aktualizacja istniejącego połączenia provider.", + "mgmtProvidersDeleteNote": "Usuwanie połączenia provider.", + "mgmtProvidersTestNote": "Testowanie łączności i uwierzytelniania dla provider.", + "mgmtProvidersModelsNote": "Lista dostępnych models dla określonego provider.", + "mgmtSettingsGetNote": "Pobieranie aktualnych ustawień aplikacji.", + "mgmtSettingsUpdateNote": "Aktualizacja ustawień aplikacji.", + "mgmtPayloadRulesGetNote": "Reguły pobierania transformacji payload.", + "mgmtPayloadRulesUpdateNote": "Aktualizacja reguł transformacji payload.", "mcpToolsTitle": "Narzędzia MCP", - "mcpToolsDescription": "OmniRoute udostępnia narzędzia {count} za pośrednictwem protokołu Model Context Protocol w celu orkiestracji agentów.", - "mcpToolsCount": "{count} narzędzia", + "mcpToolsDescription": "OmniRoute udostępnia {count} narzędzi za pośrednictwem Model Context Protocol do orkiestracji agentów.", + "mcpToolsCount": "{count} narzędzi", "mcpToolsToc": "Narzędzia MCP", - "mcpToolsRoutingTitle": "Trasowanie i wykrywanie", - "mcpToolsRoutingDesc": "Kontrole stanu, zarządzanie kombinacjami, monitorowanie przydziałów, raportowanie kosztów i dostęp do katalogu modeli.", + "mcpToolsRoutingTitle": "Routing i wykrywanie", + "mcpToolsRoutingDesc": "Testy health check, zarządzanie combo, monitorowanie quota, raportowanie kosztów i dostęp do katalogu model.", "mcpToolsOperationsTitle": "Operacje i strategia", - "mcpToolsOperationsDesc": "Symulacja trasy, straże budżetowe, zmiana strategii, profile odporności i wskaźniki dostawców.", - "mcpToolsCacheTitle": "Zarządzanie pamięcią podręczną", - "mcpToolsCacheDesc": "Przeglądaj statystyki pamięci podręcznej i opróżniaj pamięci podręczne semantyczne lub sygnaturowe.", - "mcpToolsCompressionTitle": "Silniki kompresyjne", - "mcpToolsCompressionDesc": "Skonfiguruj kompresję RTK/Brotli, zamień silniki i sprawdź analizę kompresji według kombinacji.", - "mcpToolsOneProxyTitle": "1Proxy / Tunele", - "mcpToolsOneProxyDesc": "Zarządzaj wychodzącymi serwerami proxy, zmieniaj domowe adresy IP i sprawdzaj stan serwerów proxy.", + "mcpToolsOperationsDesc": "Symulacja tras, limity budżetowe, przełączanie strategii, profile odporności i metryki provider.", + "mcpToolsCacheTitle": "Zarządzanie cache", + "mcpToolsCacheDesc": "Wyświetlanie statystyk cache i czyszczenie cache semantycznego lub sygnatur.", + "mcpToolsCompressionTitle": "Silniki kompresji", + "mcpToolsCompressionDesc": "Konfiguracja kompresji RTK/Brotli, zmiana silników i inspekcja analityki kompresji według combo.", + "mcpToolsOneProxyTitle": "1Proxy / tunele", + "mcpToolsOneProxyDesc": "Zarządzanie proxy wychodzącymi, rotacja domowych adresów IP i sprawdzanie stanu proxy.", "mcpToolsMemoryTitle": "Pamięć", - "mcpToolsMemoryDesc": "Wyszukuj, dodawaj i usuwaj trwałe wpisy w pamięci konwersacyjnej.", + "mcpToolsMemoryDesc": "Wyszukiwanie, dodawanie i czyszczenie trwałych wpisów pamięci konwersacyjnej.", "mcpToolsSkillsTitle": "Umiejętności", - "mcpToolsSkillsDesc": "Wyświetlaj, włączaj, wykonuj i monitoruj niestandardowe wykonania umiejętności.", - "featureAutoComboTitle": "Automatyczne kombi", - "featureAutoComboText": "Automatycznie twórz zoptymalizowane kombinacje w oparciu o podłączonych dostawców, wzorce użytkowania i możliwości modelu.", - "featureSearchTitle": "Wyszukiwanie w Internecie", - "featureSearchText": "Zintegrowana wyszukiwarka internetowa z 5 dostawcami (Serper, Brave, Exa, Tavily, Perplexity), w tym analityka i śledzenie kosztów.", + "mcpToolsSkillsDesc": "Lista, włączanie, uruchamianie i monitorowanie niestandardowych uruchomień umiejętności.", + "featureAutoComboTitle": "Auto-Combo", + "featureAutoComboText": "Automatyczne tworzenie zoptymalizowanych combos na podstawie podłączonych providers, wzorców użycia i możliwości model.", + "featureSearchTitle": "Wyszukiwanie w sieci", + "featureSearchText": "Zintegrowane wyszukiwanie w sieci z 5 providers (Serper, Brave, Exa, Tavily, Perplexity), w tym analityka i śledzenie kosztów.", "featureMemoryTitle": "System pamięci", - "featureMemoryText": "Trwała pamięć konwersacyjna z ekstrakcją, wstrzykiwaniem, odzyskiwaniem i podsumowywaniem podczas sesji.", - "featureSkillsTitle": "Ramy umiejętności", - "featureSkillsText": "Rozszerzalny system umiejętności z wbudowanymi i niestandardowymi umiejętnościami, wykonywaniem w piaskownicy, przechwytywaniem żądań i wstrzykiwaniem kontekstu.", - "featureAcpTitle": "Komunikacja agenta", - "featureAcpText": "Rejestr protokołu komunikacji agenta (ACP) do zarządzania przepływami pracy między agentami i orkiestracją narzędzi.", - "protocolAcpTitle": "ACP (komunikacja z agentem)", - "protocolAcpDesc": "Rejestruj agentów i zarządzaj nimi za pośrednictwem rejestru ACP w celu komunikacji między agentami i udostępniania narzędzi.", - "protocolAcpStep1": "Przejdź do Panelu → Agenci, aby wyświetlić zarejestrowanych agentów ACP.", - "protocolAcpStep2": "Zarejestruj nowych agentów z możliwościami i konfiguracją punktu końcowego.", - "protocolAcpStep3": "Użyj narzędzi CLI, aby skonfigurować kanały komunikacji agenta." + "featureMemoryText": "Trwała pamięć konwersacyjna z ekstrakcją, wstrzykiwaniem, pobieraniem i podsumowywaniem między sesjami.", + "featureSkillsTitle": "Framework umiejętności", + "featureSkillsText": "Rozszerzalny system umiejętności z wbudowanymi i niestandardowymi umiejętnościami, uruchamianiem w piaskownicy (sandbox), przechwytywaniem żądań i wstrzykiwaniem kontekstu.", + "featureAcpTitle": "Komunikacja agentów", + "featureAcpText": "Rejestr Agent Communication Protocol (ACP) do zarządzania przepływami pracy między agentami i orkiestracji narzędzi.", + "protocolAcpTitle": "ACP (Komunikacja agentów)", + "protocolAcpDesc": "Rejestracja i zarządzanie agentami za pośrednictwem rejestru ACP w celu komunikacji między agentami i udostępniania narzędzi.", + "protocolAcpStep1": "Przejdź do Dashboard → Agenci, aby wyświetlić zarejestrowanych agentów ACP.", + "protocolAcpStep2": "Zarejestruj nowych agentów z możliwościami i konfiguracją endpoint.", + "protocolAcpStep3": "Użyj narzędzi CLI do konfiguracji kanałów komunikacji agentów." }, "legal": { "privacyPolicy": "Polityka prywatności", "termsOfService": "Warunki świadczenia usług", - "providerConfigurations": "Konfiguracje dostawców", + "providerConfigurations": "Konfiguracje providers", "apiKeys": "Klucze API", - "usageLogs": "Dzienniki użytkowania", + "usageLogs": "Logi użycia", "applicationSettings": "Ustawienia aplikacji", - "viewExportAnalytics": "Przeglądaj i eksportuj analizy użytkowania", - "clearHistory": "Wyczyść historię użytkowania w dowolnym momencie", - "configureRetention": "Skonfiguruj zasady przechowywania dzienników", - "backupRestore": "Utwórz kopię zapasową i przywróć bazę danych", + "viewExportAnalytics": "Wyświetlać i eksportować analitykę użycia", + "clearHistory": "Czyścić historię użycia w dowolnym momencie", + "configureRetention": "Konfigurować zasady retencji logów", + "backupRestore": "Tworzyć kopie zapasowe i przywracać bazę danych", "privacyMetadataTitle": "Polityka prywatności | OmniRoute", - "privacyMetadataDescription": "Polityka prywatności routera proxy OmniRoute AI API.", + "privacyMetadataDescription": "Polityka prywatności dla routera proxy AI API OmniRoute.", "termsMetadataTitle": "Warunki świadczenia usług | OmniRoute", - "termsMetadataDescription": "Warunki korzystania z routera proxy OmniRoute AI API.", - "backToHome": "Powrót do domu", + "termsMetadataDescription": "Warunki świadczenia usług dla routera proxy AI API OmniRoute.", + "backToHome": "Powrót do strony głównej", "lastUpdated": "Ostatnia aktualizacja: {date}", - "policyLastUpdatedDate": "13 lutego 2026 r", + "policyLastUpdatedDate": "13 lutego 2026", "listSeparator": "-", "questionsVisit": "Pytania? Odwiedź nasze", - "githubRepository": "Repozytorium GitHuba", - "privacySection1Title": "1. Architektura lokalna", - "privacySection1Text": "OmniRoute zaprojektowano jako aplikację działającą lokalnie. Całe przetwarzanie i przechowywanie danych odbywa się wyłącznie na Twoim komputerze. Nie ma scentralizowanego serwera gromadzącego Twoje dane.", - "privacySection2Title": "2. Dane, które przechowujemy", + "githubRepository": "repozytorium GitHub", + "privacySection1Title": "1. Architektura Local-First", + "privacySection1Text": "OmniRoute został zaprojektowany jako aplikacja local-first. Całe przetwarzanie i przechowywanie danych odbywa się całkowicie na tym urządzeniu. Scentralizowany serwer nie zbiera żadnych informacji.", + "privacySection2Title": "2. Przechowywane dane", "privacyDataStoredIn": "Następujące dane są przechowywane lokalnie w", - "privacyDataProviderConfigurationsDesc": "adresy URL połączeń, typy dostawców i ustawienia priorytetów", - "privacyDataApiKeysDesc": "szyfrowane i przechowywane lokalnie w celu uwierzytelniania u dostawców sztucznej inteligencji", - "privacyDataUsageLogsDesc": "liczba żądań, użycie tokena, nazwy modeli, znaczniki czasu i czasy odpowiedzi", - "privacyDataApplicationSettingsDesc": "preferencje tematyczne, strategia routingu i konfiguracje kombinacji", + "privacyDataProviderConfigurationsDesc": "adresy URL połączeń, typy providers i ustawienia priorytetów", + "privacyDataApiKeysDesc": "zaszyfrowane i przechowywane lokalnie w celu uwierzytelniania u providers AI", + "privacyDataUsageLogsDesc": "liczba żądań, użycie tokens, nazwy models, znaczniki czasu i czasy odpowiedzi", + "privacyDataApplicationSettingsDesc": "preferencje motywu, strategia routingu i konfiguracje combo", "privacySection3Title": "3. Brak telemetrii", - "privacySection3Text": "OmniRoute nie zbiera danych telemetrycznych, analiz ani raportów o awariach. Żadne dane nie są przesyłane do nas ani do osób trzecich. Twoje wzorce użytkowania, wywołania API i konfiguracje pozostają całkowicie prywatne.", + "privacySection3Text": "OmniRoute nie zbiera danych telemetrycznych, analitycznych ani raportów o błędach. Żadne dane nie są wysyłane do nas ani do żadnych stron trzecich. Wzorce użycia, zapytania API i konfiguracje pozostają całkowicie prywatne.", "privacySection4Title": "4. Zewnętrzni dostawcy AI", - "privacySection4Text": "Gdy wykonujesz wywołania API za pośrednictwem OmniRoute, Twoje żądania są przekazywane do skonfigurowanych dostawców AI (na przykład: OpenAI, Anthropic, Google). Dostawcy ci mają własne zasady ochrony prywatności, które regulują sposób postępowania z Twoimi danymi. Proszę przejrzeć:", + "privacySection4Text": "Podczas wykonywania połączeń API przez OmniRoute, żądania są przekazywane do skonfigurowanych providers AI (na przykład: OpenAI, Anthropic, Google). Ci providers mają własne polityki prywatności, które określają sposób przetwarzania danych. Prosimy o zapoznanie się z:", "privacyOpenAiPolicy": "Polityka prywatności OpenAI", - "privacyAnthropicPolicy": "Antropiczna polityka prywatności", + "privacyAnthropicPolicy": "Polityka prywatności Anthropic", "privacyGooglePolicy": "Polityka prywatności Google", "privacySection5Title": "5. Synchronizacja z chmurą (opcjonalnie)", - "privacySection5Text": "Jeśli włączysz opcjonalną funkcję synchronizacji z chmurą, konfiguracje dostawców i klucze API mogą zostać przesłane do skonfigurowanego punktu końcowego chmury. Ta funkcja jest domyślnie wyłączona i wymaga wyraźnej zgody.", - "privacySection6Title": "6. Rejestrowanie", - "privacyLoggingIntro": "Dzienniki żądań można skonfigurować w ustawieniach panelu kontrolnego. Możesz:", - "privacySection7Title": "7. Twoje prawa", - "privacySection7TextStart": "Ponieważ wszystkie dane są przechowywane lokalnie, masz pełną kontrolę. W każdej chwili możesz usunąć swoje dane usuwając plik", - "privacySection7TextEnd": "katalogu lub korzystając z funkcji tworzenia kopii zapasowych i przywracania bazy danych na pulpicie nawigacyjnym.", + "privacySection5Text": "W przypadku włączenia opcjonalnej funkcji synchronizacji z chmurą, konfiguracje providers i klucze API mogą być przesyłane do skonfigurowanego endpoint w chmurze. Funkcja ta jest domyślnie wyłączona i wymaga wyraźnej aktywacji.", + "privacySection6Title": "6. Logowanie", + "privacyLoggingIntro": "Logi żądań można skonfigurować w ustawieniach dashboard. Istnieje możliwość:", + "privacySection7Title": "7. Prawa użytkownika", + "privacySection7TextStart": "Ponieważ wszystkie dane są przechowywane lokalnie, użytkownik ma pełną kontrolę. Dane można usunąć w dowolnym momencie poprzez usunięcie", + "privacySection7TextEnd": "katalogu lub korzystając z funkcji tworzenia kopii zapasowych i przywracania bazy danych w dashboard.", "termsSection1Title": "1. Przegląd", - "termsSection1Text": "OmniRoute to lokalny router proxy AI API, który działa całkowicie na Twoim komputerze. Kieruje żądania do wielu dostawców AI z równoważeniem obciążenia, przełączaniem awaryjnym i śledzeniem użycia.", - "termsSection2Title": "2. Obowiązki użytkownika", - "termsResponsibilityApiKeys": "Ponosisz wyłączną odpowiedzialność za zarządzanie własnymi kluczami API i danymi uwierzytelniającymi dla zewnętrznych dostawców sztucznej inteligencji (OpenAI, Anthropic, Google itp.).", - "termsResponsibilityCompliance": "Musisz przestrzegać warunków świadczenia usług każdego dostawcy AI, do którego API uzyskujesz dostęp za pośrednictwem OmniRoute.", - "termsResponsibilitySecurity": "Jesteś odpowiedzialny za bezpieczeństwo swojej lokalnej instalacji OmniRoute, w tym za ustawienie hasła i ograniczenie dostępu do sieci.", + "termsSection1Text": "OmniRoute to lokalny (local-first) router proxy AI API, który działa całkowicie na tym urządzeniu. Kieruje żądania do wielu providers AI przy użyciu równoważenia obciążenia (load balancing), failover oraz śledzenia użycia.", + "termsSection2Title": "2. Odpowiedzialność użytkownika", + "termsResponsibilityApiKeys": "Użytkownik ponosi wyłączną odpowiedzialność za zarządzanie własnymi kluczami API i poświadczeniami dla zewnętrznych providers AI (OpenAI, Anthropic, Google itp.).", + "termsResponsibilityCompliance": "Należy przestrzegać warunków świadczenia usług każdego provider AI, do którego API uzyskuje się dostęp za pośrednictwem OmniRoute.", + "termsResponsibilitySecurity": "Użytkownik jest odpowiedzialny za bezpieczeństwo lokalnej instalacji OmniRoute, w tym za ustawienie hasła i ograniczenie dostępu do sieci.", "termsSection3Title": "3. Jak to działa", - "termsSection3Text": "OmniRoute działa jako pośrednik proxy. Wywołania API wysyłane do OmniRoute są tłumaczone i przekazywane do skonfigurowanych dostawców AI. OmniRoute nie modyfikuje treści Twoich żądań ani odpowiedzi poza niezbędnym tłumaczeniem protokołu.", + "termsSection3Text": "OmniRoute działa jako pośredniczące proxy. Połączenia API wysyłane do OmniRoute są tłumaczone i przekazywane do skonfigurowanych providers AI. OmniRoute nie modyfikuje treści żądań ani odpowiedzi poza niezbędnym tłumaczeniem protokołu.", "termsSection4Title": "4. Przetwarzanie danych", - "termsDataStoredLocally": "Wszystkie dane są przechowywane lokalnie na Twoim komputerze w bazie danych SQLite.", - "termsNoTransmission": "OmniRoute nie przesyła żadnych danych do serwerów zewnętrznych, chyba że wyraźnie włączysz funkcje synchronizacji w chmurze.", - "termsDataLocationText": "Dzienniki użytkowania, klucze API i konfiguracja są przechowywane w", - "termsSection5Title": "5. Zastrzeżenie", - "termsSection5Text": "Usługa OmniRoute jest dostarczana w stanie takim, w jakim jest, bez jakiejkolwiek gwarancji. Nie ponosimy odpowiedzialności za jakiekolwiek koszty powstałe w wyniku korzystania z API, zakłóceń w świadczeniu usług lub utraty danych. Zawsze twórz kopie zapasowe swojej konfiguracji.", - "termsSection6Title": "6. Otwarte źródło", - "termsSection6Text": "OmniRoute jest oprogramowaniem typu open source. Możesz go przeglądać, modyfikować i rozpowszechniać zgodnie z warunkami licencji." + "termsDataStoredLocally": "Wszystkie dane są przechowywane lokalnie na urządzeniu w bazie danych SQLite.", + "termsNoTransmission": "OmniRoute nie przesyła żadnych danych do zewnętrznych serwerów, chyba że użytkownik jawnie włączy funkcje cloud sync.", + "termsDataLocationText": "Logi użycia, klucze API i konfiguracja są przechowywane w", + "termsSection5Title": "5. Wyłączenie odpowiedzialności", + "termsSection5Text": "Oprogramowanie OmniRoute jest dostarczane w stanie „takim, jakim jest” („as is”), bez jakichkolwiek gwarancji. Nie ponosimy odpowiedzialności za jakiekolwiek koszty poniesione w wyniku korzystania z API, przerw w świadczeniu usług ani utraty danych. Należy zawsze dbać o kopie zapasowe konfiguracji.", + "termsSection6Title": "6. Open Source", + "termsSection6Text": "OmniRoute to oprogramowanie open-source. Użytkownik może je swobodnie badać, modyfikować i rozpowszechniać na warunkach określonych w jego licencji." }, "agents": { - "title": "CLI Agents", - "description": "Discover installed CLI agents on your system. Add custom agents for auto-detection.", - "refresh": "Refresh", - "installed": "Installed", - "notFound": "Not Found", - "builtIn": "Built-in", - "custom": "Custom", - "remove": "Remove", - "addCustomAgent": "Add Custom Agent", - "addCustomAgentDesc": "Register any CLI tool for detection. It will be scanned automatically on refresh.", - "agentName": "Agent Name", - "binaryName": "Binary Name", - "versionCommand": "Version Command", + "title": "Agenci CLI", + "description": "Wykrywanie zainstalowanych CLI agents w systemie. Możliwość dodawania własnych agentów do automatycznego wykrywania.", + "refresh": "Odśwież", + "installed": "Zainstalowane", + "notFound": "Nie znaleziono", + "builtIn": "Wbudowane", + "custom": "Własne", + "remove": "Usuń", + "addCustomAgent": "Dodaj własnego agenta", + "addCustomAgentDesc": "Zarejestruj dowolne narzędzie CLI w celu wykrywania. Zostanie ono automatycznie przeskanowane po odświeżeniu.", + "agentName": "Nazwa agenta", + "binaryName": "Nazwa pliku binarnego", + "versionCommand": "Polecenie wersji", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent", - "scanning": "Scanning system for CLI agents...", - "opencodeIntegration": "OpenCode Integration", - "opencodeDetected": "opencode {version} detected", - "opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.", - "downloadConfig": "Download {file}", - "downloaded": "Downloaded!", - "setupGuideTitle": "Setup guide", - "openCliTools": "Open CLI Tools", - "setupGuideDetectCliTitle": "Detect installed CLIs", - "setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.", - "setupGuideCustomAgentTitle": "Register custom binary", - "setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.", - "setupGuideCommandMissingTitle": "Fix 'command not found'", - "setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh.", - "cliToolsRedirectTitle": "Cli Tools Redirect Title", - "cliToolsRedirectDesc": "Cli Tools Redirect Desc", - "spawnArgsPlaceholder": "Spawn Args Placeholder", - "binaryNamePlaceholder": "Binary Name Placeholder", - "versionCommandPlaceholder": "Version Command Placeholder", - "architectureTitle": "Architecture Title", - "flowLocalBinary": "Flow Local Binary", - "flowOmniRoute": "Flow Omni Route", - "agentNamePlaceholder": "Agent Name Placeholder", - "architectureDescription": "Architecture Description", - "flowExecute": "Flow Execute", - "flowSpawn": "Flow Spawn", - "cliToolsRedirectCta": "Cli Tools Redirect Cta", - "comparisonTitle": "Narzędzia CLI a cele agentów — jaka jest różnica?", - "comparisonCliToolsLabel": "Strona narzędzi CLI", - "comparisonCliToolsTitle": "Twoje IDE wysyła żądania poprzez OmniRoute", - "comparisonCliToolsDesc": "Skonfiguruj Claude Code, Codex, Cursor i inne IDE, aby używać OmniRoute jako podstawowego adresu URL interfejsu API. OmniRoute działa jako serwer proxy, kierując żądania do skonfigurowanych dostawców.", - "comparisonAgentsLabel": "Ta strona (Cele agenta)", + "addAgent": "Dodaj agenta", + "scanning": "Skanowanie systemu w poszukiwaniu CLI agents...", + "opencodeIntegration": "Integracja OpenCode", + "opencodeDetected": "Wykryto opencode {version}", + "opencodeDesc": "Generuje gotowy do użycia plik {configFile} z bazowym URL OmniRoute oraz wszystkimi dostępnymi models — umieść go w głównym katalogu projektu i uruchom {command}.", + "downloadConfig": "Pobierz {file}", + "downloaded": "Pobrano!", + "setupGuideTitle": "Instrukcja konfiguracji", + "openCliTools": "Otwórz narzędzia CLI", + "setupGuideDetectCliTitle": "Wykrywanie zainstalowanych CLI", + "setupGuideDetectCliDesc": "Kliknij Odśwież po zainstalowaniu lub zaktualizowaniu CLI, aby OmniRoute mógł ponownie przeskanować pliki binarne i wersje.", + "setupGuideCustomAgentTitle": "Rejestracja własnego pliku binarnego", + "setupGuideCustomAgentDesc": "Użyj Dodaj własnego agenta, gdy CLI nie znajduje się na wbudowanej liście. Podaj nazwę pliku binarnego i polecenie wersji.", + "setupGuideCommandMissingTitle": "Napraw błąd 'command not found'", + "setupGuideCommandMissingDesc": "Upewnij się, że polecenie CLI istnieje w PATH, otwórz nową sesję terminala i ponownie kliknij Odśwież.", + "cliToolsRedirectTitle": "Chcesz skonfigurować swoje IDE?", + "cliToolsRedirectDesc": "Aby skierować Claude Code, Cursor, Codex lub dowolne inne IDE na OmniRoute jako proxy, przejdź do Narzędzia CLI. Ta strona służy do odwrotnego celu — używania lokalnych plików binarnych CLI jako celów wykonania, które OmniRoute może uruchamiać (spawn) i przesyłać przez nie żądania.", + "spawnArgsPlaceholder": "np. --quiet, --json, --no-auto-commits", + "binaryNamePlaceholder": "np. my-agent lub /usr/local/bin/llm-cli", + "versionCommandPlaceholder": "np. my-agent --version", + "architectureTitle": "Jak działają agenci jako cele (Agent Targets)", + "flowLocalBinary": "3 · Proces CLI z własnym uwierzytelnianiem", + "flowOmniRoute": "1 · Żądanie dociera do OmniRoute", + "agentNamePlaceholder": "np. Mój własny agent", + "architectureDescription": "Gdy żądanie dociera do OmniRoute, system może uruchomić lokalny plik binarny CLI (np. claude, codex, goose) i przekierować przez niego żądanie. CLI przetwarza żądanie przy użyciu własnych poświadczeń i zwraca wynik za pośrednictwem OmniRoute.", + "flowExecute": "4 · Odpowiedź jest zwracana do klienta", + "flowSpawn": "2 · OmniRoute uruchamia lokalny plik binarny", + "cliToolsRedirectCta": "Przejdź do CLI Tools →", + "comparisonTitle": "CLI Tools vs Agent Targets — jaka jest różnica?", + "comparisonCliToolsLabel": "Strona CLI Tools", + "comparisonCliToolsTitle": "Twoje IDE wysyła żądania przez OmniRoute", + "comparisonCliToolsDesc": "Skonfiguruj Claude Code, Codex, Cursor i inne IDE, aby używały OmniRoute jako bazowego URL API. OmniRoute działa jako proxy, kierując żądania do skonfigurowanych providers.", + "comparisonAgentsLabel": "Ta strona (Agent Targets)", "comparisonAgentsTitle": "OmniRoute wysyła żądania do lokalnych narzędzi CLI", - "comparisonAgentsDesc": "OmniRoute może tworzyć lokalne pliki binarne CLI (claude, codex, goose) jako backendy wykonawcze. Narzędzie CLI przetwarza żądanie przy użyciu własnego uwierzytelnienia i zwraca wynik.", - "comparisonSummary": "W skrócie: Narzędzia CLI = konfigurujesz narzędzia tak, aby wskazywały na OmniRoute. Cele agentów = OmniRoute używa narzędzi jako punktów końcowych.", - "agentUseCaseHint": "Może być używany jako cel wykonania poprzez protokół ACP", + "comparisonAgentsDesc": "OmniRoute może uruchamiać lokalne pliki binarne CLI (claude, codex, goose) jako backendy wykonawcze. Narzędzie CLI przetwarza żądanie przy użyciu własnego uwierzytelniania i zwraca wynik.", + "comparisonSummary": "W skrócie: CLI Tools = konfigurujesz narzędzia, aby wskazywały na OmniRoute. Agent Targets = OmniRoute używa narzędzi jako swoich endpoints.", + "agentUseCaseHint": "Może być używany jako cel wykonania (execution target) za pośrednictwem protokołu ACP", "flowDiagramClient": "Aplikacja kliencka", "flowDiagramClientDesc": "SDK, API lub usługa nadrzędna", "flowDiagramOmniRoute": "OmniRoute", "flowDiagramOmniRouteDesc": "Odbiera żądanie i wybiera cel", - "flowDiagramSpawn": "Proces spawnowania", + "flowDiagramSpawn": "Uruchomienie procesu", "flowDiagramSpawnDesc": "Uruchamia plik binarny CLI przez stdio", "flowDiagramCli": "Agent CLI", - "flowDiagramCliDesc": "Procesy z własnym autoryzacją/modelem", - "fingerprintSettingsHint": "Dopasowanie odcisków palców CLI (ukrywanie żądań jako określonych narzędzi CLI) można skonfigurować w", - "settingsRoutingLink": "Ustawienia/Trasowanie", - "openSettings": "Ustawienia", - "copyRawUrlTitle": "Skopiuj surowy adres URL do schowka", + "flowDiagramCliDesc": "Przetwarza z użyciem własnego uwierzytelniania i model", + "fingerprintSettingsHint": "Dopasowywanie odcisków palców CLI (CLI Fingerprint) w celu maskowania żądań jako określone narzędzia CLI można skonfigurować w", + "settingsRoutingLink": "Settings/Routing", + "openSettings": "Settings", + "copyRawUrlTitle": "Kopiuj czysty URL do schowka", "copied": "Skopiowano!", - "copyUrl": "Skopiuj adres URL", + "copyUrl": "Kopiuj URL", "startHere": "Zacznij tutaj", - "badgeNew": "Nowy", - "viewOnGithub": "Zobacz na GitHubie", - "howToUse": "Jak używać", - "browseAllSkillsOnGithub": "Przeglądaj wszystkie umiejętności w GitHub", - "apiSkills": "Umiejętności API", - "cliSkills": "Umiejętności CLI", - "apiSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via REST / HTTP", - "cliSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via the omniroute terminal binary", - "howToUseStep1": "__MISSING__:Click {copyUrl} on the skill you want your agent to know about.", - "howToUseStep2": "__MISSING__:In your AI agent (Claude, Cursor, Cline…), say:", - "howToUseStep2Code": "__MISSING__:Use the skill at [pasted-url]", - "howToUseStep3": "__MISSING__:The agent fetches the SKILL.md and learns OmniRoute's API or CLI — no manual docs needed." + "badgeNew": "Nowość", + "viewOnGithub": "Zobacz na GitHub", + "howToUse": "Sposób użycia", + "browseAllSkillsOnGithub": "Przeglądaj wszystkie skills na GitHub", + "apiSkills": "API Skills", + "cliSkills": "CLI Skills", + "apiSkillsSubtitle": "{count} skills — steruj OmniRoute przez REST / HTTP", + "cliSkillsSubtitle": "{count} skills — steruj OmniRoute przez plik binarny terminala omniroute", + "howToUseStep1": "Kliknij {copyUrl} przy skill, o którym ma dowiedzieć się agent.", + "howToUseStep2": "W agencie AI (Claude, Cursor, Cline…) powiedz:", + "howToUseStep2Code": "Użyj skill pod adresem [pasted-url]", + "howToUseStep3": "Agent pobierze plik SKILL.md i zapozna się z API lub CLI OmniRoute — bez konieczności ręcznego czytania dokumentacji." }, "cloudAgents": { - "title": "Agenci w chmurze", - "description": "Zarządzaj autonomicznymi agentami kodującymi (Jules, Devin, Codex Cloud)", - "loading": "Ładuję zadania...", - "aboutTitle": "Informacje o agentach w chmurze", - "aboutDescription": "Agenci w chmurze to zdalni asystenci kodowania AI, którzy mogą wykonywać zadania autonomicznie. Działają inaczej niż lokalni agenci CLI — wchodzisz z nimi w interakcję poprzez API OmniRoute.", + "title": "Cloud Agents", + "description": "Zarządzanie autonomicznymi agentami kodującymi (Jules, Devin, Codex Cloud)", + "loading": "Ładowanie zadań...", + "aboutTitle": "O Cloud Agents", + "aboutDescription": "Cloud agents to zdalni asystenci kodowania AI, którzy mogą wykonywać zadania autonomicznie. Działają inaczej niż lokalni agenci CLI – interakcja z nimi odbywa się przez API OmniRoute.", "howItWorksTitle": "Jak to działa:", - "howItWorksDesc": "Utwórz zadanie → Agent analizuje i proponuje plan → Ty zatwierdzasz → Agent wykonuje → Zwracane są wyniki", + "howItWorksDesc": "Utworzenie zadania → Agent analizuje i proponuje plan → Zatwierdzenie planu → Agent wykonuje zadanie → Zwrot wyników", "newTaskTitle": "Utwórz nowe zadanie", - "newTaskDescription": "Rozpocznij nowe zadanie z agentem w chmurze", - "selectAgent": "Wybierz Agenta", + "newTaskDescription": "Uruchomienie nowego zadania z Cloud Agent", + "selectAgent": "Wybierz agenta", "taskDescription": "Opis zadania", - "taskDescriptionPlaceholder": "Opisz, co chcesz, aby agent zrobił...", - "startTask": "Rozpocznij zadanie", + "taskDescriptionPlaceholder": "Opisz, co agent ma zrobić...", + "startTask": "Uruchom zadanie", "tasks": "Zadania", "taskDetail": "Szczegóły zadania", - "noTasks": "Nie ma jeszcze żadnych zadań. Utwórz go, aby rozpocząć.", - "noTasksTitle": "__MISSING__:No tasks yet", - "noTasksDesc": "__MISSING__:Create your first task to get started.", - "tasksTab": "__MISSING__:Tasks", - "agentsTab": "__MISSING__:Agents", - "settingsTab": "__MISSING__:Settings", - "agentsEnabled": "__MISSING__:Enabled", - "agentsDisabled": "__MISSING__:Disabled", - "filterAllProviders": "__MISSING__:All Providers", - "filterAll": "__MISSING__:All", - "autoRefreshing": "__MISSING__:Auto-refreshing", - "viewPR": "__MISSING__:View Pull Request", - "connected": "__MISSING__:Connected", - "notConnected": "__MISSING__:Not connected", - "configure": "__MISSING__:Configure", - "settingsTitle": "__MISSING__:Cloud Agent Settings", - "settingsDesc": "__MISSING__:Configure local preferences for cloud agents.", - "settingEnableAgents": "__MISSING__:Enable cloud agents", - "settingEnableAgentsDesc": "__MISSING__:Allow OmniRoute to orchestrate autonomous coding agents.", - "settingAutoPR": "__MISSING__:Auto-create PR", - "settingAutoPRDesc": "__MISSING__:When a task is completed, automatically create a Pull Request with the changes.", - "settingRequireApproval": "__MISSING__:Require plan approval", - "settingRequireApprovalDesc": "__MISSING__:Always wait for manual approval before an agent executes a proposed plan.", - "untitledTask": "Zadanie bez tytułu", + "noTasks": "Brak zadań. Utwórz zadanie, aby rozpocząć.", + "noTasksTitle": "Brak zadań", + "noTasksDesc": "Utwórz pierwsze zadanie, aby rozpocząć.", + "tasksTab": "Zadania", + "agentsTab": "Agenci", + "settingsTab": "Ustawienia", + "agentsEnabled": "Włączone", + "agentsDisabled": "Wyłączone", + "filterAllProviders": "Wszystkie providers", + "filterAll": "Wszystkie", + "autoRefreshing": "Automatyczne odświeżanie", + "viewPR": "Pokaż Pull Request", + "connected": "Połączono", + "notConnected": "Nie połączono", + "configure": "Konfiguruj", + "settingsTitle": "Ustawienia Cloud Agent", + "settingsDesc": "Konfiguracja lokalnych preferencji dla Cloud Agents.", + "settingEnableAgents": "Włącz Cloud Agents", + "settingEnableAgentsDesc": "Zezwalaj OmniRoute na orkiestrację autonomicznych agentów kodujących.", + "settingAutoPR": "Automatyczne tworzenie PR", + "settingAutoPRDesc": "Po zakończeniu zadania automatycznie utwórz Pull Request ze zmianami.", + "settingRequireApproval": "Wymagaj zatwierdzenia planu", + "settingRequireApprovalDesc": "Zawsze czekaj na ręczne zatwierdzenie przed wykonaniem proponowanego planu przez agenta.", + "untitledTask": "Zadanie bez nazwy", "created": "Utworzono", - "conversation": "Rozmowa", + "conversation": "Konwersacja", "result": "Wynik", "error": "Błąd", "planReady": "Plan gotowy do zatwierdzenia", @@ -7488,677 +7735,719 @@ "delete": "Usuń", "selectTaskPrompt": "Wybierz zadanie, aby wyświetlić szczegóły", "statusPending": "Oczekujące", - "statusRunning": "Bieganie", + "statusRunning": "W toku", "statusWaitingApproval": "Oczekiwanie na zatwierdzenie", - "statusCompleted": "Ukończono", - "statusFailed": "Nie udało się", - "statusCancelled": "Anulowano", + "statusCompleted": "Zakończone", + "statusFailed": "Niepowodzenie", + "statusCancelled": "Anulowane", "repositoryName": "Nazwa repozytorium", - "repositoryUrl": "Adres URL repozytorium", - "branch": "Oddział" + "repositoryUrl": "URL repozytorium", + "branch": "Gałąź" }, "templateNames": { - "simple-chat": "Simple Chat", + "simple-chat": "Prosty czat", "streaming": "Streaming", "system-prompt": "System Prompt", "thinking": "Thinking", "tool-calling": "Tool Calling", "multi-turn": "Multi-turn", - "vision": "Wizja", - "schema-coercion": "Przymus schematu" + "vision": "Vision", + "schema-coercion": "Wymuszanie schematu" }, "templateDescriptions": { - "simple-chat": "Basic chat template", - "streaming": "Streaming template", - "system-prompt": "System prompt template", - "thinking": "Thinking template", - "tool-calling": "Tool calling template", - "multi-turn": "Multi-turn template", + "simple-chat": "Podstawowy szablon czatu z wiadomością systemową", + "streaming": "Szablon dla odpowiedzi typu streaming", + "system-prompt": "Szablon z własnym System Prompt", + "thinking": "Szablon z budżetem na reasoning/thinking", + "tool-calling": "Szablon do wywoływania narzędzi/funkcji (Tool Calling)", + "multi-turn": "Szablon do konwersacji wieloturowych (Multi-turn)", "vision": "Szablon multimodalny z wejściem obrazu", - "schema-coercion": "Wymuszanie strukturalnych danych wyjściowych/JSON" + "schema-coercion": "Wymuszanie strukturyzowanego wyjścia / schematu JSON" }, "templatePayloads": { "simpleChat": { "system": "Jesteś pomocnym asystentem AI.", - "userGreeting": "Witam! Jak mogę Ci dzisiaj pomóc?" + "userGreeting": "Witaj! W czym można dzisiaj pomóc?" }, "streaming": { "prompt": "Napisz opowiadanie o" }, "systemPrompt": { "question": "Jaki jest sens życia?", - "systemInstruction": "Podaj przemyślaną, filozoficzną odpowiedź." + "systemInstruction": "Przedstaw przemyślaną, filozoficzną odpowiedź." }, "thinking": { - "question": "Wyjaśnij obliczenia kwantowe" + "question": "Wyjaśnij komputery kwantowe" }, "toolCalling": { - "cityNameDescription": "Nazwa miasta, dla którego chcesz uzyskać pogodę", - "toolDescription": "Uzyskaj aktualną pogodę dla danej lokalizacji", + "cityNameDescription": "Nazwa miasta, dla którego ma zostać pobrana pogoda", + "toolDescription": "Pobieranie aktualnej pogody dla lokalizacji", "userWeather": "Jaka jest pogoda w Tokio?" }, "multiTurn": { "system": "Jesteś pomocnym asystentem.", - "assistantExample": "Chętnie Ci w tym pomogę.", - "userInitial": "Potrzebuję pomocy", - "userFollowUp": "Możesz to rozwinąć?" + "assistantExample": "Chętnie w tym pomogę.", + "userInitial": "Potrzebuję pomocy z", + "userFollowUp": "Czy możesz to rozwinąć?" } }, "cache": { - "title": "Cache Management", - "description": "Monitor and manage semantic response cache, hit rates, and token savings.", - "refresh": "Refresh", - "clearAll": "Clear All", - "memoryEntries": "Memory Entries", - "memoryEntriesSub": "In-memory LRU", - "dbEntries": "DB Entries", - "dbEntriesSub": "Persisted (SQLite)", - "cacheHits": "Cache Hits", - "cacheHitsSub": "of {total} total", - "tokensSaved": "Tokens Saved", - "tokensSavedSub": "Estimated from hits", + "title": "Zarządzanie cache", + "description": "Monitorowanie wydajności prompt cache u provider oraz lokalnego ponownego użycia semantycznego.", + "refresh": "Odśwież", + "clearAll": "Wyczyść cache semantyczny", + "memoryEntries": "Wpisy w pamięci", + "memoryEntriesSub": "LRU w pamięci", + "dbEntries": "Wpisy w bazie danych", + "dbEntriesSub": "Trwałe (SQLite)", + "cacheHits": "Trafienia cache", + "cacheHitsSub": "z {total} łącznie", + "tokensSaved": "Zaoszczędzone tokens", + "tokensSavedSub": "Szacowane na podstawie trafień", "hitRate": "Hit Rate", - "performance": "Cache Performance", - "autoRefresh": "Auto-refreshes every {seconds}s", - "hits": "Hits", - "misses": "Misses", - "total": "Total", - "behavior": "Cache Behavior", - "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.", - "behaviorBypass": "Bypass with header {header}.", - "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).", - "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.", - "idempotency": "Idempotency Layer", - "activeDedupKeys": "Active Dedup Keys", - "dedupWindow": "Dedup Window", - "clearSuccess": "Cache cleared. {count} expired entries removed.", - "clearError": "Failed to clear cache.", - "unavailable": "Cache unavailable", - "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.", - "loadingCacheAria": "__MISSING__:Loading cache", - "promptCache": "Prompt Cache (Provider-Side)", - "semanticCache": "Semantic Cache", - "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.", - "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.", - "cachedRequests": "Cached Requests", - "cachedRequests24h": "Cached Requests (24h)", - "cacheHitRate": "Cache Hit Rate", - "cacheRate": "Cache Rate", - "cacheRateDesc": "of total requests", - "cachedTokens": "Cached Tokens", - "cacheCreationTokens": "Cache Creation Tokens", - "cacheMetrics": "Prompt Cache Metrics", - "withCacheControl": "With Cache Control", - "cachedTokensRead": "Cached Tokens (Read)", - "cacheCreationWrite": "Cache Creation (Write)", - "cacheReuseRatio": "Cache Reuse Ratio", - "cacheReuseRatioDesc": "Cached tokens / Total input tokens", - "estCostSaved": "Est. Cost Saved", - "lastUpdated": "Last updated", - "hoursTracked": "hours tracked", - "busiestHour": "Busiest Hour", - "peakCacheRate": "Peak Cache Rate", - "trendHour": "Hour", - "activityVolume": "Activity", + "performance": "Wydajność cache", + "autoRefresh": "Automatyczne odświeżanie co {seconds}s", + "hits": "Trafienia", + "misses": "Nietrafienia", + "total": "Razem", + "behavior": "Zachowanie cache", + "behaviorDeterministic": "Cache'owane są tylko żądania bez streamingu z wartością temperature=0.", + "behaviorBypass": "Ominięcie za pomocą nagłówka {header}.", + "behaviorTwoTier": "Dwupoziomowe przechowywanie: LRU w pamięci (szybkie) + SQLite (trwałe między restartami).", + "behaviorTtl": "Domyślny TTL: 30 minut. Konfiguracja przez {envVar}.", + "idempotency": "Warstwa idempotencji", + "activeDedupKeys": "Aktywne klucze dedup", + "dedupWindow": "Okno dedup", + "clearSuccess": "Wyczyszczono cache semantyczny. Usunięto {count} wpisów.", + "clearError": "Nie udało się wyczyścić cache.", + "unavailable": "Cache niedostępny", + "unavailableDesc": "Nie udało się pobrać statystyk cache. Upewnij się, że serwer działa.", + "loadingCacheAria": "Ładowanie cache", + "promptCache": "Prompt cache (po stronie provider)", + "semanticCache": "Cache semantyczny", + "promptCacheSectionDesc": "Pokazuje aktywność prompt cache po stronie provider na podstawie historii użycia, umożliwiając sprawdzenie, gdzie kontrola cache jest aktywna oraz jak duże jest ponowne użycie danych wejściowych.", + "promptTrendDesc": "Godzinowy wolumen żądań, pokrycie cache oraz wolumen odczytu z cache w ciągu ostatnich 24 godzin.", + "cachedRequests": "Żądania z cache", + "cachedRequests24h": "Żądania z cache (24h)", + "cacheHitRate": "Wskaźnik trafień cache", + "cacheRate": "Wskaźnik cache", + "cacheRateDesc": "ze wszystkich żądań", + "cachedTokens": "Tokens odczytane z cache", + "cacheCreationTokens": "Tokens zapisane w cache", + "cacheMetrics": "Metryki prompt cache", + "withCacheControl": "Z kontrolą cache (Cache Control)", + "cachedTokensRead": "Odczytano z cache", + "cacheCreationWrite": "Zapisano do cache", + "cacheReuseRatio": "Współczynnik ponownego użycia cache (Cache Reuse Ratio)", + "cacheReuseRatioDesc": "Tokens odczytane z cache / Wszystkie wejściowe tokens", + "estCostSaved": "Szacowane zaoszczędzone koszty", + "lastUpdated": "Ostatnia aktualizacja", + "hoursTracked": "śledzone godziny", + "busiestHour": "Godzina szczytu", + "peakCacheRate": "Szczytowy wskaźnik cache", + "trendHour": "Godzina", + "activityVolume": "Aktywność", "requestsShort": "reqs", - "inputShort": "In", - "cachedShort": "Cached", - "writeShort": "Write", - "resetting": "Resetting...", - "resetMetrics": "Reset Metrics", - "byProvider": "Breakdown by Provider", - "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.", + "inputShort": "Wej.", + "cachedShort": "Zacache'owane", + "writeShort": "Zapis", + "resetting": "Resetowanie...", + "resetMetrics": "Resetuj metryki", + "byProvider": "Podział według provider", + "providerCacheRateDesc": "Każdy provider udostępnia łączną liczbę wejściowych tokens, tokens odczytanych z cache oraz tokens zapisanych w cache, co pozwala zweryfikować współczynnik ponownego użycia z surowymi sumami.", "provider": "Provider", - "requests": "Requests", - "inputTokens": "Input Tokens", - "cachedTokensCol": "Cached", - "cacheCreation": "Creation", - "trend24h": "Cache Trend (24h)", - "peakCached": "Peak cached", - "cached": "Cached", - "overview": "Overview", - "tableProvider": "__MISSING__:Provider", - "tableModel": "__MISSING__:Model", - "performanceTitle": "__MISSING__:Performance", - "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.", - "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.", - "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.", - "searchEntries": "Search entries...", - "search": "Search", - "loading": "Loading...", - "entriesLoadError": "Failed to load semantic cache entries.", - "noEntries": "No cache entries found", - "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.", - "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.", - "signature": "Signature", + "requests": "Żądania", + "inputTokens": "Wszystkie wejściowe tokens", + "cachedTokensCol": "Odczyt z cache", + "cacheCreation": "Zapis do cache", + "trend24h": "Trend cache (24h)", + "peakCached": "Szczyt zacache'owanych", + "cached": "Zacache'owane", + "overview": "Przegląd", + "tableProvider": "Provider", + "tableModel": "Model", + "performanceTitle": "Wydajność", + "semanticCacheSectionDesc": "Własny deterministyczny cache odpowiedzi OmniRoute. Gdy jest włączony, powtarzające się żądania bez streamingu z temperature=0 mogą być obsługiwane lokalnie, bez odpytywania zewnętrznego provider.", + "semanticCacheDisabledDesc": "Cache semantyczny jest wyłączony. OmniRoute pominie lokalne ponowne użycie odpowiedzi, dopóki nie zostanie ono włączone w Ustawieniach.", + "semanticEntriesDesc": "Trwałe rekordy cache semantycznego aktualnie przechowywane w SQLite. Aktywność prompt cache po stronie provider nie jest tutaj wymieniona.", + "searchEntries": "Szukaj wpisów...", + "search": "Szukaj", + "loading": "Ładowanie...", + "entriesLoadError": "Nie udało się załadować wpisów cache semantycznego.", + "noEntries": "Nie znaleziono wpisów cache", + "noPromptCacheData": "Nie zarejestrowano jeszcze aktywności prompt cache po stronie provider.", + "noTrendData": "Nie zarejestrowano aktywności prompt cache w ciągu ostatnich 24 godzin.", + "signature": "Sygnatura", "model": "Model", - "created": "Created", - "expires": "Expires", - "actions": "Actions", - "deduplicatedRequests": "Deduplicated Requests", - "savedCalls": "Saved API Calls", - "totalProcessed": "Total Requests Processed", - "disabled": "Disabled", - "totalRequests": "Total Requests", - "reasoningCache": "Powtórka rozumowania", - "reasoningCacheDesc": "Zachowuje myślenie modelowe dla wieloobrotowych przepływów wywoływania narzędzi", + "created": "Utworzono", + "expires": "Wygasa", + "actions": "Akcje", + "deduplicatedRequests": "Żądania po dedup", + "savedCalls": "Zaoszczędzone wywołania API", + "totalProcessed": "Wszystkie przetworzone żądania", + "disabled": "Wyłączone", + "totalRequests": "Wszystkie żądania", + "reasoningCache": "Reasoning Replay", + "reasoningCacheDesc": "Zachowuje myślenie modelu (thinking) dla wieloturowych przepływów wywoływania narzędzi (tool calling)", "reasoningEntries": "Aktywne wpisy", - "reasoningReplayRate": "Częstotliwość powtórzeń", - "reasoningReplays": "Suma powtórek", - "reasoningCharsCached": "Znaki zapisane w pamięci podręcznej", - "reasoningMisses": "Brak pamięci podręcznej", - "reasoningByProvider": "Przez Dostawcę", + "reasoningReplayRate": "Wskaźnik Replay", + "reasoningReplays": "Wszystkie powtórzenia (Replays)", + "reasoningCharsCached": "Zacache'owane znaki", + "reasoningMisses": "Nietrafienia cache", + "reasoningByProvider": "Według provider", "reasoningByModel": "Według modelu", - "reasoningRecentEntries": "Najnowsze wpisy", - "reasoningToolCallId": "Identyfikator wywołania narzędzia", - "reasoningChars": "Postacie", + "reasoningRecentEntries": "Ostatnie wpisy", + "reasoningToolCallId": "Tool Call ID", + "reasoningChars": "Znaki", "reasoningAge": "Wiek", - "reasoningView": "Zobacz", - "reasoningDetail": "Treść uzasadnienia", + "reasoningView": "Pokaż", + "reasoningDetail": "Zawartość reasoning", "reasoningBehavior": "Zachowanie", - "reasoningBehaviorCapture": "Przechwytuje treść uzasadnienia z odpowiedzi przesyłanych strumieniowo", - "reasoningBehaviorReplay": "Ponowny zastrzyk w następnej turze, gdy klient go pominie", - "reasoningBehaviorFallback": "Na pierwszym miejscu pamięć z rezerwowym SQLite do odzyskiwania po awarii", + "reasoningBehaviorCapture": "Przechwytuje reasoning_content z odpowiedzi strumieniowych (streaming)", + "reasoningBehaviorReplay": "Wstrzykuje ponownie w następnej turze, gdy klient go pominie", + "reasoningBehaviorFallback": "Najpierw pamięć z SQLite jako fallback do przywracania po awarii", "reasoningBehaviorTtl": "TTL: 2 godziny | Maksymalna liczba wpisów: 2000 (pamięć)", "reasoningBehaviorModels": "Obsługiwane: DeepSeek, Kimi, Qwen-Thinking, GLM", - "reasoningClearAll": "Wyczyść pamięć podręczną rozumowania", - "reasoningClearSuccess": "Wyczyszczono {count} wpisy pamięci podręcznej wnioskowania", - "reasoningClearError": "Nie udało się wyczyścić pamięci podręcznej rozumowania", - "reasoningNoData": "Nie zapisano jeszcze żadnych wpisów uzasadniających. Wpisy pojawiają się, gdy myślące modele korzystają z wywoływania narzędzi.", - "cachePerformanceRetry": "Spróbuj ponownie", - "cachePerformanceHitRate": "Współczynnik trafień", + "reasoningClearAll": "Wyczyść Reasoning Cache", + "reasoningClearSuccess": "Wyczyszczono wpisy reasoning cache ({count})", + "reasoningClearError": "Nie udało się wyczyścić reasoning cache", + "reasoningNoData": "Nie ma jeszcze żadnych wpisów w reasoning cache. Wpisy pojawiają się, gdy modele thinking używają tool calling.", + "cachePerformanceRetry": "Ponów", + "cachePerformanceHitRate": "Hit Rate", "cachePerformanceAvgLatency": "Średnie opóźnienie (ms)", - "cachePerformanceP95Latency": "p95 Opóźnienie (ms)", - "retry": "Spróbuj ponownie", - "reasoningAvgChars": "Średnie znaki", - "tableShare": "__MISSING__:Share", - "justNow": "__MISSING__:just now", - "minutesAgo": "__MISSING__:{minutes}m ago", - "hoursAgo": "__MISSING__:{hours}h ago", - "daysAgo": "__MISSING__:{days}d ago", - "entries": "Entries" + "cachePerformanceP95Latency": "Opóźnienie p95 (ms)", + "retry": "Ponów", + "reasoningAvgChars": "Średnia liczba znaków", + "tableShare": "Udział", + "justNow": "przed chwilą", + "minutesAgo": "{minutes}m temu", + "hoursAgo": "{hours}h temu", + "daysAgo": "{days}d temu", + "entries": "Wpisy" }, "proxyConfigModal": { "levelGlobal": "Globalny", - "levelProvider": "Dostawca", - "levelCombo": "Kombinacja", + "levelProvider": "Provider", + "levelCombo": "Combo", "levelKey": "Klucz", - "levelDirect": "Bezpośrednio (bez proxy)", - "titleGlobal": "Globalna konfiguracja serwera proxy", - "titleLevel": "{level} Serwer proxy — {label}", + "levelDirect": "Bezpośredni (brak proxy)", + "titleGlobal": "Globalna konfiguracja proxy", + "titleLevel": "{level} Proxy — {label}", "loading": "Ładowanie konfiguracji proxy...", - "inheritingFrom": "Dziedziczenie od", + "inheritingFrom": "Dziedziczenie z", "source": "Źródło", - "savedProxy": "Zapisany serwer proxy", + "savedProxy": "Zapisane proxy", "custom": "Niestandardowe", - "selectSavedProxyPlaceholder": "Wybierz zapisany serwer proxy...", + "selectSavedProxyPlaceholder": "Wybierz zapisane proxy...", "proxyType": "Typ proxy", - "host": "Gospodarz", + "host": "Host", "hostPlaceholder": "1.2.3.4 lub proxy.example.com", - "port": "Portu", + "port": "Port", "authOptional": "Uwierzytelnianie (opcjonalnie)", "username": "Nazwa użytkownika", "usernamePlaceholder": "Nazwa użytkownika", "password": "Hasło", "passwordPlaceholder": "Hasło", "connected": "Połączono", - "ip": "Adres IP:", - "connectionFailed": "Połączenie nie powiodło się", - "testConnection": "Połączenie testowe", - "clear": "Jasne", + "ip": "IP:", + "connectionFailed": "Błąd połączenia", + "testConnection": "Testuj połączenie", + "clear": "Wyczyść", "cancel": "Anuluj", "save": "Zapisz", - "errorSelectSavedProxy": "Najpierw wybierz zapisany serwer proxy.", - "errorSelectProxyFirst": "Najpierw wybierz serwer proxy.", - "errorProxyNotFound": "Nie znaleziono wybranego serwera proxy.", - "errorClearSavedProxy": "Nie udało się wyczyścić zapisanego serwera proxy", + "errorSelectSavedProxy": "Najpierw wybierz zapisane proxy.", + "errorSelectProxyFirst": "Najpierw wybierz proxy.", + "errorProxyNotFound": "Nie znaleziono wybranego proxy.", + "errorClearSavedProxy": "Nie udało się wyczyścić zapisanego proxy", "errorSaveProxy": "Nie udało się zapisać konfiguracji proxy", "errorClearProxy": "Nie udało się wyczyścić konfiguracji proxy", - "errorSocks5Hidden": "SOCKS5 jest skonfigurowany, ale ukryty, ponieważ NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=false." + "errorSocks5Hidden": "SOCKS5 jest skonfigurowane, ale ukryte, ponieważ NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=false." }, "oauthModal": { - "title": "Połącz {providerName}", + "title": "Połącz z {providerName}", "waiting": "Oczekiwanie na autoryzację", - "completeAuthInPopup": "Pełna autoryzacja w wyskakującym okienku.", - "popupClosedHint": "Jeśli wyskakujące okienko zostanie zamknięte bez przekierowania z powrotem (np. Qoder), to okno dialogowe automatycznie przełączy się w tryb ręcznego wprowadzania adresu URL.", - "popupBlocked": "Wyskakujące okienko zablokowane? Wprowadź adres URL ręcznie", - "deviceCodeVisitUrl": "Odwiedź poniższy adres URL i wprowadź kod:", - "deviceCodeVerificationUrl": "Adres URL weryfikacji", - "deviceCodeYourCode": "Twój kod", + "completeAuthInPopup": "Dokończ autoryzację w wyskakującym oknie.", + "popupClosedHint": "Jeśli wyskakujące okno zostanie zamknięte lub nie prześle wywołania zwrotnego (callback), to okno dialogowe automatycznie przełączy się w tryb ręcznego wprowadzania URL.", + "popupBlocked": "Zablokowane wyskakujące okno? Wprowadź URL ręcznie", + "deviceCodeVisitUrl": "Odwiedź poniższy URL i wprowadź kod:", + "deviceCodeVerificationUrl": "Weryfikacyjny URL", + "deviceCodeYourCode": "Kod", "deviceCodeWaiting": "Oczekiwanie na autoryzację...", - "googleOAuthWarning": "Dostęp zdalny + Google OAuth: domyślne dane uwierzytelniające akceptują tylko przekierowania do localhost. Po autoryzacji Twoja przeglądarka spróbuje otworzyć localhost — skopiuj cały adres URL i wklej go poniżej. Aby móc korzystać w pełni zdalnie bez tej czynności ręcznej, skonfiguruj własne poświadczenia OAuth.", - "remoteAccessInfo": "Dostęp zdalny: Ponieważ uzyskujesz zdalny dostęp do OmniRoute, po autoryzacji zobaczysz stronę błędu (nie znaleziono hosta lokalnego). Jest to normalne — po prostu skopiuj pełny adres URL z paska adresu przeglądarki i wklej go poniżej.", - "step1OpenUrl": "Krok 1: Otwórz ten adres URL w swojej przeglądarce", + "googleOAuthWarning": "Zdalny dostęp + Google OAuth: powiązane dane uwierzytelniające akceptują tylko przekierowania loopback, takie jak 127.0.0.1. Przeglądarka zatwierdzająca Google musi mieć możliwość połączenia z OmniRoute na tym lokalnym porcie, zwykle przez otwarcie OmniRoute lokalnie lub użycie tunelu SSH/lokalnego przekierowania. Zalecane dla instalacji zdalnych: na własnym komputerze uruchom npx omniroute login antigravity i wklej blob danych uwierzytelniających, który zostanie wyświetlony, w poniższe pole. W przypadku w pełni zdalnego korzystania bez lokalnego callback, skonfiguruj własne dane uwierzytelniające OAuth.", + "remoteAccessInfo": "Zdalny dostęp: Ponieważ uzyskujesz dostęp do OmniRoute zdalnie, po autoryzacji pojawi się strona błędu (nie znaleziono localhost). Jest to normalne — skopiuj pełny URL z paska adresu przeglądarki i wklej go poniżej.", + "step1OpenUrl": "Krok 1: Otwórz ten URL w przeglądarce", "copy": "Kopiuj", - "step2PasteCallback": "Krok 2: Wklej tutaj adres URL wywołania zwrotnego lub kod autoryzacyjny", - "step2Hint": "Po autoryzacji wklej pełny adres URL wywołania zwrotnego. W przypadku Claude Code i Cline możesz także wkleić kod uwierzytelniający bezpośrednio, np. kod#stan.", + "step2PasteCallback": "Krok 2: Wklej tutaj URL callback lub kod autoryzacyjny", + "step2Hint": "Po autoryzacji wklej pełny URL callback. W przypadku Claude Code i Cline można również wkleić bezpośrednio kod uwierzytelniający, np. code#state.", "connect": "Połącz", "cancel": "Anuluj", "success": "Połączenie pomyślne!", - "successMessage": "Twoje konto {providerName} zostało połączone.", + "successMessage": "Konto {providerName} zostało połączone.", "done": "Gotowe", "error": "Połączenie nie powiodło się", "tryAgain": "Spróbuj ponownie" }, "cursorAuthModal": { - "title": "Podłącz kursor IDE", - "autoDetecting": "Automatyczne wykrywanie tokenów...", - "readingFromCursor": "Czytanie z Cursor IDE lub kursora-agenta", - "tokensAutoDetected": "Tokeny pomyślnie wykryte automatycznie w Cursor IDE!", - "cursorNotDetected": "Nie wykryto IDE kursora. Proszę ręcznie wkleić swój token.", - "accessToken": "Token dostępu", + "title": "Połącz Cursor IDE", + "autoDetecting": "Automatyczne wykrywanie tokens...", + "readingFromCursor": "Odczytywanie z Cursor IDE lub cursor-agent", + "tokensAutoDetected": "Tokens pomyślnie automatycznie wykryte z Cursor IDE!", + "cursorNotDetected": "Nie wykryto Cursor IDE. Wklej ręcznie swój token.", + "accessToken": "Access Token", "required": "*", - "accessTokenPlaceholder": "Token dostępu zostanie automatycznie uzupełniony...", - "machineId": "Identyfikator maszyny", + "accessTokenPlaceholder": "Access token zostanie automatycznie uzupełniony...", + "machineId": "Machine ID", "optional": "(opcjonalnie)", - "machineIdPlaceholder": "Identyfikator maszyny zostanie automatycznie uzupełniony...", + "machineIdPlaceholder": "Machine ID zostanie automatycznie uzupełniony...", "importing": "Importowanie...", "importToken": "Importuj token", "cancel": "Anuluj", - "errorAutoDetect": "Nie można automatycznie wykryć tokenów", - "errorAutoDetectFailed": "Nie udało się automatycznie wykryć tokenów", - "errorEnterToken": "Proszę wprowadzić token dostępu", + "errorAutoDetect": "Nie można automatycznie wykryć tokens", + "errorAutoDetectFailed": "Automatyczne wykrywanie tokens nie powiodło się", + "errorEnterToken": "Wprowadź access token", "errorImportFailed": "Import nie powiódł się" }, "pricingModal": { - "title": "Konfiguracja cen", - "loading": "Ładowanie danych cenowych...", - "pricingRatesFormat": "Format stawek cenowych", - "ratesDescription": "Wszystkie stawki podane są w dolarach za milion tokenów ($/1 milion tokenów). Przykład: Stawka wejściowa wynosząca 2,50 oznacza 2,50 USD za 1 000 000 tokenów wejściowych.", - "model": "Modelka", + "title": "Konfiguracja cennika", + "loading": "Ładowanie danych cennika...", + "pricingRatesFormat": "Format stawek cennika", + "ratesDescription": "Wszystkie stawki są podane w dolarach za milion tokens ($/1M tokens). Przykład: Stawka wejściowa 2.50 oznacza 2,50 USD za 1 000 000 wejściowych tokens.", + "model": "Model", "input": "Wejście", "output": "Wyjście", - "cached": "Buforowane", - "reasoning": "Rozumowanie", - "cacheCreation": "Tworzenie pamięci podręcznej", - "noPricingData": "Brak danych o cenach", - "resetToDefaults": "Przywróć ustawienia domyślne", + "cached": "Cached", + "reasoning": "Reasoning", + "cacheCreation": "Tworzenie cache", + "noPricingData": "Brak dostępnych danych cennika", + "resetToDefaults": "Przywróć domyślne", "cancel": "Anuluj", "saving": "Zapisywanie...", "saveChanges": "Zapisz zmiany", - "resetConfirm": "Przywrócić wszystkie ceny do wartości domyślnych? Tego nie można cofnąć.", - "errorSaveFailed": "Nie udało się zapisać cen", - "errorResetFailed": "Nie udało się zresetować cen" + "resetConfirm": "Przywrócić wszystkie stawki cennika do wartości domyślnych? Tej operacji nie można cofnąć.", + "errorSaveFailed": "Nie udało się zapisać cennika", + "errorResetFailed": "Nie udało się zresetować cennika" }, "proxyRegistry": { - "title": "Title", - "description": "Description", - "importLegacy": "Import Legacy", - "bulkAssign": "Bulk Assign", - "addProxy": "Add Proxy", - "loading": "Loading", - "noProxies": "No Proxies", - "tableName": "Table Name", - "tableEndpoint": "Table Endpoint", - "tableStatus": "Table Status", - "tableHealth": "Table Health", - "tableUsage": "Table Usage", - "tableActions": "Table Actions", + "title": "Rejestr proxy", + "description": "Przechowuj proxy wielokrotnego użytku i śledź przypisania.", + "importLegacy": "Importuj wersję legacy", + "bulkAssign": "Przypisywanie masowe", + "addProxy": "Dodaj proxy", + "loading": "Ładowanie proxy...", + "noProxies": "Brak zapisanych proxy.", + "tableName": "Nazwa", + "tableEndpoint": "Endpoint", + "tableStatus": "Status", + "tableHealth": "Kondycja (24h)", + "tableUsage": "Użycie", + "tableActions": "Akcje", "test": "Test", - "edit": "Edit", - "delete": "Delete", - "modalCreateTitle": "Modal Create Title", - "modalEditTitle": "Modal Edit Title", - "labelName": "Label Name", - "labelType": "Wpisz", - "labelFamily": "__MISSING__:IP family", - "familyAuto": "__MISSING__:Auto (dual-stack)", - "familyIpv4": "__MISSING__:IPv4 only", - "familyIpv6": "__MISSING__:IPv6 only", - "familyHint": "__MISSING__:Egress address family. Auto keeps dual-stack; IPv4/IPv6 pin this proxy to that family (prevents a v4 leak under an IPv6-only proxy).", - "labelHost": "Gospodarz", - "labelPort": "Portu", + "edit": "Edytuj", + "delete": "Usuń", + "modalCreateTitle": "Utwórz proxy", + "modalEditTitle": "Edytuj proxy", + "labelName": "Nazwa", + "labelType": "Typ", + "labelFamily": "Rodzina IP", + "familyAuto": "Auto (dual-stack)", + "familyIpv4": "Tylko IPv4", + "familyIpv6": "Tylko IPv6", + "familyHint": "Rodzina adresów wyjściowych (egress). Auto zachowuje dual-stack; IPv4/IPv6 przypina to proxy do danej rodziny (zapobiega wyciekowi v4 pod proxy tylko z IPv6).", + "labelHost": "Host", + "labelPort": "Port", "labelUsername": "Nazwa użytkownika", "labelPassword": "Hasło", "labelRegion": "Region", - "labelStatus": "Stan", - "labelNotes": "Notatki", - "usernamePlaceholderEdit": "Pozostaw puste, aby zachować bieżącą nazwę użytkownika", - "passwordPlaceholderEdit": "Pozostaw puste, aby zachować aktualne hasło", - "statusActive": "Aktywny", - "statusInactive": "Nieaktywny", + "labelStatus": "Status", + "labelNotes": "Uwagi", + "usernamePlaceholderEdit": "Pozostaw puste, aby zachować obecną nazwę użytkownika", + "passwordPlaceholderEdit": "Pozostaw puste, aby zachować obecne hasło", + "statusActive": "Aktywne", + "statusInactive": "Nieaktywne", "cancel": "Anuluj", "save": "Zapisz", - "bulkModalTitle": "Zbiorcze przypisanie serwera proxy", + "bulkModalTitle": "Masowe przypisywanie proxy", "bulkLabelScope": "Zakres", - "bulkLabelProxy": "Pełnomocnik", + "bulkLabelProxy": "Proxy", "bulkClearAssignment": "(Wyczyść przypisanie)", - "bulkLabelScopeIds": "Identyfikatory zakresów (oddzielone przecinkami lub znakami nowej linii)", - "bulkScopeIdsPlaceholder": "dostawca-openai, dostawca-antropiczny", + "bulkLabelScopeIds": "IDs zakresów (rozdzielone przecinkiem lub nową linią)", + "bulkScopeIdsPlaceholder": "provider-openai,provider-anthropic", "bulkApply": "Zastosuj", - "labelScope": "__MISSING__:Scope", - "labelProxy": "__MISSING__:Proxy", - "scopeGlobal": "__MISSING__:global", - "scopeProvider": "__MISSING__:provider", - "scopeAccount": "__MISSING__:account", - "scopeCombo": "__MISSING__:combo", - "bulkImportErrorMissingName": "Brak NAZWY", - "bulkImportErrorMissingHost": "Brakuje HOSTA", - "bulkImportErrorInvalidPort": "Nieprawidłowy PORT (musi to być 1-65535)", - "bulkImportErrorInvalidType": "Nieprawidłowy TYP (użyj http, https lub skarpetki5)", - "bulkImportErrorInvalidStatus": "Nieprawidłowy STATUS (użyj aktywnego lub nieaktywnego)", - "errorLoadFailed": "Error Load Failed", - "errorNameHostRequired": "Error Name Host Required", - "errorSaveFailed": "Error Save Failed", - "errorDeleteFailed": "Error Delete Failed", - "errorForceDeleteConfirm": "Error Force Delete Confirm", - "errorMigrateFailed": "Error Migrate Failed", - "errorBulkFailed": "Error Bulk Failed", + "labelScope": "Zakres", + "labelProxy": "Proxy", + "scopeGlobal": "global", + "scopeProvider": "provider", + "scopeAccount": "account", + "scopeCombo": "combo", + "bulkImportErrorMissingName": "Brak NAME", + "bulkImportErrorMissingHost": "Brak HOST", + "bulkImportErrorInvalidPort": "Nieprawidłowy PORT (musi być z zakresu 1-65535)", + "bulkImportErrorInvalidType": "Nieprawidłowy TYPE (użyj http, https lub socks5)", + "bulkImportErrorInvalidStatus": "Nieprawidłowy STATUS (użyj active lub inactive)", + "errorLoadFailed": "Nie udało się załadować rejestru proxy", + "errorNameHostRequired": "Nazwa i host są wymagane", + "errorSaveFailed": "Nie udało się zapisać proxy", + "errorDeleteFailed": "Nie udało się usunąć proxy", + "errorForceDeleteConfirm": "To proxy jest nadal przypisane. Wymusić usunięcie i usunąć wszystkie przypisania?", + "errorMigrateFailed": "Nie udało się zmigrować starej konfiguracji proxy", + "errorBulkFailed": "Nie udało się wykonać masowego przypisania", "success": "✓", "failure": "✗", - "failed": "Failed", + "failed": "Nie powiodło się", "successRate": "{rate}% sukcesu", - "avgLatency": "Średnia {latency}ms", - "assignmentsCount": "Przydziały: {count}", - "noData": "No Data", + "avgLatency": "średnio {latency}ms", + "assignmentsCount": "{count} przypisań", + "noData": "—", "testSuccess": "✓ {ip}", "testLatency": "{latency}ms", "testFailure": "✗ {error}", - "bulkImport": "Import zbiorczy", + "repair": "Napraw", + "relayAuthMissing": "brak uwierzytelniania", + "relayRepairTooltip": "Przywróć uwierzytelnianie relay na miejscu. Jeśli token jest nie do odzyskania (np. po rotacji STORAGE_ENCRYPTION_KEY), wdróż relay ponownie.", + "relayRepairRedeployRequired": "Uwierzytelnianie relay jest nie do odzyskania — wdróż relay ponownie, aby zapisać nowy token.", + "relayRepairFailed": "Naprawa relay nie powiodła się", + "relayRepairError": "naprawa nie powiodła się", + "relayProbeSummary": "Sondy relay: {alive}/{tested} aktywnych", + "bulkImport": "Masowy import", "bulkImportTitle": "Masowy import proxy", - "bulkImportDescription": "Wklej profile proxy w formacie rozdzielanym pionową kreską. Jeden serwer proxy na linię. Istniejące serwery proxy (ten sam host + port) zostaną zaktualizowane.", - "bulkImportParse": "Przeanalizuj", + "bulkImportDescription": "Wklej profile proxy, po jednym w linii. Obsługiwane formaty: rozdzielane pionową kreską (NAME|HOST|PORT|…), skrócone (ip:port, ip:port:user:pass, user:pass@ip:port, user:pass:ip:port, protocol://ip:port, protocol://user:pass@ip:port) lub tryb nagłówka protokołu (sam protokół w pierwszej linii dotyczy kolejnych linii skróconych). Istniejące proxy (ten sam host + port) zostaną zaktualizowane.", + "bulkImportParse": "Analizuj", "bulkImportImport": "Importuj {count} proxy", "bulkImportImporting": "Importowanie...", - "bulkImportParsed": "Przeanalizowano serwery proxy {count}", - "bulkImportSkipped": "{count} wiersze zostały pominięte", - "bulkImportParseErrors": "{count} błędy", + "bulkImportParsed": "Przeanalizowano {count} proxy", + "bulkImportSkipped": "Pominięto {count} linii", + "bulkImportParseErrors": "{count} błędów", "bulkImportNoValidEntries": "Nie znaleziono prawidłowych wpisów. Sprawdź format i spróbuj ponownie.", - "bulkImportSuccess": "Import zakończony: {created} utworzono, {updated} zaktualizowano, {failed} nie powiodło się", + "bulkImportSuccess": "Import zakończony: utworzono {created}, zaktualizowano {updated}, nie powiodło się {failed}", "bulkImportErrorLine": "Linia {line}: {reason}", - "bulkImportMaxExceeded": "Maksymalnie 100 serwerów proxy na import", + "bulkImportMaxExceeded": "Maksymalnie 100 proxy na import", "bulkImportPreview": "Podgląd", - "clearAssignment": "(jasne przypisanie)", - "bulkProxyAssignment": "Zbiorcze przypisanie serwera proxy" + "clearAssignment": "(wyczyść przypisanie)", + "bulkProxyAssignment": "Masowe przypisywanie proxy", + "testAll": "Testuj wszystkie", + "errorTestFailed": "Nie udało się przetestować proxy", + "batchSelectedCount": "Wybrano {count}", + "batchDeleteSelected": "Usuń wybrane ({count})", + "batchActivateSelected": "Włącz wybrane ({count})", + "testPassed": "✓ OK", + "close": "Zamknij", + "managePool": "Zarządzaj pulą", + "poolTitle": "Pula proxy i rotacja", + "poolDescription": "Dołącz wiele proxy do zakresu i rotuj wyjściowe adresy IP między nimi. Zakres z pojedynczym proxy zachowuje się dokładnie tak, jak zwykłe przypisanie.", + "poolScopeIdLabel": "ID zakresu", + "poolScopeIdPlaceholder": "ID provider, ID połączenia lub ID combo", + "poolScopeIdRequired": "ID zakresu jest wymagane dla zakresu provider, konta lub combo.", + "poolLoad": "Załaduj pulę", + "poolLoadFailed": "Nie udało się załadować puli proxy", + "poolStrategyLabel": "Strategia rotacji", + "poolStrategyHint": "round-robin przechodzi przez członków po kolei; random wybiera losowo; sticky utrzymuje jednego członka przez określony czas; latency-optimized wybiera najszybszy na podstawie logów.", + "poolStrategyFailed": "Nie udało się zaktualizować strategii rotacji", + "strategyRoundRobin": "Round-robin", + "strategyRandom": "Random", + "strategySticky": "Sticky", + "strategyLatency": "Latency-optimized", + "poolMembersLabel": "Członkowie puli ({count})", + "poolNoMembers": "Brak proxy w tej puli.", + "poolRemove": "Usuń", + "poolRemoveFailed": "Nie udało się usunąć proxy z puli", + "poolAddLabel": "Dodaj proxy", + "poolAddMember": "Dodaj", + "poolAddFailed": "Nie udało się dodać proxy do puli", + "poolSelectProxy": "Wybierz proxy…", + "poolSaveFailed": "Nie udało się zapisać przypisania puli" }, "playground": { - "title": "Title", - "description": "Description", + "title": "Model Playground", + "description": "Testuj dowolny model bezpośrednio z dashboard. Wybierz provider, model i typ endpoint, a następnie wyślij żądanie, aby zobaczyć surową odpowiedź.", "endpoint": "Endpoint", "provider": "Provider", "model": "Model", - "accountKey": "Account Key", - "autoAccounts": "Automatycznie ({count} kont)", - "noAccounts": "No Accounts", - "send": "Send", - "cancel": "Cancel", - "audioFile": "Audio File", - "attachImages": "Attach Images", - "multipartFormData": "Multipart Form Data", - "upToImages": "Up To Images", - "selectAudioFile": "Select Audio File", - "clearAll": "Clear All", - "request": "Request", - "response": "Response", - "transcription": "Transcription", - "copy": "Copy", - "resetToDefault": "Reset To Default", - "downloadAudio": "Download Audio", - "copyText": "Copy Text", - "transcriptionHint": "Transcription Hint", + "accountKey": "Konto / Klucz", + "autoAccounts": "Auto ({count} kont)", + "noAccounts": "Brak kont", + "send": "Wyślij", + "cancel": "Anuluj", + "audioFile": "Plik audio", + "attachImages": "Załącz obrazy (Vision)", + "multipartFormData": "multipart/form-data", + "upToImages": "Maksymalnie 4 obrazy", + "selectAudioFile": "Wybierz plik audio do transkrypcji (mp3, wav, m4a, ogg, flac…)", + "clearAll": "Wyczyść wszystko", + "request": "Żądanie", + "response": "Odpowiedź", + "transcription": "Transkrypcja", + "copy": "Kopiuj", + "resetToDefault": "Resetuj do domyślnych", + "downloadAudio": "Pobierz audio", + "copyText": "Kopiuj tekst", + "transcriptionHint": "Transkrypcja używa multipart/form-data. Prześlij plik audio powyżej — poniższy JSON kontroluje dodatkowe parametry (model, język).", "imagesGenerated": "Wygenerowano {count} obrazów", "generatedImage": "Wygenerowany obraz {index}", - "save": "Save", + "save": "Zapisz", "endpointOptions": { - "chat": "Chat", + "chat": "Chat completions", "responses": "Responses", - "images": "Images", + "images": "Generowanie obrazów", "embeddings": "Embeddings", - "speech": "Speech", - "transcription": "Transcription", - "video": "Video", - "music": "Music", + "speech": "Tekst na mowę", + "transcription": "Transkrypcja audio", + "video": "Generowanie wideo", + "music": "Generowanie muzyki", "rerank": "Rerank", - "search": "Search" + "search": "Wyszukiwanie webowe" }, "conversationalChat": "Czat konwersacyjny", "clearChat": "Wyczyść czat", - "typeMessagePlaceholder": "Wpisz wiadomość... (Shift+Enter, aby wprowadzić nową linię)", - "tabChat": "Chat", - "tabCompare": "Compare", + "typeMessagePlaceholder": "Wpisz wiadomość... (Shift+Enter dla nowego wiersza)", + "tabChat": "Czat", + "tabCompare": "Porównaj", "tabApi": "API", "tabBuild": "Build", - "configPane": "Config", - "systemPrompt": "System prompt", - "systemPromptPlaceholder": "You are a helpful assistant.", + "configPane": "Konfiguracja", + "systemPrompt": "Prompt systemowy", + "systemPromptPlaceholder": "Jesteś pomocnym asystentem.", "modelPlaceholder": "e.g. openai/gpt-4o", "endpointLabel": "Endpoint", - "parametersLabel": "Parameters", - "collapseConfig": "Collapse config pane", - "expandConfig": "Expand config pane", - "temperature": "Temperature", - "maxTokens": "Max tokens", + "parametersLabel": "Parametry", + "collapseConfig": "Zwiń panel konfiguracji", + "expandConfig": "Rozwiń panel konfiguracji", + "temperature": "Temperatura", + "maxTokens": "Maks. tokens", "topP": "Top-p", "presencePenalty": "Presence penalty", - "frequencyPenalty": "Frequency penalty", - "seedPlaceholder": "Random (leave empty)", - "presetsLabel": "Presets", - "loadPreset": "Load preset", - "savePreset": "Save preset", - "noPresets": "No presets", - "presetNamePlaceholder": "Preset name", - "savingPreset": "Saving…", - "nameRequired": "Name is required", - "failedToSavePreset": "Failed to save preset", - "improvePrompt": "Improve prompt", - "improvingPrompt": "Improving…", - "improvePromptTitle": "Improve your prompt with AI", - "setModelFirst": "Set a model first", - "improveQuotaWarning": "This will consume quota from the model configured in Config.", - "improveConfirm": "Improve", - "exportCode": "Export code", - "exportCodeTitle": "Export Code", - "exportShort": "__MISSING__:Export", - "noStateToExport": "No playground state available to export.", - "closeExportModal": "__MISSING__:Close export modal", - "close": "__MISSING__:Close", - "exportRealKeyWarning": "__MISSING__:Security warning: export blocked — a real API key was detected in the output. Please reset your API key and try again.", - "placeholderHintPrefix": "__MISSING__:Replace", - "placeholderHintSuffix": "__MISSING__:with your actual API key, or set it as an environment variable.", - "copyLangCode": "__MISSING__:Copy {language} code", - "loadingPresets": "__MISSING__:Loading…", - "loadPresetPlaceholder": "__MISSING__:Load preset…", - "copyCode": "Copy", - "copiedCode": "Copied!", + "frequencyPenalty": "Kara za częstotliwość", + "reasoningLabel": "Reasoning", + "thinking": "Myślenie", + "effort": "Wysiłek", + "effortDefault": "Domyślny", + "seedPlaceholder": "Losowy (pozostaw puste)", + "presetsLabel": "Presety", + "loadPreset": "Wczytaj preset", + "savePreset": "Zapisz preset", + "noPresets": "Brak presetów", + "presetNamePlaceholder": "Nazwa presetu", + "savingPreset": "Zapisywanie…", + "nameRequired": "Nazwa jest wymagana", + "failedToSavePreset": "Nie udało się zapisać presetu", + "improvePrompt": "Ulepsz prompt", + "improvingPrompt": "Ulepszanie…", + "improvePromptTitle": "Ulepsz swój prompt za pomocą AI", + "setModelFirst": "Najpierw ustaw model", + "improveQuotaWarning": "To zużyje quota z modelu skonfigurowanego w Config.", + "improveConfirm": "Ulepsz", + "exportCode": "Eksportuj kod", + "exportCodeTitle": "Eksportuj kod", + "exportShort": "Eksportuj", + "noStateToExport": "Brak stanu playground dostępnego do eksportu.", + "closeExportModal": "Zamknij okno eksportu", + "close": "Zamknij", + "exportRealKeyWarning": "Ostrzeżenie o bezpieczeństwie: eksport zablokowany — w danych wyjściowych wykryto prawdziwy klucz API. Zresetuj swój klucz API i spróbuj ponownie.", + "placeholderHintPrefix": "Zastąp", + "placeholderHintSuffix": "swoim rzeczywistym kluczem API lub ustaw go jako zmienną środowiskową.", + "copyLangCode": "Kopiuj kod {language}", + "loadingPresets": "Wczytywanie…", + "loadPresetPlaceholder": "Wczytaj preset…", + "copyCode": "Kopiuj", + "copiedCode": "Skopiowano!", "addModel": "+ Add model", - "runAll": "Run all", - "cancelAll": "Cancel all", - "maxColumnsReached": "Maximum {max} columns", + "runAll": "Uruchom wszystko", + "cancelAll": "Anuluj wszystko", + "maxColumnsReached": "Maksymalnie {max} kolumn", "modelPlaceholderCompare": "Model (Cmd+K)…", "ttft": "TTFT", "tps": "TPS", - "metricsDisclaimer": "client-side estimate", + "metricsDisclaimer": "szacunek po stronie klienta", "tokensLabel": "Tokens", - "costLabel": "Cost", - "costEstimated": "(estimated)", - "toolsLabel": "Tools", - "addTool": "Add tool", - "toolNamePlaceholder": "Function name", - "toolDescPlaceholder": "Description (optional)", - "toolParamsInvalid": "Parameters must be valid JSON", - "structuredOutputLabel": "Structured Output", - "enableJsonMode": "Enable JSON mode", - "disableJsonMode": "Disable JSON mode", - "invalidJson": "Invalid JSON", - "running": "Running…", - "runLabel": "Run", - "enterToolResult": "Enter tool result…", + "costLabel": "Koszt", + "costEstimated": "(szacowany)", + "toolsLabel": "Narzędzia", + "addTool": "Dodaj narzędzie", + "toolNamePlaceholder": "Nazwa funkcji", + "toolDescPlaceholder": "Opis (opcjonalnie)", + "toolParamsInvalid": "Parametry muszą być poprawnym formatem JSON", + "structuredOutputLabel": "Ustrukturyzowane dane wyjściowe", + "enableJsonMode": "Włącz tryb JSON", + "disableJsonMode": "Wyłącz tryb JSON", + "invalidJson": "Niepoprawny JSON", + "running": "Przetwarzanie…", + "runLabel": "Uruchom", + "enterToolResult": "Wprowadź wynik narzędzia…", "build": { - "step1Label": "__MISSING__:What to test?", - "step2Label": "__MISSING__:Configure", - "step3Label": "__MISSING__:Run", - "step1Title": "__MISSING__:What do you want to test?", - "step1Subtitle": "__MISSING__:Choose the capability you want to explore in this session.", - "step2Title": "__MISSING__:Configure", - "step2Subtitle": "__MISSING__:Set up the tools or JSON schema that will be used in the request.", - "step3Title": "__MISSING__:Run", - "modeToolsTitle": "__MISSING__:Tools", - "modeToolsDesc": "__MISSING__:Test function calling — define tools and see how the model invokes them.", - "modeJsonTitle": "__MISSING__:JSON", - "modeJsonDesc": "__MISSING__:Test structured output — constrain the response to a JSON schema.", - "modeBothTitle": "__MISSING__:Tools + JSON", - "modeBothDesc": "__MISSING__:Combine function calling and structured output in a single request.", - "backButton": "__MISSING__:Back", - "nextButton": "__MISSING__:Next", - "runButton": "__MISSING__:Run", - "promptPlaceholder": "__MISSING__:Enter your message… (Enter to send, Shift+Enter for newline)" + "step1Label": "Co przetestować?", + "step2Label": "Skonfiguruj", + "step3Label": "Uruchom", + "step1Title": "Co chcesz przetestować?", + "step1Subtitle": "Wybierz funkcjonalność, którą chcesz zbadać w tej sesji.", + "step2Title": "Skonfiguruj", + "step2Subtitle": "Skonfiguruj narzędzia lub schemat JSON, które zostaną użyte w żądaniu.", + "step3Title": "Uruchom", + "modeToolsTitle": "Narzędzia", + "modeToolsDesc": "Testuj wywoływanie funkcji — zdefiniuj narzędzia i zobacz, jak model je wywołuje.", + "modeJsonTitle": "JSON", + "modeJsonDesc": "Testuj ustrukturyzowane dane wyjściowe — ogranicz odpowiedź do schematu JSON.", + "modeBothTitle": "Narzędzia + JSON", + "modeBothDesc": "Połącz wywoływanie funkcji i ustrukturyzowane dane wyjściowe w jednym żądaniu.", + "backButton": "Wstecz", + "nextButton": "Dalej", + "runButton": "Uruchom", + "promptPlaceholder": "Wpisz wiadomość… (Enter, aby wysłać, Shift+Enter dla nowego wiersza)" } }, "miniPlayground": { - "endpoint": "__MISSING__:Endpoint", - "apiKey": "__MISSING__:API Key", - "model": "__MISSING__:Model", - "voice": "__MISSING__:Voice", - "speed": "__MISSING__:Speed", - "input": "__MISSING__:Input", - "url": "__MISSING__:URL", - "format": "__MISSING__:Format", - "depth": "__MISSING__:Depth", - "copyCurl": "__MISSING__:Copy cURL", - "copied": "__MISSING__:Copied!", - "run": "__MISSING__:Run", - "running": "__MISSING__:Running...", - "response": "__MISSING__:Response", - "tunnel": "__MISSING__:Tunnel", - "send": "__MISSING__:Send", - "selectKey": "__MISSING__:Select key", - "testLabel": "__MISSING__:Test", - "expandTest": "__MISSING__:Expand test", - "collapseTest": "__MISSING__:Collapse test", - "revealKey": "__MISSING__:Reveal key", - "hideKey": "__MISSING__:Hide key", - "download": "__MISSING__:Download", - "play": "__MISSING__:Play", - "query": "__MISSING__:Query", - "numResults": "__MISSING__:Max results", - "prompt": "__MISSING__:Prompt", - "size": "__MISSING__:Size", - "duration": "__MISSING__:Duration", - "question": "__MISSING__:Question", - "audioFile": "__MISSING__:Audio file", - "noKeysFound": "__MISSING__:No API keys found. Add one in the Keys section.", - "exampleLabel": "__MISSING__:Example", - "latency": "__MISSING__:{ms}ms", - "statsLine": "__MISSING__:{ms}ms · {tokensIn} in / {tokensOut} out tokens" + "endpoint": "Endpoint", + "apiKey": "Klucz API", + "model": "Model", + "voice": "Głos", + "speed": "Prędkość", + "input": "Wejście", + "url": "URL", + "format": "Format", + "depth": "Głębokość", + "copyCurl": "Kopiuj cURL", + "copied": "Skopiowano!", + "run": "Uruchom", + "running": "Uruchamianie...", + "response": "Odpowiedź", + "tunnel": "Tunel", + "send": "Wyślij", + "selectKey": "Wybierz klucz", + "testLabel": "Test", + "expandTest": "Rozwiń test", + "collapseTest": "Zwiń test", + "revealKey": "Odkryj klucz", + "hideKey": "Ukryj klucz", + "download": "Pobierz", + "play": "Odtwórz", + "query": "Zapytanie", + "numResults": "Maks. wyników", + "prompt": "Prompt", + "size": "Rozmiar", + "duration": "Czas trwania", + "question": "Pytanie", + "audioFile": "Plik audio", + "noKeysFound": "Nie znaleziono kluczy API. Dodaj klucz w sekcji Keys.", + "exampleLabel": "Przykład", + "latency": "{ms}ms", + "statsLine": "{ms}ms · {tokensIn} wej. / {tokensOut} wyj. tokens" }, "requestLogger": { - "recording": "Recording", - "paused": "Paused", - "pipelineLogsOn": "Pipeline logs on", - "pipelineLogsOff": "Pipeline logs off", - "updatingPipelineLogs": "Updating pipeline logs...", - "updatePipelineFailed": "Failed to update pipeline logging", - "capturePipeline": "Capture pipeline payloads for new requests", - "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", - "allProviders": "All providers", - "allModels": "All models", - "allAccounts": "All accounts", - "allApiKeys": "All API keys", - "total": "Total", - "ok": "Success", - "err": "Error", + "recording": "Rejestrowanie", + "paused": "Wstrzymano", + "pipelineLogsOn": "Logi pipeline włączone", + "pipelineLogsOff": "Logi pipeline wyłączone", + "updatingPipelineLogs": "Aktualizowanie logów pipeline...", + "updatePipelineFailed": "Nie udało się zaktualizować logowania pipeline", + "capturePipeline": "Przechwytuj ładunki pipeline dla nowych żądań", + "searchPlaceholder": "Szukaj models, providers, kont, kluczy API, combos...", + "allProviders": "Wszystkie providers", + "allModels": "Wszystkie models", + "allAccounts": "Wszystkie konta", + "allApiKeys": "Wszystkie klucze API", + "total": "Łącznie", + "ok": "Sukces", + "err": "Błąd", "combo": "Combo", - "keys": "Keys", - "shown": "Shown", - "sortNewest": "Newest", - "sortOldest": "Oldest", + "keys": "Klucze", + "shown": "Wyświetlone", + "sortNewest": "Najnowsze", + "sortOldest": "Najstarsze", "sortTokensDesc": "Tokens ↓", "sortTokensAsc": "Tokens ↑", - "sortDurationDesc": "Duration ↓", - "sortDurationAsc": "Duration ↑", + "sortDurationDesc": "Czas trwania ↓", + "sortDurationAsc": "Czas trwania ↑", "sortStatusDesc": "Status ↓", "sortStatusAsc": "Status ↑", "sortModelAsc": "Model A-Z", "sortModelDesc": "Model Z-A", - "sortLogs": "Sort logs", - "refresh": "Refresh", - "columnsLabel": "Columns", + "sortLogs": "Sortuj logi", + "refresh": "Odśwież", + "columnsLabel": "Kolumny", "cacheSem": "SEM", "cacheUp": "UP", - "semantic": "Semantic", + "semantic": "Semantyczne", "upstream": "Upstream", - "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", - "upstreamResponse": "Upstream provider response", - "noApiKey": "No API key", - "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "semanticCacheHit": "Trafienie w cache semantycznym (obsłużone przez OmniRoute)", + "upstreamResponse": "Odpowiedź od upstream provider", + "noApiKey": "Brak klucza API", + "requestedRoutedTitle": "Żądano {requested}, przekierowano jako {routed}", "statusFilters": { - "all": "All", - "error": "Errors", - "success": "Success", + "all": "Wszystkie", + "error": "Błąd", + "success": "Sukces", "combo": "Combo" }, "columns": { "status": "Status", - "cacheSource": "Cache Source", + "cacheSource": "Źródło cache", "model": "Model", - "requested": "Requested", + "requested": "Żądano", "provider": "Provider", - "protocol": "Request Protocol", - "account": "Account", - "apiKey": "API Key", + "protocol": "Protokół żądania", + "account": "Konto", + "apiKey": "Klucz API", "combo": "Combo", "tokens": "Tokens", "compressed": "Kompresja", "tps": "TPS", - "duration": "Duration", - "time": "Time" + "duration": "Czas trwania", + "time": "Czas" }, - "loadingLogs": "Loading logs...", - "noLogs": "No logs yet. Make some API calls to see them here.", - "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", - "loadMore": "__MISSING__:Load More", - "loadingMore": "__MISSING__:Loading more..." + "loadingLogs": "Wczytywanie logów...", + "noLogs": "Brak logów. Wykonaj połączenia API, aby zobaczyć je tutaj.", + "noMatchingLogs": "Brak logów pasujących do obecnych filtrów.", + "callLogsInfo": "Logi wywołań są również zapisywane jako pliki JSON w {dataDir} i rotowane na podstawie {retentionDays} oraz {maxEntries}.", + "loadMore": "Załaduj więcej", + "loadingMore": "Ładowanie więcej..." }, "proxyLogger": { - "filterAll": "All", - "filterErrors": "Errors", - "filterSuccess": "Success", + "filterAll": "Wszystkie", + "filterErrors": "Błędy", + "filterSuccess": "Sukces", "filterTimeout": "Timeout", "colStatus": "Status", "colProxy": "Proxy", "colTls": "TLS", - "colType": "Type", - "colLevel": "Level", + "colType": "Typ", + "colLevel": "Poziom", "colProvider": "Provider", - "colTarget": "Target", - "colLatency": "Latency", - "colClientIp": "Client IP", - "colTime": "Time", - "recording": "Recording", - "paused": "Paused", - "searchPlaceholder": "Search host, provider, target, IP...", - "allTypes": "All Types", - "allLevels": "All Levels", - "allProviders": "All Providers", - "total": "total", + "colTarget": "Cel", + "colLatency": "Opóźnienie", + "colClientIp": "IP klienta", + "colTime": "Czas", + "recording": "Rejestrowanie", + "paused": "Wstrzymano", + "searchPlaceholder": "Szukaj hosta, provider, celu, IP...", + "allTypes": "Wszystkie typy", + "allLevels": "Wszystkie poziomy", + "allProviders": "Wszystkie Providers", + "total": "łącznie", "ok": "OK", "err": "ERR", "timeoutShort": "TMO", "direct": "direct", - "newest": "Newest", - "oldest": "Oldest", - "latencyDesc": "Latency ↓", - "latencyAsc": "Latency ↑", - "refresh": "Refresh", - "columns": "Columns", - "loadingProxyLogs": "Loading proxy logs...", - "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", - "noMatchingLogs": "No logs match the current filters.", - "tlsFingerprint": "Chrome 124 TLS Fingerprint", - "colPublicIp": "__MISSING__:Public IP" + "newest": "Najnowsze", + "oldest": "Najstarsze", + "latencyDesc": "Opóźnienie ↓", + "latencyAsc": "Opóźnienie ↑", + "refresh": "Odśwież", + "columns": "Kolumny", + "loadingProxyLogs": "Wczytywanie logów proxy...", + "noProxyLogs": "Brak logów proxy. Skonfiguruj proxy i wykonaj połączenia API, aby zobaczyć je tutaj.", + "noMatchingLogs": "Brak logów pasujących do obecnych filtrów.", + "tlsFingerprint": "Odcisk palca TLS Chrome 124", + "colPublicIp": "Publiczne IP" }, "endpointOptions": { - "speech": "Speech", - "search": "Search", - "images": "Images", - "chat": "Chat", - "music": "Music", + "speech": "Mowa", + "search": "Wyszukiwanie", + "images": "Obrazy", + "chat": "Czat", + "music": "Muzyka", "responses": "Responses", "rerank": "Rerank", - "video": "Video", + "video": "Wideo", "embeddings": "Embeddings", - "transcription": "Transcription" + "transcription": "Transkrypcja" }, "toolDescriptions": { "cline": "Cline", @@ -8170,887 +8459,950 @@ }, "runtime": { "title": "Runtime", - "description": "Realtime observability — 3-layer resilience + sessions + quota alerts", - "pause": "Pause", - "resume": "Resume", - "refreshNow": "Refresh now", - "kpiSessions": "Sessions", - "kpiCircuits": "Circuits", - "kpiCooldowns": "Cooldowns", - "kpiLockouts": "Lockouts", - "hintStickyBound": "{count} sticky-bound", - "hintRecovering": "{count} recovering", - "hintAllHealthy": "all healthy", - "hintOpen": "open", - "hintConnsCooling": "connections cooling", - "hintModelsBlocked": "models blocked", - "resilienceTitle": "3-Layer Resilience", - "resilienceSubtitle": "Mirrors the documented resilience model", - "providersHealthy": "{percent}% providers healthy", - "layer": "Layer {n}", - "layer1Title": "Provider Circuit Breakers", - "layer1Desc": "Stop traffic to providers failing at the upstream level", - "layer2Title": "Connection Cooldowns", - "layer2Desc": "Skip one bad account/key; other connections keep serving", - "layer3Title": "Model Lockouts", - "layer3Desc": "Per-model rate-limit locks; same connection still serves other models", - "badgeAffectedOf": "{affected} of {total} affected", - "badgeCooling": "{count} cooling", - "badgeLocked": "{count} locked", - "emptyCircuits": "No circuit breakers active yet", - "emptyCooldowns": "No connection cooldowns active", - "emptyLockouts": "No model lockouts", - "moreCooldowns": "+{count} more cooldowns", - "moreLockouts": "+{count} more lockouts", - "feedTitle": "Live Feed", - "feedSubtitle": "Last {count} events", - "feedFilterAll": "All", - "feedFilterCircuits": "Circuits", - "feedFilterCooldowns": "Cooldowns", - "feedFilterLockouts": "Lockouts", - "feedFilterSessions": "Sessions", + "description": "Obserwowalność w czasie rzeczywistym — 3-warstwowa odporność + sesje + alerty quota", + "pause": "Wstrzymaj", + "resume": "Wznów", + "refreshNow": "Odśwież teraz", + "kpiSessions": "Sesje", + "kpiCircuits": "Circuit-breakery", + "kpiCooldowns": "Cooldowny", + "kpiLockouts": "Blokady", + "hintStickyBound": "{count} powiązanych sticky", + "hintRecovering": "{count} w trakcie odzyskiwania", + "hintAllHealthy": "wszystkie sprawne", + "hintOpen": "otwarte", + "hintConnsCooling": "schładzanie połączeń", + "hintModelsBlocked": "zablokowane models", + "resilienceTitle": "3-warstwowa odporność", + "resilienceSubtitle": "Odzwierciedla udokumentowany model odporności", + "providersHealthy": "{percent}% sprawnych providers", + "layer": "Warstwa {n}", + "layer1Title": "Circuit-breakery dla providers", + "layer1Desc": "Wstrzymaj ruch do providers ulegających awarii na poziomie upstream", + "layer2Title": "Cooldowny połączeń", + "layer2Desc": "Pomiń jedno wadliwe konto/klucz; pozostałe połączenia dalej obsługują ruch", + "layer3Title": "Blokady models", + "layer3Desc": "Blokady rate limit per-model; to samo połączenie nadal obsługuje inne models", + "badgeAffectedOf": "{affected} z {total} dotkniętych", + "badgeCooling": "{count} schładzanych", + "badgeLocked": "{count} zablokowanych", + "emptyCircuits": "Brak aktywnych circuit-breakerów", + "emptyCooldowns": "Brak aktywnych cooldownów połączeń", + "emptyLockouts": "Brak blokad models", + "moreCooldowns": "+{count} kolejnych cooldownów", + "moreLockouts": "+{count} kolejnych blokad models", + "feedTitle": "Podgląd na żywo", + "feedSubtitle": "Ostatnie {count} zdarzeń", + "feedFilterAll": "Wszystkie", + "feedFilterCircuits": "Circuit-breakery", + "feedFilterCooldowns": "Cooldowny", + "feedFilterLockouts": "Blokady", + "feedFilterSessions": "Sesje", "feedFilterQuotas": "Quotas", - "feedClear": "Clear", - "feedEmptyWaiting": "Waiting for events... (polled every 5s)", - "feedEmptyFiltered": "No events match this filter", - "sessionsTitle": "Active Sessions", - "sessionsSubtitle": "Sticky-bound request fingerprints (live)", - "sessionsActive": "{count} active", - "sessionsEmptyTitle": "No active sessions", - "sessionsEmptyHint": "Sessions appear as requests flow through the proxy", - "tblSession": "Session", - "tblAge": "Age", - "tblIdle": "Idle", - "tblReqs": "Reqs", - "tblBoundTo": "Bound to", - "topApiKeys": "Top API keys", - "quotaMonitorsTitle": "Quota Monitors", - "quotaMonitorsSubtitle": "Live quota state per account window", - "openQuota": "Open Quota", - "allQuotasHealthy": "All quotas healthy", - "statusExhausted": "EXHAUSTED", - "statusAlerting": "ALERTING", - "statusError": "ERROR", - "moreSuffix": "+{count} more" + "feedClear": "Wyczyść", + "feedEmptyWaiting": "Oczekiwanie na zdarzenia... (odpytywanie co 5s)", + "feedEmptyFiltered": "Brak zdarzeń pasujących do tego filtra", + "sessionsTitle": "Aktywne sesje", + "sessionsSubtitle": "Odciski palców żądań powiązane sticky (na żywo)", + "sessionsActive": "{count} aktywnych", + "sessionsEmptyTitle": "Brak aktywnych sesji", + "sessionsEmptyHint": "Sesje pojawiają się, gdy żądania przepływają przez proxy", + "tblSession": "Sesja", + "tblAge": "Wiek", + "tblIdle": "Bezczynność", + "tblReqs": "Żądania", + "tblBoundTo": "Powiązane z", + "topApiKeys": "Najaktywniejsze API keys", + "quotaMonitorsTitle": "Monitory quota", + "quotaMonitorsSubtitle": "Stan quota na żywo dla okna konta", + "openQuota": "Otwarta quota", + "allQuotasHealthy": "Wszystkie quotas sprawne", + "statusExhausted": "WYCZERPANE", + "statusAlerting": "ALARM", + "statusError": "BŁĄD", + "moreSuffix": "+{count} więcej" }, "quotaShare": { "title": "Quota Sharing", - "description": "Share provider quotas across API keys with % limits", - "newPool": "New pool", - "betaTitle": "Beta — UI preview.", - "betaDescription": "Configuration is saved in localStorage (not yet persisted on the server). Per-request cap enforcement is not yet wired into the proxy pipeline. This screen lets you design and visualize the quota split; real enforcement will land in a future iteration with DB persistence and upstream call interception.", - "kpiActivePools": "Active pools", - "kpiKeysAllocated": "Keys allocated", - "kpiAvgUnallocated": "Avg unallocated", - "kpiProvidersWithQuota": "Providers w/ quota", - "emptyTitle": "No pools configured", - "emptyDescription": "Create a pool to assign API keys to share a provider's quota window with % allocations.", - "loading": "Loading…", - "removePool": "Remove pool", - "removeConfirm": "Remove this pool?", - "pool": "Pool", - "used": "used", - "allocationsCount": "Allocations ({count})", - "allocatedFree": "{allocated}% allocated · {free}% free", - "noAllocations": "No keys allocated yet", - "capLabel": "cap {value}", - "notTrackedYet": "(not tracked yet)", - "policy": "Policy", + "description": "Dzielenie quotas dla providers między klucze API z limitami %", + "newPool": "Nowa pula", + "betaTitle": "Beta", + "betaDescription": "Konfiguracja jest zapisywana w localStorage (nie jest jeszcze zapisywana na serwerze). Wymuszanie limitu per-request nie jest jeszcze podłączone do potoku proxy. Ten ekran umożliwia zaprojektowanie i wizualizację podziału quota; rzeczywiste wymuszanie zostanie wdrożone w przyszłej iteracji z trwałością DB i przechwytywaniem wywołań upstream.", + "kpiActivePools": "Aktywne pule", + "kpiKeysAllocated": "Przypisane klucze", + "kpiAvgUnallocated": "Śr. nieprzypisane", + "kpiProvidersWithQuota": "Providers z quota", + "emptyTitle": "Brak skonfigurowanych pul", + "emptyDescription": "Utwórz pulę, aby przypisać klucze API do współdzielenia okna quota dla provider z procentowymi alokacjami.", + "loading": "Ładowanie…", + "removePool": "Usuń pulę", + "removeConfirm": "Usunąć tę pulę?", + "pool": "Pula", + "used": "użyte", + "allocationsCount": "Alokacje ({count})", + "allocatedFree": "{allocated}% przydzielone · {free}% wolne", + "noAllocations": "Nie przydzielono jeszcze żadnych kluczy", + "capLabel": "limit {value}", + "notTrackedYet": "(jeszcze nie śledzone)", + "policy": "Polityka", "policyHard": "hard", "policySoft": "soft", "policyBurst": "burst", - "policyHardHint": "Block when key exhausts allocation", - "policySoftHint": "Allow overflow, alert only", - "policyBurstHint": "Allow burst into free pool", - "editAllocations": "Edit allocations", - "newPoolTitle": "New quota pool", - "providerConnection": "Provider connection (account)", - "selectConnection": "Select a connection…", - "noEligibleConnections": "No connections with quota data. Refresh from /dashboard/quota first.", - "quotaWindow": "Quota window", - "selectWindow": "Select a window…", - "alreadyUsedSuffix": "(already used)", + "policyHardHint": "Blokuj, gdy klucz wyczerpie alokację", + "policySoftHint": "Zezwalaj na przekroczenie, tylko alarmuj", + "policyBurstHint": "Zezwalaj na burst do wolnej puli", + "editAllocations": "Edytuj alokacje", + "newPoolTitle": "Nowa pula quota", + "providerConnection": "Połączenie z provider (konto)", + "selectConnection": "Wybierz połączenie…", + "noEligibleConnections": "Brak kwalifikujących się połączeń. Odśwież najpierw z /dashboard/quota.", + "quotaWindow": "Okno quota", + "selectWindow": "Wybierz okno…", + "alreadyUsedSuffix": "(już używane)", "windowReset": "Reset", - "duplicatePoolError": "A pool for this connection + window already exists", - "cancel": "Cancel", - "createPool": "Create pool", - "editTitle": "Edit allocations", - "noKeysAdded": "No keys allocated. Add one below.", - "totalLabel": "Total: {percent}%", - "totalExceeded": "⚠ exceeds 100%", - "addKey": "+ Add key…", - "equalSplit": "Equal split", - "save": "Save allocations", - "betaPreviewLabel": "Beta — podgląd interfejsu użytkownika.", - "betaConfigSavedPrefix": "Konfiguracja została zapisana w", - "betaConfigSavedSuffix": "(jeszcze nie utrwalony na serwerze). Egzekwowanie limitu na żądanie nie jest jeszcze podłączone do potoku proxy. Na tym ekranie możesz zaprojektować i wizualizować podział kwot; rzeczywiste egzekwowanie nastąpi w przyszłej iteracji z trwałością DB i przechwytywaniem połączeń wychodzących.", + "duplicatePoolError": "Pula dla tego połączenia + okna już istnieje", + "cancel": "Anuluj", + "createPool": "Utwórz pulę", + "editTitle": "Edytuj alokacje", + "noKeysAdded": "Brak przydzielonych kluczy. Dodaj jeden poniżej.", + "totalLabel": "Suma: {percent}%", + "totalExceeded": "⚠ przekracza 100%", + "addKey": "+ Dodaj klucz…", + "equalSplit": "Równy podział", + "save": "Zapisz alokacje", + "betaPreviewLabel": "Beta — podgląd UI.", + "betaConfigSavedPrefix": "Konfiguracja jest zapisana w", + "betaConfigSavedSuffix": "(nie jest jeszcze zapisywana na serwerze). Wymuszanie limitu per-request nie jest jeszcze podłączone do potoku proxy. Ten ekran umożliwia zaprojektowanie i wizualizację podziału quota; rzeczywiste wymuszanie zostanie wdrożone w przyszłej iteracji z trwałością DB i przechwytywaniem wywołań upstream.", "policyLabel": "Polityka:", - "resetIn": "zresetuj w", + "resetIn": "reset za", "quotaTotal": "łącznie", - "kpiAvgUtilization": "__MISSING__:Avg utilization", - "kpiBorrowingNow": "__MISSING__:Borrowing now", - "conceptTitle": "__MISSING__:How Quota Share works", - "conceptIntro": "__MISSING__:Quota Share divides a provider's quota among multiple API keys using work-conserving fair-share: each key receives a proportional slice but can borrow from the free balance without exceeding the global cap.", - "conceptFairShare": "__MISSING__:Fair-share: each key receives quota proportional to its configured weight", - "conceptBorrowing": "__MISSING__:Borrowing: keys can consume free balance from others without breaching the cap", - "conceptGlobalCap": "__MISSING__:Hard global cap: the provider's absolute limit is never exceeded", - "conceptWindows": "__MISSING__:Windows: 5h, hourly, daily, weekly, monthly — each tracked independently", - "conceptKeyHowTitle": "__MISSING__:Enabling a key for quota", - "conceptKeyHowDesc": "__MISSING__:Create the key normally in API Keys — it appears in the wizard's key step automatically. Tick Exclusive there to make it quota-only. No separate enable step.", - "conceptExclusiveTitle": "__MISSING__:What \"Exclusive\" does", - "conceptExclusiveDesc": "__MISSING__:An exclusive key only sees/uses the pool's quotaShared-* models — every other model is hidden from its /v1/models and blocked.", - "burnRateTitle": "__MISSING__:Burn rate", - "burnRateExhaustsIn": "__MISSING__:Exhausts in", - "dimensionResetIn": "__MISSING__:Resets in", - "realConsumedColumn": "__MISSING__:Consumed", - "deficitColumn": "__MISSING__:Deficit", - "borrowingIndicator": "__MISSING__:borrowing", - "migratedFromLocalStorageNotice": "__MISSING__:Pools successfully migrated from localStorage.", - "policyCapAbsoluteLabel": "__MISSING__:Absolute cap", - "policyCapAbsolutePlaceholder": "__MISSING__:Numeric limit (optional)", - "multiDimensionLabel": "__MISSING__:Multi-dimension", - "stackedBarTitle": "__MISSING__:Slices by API key", - "usedSuffix": "__MISSING__:used {percent}%", - "wizardTitle": "__MISSING__:New quota pool", - "editPoolTitle": "__MISSING__:Edit pool", - "saveChanges": "__MISSING__:Save changes", - "wizardStep1Label": "__MISSING__:Account", - "wizardStep2Label": "__MISSING__:Limit", - "wizardStep3Label": "__MISSING__:Keys", - "wizardStep1Title": "__MISSING__:Choose provider connection", - "wizardStep1Subtitle": "__MISSING__:Select the provider account this pool will share quota for, set a name and default policy.", - "wizardStep2Title": "__MISSING__:Configure quota dimensions", - "wizardStep2Subtitle": "__MISSING__:Define the quota plan dimensions (unit, window, limit) for the chosen connection. Leave unchanged to keep current settings.", - "wizardStep3Title": "__MISSING__:Allocate API keys", - "wizardStep3Subtitle": "__MISSING__:Assign API keys to this pool with weight % allocations and optional caps.", - "wizardPoolNameLabel": "__MISSING__:Pool name", - "wizardPoolNamePlaceholder": "__MISSING__:My quota pool", - "wizardNext": "__MISSING__:Next", - "wizardBack": "__MISSING__:Back", - "wizardCreatePool": "__MISSING__:Create pool", - "wizardDimensionsEditedNotice": "__MISSING__:Dimensions edited — will be saved as a manual override when the pool is created.", - "wizardExclusiveLabel": "__MISSING__:Exclusive quota", - "wizardExclusiveHint": "__MISSING__:When enabled, these API keys will only be allowed to use this pool's virtual models (allowedQuotas reconciliation is applied on save).", - "wizardPreviewLabel": "__MISSING__:Virtual model names preview", - "wizardConnectionsLabel": "__MISSING__:Provider connections", - "wizardPrimaryBadge": "__MISSING__:primary", - "wizardAdditionalConnectionsNote": "__MISSING__:Additional connections use their catalog default limits (editable later).", - "wizardSingleProviderNote": "__MISSING__:A pool uses a single provider", - "wizardPreviewMoreModels": "__MISSING__:+{count} more", - "accountQuotaTitle": "__MISSING__:Account quota", - "accountQuotaNone": "__MISSING__:—", - "logTitle": "__MISSING__:Usage log", - "logEmpty": "__MISSING__:No usage yet", - "groupLabel": "__MISSING__:Group", - "newGroup": "__MISSING__:New group", - "renameGroup": "__MISSING__:Rename group", - "groupSelectHint": "__MISSING__:Filter pools by group", - "groupAllocationNote": "__MISSING__:Allocations apply to all pools in this group via the shared quota layer.", - "groupNamePrompt": "__MISSING__:Enter group name", - "wizardGroupLabel": "__MISSING__:Group", - "allGroups": "__MISSING__:All groups", - "endpointsTitle": "__MISSING__:Available endpoints", - "endpointsHint": "__MISSING__:Call these virtual models with any allocated key — routing + quota are handled per group.", - "previewForKey": "__MISSING__:Preview for key", - "previewKeyNone": "__MISSING__:(all endpoints)", - "endpointsBaseUrl": "__MISSING__:Base URL", - "endpointsCollapse": "__MISSING__:Collapse", - "endpointsExpand": "__MISSING__:Expand", - "endpointsAnthropicNote": "__MISSING__:Anthropic-native", - "endpointsResponsesNote": "__MISSING__:OpenAI Responses — codex/github", - "endpointsWsNote": "__MISSING__:WebSocket — codex only", - "betaText": "__MISSING__:Quota Share is functional but bugs are expected. Found one? Please report it.", - "betaReportLink": "__MISSING__:Report an issue", - "deleteGroup": "__MISSING__:Delete group", - "deleteGroupConfirm": "__MISSING__:Delete this group? Its pools must be reassigned or removed first.", - "deleteGroupHasPools": "__MISSING__:This group still has pools — reassign or delete them first.", - "ungroupedTitle": "__MISSING__:Ungrouped", - "ungroupedHint": "__MISSING__:These pools are not assigned to a known group. Edit a pool to move it into a real group." + "kpiAvgUtilization": "Średnie użycie", + "kpiBorrowingNow": "Pożyczanie teraz", + "conceptTitle": "Jak działa Quota Share", + "conceptIntro": "Quota Share dzieli quota dla provider między wiele kluczy API przy użyciu sprawiedliwego podziału (fair-share): każdy klucz otrzymuje proporcjonalną część, ale może pożyczać z wolnego salda bez przekraczania globalnego limitu (cap).", + "conceptFairShare": "Fair-share: każdy klucz otrzymuje quota proporcjonalnie do swojej skonfigurowanej wagi", + "conceptBorrowing": "Pożyczanie: klucze mogą zużywać wolne saldo innych bez naruszania limitu (cap)", + "conceptGlobalCap": "Twardy globalny cap: absolutny limit dla provider nigdy nie zostanie przekroczony", + "conceptWindows": "Okna: 5h, godzinowe, dzienne, tygodniowe, miesięczne — każde śledzone niezależnie", + "conceptKeyHowTitle": "Włączanie klucza dla quota", + "conceptKeyHowDesc": "Utwórz klucz normalnie w API Keys — pojawi się on automatycznie w kroku kreatora dotyczącym kluczy. Zaznacz tam Exclusive, aby był używany wyłącznie do quota. Brak osobnego kroku włączania.", + "conceptExclusiveTitle": "What \"Exclusive\" does", + "conceptExclusiveDesc": "Klucz ekskluzywny (exclusive) widzi/używa tylko wirtualnych models typu quotaShared-* z puli — wszystkie inne models są ukryte przed jego /v1/models i blokowane.", + "burnRateTitle": "Tempo zużycia", + "burnRateExhaustsIn": "Wyczerpie się za", + "dimensionResetIn": "Resetuje się za", + "realConsumedColumn": "Zużyte", + "deficitColumn": "Deficyt", + "borrowingIndicator": "pożyczanie", + "migratedFromLocalStorageNotice": "Pule pomyślnie zmigrowane z localStorage.", + "policyCapAbsoluteLabel": "Absolutny limit (cap)", + "policyCapAbsolutePlaceholder": "Limit numeryczny (opcjonalnie)", + "multiDimensionLabel": "Wielowymiarowość", + "stackedBarTitle": "Udziały według klucza API", + "usedSuffix": "użyte {percent}%", + "wizardTitle": "Nowa pula quota", + "editPoolTitle": "Edytuj pulę", + "saveChanges": "Zapisz zmiany", + "wizardStep1Label": "Konto", + "wizardStep2Label": "Limit", + "wizardStep3Label": "Klucze", + "wizardStep1Title": "Wybierz połączenie z provider", + "wizardStep1Subtitle": "Wybierz konto providera, dla którego ta pula będzie dzielić quota, ustaw nazwę i domyślną politykę.", + "wizardStep2Title": "Skonfiguruj wymiary quota", + "wizardStep2Subtitle": "Zdefiniuj wymiary planu quota (jednostka, okno, limit) dla wybranego połączenia. Pozostaw bez zmian, aby zachować obecne ustawienia.", + "wizardStep3Title": "Przydziel klucze API", + "wizardStep3Subtitle": "Przypisz klucze API do tej puli z procentową wagą alokacji i opcjonalnymi limitami (caps).", + "wizardPoolNameLabel": "Nazwa puli", + "wizardPoolNamePlaceholder": "Moja pula quota", + "wizardNext": "Dalej", + "wizardBack": "Wstecz", + "wizardCreatePool": "Utwórz pulę", + "wizardDimensionsEditedNotice": "Wymiary edytowane — zostaną zapisane jako ręczne nadpisanie (override) po utworzeniu puli.", + "wizardExclusiveLabel": "Ekskluzywna quota", + "wizardExclusiveHint": "Po włączeniu te klucze API będą mogły korzystać wyłącznie z wirtualnych models tej puli (uzgadnianie allowedQuotas jest stosowane przy zapisie).", + "wizardPreviewLabel": "Podgląd nazw wirtualnych models", + "wizardConnectionsLabel": "Połączenia z providers", + "wizardPrimaryBadge": "główny", + "wizardAdditionalConnectionsNote": "Dodatkowe połączenia korzystają z domyślnych limitów katalogowych (edytowalne później).", + "wizardSingleProviderNote": "Pula używa jednego provider", + "wizardPreviewMoreModels": "+{count} więcej", + "accountQuotaTitle": "Quota konta", + "accountQuotaNone": "—", + "logTitle": "Dziennik użycia", + "logEmpty": "Brak użycia", + "groupLabel": "Grupa", + "newGroup": "Nowa grupa", + "renameGroup": "Zmień nazwę grupy", + "groupSelectHint": "Filtruj pule według grupy", + "groupAllocationNote": "Alokacje mają zastosowanie do wszystkich pul w tej grupie poprzez udostępnioną warstwę quota.", + "groupNamePrompt": "Wprowadź nazwę grupy", + "wizardGroupLabel": "Grupa", + "allGroups": "Wszystkie grupy", + "endpointsTitle": "Dostępne endpoints", + "endpointsHint": "Wywołuj te wirtualne models za pomocą dowolnego przydzielonego klucza — routing i quota są obsługiwane na grupę.", + "previewForKey": "Podgląd dla klucza", + "previewKeyNone": "(wszystkie endpoints)", + "endpointsBaseUrl": "Base URL", + "endpointsCollapse": "Zwiń", + "endpointsExpand": "Rozwiń", + "endpointsAnthropicNote": "Anthropic-native", + "endpointsResponsesNote": "OpenAI Responses — codex/github", + "endpointsWsNote": "WebSocket — tylko codex", + "betaText": "Quota Share działa, ale mogą występować błędy. Znaleziono jakiś? Zgłoś go.", + "betaReportLink": "Zgłoś problem", + "deleteGroup": "Usuń grupę", + "deleteGroupConfirm": "Usunąć tę grupę? Jej pule muszą najpierw zostać ponownie przypisane lub usunięte.", + "deleteGroupHasPools": "Ta grupa nadal zawiera pule — najpierw przypisz je ponownie lub usuń.", + "ungroupedTitle": "Niezgrupowane", + "ungroupedHint": "Te pule nie są przypisane do żadnej znanej grupy. Edytuj pulę, aby przenieść ją do rzeczywistej grupy." }, "plugins": { - "title": "Plugins", - "description": "Install and manage plugins for extending OmniRoute functionality", - "loading": "Loading plugins...", - "scanning": "Scanning...", - "scanForPlugins": "Scan for Plugins", - "noPlugins": "No plugins installed", - "noPluginsDescription": "Place plugin directories in ~/.omniroute/plugins/ and click Scan.", - "activate": "Activate", - "deactivate": "Deactivate", - "uninstall": "Uninstall", - "uninstallConfirm": "Uninstall plugin \"{name}\"?", - "pluginScanComplete": "Plugin scan complete", - "pluginScanFailed": "Plugin scan failed", - "activated": "{name} activated", - "deactivated": "{name} deactivated", - "activateFailed": "Failed to activate {name}", - "deactivateFailed": "Failed to deactivate {name}", - "uninstalled": "{name} uninstalled", - "uninstallFailed": "Failed to uninstall {name}", - "configure": "Configure: {name}", - "configurePlugin": "Configure", - "noConfigSettings": "This plugin has no configurable settings.", - "saving": "Saving...", - "saveConfiguration": "Save Configuration", - "configurationSaved": "Configuration saved", - "saveConfigurationFailed": "Failed to save configuration", - "pluginNotFound": "Plugin not found", - "version": "Version", - "author": "Author", - "description_label": "Description", + "title": "Wtyczki", + "description": "Instalowanie i zarządzanie wtyczkami w celu rozszerzenia funkcjonalności OmniRoute", + "loading": "Ładowanie wtyczek...", + "scanning": "Skanowanie...", + "scanForPlugins": "Skanuj w poszukiwaniu wtyczek", + "noPlugins": "Brak zainstalowanych wtyczek", + "noPluginsDescription": "Umieść katalogi wtyczek w ~/.omniroute/plugins/ i kliknij Skanuj.", + "activate": "Aktywuj", + "deactivate": "Dezaktywuj", + "uninstall": "Odinstaluj", + "uninstallConfirm": "Odinstalować wtyczkę \"{name}\"?", + "pluginScanComplete": "Zakończono skanowanie wtyczek", + "pluginScanFailed": "Skanowanie wtyczek nie powiodło się", + "activated": "Aktywowano {name}", + "deactivated": "Dezaktywowano {name}", + "activateFailed": "Nie udało się aktywować {name}", + "deactivateFailed": "Nie udało się dezaktywować {name}", + "uninstalled": "Odinstalowano {name}", + "uninstallFailed": "Nie udało się odinstalować {name}", + "configure": "Konfiguracja: {name}", + "configurePlugin": "Konfiguruj", + "noConfigSettings": "Ta wtyczka nie ma konfigurowalnych ustawień.", + "saving": "Zapisywanie...", + "saveConfiguration": "Zapisz konfigurację", + "configurationSaved": "Zapisano konfigurację", + "saveConfigurationFailed": "Nie udało się zapisać konfiguracji", + "pluginNotFound": "Nie znaleziono wtyczki", + "version": "Wersja", + "author": "Autor", + "description_label": "Opis", "status": "Status", - "enabled": "Enabled", - "disabled": "Disabled", - "installedTab": "__MISSING__:Installed", - "marketplaceTab": "__MISSING__:Marketplace", - "marketplaceUrlLabel": "__MISSING__:Custom Marketplace URL", - "marketplaceUrlPlaceholder": "__MISSING__:Leave empty for official Omniroute registry", - "saveMarketplaceUrl": "__MISSING__:Save & Reload", - "marketplaceUrlSaved": "__MISSING__:Marketplace URL updated", - "marketplaceEmpty": "__MISSING__:No plugins found in marketplace.", - "verified": "__MISSING__:Verified", - "install": "__MISSING__:Install", - "installedFromMarketplace": "__MISSING__:Plugin {name} installed!", + "enabled": "Włączone", + "disabled": "Wyłączone", + "installedTab": "Zainstalowane", + "marketplaceTab": "Marketplace", + "marketplaceUrlLabel": "Niestandardowy URL Marketplace", + "marketplaceUrlPlaceholder": "Pozostaw puste dla oficjalnego rejestru Omniroute", + "saveMarketplaceUrl": "Zapisz i przeładuj", + "marketplaceUrlSaved": "Zaktualizowano URL Marketplace", + "marketplaceEmpty": "Nie znaleziono wtyczek w Marketplace.", + "marketplaceInstallComingSoon": "Instalacja z Marketplace będzie dostępna wkrótce.", + "verified": "Zweryfikowano", + "install": "Instaluj", + "installedFromMarketplace": "Zainstalowano wtyczkę {name}!", "hooks": "Hooks" }, "quotaPlans": { - "title": "__MISSING__:Plans & Quotas", - "description": "__MISSING__:Configure quota plans per provider — dimensions (%, requests, tokens, $) and time windows", - "providerLabel": "__MISSING__:Provider / Connection", - "detectedPlanLabel": "__MISSING__:Detected plan", - "manualPlanLabel": "__MISSING__:Manual override", - "unconfiguredLabel": "__MISSING__:Not configured — manual required", - "dimensionLabel": "__MISSING__:Dimensions", - "addDimension": "__MISSING__:Add dimension", - "removeDimension": "__MISSING__:Remove", - "limitLabel": "__MISSING__:Limit", + "title": "Plany i quota", + "description": "Konfiguracja planów quota na provider — wymiary (%, requests, tokens, $) i okna czasowe", + "providerLabel": "Provider / Połączenie", + "detectedPlanLabel": "Wykryty plan", + "manualPlanLabel": "Ręczne nadpisanie", + "unconfiguredLabel": "Nieskonfigurowane — wymagana ręczna konfiguracja", + "dimensionLabel": "Wymiary", + "addDimension": "Dodaj wymiar", + "removeDimension": "Usuń", + "limitLabel": "Limit", "unitOptions": { - "percent": "__MISSING__:%", - "requests": "__MISSING__:requests", - "tokens": "__MISSING__:tokens", - "usd": "__MISSING__:USD ($)" + "percent": "%", + "requests": "żądania", + "tokens": "tokens", + "usd": "USD ($)" }, "windowOptions": { - "5h": "__MISSING__:5 hours", - "hourly": "__MISSING__:Hourly", - "daily": "__MISSING__:Daily", - "weekly": "__MISSING__:Weekly", - "monthly": "__MISSING__:Monthly" + "5h": "5 godzin", + "hourly": "Co godzinę", + "daily": "Codziennie", + "weekly": "Co tydzień", + "monthly": "Co miesiąc" }, - "useCatalogButton": "__MISSING__:Use catalog", - "saveOverrideButton": "__MISSING__:Save override", - "revertToCatalogButton": "__MISSING__:Revert to catalog", - "unknownProviderNotice": "__MISSING__:Select a provider on the left to configure its quota plan.", - "catalogTitle": "__MISSING__:Known catalog", - "catalogDescription": "__MISSING__:Automatically detected plans for the following providers:" + "useCatalogButton": "Użyj katalogu", + "saveOverrideButton": "Zapisz nadpisanie", + "revertToCatalogButton": "Przywróć z katalogu", + "unknownProviderNotice": "Wybierz provider po lewej stronie, aby skonfigurować jego plan quota.", + "catalogTitle": "Znany katalog", + "catalogDescription": "Automatycznie wykryte plany dla następujących providers:" }, "activity": { - "title": "__MISSING__:Activity", - "description": "__MISSING__:Recent events feed", - "emptyTitle": "__MISSING__:No activity yet", - "emptyDescription": "__MISSING__:When you add providers, create combos, or rotate keys, events will appear here.", - "todayHeader": "__MISSING__:Today", - "yesterdayHeader": "__MISSING__:Yesterday", - "filterAll": "__MISSING__:All", - "filterProviders": "__MISSING__:Providers", - "filterCombos": "__MISSING__:Combos", - "filterApiKeys": "__MISSING__:API Keys", - "filterSettings": "__MISSING__:Settings", - "filterQuota": "__MISSING__:Quota", - "filterAuth": "__MISSING__:Auth", - "filterSystem": "__MISSING__:System", + "title": "Aktywność", + "description": "Kanał ostatnich zdarzeń", + "emptyTitle": "Brak aktywności", + "emptyDescription": "Po dodaniu providers, utworzeniu combos lub rotacji kluczy, zdarzenia pojawią się tutaj.", + "todayHeader": "Dzisiaj", + "yesterdayHeader": "Wszoraj", + "filterAll": "Wszystko", + "filterProviders": "Providers", + "filterCombos": "Combos", + "filterApiKeys": "Klucze API", + "filterSettings": "Ustawienia", + "filterQuota": "Quota", + "filterAuth": "Auth", + "filterSystem": "System", "relative": { - "justNow": "__MISSING__:just now", - "minutesAgo": "__MISSING__:{n} min ago", - "hoursAgo": "__MISSING__:{n} h ago", - "yesterday": "__MISSING__:yesterday", - "daysAgo": "__MISSING__:{n} days ago" + "justNow": "przed chwilą", + "minutesAgo": "{n} min temu", + "hoursAgo": "{n} godz. temu", + "yesterday": "woczraj", + "daysAgo": "{n} dni temu" }, "eventVerb": { - "providerAdded": "__MISSING__:{actor} added provider {target}", - "providerRemoved": "__MISSING__:{actor} removed provider {target}", - "providerTested": "__MISSING__:{actor} tested provider {target}", - "comboCreated": "__MISSING__:{actor} created combo {target}", - "comboUpdated": "__MISSING__:{actor} updated combo {target}", - "comboDeleted": "__MISSING__:{actor} removed combo {target}", - "apiKeyCreated": "__MISSING__:{actor} created API key {target}", - "apiKeyRevoked": "__MISSING__:{actor} revoked API key {target}", - "apiKeyRotated": "__MISSING__:{actor} rotated API key {target}", - "budgetThreshold": "__MISSING__:Budget threshold reached for {target}", - "settingUpdated": "__MISSING__:{actor} updated setting {target}", - "authLogin": "__MISSING__:{actor} signed in", - "authLogout": "__MISSING__:{actor} signed out", - "cloudAgentSession": "__MISSING__:Cloud agent session started for {target}", - "mcpToolRegistered": "__MISSING__:MCP tool {target} registered", - "webhookCreated": "__MISSING__:{actor} created webhook {target}", - "webhookDeleted": "__MISSING__:{actor} removed webhook {target}", - "quotaPoolCreated": "__MISSING__:{actor} created quota pool {target}", - "quotaPoolUpdated": "__MISSING__:{actor} updated quota pool {target}", - "quotaPoolDeleted": "__MISSING__:{actor} removed quota pool {target}", - "quotaPlanUpdated": "__MISSING__:{actor} updated quota plan {target}", - "quotaStoreDriverChanged": "__MISSING__:QuotaStore driver changed", - "updateApplied": "__MISSING__:Update {target} applied", - "deployCompleted": "__MISSING__:Deploy completed", - "skillInstalled": "__MISSING__:{actor} installed skill {target}", - "skillRemoved": "__MISSING__:{actor} removed skill {target}", - "providerCredentialsCreated": "__MISSING__:{actor} created credentials for {target}", - "providerCredentialsApplied": "__MISSING__:Credentials for {target} applied", - "providerCredentialsUpdated": "__MISSING__:{actor} updated credentials for {target}", - "providerCredentialsRevoked": "__MISSING__:{actor} revoked credentials for {target}", - "providerCredentialsBatchRevoked": "__MISSING__:{actor} batch-revoked credentials", - "providerCredentialsBatchUpdated": "__MISSING__:{actor} batch-updated credentials", - "providerCredentialsBulkCreated": "__MISSING__:{actor} bulk-created credentials", - "providerCredentialsBulkImported": "__MISSING__:{actor} bulk-imported credentials", - "providerCredentialsImported": "__MISSING__:{actor} imported credentials", - "providerSsrfBlocked": "__MISSING__:SSRF attempt blocked for {target}", - "authLoginSuccess": "__MISSING__:{actor} signed in", - "authLoginError": "__MISSING__:Login error for {actor}", - "authLoginFailed": "__MISSING__:Login failed for {actor}", - "authLoginLocked": "__MISSING__:{actor} locked out after too many attempts", - "authLoginMisconfigured": "__MISSING__:Auth configuration invalid", - "authLoginSetupRequired": "__MISSING__:Auth setup required", - "authLogoutSuccess": "__MISSING__:{actor} signed out", - "syncTokenCreated": "__MISSING__:{actor} created sync token", - "syncTokenRevoked": "__MISSING__:{actor} revoked sync token", - "settingsUpdate": "__MISSING__:{actor} updated settings", - "settingsUpdateFailed": "__MISSING__:Settings update failed", - "serviceRevealApiKey": "__MISSING__:{actor} revealed API key for {target}", - "genericEvent": "__MISSING__:{actor} {target}" + "providerAdded": "{actor} dodał provider {target}", + "providerRemoved": "{actor} usunął provider {target}", + "providerTested": "{actor} przetestował provider {target}", + "comboCreated": "{actor} utworzył combo {target}", + "comboUpdated": "{actor} zaktualizował combo {target}", + "comboDeleted": "{actor} usunął combo {target}", + "apiKeyCreated": "{actor} utworzył klucz API {target}", + "apiKeyRevoked": "{actor} unieważnił klucz API {target}", + "apiKeyRotated": "{actor} zrotował klucz API {target}", + "budgetThreshold": "Osiągnięto próg budżetu dla {target}", + "settingUpdated": "{actor} zaktualizował ustawienie {target}", + "authLogin": "{actor} zalogował się", + "authLogout": "{actor} wylogował się", + "cloudAgentSession": "Rozpoczęto sesję cloud agent dla {target}", + "mcpToolRegistered": "Zarejestrowano narzędzie MCP {target}", + "webhookCreated": "{actor} utworzył webhook {target}", + "webhookDeleted": "{actor} usunął webhook {target}", + "quotaPoolCreated": "{actor} utworzył pulę quota {target}", + "quotaPoolUpdated": "{actor} zaktualizował pulę quota {target}", + "quotaPoolDeleted": "{actor} usunął pulę quota {target}", + "quotaPlanUpdated": "{actor} zaktualizował plan quota {target}", + "quotaStoreDriverChanged": "Zmieniono sterownik QuotaStore", + "updateApplied": "Zastosowano aktualizację {target}", + "deployCompleted": "Zakończono deploy", + "skillInstalled": "{actor} zainstalował skill {target}", + "skillRemoved": "{actor} usunął skill {target}", + "providerCredentialsCreated": "{actor} utworzył dane uwierzytelniające dla {target}", + "providerCredentialsApplied": "Zastosowano dane uwierzytelniające dla {target}", + "providerCredentialsUpdated": "{actor} zaktualizował dane uwierzytelniające dla {target}", + "providerCredentialsRevoked": "{actor} unieważnił dane uwierzytelniające dla {target}", + "providerCredentialsBatchRevoked": "{actor} masowo unieważnił dane uwierzytelniające", + "providerCredentialsBatchUpdated": "{actor} masowo zaktualizował dane uwierzytelniające", + "providerCredentialsBulkCreated": "{actor} masowo utworzył dane uwierzytelniające", + "providerCredentialsBulkImported": "{actor} masowo zaimportował dane uwierzytelniające", + "providerCredentialsImported": "{actor} zaimportował dane uwierzytelniające", + "providerSsrfBlocked": "Zablokowano próbę SSRF dla {target}", + "authLoginSuccess": "{actor} zalogował się", + "authLoginError": "Błąd logowania dla {actor}", + "authLoginFailed": "Logowanie nie powiodło się dla {actor}", + "authLoginLocked": "{actor} zablokowany po zbyt wielu próbach logowania", + "authLoginMisconfigured": "Nieprawidłowa konfiguracja Auth", + "authLoginSetupRequired": "Wymagana konfiguracja Auth", + "authLogoutSuccess": "{actor} wylogował się", + "syncTokenCreated": "{actor} utworzył sync token", + "syncTokenRevoked": "{actor} unieważnił sync token", + "settingsUpdate": "{actor} zaktualizował ustawienia", + "settingsUpdateFailed": "Aktualizacja ustawień nie powiodła się", + "serviceRevealApiKey": "{actor} ujawnił klucz API dla {target}", + "genericEvent": "{actor} {target}" } }, "agentBridge": { - "title": "__MISSING__:AgentBridge", - "subtitle": "__MISSING__:Use IDE agents with OmniRoute models — no config required", - "riskBannerTitle": "__MISSING__:Use at your own risk", - "riskBannerBody": "__MISSING__:AgentBridge intercepts HTTPS traffic from IDE agents. By activating it you accept responsibility for compliance with the terms of service of each agent. Never use on devices or networks where TLS inspection is prohibited.", - "riskBannerDismiss": "__MISSING__:Dismiss", - "serverCardTitle": "__MISSING__:AgentBridge Server", - "statusRunning": "__MISSING__:Running", - "statusStopped": "__MISSING__:Stopped", - "statusActive": "__MISSING__:Active", - "statusDnsOff": "__MISSING__:DNS off", - "statusSetupRequired": "__MISSING__:Setup required", - "statusInvestigating": "__MISSING__:Investigating", - "serverPort": "__MISSING__:Port", - "serverConns": "__MISSING__:Connections", - "serverIntercepted": "__MISSING__:Intercepted", - "serverLastStarted": "__MISSING__:Last started", - "startServer": "__MISSING__:Start", - "stopServer": "__MISSING__:Stop", - "restartServer": "__MISSING__:Restart", - "trustCert": "__MISSING__:Trust Cert", - "downloadCert": "__MISSING__:Download Cert", - "regenerateCert": "__MISSING__:Regenerate Cert", - "starting": "__MISSING__:Starting…", - "stopping": "__MISSING__:Stopping…", - "restarting": "__MISSING__:Restarting…", - "trusting": "__MISSING__:Trusting…", - "regenerating": "__MISSING__:Regenerating…", - "upstreamCaLabel": "__MISSING__:Upstream CA Certificate (corporate)", - "upstreamCaPlaceholder": "__MISSING__:/etc/ssl/certs/corp-ca.pem", - "upstreamCaTest": "__MISSING__:Test TLS", - "upstreamCaTestOk": "__MISSING__:TLS test passed", - "upstreamCaTestError": "__MISSING__:TLS test failed — check the path and CA file", - "bypassSectionTitle": "__MISSING__:Bypass List", - "bypassSectionDesc": "__MISSING__:Hosts matching these patterns are tunneled directly (no TLS decryption). Defaults include banks.gov, and corporate SSO.", - "bypassDefaultsLabel": "__MISSING__:Default bypass patterns (read-only)", - "bypassUserLabel": "__MISSING__:Custom bypass patterns (one per line, glob or regex)", - "saveBypassList": "__MISSING__:Save bypass list", - "agentListTitle": "__MISSING__:IDE Agents", - "filterAll": "__MISSING__:All", - "filterActive": "__MISSING__:Active", - "filterSetupRequired": "__MISSING__:Setup required", - "filterInvestigating": "__MISSING__:Investigating", - "searchAgents": "__MISSING__:Search agents…", - "noAgentsMatch": "__MISSING__:No agents match the current filter", - "agentHosts": "__MISSING__:Intercepted hosts", - "certTrusted": "__MISSING__:Certificate trusted", - "certNotTrusted": "__MISSING__:Certificate not trusted", - "investigatingNotice": "__MISSING__:This agent is under investigation. Hosts and API surface are still being confirmed. Setup will be available once the upstream API is documented.", - "modelMappingsLabel": "__MISSING__:Model mappings", - "sourceModel": "__MISSING__:Source model (agent native)", - "targetModel": "__MISSING__:Target model (OmniRoute)", - "noMappings": "__MISSING__:No model mappings configured. Run setup wizard to auto-detect models.", - "selectModel": "__MISSING__:Select…", - "saveMappings": "__MISSING__:Save mappings", - "setupWizard": "__MISSING__:Setup wizard", - "startDns": "__MISSING__:Start DNS", - "stopDns": "__MISSING__:Stop DNS", - "toggling": "__MISSING__:Toggling…", - "viewTraffic": "__MISSING__:View traffic", - "emptyNoProvidersTitle": "__MISSING__:No providers configured yet", - "emptyNoProvidersBody": "__MISSING__:To use AgentBridge, first connect at least one provider. It will be the destination where IDE requests are routed.", - "emptyGoToProviders": "__MISSING__:Go to Providers", - "wizardTitle": "__MISSING__:Setup wizard", - "wizardSubtitle": "__MISSING__:3-step setup", - "wizardStep1Label": "__MISSING__:Verify", - "wizardStep2Label": "__MISSING__:DNS", - "wizardStep3Label": "__MISSING__:Mappings", - "wizardStep1Desc": "__MISSING__:Confirm the server is running and the certificate is installed.", - "wizardStep2Desc": "__MISSING__:The following entries will be added to /etc/hosts to redirect traffic through AgentBridge:", - "wizardStep3Desc": "__MISSING__:You can now configure model mappings in the agent card. Restart the IDE to apply changes.", - "wizardStep3Success": "__MISSING__:Agent is configured!", - "wizardServerCheck": "__MISSING__:AgentBridge server", - "wizardRunning": "__MISSING__:running", - "wizardNotRunning": "__MISSING__:not running", - "wizardCertCheck": "__MISSING__:Certificate", - "wizardTrusted": "__MISSING__:trusted", - "wizardNotTrusted": "__MISSING__:not yet trusted — use Trust Cert button", - "wizardTutorialTitle": "__MISSING__:Setup instructions:", - "wizardEnableDns": "__MISSING__:Add /etc/hosts entries", - "wizardDnsAlreadyEnabled": "__MISSING__:DNS already enabled for this agent", - "enablingDns": "__MISSING__:Enabling…", - "modelSelectorTitle": "__MISSING__:Select target model", - "modelSelectorSearch": "__MISSING__:Search models…", - "noModelsFound": "__MISSING__:No models found", - "quickLinks": "__MISSING__:Quick links", - "quickLinkProviders": "__MISSING__:Configure providers", - "quickLinkInspector": "__MISSING__:View traffic in Traffic Inspector", - "maintenanceTitle": "__MISSING__:Maintenance & Diagnostics", - "maintenanceSubtitle": "__MISSING__:Self-test the capture pipeline, undo leftover system state, and move your setup between machines.", - "orphanedStateWarning": "__MISSING__:A previous session left system state behind (DNS spoof, CA, or system proxy). Run Repair to clean it up.", - "diagnose": "__MISSING__:Diagnose", - "diagnosing": "__MISSING__:Diagnosing…", - "diagnoseHealthy": "__MISSING__:Capture pipeline is healthy.", - "diagnoseUnhealthy": "__MISSING__:Capture pipeline has problems:", - "repair": "__MISSING__:Repair", - "repairing": "__MISSING__:Repairing…", - "repairDone": "__MISSING__:Repaired: {items}", - "repairNothing": "__MISSING__:Nothing to repair — system state is clean.", - "removeCa": "__MISSING__:Remove CA", - "removeCaConfirm": "__MISSING__:Remove CA?", - "removeCaDone": "__MISSING__:MITM root CA removed from the OS trust store.", - "removing": "__MISSING__:Removing…", - "confirm": "__MISSING__:Confirm", - "exportConfig": "__MISSING__:Export config", - "exporting": "__MISSING__:Exporting…", - "importConfig": "__MISSING__:Import config", - "importing": "__MISSING__:Importing…", - "importInvalidJson": "__MISSING__:The selected file is not valid JSON.", - "importDone": "__MISSING__:Imported {bypass} bypass · {hosts} hosts · {agents} agents", - "save": "__MISSING__:Save", - "saving": "__MISSING__:Saving…", - "cancel": "__MISSING__:Cancel", - "back": "__MISSING__:Back", - "next": "__MISSING__:Next", - "done": "__MISSING__:Done", - "loading": "__MISSING__:Loading…", - "riskNoticeTitle": "__MISSING__:Risk acknowledgment", - "riskNoticeBody": "__MISSING__:AgentBridge will intercept HTTPS traffic from this agent by redirecting its API hosts via DNS. Only enable if you accept responsibility for compliance with the agent's terms of service and any applicable network policies.", + "title": "AgentBridge", + "subtitle": "Używaj agentów IDE z models OmniRoute — bez wymaganej konfiguracji", + "riskBannerTitle": "Użycie na własne ryzyko", + "riskBannerBody": "AgentBridge przechwytuje ruch HTTPS z agentów IDE. Aktywując go, akceptujesz odpowiedzialność za zgodność z warunkami korzystania z usług każdego agenta. Nigdy nie używać na urządzeniach ani w sieciach, w których inspekcja TLS jest zabroniona.", + "riskBannerDismiss": "Zamknij", + "serverCardTitle": "Serwer AgentBridge", + "statusRunning": "Uruchomiony", + "statusStopped": "Zatrzymany", + "statusActive": "Aktywny", + "statusDnsOff": "DNS wyłączony", + "statusSetupRequired": "Wymagana konfiguracja", + "statusInvestigating": "Badanie", + "serverPort": "Port", + "serverConns": "Połączenia", + "serverIntercepted": "Przechwycone", + "serverLastStarted": "Ostatnio uruchomiony", + "startServer": "Uruchom", + "stopServer": "Zatrzymaj", + "restartServer": "Uruchom ponownie", + "trustCert": "Zaufaj certyfikatowi", + "downloadCert": "Pobierz certyfikat", + "certManualTitle": "Certyfikat nie mógł zostać zainstalowany automatycznie (np. wewnątrz kontenera). Bridge może nadal działać — zaufaj CA ręcznie:", + "regenerateCert": "Wygeneruj certyfikat ponownie", + "starting": "Uruchamianie…", + "stopping": "Zatrzymywanie…", + "restarting": "Ponowne uruchamianie…", + "trusting": "Dodawanie zaufania…", + "regenerating": "Regenerowanie…", + "upstreamCaLabel": "Nadrzędny certyfikat CA (firmowy)", + "upstreamCaPlaceholder": "/etc/ssl/certs/corp-ca.pem", + "upstreamCaTest": "Testuj TLS", + "upstreamCaTestOk": "Test TLS zakończony pomyślnie", + "upstreamCaTestError": "Test TLS nie powiódł się — sprawdź ścieżkę i plik CA", + "bypassSectionTitle": "Lista bypass", + "bypassSectionDesc": "Hosty pasujące do tych wzorców są tunelowane bezpośrednio (bez deszyfrowania TLS). Domyślne wartości obejmują banks.gov i firmowe SSO.", + "bypassDefaultsLabel": "Domyślne wzorce bypass (tylko do odczytu)", + "bypassUserLabel": "Własne wzorce bypass (jeden w linii, glob lub regex)", + "saveBypassList": "Zapisz listę bypass", + "agentListTitle": "Agenci IDE", + "filterAll": "Wszystkie", + "filterActive": "Aktywne", + "filterSetupRequired": "Wymagana konfiguracja", + "filterInvestigating": "Badanie", + "searchAgents": "Szukaj agentów…", + "noAgentsMatch": "Brak agentów pasujących do bieżącego filtra", + "agentHosts": "Przechwycone hosty", + "certTrusted": "Certyfikat zaufany", + "certNotTrusted": "Certyfikat niezaufany", + "investigatingNotice": "Ten agent jest w trakcie badania. Hosty i obszar API są nadal potwierdzane. Setup będzie dostępny po udokumentowaniu nadrzędnego API.", + "modelMappingsLabel": "Mapowania model", + "sourceModel": "Source model (agent native)", + "targetModel": "Target model (OmniRoute)", + "noMappings": "Brak skonfigurowanych mapowań model. Uruchom kreator konfiguracji, aby automatycznie wykryć models.", + "selectModel": "Wybierz…", + "saveMappings": "Zapisz mapowania", + "setupWizard": "Kreator konfiguracji", + "startDns": "Uruchom DNS", + "stopDns": "Zatrzymaj DNS", + "toggling": "Przełączanie…", + "viewTraffic": "Pokaż ruch", + "emptyNoProvidersTitle": "Brak skonfigurowanych providers", + "emptyNoProvidersBody": "Aby używać AgentBridge, najpierw połącz co najmniej jeden provider. Będzie to cel, do którego będą kierowane żądania z IDE.", + "emptyGoToProviders": "Przejdź do Providers", + "wizardTitle": "Kreator konfiguracji", + "wizardSubtitle": "Konfiguracja w 3 krokach", + "wizardStep1Label": "Zweryfikuj", + "wizardStep2Label": "DNS", + "wizardStep3Label": "Mapowania", + "wizardStep1Desc": "Potwierdź, że serwer działa i certyfikat jest zainstalowany.", + "wizardStep2Desc": "Następujące wpisy zostaną dodane do /etc/hosts, aby przekierować ruch przez AgentBridge:", + "wizardStep3Desc": "Można teraz skonfigurować mapowania model na karcie agenta. Uruchom ponownie IDE, aby zastosować zmiany.", + "wizardStep3Success": "Agent został skonfigurowany!", + "wizardServerCheck": "Serwer AgentBridge", + "wizardRunning": "działa", + "wizardNotRunning": "nie działa", + "wizardCertCheck": "Certyfikat", + "wizardTrusted": "zaufany", + "wizardNotTrusted": "jeszcze niezaufany — użyj przycisku Zaufaj certyfikatowi", + "wizardTutorialTitle": "Instrukcja konfiguracji:", + "wizardEnableDns": "Dodaj wpisy do /etc/hosts", + "wizardDnsAlreadyEnabled": "DNS już włączony dla tego agenta", + "enablingDns": "Włączanie…", + "modelSelectorTitle": "Wybierz docelowy model", + "modelSelectorSearch": "Szukaj models…", + "noModelsFound": "Nie znaleziono models", + "quickLinks": "Szybkie linki", + "quickLinkProviders": "Konfiguruj providers", + "quickLinkInspector": "Zobacz ruch w Traffic Inspector", + "maintenanceTitle": "Konserwacja i diagnostyka", + "maintenanceSubtitle": "Przeprowadź autotest potoku przechwytywania, cofnij pozostałości stanu systemu i przenieś swoją konfigurację między maszynami.", + "orphanedStateWarning": "Poprzednia sesja pozostawiła stan systemu (DNS spoof, CA lub system proxy). Uruchom Napraw, aby go wyczyścić.", + "diagnose": "Diagnozuj", + "diagnosing": "Diagnozowanie…", + "diagnoseHealthy": "Potok przechwytywania jest sprawny.", + "diagnoseUnhealthy": "Potok przechwytywania ma problemy:", + "repair": "Napraw", + "repairing": "Naprawianie…", + "repairDone": "Naprawiono: {items}", + "repairNothing": "Nic do naprawy — stan systemu jest czysty.", + "removeCa": "Usuń CA", + "removeCaConfirm": "Usunąć CA?", + "removeCaDone": "Główny certyfikat CA MITM został usunięty z magazynu zaufania systemu operacyjnego.", + "removing": "Usuwanie…", + "confirm": "Potwierdź", + "exportConfig": "Eksportuj konfigurację", + "exporting": "Eksportowanie…", + "importConfig": "Importuj konfigurację", + "importing": "Importowanie…", + "importInvalidJson": "Wybrany plik nie jest prawidłowym JSON.", + "importDone": "Zaimportowano {bypass} bypass · {hosts} hostów · {agents} agentów", + "save": "Zapisz", + "saving": "Zapisywanie…", + "cancel": "Anuluj", + "back": "Wstecz", + "next": "Dalej", + "done": "Gotowe", + "loading": "Loading…", + "riskNoticeTitle": "Potwierdzenie ryzyka", + "riskNoticeBody": "AgentBridge będzie przechwytywać ruch HTTPS z tego agenta, przekierowując jego hosty API przez DNS. Włącz tylko wtedy, gdy akceptujesz odpowiedzialność za zgodność z warunkami korzystania z usług agenta i wszelkimi obowiązującymi zasadami sieciowymi.", "pageMoved": { - "goNow": "__MISSING__:Go now", - "message": "__MISSING__:The MITM Proxy now lives under AgentBridge.", - "title": "__MISSING__:This page has moved" + "goNow": "Przejdź teraz", + "message": "MITM Proxy znajduje się teraz w sekcji AgentBridge.", + "title": "Ta strona została przeniesiona" } }, "trafficInspector": { - "title": "__MISSING__:Traffic Inspector", - "subtitle": "__MISSING__:Monitor LLM calls and debug any application's HTTPS traffic", - "captureModesTitle": "__MISSING__:Capture Modes", - "agentBridgeMode": "__MISSING__:AgentBridge", - "agentBridgeModeDesc": "__MISSING__:Capture traffic from all connected IDE agents", - "customHostsMode": "__MISSING__:Custom Hosts", - "customHostsModeDesc": "__MISSING__:Add specific hosts to intercept", - "httpProxyMode": "__MISSING__:HTTP Proxy", - "httpProxyModeDesc": "__MISSING__:Use HTTP_PROXY environment variable", - "systemWideMode": "__MISSING__:System-wide", - "systemWideModeDesc": "__MISSING__:Intercept all system traffic (advanced)", - "tproxyMode": "__MISSING__:TPROXY Decrypt", - "tproxyModeUnavailable": "__MISSING__:TPROXY decrypt requires Linux + root + the native addon", - "filterBarTitle": "__MISSING__:Filters", - "profileLlmOnly": "__MISSING__:LLM only", - "profileCustom": "__MISSING__:Custom", - "profileAll": "__MISSING__:All", - "filterHost": "__MISSING__:Filter host…", - "filterAgent": "__MISSING__:Agent", - "filterStatus": "__MISSING__:Status", - "pauseBtn": "__MISSING__:Pause", - "resumeBtn": "__MISSING__:Resume", - "clearBtn": "__MISSING__:Clear", - "exportHar": "__MISSING__:Export .har", - "recordSession": "__MISSING__:REC", - "stopSession": "__MISSING__:Stop", - "liveBadge": "__MISSING__:live", - "offlineBadge": "__MISSING__:offline", - "noRequests": "__MISSING__:No requests captured yet.", - "noRequestsDesc": "__MISSING__:Make sure AgentBridge is running or enable another capture mode.", - "selectRequest": "__MISSING__:Select a request to inspect it.", - "tabConversation": "__MISSING__:Conversation", - "tabHeaders": "__MISSING__:Headers", - "tabRequest": "__MISSING__:Request", - "tabResponse": "__MISSING__:Response", - "tabTiming": "__MISSING__:Timing", - "tabLlm": "__MISSING__:LLM", - "tabStats": "__MISSING__:Stats", - "requestHeaders": "__MISSING__:Request Headers", - "responseHeaders": "__MISSING__:Response Headers", - "rawEvents": "__MISSING__:Raw events", - "mergedView": "__MISSING__:Merged view", - "noBody": "__MISSING__:No body.", - "streaming": "__MISSING__:streaming…", - "manageHosts": "__MISSING__:Manage hosts", - "copySnippet": "__MISSING__:Copy proxy snippet", - "addHost": "__MISSING__:Add", - "hostPlaceholder": "__MISSING__:api.openai.com", - "noHostsYet": "__MISSING__:No custom hosts added yet.", - "noSessionsYet": "__MISSING__:No sessions yet", - "allTraffic": "__MISSING__:All traffic (no session)", - "sessionsDropdown": "__MISSING__:Sessions", - "annotationPlaceholder": "__MISSING__:Add a note…", - "contextFingerprint": "__MISSING__:Context fingerprint", - "llmProvider": "__MISSING__:Detected provider", - "llmApiKind": "__MISSING__:API kind", - "llmModel": "__MISSING__:Model", - "llmMessages": "__MISSING__:Messages", - "llmStream": "__MISSING__:Stream", - "llmMappedTo": "__MISSING__:Mapped to", - "llmCostEstimate": "__MISSING__:Cost estimate", - "systemProxyExitWarning": "__MISSING__:System-wide proxy still active — leave page anyway?", - "customHostsTitle": "__MISSING__:Custom Hosts", - "loading": "__MISSING__:Loading…", - "copied": "__MISSING__:Copied!", - "copy": "__MISSING__:Copy", - "httpProxyTitle": "__MISSING__:HTTP Proxy Snippet — port {port}", - "notRecording": "__MISSING__:Not recording", - "anyStatus": "__MISSING__:Any status", - "liveOnly": "__MISSING__:Live", - "viewingRecordedSession": "__MISSING__:Viewing recorded session", - "backToLive": "__MISSING__:Back to live", - "untitledSession": "__MISSING__:Untitled session", - "contextHistory": "__MISSING__:Context History", - "modelResponse": "__MISSING__:Model Response", - "conversationNoMessages": "__MISSING__:No messages found in this request.", - "conversationNotAvailable": "__MISSING__:Conversation data not available. This may not be an LLM request or the body could not be parsed.", - "loadingCharts": "__MISSING__:Loading charts…", - "statsErrors": "__MISSING__:Errors", - "statsLatency": "__MISSING__:Latency (last 50 requests)", - "statsNoData": "__MISSING__:No requests yet. Start a session recording to capture data for stats.", - "statsStatusDistribution": "__MISSING__:Status distribution", - "statsSuccessful": "__MISSING__:Successful", - "statsTotalRequests": "__MISSING__:Total requests", - "timingProxyOverhead": "__MISSING__:Proxy overhead", - "timingUpstreamResponse": "__MISSING__:Upstream response", - "timingNoData": "__MISSING__:No timing data available.", - "timingTotalLatency": "__MISSING__:Total latency", - "timingTimestamp": "__MISSING__:Timestamp", - "timingMethod": "__MISSING__:Method", - "timingStatus": "__MISSING__:Status", - "timingRequestSize": "__MISSING__:Request size", - "timingResponseSize": "__MISSING__:Response size", - "pausedNewBadge": "__MISSING__:{count} new", - "clearContextFilter": "__MISSING__:clear" + "title": "Traffic Inspector", + "subtitle": "Monitoruj połączenia LLM i debuguj ruch HTTPS dowolnej aplikacji", + "captureModesTitle": "Tryby przechwytywania", + "agentBridgeMode": "AgentBridge", + "agentBridgeModeDesc": "Przechwytuj ruch ze wszystkich połączonych agentów IDE", + "customHostsMode": "Własne hosty", + "customHostsModeDesc": "Dodaj określone hosty do przechwytywania", + "httpProxyMode": "HTTP Proxy", + "httpProxyModeDesc": "Użyj zmiennej środowiskowej HTTP_PROXY", + "systemWideMode": "Cały system", + "systemWideModeDesc": "Przechwytuj cały ruch systemowy (zaawansowane)", + "tproxyMode": "Deszyfrowanie TPROXY", + "tproxyModeUnavailable": "Deszyfrowanie TPROXY wymaga systemu Linux + root + natywnego dodatku", + "filterBarTitle": "Filtry", + "profileLlmOnly": "Tanko LLM", + "profileCustom": "Własne", + "profileAll": "Wszystkie", + "filterHost": "Filtruj host…", + "filterAgent": "Agent", + "filterStatus": "Status", + "pauseBtn": "Wstrzymaj", + "resumeBtn": "Wznów", + "clearBtn": "Wyczyść", + "exportHar": "Eksportuj .har", + "recordSession": "REC", + "stopSession": "Stop", + "liveBadge": "live", + "offlineBadge": "offline", + "noRequests": "Nie przechwycono jeszcze żadnych żądań.", + "noRequestsDesc": "Upewnij się, że AgentBridge działa lub włącz inny tryb przechwytywania.", + "selectRequest": "Wybierz żądanie, aby je zbadać.", + "tabConversation": "Konwersacja", + "tabHeaders": "Nagłówki", + "tabRequest": "Żądanie", + "tabResponse": "Odpowiedź", + "tabTiming": "Czas", + "tabLlm": "LLM", + "tabStats": "Statystyki", + "requestHeaders": "Nagłówki żądania", + "responseHeaders": "Nagłówki odpowiedzi", + "rawEvents": "Surowe zdarzenia", + "mergedView": "Widok scalony", + "noBody": "Brak treści.", + "streaming": "streaming…", + "manageHosts": "Zarządzaj hostami", + "copySnippet": "Kopiuj fragment proxy", + "addHost": "Dodaj", + "hostPlaceholder": "api.openai.com", + "noHostsYet": "Nie dodano jeszcze własnych hostów.", + "noSessionsYet": "Brak sesji", + "allTraffic": "Cały ruch (brak sesji)", + "sessionsDropdown": "Sesje", + "annotationPlaceholder": "Dodaj notatkę…", + "contextFingerprint": "Fingerprint kontekstu", + "llmProvider": "Wykryty provider", + "llmApiKind": "Typ API", + "llmModel": "model", + "llmMessages": "Wiadomości", + "llmStream": "Stream", + "llmMappedTo": "Zmapowano do", + "llmCostEstimate": "Szacowany koszt", + "systemProxyExitWarning": "Proxy systemowe jest nadal aktywne — czy na pewno opuścić stronę?", + "customHostsTitle": "Własne hosty", + "loading": "Loading…", + "copied": "Skopiowano!", + "copy": "Kopiuj", + "httpProxyTitle": "Fragment HTTP Proxy — port {port}", + "notRecording": "Brak nagrywania", + "anyStatus": "Dowolny status", + "liveOnly": "Live", + "viewingRecordedSession": "Podgląd nagranej sesji", + "backToLive": "Powrót do live", + "untitledSession": "Sesja bez nazwy", + "contextHistory": "Historia kontekstu", + "modelResponse": "Odpowiedź model", + "conversationNoMessages": "Nie znaleziono wiadomości w tym żądaniu.", + "conversationNotAvailable": "Dane konwersacji są niedostępne. To może nie być żądanie LLM lub treść nie mogła zostać przetworzona.", + "loadingCharts": "Loading charts…", + "statsErrors": "Błędy", + "statsLatency": "Opóźnienie (ostatnie 50 żądań)", + "statsNoData": "Brak żądań. Rozpocznij nagrywanie sesji, aby przechwycić dane do statystyk.", + "statsStatusDistribution": "Rozkład statusów", + "statsSuccessful": "Pomyślne", + "statsTotalRequests": "Łączna liczba żądań", + "timingProxyOverhead": "Narzut proxy", + "timingUpstreamResponse": "Odpowiedź nadrzędna", + "timingNoData": "Brak dostępnych danych o czasie.", + "timingTotalLatency": "Całkowite opóźnienie", + "timingTimestamp": "Znacznik czasu", + "timingMethod": "Metoda", + "timingStatus": "Status", + "timingRequestSize": "Rozmiar żądania", + "timingResponseSize": "Rozmiar odpowiedzi", + "pausedNewBadge": "{count} nowe", + "clearContextFilter": "wyczyść" }, "cliCommon": { "concept": { "code": { - "title": "__MISSING__:CLI Code", - "phrase": "__MISSING__:Code tools you point at OmniRoute", - "flow": "__MISSING__:You → CLI Code → OmniRoute → Provider", - "seeOther": "__MISSING__:See →" + "title": "CLI Code", + "phrase": "Narzędzia Code kierowane do OmniRoute", + "flow": "Użytkownik → CLI Code → OmniRoute → Provider", + "seeOther": "Zobacz →" }, "agent": { - "title": "__MISSING__:CLI Agents", - "phrase": "__MISSING__:Broad-purpose autonomous CLI agents you point at OmniRoute", - "flow": "__MISSING__:You → CLI Agent → OmniRoute → Provider", - "seeOther": "__MISSING__:See →" + "title": "Agenci CLI", + "phrase": "Autonomiczni agenci CLI ogólnego przeznaczenia kierowani do OmniRoute", + "flow": "Użytkownik → Agent CLI → OmniRoute → Provider", + "seeOther": "Zobacz →" }, "acp": { - "title": "__MISSING__:ACP Agents", - "phrase": "__MISSING__:CLIs that OmniRoute spawns as execution backend (reverse flow)", - "flow": "__MISSING__:Client → OmniRoute → spawn CLI (stdio/ACP) → response", - "seeOther": "__MISSING__:See →" + "title": "Agenci ACP", + "phrase": "Interfejsy CLI uruchamiane przez OmniRoute jako backend wykonawczy (przepływ odwrotny)", + "flow": "Klient → OmniRoute → uruchomienie CLI (stdio/ACP) → odpowiedź", + "seeOther": "Zobacz →" } }, "comparison": { - "title": "__MISSING__:Understand the 3 CLI types in OmniRoute", - "thisPage": "__MISSING__:This page", - "open": "__MISSING__:Open →", + "title": "Zrozumienie 3 typów CLI w OmniRoute", + "thisPage": "Ta strona", + "open": "Otwórz →", "code": { - "title": "__MISSING__:Code tool", - "desc": "__MISSING__:Points to Omni", - "flow": "__MISSING__:you → CLI → Omni → provider", - "examples": "__MISSING__:e.g.: claude, codex" + "title": "Narzędzie Code", + "desc": "Kieruje do Omni", + "flow": "użytkownik → CLI → Omni → provider", + "examples": "np. claude, codex" }, "agent": { - "title": "__MISSING__:Broad autonomous agent", - "desc": "__MISSING__:Points to Omni", - "flow": "__MISSING__:you → agent → Omni", - "examples": "__MISSING__:e.g.: hermes, goose" + "title": "Autonomiczny agent ogólnego przeznaczenia", + "desc": "Kieruje do Omni", + "flow": "użytkownik → agent → Omni", + "examples": "np. hermes, goose" }, "acp": { - "title": "__MISSING__:CLI used as backend by Omni", - "desc": "__MISSING__:Reverse execution", - "flow": "__MISSING__:Omni → spawn CLI → resp", - "examples": "__MISSING__:e.g.: claude, codex (ACP)" + "title": "CLI używane jako backend przez Omni", + "desc": "Odwrotne wykonywanie", + "flow": "Omni → uruchomienie CLI → odp", + "examples": "np. claude, codex (ACP)" } }, "card": { - "detected": "__MISSING__:Detected", - "notDetected": "__MISSING__:Not detected", - "configured": "__MISSING__:Configured", - "notConfigured": "__MISSING__:Not configured", - "configure": "__MISSING__:Configure →", - "howToInstall": "__MISSING__:How to install →", - "manualConfig": "__MISSING__:Manual config", - "installGuide": "__MISSING__:Install guide", - "endpointLabel": "__MISSING__:Endpoint", - "baseUrlFull": "__MISSING__:Full Base URL", - "baseUrlPartial": "__MISSING__:Partial Base URL", - "refreshDetection": "__MISSING__:Refresh detection", - "alsoAcp": "__MISSING__:also ACP", - "connectProviderHint": "__MISSING__:Connect a provider in Providers" + "detected": "Wykryto", + "notDetected": "Nie wykryto", + "configured": "Skonfigurowano", + "notConfigured": "Nieskonfigurowane", + "configure": "Skonfiguruj →", + "howToInstall": "Jak zainstalować →", + "manualConfig": "Konfiguracja ręczna", + "installGuide": "Instrukcja instalacji", + "endpointLabel": "Endpoint", + "baseUrlFull": "Pełny bazowy URL", + "baseUrlPartial": "Częściowy bazowy URL", + "refreshDetection": "Odśwież wykrywanie", + "alsoAcp": "również ACP", + "connectProviderHint": "Połącz provider w Providers" }, "detail": { - "back": "__MISSING__:Back", - "apply": "__MISSING__:Save", - "reset": "__MISSING__:Clear", - "manualConfig": "__MISSING__:Manual configuration", - "vendor": "__MISSING__:Vendor", - "category": "__MISSING__:Type", - "detectionStatus": "__MISSING__:Detection", - "configStatus": "__MISSING__:Configuration", - "baseUrlLabel": "__MISSING__:Base URL", - "apiKeyLabel": "__MISSING__:API Key", - "modelMappingLabel": "__MISSING__:Model mapping", - "noActiveProviders": "__MISSING__:No active providers.", - "noActiveProvidersDesc": "__MISSING__:Go to Providers to connect at least 1 provider before configuring the CLI.", - "openProviders": "__MISSING__:Open Providers →" + "back": "Wstecz", + "apply": "Zapisz", + "reset": "Wyczyść", + "manualConfig": "Konfiguracja ręczna", + "vendor": "Dostawca", + "category": "Typ", + "detectionStatus": "Wykrywanie", + "configStatus": "Konfiguracja", + "baseUrlLabel": "Bazowy URL", + "apiKeyLabel": "Klucz API", + "modelMappingLabel": "Mapowanie modeli", + "noActiveProviders": "Brak aktywnych providers.", + "noActiveProvidersDesc": "Przejdź do Providers, aby połączyć co najmniej 1 provider przed konfiguracją CLI.", + "openProviders": "Otwórz Providers →" } }, "cliCode": { - "pageTitle": "__MISSING__:CLI Code's", - "pageSubtitle": "__MISSING__:Code tools pointing to OmniRoute", - "searchPlaceholder": "__MISSING__:Search CLI…", - "filterDetectionLabel": "__MISSING__:Detection", - "filterBaseUrlLabel": "__MISSING__:Base URL", - "detectionAll": "__MISSING__:All", - "detectionInstalled": "__MISSING__:Installed", - "detectionNotFound": "__MISSING__:Not found", - "baseUrlAll": "__MISSING__:All", - "baseUrlFull": "__MISSING__:Full", - "baseUrlPartial": "__MISSING__:Partial" + "pageTitle": "CLI Code", + "pageSubtitle": "Narzędzia Code kierujące do OmniRoute", + "searchPlaceholder": "Szukaj CLI…", + "filterDetectionLabel": "Wykrywanie", + "filterBaseUrlLabel": "Bazowy URL", + "detectionAll": "Wszystkie", + "detectionInstalled": "Zainstalowane", + "detectionNotFound": "Nie znaleziono", + "baseUrlAll": "Wszystkie", + "baseUrlFull": "Pełny", + "baseUrlPartial": "Częściowy" }, "cliAgents": { - "pageTitle": "__MISSING__:CLI Agents", - "pageSubtitle": "__MISSING__:Broad-purpose autonomous CLI agents", - "refreshDetection": "__MISSING__:Refresh detection", - "searchPlaceholder": "__MISSING__:Search agent…", - "detectionFilterLabel": "__MISSING__:Detection", - "detectionAll": "__MISSING__:All", - "detectionInstalled": "__MISSING__:Installed", - "detectionNotInstalled": "__MISSING__:Not installed", - "visibleCount": "__MISSING__:{count} visible", - "emptyState": "__MISSING__:No CLI agents found with the current filters." + "pageTitle": "Agenci CLI", + "pageSubtitle": "Autonomiczni agenci CLI ogólnego przeznaczenia", + "refreshDetection": "Odśwież wykrywanie", + "searchPlaceholder": "Szukaj agenta…", + "detectionFilterLabel": "Wykrywanie", + "detectionAll": "Wszystkie", + "detectionInstalled": "Zainstalowane", + "detectionNotInstalled": "Niezainstalowane", + "visibleCount": "{count} widocznych", + "emptyState": "Nie znaleziono agentów CLI z obecnymi filtrami." }, "acpAgents": { - "pageTitle": "__MISSING__:ACP Agents", - "pageSubtitle": "__MISSING__:CLIs that OmniRoute spawns as execution backend", - "scanning": "__MISSING__:Detecting agents…", - "refresh": "__MISSING__:Refresh", - "setupGuideTitle": "__MISSING__:Setup guide", - "setupGuideDetectCliTitle": "__MISSING__:Detect CLI", - "setupGuideDetectCliDesc": "__MISSING__:Agents are identified by running the --version command in PATH.", - "setupGuideCustomAgentTitle": "__MISSING__:Add custom agent", - "setupGuideCustomAgentDesc": "__MISSING__:Fill in the form below to register a custom CLI agent.", - "setupGuideCommandMissingTitle": "__MISSING__:Command not found", - "setupGuideCommandMissingDesc": "__MISSING__:Check that the binary is in PATH.", - "fingerprintSettingsHint": "__MISSING__:Configure routing and fingerprints in", - "settingsRoutingLink": "__MISSING__:Settings → Routing", - "installed": "__MISSING__:Installed", - "notFound": "__MISSING__:Not found", - "builtIn": "__MISSING__:Built-in", - "custom": "__MISSING__:Custom", - "agentUseCaseHint": "__MISSING__:Available for spawn via ACP.", - "remove": "__MISSING__:Remove", - "addCustomAgent": "__MISSING__:Add custom agent", - "addCustomAgentDesc": "__MISSING__:Register a custom CLI agent to be spawned via ACP.", - "addAgent": "__MISSING__:Add agent", - "agentName": "__MISSING__:Name", - "agentNamePlaceholder": "__MISSING__:e.g.: My Agent", - "binaryName": "__MISSING__:Binary", - "binaryNamePlaceholder": "__MISSING__:e.g.: myagent", - "versionCommand": "__MISSING__:Version command", - "versionCommandPlaceholder": "__MISSING__:e.g.: myagent --version", - "spawnArgs": "__MISSING__:Spawn arguments", - "spawnArgsPlaceholder": "__MISSING__:e.g.: --quiet, --json", - "cliCodeRedirectCta": "__MISSING__:Open CLI Code" + "pageTitle": "Agenci ACP", + "pageSubtitle": "Interfejsy CLI uruchamiane przez OmniRoute jako backend wykonawczy", + "scanning": "Wykrywanie agentów…", + "refresh": "Odśwież", + "setupGuideTitle": "Instrukcja konfiguracji", + "setupGuideDetectCliTitle": "Wykrywanie CLI", + "setupGuideDetectCliDesc": "Agenci są identyfikowani przez uruchomienie polecenia --version w PATH.", + "setupGuideCustomAgentTitle": "Dodaj niestandardowego agenta", + "setupGuideCustomAgentDesc": "Wypełnij poniższy formularz, aby zarejestrować niestandardowego agenta CLI.", + "setupGuideCommandMissingTitle": "Nie znaleziono polecenia", + "setupGuideCommandMissingDesc": "Upewnij się, że plik binarny znajduje się w PATH.", + "fingerprintSettingsHint": "Skonfiguruj routing i fingerprints w", + "settingsRoutingLink": "Settings → Routing", + "installed": "Zainstalowane", + "notFound": "Nie znaleziono", + "builtIn": "Wbudowane", + "custom": "Niestandardowe", + "agentUseCaseHint": "Dostępne do uruchomienia przez ACP.", + "remove": "Usuń", + "addCustomAgent": "Dodaj niestandardowego agenta", + "addCustomAgentDesc": "Zarejestruj niestandardowego agenta CLI, aby go uruchamiać przez ACP.", + "addAgent": "Dodaj agenta", + "agentName": "Nazwa", + "agentNamePlaceholder": "np. My Agent", + "binaryName": "Plik binarny", + "binaryNamePlaceholder": "np. myagent", + "versionCommand": "Polecenie wersji", + "versionCommandPlaceholder": "np. myagent --version", + "spawnArgs": "Argumenty uruchomienia", + "spawnArgsPlaceholder": "np. --quiet, --json", + "cliCodeRedirectCta": "Otwórz CLI Code" }, "agentSkills": { - "pageTitle": "__MISSING__:Agent Skills", - "pageSubtitle": "__MISSING__:Teach your agent to operate OmniRoute — 22 API areas + 20 CLI families", + "pageTitle": "Agent Skills", + "pageSubtitle": "Naucz swojego agenta obsługi OmniRoute — 22 obszary API + 20 rodzin CLI", "conceptCard": { "agent": { - "title": "__MISSING__:Agent Skills — Outbound", - "description": "__MISSING__:Agent Skills are machine-readable SKILL.md documents that external AI agents (Claude Code, Cursor, Copilot…) fetch from GitHub to learn how to operate OmniRoute via REST or CLI. They are read by the agent, not executed by OmniRoute.", - "crossLinkLabel": "__MISSING__:Understand the difference →" + "title": "Agent Skills — Wychodzące", + "description": "Agent Skills to odczytywalne maszynowo dokumenty SKILL.md, które zewnętrzni agenci AI (Claude Code, Cursor, Copilot…) pobierają z GitHub, aby dowiedzieć się, jak obsługiwać OmniRoute przez REST lub CLI. Są one odczytywane przez agenta, a nie wykonywane przez OmniRoute.", + "crossLinkLabel": "Zrozum różnicę →" }, "omni": { - "title": "__MISSING__:Omni Skills — Inbound", - "description": "__MISSING__:Omni Skills are sandbox tools that OmniRoute injects into the model's context on every request. They are executed by OmniRoute, not read by the agent.", - "crossLinkLabel": "__MISSING__:Understand the difference →" + "title": "Omni Skills — Przychodzące", + "description": "Omni Skills to narzędzia piaskownicy (sandbox), które OmniRoute wstrzykuje do kontekstu model przy każdym żądaniu. Są one wykonywane przez OmniRoute, a nie odczytywane przez agenta.", + "crossLinkLabel": "Zrozum różnicę →" }, "comparison": { - "colAgent": "__MISSING__:Agent Skills", - "colOmni": "__MISSING__:Omni Skills", + "colAgent": "Agent Skills", + "colOmni": "Omni Skills", "whatIs": { - "label": "__MISSING__:What it is", - "agent": "__MISSING__:Machine-readable SKILL.md that teaches an external agent to operate OmniRoute", - "omni": "__MISSING__:Executable tools that OmniRoute injects as tools into LLM requests" + "label": "Co to jest", + "agent": "Odczytywalny maszynowo plik SKILL.md, który uczy zewnętrznego agenta obsługi OmniRoute", + "omni": "Wykonywalne narzędzia, które OmniRoute wstrzykuje jako narzędzia do żądań LLM" }, "direction": { - "label": "__MISSING__:Direction", - "agent": "__MISSING__:Outbound — external agent learns to control OmniRoute", - "omni": "__MISSING__:Inbound — OmniRoute gives tools to models passing through it" + "label": "Kierunek", + "agent": "Wychodzący — zewnętrzny agent uczy się kontrolować OmniRoute", + "omni": "Przychodzący — OmniRoute udostępnia narzędzia dla models przechodzących przez niego" }, "executor": { - "label": "__MISSING__:Executor", - "agent": "__MISSING__:External agent (reads markdown → acts via API/CLI)", - "omni": "__MISSING__:OmniRoute itself (intercepts tool_calls, Docker sandbox)" + "label": "Wykonawca", + "agent": "Zewnętrzny agent (odczytuje markdown → działa przez API/CLI)", + "omni": "Samo OmniRoute (przechwytuje tool_calls, sandbox Docker)" }, "storage": { - "label": "__MISSING__:Storage", - "agent": "__MISSING__:Dynamic catalog (/api/agent-skills) → SKILL.md on GitHub", - "omni": "__MISSING__:SQLite (SkillsMP / skills.sh / local)" + "label": "Przechowywanie", + "agent": "Dynamiczny katalog (/api/agent-skills) → SKILL.md na GitHub", + "omni": "SQLite (SkillsMP / skills.sh / local)" }, "tagline": { - "label": "__MISSING__:Tagline", - "agent": "__MISSING__:Teach your agent to use OmniRoute", - "omni": "__MISSING__:Give executable tools to OmniRoute models" + "label": "Hasło", + "agent": "Naucz swojego agenta korzystać z OmniRoute", + "omni": "Daj wykonywalne narzędzia dla OmniRoute models" } } }, "filters": { - "category": "__MISSING__:Category", - "area": "__MISSING__:Area", - "searchPlaceholder": "__MISSING__:Search skills…" + "category": "Kategoria", + "area": "Obszar", + "searchPlaceholder": "Szukaj skills…" }, - "categoryApi": "__MISSING__:API", - "categoryCli": "__MISSING__:CLI", - "categoryConfig": "__MISSING__:Config", - "filterAll": "__MISSING__:All", - "coverageLabel": "__MISSING__:Coverage", - "mcpUrl": "__MISSING__:MCP URL", - "a2aLink": "__MISSING__:A2A", - "copyUrl": "__MISSING__:Copy URL", - "viewOnGithub": "__MISSING__:View on GitHub", - "previewLoading": "__MISSING__:Loading skill documentation…", - "previewError": "__MISSING__:Failed to load skill documentation.", - "previewEmpty": "__MISSING__:Select a skill to preview its documentation.", - "generateButton": "__MISSING__:Generate missing skills", + "categoryApi": "API", + "categoryCli": "CLI", + "categoryConfig": "Config", + "filterAll": "Wszystkie", + "coverageLabel": "Pokrycie", + "mcpUrl": "MCP URL", + "a2aLink": "A2A", + "copyUrl": "Kopiuj URL", + "viewOnGithub": "Wyświetl na GitHub", + "previewLoading": "Wczytywanie dokumentacji skill…", + "previewError": "Nie udało się wczytać dokumentacji skill.", + "previewEmpty": "Wybierz skill, aby wyświetlić jego dokumentację.", + "generateButton": "Generuj brakujące skills", "coverageBar": { - "complete": "__MISSING__:Complete", - "partial": "__MISSING__:Partial" + "complete": "Pełne", + "partial": "Częściowe" }, - "noSkillsFound": "__MISSING__:No skills found matching your filters.", - "regenerateConfirm": "__MISSING__:This will regenerate all missing SKILL.md files. Continue?", - "regenerateRunning": "__MISSING__:Regenerating skills…", - "regenerateSuccess": "__MISSING__:Skills regenerated successfully.", - "regenerateError": "__MISSING__:Failed to regenerate skills." + "noSkillsFound": "Nie znaleziono skills pasujących do filtrów.", + "regenerateConfirm": "To spowoduje ponowne wygenerowanie wszystkich brakujących plików SKILL.md. Kontynuować?", + "regenerateRunning": "Ponowne generowanie skills…", + "regenerateSuccess": "Pomyślnie wygenerowano ponownie skills.", + "regenerateError": "Nie udało się ponownie wygenerować skills." }, "freeProviderRankingsPage": { - "title": "__MISSING__:Free Provider Rankings", - "subtitle": "__MISSING__:Best free providers ranked by model ELO scores from Arena AI leaderboards", - "loading": "__MISSING__:Loading rankings...", - "errorLoading": "__MISSING__:Failed to load rankings", - "emptyState": "__MISSING__:No rankings available yet. Arena ELO data syncs on startup (daily) — check back shortly, or trigger a manual sync. Disable Arena ELO Sync in Feature Flags or set ARENA_ELO_SYNC_ENABLED=false to opt out.", - "bestModel": "__MISSING__:Best", - "allCategories": "__MISSING__:All Categories", - "categoryDefault": "__MISSING__:Default", - "categoryCoding": "__MISSING__:Coding", - "categoryReview": "__MISSING__:Review", - "categoryDocumentation": "__MISSING__:Documentation", - "categoryDebugging": "__MISSING__:Debugging", - "colRank": "__MISSING__:Rank", - "colProvider": "__MISSING__:Provider", - "colTopModel": "__MISSING__:Top Model", - "colScore": "__MISSING__:Score", - "colAvgScore": "__MISSING__:Avg Score", - "colModels": "__MISSING__:Models", - "colType": "Type" + "title": "Ranking darmowych providers", + "subtitle": "Najlepsi darmowi providers uporządkowani według wyników ELO model z tabel liderów Arena AI", + "loading": "Wczytywanie rankingów...", + "errorLoading": "Nie udało się wczytać rankingów", + "emptyState": "Brak dostępnych rankingów. Dane Arena ELO są synchronizowane przy uruchomieniu (codziennie) — spróbuj ponownie wkrótce lub wywołaj ręczną synchronizację. Wyłącz Arena ELO Sync w Feature Flags lub ustaw ARENA_ELO_SYNC_ENABLED=false, aby zrezygnować.", + "bestModel": "Najlepszy", + "allCategories": "Wszystkie kategorie", + "categoryDefault": "Domyślna", + "categoryCoding": "Kodowanie", + "categoryReview": "Przegląd", + "categoryDocumentation": "Dokumentacja", + "categoryDebugging": "Debugowanie", + "colRank": "Pozycja", + "colProvider": "Provider", + "colTopModel": "Top Model", + "colScore": "Wynik", + "colAvgScore": "Średni wynik", + "colModels": "Models", + "colType": "Typ", + "filterConfiguredOnly": "Tylko skonfigurowane", + "filterAvailableOnly": "Tylko dostępne", + "filterAvailableOnlyHelp": "Ukryj providers, których wszystkie połączenia mają przekroczony rate limit lub skończoną quota.", + "configuredOnly": "Tylko skonfigurowane", + "configuredOnlyHint": "Pokaż tylko providers z aktywnymi połączeniami", + "noConfiguredProviders": "Nie znaleziono skonfigurowanych providers. Najpierw dodaj połączenie provider.", + "colConfigured": "Status", + "typeAll": "Wszystkie typy", + "typeNoauth": "Bez rejestracji", + "typeOauth": "Logowanie OAuth", + "typeApikey": "Klucz API", + "sortTypeFirst": "Najłatwiejsze najpierw", + "sortTypeFirstHelp": "Grupuj według nakładu pracy przy rejestracji (Bez rejestracji → Logowanie OAuth → Klucz API), zachowując kolejność jakości w każdej grupie", + "typeLegend": "Bez rejestracji = zero konfiguracji · Logowanie OAuth = zaloguj się za pomocą własnego konta · Klucz API = użyj własnego klucza lub darmowego planu tego provider" + }, + "discovery": { + "title": "Provider Discovery", + "subtitle": "Skanuj providers pod kątem darmowych/nieograniczonych metod dostępu i przeglądaj wyniki. Opcjonalne (opt-in), tylko lokalnie.", + "scanLabel": "Provider do przeskanowania", + "scanPlaceholder": "np. huggingchat", + "scan": "Skanuj", + "scanning": "Skanowanie…", + "scanQueued": "Skanowanie zakończone dla {provider}.", + "scanFailed": "Skanowanie nie powiodło się.", + "loadFailed": "Nie udało się załadować wyników discovery.", + "localOnlyNote": "To narzędzie działa tylko lokalnie (loopback). Skanowania są uruchamiane z tej maszyny i nigdy nie są dostępne zdalnie.", + "verify": "Weryfikuj", + "verifyFailed": "Nie udało się zweryfikować znaleziska.", + "delete": "Usuń", + "deleteFailed": "Nie udało się usunąć znaleziska.", + "deleteTitle": "Usuń wynik discovery", + "deleteConfirm": "Usunąć wynik discovery dla {provider}? Tego kroku nie można cofnąć.", + "emptyTitle": "Brak wyników discovery", + "emptyDescription": "Uruchom skanowanie powyżej, aby wyszukać darmowe metody dostępu u provider.", + "risk": "Ryzyko", + "method": "Metoda", + "auth": "Uwierzytelnianie", + "feasibility": "Wykonalność", + "models": "Models" }, "reasoningRouting": { - "title": "Reasoning routing policies", - "apiKeyTitle": "Reasoning routing for this API key", - "subtitle": "Reroute models and reasoning effort without requiring client support. Requests remain unchanged when no rule matches.", - "loadError": "Reasoning rules could not be loaded.", - "saveError": "The rule is invalid or could not be saved.", - "saved": "Reasoning rule saved.", - "deleteConfirm": "Delete this reasoning rule?", - "deleteError": "The reasoning rule could not be deleted.", - "empty": "No matching reasoning rules configured.", - "all": "All", - "any": "Any", - "enabled": "Enabled", - "disabled": "Disabled", - "filterSearch": "Search rules", - "filterScope": "Filter by scope", - "filterStatus": "Filter by status", - "allModels": "all models", - "keepModel": "Keep model", - "otherModel": "Other model", + "title": "Polityki reasoning routing", + "apiKeyTitle": "Reasoning routing dla tego klucza API", + "subtitle": "Przekierowuj models i reasoning effort bez wymagania wsparcia po stronie klienta. Żądania pozostają bez zmian, gdy żadna zasada nie pasuje.", + "loadError": "Nie udało się załadować zasad reasoning.", + "saveError": "Zasada jest nieprawidłowa lub nie mogła zostać zapisana.", + "saved": "Zapisano zasadę reasoning.", + "deleteConfirm": "Usunąć tę zasadę reasoning?", + "deleteError": "Nie udało się usunąć zasady reasoning.", + "empty": "Brak skonfigurowanych pasujących zasad reasoning.", + "all": "Wszystkie", + "any": "Dowolne", + "enabled": "Włączone", + "disabled": "Wyłączone", + "filterSearch": "Szukaj zasad", + "filterScope": "Filtruj według zakresu", + "filterStatus": "Filtruj według statusu", + "allModels": "wszystkie models", + "keepModel": "Zachowaj model", + "otherModel": "Inny model", "combo": "Combo", - "priorityShort": "priority {value}", - "toggleAria": "Enable {name}", - "edit": "Edit", - "delete": "Delete", - "name": "Name", - "description": "Description", - "scopeLabel": "Scope", - "apiKey": "API key", - "sourceCombo": "Source combo", - "connection": "Connection", - "sourceModel": "Source model or wildcard", - "sourceModelOptional": "Empty = all models", - "sourceModelExample": "e.g. gpt-5*", - "sourceEffort": "Source effort", - "missing": "Not specified", - "signalOnly": "Non-discrete reasoning signal", - "requestTags": "Request tags", + "priorityShort": "priorytet {value}", + "toggleAria": "Włącz {name}", + "edit": "Edytuj", + "delete": "Usuń", + "name": "Nazwa", + "description": "Opis", + "scopeLabel": "Zakres", + "apiKey": "Klucz API", + "sourceCombo": "Źródłowe combo", + "connection": "Połączenie", + "sourceModel": "Źródłowy model lub wildcard", + "sourceModelOptional": "Puste = wszystkie models", + "sourceModelExample": "np. gpt-5*", + "sourceEffort": "Źródłowy effort", + "missing": "Nieokreślono", + "signalOnly": "Niedyskretny sygnał reasoning", + "requestTags": "Tagi żądania", "requestTagsExample": "coding, internal", - "tagMode": "Tag matching", - "effortMode": "Effort mode", - "targetEffort": "Target effort", - "routingTarget": "Routing target", - "targetModel": "Target model", - "targetCombo": "Target combo", - "budgetAction": "Thinking budget", - "budgetTokens": "Budget tokens", - "priority": "Priority", - "saveChanges": "Save changes", - "add": "Add rule", - "cancel": "Cancel", - "simulateTitle": "Simulate rule", + "tagMode": "Dopasowywanie tagów", + "effortMode": "Tryb effort", + "targetEffort": "Docelowy effort", + "routingTarget": "Cel routingu", + "targetModel": "Docelowy model", + "targetCombo": "Docelowe combo", + "budgetAction": "Budżet myślenia", + "budgetTokens": "Budżet tokens", + "priority": "Priorytet", + "saveChanges": "Zapisz zmiany", + "add": "Dodaj zasadę", + "cancel": "Anuluj", + "simulateTitle": "Symuluj zasadę", "model": "Model", "effort": "Effort", "transport": "Transport", - "simulate": "Simulate without upstream", - "extendedComboWarning": "Max/Ultra is validated separately for every combo target during routing.", - "extendedUnknownWarning": "Enter a target model to verify Max/Ultra support.", - "extendedUnsupportedWarning": "Max/Ultra is only known to be supported by suitable Codex GPT-5.6 models. Unknown custom models are accepted by the server with a warning.", + "simulate": "Symuluj bez upstream", + "extendedComboWarning": "Max/Ultra jest weryfikowane osobno dla każdego celu combo podczas routingu.", + "extendedUnknownWarning": "Wprowadź docelowy model, aby zweryfikować wsparcie dla Max/Ultra.", + "extendedUnsupportedWarning": "Wsparcie dla Max/Ultra jest znane tylko dla odpowiednich models Codex GPT-5.6. Nieznane niestandardowe models są akceptowane przez serwer z ostrzeżeniem.", "scope": { - "global": "Global", - "apiKey": "API key", + "global": "Globalny", + "apiKey": "Klucz API", "combo": "Combo", "model": "Model", - "connection": "Connection" + "connection": "Połączenie" }, "mode": { - "inherit": "Inherit client", - "default": "Use default", - "force": "Force" + "inherit": "Dziedzicz z klienta", + "default": "Użyj domyślnego", + "force": "Wymuś" }, "budget": { - "preserve": "Preserve", - "remove": "Remove", - "set": "Set fixed value" - }, - "colType": "Type", - "typeAll": "All Types", - "typeNoauth": "No Signup", - "typeOauth": "OAuth Login", - "typeApikey": "API Key", - "sortTypeFirst": "Easiest first", - "sortTypeFirstHelp": "Group by signup effort (No Signup → OAuth Login → API Key), keeping quality order within each group", - "typeLegend": "No Signup = zero setup · OAuth Login = sign in with your own account · API Key = bring your own key or that provider's free tier" + "preserve": "Zachowaj", + "remove": "Usuń", + "set": "Ustaw stałą wartość" + } + }, + "chaosConfig": { + "pageTitle": "Chaos Mode", + "pageSubtitle": "Uruchamiaj wiele AI models równolegle lub we współpracy nad tym samym zadaniem", + "enableChaos": "Włącz Chaos Mode", + "enableChaosDesc": "Zezwalaj kluczom API z włączonym chaos mode na korzystanie z tej funkcji", + "mode": "Domyślny tryb", + "modeParallel": "Równoległy", + "modeCollaborative": "Współpraca", + "modeParallelDesc": "Wszystkie models działają jednocześnie — najszybsze wyniki", + "modeCollaborativeDesc": "Models łączą wyjścia — każdy widzi poprzedni wynik", + "timeout": "Timeout (ms)", + "timeoutDesc": "Maksymalny czas na wywołanie model (5000-600000ms)", + "systemPrompt": "System Prompt (opcjonalnie)", + "systemPromptDesc": "Niestandardowe instrukcje dla wszystkich instancji model w chaos mode", + "providerOverrides": "Nadpisania provider", + "providerOverridesDesc": "Wybierz określone models dla każdego provider dla chaos mode", + "providerId": "Provider", + "modelId": "Model", + "addProvider": "Dodaj provider", + "removeProvider": "Usuń", + "saveConfig": "Zapisz konfigurację", + "configSaved": "Pomyślnie zapisano konfigurację chaos", + "configError": "Nie udało się zapisać konfiguracji chaos", + "configReset": "Przywróć domyślne", + "keyPermission": "Dostęp do Chaos Mode", + "keyPermissionDesc": "Zezwalaj temu kluczowi API na korzystanie z Chaos Mode (równoległe wykonywanie wielu models)", + "testButton": "Testuj Chaos Mode", + "testTask": "Napisz krótki wiersz o sztucznej inteligencji", + "loadingProviderModels": "Ładowanie providers..." } }