{
  "common": {
    "save": "Guardar",
    "cancel": "Cancelar",
    "delete": "Eliminar",
    "loading": "Cargando...",
    "error": "Se produjo un error",
    "success": "Éxito",
    "confirm": "¿Estás seguro?",
    "refresh": "Actualizar",
    "close": "Cerrar",
    "add": "Añadir",
    "edit": "Editar",
    "search": "Buscar",
    "back": "Atrás",
    "next": "Siguiente",
    "submit": "Enviar",
    "reset": "Reiniciar",
    "copy": "Copiar",
    "copied": "¡Copiado!",
    "enabled": "Habilitado",
    "disabled": "Deshabilitado",
    "active": "Activo",
    "inactive": "Inactivo",
    "noData": "No hay datos disponibles",
    "nothingHere": "Nothing here yet",
    "configure": "Configurar",
    "manage": "Administrar",
    "name": "Nombre",
    "actions": "Acciones",
    "status": "Estado",
    "type": "Tipo",
    "model": "Modelo",
    "models": "modelos",
    "provider": "Proveedor",
    "account": "Cuenta",
    "time": "Hora",
    "details": "Detalles",
    "created": "Creado",
    "lastUsed": "Last Refreshed",
    "loadMore": "Cargar más",
    "noResults": "No se encontraron resultados",
    "reloadPage": "Recargar página",
    "connected": "Conectado",
    "disconnected": "desconectado",
    "notConfigured": "No configurado",
    "testConnection": "Conexión de prueba",
    "enable": "Habilitar",
    "disable": "Desactivar",
    "columns": "Columnas",
    "newest": "Más reciente",
    "oldest": "Más antiguo",
    "all": "Todos",
    "none": "Ninguno",
    "yes": "Sí",
    "no": "No",
    "on": "__MISSING__:ON",
    "off": "__MISSING__:OFF",
    "warning": "Advertencia",
    "note": "Nota",
    "free": "Gratis",
    "skipToContent": "Saltar al contenido",
    "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",
    "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",
    "social-github": "GitHub",
    "social-google": "google",
    "TOOL_ALLOWLIST": "Lista de herramientas permitidas",
    "TOOL_DENYLIST": "Lista de denegaciones de herramientas",
    "Failed to save pricing": "No se pudo guardar el precio",
    "Failed to reset pricing": "No se pudo restablecer el precio",
    "apikey": "Clave API",
    "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": "Proveedores de agentes en la nube",
    "minutesAgo": "Minutes Ago",
    "a": "A",
    "liveAutoRefreshing": "Live Auto Refreshing",
    "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",
    "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",
    "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",
    "multiProvider": "Multi Provider",
    "repairEnvHint": "Repair Env Hint",
    "disablingCloud": "Disabling Cloud",
    "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",
    "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",
    "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",
    "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": "Sólo gratis",
    "addFirstProvider": "Añade tu primer proveedor",
    "addFirstProviderDesc": "Conecte un proveedor de IA para comenzar a enrutar solicitudes a través de OmniRoute. Puede utilizar proveedores gratuitos, claves API o cuentas OAuth.",
    "learnMore": "Más información",
    "includeDomains": "Include Domains",
    "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",
    "addProvider": "Add Provider",
    "realtime": "Realtime",
    "totalTranslations": "Total Translations",
    "protocolActiveStreamsLabel": "Protocol Active Streams Label",
    "repairEnv": "Repair Env",
    "modelsCount": "Models Count",
    "viewBackups": "View Backups",
    "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",
    "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",
    "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",
    "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",
    "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",
    "anthropic": "Anthropic",
    "syncingData": "Syncing Data",
    "cloudBenefitPorts": "Cloud Benefit Ports",
    "compatibleProviders": "Compatible Providers",
    "freeTierProviders": "Proveedores de nivel gratuito",
    "freeTierLabel": "Nivel gratuito disponible",
    "freeTierProvidersDesc": "Proveedores con niveles gratuitos: algunos requieren un registro de clave API, otros no necesitan ninguna credencial.",
    "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",
    "embedding": "Embedding",
    "issuesLabel": "Issues Label",
    "optionAny": "Option Any",
    "maxNestingDepth": "Max Nesting Depth",
    "rerank": "Rerank",
    "checking": "Checking",
    "getStarted": "Get Started",
    "restoreSuccess": "Restore Success",
    "issuesDetected": "Issues Detected",
    "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": "Administrador de gamificación",
    "monitorAnomaliesAndHealth": "Supervisar anomalías y el estado del sistema.",
    "flaggedAnomalies": "Anomalías marcadas",
    "noAnomaliesDetected": "No se detectaron anomalías",
    "apiKey": "Clave API",
    "xpLastHour": "XP (1h)",
    "zScore": "Puntuación Z",
    "tokensCommunityServers": "Servidores comunitarios",
    "tokensServerNamePlaceholder": "Nombre del servidor",
    "tokensApiKeyPlaceholder": "clave API",
    "tokensTokenBalance": "Saldo de tokens",
    "tokensSendTokens": "Enviar fichas",
    "tokensRecipientApiKeyId": "ID de clave API del destinatario",
    "tokensRecipientApiKeyIdPlaceholder": "Ingrese el ID de la clave API del destinatario",
    "tokensReasonOptional": "Razón (opcional)",
    "tokensReasonPlaceholder": "por ej. bonificación, recompensa",
    "tokensTransactionHistory": "Historial de transacciones",
    "tokensNoTransactionsYet": "Aún no hay transacciones",
    "tokensInviteCodes": "Códigos de invitación",
    "tokensMaxUses": "Usos máximos",
    "tokensRedeemCode": "Canjear código",
    "tokensRedeemCodePlaceholder": "Introduce el código de invitación",
    "tokensYourActiveInvites": "Tus invitaciones activas",
    "tierCoverageTitle": "Cobertura de nivel",
    "tierCoverageSubtitle": "Proveedores configurados por nivel alternativo",
    "batchDetailCopyId": "Copiar identificación",
    "batchDetailClose": "Cerrar",
    "batchDetailEndpoint": "Punto final",
    "batchDetailModel": "modelo",
    "batchDetailWindow": "ventana",
    "batchDetailCreated": "Creado",
    "providerTopologyEmpty": "Aún no hay proveedores conectados",
    "badgeToastUnlocked": "¡Insignia desbloqueada!",
    "batchListSearchPlaceholder": "Busque por ID, punto final, modelo…",
    "batchListDeleteAllCompletedTitle": "Eliminar todos los lotes completados",
    "batchListBatchesTable": "Lotes",
    "changelogViewerLoading": "Cargando registro de cambios desde GitHub...",
    "profileLoading": "Cargando perfil...",
    "profileHowToEarn": "como ganar",
    "bootstrapBannerDismiss": "Descartar",
    "batchListDeleteBatchTitle": "Eliminar lote y sus archivos",
    "leaderboardYourRank": "Tu rango",
    "leaderboardLoading": "Cargando tabla de clasificación...",
    "batchFileDetailCopyId": "Copiar identificación",
    "batchFileDetailClose": "Cerrar",
    "batchFileDetailFailedToLoad": "No se pudo cargar el contenido del archivo",
    "batchFilesListSearchPlaceholder": "Buscar por ID o nombre de archivo...",
    "batchFilesListFilesTable": "Archivos",
    "batchPageLoadingMore": "Cargando más…",
    "recommended": "__MISSING__:Recommended",
    "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",
    "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",
    "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)",
    "filesListUsedByRoleInput": "input",
    "filesListUsedByRoleOutput": "output",
    "filesListUsedByRoleError": "error",
    "batchListProgressPartial": "(partial)",
    "filesListSizeColumn": "Size",
    "batchListProviderColumn": "Provider",
    "batchListProviderUnknown": "—",
    "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",
    "batchListProviderOther": "Other",
    "batchListTitle": "Batches",
    "batchListCount": "{count} batches",
    "batchListRemovingCompleted": "Removing…",
    "batchListRemoveCompleted": "Remove completed",
    "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"
  },
  "sidebar": {
    "home": "Inicio",
    "dashboard": "Panel de control",
    "providers": "Proveedores",
    "combos": "Combos",
    "usage": "Uso",
    "analytics": "Analítica",
    "costs": "Costos",
    "health": "Salud",
    "proxy": "Proxy",
    "limits": "Límites y cuotas",
    "cliTools": "Herramientas CLI",
    "media": "Multimedia",
    "settings": "Configuración",
    "translator": "Traductor",
    "playground": "Playground",
    "searchTools": "Search Tools",
    "agents": "Agentes",
    "cloudAgents": "Agentes de la nube",
    "memory": "Memory",
    "skills": "Skills",
    "omniSkills": "OmniSkills",
    "agentSkills": "Habilidades del agente",
    "docs": "Documentación",
    "issues": "Problemas",
    "endpoints": "Endpoints",
    "endpointsSubtitle": "Las URL de su conexión de IA",
    "apiManager": "Gestor de API",
    "apiManagerSubtitle": "Administrar claves API y acceso",
    "embeddedServices": "__MISSING__:Embedded Services",
    "embeddedServicesSubtitle": "__MISSING__:Manage local proxy services",
    "logs": "Registros",
    "webhooks": "Ganchos web",
    "webhooksSubtitle": "Recibe notificaciones de eventos",
    "combosSubtitle": "Proveedores de grupo para conmutación por error",
    "batchSubtitle": "Procesar múltiples solicitudes",
    "contextCavemanSubtitle": "Compresión inmediata",
    "contextRtkSubtitle": "Filtrado de salida",
    "auditLog": "Registro de auditoría",
    "shutdown": "Apagar",
    "restart": "Reiniciar",
    "shutdownConfirm": "¿Cerrar OmniRoute?",
    "restartConfirm": "¿Reiniciar OmniRoute?",
    "version": "v{version}",
    "debug": "Depurar",
    "system": "Sistema",
    "help": "Ayuda",
    "primarySection": "Main",
    "cliSection": "CLI",
    "debugSection": "Debug",
    "systemSection": "System",
    "helpSection": "Help",
    "serverDisconnected": "Servidor desconectado",
    "serverDisconnectedMsg": "El servidor proxy se ha detenido o se está reiniciando.",
    "expandSidebar": "Expandir barra lateral",
    "collapseSidebar": "Contraer barra lateral",
    "themes": "Temas",
    "presetColors": "Colores populares",
    "createTheme": "Crear tema",
    "chooseColor": "Elige un color",
    "themeCoral": "Coral",
    "themeBlue": "Azul",
    "themeRed": "Rojo",
    "themeGreen": "Verde",
    "themeViolet": "Violeta",
    "themeOrange": "Naranja",
    "themeCyan": "cian",
    "cliToolsShort": "Herramientas",
    "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",
    "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",
    "changelog": "Changelog",
    "contextSection": "Context & Cache",
    "contextCaveman": "Caveman",
    "contextRtk": "RTK",
    "contextCombos": "Engine Combos",
    "routingSection": "Routing",
    "protocolsSection": "Protocols",
    "agentsAiSection": "Agents & AI",
    "cacheContextSection": "Cache & Context",
    "analyticsSection": "Analytics",
    "costsSection": "Costs",
    "monitoringSection": "Monitoring",
    "auditSecuritySection": "Audit & Security",
    "devtoolsSection": "Dev Tools",
    "configurationSection": "Configuration",
    "aiFeaturesSection": "AI Features",
    "mcp": "MCP",
    "a2a": "A2A",
    "apiEndpoints": "API Endpoints",
    "batchFiles": "Files",
    "analyticsEvals": "Evals",
    "analyticsSearch": "Search",
    "analyticsUtilization": "Utilization",
    "analyticsComboHealth": "Combo Health",
    "analyticsCompression": "Compression",
    "costsBudget": "Budget",
    "costsQuotaShare": "Quota Sharing",
    "costsPricing": "Pricing",
    "logsProxy": "Proxy Logs",
    "logsConsole": "Console",
    "logsActivity": "Activity",
    "auditMcp": "MCP Audit",
    "auditA2a": "Auditoría A2A",
    "settingsGeneral": "General",
    "settingsAppearance": "Appearance",
    "settingsAi": "AI Settings",
    "settingsSecurity": "Security",
    "settingsFeatureFlags": "Banderas de características",
    "settingsAuthz": "__MISSING__:Authz",
    "settingsRouting": "Routing",
    "settingsResilience": "Resilience",
    "settingsAdvanced": "Advanced",
    "omniProxySection": "OmniProxy",
    "quotaTracker": "Provider Quota",
    "providerQuota": "Provider Quota",
    "runtime": "Runtime",
    "consoleLogs": "Console Logs",
    "globalRouting": "Global Routing",
    "mitmProxy": "MITM Proxy",
    "oneProxy": "1Proxy",
    "agenticFeaturesSection": "Agentic Features",
    "otherFeaturesSection": "Other Features",
    "compressionContextGroup": "Compression Context",
    "toolsGroup": "Tools",
    "integrationsGroup": "Integrations",
    "proxyGroup": "Proxy",
    "costsParametersGroup": "Costs Parameters",
    "auditGroup": "Audit",
    "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",
    "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",
    "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",
    "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",
    "settingsFeatureFlagsSubtitle": "Alternar capacidades del sistema",
    "settingsSidebar": "Sidebar",
    "settingsSidebarSubtitle": "Customize sidebar layout",
    "settingsAuthzSubtitle": "__MISSING__:Route inventory and bypass policy",
    "docsSubtitle": "Documentation",
    "issuesSubtitle": "Report a bug",
    "changelogSubtitle": "Release notes"
  },
  "webhooks": {
    "title": "Ganchos web",
    "description": "Configure devoluciones de llamadas HTTP para eventos del sistema.",
    "configuredWebhooks": "Webhooks configurados",
    "configuredWebhooksDesc": "Administre puntos finales de entrega, eventos suscritos, estados y envíos de prueba.",
    "addWebhook": "Agregar webhook",
    "editWebhook": "Editar webhook",
    "name": "Nombre",
    "namePlaceholder": "Monitoreo de producción",
    "unnamedWebhook": "Webhook sin nombre",
    "url": "URL de punto final",
    "events": "Eventos",
    "allEvents": "Todos los eventos",
    "secret": "secreto",
    "secretPlaceholder": "Déjelo en blanco para generar automáticamente un secreto.",
    "secretEditPlaceholder": "Déjelo en blanco para mantener el secreto actual.",
    "status": "Estado",
    "active": "Activo",
    "inactive": "Inactivo",
    "errored": "Error",
    "total": "totales",
    "lastTriggered": "Última activación",
    "actions": "Acciones",
    "enabled": "Habilitado",
    "enabledDesc": "Los webhooks deshabilitados permanecen guardados pero no reciben entregas.",
    "refresh": "Actualizar",
    "loading": "Cargando webhooks...",
    "never": "nunca",
    "failureCount": "{count, plural, =0 {no failures} one {# failure} other {# failures}}",
    "testWebhook": "Enviar prueba",
    "testSuccess": "El webhook de prueba se envió correctamente.",
    "testFailed": "El webhook de prueba falló.",
    "saveSuccess": "Webhook guardado exitosamente.",
    "saveFailed": "No se pudo guardar el webhook.",
    "loadFailed": "No se pudieron cargar los webhooks.",
    "delete": "Eliminar",
    "deleteConfirm": "¿Está seguro de que desea eliminar este webhook?",
    "deleteSuccess": "Webhook eliminado correctamente.",
    "deleteFailed": "No se pudo eliminar el webhook.",
    "edit": "Editar",
    "enable": "Habilitar",
    "disable": "Desactivar",
    "noWebhooks": "Aún no hay webhooks configurados.",
    "signatureTitle": "Firmas de webhooks",
    "signatureDescription": "Cada entrega incluye un encabezado X-Webhook-Signature firmado con HMAC-SHA256 utilizando el secreto del webhook. Verifique la firma antes de confiar en la carga útil.",
    "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."
    },
    "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\""
    },
    "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"
    },
    "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"
    },
    "testPayloadSent": "__MISSING__:Test Payload Sent",
    "testResponse": "__MISSING__:Test Response",
    "validateUrl": {
      "checking": "__MISSING__:Checking URL...",
      "ok": "__MISSING__:URL is valid",
      "blockedPrivate": "__MISSING__:URL is a blocked private address",
      "invalidUrl": "__MISSING__:Invalid URL format"
    },
    "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."
    },
    "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:"
    },
    "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:"
    },
    "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:"
    }
  },
  "compliance": {
    "auditTitle": "Auditoría",
    "auditDescription": "Revise los eventos de cumplimiento y las llamadas a herramientas MCP desde una vista operativa.",
    "complianceTab": "Cumplimiento",
    "mcpTab": "Auditoría MCP",
    "title": "Auditoría de Cumplimiento",
    "description": "Eventos de política, acceso, proveedor y seguridad registrados por el registro de auditoría de cumplimiento.",
    "eventType": "Tipo de evento",
    "eventTypePlaceholder": "Filtrar por acción o tipo de evento",
    "severity": "Gravedad",
    "allSeverities": "Todas las gravedades",
    "info": "Información",
    "warning": "Advertencia",
    "critical": "Crítico",
    "sourceIp": "IP de origen",
    "userOrKey": "Usuario / Clave",
    "action": "acción",
    "result": "Resultado",
    "details": "Detalles",
    "timestamp": "Marca de tiempo",
    "from": "De",
    "to": "a",
    "refresh": "Actualizar",
    "export": "Exportar",
    "clearFilters": "Limpiar filtros",
    "loading": "Cargando eventos de auditoría...",
    "showing": "Mostrando {count} de {total} eventos",
    "policyViolation": "Violación de política",
    "accessDenied": "Acceso denegado",
    "injectionBlocked": "Inyección bloqueada",
    "noEvents": "No se registraron eventos de cumplimiento.",
    "failedFetch": "No se pudo recuperar el registro de auditoría de cumplimiento.",
    "viewDetails": "Ver detalles",
    "closeDetails": "Cerrar detalles",
    "notAvailable": "—",
    "system": "sistema",
    "previous": "Anterior",
    "next": "Siguiente",
    "mcpAudit": "Auditoría MCP",
    "mcpAuditDesc": "Entradas de auditoría de llamadas de herramientas registradas por el servidor MCP.",
    "failedFetchMcpAudit": "No se pudo recuperar el registro de auditoría de MCP.",
    "tool": "Herramienta",
    "toolPlaceholder": "Filtrar por nombre de herramienta",
    "duration": "Duración",
    "apiKey": "Clave API",
    "output": "Salida",
    "allResults": "Todos los resultados",
    "success": "Éxito",
    "failure": "fracaso",
    "noMcpEvents": "No se registraron eventos de auditoría de MCP.",
    "a2aAudit": "Auditoría A2A",
    "a2aAuditDesc": "Pista de auditoría de ejecución de tareas registrada por el servidor A2A.",
    "a2aShowingTasks": "Mostrando {count} de {total} tareas",
    "a2aSkill": "Habilidad",
    "a2aSkillPlaceholder": "Filtrar por nombre de habilidad",
    "a2aState": "Estado",
    "a2aAllStates": "Todos los estados",
    "a2aStateSubmitted": "Enviado",
    "a2aStateWorking": "trabajando",
    "a2aStateCompleted": "Completado",
    "a2aStateFailed": "Fallido",
    "a2aStateCancelled": "Cancelado",
    "a2aTaskId": "ID de tarea",
    "a2aEvents": "Eventos",
    "a2aArtifacts": "Artefactos",
    "a2aNoTasks": "No se registraron tareas A2A.",
    "a2aLoadingTasks": "Cargando tareas A2A..."
  },
  "themesPage": {
    "title": "Temas",
    "description": "Elige un tema preestablecido o crea el tuyo propio con un solo color",
    "presetColors": "Colores populares",
    "customTheme": "Tema personalizado",
    "customThemeDesc": "Haga clic en crear tema y elija un color",
    "createTheme": "Crear tema",
    "activePreset": "Tema activo"
  },
  "header": {
    "logout": "Cerrar sesión",
    "language": "Idioma",
    "providers": "Proveedores",
    "providerDescription": "Gestiona tus conexiones de proveedores de IA",
    "combos": "Combos",
    "comboDescription": "Combinaciones de modelos con fallback",
    "usage": "Uso y análisis",
    "usageDescription": "Supervise el uso de su API, el consumo de tokens y los registros de solicitudes",
    "analytics": "Analíticas",
    "analyticsDescription": "Gráficos, tendencias y conocimientos de evaluación",
    "cliTools": "Herramientas CLI",
    "cliToolsDescription": "Configurar herramientas CLI",
    "home": "Inicio",
    "homeDescription": "Bienvenido a OmniRoute",
    "endpoint": "Endpoints",
    "endpointDescription": "Gestionar endpoints proxy, MCP, A2A y endpoints de API",
    "mcp": "MCP",
    "mcpDescription": "Model Context Protocol server management and tools",
    "a2a": "A2A",
    "a2aDescription": "Agent-to-Agent protocol tasks and observability",
    "settings": "Configuración",
    "settingsDescription": "Gestiona tus preferencias",
    "openaiCompatible": "Compatible con OpenAI",
    "anthropicCompatible": "Compatible con Anthropic",
    "media": "Medios de comunicación",
    "mediaDescription": "Genera imágenes, vídeos y música.",
    "themes": "Temas",
    "themesDescription": "Elija un tema de color para todo el panel del tablero",
    "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",
    "auditA2a": "Auditoría A2A",
    "auditA2aDescription": "Registro de auditoría de ejecución de tareas A2A, transiciones de estado y registros de invocación de habilidades",
    "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": "Banderas de características",
    "featureFlagsDescription": "Capacidades del sistema de control y características experimentales.",
    "featureFlagsActive": "{count} activo",
    "featureFlagsInactive": "{count} inactivo",
    "featureFlagsOverrides": "{count} Anulaciones de base de datos",
    "featureFlagsSearch": "Buscar banderas...",
    "featureFlagsCategoryAll": "Todos",
    "featureFlagsCategorySecurity": "Seguridad",
    "featureFlagsCategoryNetwork": "Red",
    "featureFlagsCategoryPolicies": "Políticas",
    "featureFlagsCategoryRuntime": "Tiempo de ejecución",
    "featureFlagsCategoryCli": "CLI",
    "featureFlagsCategoryHealth": "Salud",
    "featureFlagsSourceDb": "DB",
    "featureFlagsSourceEnv": "ENV",
    "featureFlagsSourceDefault": "DEF",
    "featureFlagsReset": "Reiniciar",
    "featureFlagsResetAll": "Restablecer todas las anulaciones",
    "featureFlagsResetAllConfirm": "¿Está seguro de que desea restablecer todas las anulaciones de indicadores de funciones? Esto revertirá todos los indicadores a sus valores ENV o predeterminados.",
    "featureFlagsRestartRequired": "Es necesario reiniciar para aplicar",
    "featureFlagsNoResults": "Ninguna bandera coincide con tu búsqueda",
    "featureFlagsSaved": "Bandera actualizada",
    "featureFlagsError": "No se pudo actualizar la bandera",
    "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"
  },
  "home": {
    "quickStart": "Inicio rápido",
    "quickStartDesc": "Empieza en 4 pasos. Conecta proveedores, enruta modelos y monitorea todo.",
    "fullDocs": "Documentación completa",
    "step1Title": "1. Crear clave API",
    "step1Desc": "Ve a <endpoint>Endpoint</endpoint> -> Claves registradas. Genera una clave por entorno.",
    "step2Title": "2. Conectar proveedores",
    "step2Desc": "Agrega cuentas en <providers>Proveedores</providers>. Soporta OAuth, API Key y planes gratuitos.",
    "step3Title": "3. Configura tu cliente",
    "step3Desc": "Configura la URL base como {url} en tu IDE o cliente API.",
    "step4Title": "4. Supervisar y optimizar",
    "step4Desc": "Supervisa tokens, costos y errores en <logs>Registros</logs> y <analytics>Analíticas</analytics>.",
    "providersOverview": "Descripción general de proveedores",
    "configuredOf": "{configured} configurado de {total} proveedores disponibles",
    "noModelsAvailable": "No hay modelos disponibles para este proveedor.",
    "noProvidersConfigured": "Aún no hay proveedores configurados",
    "addProvider": "Agregar un proveedor",
    "configureFirst": "Configure una conexión primero en {providers}",
    "configureProvider": "Configurar proveedor",
    "modelAvailable": "Modelo {count} disponible",
    "modelsAvailable": "{count} modelos disponibles",
    "connectionsActive": "{count} conexión activa",
    "connectionsActivePlural": "{count} conexiones activas",
    "copyModelName": "Copiar nombre del modelo",
    "documentation": "Documentación",
    "healthMonitor": "Monitor de salud",
    "reportIssue": "Informar problema",
    "activeError": "{active} activo · {errors} error",
    "oauthLabel": "OAuth",
    "apiKeyLabel": "Clave API",
    "requestsShort": "{count} reqs",
    "providerModelsTitle": "{provider} - Modelos",
    "copiedModel": "Copiado: {model}",
    "aliasLabel": "alias",
    "updateNow": "Actualizar ahora",
    "updating": "Actualizando...",
    "updateAvailableDesc": "Hay una nueva versión disponible. Haga clic para actualizar.",
    "updateStarted": "Actualización iniciada...",
    "reloadingPageAutomatically": "Recargando página automáticamente...",
    "providerTopology": "Topología del proveedor"
  },
  "analytics": {
    "title": "Analítica",
    "usageAnalyticsTitle": "__MISSING__:Usage Analytics",
    "diversityScoreTitle": "Diversidad de proveedores",
    "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",
    "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": "Supervise sus patrones de uso de API, consumo de tokens, costos y tendencias de actividad en todos los proveedores y modelos.",
    "evalsDescription": "Ejecute conjuntos de evaluación para probar y validar sus puntos finales de LLM. Compare la calidad del modelo, detecte regresiones y compare la latencia.",
    "overview": "Descripción general",
    "evals": "evaluaciones",
    "utilization": "Utilización",
    "utilizationDescription": "Tendencias de uso de cuota del proveedor y seguimiento de límites de tasa",
    "modelStatus": "Estado del modelo",
    "modelStatusCooldown": "Enfriamiento",
    "modelStatusUnavailable": "No disponible",
    "modelStatusError": "error",
    "comboHealth": "Salud del combo",
    "comboHealthDescription": "Cuota a nivel de combo, distribución de uso y métricas de rendimiento",
    "compressionAnalyticsTitle": "Compression Analytics",
    "compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats.",
    "autoRoutingTotalAutoRequests": "Total de solicitudes automáticas",
    "autoRoutingAvgSelectionScore": "Puntuación de selección promedio",
    "autoRoutingExplorationRate": "Tasa de exploración",
    "autoRoutingLkgpHitRate": "Tasa de aciertos de LKGP",
    "autoRoutingRequestsByVariant": "Solicitudes por variante",
    "autoRoutingTopRoutedProviders": "Principales proveedores enrutados",
    "comboHealthWorstQuotaLeft": "Queda la peor cuota",
    "comboHealthUsageSkew": "sesgo de uso",
    "comboHealthSuccessRate": "Tasa de éxito",
    "comboHealthQuotaHealth": "Salud de la cuota",
    "comboHealthRequests": "Solicitudes",
    "comboHealthTokens": "Fichas",
    "comboHealthAvgLatency": "Latencia promedio",
    "comboHealthTotalRequests": "Solicitudes totales",
    "comboHealthExecutionTargets": "Objetivos de ejecución",
    "comboHealthSuccess": "Éxito",
    "comboHealthLatency": "Latencia",
    "comboHealthQuota": "Cuota",
    "comboHealthTitle": "salud combinada",
    "comboHealthUnableToLoad": "No se puede cargar la salud combinada",
    "comboHealthGettingStarted": "Empezando",
    "compressionAnalyticsTotalRequests": "Solicitudes totales",
    "compressionAnalyticsTokensSaved": "Fichas guardadas",
    "compressionAnalyticsAvgSavings": "Ahorro promedio",
    "compressionAnalyticsAvgDuration": "Duración promedio",
    "compressionAnalyticsReceipts": "Recibos",
    "compressionAnalyticsFallbacks": "Reservas",
    "compressionAnalyticsPromptTokens": "fichas de aviso",
    "compressionAnalyticsCompletionTokens": "Fichas de finalización",
    "compressionAnalyticsTotalTokens": "fichas totales",
    "compressionAnalyticsCacheTokens": "Fichas de caché",
    "compressionAnalyticsNoDataYet": "Aún no hay datos de compresión",
    "searchAnalyticsTotalSearches": "Búsquedas totales",
    "searchAnalyticsCacheHitRate": "Tasa de aciertos de caché",
    "searchAnalyticsTotalCost": "Costo Total",
    "searchAnalyticsAvgResponse": "Respuesta promedio",
    "searchAnalyticsNoSearchesYet": "Aún no hay búsquedas",
    "providerUtilizationTitle": "Utilización del proveedor",
    "providerUtilizationFailedToLoad": "No se pudieron cargar los datos de utilización",
    "providerUtilizationNoData": "No hay datos de utilización disponibles",
    "providerUtilizationGettingStarted": "Empezando",
    "providerUtilizationLatestSnapshot": "Instantánea de la última cuota",
    "providerUtilizationRemainingCapacity": "Capacidad restante"
  },
  "apiManager": {
    "title": "Claves API",
    "createKey": "Crear clave API",
    "key": "clave",
    "revokeKey": "Revocar clave",
    "revokeConfirm": "¿Está seguro de que desea revocar esta clave API?",
    "noKeys": "Aún no hay claves API",
    "noKeysDesc": "Cree su primera clave API para autenticar solicitudes en su punto final",
    "keyLabel": "Etiqueta clave",
    "permissions": "Permisos",
    "expiresAt": "Vence",
    "never": "nunca",
    "revoke": "Revocar",
    "showKey": "Mostrar clave",
    "hideKey": "Ocultar clave",
    "copyKey": "Copiar clave API",
    "allModels": "Todos los modelos",
    "selectedModels": "Modelos seleccionados",
    "readOnly": "Sólo lectura",
    "fullAccess": "Acceso completo",
    "keyManagement": "Gestión de claves API",
    "keyManagementDesc": "Cree y administre claves API para autenticar solicitudes en su punto final",
    "totalKeys": "Claves totales",
    "restricted": "Restringido",
    "totalRequests": "Solicitudes totales",
    "modelsAvailable": "Modelos disponibles",
    "registeredKeys": "Claves registradas",
    "keysRegistered": "{count} claves registradas",
    "keyRegistered": "{count} clave registrada",
    "keysSecurityNote": "Cada clave aísla el seguimiento de uso y se puede revocar de forma independiente. Las claves se enmascaran después de su creación por motivos de seguridad.",
    "createFirstKey": "Crea tu primera clave",
    "name": "Nombre",
    "usage": "Uso",
    "created": "Creado",
    "actions": "Acciones",
    "reqs": "requisitos",
    "neverUsed": "Nunca usado",
    "deleteConfirm": "¿Eliminar esta clave API?",
    "usageTips": "Consejos de uso",
    "tipAuth": "Utilice claves API en el encabezado de Autorización como Portador YOUR_KEY",
    "tipSecure": "Las claves solo se muestran una vez durante la creación: guárdelas de forma segura",
    "tipSeparate": "Cree claves separadas para diferentes clientes o entornos",
    "tipRestrict": "Restrinja las claves a modelos específicos para una mejor seguridad y control de costos",
    "keyName": "Nombre clave",
    "keyNamePlaceholder": "por ejemplo, clave de producción, clave de desarrollo",
    "keyNameDesc": "Elija un nombre descriptivo para identificar el propósito de esta clave",
    "managementAccessDesc": "Permite que esta clave API administre la configuración de OmniRoute.",
    "selfServiceVisibility": "Visibilidad de autoservicio",
    "selfServiceVisibilityDesc": "Controla lo que esta clave puede ver sobre su propio uso y la cuota upstream compartida.",
    "ownUsageVisibility": "Coste propio y uso de tokens",
    "ownUsageVisibilityDesc": "Permite que esta clave llame a su endpoint de estado para ver su uso en USD, porcentaje de presupuesto y totales de tokens.",
    "sharedAccountQuotaVisibility": "Cuota de cuenta compartida",
    "sharedAccountQuotaVisibilityDesc": "Permite que esta clave vea la cuota de cuenta upstream compartida cuando hay una conexión explícita configurada.",
    "keyCreated": "Clave API creada",
    "keyCreatedSuccess": "¡Clave creada exitosamente!",
    "keyCreatedNote": "Copie y almacene esta clave ahora; no se volverá a mostrar.",
    "done": "hecho",
    "savePermissions": "Guardar permisos",
    "endpointRestrictions": "__MISSING__:Allowed Endpoints",
    "allEndpointsAllowed": "__MISSING__:This key can access all API endpoints.",
    "endpointsRestricted": "__MISSING__: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.",
    "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": "Permitir todo",
    "restrict": "Restringir",
    "allowAllInfo": "Esta clave puede acceder a todos los modelos disponibles.",
    "restrictInfo": "Esta clave puede acceder a {selected} de {total} modelos.",
    "selected": "{count} seleccionado",
    "all": "Todos",
    "clear": "Borrar",
    "searchModels": "Buscar modelos por nombre o proveedor...",
    "noModelsFound": "No se encontraron modelos",
    "keyNameRequired": "El nombre de la clave es obligatorio",
    "keyNameTooLong": "El nombre de la clave debe tener {max} caracteres o menos",
    "keyNameInvalid": "El nombre de la clave solo puede contener letras, números, espacios, guiones y guiones bajos.",
    "invalidKeyName": "Nombre de clave no válido",
    "failedCreateKey": "No se pudo crear la clave",
    "failedCreateKeyRetry": "No se pudo crear la clave. Por favor inténtalo de nuevo.",
    "invalidKeyId": "ID de clave no válida",
    "failedDeleteKey": "No se pudo eliminar la clave",
    "failedDeleteKeyRetry": "No se pudo eliminar la clave. Por favor inténtalo de nuevo.",
    "invalidModelsSelection": "Selección de modelos no válidos",
    "cannotSelectMoreThanModels": "No se pueden seleccionar más de {max} modelos",
    "failedUpdatePermissions": "No se pudieron actualizar los permisos",
    "failedUpdatePermissionsRetry": "No se pudieron actualizar los permisos. Por favor inténtalo de nuevo.",
    "unknownProvider": "desconocido",
    "copyMaskedKey": "Copiar clave enmascarada",
    "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "lastUsedOn": "Último: {date}",
    "editPermissions": "Editar permisos",
    "deleteKey": "Eliminar clave",
    "regenerateKey": "Regenerar clave",
    "regenerateConfirm": "¿Está seguro de que desea regenerar esta clave API? La clave anterior quedará invalidada inmediatamente.",
    "failedRegenerateKey": "No se pudo regenerar la clave API",
    "failedRegenerateKeyRetry": "No se pudo regenerar la clave API. Por favor inténtalo de nuevo.",
    "model": "{count} modelo",
    "models": "{count} modelos",
    "permissionsTitle": "Permisos: {name}",
    "allowAllDesc": "Esta clave puede acceder a todos los modelos disponibles.",
    "restrictDesc": "Esta clave puede acceder a {selectedCount} de {totalModels} modelos.",
    "selectedCount": "{count} seleccionado",
    "maxActiveSessions": "Sesiones activas máximas",
    "apiManagerCustomRateLimits": "Límites de tarifas personalizadas",
    "apiManagerCustomRateLimitsDesc": "Anule los límites predeterminados globales. Déjelo vacío para usar los valores predeterminados.",
    "apiManagerRateLimitRequestsPlaceholder": "Solicitudes",
    "apiManagerRateLimitReqPer": "solicitar /",
    "apiManagerRateLimitSecondsPlaceholder": "Segundos",
    "apiManagerRemoveLimitTitle": "Eliminar límite",
    "apiManagerTimezonePlaceholder": "América/Sao_Paulo",
    "noLogPayloadPrivacy": "Privacidad de carga útil sin registros",
    "bannedStatus": "Estado prohibido",
    "managementApiAccess": "Acceso a la API de administración",
    "expirationDate": "Fecha de vencimiento",
    "managementAccess": "Acceso de gestión",
    "allowedConnections": "Conexiones permitidas",
    "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",
    "endpointRestrictions": "Allowed Endpoints",
    "allEndpointsAllowed": "This key can access all API endpoints.",
    "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}."
  },
  "auditLog": {
    "title": "Registro de auditoría",
    "searchPlaceholder": "Acciones de búsqueda...",
    "action": "acción",
    "actor": "Actor",
    "target": "Objetivo",
    "ipAddress": "Dirección IP",
    "timestamp": "Marca de tiempo",
    "noEntries": "No se encontraron entradas de auditoría",
    "filterByAction": "Filtrar por acción...",
    "filterByActor": "Filtrar por actor...",
    "filterEntriesAria": "Filtrar entradas del registro de auditoría",
    "filterByActionTypeAria": "Filtrar por tipo de acción",
    "filterByActorAria": "Filtrar por actor",
    "refreshAuditLogAria": "Actualizar el registro de auditoría",
    "tableAria": "Entradas del registro de auditoría",
    "failedFetchAuditLog": "No se pudo recuperar el registro de auditoría",
    "notAvailable": "—",
    "description": "Acciones administrativas y eventos de seguridad.",
    "showing": "Mostrando entradas {count} (desplazamiento {offset})",
    "previous": "Anterior"
  },
  "media": {
    "title": "Zona multimedia",
    "subtitle": "Genera imágenes, videos y música",
    "model": "Model",
    "prompt": "Prompt",
    "generate": "Generar",
    "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.",
    "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"
    },
    "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..."
  },
  "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",
    "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)",
    "searchTypeWeb": "web",
    "searchTypeNews": "news",
    "optionAny": "any",
    "timeRangeDay": "Past day",
    "timeRangeWeek": "Past week",
    "timeRangeMonth": "Past month",
    "timeRangeYear": "Past year",
    "domainPlaceholder": "example.com",
    "requestTimedOut": "Request timed out ({seconds}s)",
    "networkError": "Network error",
    "formatted": "Formatted",
    "rawJson": "JSON",
    "cacheMiss": "cache miss",
    "cacheHit": "cache hit",
    "latency": "Latency",
    "cost": "Cost",
    "results": "Results",
    "rerank": "Rerank",
    "rerankModel": "Rerank Model",
    "positionDelta": "Position Change",
    "emptyState": "Send a search query to see results",
    "copy": "Copiar",
    "resetToDefault": "Restablecer los valores predeterminados",
    "tabSearch": "Search",
    "tabScrape": "Scrape",
    "tabCompare": "Compare",
    "modalitiesGuide": "Modalities guide",
    "searchConceptTitle": "Search",
    "searchConceptDesc": "Search = fetches a list of web results (title, URL, snippet, relevance score)",
    "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",
    "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",
    "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",
    "scrapeUrlPlaceholder": "https://example.com",
    "scrapeExtract": "Extract",
    "scrapeExtracting": "Extracting…",
    "scrapeFullPage": "Full page",
    "scrapeFormat": "Format",
    "formatMarkdown": "Markdown",
    "formatHtml": "HTML",
    "formatText": "Text",
    "scrapePreview": "Preview",
    "scrapeRaw": "Raw",
    "scrapeContentTruncated": "(truncated, view raw)",
    "scrapeMetadata": "Metadata",
    "scrapeProvider": "Provider",
    "scrapeSize": "Size",
    "compareRun": "Compare",
    "compareRunning": "Comparing…",
    "autoProvider": "Auto (cheapest)",
    "configuredStatus": "Configured",
    "rateLimitedStatus": "Rate limited",
    "noCredential": "No credential",
    "searchTypeLabel": "Type",
    "rerankModelLabel": "Rerank model",
    "noneOption": "None",
    "size": "Size"
  },
  "cliTools": {
    "title": "Herramientas CLI",
    "noActiveProviders": "No hay proveedores activos",
    "noActiveProvidersDesc": "Primero agregue y conecte proveedores para configurar las herramientas CLI.",
    "mapModels": "Modelos de mapas",
    "testConnection": "Conexión de prueba",
    "connectionStatus": "Estado de conexión",
    "configureEndpoint": "Configurar punto final",
    "instructions": "Instrucciones",
    "modelMapping": "Mapeo de modelos",
    "baseUrl": "URL básica",
    "apiKey": "Clave API",
    "configured": "Configurado",
    "notConfigured": "No configurado",
    "notInstalled": "No instalado",
    "custom": "personalizado",
    "unknown": "Desconocido",
    "lastSavedAt": "Último guardado: {date}",
    "never": "nunca",
    "justNow": "justo ahora",
    "minutesAgoShort": "Hace {count}m",
    "hoursAgoShort": "Hace {count}h",
    "daysAgoShort": "Hace {count}d",
    "monthsAgoShort": "hace {count} mes",
    "yearsAgoShort": "Hace {count}y",
    "runtimeCheckFailed": "Error en la comprobación del tiempo de ejecución",
    "yourApiKeyPlaceholder": "tu-clave-api",
    "modelPlaceholder": "proveedor/id-modelo",
    "configurationSaved": "Configuración guardada exitosamente.",
    "failedToSave": "No se pudo guardar la configuración.",
    "noApiKeysCreateOne": "Sin claves API: cree una en la página Claves",
    "defaultOmnirouteKey": "sk_omniroute (predeterminado)",
    "selectModel": "Seleccionar modelo",
    "selectModelForAlias": "Seleccione modelo para {alias}",
    "selectModelForTool": "Seleccione modelo para {tool}",
    "select": "Seleccionar",
    "clear": "Borrar",
    "comingSoon": "Próximamente",
    "checkingRuntime": "Comprobando el estado del tiempo de ejecución...",
    "guideOnlyIntegration": "Integración solo con guía (no se requiere tiempo de ejecución local)",
    "cliRuntimeDetected": "Tiempo de ejecución de CLI detectado y listo",
    "cliFoundNotRunnable": "CLI encontrada pero no ejecutable{reason}",
    "cliRuntimeNotDetected": "Tiempo de ejecución CLI no detectado",
    "binary": "binario",
    "configPath": "Ruta de configuración",
    "configPathShort": "configuración",
    "failedCheckRuntimeStatus": "No se pudo verificar el estado del tiempo de ejecución.",
    "copy": "Copiar",
    "copied": "Copiado",
    "copyConfig": "Copiar configuración",
    "saveConfig": "Guardar configuración",
    "selectionSaved": "Selección guardada",
    "guide": "Guía",
    "detected": "Detectado",
    "notReady": "No listo",
    "active": "Activo",
    "inactive": "Inactivo",
    "startMitm": "Iniciar MITM",
    "stopMitm": "Detener MITM",
    "mitmStarted": "¡MITM comenzó con éxito!",
    "mitmStopped": "¡MITM se detuvo con éxito!",
    "failedStart": "No se pudo iniciar MITM",
    "failedStop": "No se pudo detener MITM",
    "saveMappings": "Guardar asignaciones",
    "mappingsSaved": "¡Asignaciones guardadas!",
    "failedSaveMappings": "No se pudieron guardar las asignaciones",
    "howItWorks": "Cómo funciona:",
    "antigravityHowWorksDesc": "Antigravity envía solicitudes al punto final de Google. MITM los intercepta y los redirige a OmniRoute.",
    "antigravityStep1": "1. Inicie MITM para enrutar solicitudes a través de OmniRoute.",
    "antigravityStep2Prefix": "2. Agregar",
    "antigravityStep2Suffix": "a su archivo de hosts como 127.0.0.1.",
    "antigravityStep3": "3. Abra Antigravity y las solicitudes se enviarán por 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": "Se requiere contraseña de Sudo",
    "sudoPasswordHint": "Se requiere una contraseña de administrador para modificar el archivo de hosts y la configuración del proxy del sistema.",
    "enterSudoPassword": "Ingrese la contraseña de sudo",
    "sudoPasswordRequiredError": "Se requiere contraseña de Sudo.",
    "cancel": "Cancelar",
    "confirm": "Confirmar",
    "settingsApplied": "¡La configuración se aplicó correctamente!",
    "failedApplySettings": "No se pudo aplicar la configuración",
    "settingsReset": "¡La configuración se restableció correctamente!",
    "failedResetSettings": "No se pudo restablecer la configuración",
    "backupRestored": "¡Copia de seguridad restaurada!",
    "failedRestore": "No se pudo restaurar",
    "checkingCli": "Comprobando {tool} CLI...",
    "cliNotRunnable": "{tool} CLI instalada pero no ejecutable",
    "cliNotInstalled": "{tool} CLI no instalado",
    "cliNotDetected": "{tool} CLI no detectada",
    "cliDetectedReady": "{tool} CLI detectada y lista",
    "cliFoundFailedHealthcheck": "{tool} Se encontró CLI pero falló la verificación de estado del tiempo de ejecución{reason}.",
    "installCliPrompt": "Instale {tool} CLI para utilizar esta función.",
    "installCodexPrompt": "Instale Codex CLI para utilizar la función de aplicación automática.",
    "hide": "Ocultar",
    "howToInstall": "Cómo instalar",
    "installationGuide": "Guía de instalación",
    "platforms": "Mac OS/Linux/Windows:",
    "afterInstallationRun": "Después de la instalación, ejecute",
    "toVerify": "para verificar.",
    "current": "Actual",
    "baseUrlPlaceholder": "https://.../v1",
    "resetToDefault": "Restablecer los valores predeterminados",
    "providerModelPlaceholder": "proveedor/id-modelo",
    "apply": "Aplicar",
    "reset": "Reiniciar",
    "manualConfig": "Configuración manual",
    "backups": "Copias de seguridad",
    "configBackups": "Configurar copias de seguridad",
    "noBackupsYet": "Aún no hay copias de seguridad. Las copias de seguridad se crean automáticamente antes de cada aplicación o reinicio.",
    "restore": "Restaurar",
    "backupRestoredReloading": "¡Copia de seguridad restaurada! Estado de recarga...",
    "failedRestoreBackup": "No se pudo restaurar la copia de seguridad",
    "applied": "¡Aplicado!",
    "failed": "Fallido",
    "resetDone": "¡Reiniciar!",
    "omnirouteConfiguredOpenAiCompatible": "OmniRoute está configurado como proveedor compatible con OpenAI",
    "provider": "Proveedor",
    "model": "modelo",
    "providers": "Proveedores",
    "auth": "autenticación",
    "noApiKeysAvailable": "No hay claves API disponibles",
    "usingDefaultOmniroute": "Usando por defecto: sk_omniroute",
    "updateConfig": "Actualizar configuración",
    "applyConfig": "Aplicar configuración",
    "noBackupsAvailable": "No hay copias de seguridad disponibles.",
    "profileSaved": "¡Perfil \"{name}\" guardado!",
    "failedSaveProfile": "No se pudo guardar el perfil",
    "profileActivated": "¡Perfil activado!",
    "failedActivateProfile": "No se pudo activar el perfil",
    "profiles": "Perfiles",
    "savedProfiles": "Perfiles guardados",
    "noProfilesYet": "Aún no se han guardado perfiles. Guarde la configuración actual como perfil a continuación.",
    "activate": "Activar",
    "deleteProfile": "Eliminar perfil",
    "profileNamePlaceholder": "Nombre del perfil (por ejemplo, cuenta personal)",
    "saveCurrent": "Guardar actual",
    "codexAuthNotePrefix": "Usos del códice",
    "codexAuthNoteMiddle": "con",
    "codexAuthNoteSuffix": "Haga clic en \"Aplicar\" para configurar automáticamente.",
    "claudeManualConfiguration": "Claude CLI - Configuración manual",
    "codexManualConfiguration": "CLI del Codex: configuración manual",
    "droidManualConfiguration": "Droid de fábrica - Configuración manual",
    "openClawManualConfiguration": "Garra abierta - Configuración manual",
    "clineManualConfiguration": "Configuración manual de línea",
    "kiloManualConfiguration": "Configuración manual del código Kilo",
    "whenToUseLabel": "cuando usar",
    "openToolDocs": "Abrir documentos de herramientas",
    "toolUseCases": {
      "claude": "Úselo cuando desee flujos de trabajo de planificación sólidos y refactorizaciones largas de varios archivos con Claude Code.",
      "codex": "Úselo cuando su equipo esté estandarizado en los flujos CLI de OpenAI Codex y la autenticación basada en perfiles.",
      "droid": "Úselo cuando necesite un agente terminal liviano enfocado en codificación rápida y bucles de ejecución de comandos.",
      "openclaw": "Úselo cuando desee un agente de codificación estilo Open Claw pero enrutado a través de políticas de OmniRoute.",
      "cline": "Úselo cuando configure agentes de codificación dentro de editores y desee una configuración guiada con modelos OmniRoute.",
      "kilo": "Úselo cuando su flujo de trabajo dependa de los comandos de Kilo Code y de ediciones iterativas rápidas.",
      "cursor": "Úselo cuando codifique en Cursor y necesite modelos personalizados compatibles con OpenAI a través de OmniRoute.",
      "continue": "Úselo cuando ejecute Continuar en IDE y necesite una configuración de proveedor portátil basada en JSON.",
      "opencode": "Úselo cuando prefiera ejecuciones de agentes nativos de terminal y automatización con scripts a través de OpenCode.",
      "kiro": "Utilícelo al integrar Kiro y controlar el enrutamiento de modelos de forma centralizada desde OmniRoute.",
      "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute.",
      "antigravity": "Úselo cuando el tráfico de Antigravity/Kiro debe interceptarse a través de MITM y enrutarse a OmniRoute.",
      "copilot": "Úselo cuando desee una experiencia de usuario estilo chat Copilot mientras aplica las claves de OmniRoute y las reglas de enrutamiento.",
      "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": "Úselo cuando necesite un asistente de IA nativo de terminal liviano para tareas rápidas.",
      "hermes-agent": "__MISSING__:Use when you need Hermes Agent (by Nousresearch) with default, delegation, vision and auxiliary models routed through OmniRoute.",
      "custom": "Úselo para implementaciones de herramientas personalizadas o configuraciones genéricas compatibles con OpenAI."
    },
    "toolDescriptions": {
      "antigravity": "IDE antigravedad de Google con MITM",
      "claude": "CLI del Código Antrópico Claude",
      "codex": "CLI del Códice OpenAI",
      "droid": "Asistente de IA de droide de fábrica",
      "openclaw": "Asistente de IA Open Claw",
      "cline": "CLI del asistente de codificación AI de Cline",
      "kilo": "CLI del Asistente de Inteligencia Artificial de Kilo Code",
      "cursor": "Editor de código AI del cursor",
      "continue": "Continuar Asistente de IA",
      "opencode": "OpenCode AI coding agent (Terminal)",
      "kiro": "Amazon Kiro — AI-powered IDE",
      "windsurf": "Windsurf AI Code Editor",
      "copilot": "GitHub Copilot AI Assistant",
      "qwen": "Alibaba Qwen Code CLI",
      "amp": "Sourcegraph Amp coding assistant CLI",
      "hermes": "Asistente de terminal de IA de Hermes",
      "hermes-agent": "__MISSING__:Hermes Agent (by Nousresearch) - Advanced terminal AI with multi-model support (delegation, vision, compression, etc.)",
      "custom": "Generador de configuración CLI o SDK genérico compatible con OpenAI"
    },
    "guides": {
      "cursor": {
        "notes": {
          "0": "Requiere una cuenta de Cursor Pro para utilizar esta función.",
          "1": "El cursor enruta las solicitudes a través de su propio servidor, por lo que no se admite el punto final local. Habilite Cloud Endpoint en Configuración."
        },
        "steps": {
          "1": {
            "title": "Abrir configuración",
            "desc": "Vaya a Configuración -> Modelos"
          },
          "2": {
            "title": "Habilitar la API OpenAI",
            "desc": "Habilite la opción \"Clave API OpenAI\""
          },
          "3": {
            "title": "URL básica"
          },
          "4": {
            "title": "Clave API"
          },
          "5": {
            "title": "Agregar modelo personalizado",
            "desc": "Haga clic en \"Ver todos los modelos\" -> \"Agregar modelo personalizado\""
          },
          "6": {
            "title": "Seleccionar modelo"
          }
        }
      },
      "continue": {
        "steps": {
          "1": {
            "title": "Abrir configuración",
            "desc": "Abrir el archivo de configuración Continuar"
          },
          "2": {
            "title": "Clave API"
          },
          "3": {
            "title": "Seleccionar modelo"
          },
          "4": {
            "title": "Agregar configuración de modelo",
            "desc": "Agregue la siguiente configuración a su matriz de modelos:"
          }
        },
        "notes": {
          "0": "Continue usa un archivo de configuración JSON."
        }
      },
      "opencode": {
        "steps": {
          "1": {
            "title": "Install OpenCode",
            "desc": "Install via npm: npm install -g opencode-ai"
          },
          "2": {
            "title": "API Key"
          },
          "3": {
            "title": "Set Base URL",
            "desc": "opencode config set baseUrl {baseUrl}"
          },
          "4": {
            "title": "Select Model"
          },
          "5": {
            "title": "Use Thinking Variant",
            "desc": "For thinking models, run with --variant high/low/max (example command below)."
          }
        },
        "notes": {
          "0": "OpenCode requiere configuración de clave API.",
          "1": "Establece la URL base a tu endpoint de OmniRoute."
        }
      },
      "kiro": {
        "steps": {
          "1": {
            "title": "Open Kiro Settings",
            "desc": "Go to Settings → AI Provider"
          },
          "2": {
            "title": "Base URL",
            "desc": "Paste your OmniRoute endpoint URL"
          },
          "3": {
            "title": "API Key"
          },
          "4": {
            "title": "Select Model"
          }
        },
        "notes": {
          "0": "Kiro requiere cuenta de Amazon."
        }
      },
      "windsurf": {
        "steps": {
          "1": {
            "title": "Open AI Settings",
            "desc": "Click the AI Settings icon in Windsurf or go to Settings"
          },
          "2": {
            "title": "Add Custom Provider",
            "desc": "Select \"Add custom provider\" (OpenAI-compatible)"
          },
          "3": {
            "title": "Base URL",
            "desc": "http://127.0.0.1:20128/v1"
          },
          "4": {
            "title": "API Key",
            "desc": "Select your OmniRoute API key"
          },
          "5": {
            "title": "Select Model",
            "desc": "Choose a model from the dropdown"
          }
        }
      }
    },
    "autoConfiguredTab": "Auto Configured Tab",
    "toolCategoriesDesc": "Tool Categories Desc",
    "allToolsTab": "All Tools Tab",
    "guidedClientsTab": "Guided Clients Tab",
    "mitmClientsTab": "Mitm Clients Tab",
    "customCliTab": "CLI personalizada",
    "toolCategories": "Tool Categories",
    "visibleToolsCount": "{count} herramientas disponibles",
    "customCliBuilderTitle": "Constructor CLI compatible con OpenAI",
    "customCliBuilderDescription": "Genere variables de entorno y fragmentos JSON para cualquier CLI o SDK que acepte una URL base, una clave API y un ID de modelo compatibles con OpenAI.",
    "customCliNoModels": "Conecte al menos un proveedor para completar los selectores de modelos.",
    "customCliNameLabel": "Nombre CLI",
    "customCliNamePlaceholder": "por ej. CLI de mi equipo",
    "customCliDefaultModelLabel": "Modelo predeterminado",
    "customCliDefaultModelHelp": "Utilice cualquier ID de modelo o combo de OmniRoute. La mayoría de las CLI compatibles con OpenAI solo necesitan la URL base /v1 más una cadena de modelo.",
    "customCliKeyHelper": "Para instalaciones locales, OmniRoute puede utilizar sk_omniroute. En modo nube, elija una de sus claves API de administración.",
    "customCliAliasMappingsLabel": "Mapeos de alias",
    "customCliAliasMappingsHelp": "Alias de ayuda opcionales para scripts contenedores o archivos de configuración que desean nombres abreviados estables.",
    "customCliAddAlias": "Agregar alias",
    "customCliNoMappings": "Aún no hay asignaciones de alias. Agregue uno si los scripts de su contenedor o equipo usan nombres cortos estables.",
    "customCliAliasPlaceholder": "por ej. revisión",
    "customCliTargetModelLabel": "modelo objetivo",
    "customCliEndpointHintLabel": "Cómo cablear el punto final",
    "customCliEndpointHint": "Dirija cualquier cliente compatible con OpenAI a la URL base de OmniRoute /v1. El punto final de finalización del chat sin procesar es {endpoint}. Utilice el bloque JSON cuando la herramienta quiera un objeto proveedor, o el script env cuando lea variables OPENAI_*.",
    "customCliEnvBlockTitle": "Fragmento de entorno/shell",
    "customCliJsonBlockTitle": "Bloque JSON del proveedor",
    "copilotConfigGenerator": "Generador de configuración de GitHub Copilot",
    "copilotApiKey": "Clave API",
    "copilotFilterModelsPlaceholder": "Filtrar modelos...",
    "copilotMaxInputTokens": "Fichas de entrada máximas",
    "copilotMaxOutputTokens": "Fichas de salida máxima",
    "copilotToolCalling": "Llamada de herramientas",
    "copilotPasteInto": "Pegar en: ",
    "wireApiChatCompletions": "Finalizaciones de chat (/chat/completions)",
    "wireApiResponses": "API de respuestas (/respuestas)"
  },
  "combos": {
    "title": "combos",
    "description": "Cree combinaciones de modelos con enrutamiento ponderado y soporte alternativo",
    "autoCatalogTitle": "Catálogo de enrutamiento automático",
    "autoCatalogTemplateCount": "{count} plantillas",
    "autoCatalogDescription": "Las combinaciones automáticas/* integradas se resuelven dinámicamente desde proveedores conectados. Utilice cualquiera de estos ID como campo modelo; no es necesaria ninguna configuración.",
    "autoCatalogExpand": "Ampliar el catálogo de enrutamiento automático",
    "autoCatalogCollapse": "Contraer catálogo de enrutamiento automático",
    "createCombo": "Crear combinación",
    "editCombo": "Editar combinación",
    "deleteCombo": "Eliminar combinación",
    "noModels": "Sin modelos",
    "noModelsYet": "Aún no se han agregado modelos",
    "addModel": "Agregar modelo",
    "addModelToCombo": "Agregar modelo al combo",
    "routingStrategy": "Estrategia de enrutamiento",
    "maxRetries": "Reintentos máximos",
    "timeout": "Tiempo de espera (ms)",
    "healthcheck": "control de salud",
    "priority": "Prioridad",
    "fallback": "Respaldo",
    "roundRobin": "Ronda Robin",
    "random": "Aleatorio",
    "leastLatency": "Menor latencia",
    "comboName": "Nombre combinado",
    "comboNamePlaceholder": "mi-combo",
    "deleteConfirm": "¿Eliminar esta combinación?",
    "noCombosYet": "Aún no hay combinaciones",
    "comboCreated": "Combo creado exitosamente",
    "comboUpdated": "Combo actualizado exitosamente",
    "comboDeleted": "Combinación eliminada",
    "failedCreate": "No se pudo crear el combo",
    "failedUpdate": "No se pudo actualizar el combo",
    "errorCreating": "Error al crear combo",
    "errorUpdating": "Error al actualizar el combo",
    "errorDeleting": "Error al eliminar el combo",
    "testFailed": "La solicitud de prueba falló",
    "failedToggle": "No se pudo alternar el combo",
    "testResults": "Resultados de la prueba: {name}",
    "resolvedBy": "Resuelto por:",
    "more": "+{count} más",
    "reqs": "requisitos",
    "success": "éxito",
    "proxyConfigured": "Proxy configurado",
    "copyComboName": "Copiar nombre combinado",
    "enableCombo": "Habilitar combinación",
    "disableCombo": "Desactivar combinación",
    "testCombo": "combinación de prueba",
    "duplicate": "Duplicar",
    "proxyConfig": "Configuración de proxy",
    "nameRequired": "El nombre es obligatorio",
    "nameInvalid": "Sólo letras, números, -, _, / y . permitido",
    "nameHint": "Letras, números, -, _, / y . permitido",
    "priorityDesc": "Retroceso secuencial: prueba primero el modelo 1, luego el 2, etc.",
    "weightedDesc": "Distribuye el tráfico por porcentaje de peso con respaldo",
    "roundRobinDesc": "Distribución circular: cada solicitud pasa al siguiente modelo en rotación",
    "contextRelay": "Context Relay",
    "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate",
    "randomDesc": "Selección aleatoria uniforme y luego recurrir a los modelos restantes.",
    "leastUsedDesc": "Elige el modelo con menos solicitudes y equilibra la carga a lo largo del tiempo.",
    "costOptimizedDesc": "Rutas al modelo más barato primero según el precio",
    "resetAware": "RR con reconocimiento de reinicio",
    "resetAwareDesc": "Equilibra la cuota restante con los restablecimientos semanales y de 5 h, y luego realiza todos contra todos puntuaciones similares",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each model once before reshuffling",
    "models": "Modelos",
    "autoBalance": "Equilibrio automático",
    "advancedSettings": "Configuración avanzada",
    "retryDelay": "Retardo de reintento (ms)",
    "concurrencyPerModel": "Concurrencia / Modelo",
    "queueTimeout": "Tiempo de espera de cola (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": "Déjelo vacío para usar los valores predeterminados globales. Estos anulan la configuración por proveedor.",
    "failoverBeforeRetry": "Conmutación por error antes de reintentar",
    "maxSetRetries": "Reintentos de configuración máxima",
    "setRetryDelayMs": "Establecer retraso de reintento (ms)",
    "moveUp": "Subir",
    "moveDown": "Bajar",
    "removeModel": "Quitar",
    "saving": "Guardando...",
    "weighted": "ponderado",
    "leastUsed": "Menos utilizado",
    "costOpt": "Opción de costo",
    "strategyGuideTitle": "Cómo utilizar esta estrategia",
    "strategyGuideWhen": "cuando usar",
    "strategyGuideAvoid": "evitar cuando",
    "strategyGuideExample": "Ejemplo",
    "strategyGuide": {
      "priority": {
        "when": "Tiene un modelo preferido y sólo desea recurrir al fracaso.",
        "avoid": "Necesita distribución de solicitudes entre modelos.",
        "example": "Modelo de codificación primaria con respaldo más económico para cortes."
      },
      "weighted": {
        "when": "Necesita tráfico controlado dividido entre modelos.",
        "avoid": "No se pueden mantener pesos precisos a lo largo del tiempo.",
        "example": "80% de modelo estable + 20% de implementación de modelo canario."
      },
      "round-robin": {
        "when": "Quiere una distribución predecible y uniforme.",
        "avoid": "Los modelos difieren demasiado en latencia o costo.",
        "example": "Mismo modelo en varias cuentas para distribuir el rendimiento."
      },
      "random": {
        "when": "Quiere una distribución sencilla con una configuración mínima.",
        "avoid": "Necesita estrictas garantías de tráfico.",
        "example": "Creación rápida de prototipos con modelos equivalentes."
      },
      "least-used": {
        "when": "Quiere un equilibrio adaptativo basado en la demanda en vivo.",
        "avoid": "El tráfico es demasiado bajo para beneficiarse del equilibrio de uso.",
        "example": "Cargas de trabajo mixtas en las que un modelo a menudo se sobrecarga."
      },
      "cost-optimized": {
        "when": "La reducción de costos es su principal prioridad.",
        "avoid": "Faltan datos de precios o están desactualizados.",
        "example": "Trabajos en segundo plano o por lotes donde se prefiere un menor costo."
      },
      "reset-aware": {
        "when": "Se enruta a través de varias cuentas con telemetría de cuotas y diferentes ventanas de restablecimiento.",
        "avoid": "La telemetría de cuotas no está disponible para la mayoría de las cuentas.",
        "example": "Prefiera un restablecimiento semanal del 60 % de la cuenta mañana a un restablecimiento del 80 % más tarde."
      },
      "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."
      },
      "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."
      },
      "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."
      },
      "fill-first": {
        "when": "Úselo cuando desee agotar por completo la cuota de un proveedor antes de pasar al siguiente.",
        "avoid": "Evite cuando necesite equilibrio de carga a nivel de solicitud entre proveedores.",
        "example": "Ejemplo: utilice todos los créditos de Deepgram de $200 antes de recurrir a Groq."
      },
      "auto": {
        "when": "Úselo cuando necesite un enrutamiento de puntuación multifactor basado en el costo, la latencia y la calidad.",
        "avoid": "Evítelo cuando necesite un orden de prioridad estricto o persistencia histórica.",
        "example": "Ejemplo: solicitudes de equilibrio entre modelos con diferentes puntos fuertes."
      },
      "lkgp": {
        "when": "Úselo cuando desee enrutar según las tasas históricas de éxito y el rendimiento.",
        "avoid": "Evite cuando los datos históricos sean limitados o poco confiables.",
        "example": "Ejemplo: ruta hacia modelos con un buen historial en tareas específicas."
      },
      "context-optimized": {
        "when": "Úselo cuando necesite optimizar el uso de la ventana de contexto en todos los modelos.",
        "avoid": "Evite cuando los modelos tengan una duración de contexto similar o las tareas sean simples.",
        "example": "Ejemplo: distribuir conversaciones largas entre modelos con ventanas de contexto más grandes."
      }
    },
    "advancedHelp": {
      "maxRetries": "Cuántos reintentos se intentan antes de fallar una solicitud.",
      "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": "Cuando está habilitado, cualquier error ascendente desencadena una conmutación por error inmediata al siguiente destino combinado, omitiendo todos los reintentos y las URL alternativas.",
      "maxSetRetries": "Número de veces que se reintenta el conjunto de objetivos completo cuando todos los objetivos fallan. 0 = ningún reintento de nivel establecido.",
      "setRetryDelayMs": "Retraso entre reintentos de nivel establecido, lo que da tiempo a los problemas transitorios para resolverse."
    },
    "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": "Rutas menos utilizadas para distribuir la demanda a lo largo del tiempo.",
    "usageGuideHide": "Esconder",
    "usageGuideDontShowAgain": "No volver a mostrar",
    "usageGuideShow": "mostrar guía",
    "quickTestTitle": "Combo listo para validar",
    "quickTestDescription": "Ejecute una prueba ahora para confirmar el comportamiento de reserva y latencia.",
    "testNow": "Prueba ahora",
    "pricingCoverage": "Cobertura de precios",
    "pricingCoverageHint": "La optimización de costos funciona mejor cuando todos los modelos combinados tienen precios.",
    "pricingAvailable": "Precios disponibles",
    "pricingMissing": "Sin precios",
    "pricingAvailableShort": "carillo",
    "pricingMissingShort": "sin precio",
    "warningRoundRobinSingleModel": "El round-robin es más útil con al menos 2 modelos.",
    "warningCostOptimizedPartialPricing": "Solo {priced} de los modelos {total} tienen precios. El enrutamiento puede tener en cuenta parcialmente los costos.",
    "warningCostOptimizedNoPricing": "No se encontraron datos de precios para este combo. El costo optimizado puede enrutarse inesperadamente.",
    "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": "¿Listo para guardar?",
    "readinessDescription": "Revisa la lista de verificación antes de crear o actualizar este combo.",
    "readinessCheckName": "El nombre del combo es válido",
    "readinessCheckModels": "Hay al menos un modelo seleccionado",
    "readinessCheckWeights": "El total de pesos es 100%",
    "readinessCheckWeightsOptional": "La regla de pesos no aplica",
    "readinessCheckPricing": "Hay datos de precios disponibles",
    "readinessCheckPricingOptional": "La regla de precios no aplica",
    "saveBlockedTitle": "El guardado está bloqueado hasta corregir estos puntos:",
    "saveBlockName": "Define un nombre para el combo.",
    "saveBlockModels": "Añade al menos un modelo.",
    "saveBlockWeighted": "Ajusta los pesos a 100% (actual: {total}%).",
    "saveBlockPricing": "Añade precios para al menos un modelo o elige otra estrategia.",
    "recommendationsLabel": "Configuración recomendada",
    "applyRecommendations": "Aplicar recomendaciones",
    "recommendationsUpdated": "Recomendaciones actualizadas para {strategy}.",
    "recommendationsApplied": "Se aplicaron recomendaciones a este 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.",
    "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)",
    "explorationRateLabel": "Exploration Rate",
    "explorationRateHint": "{percent}% of requests can explore non-optimal providers.",
    "budgetCapLabel": "Budget Cap (USD / request)",
    "budgetCapPlaceholder": "No limit",
    "advancedWeightsTitle": "Advanced: Scoring Weights",
    "weightQuota": "Quota",
    "weightHealth": "Health",
    "weightCostInv": "Cost",
    "weightLatencyInv": "Latency",
    "weightTaskFit": "Task Fit",
    "weightStability": "Stability",
    "weightTierPriority": "Tier",
    "reviewIntelligentTitle": "Intelligent Routing Config",
    "strategyRecommendations": {
      "priority": {
        "title": "Base tolerante a fallos",
        "description": "Usa un modelo principal y mantén una cadena de fallback corta y confiable.",
        "tip1": "Coloca primero tu modelo más confiable.",
        "tip2": "Mantén 1-2 modelos de respaldo con calidad similar.",
        "tip3": "Usa reintentos seguros para absorber fallos transitorios del proveedor."
      },
      "weighted": {
        "title": "Reparto de tráfico controlado",
        "description": "Ideal para despliegues canary y migraciones graduales entre modelos.",
        "tip1": "Empieza con una división conservadora como 90/10.",
        "tip2": "Mantén el total en 100% y autoequilibra tras cambios.",
        "tip3": "Monitorea éxito y latencia antes de subir el peso canary."
      },
      "round-robin": {
        "title": "Reparto de carga predecible",
        "description": "Mejor cuando los modelos son equivalentes y necesitas distribución estable.",
        "tip1": "Usa al menos 2 modelos.",
        "tip2": "Define límites de concurrencia para evitar ráfagas.",
        "tip3": "Usa timeout de cola para fallar rápido bajo saturación."
      },
      "random": {
        "title": "Distribución rápida con poca configuración",
        "description": "Úsala cuando necesites reparto simple sin garantías estrictas.",
        "tip1": "Usa modelos con perfiles de latencia similares.",
        "tip2": "Mantén reintentos activos para absorber fallos aleatorios.",
        "tip3": "Prefiérela para experimentación, no para SLA estrictos."
      },
      "least-used": {
        "title": "Balanceo adaptativo",
        "description": "Enruta a modelos menos usados para reducir cuellos de botella con el tiempo.",
        "tip1": "Funciona mejor con tráfico continuo.",
        "tip2": "Combínala con health checks para un balanceo más seguro.",
        "tip3": "Sigue el uso por modelo para validar la distribución."
      },
      "cost-optimized": {
        "title": "Enrutamiento orientado a costo",
        "description": "Enruta a modelos más baratos cuando hay metadatos de precio disponibles.",
        "tip1": "Asegura cobertura de precios para todos los modelos seleccionados.",
        "tip2": "Mantén un fallback de calidad para prompts difíciles.",
        "tip3": "Úsala en batch/tareas de fondo donde el costo sea el KPI principal."
      },
      "reset-aware": {
        "title": "Rotación de cuentas con reconocimiento de reinicio",
        "description": "Equilibra la cuota restante del proveedor con el tiempo de reinicio.",
        "tip1": "Utilice pasos de cuenta explícitos o enrutamiento de etiquetas de cuenta para proveedores con telemetría de cuotas.",
        "tip2": "Sesión de ajuste versus pesas semanales cuando el agotamiento a corto plazo es más riesgoso.",
        "tip3": "Mantenga la banda de unión pequeña para que las cuentas equivalentes sigan rotando de manera justa."
      },
      "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."
      },
      "fill-first": {
        "description": "Agote las cuotas de los proveedores de forma secuencial antes de retroceder.",
        "tip1": "Úselo para enrutamiento basado en cuotas con cadenas de respaldo claras.",
        "tip2": "Establezca cuotas con precisión para evitar retrocesos prematuros.",
        "tip3": "Funciona mejor con proveedores que ofrecen niveles gratuitos o grupos de crédito.",
        "title": "Agotamiento de cuotas"
      },
      "auto": {
        "description": "Ruta basada en puntuación en tiempo real de costo, latencia, calidad y estado.",
        "tip1": "Deje que el motor equilibre múltiples factores automáticamente.",
        "tip2": "Supervise qué factores impulsan las decisiones de enrutamiento en los registros.",
        "tip3": "Úselo para cargas de trabajo complejas donde ningún factor domina.",
        "title": "Optimización multifactor"
      },
      "lkgp": {
        "description": "Ruta basada en patrones históricos de desempeño y éxito.",
        "tip1": "Requiere suficiente historial de solicitudes para realizar predicciones precisas.",
        "tip2": "Bueno para cargas de trabajo con patrones de rendimiento de modelo consistentes.",
        "tip3": "Supervise la precisión de la predicción y ajuste las ponderaciones según sea necesario.",
        "title": "Enrutamiento basado en historial"
      },
      "context-optimized": {
        "description": "Optimice el enrutamiento según el uso de la ventana de contexto y la eficiencia del token.",
        "tip1": "Enrute conversaciones largas a modelos con ventanas de contexto más grandes.",
        "tip2": "Supervise la utilización del contexto para evitar el desperdicio de tokens.",
        "tip3": "Lo mejor para la IA conversacional que requiere una amplia retención del contexto.",
        "title": "Optimización del contexto"
      },
      "context-relay": {
        "description": "Es mejor cuando se espera una rotación de cuentas y la siguiente cuenta debe heredar un resumen de tareas simplificado.",
        "tip1": "Úselo con proveedores que rotan cuentas para la misma familia de modelos.",
        "tip2": "Establezca el umbral de transferencia por debajo de los límites estrictos de cuota para el tiempo de generación del resumen.",
        "tip3": "Solo establezca un modelo de resumen dedicado si el principal es demasiado caro o inestable.",
        "title": "Prioridad de continuidad de sesión"
      },
      "p2c": {
        "description": "Ruta al proveedor con la carga actual más baja según métricas en tiempo real.",
        "tip1": "Supervise las métricas de estado del proveedor para una evaluación de carga precisa.",
        "tip2": "Funciona mejor con grupos de proveedores homogéneos.",
        "tip3": "Ajuste la sensibilidad para evitar oscilaciones durante los picos de tráfico.",
        "title": "El poder de dos opciones"
      }
    },
    "templateFreeStack": "Free Stack ($0)",
    "templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. 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",
    "builderStage": {
      "basics": {
        "label": "Basics",
        "description": "Name and starting template"
      },
      "steps": {
        "label": "Steps",
        "description": "Provider, model, and account selection"
      },
      "strategy": {
        "label": "Strategy",
        "description": "Routing behavior and advanced settings"
      },
      "intelligent": {
        "label": "Smart Routing",
        "description": "Auto-routing candidate pool, presets, and scoring"
      },
      "review": {
        "label": "Review",
        "description": "Final validation before saving"
      }
    },
    "builderStageVisited": "Stage completed",
    "builderStageCurrent": "Current stage",
    "builderStagePending": "Pending",
    "builderStageLocked": "Locked — complete previous stage first",
    "builderTitle": "Build a Combo",
    "builderBrowseCatalog": "Browse catalog",
    "builderProvider": "Provider",
    "builderLoadingProviders": "Loading providers...",
    "builderSelectProvider": "Select provider",
    "builderModel": "Model",
    "builderSelectModel": "Select model",
    "builderProviderFirst": "Pick provider first",
    "builderAccount": "Account",
    "builderPreview": "Preview",
    "builderAddStep": "Add step",
    "builderDuplicateExact": "Este paso exacto de proveedor/modelo/cuenta ya está en el combo.",
    "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",
    "reviewProviders": "Providers",
    "reviewComboRefs": "Combo References",
    "reviewAdvanced": "Advanced Settings",
    "reviewAgentFlags": "Agent Flags",
    "reviewSequence": "Model Sequence",
    "reviewNoSteps": "No steps configured",
    "builderStagesDescription": "Complete cada etapa para definir combos, crear pasos, seleccionar una estrategia de enrutamiento y revisar los resultados.",
    "builderStepsDescription": "Cree cada paso combinado en orden: proveedor, modelo y luego cuenta. Esto permite reutilizar el mismo proveedor y modelo en diferentes cuentas.",
    "selectProvider": "Seleccionar Proveedor",
    "selectProviderPlaceholder": "Seleccione un proveedor",
    "selectModel": "Seleccionar modelo",
    "selectModelPlaceholder": "Seleccione un proveedor primero",
    "selectAccount": "Seleccionar cuenta",
    "selectComboToReference": "Seleccione combo para referencia",
    "comboReference": "Referencia combinada",
    "addComboReference": "Agregar referencia combinada",
    "addStepBeforeContinue": "Agregue al menos un paso antes de pasar a la siguiente etapa.",
    "previewNextStep": "Vista previa del siguiente paso",
    "autoSelectAccount": "Seleccionar cuenta automáticamente en tiempo de ejecución",
    "modePackBalanced": "equilibrado",
    "modePackBudget": "Presupuesto",
    "modePackPerformance": "Rendimiento",
    "modePackCustom": "personalizado",
    "browseLegacyCatalog": "Explorar el catálogo combinado heredado",
    "agentFeaturesTitle": "Funciones del agente",
    "agentFeaturesDescription": "Habilite funciones avanzadas para los agentes que usan este combo",
    "agentFeaturesSystemMessageOverride": "Anular mensaje del sistema",
    "agentFeaturesSystemMessagePlaceholder": "Eres un asistente experto...",
    "agentFeaturesSystemMessageHint": "Anulación de mensajes del sistema para agentes",
    "agentFeaturesToolFilterRegex": "/patrón-regex/",
    "agentFeaturesToolFilterHint": "Regex de filtro de herramientas para agentes",
    "agentFeaturesContextCacheHint": "Habilite el caché en contexto para las herramientas del agente",
    "agentFeaturesContextCacheProtection": "Proteger el caché de las mutaciones de la herramienta del agente",
    "agentFeaturesContextLength": "Longitud del contexto",
    "agentFeaturesContextLengthPlaceholder": "por ej. 128000",
    "agentFeaturesContextLengthHint": "Define la ventana de contexto para este combo en /v1/models.",
    "agentFeaturesContextLengthErrorInteger": "La longitud del contexto debe ser un número entero válido.",
    "agentFeaturesContextLengthErrorRange": "La longitud del contexto debe estar entre 1000 y 2000000",
    "compressionOverride": "Anulación de compresión",
    "modePack": "Paquete de modo"
  },
  "costs": {
    "title": "Costos",
    "pageDescription": "Realice un seguimiento de los gastos, analice tendencias y administre su presupuesto de IA en todos los proveedores",
    "overview": "Descripción general",
    "budget": "Presupuesto",
    "totalCost": "Costo total",
    "breakdown": "Desglose de costos",
    "noData": "Sin datos de coste",
    "byModel": "Por modelo",
    "byProvider": "Por proveedor",
    "range7d": "7 dias",
    "range30d": "30 dias",
    "range90d": "90 días",
    "rangeAll": "Todo el tiempo",
    "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": "Uso de tokens",
    "totalTokens": "Fichas totales",
    "inputTokens": "Fichas de entrada",
    "outputTokens": "Fichas de salida",
    "inputOutputRatio": "Relación entrada/salida",
    "tokens": "fichas",
    "routingEfficiency": "Eficiencia de enrutamiento",
    "fallbackCount": "Solicitudes de respaldo",
    "fallbackRate": "Tasa de retroceso",
    "modelCoverage": "Cobertura del modelo",
    "modelCoverageDesc": "% de solicitudes con modelo explícito",
    "outOfRequests": "fuera de {total} solicitudes",
    "costByApiKey": "Costo por clave API",
    "costByAccount": "Costo por cuenta",
    "apiKeyName": "Clave API",
    "account": "cuenta",
    "requests": "Solicitudes",
    "cost": "Costo",
    "dayStreak": "racha de dias",
    "weeklyUsagePattern": "Patrón de uso semanal",
    "activityHeatmap": "Actividad (365 días)",
    "less": "menos",
    "more": "Más",
    "monthlyForecast": "Pronóstico mensual",
    "forecastBasis": "Basado en los últimos {days} días",
    "avgDailyCost": "Promedio costo diario",
    "daysRemaining": "Quedan {days} días",
    "periodComparison": "Comparación de períodos",
    "previousPeriod": "Mitad anterior",
    "currentPeriod": "Mitad actual",
    "exportCSV": "Exportar como CSV",
    "exportJSON": "Exportar como JSON",
    "legacyFreeLabel": "__MISSING__:Legacy / Free",
    "costExplorerTitle": "Cost Explorer",
    "costExplorerDescription": "Explore spend by provider, model, API key, account, or service tier.",
    "groupProvider": "Provider",
    "groupModel": "Model",
    "groupApiKey": "API Key",
    "groupAccount": "Account",
    "groupServiceTier": "Service Tier",
    "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",
    "dimension": "Dimension",
    "share": "Share",
    "legacyOrFree": "Legacy / Free",
    "filterRows": "Filter rows…",
    "filterCostExplorerRows": "Filter Cost Explorer rows",
    "noMatchingCostRows": "No matching cost rows",
    "noMatchingCostRowsDescription": "Adjust the search text, grouping, or selected time window.",
    "showingCostRows": "Showing {shown} of {total} matching rows.",
    "showingTopCostRows": "Showing {shown} of {total} matching rows (top 50)."
  },
  "endpoint": {
    "title": "Punto final API",
    "available": "Puntos finales disponibles",
    "cloudProxy": "Proxy en la nube",
    "disableConfirm": "¿Está seguro de que desea desactivar el proxy en la nube?",
    "baseUrl": "URL básica",
    "apiKeyLabel": "Clave API",
    "registeredKeys": "Claves registradas",
    "chatCompletions": "Finalizaciones de chat",
    "responses": "Respuestas",
    "listModels": "Listar modelos",
    "usingCloudProxy": "Usando el proxy en la nube",
    "usingLocalServer": "Usando el servidor local",
    "machineId": "ID de máquina: {id}...",
    "disableCloud": "Deshabilitar la nube",
    "enableCloud": "Habilitar la nube",
    "modelsAcrossEndpoints": "{models} modelos en {endpoints} puntos finales",
    "loadingModels": "Loading available models...",
    "chatDesc": "Chat streaming y no streaming con todos los proveedores",
    "embeddings": "Incrustaciones",
    "embeddingsDesc": "Inserciones de texto para búsqueda y canales RAG",
    "imageGeneration": "Generación de imágenes",
    "imageDesc": "Generar imágenes a partir de mensajes de texto",
    "rerank": "Reclasificar",
    "rerankDesc": "Reclasificar documentos por relevancia para una consulta",
    "audioTranscription": "Transcripción de audio",
    "audioTranscriptionDesc": "Transcribir archivos de audio a texto (Whisper)",
    "textToSpeech": "Texto a voz",
    "textToSpeechDesc": "Convierta texto en voz con sonido natural",
    "musicGeneration": "Music Generation",
    "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)",
    "moderations": "Moderaciones",
    "moderationsDesc": "Moderación de contenidos y clasificación de seguridad.",
    "responsesDesc": "API Responses de OpenAI para Codex y flujos de trabajo agénticos avanzados",
    "listModelsDesc": "Listar todos los modelos disponibles en todos los proveedores conectados",
    "settingsApiDesc": "Leer y modificar la configuración de OmniRoute a través de la API",
    "settingsApi": "Settings API",
    "categoryCore": "APIs Principales",
    "categoryMedia": "Medios y Multi-Modal",
    "categorySearch": "Search & Discovery",
    "categoryUtility": "Utilidades y Gestión",
    "webSearch": "Web Search",
    "webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
    "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": "Habilitar proxy en la nube",
    "whatYouGet": "lo que obtendrás",
    "cloudBenefitAccess": "Accede a tu API desde cualquier parte del mundo",
    "cloudBenefitShare": "Comparta el punto final con su equipo fácilmente",
    "cloudBenefitPorts": "No es necesario abrir puertos ni configurar el firewall",
    "cloudBenefitEdge": "Red de borde global rápida",
    "cloudSessionNote": "Cloud mantendrá su sesión de autenticación durante 1 día. Si no se utiliza, se eliminará automáticamente.",
    "cloudUnstableNote": "Actualmente, la nube es inestable con Claude Code OAuth en algunos casos.",
    "cloudConnected": "¡Proxy en la nube conectado!",
    "connectingToCloud": "Conectándose a la nube...",
    "verifyingConnection": "Verificando conexión...",
    "connecting": "Conectando...",
    "verifying": "Verificando...",
    "connected": "¡Conectado!",
    "disableCloudTitle": "Deshabilitar el proxy en la nube",
    "disableWarning": "Todas las sesiones de autenticación se eliminarán de la nube.",
    "syncingData": "Sincronizando datos más recientes...",
    "disablingCloud": "Deshabilitando la nube...",
    "syncing": "Sincronizando...",
    "disabling": "Desactivando...",
    "cloudConnectedVerified": "¡Cloud Proxy conectado y verificado!",
    "connectedVerificationPending": "Conectado: verificación pendiente",
    "connectedVerificationPendingWithError": "Conectado - verificación pendiente: {error}",
    "cloudDisabledSuccess": "Nube deshabilitada exitosamente",
    "syncedSuccess": "Sincronizado exitosamente",
    "failedDisable": "No se pudo desactivar la nube",
    "failedEnable": "No se pudo habilitar la nube",
    "cloudRequestTimeout": "Tiempo de espera de solicitud de nube",
    "cloudRequestFailed": "Error en la solicitud de nube",
    "cloudWorkerUnreachable": "No se pudo comunicar con el trabajador de la nube. Asegúrese de que el servicio en la nube se esté ejecutando (npm run dev en /cloud).",
    "connectionFailed": "La conexión falló",
    "syncFailed": "No se pudieron sincronizar los datos de la nube",
    "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} — Modelos",
    "noModelsForProvider": "No hay modelos disponibles para este proveedor.",
    "chat": "Charla",
    "embedding": "incrustar",
    "image": "Imagen",
    "custom": "personalizado",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "sectionTitle": "Superficie de integración",
    "sectionDescription": "API compatibles con OpenAI y puntos finales de protocolo operativo",
    "tabApis": "API compatibles con OpenAI",
    "tabProtocols": "Protocolos",
    "tabsAria": "Secciones de punto final",
    "protocolsTitle": "Protocolos",
    "protocolsDescription": "MCP y A2A son puntos finales de primera clase con observabilidad y controles dedicados.",
    "mcpCardTitle": "Servidor MCP",
    "mcpCardDescription": "Protocolo de contexto modelo sobre stdio",
    "a2aCardTitle": "Servidor A2A",
    "a2aCardDescription": "Punto final Agent2Agent JSON-RPC",
    "protocolToolsLabel": "Herramientas",
    "protocolTasksLabel": "Tareas",
    "protocolActiveStreamsLabel": "Corrientes activas",
    "protocolLastActivity": "Última actividad",
    "quickStart": "Inicio rápido",
    "openMcpDashboard": "Gestión abierta de MCP",
    "openA2aDashboard": "Gestión A2A abierta",
    "mcpQuickStartTitle": "Inicio rápido de MCP",
    "mcpQuickStartStep1": "Ejecute el servidor MCP a través de `omniroute --mcp`.",
    "mcpQuickStartStep2": "Configure su cliente MCP para conectarse a través del transporte estándar.",
    "mcpQuickStartStep3": "Invoca herramientas como `omniroute_get_health` y `omniroute_list_combos`.",
    "a2aQuickStartTitle": "Inicio rápido de A2A",
    "a2aQuickStartStep1": "Descubra la tarjeta de agente en `/.well-known/agent.json`.",
    "a2aQuickStartStep2": "Envíe solicitudes JSON-RPC a `POST /a2a` usando `message/send` o `message/stream`.",
    "a2aQuickStartStep3": "Realice un seguimiento y controle las tareas utilizando `tasks/get` y `tasks/cancel`.",
    "completionsLegacy": "Completions (Legacy)",
    "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format",
    "messagesApi": "Mensajes",
    "messagesApiDesc": "Formato API nativo de mensajes antrópicos para proveedores compatibles con Claude",
    "imageEdits": "Ediciones de imágenes",
    "imageEditsDesc": "Edite y modifique imágenes existentes con IA (pintura interna, pintura externa, variaciones)",
    "batchApi": "API por lotes",
    "batchApiDesc": "Procese grandes lotes de solicitudes de forma asincrónica (compatible con OpenAI)",
    "filesApi": "API de archivos",
    "filesApiDesc": "Cargar y administrar archivos para procesamiento por lotes",
    "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.",
    "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": "Contraseña de Sudo (obligatoria en macOS/Linux)",
    "ngrokTitle": "túnel ngrok",
    "ngrokRunning": "corriendo",
    "ngrokStarting": "Comenzando",
    "ngrokStoppedState": "Detenido",
    "ngrokNeedsAuth": "Necesita autenticación",
    "ngrokNotInstalled": "No instalado",
    "ngrokUnsupported": "No compatible",
    "ngrokError": "error",
    "ngrokEnable": "Habilitar túnel",
    "ngrokDisable": "Detener el túnel",
    "ngrokUrlNotice": "Crea un túnel público ngrok.",
    "ngrokAuthTokenLabel": "Authtoken (obligatorio si NGROK_AUTHTOKEN no está configurado)",
    "ngrokAuthTokenPlaceholder": "Ingrese su token de autenticación de ngrok",
    "ngrokLastError": "Último error: {error}",
    "ngrokStarted": "El túnel de ngrok comenzó",
    "ngrokStopped": "El túnel de Ngrok se detuvo",
    "ngrokRequestFailed": "No se pudo actualizar el túnel ngrok",
    "tokenSaverSubtitle": "Gaste menos tokens en cada solicitud.",
    "tokenSaverToolOutput": "Salida de herramienta",
    "tokenSaverLlmOutput": "Salida del LLM",
    "tokenSaverInputCompression": "Compresión de entrada",
    "apiEndpointsCatalogUnavailable": "Catálogo API no disponible",
    "apiEndpointsSearchPlaceholder": "Buscar puntos finales...",
    "apiEndpointsRequiresAuth": "Requiere autenticación",
    "apiEndpointsNoMatch": "Ningún punto final coincide con su filtro",
    "localServer": "Servidor local",
    "cloudOmniroute": "OmniRuta en la nube",
    "copyUrl": "Copiar 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"
  },
  "endpoints": {
    "tabProxy": "Endpoint Proxy",
    "tabApiEndpoints": "Endpoints de API",
    "apiEndpointsTitle": "Endpoints de API",
    "apiEndpointsDescription": "Endpoints de API backend que pueden ser consumidos por otras aplicaciones y servicios.",
    "comingSoon": "Próximamente",
    "plannedFeatures": "Funciones Planeadas",
    "featureRestApi": "Catálogo de endpoints REST API con documentación interactiva",
    "featureWebhooks": "Configuración de webhooks y suscripciones de eventos",
    "featureSwagger": "Generación automática de especificaciones OpenAPI / Swagger",
    "featureAuth": "Gestión de claves API y alcances OAuth por endpoint"
  },
  "mcpDashboard": {
    "loading": "Cargando el panel de MCP...",
    "activate": "activar",
    "deactivate": "desactivar",
    "confirmSwitchCombo": "¿Confirmar el combo {action} \"{combo}\"?",
    "switchComboFailed": "No se pudo cambiar el estado combinado.",
    "switchComboSuccess": "Combo \"{combo}\" actualizado.",
    "confirmApplyProfile": "¿Aplicar perfil de resiliencia \"{profile}\"?",
    "applyProfileFailed": "No se pudo aplicar el perfil de resiliencia.",
    "applyProfileSuccess": "Perfil \"{profile}\" aplicado.",
    "confirmResetBreakers": "¿Reiniciar todos los disyuntores?",
    "resetBreakersFailed": "No se pudo restablecer los disyuntores.",
    "resetBreakersSuccess": "Restablecimiento de los disyuntores.",
    "processStatus": "Estado del proceso",
    "online": "En línea",
    "offline": "Desconectado",
    "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": "Copiar 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}.",
    "pid": "PID",
    "sessionUptime": "tiempo de actividad de la sesión",
    "lastHeartbeat": "último latido",
    "activity24h": "Actividad (24h)",
    "totalCalls": "Llamadas totales",
    "successRate": "Tasa de éxito",
    "avgLatency": "Latencia promedio",
    "topTools": "Herramientas superiores",
    "noToolCalls24h": "No hubo llamadas de herramientas en las últimas 24 horas.",
    "runtimeDetails": "Detalles del tiempo de ejecución",
    "transport": "Transporte",
    "scopesEnforced": "Alcances aplicados",
    "yes": "Sí",
    "no": "No",
    "lastCall": "última llamada",
    "heartbeatPath": "Camino del latido del corazón",
    "operationalControls": "Controles operativos",
    "switchCombo": "Combinación de interruptores",
    "inactive": "inactivo",
    "active": "activo",
    "activateCombo": "Activar combo",
    "deactivateCombo": "Desactivar combo",
    "applyResilienceProfile": "Aplicar perfil de resiliencia",
    "profileAggressive": "agresivo",
    "profileBalanced": "equilibrado",
    "profileConservative": "conservador",
    "applyProfile": "Aplicar perfil",
    "resetCircuitBreakers": "Restablecer disyuntores",
    "resetCircuitBreakersHelp": "Borra el estado actual del interruptor y los contadores de fallas para los proveedores.",
    "resetAllBreakers": "Restablecer todos los interruptores",
    "toolsAndScopes": "Herramientas y alcances",
    "tableTool": "Herramienta",
    "tableScopes": "Alcances",
    "tablePhase": "Fase",
    "tableAudit": "Auditoría",
    "auditLog": "Registro de auditoría",
    "auditSummary": "Llamadas: {total} | página {page} de {totalPages}",
    "allTools": "Todas las herramientas",
    "allResults": "Todos los resultados",
    "success": "Éxito",
    "failure": "Falla",
    "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",
    "offset": "Offset",
    "limit": "Limit",
    "tool": "Tool"
  },
  "a2aDashboard": {
    "loading": "Loading A2A dashboard...",
    "confirmCancelTask": "Cancel task {taskId}?",
    "cancelTaskFailed": "No se pudo cancelar la tarea.",
    "cancelTaskSuccess": "Tarea {taskId} cancelada.",
    "smokeSendFailed": "message/send smoke test failed.",
    "smokeSendSuccessWithTask": "message/send ok (task {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",
    "ok": "ok",
    "totalTasks": "Total tasks",
    "activeStreams": "Corrientes activas",
    "lastTask": "Last task",
    "taskStateOverview": "Task state overview",
    "state": {
      "submitted": "submitted",
      "working": "working",
      "completed": "completed",
      "failed": "failed",
      "cancelled": "cancelado"
    },
    "agentCard": "tarjeta de agente",
    "agentCardPath": "__MISSING__:/.well-known/agent.json",
    "version": "Versión",
    "url": "URL",
    "capabilities": "Capacidades",
    "agentCardNotAvailable": "Tarjeta de agente no disponible.",
    "quickValidation": "Validación rápida",
    "quickValidationDescription": "Ejecuta llamadas de humo a través del punto final `/a2a` en vivo.",
    "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": "Vista",
    "cancel": "Cancelar",
    "previous": "Previous",
    "next": "Next",
    "taskDetail": "Detalle de la tarea",
    "close": "Cerca",
    "metadata": "Metadatos",
    "events": "Eventos",
    "artifacts": "Artefactos",
    "tablePhase": "Table Phase",
    "offset": "Offset",
    "limit": "Limit",
    "skill": "Skill",
    "rpcEndpoint": "ENVIAR /a2a",
    "rpcMethodSend": "mensaje/enviar",
    "rpcMethodStream": "mensaje/transmisión",
    "rpcMethodGet": "tareas/obtener",
    "rpcMethodCancel": "tareas/cancelar",
    "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}."
  },
  "memory": {
    "title": "Memory Management",
    "description": "View and manage stored memory entries",
    "memories": "Memories",
    "totalEntries": "Total Entries",
    "tokensUsed": "Tokens Used",
    "hitRate": "Hit Rate",
    "loading": "Loading memories...",
    "noMemories": "No memories found",
    "search": "Search memories...",
    "allTypes": "All Types",
    "export": "Export",
    "import": "Import",
    "addMemory": "Add Memory",
    "type": "Type",
    "key": "Key",
    "content": "Content",
    "created": "Created",
    "actions": "Actions",
    "delete": "Delete",
    "factual": "Factual",
    "episodic": "Episodic",
    "procedural": "Procedural",
    "semantic": "Semantic",
    "a": "A",
    "pipelineOk": "Canalización correcta ({latencyMs}ms)",
    "pipelineError": "error de canalización",
    "healthUnknown": "Salud desconocida",
    "checkingHealth": "Comprobando…",
    "checkHealth": "comprobar la salud",
    "pageInfo": "Página {page} de {totalPages} ({total} en total)",
    "previous": "Anterior",
    "next": "Siguiente",
    "cancel": "Cancelar",
    "save": "Guardar",
    "keyPlaceholder": "por ej. tema.preferencias.de.usuario",
    "contentPlaceholder": "Valor o contenido JSON para recordar"
  },
  "skills": {
    "title": "Skills",
    "description": "Manage and monitor AI skills",
    "skillsTab": "Skills",
    "executionsTab": "Executions",
    "sandboxTab": "Sandbox",
    "loading": "Loading skills...",
    "noSkills": "No skills found",
    "noExecutions": "No executions found",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "version": "Version",
    "tableDescription": "Description",
    "skill": "Skill",
    "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",
    "timeout": "Timeout",
    "timeoutDesc": "Maximum wait time for response",
    "networkAccess": "Network Access",
    "networkAccessDesc": "Allow outbound network requests",
    "mode": "Mode",
    "q": "Q",
    "filterSkillsPlaceholder": "Filtrar habilidades por nombre, descripción o etiqueta",
    "allModes": "Todos los modos",
    "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": "Mercado de habilidades",
    "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",
    "installSkill": "Instalar habilidad"
  },
  "health": {
    "title": "Estado del sistema",
    "description": "Monitoreo en tiempo real de su instancia de OmniRoute",
    "healthy": "saludable",
    "degraded": "degradado",
    "down": "abajo",
    "uptime": "tiempo de actividad",
    "memory": "Memoria",
    "memoryRss": "Memoria (RSS)",
    "heap": "montón",
    "cpu": "CPU",
    "database": "Base de datos",
    "version": "Versión",
    "lastCheck": "último cheque",
    "providerHealth": "Salud del proveedor",
    "systemMetrics": "Métricas del sistema",
    "tokenHealth": "Salud del token",
    "refreshAll": "Actualizar todo",
    "checkNow": "Comprobar ahora",
    "loadingHealth": "Cargando datos de salud...",
    "failedToLoad": "No se pudieron cargar los datos de salud: {error}",
    "retry": "Reintentar",
    "allOperational": "Todos los sistemas operativos.",
    "issuesDetected": "Problemas del sistema detectados",
    "updatedAt": "Actualizado {time}",
    "latency": "Latencia",
    "latencyP50": "p50",
    "latencyP95": "p95",
    "latencyP99": "p99",
    "millisecondsShort": "{value}ms",
    "notAvailable": "—",
    "totalRequests": "Solicitudes totales",
    "noDataYet": "Aún no hay datos",
    "promptCache": "Caché de aviso",
    "entries": "Entradas",
    "hitRate": "Tasa de aciertos",
    "hitsMisses": "Aciertos/fallos",
    "signatureCache": "Caché de firma",
    "signatureDefaults": "Valores predeterminados",
    "signatureTool": "Herramienta",
    "signatureFamily": "familia",
    "signatureSession": "Sesión",
    "recovering": "Recuperando",
    "noCBData": "No hay datos de disyuntores disponibles. Primero haga algunas solicitudes.",
    "providerHealthStatusAria": "Estado de salud del proveedor",
    "issuesLabel": "Problemas detectados",
    "operational": "Operacional",
    "providers": "Proveedores",
    "configuredProvidersLabel": "Configurado en el tablero",
    "configuredProvidersHint": "Proveedores con credenciales guardadas en /dashboard/providers, independientemente del estado de ejecución.",
    "activeProviders": "{count} active",
    "activeProvidersHint": "Proveedores configurados actualmente habilitados para enrutar solicitudes.",
    "monitoredProviders": "{count} monitored",
    "monitoredProvidersHint": "Proveedores actualmente rastreados por monitores de estado de interruptores.",
    "healthyCount": "{count} saludable",
    "nodeVersion": "Nodo {version}",
    "failures": "{count} error",
    "failuresPlural": "{count} fallas",
    "lastFailure": "último",
    "rateLimitStatus": "Estado del límite de tarifa",
    "activeLimiters": "{count} limitador activo",
    "activeLimitersPlural": "{count} limitadores activos",
    "queued": "En cola",
    "queuedCount": "{count} en cola",
    "running": "corriendo",
    "runningCount": "{count} ejecutándose",
    "ok": "bien",
    "activeLockouts": "Bloqueos activos",
    "resetConfirm": "¿Restablecer todos los disyuntores a un estado saludable? Esto borrará todos los recuentos de fallas y restaurará todos los proveedores al estado operativo.",
    "resetAllTitle": "Restablezca todos los disyuntores al estado saludable",
    "resetting": "Restableciendo...",
    "resetAll": "Restablecer todo",
    "until": "Hasta {time}",
    "limitExhausted": "Exhausted",
    "learnedFromHeaders": "Learned from headers",
    "remainingOfLimit": "{remaining}/{limit} remaining",
    "throttleStatus": "Throttle: {value}",
    "lastHeaderUpdate": "Header update: {age}",
    "databaseHealth": "Estado de la base de datos",
    "stickyBoundSessions": "Sesiones encuadernadas",
    "sessionsByApiKey": "Sesiones por clave API",
    "noActiveSessionsTracked": "Aún no se han registrado sesiones activas.",
    "noSessionQuotaMonitorsActive": "No hay monitores de cuota de sesión activos.",
    "gracefulDegradationStatus": "Estado de degradación elegante",
    "additionalModels": "+{count} más modelos",
    "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"
  },
  "telemetry": {
    "title": "Telemetría del sistema",
    "description": "Señales continuas de solicitud, tiempo de ejecución, sesión y memoria de este proceso OmniRoute.",
    "uptime": "tiempo de actividad",
    "totalRequests": "Solicitudes totales",
    "avgLatency": "Latencia promedio",
    "errorRate": "Tasa de errores",
    "activeConnections": "Conexiones activas",
    "memoryUsage": "Uso de la memoria",
    "latencyTrend": "Tendencia de latencia",
    "throughputTrend": "Tendencia de rendimiento",
    "memoryTrend": "Tendencia de la memoria",
    "refresh": "Actualizar",
    "updatedAt": "Actualizado {time}",
    "loadFailed": "No se pudo cargar la telemetría.",
    "partialData": "La telemetría está parcialmente disponible: {error}"
  },
  "mitm": {
    "title": "Proxy MITM",
    "description": "Proxy transparente para interceptar y enrutar solicitudes de clientes.",
    "enable": "Habilitar el proxy MITM",
    "enableDesc": "Inicie o detenga el proceso de interceptación local y anulación de DNS.",
    "status": "Estado",
    "running": "corriendo",
    "stopped": "Detenido",
    "start": "Empezar",
    "stop": "Detener",
    "refresh": "Actualizar",
    "port": "Puerto proxy",
    "apiKey": "Clave API del enrutador",
    "apiKeyPlaceholder": "Opcional; vuelve a una clave local",
    "sudoPassword": "Contraseña sudo",
    "cachedPassword": "En caché para este proceso",
    "saveSettings": "Guardar configuración",
    "settingsSaved": "Configuración MITM guardada.",
    "startedSuccess": "Se inició el proxy MITM.",
    "stoppedSuccess": "El proxy MITM se detuvo.",
    "saveFailed": "No se pudo actualizar la configuración de MITM.",
    "loadFailed": "No se pudo cargar la configuración de MITM.",
    "invalidPort": "La interceptación MITM transparente actualmente requiere el puerto 443.",
    "certificate": "Certificado de CA",
    "certificateReady": "El certificado está disponible para la instalación de confianza del cliente.",
    "certificateMissing": "El certificado aún no se ha generado.",
    "available": "Disponible",
    "missing": "desaparecido",
    "downloadCert": "Descargar Certificado CA",
    "regenerateCert": "Certificado regenerado",
    "regenerateConfirm": "Esto invalidará la confianza existente del cliente. ¿Continuar?",
    "regenerateSuccess": "Certificado MITM regenerado.",
    "regenerateFailed": "No se pudo regenerar el certificado MITM.",
    "targetRoutes": "Rutas de destino",
    "interceptedRequests": "Solicitudes interceptadas",
    "activeConnections": "Conexiones activas",
    "dnsConfigured": "DNS configurado",
    "pid": "PID",
    "lastIntercept": "Última intercepción",
    "target": "Objetivo",
    "host": "Anfitrión",
    "localPort": "Puerto Local",
    "endpoints": "Puntos finales",
    "enabled": "Habilitado",
    "configured": "Configurado",
    "yes": "si",
    "no": "No",
    "noTargets": "No hay rutas de destino configuradas."
  },
  "limits": {
    "title": "Límites y cuotas",
    "rateLimit": "Límite de tarifa",
    "remaining": "restante",
    "requestsPerMinute": "Solicitudes/min",
    "tokensPerMinute": "Fichas/min",
    "dailyLimit": "Límite diario"
  },
  "logs": {
    "title": "Registros",
    "requestLogs": "Solicitar registros",
    "proxyLogs": "Registros de proxy",
    "auditLog": "Registro de auditoría",
    "console": "Consola",
    "auditLogDesc": "Acciones administrativas y eventos de seguridad.",
    "loading": "Cargando...",
    "refresh": "Actualizar",
    "filterByAction": "Filtrar por acción...",
    "filterByActor": "Filtrar por actor...",
    "filterEntriesAria": "Filtrar entradas del registro de auditoría",
    "filterByActionTypeAria": "Filtrar por tipo de acción",
    "filterByActorAria": "Filtrar por actor",
    "refreshAuditLogAria": "Actualizar el registro de auditoría",
    "tableAria": "Entradas del registro de auditoría",
    "failedFetchAuditLog": "No se pudo recuperar el registro de auditoría",
    "showing": "Mostrando entradas {count} (desplazamiento {offset})",
    "search": "Buscar",
    "timestamp": "Marca de tiempo",
    "action": "acción",
    "actor": "Actor",
    "target": "Objetivo",
    "details": "Detalles",
    "ipAddress": "Dirección IP",
    "notAvailable": "—",
    "noEntries": "No se encontraron entradas del registro de auditoría",
    "previous": "Anterior",
    "next": "Siguiente",
    "providerWarningTitle": "Provider Warning Title",
    "viewDetails": "View Details",
    "eventMetadata": "Event Metadata",
    "eventPayload": "Event Payload",
    "requestId": "Request Id",
    "providerWarningDesc": "Provider Warning Desc",
    "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",
    "clearAll": "Borrar todo",
    "confirmClearActiveRequests": "¿Borrar todas las solicitudes activas?",
    "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",
    "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",
    "timeRange": "Time Range",
    "lastNHours": "Last {hours}",
    "defaultRange": "default",
    "consoleViewer": {
      "fetchFailed": "Failed to fetch logs",
      "copyFailed": "Failed to copy log entry",
      "copyLogEntry": "Copy log entry"
    }
  },
  "onboarding": {
    "welcome": "Bienvenido",
    "security": "Seguridad",
    "test": "prueba",
    "ready": "¡Listo!",
    "setPassword": "Establecer contraseña",
    "addProvider": "Añade tu primer proveedor",
    "getStarted": "Empezar",
    "skip": "Saltar",
    "skipWizard": "Saltar asistente por completo",
    "skipPassword": "Saltar configuración de contraseña",
    "skipAndContinue": "Saltar y continuar",
    "passwordLabel": "Contraseña",
    "confirmPassword": "Confirmar contraseña",
    "enterPassword": "Introduce la contraseña",
    "confirmPasswordPlaceholder": "Confirmar contraseña",
    "passwordsMismatch": "Las contraseñas no coinciden",
    "setupComplete": "¡Configuración completa!",
    "goToDashboard": "Ir al Panel →",
    "welcomeDesc": "OmniRoute es su proxy API de IA local. Enruta solicitudes a múltiples proveedores de IA con equilibrio de carga, conmutación por error y seguimiento de uso.",
    "multiProvider": "Multiproveedor",
    "usageTracking": "Seguimiento de uso",
    "securityDesc": "Establezca una contraseña para proteger su panel u omítala por ahora.",
    "providerDesc": "Conecte su primer proveedor de IA. Puedes agregar más más tarde.",
    "apiKeyRequired": "Clave API (obligatoria)",
    "customUrlOptional": "URL personalizada (opcional)",
    "testDesc": "Verifiquemos que la conexión de su proveedor funcione.",
    "runTest": "Ejecutar prueba de conexión",
    "testingConnection": "Probando conexión...",
    "connectionSuccessful": "¡Conexión exitosa! Su proveedor está listo.",
    "noProviderFound": "No se encontró ningún proveedor. Puede agregar uno desde el panel más tarde.",
    "testFailed": "La prueba falló, pero puedes configurar esto más tarde.",
    "couldNotTest": "No se pudo realizar la prueba en este momento. Puedes probar desde el panel.",
    "doneDesc": "¡Estás listo! Su instancia de OmniRoute está configurada y lista para enviar solicitudes de IA.",
    "yourEndpoint": "Su punto final:",
    "continue": "Continuar",
    "retry": "Reintentar",
    "failedSetPassword": "No se pudo establecer la contraseña. Intentar otra vez.",
    "failedAddProvider": "No se pudo agregar el proveedor. Intentar otra vez.",
    "connectionError": "Error de conexión. Por favor inténtalo de nuevo.",
    "provider": "Proveedor",
    "apiKeyHelp": "Una clave API es una contraseña para los servicios de IA. Obtenga uno del sitio web de su proveedor (por ejemplo, platform.openai.com, console.anthropic.com).",
    "tier": {
      "subtitle": "OmniRoute organiza a los proveedores en tres niveles para que las rutas prefieran primero la ruta más confiable y de menor costo.",
      "tier1": {
        "label": "Clientes premium",
        "description": "CLI de primera clase con flujos de autenticación nativos y modelos de razonamiento."
      },
      "tier2": {
        "label": "Costo optimizado",
        "description": "Proveedores baratos y de alto rendimiento utilizados para el tráfico diario."
      },
      "tier3": {
        "label": "Respaldo y especialidad",
        "description": "Puntos finales especializados o alojados localmente que se utilizan como alternativas."
      },
      "configure": "Configurar proveedores"
    },
    "tierFlowDiagramAlt": "Diagrama alternativo de 3 niveles de OmniRoute",
    "apiKeyMgmt": "Gestión de claves API"
  },
  "providers": {
    "title": "Proveedores",
    "allProviders": "Todos los proveedores",
    "audioProviders": "Proveedores de audio",
    "showFreeOnly": "Sólo gratis",
    "addProvider": "Agregar proveedor",
    "addFirstProvider": "Añade tu primer proveedor",
    "addFirstProviderDesc": "Conecte un proveedor de IA para comenzar a enrutar solicitudes a través de OmniRoute. Puede utilizar proveedores gratuitos, claves API o cuentas OAuth.",
    "learnMore": "Más información",
    "editProvider": "Editar proveedor",
    "deleteProvider": "Eliminar proveedor",
    "noProviders": "No hay proveedores configurados",
    "modelAvailability": "Disponibilidad del modelo",
    "accounts": "Cuentas",
    "newAccount": "Nueva cuenta",
    "deleteConfirm": "¿Está seguro de que desea eliminar este proveedor?",
    "testing": "Probando...",
    "testConnection": "Conexión de prueba",
    "testSuccess": "Conexión exitosa",
    "testFailed": "La conexión falló",
    "available": "Disponible",
    "cooldown": "Enfriamiento",
    "unavailable": "No disponible",
    "unknown": "Desconocido",
    "oauthLabel": "OAuth",
    "compatibleLabel": "compatibles",
    "chat": "Charla",
    "responses": "Respuestas",
    "messages": "Mensajes",
    "oauthProviders": "Proveedores de OAuth",
    "freeProviders": "Proveedores gratuitos",
    "apiKeyProviders": "Proveedores de claves API",
    "compatibleProviders": "Proveedores compatibles con claves API",
    "testAll": "Probar todo",
    "testAllOAuth": "Pruebe todas las conexiones OAuth",
    "testAllFree": "Pruebe todas las conexiones gratuitas",
    "testAllApiKey": "Pruebe todas las conexiones de clave API",
    "testAllCompatible": "Pruebe todas las conexiones compatibles",
    "connected": "{count} Conectado",
    "errorCount": "{count} Error ({code})",
    "errorCountNoCode": "{count} Error",
    "warningCount": "{count} Advertencia",
    "noConnections": "Sin conexiones",
    "expiredBadge": "Expired",
    "expiringSoonBadge": "Expiring Soon",
    "freeTier": "Nivel gratuito",
    "freeTierAvailable": "Nivel gratuito disponible",
    "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)",
    "deprecated": "En desuso",
    "deprecatedProvider": "Este proveedor ha quedado obsoleto.",
    "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.\n\nWe 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.\n\nUse 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.\n\nUse 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"
    },
    "disabled": "Discapacitado",
    "enableProvider": "Habilitar proveedor",
    "disableProvider": "Deshabilitar proveedor",
    "testResults": "Resultados de la prueba",
    "noCompatibleYet": "Aún no se han agregado proveedores compatibles",
    "compatibleHint": "Utilice los botones de arriba para agregar puntos finales compatibles con OpenAI o Anthropic",
    "addOpenAICompatible": "Agregar compatibilidad con OpenAI",
    "addAnthropicCompatible": "Añadir compatible antrópico",
    "addNewProvider": "Agregar nuevo proveedor",
    "backToProviders": "Volver a Proveedores",
    "configureNewProvider": "Configure un nuevo proveedor de IA para usarlo con sus aplicaciones.",
    "providerLabel": "Proveedor",
    "selectProvider": "Seleccione un proveedor",
    "selectedProvider": "Proveedor seleccionado",
    "authMethod": "Método de autenticación",
    "apiKeyLabel": "Clave API",
    "apiKeyRequired": "Se requiere clave API",
    "selectProviderRequired": "Por favor seleccione un proveedor",
    "enterApiKey": "Ingrese su clave API",
    "apiKeySecure": "Su clave API se cifrará y almacenará de forma segura.",
    "oauth2Connect": "Conéctate con OAuth2",
    "oauth2Label": "OAuth2",
    "oauth2Desc": "Conecte su cuenta mediante la autenticación OAuth2.",
    "displayName": "Nombre para mostrar",
    "displayNamePlaceholder": "por ejemplo, API de producción, entorno de desarrollo",
    "displayNameHint": "Opcional. Un nombre descriptivo para identificar esta configuración.",
    "active": "Activo",
    "activeDescription": "Habilite este proveedor para usarlo en sus aplicaciones",
    "cancel": "Cancelar",
    "createProvider": "Crear proveedor",
    "failedCreate": "No se pudo crear el proveedor",
    "errorOccurred": "Se produjo un error. Por favor inténtalo de nuevo.",
    "modelStatus": "Estado del modelo",
    "showConfiguredOnly": "Configured only",
    "allModelsOperational": "Todos los modelos operativos.",
    "modelsWithIssues": "{count} modelo(s) con problemas",
    "allModelsNormal": "Todos los modelos están respondiendo normalmente.",
    "cooldownCleared": "Tiempo de reutilización borrado para {model}",
    "failedClearCooldown": "No se pudo borrar el tiempo de reutilización",
    "loadingAvailability": "Cargando disponibilidad de modelos...",
    "clearCooldown": "Borrar",
    "clearing": "Limpiando...",
    "until": "Hasta {time}",
    "providerTestFailed": "La prueba del proveedor falló",
    "providerTestTimeout": "Provider test timed out — too many connections to test at once",
    "modeTest": "{mode} Prueba",
    "passedCount": "{count} pasó",
    "failedCount": "{count} falló",
    "testedCount": "{count} probado",
    "millisecondsAbbr": "{value}ms",
    "okShort": "bien",
    "errorShort": "ERROR",
    "noActiveConnectionsInGroup": "No se encontraron conexiones activas para este grupo.",
    "allTestsPassed": "Todas las pruebas {total} pasaron",
    "testSummary": "{passed}/{total} pasó, {failed} falló",
    "nameLabel": "Nombre",
    "prefixLabel": "Prefijo",
    "baseUrlLabel": "URL básica",
    "apiTypeLabel": "Tipo de API",
    "prefixHint": "Requerido. Prefijo único para nombres de modelos.",
    "nameHint": "Requerido. Una etiqueta amigable para este nodo.",
    "baseUrlHint": "Requerido.  URL base de la API del proveedor.",
    "anthropicPrefixPlaceholder": "producto ac",
    "openaiPrefixPlaceholder": "oc-prod",
    "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1",
    "openaiBaseUrlPlaceholder": "https://api.openai.com/v1",
    "validateConnection": "Validar conexión",
    "validating": "Validando...",
    "connectionValid": "¡La conexión es válida!",
    "connectionFailed": "La conexión falló. Verifique la URL y la clave.",
    "testKeyLabel": "Clave API de prueba",
    "testKeyPlaceholder": "sk-... (solo para validación)",
    "providerNotFound": "Proveedor no encontrado",
    "deleteConnectionConfirm": "¿Eliminar esta conexión?",
    "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)",
    "failedSetAlias": "No se pudo establecer el alias",
    "failedSaveConnection": "No se pudo guardar la conexión",
    "failedSaveConnectionRetry": "No se pudo guardar la conexión. Por favor inténtalo de nuevo.",
    "failedRetestConnection": "No se pudo volver a probar la conexión",
    "deleteCompatibleNodeConfirm": "¿Eliminar este {type} nodo compatible?",
    "anthropicCompatibleDetails": "Detalles compatibles antrópicos",
    "openaiCompatibleDetails": "Detalles compatibles con OpenAI",
    "messagesApi": "API de mensajes",
    "responsesApi": "API de respuestas",
    "embeddings": "Embeddings",
    "audioTranscriptions": "Audio Transcriptions",
    "audioSpeech": "Audio Speech",
    "imagesGenerations": "Images Generations",
    "chatCompletions": "Finalizaciones de chat",
    "importingModels": "Importando...",
    "importFromModels": "Importar desde /modelos",
    "modelsImported": "{count} models imported",
    "allModelsAlreadyImported": "Todos los modelos ya están importados",
    "noNewModelsToImport": "No hay modelos nuevos para importar — todos los modelos ya están en el registro o en la lista de modelos personalizados",
    "skippingExistingModels": "Omitiendo {count} modelos existentes",
    "autoSync": "Sincronización automática",
    "autoSyncTooltip": "Actualiza automáticamente la lista de modelos cada 24 horas (configurable vía MODEL_SYNC_INTERVAL_HOURS)",
    "autoSyncEnabled": "Sincronización automática activada — los modelos se actualizarán periódicamente",
    "autoSyncDisabled": "Sincronización automática desactivada",
    "autoSyncToggleFailed": "Error al alternar sincronización automática",
    "clearAllModels": "Borrar todos los modelos",
    "clearAllModelsConfirm": "¿Estás seguro de que quieres eliminar todos los modelos de este proveedor?",
    "clearAllModelsSuccess": "Todos los modelos borrados",
    "clearAllModelsFailed": "Error al borrar modelos",
    "addConnectionToImport": "Agregue una conexión para permitir la importación.",
    "noModelsConfigured": "No hay modelos configurados",
    "connectionCount": "{count} conexión(es)",
    "fetchingModels": "Recuperando modelos disponibles...",
    "failedFetchModels": "No se pudieron recuperar los modelos",
    "noModelsFound": "No se encontraron modelos",
    "importFailed": "Importación fallida",
    "noNewModelsAdded": "No se agregaron nuevos modelos.",
    "adding": "Añadiendo...",
    "close": "Close",
    "importingModelsTitle": "Importar modelos",
    "copyModel": "Copiar modelo",
    "filterModels": "Filtrar modelos…",
    "modelsActive": "activos",
    "showModel": "Mostrar modelo",
    "hideModel": "Ocultar modelo",
    "removeModel": "Quitar modelo",
    "rateLimitProtected": "Protegido",
    "rateLimitUnprotected": "Desprotegido",
    "enableRateLimitProtection": "Haga clic para habilitar la protección del límite de velocidad",
    "disableRateLimitProtection": "Haga clic para desactivar la protección del límite de velocidad",
    "productionKey": "Clave de producción",
    "enterNewApiKey": "Ingrese la nueva clave API",
    "codexApplyModalTitle": "Aplicar al códice local",
    "codexApplyTargetLabel": "Ruta de destino",
    "codexApplyBackupLabel": "Copias de seguridad",
    "codexApplyWarning": "Esto reemplazará el auth.json existente. ¿Continuar?",
    "codexApplyConfirmCheckbox": "Confirmo que quiero reemplazar el auth.json existente",
    "codexApply": "Aplicar",
    "bulkTabSingle": "soltero",
    "bulkTabBulkAdd": "Agregar en masa",
    "bulkAddFormatHint": "Una clave por línea. Formato: nombre|apiKey o simplemente apiKey (nombrado automáticamente por índice).",
    "bulkValidateKeys": "Validar cada clave antes de guardar (más lento)",
    "bulkAddAllKeys": "Agregar todas las claves",
    "bulkAddedCount": "{count, plural, one {# key added} other {# keys added}}",
    "bulkFailedCount": "{count, plural, one {# failed} other {# failed}}",
    "optional": "Opcional",
    "anthropicCompatibleName": "Compatible antrópico",
    "openaiCompatibleName": "Compatible con OpenAI",
    "failedImportModels": "No se pudieron importar modelos",
    "noModelsReturnedFromEndpoint": "No se devolvieron modelos desde el punto final /models.",
    "importingModelsProgress": "Importando {current} de {total} modelos...",
    "foundModelsStartingImport": "Se encontraron {count} modelos. Iniciando importación...",
    "importingModelById": "Importando {modelId}...",
    "importSuccessCount": "¡Importado exitosamente {count, plural, one {# model} other {# models}}!",
    "noNewModelsAddedExisting": "No se agregaron nuevos modelos (todos ya existen).",
    "importDoneCount": "✓ ¡Listo! {count, plural, one {# model imported.} other {# models imported.}}",
    "unexpectedErrorOccurred": "Ocurrió un error inesperado",
    "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}",
    "messagesPath": "mensajes",
    "responsesPath": "respuestas",
    "chatCompletionsPath": "chat/finalizaciones",
    "add": "Añadir",
    "edit": "Editar",
    "delete": "Eliminar",
    "anthropic": "antrópico",
    "openai": "AbiertoAI",
    "singleConnectionPerCompatible": "Sólo se permite una conexión por nodo compatible. Agregue otro nodo si necesita más conexiones.",
    "connections": "Conexiones",
    "providerProxyTitleConfigured": "Proxy del proveedor: {host}",
    "configured": "configurado",
    "providerProxyConfigureHint": "Configurar proxy para todas las conexiones de este proveedor",
    "providerProxy": "Proxy del proveedor",
    "repairEnv": "Reparar .env",
    "repairEnvWorking": "Reparando...",
    "repairEnvHint": "Restaura en .env las variables OAuth predeterminadas que faltan sin sobrescribir los valores existentes.",
    "repairEnvSuccess": "Valores OAuth predeterminados restaurados",
    "repairEnvFailed": "No se pudo reparar .env",
    "noConnectionsYet": "Aún no hay conexiones",
    "addFirstConnectionHint": "Agregue su primera conexión para comenzar",
    "addConnection": "Agregar conexión",
    "availableModels": "Modelos disponibles",
    "builtInModels": "Built-in models",
    "builtInModelsHint": "Registry models for this provider. Use the pencil to set compatibility options.",
    "pageAutoRefresh": "La página se actualizará automáticamente...",
    "statusDisabled": "discapacitado",
    "statusConnected": "conectado",
    "statusRuntimeIssue": "problema de tiempo de ejecución",
    "statusAuthFailed": "autenticación fallida",
    "statusRateLimited": "tarifa limitada",
    "statusNetworkIssue": "problema de red",
    "statusTestUnsupported": "prueba no compatible",
    "statusUnavailable": "no disponible",
    "statusFailed": "falló",
    "statusError": "error",
    "oauthAccount": "Cuenta OAuth",
    "errorTypeRuntime": "Tiempo de ejecución local",
    "errorTypeUpstreamAuth": "autenticación ascendente",
    "errorTypeMissingCredential": "credencial faltante",
    "errorTypeRefreshFailed": "Error al actualizar",
    "errorTypeTokenExpired": "Token caducado",
    "errorTypeRateLimited": "Tarifa limitada",
    "errorTypeUpstreamUnavailable": "Upstream no disponible",
    "errorTypeNetworkError": "error de red",
    "errorTypeTestUnsupported": "Prueba no compatible",
    "errorTypeUpstreamError": "Error ascendente",
    "proxySourceGlobal": "Mundial",
    "proxySourceProvider": "Proveedor",
    "proxySourceKey": "clave",
    "proxyConfiguredBySource": "Proxy ({source}): {host}",
    "autoPriority": "Automático: {priority}",
    "proxy": "apoderado",
    "retestAuthentication": "Volver a probar la autenticación",
    "retest": "Volver a probar",
    "disableConnection": "Desactivar conexión",
    "enableConnection": "Habilitar conexión",
    "reauthenticateConnection": "Volver a autenticar esta conexión",
    "proxyConfig": "Configuración de proxy",
    "aliasExistsAlert": "El alias \"{alias}\" ya existe. Utilice un modelo diferente o edite el alias existente.",
    "openRouterAnyModelHint": "OpenRouter admite cualquier modelo. Agregue modelos y cree alias para un acceso rápido.",
    "modelIdFromOpenRouter": "ID del modelo (de OpenRouter)",
    "openRouterModelPlaceholder": "antrópico/claude-3-opus",
    "customModels": "Modelos personalizados",
    "customModelsHint": "Agregue ID de modelo que no estén en la lista predeterminada. Estos estarán disponibles para enrutamiento.",
    "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",
    "compatToolIdShort": "Tool ID 9",
    "compatDeveloperShort": "Developer role",
    "compatDoNotPreserveDeveloper": "Do not preserve 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).",
    "compatProtocolOpenAI": "OpenAI Chat Completions",
    "compatProtocolOpenAIResponses": "OpenAI Responses API",
    "compatProtocolClaude": "Anthropic Messages",
    "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",
    "perModelQuotaToggle": "Alternar cuota por modelo",
    "modelId": "ID del modelo",
    "customModelPlaceholder": "por ej. gpt-4.5-turbo",
    "loading": "Cargando...",
    "removeCustomModel": "Eliminar modelo personalizado",
    "noCustomModels": "Aún no se han agregado modelos personalizados.",
    "allSuggestedAliasesExist": "Todos los alias sugeridos ya existen. Elija un modelo diferente o elimine los alias conflictivos.",
    "failedSaveCustomModel": "No se pudo guardar el modelo personalizado",
    "modelAddedSuccess": "Modelo {modelId} agregado exitosamente",
    "failedAddModelTryAgain": "No se pudo agregar el modelo. Por favor inténtalo de nuevo.",
    "failedSaveImportedModel": "No se pudo guardar el modelo importado en la base de datos personalizada",
    "failedImportModelsTryAgain": "No se pudieron importar modelos. Por favor inténtalo de nuevo.",
    "failedRemoveModelFromDatabase": "No se pudo eliminar el modelo de la base de datos",
    "modelRemovedSuccess": "Modelo eliminado correctamente",
    "failedDeleteModelTryAgain": "No se pudo eliminar el modelo. Por favor inténtalo de nuevo.",
    "compatibleModelsDescription": "Agregue modelos compatibles con {type} manualmente o impórtelos desde el punto final /models.",
    "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229",
    "openaiCompatibleModelPlaceholder": "gpt-4o",
    "apiKeyValidationFailed": "La validación de la clave API falló. Por favor verifique su clave e inténtelo nuevamente.",
    "addProviderApiKeyTitle": "Agregar clave API {provider}",
    "checking": "Comprobando...",
    "check": "comprobar",
    "valid": "Válido",
    "invalid": "Inválido",
    "creating": "Creando...",
    "validationChecksAnthropicCompatible": "La validación verifica {provider} verificando la clave API.",
    "validationChecksOpenAiCompatible": "La validación verifica {provider} a través de /models en su URL base.",
    "priorityLabel": "Prioridad",
    "saving": "Guardando...",
    "save": "Guardar",
    "editConnection": "Editar conexión",
    "accountName": "Nombre de cuenta",
    "email": "Correo electrónico",
    "healthCheckMinutes": "Control de salud (min)",
    "healthCheckHint": "Intervalo de actualización de token proactivo. 0 = deshabilitado.",
    "selectAllModels": "Select all",
    "deselectAllModels": "Deselect all",
    "modelsActiveCount": "{active}/{total} active",
    "noModelsMatch": "No models match \"{filter}\"",
    "groupLabel": "Environment",
    "groupPlaceholder": "e.g. eKaizen, Personal",
    "failedTestConnection": "No se pudo probar la conexión",
    "failed": "Fallido",
    "leaveBlankKeepCurrentApiKey": "Déjelo en blanco para conservar la clave API actual.",
    "editCompatibleTitle": "Editar {type} Compatible",
    "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.",
    "apiKeyForCheck": "Clave API (para verificación)",
    "compatibleProdPlaceholder": "{type} Compatible (Prod.)",
    "tokenRefreshed": "Token refreshed successfully",
    "tokenRefreshFailed": "Token refresh failed",
    "applyCodexAuthLocal": "Apply auth",
    "exportCodexAuthFile": "Export auth",
    "applyClaudeAuthLocal": "Aplicar autenticación",
    "exportClaudeAuthFile": "Autenticación de exportación",
    "importClaudeAuth": "Importar autenticación",
    "claudeApplyModalTitle": "Aplicar al código Claude local",
    "claudeApplyTargetLabel": "Ruta de destino",
    "claudeApplyBackupLabel": "Copias de seguridad",
    "claudeApplyMcpHint": "Se conservará el estado existente de MCP OAuth.",
    "claudeApplyWarning": "Esto reemplazará la sección claudeAiOauth existente. ¿Continuar?",
    "claudeApplyConfirmCheckbox": "Confirmo que quiero reemplazar la sección claudeAiOauth existente",
    "claudeApply": "Aplicar",
    "claudeAuthAppliedLocal": "Autenticación de Claude aplicada localmente",
    "claudeAuthApplyFailed": "No se pudo aplicar la autenticación de Claude localmente",
    "claudeAuthExported": "Archivo de autenticación de Claude exportado",
    "claudeAuthExportFailed": "No se pudo exportar el archivo de autenticación de Claude",
    "claudeImportModalTitle": "Importar autenticación de Claude",
    "claudeImportTabSingle": "soltero",
    "claudeImportTabBulk": "A granel",
    "claudeImportTabUpload": "Subir archivo",
    "claudeImportTabPaste": "Pegar JSON",
    "claudeImportFileLabel": "Elija .credentials.json",
    "claudeImportPasteLabel": "Pegue el contenido JSON",
    "claudeImportEmailLabel": "Correo electrónico de la cuenta",
    "claudeImportNameLabel": "Nombre de la conexión (opcional)",
    "claudeImportOverwriteLabel": "Reemplazar la conexión existente si la cuenta ya existe",
    "claudeImportSubmit": "Importar",
    "claudeImportSuccess": "Conexión Claude importada exitosamente",
    "claudeImportInvalidJson": "No se pudo analizar el archivo como JSON",
    "claudeImportInvalidShape": "El archivo no es un .credentials.json válido",
    "claudeImportDuplicate": "La cuenta ya existe: habilite \"Reemplazar existente\" para sobrescribir",
    "claudeImportIdentityUnverified": "Bootstrap no pudo verificar la cuenta. Habilite \"Reemplazar existente\" o proporcione un correo electrónico.",
    "claudeImportFailed": "No se pudo importar la autenticación de Claude",
    "claudeImportBulkModeUpload": "Subir archivos",
    "claudeImportBulkModePaste": "Pegar matriz JSON",
    "claudeImportBulkModeZip": "Subir ZIP",
    "claudeImportBulkUploadHint": "Coloque o recoja hasta 50 archivos .credentials.json (256 KB cada uno, 10 MB en total).",
    "claudeImportBulkPasteHint": "Pegue una matriz de objetos: [{ json, name?, email? }, ...]",
    "claudeImportBulkZipHint": "ZIP que contiene entradas .json. Máximo 50 entradas, 10 MB descomprimidos.",
    "claudeImportBulkSubmit": "Importar todo",
    "claudeImportBulkSuccess": "Conexiones Claude {count} importadas",
    "claudeImportBulkFailed": "Algunas entradas no se pudieron importar",
    "claudeImportBulkZipExtracting": "Extrayendo ZIP…",
    "claudeImportBulkZipError": "No se pudo extraer el ZIP",
    "applyGeminiAuthLocal": "Aplicar autenticación",
    "exportGeminiAuthFile": "Autenticación de exportación",
    "importGeminiAuth": "Importar autenticación",
    "geminiApplyModalTitle": "Aplicar a la CLI local de Gemini",
    "geminiApplyTargetLabel": "Ruta de destino",
    "geminiApplyBackupLabel": "Copias de seguridad",
    "geminiApplyAccountsHint": "La cuenta activa google_accounts.json se actualizará para que coincida con esta conexión.",
    "geminiApplyWarning": "Esto reemplazará el oauth_creds.json existente y actualizará google_accounts.json. ¿Continuar?",
    "geminiApplyConfirmCheckbox": "Confirmo que quiero reemplazar el oauth_creds.json existente",
    "geminiApply": "Aplicar",
    "geminiAuthAppliedLocal": "Autenticación de Gemini aplicada localmente",
    "geminiAuthApplyFailed": "No se pudo aplicar la autenticación de Gemini localmente",
    "geminiAuthExported": "Archivo de autenticación Gemini exportado",
    "geminiAuthExportFailed": "No se pudo exportar el archivo de autenticación de Gemini",
    "geminiImportModalTitle": "Importar autenticación de Géminis",
    "geminiImportTabSingle": "soltero",
    "geminiImportTabBulk": "A granel",
    "geminiImportTabUpload": "Subir archivo",
    "geminiImportTabPaste": "Pegar JSON",
    "geminiImportFileLabel": "Elija oauth_creds.json",
    "geminiImportPasteLabel": "Pegue el contenido JSON",
    "geminiImportEmailLabel": "Correo electrónico de la cuenta",
    "geminiImportNameLabel": "Nombre de la conexión (opcional)",
    "geminiImportOverwriteLabel": "Reemplazar la conexión existente si la cuenta ya existe",
    "geminiImportSubmit": "Importar",
    "geminiImportSuccess": "Conexión Gemini importada exitosamente",
    "geminiImportInvalidJson": "No se pudo analizar el archivo como JSON",
    "geminiImportInvalidShape": "El archivo no es un oauth_creds.json válido",
    "geminiImportDuplicate": "La cuenta ya existe: habilite \"Reemplazar existente\" para sobrescribir",
    "geminiImportIdentityUnverified": "No se pudo verificar la identidad de id_token. Habilite \"Reemplazar existente\" o proporcione un correo electrónico.",
    "geminiImportFailed": "No se pudo importar la autenticación de Gemini",
    "geminiImportBulkModeUpload": "Subir archivos",
    "geminiImportBulkModePaste": "Pegar matriz JSON",
    "geminiImportBulkModeZip": "Subir ZIP",
    "geminiImportBulkUploadHint": "Suelte o recoja hasta 50 archivos oauth_creds.json (256 KB cada uno, 10 MB en total).",
    "geminiImportBulkPasteHint": "Pegue una matriz de objetos: [{ json, name?, email? }, ...]",
    "geminiImportBulkZipHint": "ZIP que contiene entradas oauth_creds.json. Máximo 50 entradas, 10 MB descomprimidos.",
    "geminiImportBulkSubmit": "Importar todo",
    "geminiImportBulkSuccess": "{count} conexiones Gemini importadas",
    "geminiImportBulkFailed": "Algunas entradas no se pudieron importar",
    "geminiImportBulkZipExtracting": "Extrayendo ZIP…",
    "geminiImportBulkZipError": "No se pudo extraer el 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",
    "importCodexAuth": "Importar autenticación",
    "codexImportModalTitle": "Importar autenticación del Codex",
    "codexImportTabSingle": "soltero",
    "codexImportTabBulk": "A granel",
    "codexImportTabUpload": "Subir archivo",
    "codexImportTabPaste": "Pegar JSON",
    "codexImportFileLabel": "Elija autenticación.json",
    "codexImportFileHint": "Seleccione el archivo auth.json exportado desde Codex o desde OmniRoute.",
    "codexImportPasteLabel": "Pegue el contenido JSON",
    "codexImportEmailLabel": "Correo electrónico de la cuenta",
    "codexImportEmailHint": "Detectado automáticamente desde el archivo; editar si es necesario.",
    "codexImportNameLabel": "Nombre de la conexión (opcional)",
    "codexImportOverwriteLabel": "Reemplazar la conexión existente si la cuenta ya existe",
    "codexImportSubmit": "Importar",
    "codexImportSuccess": "Conexión Codex importada exitosamente",
    "codexImportInvalidJson": "No se pudo analizar el archivo como JSON",
    "codexImportInvalidShape": "El archivo no es un Codex auth.json válido",
    "codexImportDuplicate": "La cuenta ya existe: habilite \"Reemplazar existente\" para sobrescribir",
    "codexImportFailed": "No se pudo importar la autenticación del Codex",
    "codexImportDetectedEmail": "Detectado: {email}",
    "codexImportNoEmailDetected": "No se detectó ningún correo electrónico en el archivo",
    "codexImportBulkModeUpload": "Subir archivos",
    "codexImportBulkModePaste": "Pegar lista",
    "codexImportBulkModeZip": "archivo ZIP",
    "codexImportBulkUploadHint": "Seleccione varios archivos .json o arrástrelos y suéltelos",
    "codexImportBulkPasteHint": "Matriz JSON [ {...}, {...} ] o varios JSON separados por --- en su propia línea",
    "codexImportBulkZipHint": "Cargue un archivo .zip que contenga archivos auth.json (máximo 50 archivos, 10 MB)",
    "codexImportBulkSubmit": "Importar {count} cuentas",
    "codexImportBulkLimit": "Máximo 50 archivos por importación",
    "codexImportBulkSuccess": "{count} importado",
    "codexImportBulkFailed": "{count} falló",
    "codexImportBulkZipExtracting": "Extrayendo ZIP…",
    "codexImportBulkZipError": "No se pudo extraer el ZIP",
    "advancedSettings": "Advanced Settings",
    "chatPathLabel": "Chat Endpoint Path",
    "chatPathPlaceholder": "/chat/completions",
    "chatPathHint": "Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)",
    "modelsPathLabel": "Models Endpoint Path",
    "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",
    "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": "Empresa y nube",
    "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",
    "audio": "Audio",
    "audioProvidersHeading": "Audio Providers Heading",
    "cloudAgentProviders": "Proveedores de agentes en la nube",
    "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.",
    "claudeWebCookiePlaceholder": "sessionKey=sk-ant-...",
    "blackboxWebCookieHint": "Blackbox Web Cookie Hint",
    "blackboxWebCookiePlaceholder": "Blackbox Web Cookie Placeholder",
    "t3ChatWebCookieHint": "Abra t3.chat → DevTools → Aplicación → Almacenamiento local → https://t3.chat, copie 'convex-session-id'. Luego abra DevTools → Red, copie el encabezado completo de la cookie de cualquier solicitud de chat. Pegue ambos valores en los campos siguientes.",
    "t3ChatWebCookiePlaceholder": "ID-sesión-convexa=abc123...",
    "blockClaudeExtraUsageDescription": "Block Claude Extra Usage Description",
    "blockClaudeExtraUsageLabel": "Block Claude Extra Usage Label",
    "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",
    "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",
    "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",
    "geminiCliProjectIdHint": "Su ID de proyecto de Google Cloud. Requerido para cuentas con excepciones. Ingrese su ID de proyecto de GCP para usarlo con Gemini CLI.",
    "geminiCliProjectIdLabel": "ID del proyecto de Google Cloud",
    "geminiCliProjectIdPlaceholder": "mi-id-proyecto-gcp",
    "antigravityProjectIdHint": "Anulación opcional para solicitudes de Antigravity Cloud Code. Déjelo en blanco para utilizar el proyecto descubierto durante 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": "ID del proyecto de Google Cloud",
    "antigravityProjectIdPlaceholder": "mi-id-proyecto-gcp",
    "grokWebCookieHint": "Grok Web Cookie Hint",
    "grokWebCookiePlaceholder": "Grok Web Cookie Placeholder",
    "herokuBaseUrlHint": "Heroku Base Url Hint",
    "hideEmail": "Hide Email",
    "imageProviders": "Image Providers",
    "videoProviders": "Generación de vídeo",
    "embeddingRerankProviders": "Incrustaciones y reclasificación",
    "imagesShortLabel": "Images Short Label",
    "llmProviders": "Llm Providers",
    "localProviderApiKeyOptionalHint": "Local Provider Api Key Optional Hint",
    "localProviderBaseUrlHint": "Local Provider Base Url Hint",
    "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.",
    "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",
    "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": "Buscar proveedores...",
    "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",
    "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",
    "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": "Proveedores de nivel gratuito",
    "freeTierLabel": "Nivel gratuito disponible",
    "freeTierProvidersDesc": "Proveedores con niveles gratuitos: algunos requieren un registro de clave API, otros no necesitan ninguna credencial.",
    "providerSummaryAll": "totales",
    "ideProviders": "Proveedores IDE",
    "ideProvidersDesc": "Editores con suscripción a IA incorporada. Utilice la página del proveedor para importar credenciales directamente desde el llavero IDE.",
    "noIdeProviders": "Ningún proveedor IDE coincide con los filtros actuales.",
    "providerDetailFastTierTooltip": "Aplicar el nivel Codex Fast a todas las conexiones Codex de forma predeterminada",
    "providerDetailFastDefaultLabel": "predeterminado rápido",
    "providerDetailBrowserManualConnect": "Navegador/conexión manual",
    "providerDetailAuthUrl": "URL de autenticación",
    "providerDetailCallbackUrl": "URL de devolución de llamada",
    "providerDetailValidClaudeCredentialsFile": "Archivo de credenciales Claude válido",
    "providerDetailPathAutoDetectedAllOs": "La ruta se detecta automáticamente por sistema operativo (Linux/Mac/Windows).",
    "providerDetailMyClaudeAccountPlaceholder": "Mi cuenta Claude",
    "providerDetailPathAutoDetected": "La ruta se detecta automáticamente por sistema operativo (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": "Estos proveedores utilizan sesiones web del navegador, cookies o tokens web en lugar de claves API. Abra un proveedor para agregar la credencial de sesión requerida.",
    "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": "Asistente de incorporación de proveedores",
    "onboardingWizardShort": "Asistente de incorporación",
    "onboardingWizardDescription": "Conecte proveedores de clave API, compatibles personalizados y OAuth con validación, persistencia y una prueba de conexión inmediata.",
    "onboardingStepType": "Tipo",
    "onboardingStepProvider": "Proveedor",
    "onboardingStepCredentials": "Credenciales",
    "onboardingStepResult": "Resultado",
    "onboardingTypeApiKeyTitle": "Proveedor de claves API",
    "onboardingTypeApiKeyText": "Utilice proveedores integrados como OpenAI, Anthropic, Gemini, Groq, Azure y más.",
    "onboardingTypeCustomTitle": "Proveedor compatible personalizado",
    "onboardingTypeCustomText": "Cree un punto final compatible con OpenAI, Anthropic o Claude Code y agregue su clave.",
    "onboardingTypeOAuthTitle": "Proveedor de OAuth",
    "onboardingTypeOAuthText": "Reutilice los flujos de importación locales, de código de dispositivo o de OAuth existentes para los proveedores de codificación.",
    "onboardingChooseOAuthProvider": "Elija un proveedor de OAuth",
    "onboardingChooseApiKeyProvider": "Elija un proveedor de claves API",
    "onboardingChooseProviderDescription": "Seleccione un proveedor y luego el asistente lo guiará a través de las credenciales y las pruebas.",
    "onboardingChangeType": "Tipo de cambio",
    "onboardingChangeProvider": "Cambiar proveedor",
    "onboardingSearchProviders": "Proveedores de búsqueda…",
    "onboardingApiKeyOptional": "Clave API opcional",
    "onboardingProviderConnected": "Proveedor conectado",
    "onboardingProviderSavedWithWarnings": "Proveedor guardado con advertencias",
    "onboardingProviderFinished": "Incorporación de proveedores finalizada",
    "onboardingYourProviderConnection": "Conexión de tu proveedor",
    "onboardingTestPassed": "Prueba superada",
    "onboardingTestFailed": "Prueba fallida",
    "onboardingOpenProviderDetails": "Abrir detalles del proveedor",
    "onboardingTryInPlayground": "Pruébalo en el patio de recreo",
    "onboardingDefaultConnectionName": "{provider} Primario",
    "onboardingTestingConnection": "Probando la conexión del proveedor...",
    "onboardingValidatingCredentials": "Validando credenciales…",
    "onboardingSavingConnection": "Guardando conexión de proveedor…",
    "onboardingProviderFailed": "Falló la incorporación del proveedor",
    "onboardingCreatingCompatibleProvider": "Creando proveedor compatible…",
    "onboardingSavingCompatibleConnection": "Guardando conexión de proveedor compatible...",
    "onboardingCustomProviderFallbackName": "Proveedor personalizado",
    "onboardingCustomProviderFailed": "Falló la incorporación del proveedor personalizado",
    "onboardingLoadingOAuthConnection": "Cargando conexión OAuth…",
    "onboardingOAuthNoConnectionFound": "OAuth finalizó, pero no se encontró ninguna conexión de proveedor.",
    "onboardingOAuthFailed": "Error al incorporar OAuth",
    "onboardingAddProvider": "Añadir {provider}",
    "onboardingConnectionName": "Nombre de conexión",
    "onboardingApiKeyOptionalLabel": "Clave API (opcional)",
    "onboardingBaseUrlOverride": "Anulación de URL base",
    "onboardingBaseUrlOverrideHint": "Opcional. Almacenado como proveedorSpecificData.baseUrl.",
    "onboardingRegion": "Región",
    "onboardingSearchCx": "Buscar CX / ID del motor",
    "onboardingProviderSpecificIdPlaceholder": "Identificación opcional específica del proveedor",
    "onboardingCustomUserAgent": "Agente de usuario personalizado",
    "onboardingWorking": "Trabajando…",
    "onboardingValidateSaveTest": "Validar, guardar y probar",
    "onboardingBack": "Atrás",
    "onboardingCreateCustomCompatibleProvider": "Crear proveedor compatible personalizado",
    "onboardingCreateCustomCompatibleDescription": "El asistente primero crea un nodo de proveedor, luego almacena y prueba su conexión de clave API.",
    "onboardingProtocol": "Protocolo",
    "onboardingOpenAiCompatible": "Compatible con OpenAI",
    "onboardingAnthropicCompatible": "Compatible con Anthropic",
    "onboardingClaudeCodeCompatible": "Compatible con el Código Claude",
    "onboardingProviderPrefix": "Prefijo de proveedor",
    "onboardingProviderPrefixHint": "Se utiliza para generar la identificación del proveedor administrado.",
    "onboardingChatPath": "Ruta de chat",
    "onboardingModelsPath": "Ruta de modelos",
    "onboardingCreateSaveTest": "Crear, guardar y probar",
    "onboardingConnectProvider": "Conectar {provider}",
    "onboardingOAuthFlowDescription": "OmniRoute abrirá el flujo OAuth existente para este proveedor. Después de iniciar sesión, el asistente recarga la conexión guardada y ejecuta la misma prueba de conexión que la página del proveedor.",
    "onboardingStartOAuthFlow": "Iniciar flujo de OAuth",
    "passthroughModelsDescription": "{provider} acepta ID de modelo nativo del proveedor. Importe desde /models o agregue ID personalizados para enrutamiento.",
    "bedrockModelsDescription": "Los modelos de Amazon Bedrock tienen como alcance la región de AWS. Importe desde /models o agregue ID de modelo Bedrock habilitados en la región seleccionada.",
    "bedrockModelPlaceholder": "antrópico.claude-soneto-4-6",
    "addProviderSessionCookieTitle": "Agregar cookie de sesión {provider}",
    "addProviderWebTokenTitle": "Agregar token web {provider}",
    "addProviderConnectionTitle": "Agregar conexión {provider}",
    "webTokenCredentialLabel": "token de sesión web",
    "webNoAuthCredentialLabel": "No se requiere credencial",
    "webCookieCredentialHint": "Cookie requerida: {credential}. Pegue el valor del encabezado de Cookie de su propia sesión web {provider} que haya iniciado sesión. No incluya el prefijo Cookie:.",
    "webTokenCredentialHint": "Credencial: {credential}. Pegue el valor del token de su propia sesión web {provider} iniciada o una exportación HAR de DevTools si el proveedor lo admite.",
    "webCookieEditHint": "Déjelo en blanco para conservar la cookie de la sesión actual. Cookie requerida: {credential}.",
    "webTokenEditHint": "Déjelo en blanco para conservar el token de la sesión web actual. Credencial: {credential}.",
    "webSessionGuideTitle": "Cómo obtener la credencial de sesión",
    "webSessionGuideIntro": "{provider} utiliza una sesión web del navegador en lugar de una clave API.",
    "webCookieRequiredCredential": "Cookie requerida: {credential}",
    "webTokenRequiredCredential": "Token requerido: {credential}",
    "webSessionGuideStep1": "Inicie sesión en {provider} en su navegador.",
    "webSessionGuideStep2": "Abra las herramientas de desarrollo del navegador e inspeccione una solicitud realizada por la aplicación web.",
    "webSessionGuideStep3": "Copie la credencial requerida del propio dominio del proveedor. Para las cookies, copie solo el valor del encabezado Cookie y omita Cookie:.",
    "webSessionGuideStep4": "Pégalo aquí y comprueba la conexión. Si deja de funcionar, inicie sesión nuevamente y reemplácelo con un valor nuevo.",
    "webSessionSecurityHint": "Trate esto como una contraseña: puede acceder a su cuenta web iniciada hasta que caduque o sea revocada.",
    "webNoAuthGuideTitle": "No se requiere credencial",
    "webNoAuthGuideBody": "{provider} no necesita una clave API ni una cookie. Guarde la conexión para utilizar su punto final web gratuito.",
    "webSessionCredentialValidationFailed": "Error en la validación de credenciales de sesión. Inicie sesión nuevamente, copie una credencial nueva e inténtelo nuevamente.",
    "checkCookie": "comprobar galleta",
    "checkWebToken": "ficha de cheque"
  },
  "settings": {
    "title": "Configuración",
    "general": "generales",
    "security": "Seguridad",
    "appearance": "Apariencia",
    "routing": "Enrutamiento",
    "cache": "caché",
    "resilience": "Resiliencia",
    "routingSettingsIntro": "Controla cómo se enrutan, transforman y envían sus solicitudes a proveedores de IA.",
    "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": "Reintento, enfriamiento y respaldo automáticos cuando fallan los proveedores.",
    "aiSettingsIntro": "Configuraciones específicas de IA para pensar en el presupuesto, el comportamiento del modelo y la compresión.",
    "systemPrompt": "Aviso del sistema",
    "thinkingBudget": "Pensando en el presupuesto",
    "proxy": "apoderado",
    "httpProxy": "HTTP Proxy",
    "1proxy": "1proxy",
    "proxySubTabsAria": "Proxy sections",
    "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": "Proxy MITM",
    "pricing": "Precios",
    "storage": "Almacenamiento",
    "policies": "Políticas",
    "ipFilter": "Filtro IP",
    "comboDefaults": "Valores predeterminados combinados",
    "fallbackChains": "Cadenas de respaldo",
    "changePassword": "Cambiar contraseña",
    "enablePassword": "Habilitar contraseña",
    "darkMode": "Modo oscuro",
    "lightMode": "Modo de luz",
    "memoryTitle": "Memory",
    "memoryDesc": "Persistent cross-session conversational memory",
    "memoryEnabled": "Enable Memory",
    "memoryEnabledDesc": "When enabled, OmniRoute will inject relevant past context.",
    "maxTokens": "Max Tokens",
    "retentionDays": "Retention",
    "recent": "Recent",
    "recentDesc": "Chronological window",
    "semantic": "Semantic",
    "semanticDesc": "Vector search",
    "hybrid": "Hybrid",
    "hybridDesc": "Recent + Semantic",
    "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": "justo ahora",
    "modelsDevStats": "Sync Statistics",
    "modelsDevStatsDesc": "Current models.dev data coverage",
    "providers": "Proveedores",
    "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):",
    "modelsDevInfoOrder": "User Override → models.dev → LiteLLM → Hardcoded Default",
    "systemTheme": "Tema del sistema",
    "debugToggle": "Enable Debug Mode",
    "sidebarVisibilityToggle": "Show Sidebar Items",
    "enableCache": "Habilitar caché",
    "cacheTTL": "TTL de caché",
    "maxCacheSize": "Tamaño máximo de caché",
    "clearCache": "Borrar caché",
    "cacheCleared": "Cache cleared successfully",
    "clearCacheFailed": "Failed to clear cache",
    "cacheHits": "Visitas de caché",
    "cacheMisses": "Errores de caché",
    "hitRate": "Tasa de aciertos",
    "cacheEntries": "Entradas de caché",
    "cacheSettings": "Cache Settings",
    "semanticCache": "Semantic Cache",
    "maxEntries": "Max Entries",
    "ttlMinutes": "TTL (minutes)",
    "promptCache": "Caché de aviso",
    "strategy": "Strategy",
    "preserveClientCache": "Preserve Client Cache",
    "enabled": "Enabled",
    "loading": "Loading...",
    "saving": "Guardando...",
    "save": "Save",
    "circuitBreaker": "Disyuntor",
    "retryPolicy": "Política de reintento",
    "maxRetries": "Reintentos máximos",
    "retryDelay": "Retardo de reintento",
    "timeoutMs": "Tiempo de espera (ms)",
    "enableSystemPrompt": "Habilitar mensaje del sistema",
    "systemPromptText": "Texto de aviso del sistema",
    "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.",
    "resilienceStructureTitle": "Resilience Structure",
    "resilienceStructureDesc": "Esta página solo configura el comportamiento. El estado del interruptor activo se muestra en la página Salud. El reintento específico del combo y el control de espacios por turnos permanecen en la configuración del combo.",
    "enableThinking": "Habilitar el pensamiento",
    "maxThinkingTokens": "Fichas de pensamiento máximo",
    "enableProxy": "Habilitar proxy",
    "proxyUrl": "URL de proxy",
    "pricingRates": "Formato de tarifas de precios",
    "currentPricing": "Resumen de precios actuales",
    "loadingPricing": "Cargando datos de precios...",
    "noPricing": "No hay datos de precios disponibles",
    "input": "Entrada",
    "output": "Salida",
    "cached": "En caché",
    "reasoning": "Razonamiento",
    "cacheCreation": "Creación de caché",
    "customPricing": "Precios personalizados",
    "databaseSize": "Tamaño de la base de datos",
    "backupDb": "Base de datos de respaldo",
    "restoreDb": "Restaurar base de datos",
    "exportData": "Exportar datos",
    "importData": "Importar datos",
    "clearData": "Borrar todos los datos",
    "clearDataConfirm": "Esto eliminará permanentemente todos los datos. ¿Está seguro?",
    "enableRequestLogs": "Habilitar registros de solicitudes",
    "logRetention": "Retención de registros",
    "ipWhitelist": "Lista blanca de IP",
    "ipBlacklist": "Lista negra de IP",
    "addIP": "Agregar IP",
    "savedSuccessfully": "Configuración guardada exitosamente",
    "ai": "IA",
    "advanced": "Avanzado",
    "localMode": "Modo local: todos los datos almacenados en su máquina",
    "settingsSectionsAria": "Secciones de configuración",
    "switchThemes": "Cambiar entre temas claros y oscuros",
    "themeSelectionAria": "Selección de tema",
    "themeLight": "Luz",
    "themeDark": "oscuro",
    "themeSystem": "Sistema",
    "endpointTunnelVisibility": "Visibilidad del túnel de punto final",
    "endpointTunnelVisibilityDesc": "Oculte los controles del túnel desde la página Endpoint sin cambiar el estado del túnel.",
    "showCloudflareTunnel": "Túnel rápido de Cloudflare",
    "showCloudflareTunnelDesc": "Muestre los controles de Cloudflare Quick Tunnel en la página Endpoint.",
    "showTailscaleFunnel": "Embudo de escala de cola",
    "showTailscaleFunnelDesc": "Muestre los controles de Tailscale Funnel en la página Endpoint.",
    "showNgrokTunnel": "túnel ngrok",
    "showNgrokTunnelDesc": "Muestre los controles del túnel ngrok en la página Punto final.",
    "sidebarVisibility": "Hide sidebar items",
    "sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
    "sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
    "hideHealthLogs": "Ocultar registros de verificación de estado",
    "hideHealthLogsDesc": "Cuando está activado, suprime los mensajes [HealthCheck] en la consola del servidor",
    "themeAccent": "Color del tema",
    "themeAccentDesc": "Elige un color predefinido o crea tu propio tema con un solo color",
    "themeCreate": "Crear tema",
    "themeCustom": "Tema personalizado",
    "themeBlue": "Azul",
    "themeRed": "Rojo",
    "themeGreen": "Verde",
    "themeViolet": "Violeta",
    "themeOrange": "Naranja",
    "themeCyan": "Cian",
    "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": "Vaciar caché",
    "flushing": "Sonrojándose…",
    "size": "Tamaño",
    "hits": "Visitas",
    "evictions": "Desalojos",
    "loadingCacheStats": "Cargando estadísticas de caché…",
    "globalProxy": "Proxy global",
    "globalProxyDesc": "Configure un proxy saliente global para todas las llamadas API. Los proveedores individuales, los combos y las claves pueden anular esto.",
    "noGlobalProxy": "No hay ningún proxy global configurado",
    "globalLabel": "Mundial",
    "configure": "Configurar",
    "globalSystemPrompt": "Aviso del sistema global",
    "saved": "Guardado",
    "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...",
    "chars": "{count} caracteres",
    "thinkingBudgetTitle": "Pensando en el presupuesto",
    "thinkingBudgetDesc": "Controle el uso del token de razonamiento de IA en todas las solicitudes",
    "passthrough": "Paso a través",
    "passthroughDesc": "Sin cambios: el cliente controla el presupuesto pensando en",
    "auto": "Automático",
    "autoDesc": "Elimine toda configuración de pensamiento: deje que el proveedor decida",
    "custom": "personalizado",
    "customDesc": "Establecer un presupuesto de token fijo para todas las solicitudes",
    "adaptive": "Adaptativo",
    "adaptiveDesc": "Escale el presupuesto según la complejidad de la solicitud",
    "effortNone": "Ninguno (0 fichas)",
    "effortLow": "Bajo (1K tokens)",
    "effortMedium": "Medio (10.000 tokens)",
    "effortHigh": "Alto (128.000 tokens)",
    "tokenBudget": "Presupuesto simbólico",
    "tokens": "fichas",
    "baseEffortLevel": "Nivel de esfuerzo base",
    "adaptiveHint": "El modo adaptable escala desde este nivel base según el recuento de mensajes, el uso de herramientas y la duración del mensaje.",
    "requireLogin": "Requerir inicio de sesión",
    "requireLoginDesc": "Cuando está activado, el panel requiere contraseña. Cuando esté APAGADO, acceda sin iniciar sesión.",
    "currentPassword": "Contraseña actual",
    "enterCurrentPassword": "Ingrese la contraseña actual",
    "newPassword": "Nueva contraseña",
    "enterNewPassword": "Ingrese una nueva contraseña",
    "confirmPassword": "Confirmar nueva contraseña",
    "confirmPasswordPlaceholder": "Confirmar nueva contraseña",
    "passwordsNoMatch": "Las contraseñas no coinciden",
    "passwordUpdated": "Contraseña actualizada exitosamente",
    "failedUpdatePassword": "No se pudo actualizar la contraseña",
    "errorOccurred": "Se produjo un error",
    "updatePassword": "Actualizar contraseña",
    "setPassword": "Establecer contraseña",
    "apiEndpointProtection": "Protección de terminales API",
    "requireAuthModels": "Requerir clave API para /models",
    "requireAuthModelsDesc": "Cuando está activado, el punto final /v1/models devuelve 404 para solicitudes no autenticadas. Impide el descubrimiento del modelo por parte de usuarios no autorizados.",
    "authModelHeading": "Modelo de autorización activa",
    "authModelClient": "Los puntos finales de la API del cliente (/v1/*, /chat/*, /responses/*, /codex/*, /messages/*) requieren una clave de API de portador.",
    "authModelManagement": "Los puntos finales de administración (/dashboard, /api/*) requieren una sesión de panel o una credencial de administración.",
    "authModelPublic": "Sólo las rutas de inicio de sesión, estado y arranque son públicas.",
    "bruteForceProtection": "Iniciar sesión protección de fuerza bruta",
    "bruteForceProtectionDesc": "Acelere y bloquee /api/auth/login después de fallas repetidas desde la misma IP.",
    "corsAllowedOrigins": "Orígenes permitidos por CORS",
    "corsAllowedOriginsDesc": "Lista separada por comas de orígenes de navegadores permitidos para llamar a este servidor. Lista vacía = sin acceso CORS del navegador (la conexión de servidor a servidor aún funciona). Utilice CORS_ALLOW_ALL=true env var solo para desarrollo.",
    "blockedProviders": "Proveedores bloqueados",
    "blockedProvidersDesc": "Oculte proveedores específicos de la respuesta /v1/models. Los proveedores bloqueados no aparecerán en los listados de modelos.",
    "providersBlocked": "{count} proveedor(es) bloqueado(s) en /models",
    "blockProviderTitle": "Bloquear {provider}",
    "unblockProviderTitle": "Desbloquear {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": "Canalización de transformación de bloque de sistema",
    "systemTransformsDesc": "Canalización de transformaciones ordenada por proveedor aplicada al cuerpo de la solicitud antes del reenvío. Admite cualquier ID de proveedor.",
    "systemTransformsAddProvider": "Agregar proveedor",
    "systemTransformsAddProviderPlaceholder": "Seleccione un proveedor...",
    "systemTransformsAddProviderAllConfigured": "Todos los proveedores ya configurados",
    "systemTransformsRemoveProvider": "Eliminar proveedor",
    "systemTransformsNoProviders": "No hay proveedores configurados. Agregue un proveedor para comenzar.",
    "systemTransformsOpMoveUp": "Subir",
    "systemTransformsOpMoveDown": "Bajar",
    "systemTransformsOpDelete": "Eliminar operación",
    "routingStrategy": "Estrategia de enrutamiento",
    "routingAdvancedGuideTitle": "Guía de ruta avanzada",
    "routingAdvancedGuideHint1": "Utilice Fill First para una prioridad predecible, Round Robin para equidad y P2C para resistencia a la latencia.",
    "routingAdvancedGuideHint2": "Si los proveedores varían en calidad/costo, comience con Opción de costo para trabajo en segundo plano y Menos usado para desgaste equilibrado.",
    "fillFirst": "Llenar primero",
    "fillFirstDesc": "Utilice cuentas en orden de prioridad",
    "roundRobin": "Ronda Robin",
    "roundRobinDesc": "Recorrer todas las cuentas",
    "p2c": "P2C",
    "p2cDesc": "Elige 2 al azar, usa el más saludable.",
    "random": "Aleatorio",
    "randomDesc": "Cuenta aleatoria cada solicitud",
    "leastUsed": "Menos usado",
    "leastUsedDesc": "Elija la cuenta utilizada menos recientemente",
    "costOpt": "Opción de costo",
    "costOptDesc": "Prefiere la cuenta más barata disponible",
    "resetAware": "RR con reconocimiento de reinicio",
    "resetAwareDesc": "Prefiere cuentas con cuota restante saludable y reinicios más cercanos",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling",
    "stickyLimit": "Límite fijo",
    "stickyLimitDesc": "Llamadas por cuenta antes de cambiar",
    "modelAliases": "Alias de modelo",
    "modelAliasesTitle": "Aliases de Modelo",
    "modelAliasesDesc": "Remap model names using exact matches or wildcard patterns.",
    "addCustomAlias": "Agregar Alias Personalizado",
    "deprecatedModelId": "ID del modelo obsoleto",
    "newModelId": "Nuevo ID del modelo",
    "customAliases": "Aliases Personalizados",
    "builtInAliases": "Aliases Integrados",
    "backgroundDegradationTitle": "Degradación de Tareas en Segundo Plano",
    "backgroundDegradationDesc": "Detecta automáticamente tareas en segundo plano (títulos, resúmenes) y redirige a modelos más baratos",
    "enableDegradation": "Activar Degradación en Segundo Plano",
    "enableDegradationHint": "Cuando está activado, las tareas en segundo plano como generación de títulos y resúmenes se redirigen automáticamente a modelos más baratos",
    "tasksDetected": "Tareas detectadas",
    "degradationMap": "Mapa de Degradación de Modelos",
    "premiumModel": "Modelo premium",
    "cheapModel": "Modelo económico",
    "detectionPatterns": "Patrones de Detección",
    "newPattern": "ej: \"generar un título\"",
    "aliasPatternPlaceholder": "claude-soneto-*",
    "aliasTargetPlaceholder": "claude-soneto-4-20250514",
    "pattern": "Patrón",
    "targetModel": "Modelo objetivo",
    "add": "+ Agregar",
    "session": "Sesión",
    "sessionDetailsAria": "Detalles de la sesión",
    "status": "Estado",
    "authenticated": "Autenticado",
    "guest": "Invitado",
    "loginTime": "Hora de inicio de sesión",
    "sessionAge": "Edad de la sesión",
    "browser": "Navegador",
    "clearLocalData": "Borrar datos locales",
    "logout": "Cerrar sesión",
    "clearLocalDataConfirm": "¿Borrar todos los datos locales? Esto restablecerá sus preferencias.",
    "unknown": "Desconocido",
    "systemActor": "sistema",
    "ipAccessControl": "Control de acceso IP",
    "ipAccessControlDesc": "Bloquear o permitir direcciones IP específicas",
    "ipModeDisabled": "Discapacitado",
    "ipModeBlacklist": "Lista negra",
    "ipModeWhitelist": "Lista blanca",
    "ipModeWhitelistPriority": "Prioridad WL",
    "addIpAddress": "Agregar dirección IP",
    "ipAddressPlaceholder": "192.168.1.0/24 o 10.0.*.*",
    "block": "+ Bloquear",
    "allow": "+ Permitir",
    "blocked": "Bloqueado ({count})",
    "allowed": "Permitido ({count})",
    "temporaryBans": "Prohibiciones temporales ({count})",
    "minLeft": "{min}m restantes",
    "auditLog": "Registro de auditoría",
    "searchAuditLogs": "Buscar registros de auditoría...",
    "failedLoadAuditLog": "No se pudo cargar el registro de auditoría",
    "noAuditEvents": "No se encontraron eventos de auditoría",
    "action": "acción",
    "actor": "Actor",
    "details": "Detalles",
    "time": "tiempo",
    "fallbackChainsTitle": "Cadenas de respaldo",
    "fallbackChainsDesc": "Definir el orden de reserva del proveedor por modelo",
    "addChain": "+ Agregar cadena",
    "modelName": "Nombre del modelo",
    "modelNamePlaceholder": "claude-soneto-4-20250514",
    "providersCommaSeparated": "Proveedores (separados por comas, en orden de prioridad)",
    "providersCommaSeparatedPlaceholder": "antrópico, openai, géminis",
    "createChain": "Crear cadena",
    "noFallbackChains": "Sin cadenas de respaldo",
    "noFallbackChainsDesc": "Cree una cadena para definir el orden de reserva del proveedor para un modelo.",
    "loadingFallbackChains": "Cargando cadenas de reserva...",
    "deleteChainConfirm": "¿Eliminar la cadena alternativa para \"{model}\"?",
    "chainCreated": "Cadena creada para {model}",
    "chainDeleted": "Cadena eliminada para {model}",
    "failedCreateChain": "No se pudo crear la cadena",
    "failedDeleteChain": "No se pudo eliminar la cadena",
    "deleteChain": "Eliminar cadena",
    "fillModelAndProviders": "Por favor complete el nombre del modelo y los proveedores",
    "addAtLeastOneProvider": "Añade al menos un proveedor",
    "comboDefaultsTitle": "Valores predeterminados combinados",
    "comboDefaultsGuideTitle": "Cómo ajustar los valores predeterminados del combo",
    "comboDefaultsGuideHint1": "Mantenga bajos los reintentos en flujos de baja latencia; aumente el tiempo de espera solo para tareas de larga generación.",
    "comboDefaultsGuideHint2": "Utilice anulaciones de proveedores cuando un proveedor necesite un comportamiento de tiempo de espera/reintento diferente al de los valores predeterminados globales.",
    "globalComboConfig": "Configuración combinada global",
    "defaultStrategy": "Estrategia predeterminada",
    "defaultStrategyDesc": "Aplicado a nuevos combos sin estrategia explícita.",
    "comboStrategyAria": "estrategia combinada",
    "priority": "Prioridad",
    "weighted": "ponderado",
    "contextRelay": "Context Relay",
    "contextRelayDesc": "Hands off context between providers with automatic summarization",
    "maxRetriesLabel": "Reintentos máximos",
    "retryDelayLabel": "Retardo de reintento (ms)",
    "timeoutLabel": "Tiempo de espera (ms)",
    "healthCheck": "Control de salud",
    "healthCheckDesc": "Verificar previamente la disponibilidad del proveedor",
    "trackMetrics": "Seguimiento de métricas",
    "trackMetricsDesc": "Registre métricas de solicitudes por combo",
    "providerOverrides": "Anulaciones de proveedores",
    "providerOverridesDesc": "Anule el tiempo de espera y los reintentos por proveedor. La configuración del proveedor anula los valores predeterminados globales.",
    "providerMaxRetriesAria": "{provider} reintentos máximos",
    "providerTimeoutAria": "{provider} tiempo de espera ms",
    "removeProviderOverrideAria": "Eliminar la anulación de {provider}",
    "newProviderNamePlaceholder": "por ej. google, openai...",
    "newProviderNameAria": "Nuevo nombre del proveedor",
    "retries": "reintentos",
    "ms": "señora",
    "saveComboDefaults": "Guardar valores predeterminados combinados",
    "maxNestingDepth": "Profundidad máxima de anidamiento",
    "concurrencyPerModel": "Concurrencia / Modelo",
    "queueTimeout": "Tiempo de espera de cola (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": "Perfiles de proveedores",
    "providerProfilesDesc": "Configuraciones de resiliencia separadas para proveedores de OAuth (basado en sesiones) y de clave API (medidas). Los proveedores de OAuth tienen umbrales más estrictos debido a límites de tarifas más bajos.",
    "oauthProviders": "Proveedores de OAuth",
    "apiKeyProviders": "Proveedores de claves API",
    "transientCooldown": "Enfriamiento transitorio",
    "rateLimitCooldown": "Enfriamiento del límite de velocidad",
    "maxBackoffLevel": "Nivel máximo de retroceso",
    "cbThreshold": "Umbral CB",
    "cbResetTime": "Tiempo de reinicio del CB",
    "rateLimiting": "Limitación de tasa",
    "rateLimitingDesc": "Los proveedores de claves API tienen una velocidad limitada automáticamente con valores predeterminados seguros. Los límites se aprenden de los encabezados de respuesta y se adaptan con el tiempo.",
    "defaultSafetyNet": "Red de seguridad predeterminada",
    "rpm": "RPM",
    "minGap": "Brecha mínima",
    "maxConcurrent": "Máximo concurrente",
    "activeLimiters": "Limitadores activos",
    "noActiveLimiters": "Aún no hay limitadores de tarifas activos.",
    "reservoir": "depósito",
    "running": "corriendo",
    "queued": "En cola",
    "circuitBreakers": "Disyuntores",
    "breakerStateClosed": "Cerrado",
    "breakerStateOpen": "Abierto",
    "breakerStateHalfOpen": "Medio abierto",
    "tripped": "{count} se disparó",
    "healthy": "{count} saludable",
    "resetAll": "Restablecer todo",
    "noCircuitBreakers": "Aún no hay disyuntores activos. Se crean automáticamente cuando las solicitudes fluyen a través del canal combinado.",
    "failures": "{count} falla(s)",
    "policiesLocked": "Políticas e identificadores bloqueados",
    "allOperational": "Todos los sistemas operativos: sin bloqueos ni disyuntores disparados",
    "loadingPolicies": "Cargando políticas...",
    "lockedIdentifiers": "Identificadores bloqueados",
    "unlockedIdentifier": "Desbloqueado: {identifier}",
    "sinceDate": "desde {date}",
    "forceUnlock": "Forzar desbloqueo",
    "unlocking": "Desbloqueando...",
    "failedUnlock": "No se pudo desbloquear",
    "failedLoadWithStatus": "No se pudo cargar: {status}",
    "failedLoadResilience": "No se pudo cargar el estado de resiliencia",
    "saveFailed": "Error al guardar",
    "resetFailed": "Error al restablecer",
    "loadingResilience": "Cargando estado de resiliencia...",
    "retry": "Reintentar",
    "systemStorage": "Sistema y almacenamiento",
    "allDataLocal": "Todos los datos almacenados localmente en su máquina",
    "databasePath": "Ruta de la base de datos",
    "exportDatabase": "Exportar base de datos",
    "exportAll": "Exportar todo (.tar.gz)",
    "importDatabase": "Importar base de datos",
    "confirmDbImport": "Confirmar la importación de la base de datos",
    "confirmDbImportDesc": "Esto reemplazará todos los datos actuales con el contenido de {file}. Se creará una copia de seguridad automáticamente antes de la importación.",
    "yesImport": "Si, importar",
    "lastBackup": "Última copia de seguridad",
    "noBackupYet": "Aún no hay copia de seguridad",
    "backupNow": "Copia de seguridad ahora",
    "backupRestore": "Copia de seguridad y restauración",
    "viewBackups": "Ver copias de seguridad",
    "hide": "Ocultar",
    "backupRetentionDesc": "Las instantáneas de la base de datos se crean automáticamente antes de la restauración y cada 15 minutos cuando cambian los datos. Retención: 24 horas + 30 respaldos diarios con rotación inteligente.",
    "loadingBackups": "Cargando copias de seguridad...",
    "noBackupsYet": "Aún no hay copias de seguridad disponibles. Las copias de seguridad se crearán automáticamente cuando cambien los datos.",
    "backupsAvailable": "{count} copias de seguridad disponibles",
    "refresh": "Actualizar",
    "confirm": "¿Confirmar?",
    "yes": "si",
    "no": "No",
    "restore": "Restaurar",
    "invalidFileType": "Tipo de archivo no válido. Sólo se aceptan archivos .sqlite.",
    "exportFailed": "Exportación fallida",
    "exportFailedWithError": "Error al exportar: {error}",
    "fullExportFailedWithError": "Error en la exportación completa: {error}",
    "backupCreated": "Copia de seguridad creada: {file}",
    "restoreSuccess": "¡Restaurado! {connections} conexiones, {nodes} nodos, {combos} combos, {apiKeys} claves API.",
    "importSuccess": "¡Base de datos importada! {connections} conexiones, {nodes} nodos, {combos} combos, {apiKeys} claves API.",
    "minutesAgo": "Hace {count}m",
    "hoursAgo": "Hace {count}h",
    "daysAgo": "Hace {count}d",
    "backupReasonManual": "manuales",
    "backupReasonPreRestore": "pre-restauración",
    "connectionsCount": "{count, plural, one {# connection} other {# connections}}",
    "noChangesSinceBackup": "No hay cambios desde la última copia de seguridad",
    "backupFailed": "Error en la copia de seguridad",
    "restoreFailed": "Restauración fallida",
    "importFailed": "Importación fallida",
    "errorDuringRestore": "Se produjo un error durante la restauración.",
    "errorDuringImport": "Se produjo un error durante la importación.",
    "modelPricing": "Precios del modelo",
    "modelPricingDesc": "Configurar tarifas de costo por modelo • Todas las tarifas en tokens de $/1 millón",
    "registry": "Registro",
    "priced": "Precio",
    "searchProvidersModels": "Buscar proveedores o modelos...",
    "showAll": "Mostrar todo",
    "noProvidersMatch": "Ningún proveedor coincide con su búsqueda.",
    "howPricingWorks": "Cómo funcionan los precios",
    "cacheWrite": "Escritura en caché",
    "unsaved": "no salvo",
    "resetDefaults": "Restablecer valores predeterminados",
    "saveProvider": "Guardar proveedor",
    "model": "modelo",
    "models": "modelos",
    "moreProviders": "{count} más proveedores",
    "withPricing": "con precios configurados",
    "policiesCircuitBreakers": "Políticas y disyuntores",
    "activeIssuesDetected": "Problemas activos detectados",
    "off": "Apagado",
    "resetPricingConfirm": "¿Restablecer todos los precios de {provider} a los valores predeterminados?",
    "pricingDescInput": "Entrada: tokens enviados al modelo.",
    "pricingDescOutput": "Salida: tokens generados",
    "pricingDescCached": "En caché: entrada reutilizada (~50% de la tasa de entrada)",
    "pricingDescReasoning": "Razonamiento: tokens de pensamiento (vuelve a Salida)",
    "pricingDescCacheWrite": "Escritura de caché: creación de entradas de caché (recurre a Entrada)",
    "pricingDescFormula": "Costo = (entrada × tasa_entrada) + (salida × tasa_salida) + (almacenado en caché × tasa_almacenamiento) por millón de tokens.",
    "pricingSettingsTitle": "Configuración de precios",
    "totalModels": "Modelos totales",
    "active": "Activo",
    "costCalculation": "Cálculo de costos",
    "costCalculationDesc": "Los costos se calculan en función del uso de tokens y las tarifas de precios configuradas para cada modelo.",
    "pricingFormat": "Formato de precios",
    "pricingFormatDesc": "Todas las tarifas están en tokens de $/1 millón (dólares por millón de tokens).",
    "tokenTypes": "Tipos de tokens",
    "inputTokenDesc": "Fichas de aviso estándar",
    "outputTokenDesc": "Fichas de finalización/respuesta",
    "cachedTokenDesc": "Tokens de entrada almacenados en caché (normalmente el 50 % de la tasa de entrada)",
    "reasoningTokenDesc": "Fichas especiales de razonamiento/pensamiento (retroceso a la tasa de producción)",
    "cacheCreationTokenDesc": "Tokens utilizados para crear entradas de caché (retroceso a la tasa de entrada)",
    "customPricingNote": "Puede anular los precios predeterminados para modelos específicos. Las anulaciones personalizadas tienen prioridad sobre los precios detectados automáticamente.",
    "editPricing": "Editar precios",
    "viewFullDetails": "Ver todos los detalles",
    "themeCoral": "Coral",
    "adaptiveVolumeRouting": "Adaptive Volume Routing",
    "adaptiveVolumeRoutingDesc": "Scale connections dynamically based on payload volume and throughput pressure.",
    "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.",
    "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",
    "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",
    "whitelist": "Whitelist",
    "syncDisabled": "Sync Disabled",
    "pricingLoadFailed": "Pricing Load Failed",
    "pricingSyncDescription": "Pricing Sync Description",
    "clearSyncedPricingSuccess": "Clear Synced Pricing Success",
    "clearSyncedPricingFailedWithReason": "No se pudo borrar el precio: {reason}",
    "pricingSourceDefault": "Pricing Source Default",
    "pricingSyncSuccess": "Pricing Sync Success",
    "enableSyncError": "Enable Sync Error",
    "syncEnabled": "Sync Enabled",
    "blacklist": "Blacklist",
    "pricingSourceModelsDev": "Pricing Source Models Dev",
    "syncedModels": "Synced Models",
    "budget": "Budget",
    "pricingSyncTitle": "Pricing Sync Title",
    "pricingResetFailedWithReason": "No se pudo restablecer el precio: {reason}",
    "tab": "Tab",
    "pricingSavedProvider": "Precios guardados para {provider}",
    "pricingSyncFailed": "Pricing Sync Failed",
    "pricingSaveFailedWithReason": "No se pudo guardar el precio: {reason}",
    "pricingResetProvider": "Restablecimiento de precios para {provider}",
    "nextSync": "Next Sync",
    "pricingSyncFailedWithReason": "Falló la sincronización de precios: {reason}",
    "clearSyncedPricing": "Clear Synced Pricing",
    "compressionTitle": "Prompt Compression",
    "compressionDesc": "Reduce token usage by compressing prompts before sending to providers",
    "compressionMode": "Compression Mode",
    "compressionModeOff": "Off",
    "compressionModeOffDesc": "No compression applied",
    "compressionModeLite": "Lite",
    "compressionModeLiteDesc": "Whitespace and blank line reduction",
    "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",
    "compressionModeUltra": "Ultra",
    "compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
    "compressionAggressiveConfig": "Configuración agresiva del motor",
    "compressionAggressiveConfigDesc": "Ajustar el resumen, la compresión de herramientas y los umbrales de antigüedad",
    "compressionUltraConfig": "Configuración del motor ultra",
    "compressionUltraConfigDesc": "Ajuste la poda heurística, el respaldo de SLM y los umbrales por mensaje",
    "compressionUltraRate": "Mantener tasa",
    "compressionUltraMinScore": "Umbral de puntuación mínima",
    "compressionUltraSlmFallback": "Regreso a lo agresivo",
    "compressionUltraModelPath": "Ruta del modelo SLM",
    "compressionSummarizerEnabled": "Habilitar resumen",
    "compressionMaxTokensPerMessage": "Tokens máximos por mensaje",
    "compressionMinSavings": "Umbral mínimo de ahorro",
    "compressionAgingThresholds": "Umbrales de envejecimiento",
    "compressionAgingThresholdsDesc": "Número de mensajes recientes mantenidos en cada nivel de antigüedad (mayor = más conservados)",
    "compressionToolStrategies": "Estrategias de resultados de herramientas",
    "compressionToolStrategiesDesc": "Alternar estrategias de compresión para diferentes tipos de resultados de herramientas",
    "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",
    "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": "minutos",
    "compressionModeRtk": "RTK",
    "compressionModeRtkDesc": "Command-aware tool output filtering",
    "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",
    "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...",
    "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": "Opcional",
    "current": "Actual",
    "remove": "Quitar",
    "search": "Buscar",
    "oneproxyTitle": "1proxy Mercado de proxy gratuito",
    "oneproxyTotalProxies": "Representantes totales",
    "oneproxyAvgQuality": "Calidad promedio",
    "resilienceScope": "Alcance:",
    "resilienceTrigger": "Desencadenante:",
    "resilienceEffect": "Efecto:",
    "resilienceRequestQueueTitle": "Request Queue & Rate",
    "resilienceAutoEnableApiKeyProviders": "Auto-enable for API-key providers",
    "resilienceRequestsPerMinute": "Requests per minute",
    "resilienceMinTimeBetweenRequests": "Minimum time between requests",
    "resilienceConcurrentRequests": "Concurrent requests",
    "resilienceMaxQueueWaitTime": "Tiempo máximo de espera en cola",
    "resilienceBaseCooldown": "Base cooldown",
    "resilienceUseUpstreamRetryHints": "Use upstream retry hints",
    "resilienceDefaultPerProvider": "Default (per provider)",
    "resilienceAlwaysOn": "Always on",
    "resilienceAlwaysOff": "Always off",
    "routingRemoveEntry": "Eliminar entrada",
    "routingNeedlesSubstrings": "Agujas (subcadenas para combinar)",
    "routingCaseSensitive": "Distingue entre mayúsculas y minúsculas",
    "routingPrefixes": "Prefijos",
    "routingMatch": "Partido",
    "routingReplacement": "Reemplazo",
    "routingReplaceAllOccurrences": "Reemplazar todas las ocurrencias",
    "routingPatternRegex": "Patrón (expresión regular)",
    "routingFlags": "Banderas",
    "routingNeedles": "Agujas",
    "routingBlockText": "Bloquear texto",
    "routingIdempotencyKey": "clave de idempotencia",
    "routingEntrypoint": "Punto de entrada",
    "routingVersionFormat": "Formato de versión",
    "routingCchAlgorithm": "algoritmo CCH",
    "routingWordsToObfuscate": "Palabras para ofuscar (ZWJ insertado después del primer carácter)",
    "logsSettingsTitle": "Configuración de registros",
    "detailedLogsLabel": "Registros detallados habilitados",
    "detailedLogsDesc": "Habilitar el registro detallado de solicitudes/respuestas",
    "callLogPipelineLabel": "Canalización de registro de llamadas",
    "callLogPipelineDesc": "Habilitar la canalización de procesamiento del registro de llamadas",
    "maxDetailSizeLabel": "Tamaño máximo de detalle (KB)",
    "maxDetailSizeDesc": "Tamaño máximo para entradas de registro detalladas",
    "ringBufferSizeLabel": "Tamaño del búfer de anillo",
    "ringBufferSizeDesc": "Tamaño del búfer circular para registros",
    "semanticCacheEnabledLabel": "Caché semántica habilitada",
    "semanticCacheMaxSizeLabel": "Tamaño máximo de caché semántica",
    "semanticCacheMaxSizeDesc": "Número máximo de entradas de caché semántica",
    "semanticCacheTTLLabel": "TTL de caché semántica",
    "promptCacheEnabledLabel": "Caché de aviso habilitado",
    "promptCacheEnabledDesc": "Habilitar el almacenamiento en caché de avisos",
    "promptCacheStrategyLabel": "Estrategia de caché rápida",
    "promptCacheStrategyDesc": "Estrategia para el almacenamiento en caché rápido",
    "alwaysPreserveClientCacheLabel": "Preservar siempre la caché del cliente",
    "alwaysPreserveClientCacheDesc": "Política de preservación de caché del cliente",
    "logRetentionPolicyTitle": "Política de retención de registros",
    "resilienceUseUpstream429HintsForBreaker": "Utilice sugerencias 429 ascendentes (interruptor)",
    "appearanceLogoPreviewAlt": "Vista previa del logotipo",
    "appearanceFaviconPreviewAlt": "Vista previa del favicon",
    "oneproxyLastSync": "Última sincronización",
    "oneproxyAllProtocols": "Todos los protocolos",
    "oneproxyCountryCodePlaceholder": "Código de país (por ejemplo, EE. UU.)",
    "oneproxyMinQualityPlaceholder": "Calidad mínima",
    "oneproxyLoadingProxies": "Cargando servidores proxy...",
    "oneproxyLastSyncLabel": "Última sincronización:",
    "oneproxyProxiesFetched": "Proxies obtenidos:",
    "oneproxyConsecutiveFailures": "Fallos consecutivos:",
    "oneproxyErrorLabel": "Error:",
    "oneproxyNever": "nunca",
    "oneproxySyncStatusTitle": "Estado de sincronización",
    "oneproxySuccess": "Éxito",
    "oneproxyFailed": "Fallido",
    "routingAntigravitySignatureTitle": "Modo de caché de firma antigravedad",
    "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": "Huella digital del encabezado (por proveedor)",
    "routingServerRejectedSave": "⚠ El servidor rechazó guardar:",
    "routingAddTransformOp": "Agregar una operación de transformación",
    "routingClientCacheControlTitle": "Control de caché del cliente",
    "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": "Enrutamiento automático sin configuración",
    "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": "Variante automática predeterminada",
    "visionBridge": "Puente de visión",
    "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": "Modelo de puente",
    "visionBridgeModelPlaceholder": "openai/gpt-4o-mini",
    "visionBridgeModelHint": "__MISSING__:Any OmniRoute model ID that supports vision can be used here.",
    "visionBridgePrompt": "Aviso de puente",
    "visionBridgePromptPlaceholder": "Describe esta imagen de manera concisa.",
    "visionBridgePromptHint": "__MISSING__:Sent to the vision model before the extracted description is injected back into the original request.",
    "visionBridgeTimeoutMs": "Tiempo de espera (ms)",
    "visionBridgeMaxImagesPerRequest": "Máximo de imágenes por solicitud",
    "resilienceMaxBackoffSteps": "Max backoff steps",
    "resilienceProviderBreakerTitle": "Circuit Breaker per Provider",
    "resilienceFailureThreshold": "Failure threshold",
    "resilienceResetTimeout": "Restablecer el tiempo de espera",
    "resilienceFailureThresholdLabel": "Umbral de falla",
    "resilienceResetTimeoutLabel": "Restablecer el tiempo de espera",
    "resilienceConnectionCooldownTitle": "Connection Cooldown",
    "resilienceUseUpstreamRetryHintsLabel": "Utilice sugerencias de reintento ascendentes",
    "resilienceUseUpstream429BreakerLabel": "Utilice sugerencias 429 ascendentes (interruptor)",
    "resilienceMaxBackoffStepsLabel": "Pasos máximos de retroceso",
    "resilienceYes": "si",
    "resilienceNo": "No",
    "resilienceDefault": "Default",
    "storageDatabaseBackupRetention": "Retención de copia de seguridad de la base de datos",
    "storagePurgeData": "Purgar datos",
    "retentionQuotaSnapshots": "Instantáneas de cuota (días)",
    "retentionMcpAudit": "Auditoría MCP (días)",
    "retentionA2aEvents": "Eventos A2A (días)",
    "retentionCallLogs": "Registros de llamadas (días)",
    "retentionUsageHistory": "Historial de uso (días)",
    "retentionMemoryEntries": "Entradas de memoria (días)",
    "storageAutoVacuumMode": "Modo de vacío automático",
    "storageScheduledVacuum": "Vacío programado",
    "storageVacuumHour": "Hora de vacío (0-23)",
    "storagePageSize": "Tamaño de página (bytes)",
    "storageDatabaseSize": "Tamaño de la base de datos",
    "storagePageCount": "Conteo de páginas",
    "storageFreelistCount": "Recuento de listas libres",
    "storageLastVacuum": "último vacío",
    "storageLastOptimization": "Última optimización",
    "storageIntegrityCheck": "Verificación de integridad",
    "storageIntegrityOk": "✓ Aceptar",
    "storageIntegrityError": "✗Error",
    "storageUsageTokenBuffer": "Búfer de token de uso",
    "compressionSettingsAutoTriggerMode": "Modo de disparo automático",
    "compressionSettingsMcpDescriptionCompression": "Compresión de descripción MCP",
    "compressionSettingsCavemanIntensity": "Intensidad cavernícola",
    "compressionSettingsCavemanOutputMode": "Modo de salida cavernícola",
    "compressionSettingsOutputIntensity": "Intensidad de salida",
    "compressionSettingsAutoClarityBypass": "Bypass de claridad automática",
    "resilienceWaitForCooldown": "Esperar a que se enfríe",
    "resilienceEnableServerSideWait": "Habilitar la espera del lado del servidor",
    "resilienceMaximumRetries": "Reintentos máximos",
    "resilienceMaximumWaitPerRetry": "Espera máxima por reintento",
    "memorySkillsSkillsmpMarketplace": "Mercado de habilidades MP",
    "memorySkillsFailedToSave": "No se pudo guardar",
    "memorySkillsApiKey": "Clave API",
    "memorySkillsActiveSkillsProvider": "Proveedor de habilidades activas",
    "cliproxyapiFallback": "Reserva de CLIProxyAPI",
    "cliproxyapiEnableFallback": "Habilitar el respaldo de CLIProxyAPI",
    "cliproxyapiUrl": "URL de CLIProxyAPI",
    "cliproxyapiStatus": "Estado de CLIProxyAPI",
    "cliproxyapiNotDetected": "No detectado",
    "payloadRulesTitle": "Reglas de carga útil",
    "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": "Modelos en tiempo de reutilización",
    "modelCooldownsEmpty": "No hay modelos en tiempo de reutilización en este momento.",
    "codexFastTierTitle": "Codex Fast Tier",
    "codexFastTierDesc": "Inyectar globalmente service_tier=priority para las solicitudes de OpenAI Codex.",
    "codexFastTierHint": "Cuando está habilitado, OmniRoute añade service_tier=priority a las solicitudes salientes de Codex para las conexiones que aún no especifican un tier. El tier priority requiere una clave API de OpenAI Enterprise o la ruta de Codex con autenticación ChatGPT; otros tipos de claves recibirán un error relacionado con el tier de OpenAI. Los ajustes por conexión en la página del proveedor Codex tienen prioridad.",
    "codexFastTierSaveError": "Error al actualizar el ajuste de Codex Fast Tier",
    "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": "Claude Fast Mode",
    "claudeFastModeDesc": "Activar el Fast Mode de Anthropic (speed:\"fast\") en las solicitudes Claude seleccionadas.",
    "claudeFastModeHint": "Anthropic no admite oficialmente Fast Mode para clientes en modo SDK. Cuando está habilitado, OmniRoute reenvía un encabezado X-CPA-Force-Fast-Mode para que una compilación compatible de CLIProxyAPI pueda reescribir el entrypoint. Solo los modelos Opus listados pasan la verificación del binario de Anthropic. La suscripción, el plan Max y el saldo de créditos Fast Mode siguen aplicándose en el servidor — Anthropic puede devolver out_of_credits incluso con el toggle activado.",
    "claudeFastModeModelsLabel": "Aplicado a los modelos ({count})",
    "claudeFastModeModelCheckbox": "Activar Fast Mode para {model}",
    "claudeFastModeSaveError": "Error al actualizar el ajuste de Claude Fast Mode",
    "authz": {
      "title": "__MISSING__:Authz 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",
      "tier": {
        "LOCAL_ONLY": "__MISSING__:Local only",
        "ALWAYS_PROTECTED": "__MISSING__:Always protected",
        "MANAGEMENT": "__MISSING__:Management",
        "CLIENT_API": "__MISSING__:Client API",
        "PUBLIC": "__MISSING__:Public"
      },
      "bypass": {
        "section": "__MISSING__:Manage-scope bypass",
        "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."
        },
        "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."
        },
        "cli_tools_runtime_note": "__MISSING__:Spawn-capable prefix. Compile-time deny; cannot be made bypassable. Shown read-only."
      },
      "password": {
        "prompt": {
          "label": "__MISSING__:Current password",
          "desc": "__MISSING__:Re-confirm to apply security-impacting changes."
        },
        "placeholder": "__MISSING__:Current management password",
        "cancel": "__MISSING__:Cancel",
        "submit": "__MISSING__:Apply"
      },
      "save": "__MISSING__:Save changes",
      "saved": "__MISSING__:Authz settings updated",
      "pending": "__MISSING__:Unsaved changes",
      "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"
      },
      "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."
      }
    },
    "resilienceBaseCooldownLabel": "Enfriamiento básico",
    "scopeLabel": "Alcance",
    "triggerLabel": "gatillo",
    "effectLabel": "Efecto",
    "statusEnabled": "Habilitado",
    "statusDisabled": "Discapacitado",
    "resilienceRequestQueueScope": "Por cola de solicitudes",
    "resilienceRequestQueueTrigger": "Antes de enviar al upstream",
    "resilienceRequestQueueEffect": "Pone en cola las solicitudes, limita la simultaneidad y espacia las llamadas",
    "resilienceRequestQueueDesc": "Esta capa solo controla las colas y el ritmo. No almacena tiempos de reutilización ni disyuntores abiertos.",
    "resilienceAutoEnableApiKeyProvidersDesc": "Habilita la protección de colas de forma predeterminada para conexiones de clave API activas.",
    "resilienceMaxQueueWait": "Tiempo máximo de espera en cola",
    "resilienceConnectionCooldownScope": "Conexión individual",
    "resilienceConnectionCooldownTrigger": "Cuando una conexión devuelve un error ascendente transitorio",
    "resilienceConnectionCooldownEffect": "Omite temporalmente esa conexión y aumenta la interrupción en caso de fallas repetidas",
    "resilienceConnectionCooldownDesc": "El tiempo de reutilización básico cubre fallas de conexión transitorias. Cuando se habilitan las sugerencias de reintento ascendentes, la ventana explícita del proveedor anula el tiempo de reutilización local.",
    "resilienceUseUpstreamRetryHintsDesc": "Utiliza valores de reintento posterior/restablecimiento del proveedor ascendente cuando están disponibles.",
    "resilienceUseUpstream429BreakerHints": "Utilice sugerencias 429 ascendentes para el tiempo de reutilización del interruptor",
    "resilienceUseUpstream429BreakerHintsShort": "Utilice sugerencias 429 ascendentes",
    "resilienceUseUpstream429BreakerHintsDesc": "Aplique señales de reintento posterior/cuota agotada de 429 respuestas a la duración del enfriamiento del disyuntor. De forma predeterminada, se utiliza una política por proveedor: los proveedores de nube directos están activados de manera predeterminada; Los proveedores de proxy inverso, autohospedados y respaldados por CLI están desactivados de forma predeterminada. Independiente de \"Usar sugerencias de reintento ascendentes\".",
    "resilienceProviderBreakerScope": "Proveedor completo",
    "resilienceProviderBreakerTrigger": "Errores finales de transporte/servidor después de que se agote el respaldo de la conexión",
    "resilienceProviderBreakerEffect": "Bloquea temporalmente a ese proveedor hasta que expire el tiempo de reinicio",
    "resilienceProviderBreakerDesc": "El estado del interruptor activo aparece solo en la página Salud. Los límites de velocidad 429 con alcance de conexión permanecen en el tiempo de reutilización de la conexión y no activan el disyuntor del proveedor.",
    "resilienceResetTime": "Restablecer tiempo",
    "resilienceWaitForCooldownTitle": "Espere el tiempo de reutilización",
    "resilienceWaitForCooldownScope": "Solicitud de cliente actual",
    "resilienceWaitForCooldownTrigger": "Cuando todas las conexiones candidatas ya se estén enfriando",
    "resilienceWaitForCooldownEffect": "Espera en el servidor y vuelve a intentarlo cuando expira el primer tiempo de reutilización.",
    "resilienceWaitForCooldownDesc": "Esto sólo afecta a la solicitud actual. No almacena la conexión ni el estado del proveedor.",
    "resilienceEnableServerWait": "Habilitar la espera del lado del servidor",
    "resilienceEnableServerWaitDesc": "Cuando está habilitado, OmniRoute espera a que expire el primer tiempo de reutilización y lo vuelve a intentar automáticamente.",
    "resilienceMaxAttempts": "Intentos máximos",
    "resilienceMaxWaitPerAttempt": "Espera máxima por intento",
    "forcedFingerprintTitle": "Siempre activado para {provider}; necesario para la seguridad de las cuentas OAuth y no se puede desactivar.",
    "forcedFingerprintBadge": "Obligatorio",
    "codexSessionAffinityTitle": "Afinidad de sesión del Codex",
    "codexSessionAffinityDesc": "Mantiene una conversación del Codex en la misma cuenta durante tantos segundos. 0 lo desactiva.",
    "codexSessionAffinityTtl": "TTL de afinidad (segundos)",
    "resetAwareQuotaCacheTitle": "Caché de cuota con reconocimiento de restablecimiento",
    "resetAwareQuotaCacheDesc": "Almacena en caché la telemetría de cuota solo para pedidos con reconocimiento de reinicio. La verificación previa de cuotas aún protege las solicitudes. 0/0 sigue obteniendo en vivo.",
    "resetAwareQuotaCacheTtl": "TTL nuevo (segundos)",
    "resetAwareQuotaCacheMaxStale": "Máximo obsoleto (segundos)",
    "qdrantCleanupSuccess": "OK: eliminado {count} punto(s) (retención: {days} días)",
    "qdrantCleanupFailed": "Error de limpieza",
    "qdrantCleanupError": "Error: {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",
    "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."
  },
  "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",
    "filterCatalog": "Catálogo de filtros",
    "filterCatalogDesc": "Filtros de salida disponibles por categoría",
    "guidedConfig": "Configuración",
    "guidedConfigDesc": "Ajuste cómo RTK filtra la salida de su terminal",
    "maxLines": "Max lines",
    "maxChars": "Max chars",
    "deduplicateThreshold": "Umbral de deduplicación",
    "customFilters": "Filtros personalizados",
    "detectedType": "Tipo detectado",
    "confidence": "confianza",
    "beforeAfter": "Antes / Después",
    "trustProjectFilters": "Filtros de proyectos de confianza",
    "rawOutputRetention": "Retención de producción bruta",
    "rawOutputNever": "nunca",
    "rawOutputFailures": "Fallos",
    "rawOutputAlways": "siempre",
    "rawOutputMaxBytes": "Bytes máximos de salida sin procesar",
    "filterTesting": "Filter Testing",
    "pasteOutput": "Paste tool output to test filtering...",
    "presetHigh": "agresivo",
    "presetLow": "Luz",
    "presetMaxChars": "Caracteres de salida máximos",
    "presetMaxLines": "Líneas de salida máximas",
    "presetMedium": "Estándar",
    "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": "Sencillo",
    "advancedMode": "Avanzado",
    "searchFilters": "Filtros de búsqueda...",
    "tooltipDedup": "Qué tan agresivamente eliminar las líneas repetidas.",
    "tooltipMaxChars": "Máximo de caracteres por bloque de salida.",
    "tooltipMaxLines": "Líneas máximas para evitar la salida del comando. El exceso se trunca."
  },
  "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?",
    "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"
  },
  "contextCaveman": {
    "title": "Caveman Engine",
    "description": "Rule-based message compression, language packs, analytics and output mode controls.",
    "advancedConfig": "Configuración avanzada",
    "advancedConfigDesc": "Ajustar el comportamiento de compresión",
    "aggressiveSettings": "Configuraciones agresivas",
    "aggressiveSettingsDesc": "Máxima compresión con posibles compensaciones de calidad",
    "requests": "Requests",
    "tokensSaved": "Tokens saved",
    "savingsPercent": "Savings %",
    "avgLatency": "Avg latency",
    "languagePacks": "Language Packs",
    "languagePacksDesc": "Enable compression rules for specific languages.",
    "labelAutoTrigger": "Comprimir automáticamente cuando el contexto excede",
    "labelCompressionRate": "Fuerza de compresión",
    "labelMaxTokens": "Tokens de destino por mensaje",
    "labelMinLength": "Longitud mínima del mensaje",
    "labelMinSavings": "Tokens mínimos para ahorrar",
    "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.",
    "outputMode": "Modo de salida",
    "outputModeDesc": "Instructs the LLM to respond in a terse, compact format.",
    "outputModeTitle": "Output Mode",
    "quickSettings": "Configuración rápida",
    "quickSettingsDesc": "Configuraciones básicas de compresión para comenzar",
    "autoClarity": "Auto-Clarity Bypass",
    "bypassConditions": "Bypass conditions",
    "bypassConditionsList": "seguridad, irreversible, aclaración, sensible al orden",
    "simpleMode": "Sencillo",
    "advancedMode": "Avanzado",
    "tooltipAutoTrigger": "Comprime automáticamente cuando el contexto excede este tamaño.",
    "tooltipCompressionRate": "0,0 = ninguno, 1,0 = máximo. 0,5 = equilibrado.",
    "tooltipMaxTokens": "Recuento de tokens de destino después de la compresión. Más bajo = más agresivo.",
    "tooltipMinLength": "Los mensajes más cortos que esto no se comprimen. Más bajo = más compresión.",
    "tooltipMinSavings": "Comprima solo si guarda al menos esta cantidad de tokens.",
    "ultraSettings": "Configuración ultra",
    "ultraSettingsDesc": "Compresión semántica impulsada por 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."
    }
  },
  "translator": {
    "title": "Traductor",
    "metaTitle": "Patio de juegos del traductor | OmniRuta",
    "metaDescription": "Depurar, probar y visualizar traducciones de formatos API entre proveedores",
    "playgroundTitle": "Patio de juegos del traductor",
    "playground": "Zona de juegos",
    "realtime": "Actividad de traducción en tiempo real",
    "chatTester": "Probador de chat",
    "testBench": "Banco de pruebas",
    "liveMonitor": "Monitor en vivo",
    "modeDescriptionPlayground": "Pegue cualquier cuerpo de solicitud de API y vea cómo OmniRoute lo traduce entre formatos de proveedores (OpenAI ↔ Claude ↔ Gemini ↔ API de respuestas)",
    "modeDescriptionChatTester": "Envíe solicitudes de chat reales a través de OmniRoute e inspeccione el recorrido completo: entrada, solicitud traducida, respuesta del proveedor y salida traducida.",
    "modeDescriptionTestBench": "Ejecute escenarios predefinidos y compare la compatibilidad entre proveedores y modelos.",
    "modeDescriptionLiveMonitor": "Vea los eventos de traducción en tiempo real a medida que las solicitudes fluyen a través de OmniRoute.",
    "modeDescriptionFallback": "Depure, pruebe y visualice cómo OmniRoute traduce las solicitudes de API entre proveedores.",
    "recentTranslations": "Traducciones recientes",
    "noTranslations": "Aún no hay traducciones",
    "source": "Fuente",
    "target": "Objetivo",
    "time": "tiempo",
    "model": "modelo",
    "status": "Estado",
    "latency": "Latencia",
    "totalTranslations": "Traducciones totales",
    "successful": "Exitoso",
    "errors": "Errores",
    "avgLatency": "Latencia promedio",
    "millisecondsShort": "{value}ms",
    "notAvailableSymbol": "—",
    "liveAutoRefreshing": "En vivo: actualización automática",
    "paused": "En pausa",
    "eventsAppearHint": "Los eventos de traducción aparecen aquí a medida que las solicitudes fluyen a través de OmniRoute. Utilice cualquiera de estos métodos para generar eventos:",
    "chatTesterTab": "Pestaña Probador de chat",
    "testBenchTab": "Pestaña Banco de pruebas",
    "externalApiCalls": "Llamadas API externas",
    "ideCliIntegrations": "Integraciones IDE/CLI",
    "inMemoryNote": "Nota: Los eventos se almacenan en la memoria y se restablecen cuando se reinicia el servidor.",
    "ok": "bien",
    "errorShort": "ERROR",
    "formatConverter": "Convertidor de formato",
    "formatConverterDescription": "Pegue o escriba un cuerpo de solicitud JSON. El traductor detectará automáticamente el formato de origen y lo convertirá al formato de destino. Utilice esto para depurar cómo OmniRoute traduce solicitudes entre formatos (OpenAI ↔ Claude ↔ Gemini ↔ API de respuestas).",
    "translationPathHubSpoke": "{source} → OpenAI (intermedio) → {target}",
    "translationPathDirect": "{source} → {target} (traductor directo)",
    "translationPathPassthrough": "Mismo formato: no se necesita traducción",
    "openaiIntermediatePanel": "Intermedio OpenAI",
    "autoFeaturesTitle": "Qué hace OmniRoute automáticamente",
    "autoFeaturesCount": "8 características",
    "featureReasoningCache": "Caché de razonamiento",
    "featureReasoningCacheDesc": "Reinyecta contenido de razonamiento almacenado en caché para modelos en modo de pensamiento (DeepSeek V4, Kimi K2, Qwen) cuando los clientes lo omiten del historial de conversaciones.",
    "featureSchemaCoercion": "Coerción de esquema",
    "featureSchemaCoercionDesc": "Corrige esquemas de herramientas rotos: agrega propiedades adicionales faltantes, desinfecta descripciones largas, normaliza objetos anidados.",
    "featureRoleNormalization": "Normalización de roles",
    "featureRoleNormalizationDesc": "Desarrollador de mapas → sistema para objetivos que no son OpenAI. Sistema de mapas → usuario para modelos que no admiten la función del sistema.",
    "featureToolCallIds": "Normalización de ID de llamada de herramienta",
    "featureToolCallIdsDesc": "Genera ID únicos de llamada de herramienta cuando faltan. Se normaliza al formato de 9 caracteres para proveedores como Mistral.",
    "featureMissingToolResponse": "Inyección de respuesta de herramienta",
    "featureMissingToolResponseDesc": "Inyecta mensajes tool_result vacíos cuando los clientes envían tool_calls sin las respuestas correspondientes.",
    "featureThinkingBudget": "Pensando en el presupuesto",
    "featureThinkingBudgetDesc": "Gestiona automáticamente la configuración de pensamiento. Elimina los parámetros de pensamiento cuando el último mensaje no es del usuario.",
    "featureDirectPaths": "Rutas de traducción directa",
    "featureDirectPathsDesc": "Algunos pares de formatos (Claude→Gemini) tienen traductores directos que pasan por alto el centro OpenAI, lo que produce resultados más precisos.",
    "featureImageMapping": "Mapeo de tamaño de imagen",
    "featureImageMappingDesc": "Traduce convenciones de dimensiones de imágenes entre formatos API (por ejemplo, niveles de detalle de OpenAI → dimensiones de Gemini).",
    "input": "Entrada",
    "output": "Salida",
    "auto": "Automático",
    "swapFormats": "Intercambiar formatos",
    "translateAction": "Traducir",
    "clear": "Borrar",
    "inputPlaceholder": "Pegue el cuerpo de una solicitud aquí o seleccione una plantilla a continuación...",
    "exampleTemplates": "Plantillas de ejemplo",
    "exampleTemplatesHint": "— Haga clic para cargar",
    "templateLoadHint": "La plantilla carga la solicitud en formato {format}. Cambie el formato de origen para cargar en un formato diferente.",
    "compatibilityTester": "Probador de compatibilidad",
    "compatibilityReport": "Informe de compatibilidad",
    "testBenchDescription": "Ejecute escenarios predefinidos (chat simple, llamadas de herramientas, etc.) para verificar la traducción y la compatibilidad del proveedor. Seleccione un formato de origen y un proveedor de destino, luego ejecute todas las pruebas para ver un porcentaje de compatibilidad. Utilice esto para encontrar qué funciones funcionan en todos los proveedores.",
    "targetProvider": "Proveedor objetivo",
    "runAllTests": "Ejecutar todas las pruebas",
    "runTest": "Ejecutar prueba",
    "reRun": "Volver a ejecutar",
    "running": "Corriendo...",
    "passed": "pasó",
    "failed": "falló",
    "passedIconLabel": "✅ Aprobado",
    "chunks": "trozos",
    "scenarioSimpleChat": "Charla sencilla",
    "scenarioToolCalling": "Llamada de herramientas",
    "scenarioMultiTurn": "multivuelta",
    "scenarioThinking": "Pensando",
    "scenarioSystemPrompt": "Aviso del sistema",
    "scenarioStreaming": "Transmisión",
    "templateNames": {
      "simple-chat": "Charla sencilla",
      "tool-calling": "Llamada de herramientas",
      "multi-turn": "multivuelta",
      "thinking": "Pensando",
      "system-prompt": "Aviso del sistema",
      "streaming": "Transmisión",
      "vision": "Visión",
      "schema-coercion": "Coerción de esquema"
    },
    "templateDescriptions": {
      "simple-chat": "Mensaje de texto básico",
      "tool-calling": "Invocación de función/herramienta",
      "multi-turn": "Conversación con la historia.",
      "thinking": "Pensamiento/razonamiento extendido",
      "system-prompt": "Instrucciones complejas del sistema",
      "streaming": "Solicitud de transmisión SSE",
      "vision": "Solicitud multimodal con entrada de imagen.",
      "schema-coercion": "Aplicación de esquema JSON/salida estructurada"
    },
    "templatePayloads": {
      "simpleChat": {
        "system": "Eres un asistente útil.",
        "userGreeting": "¡Hola! ¿Cómo estás hoy?"
      },
      "toolCalling": {
        "userWeather": "¿Cuál es el clima en São Paulo?",
        "toolDescription": "Obtener el clima actual para una ubicación",
        "cityNameDescription": "Nombre de la ciudad"
      },
      "multiTurn": {
        "system": "Eres un asistente de codificación.",
        "userInitial": "Escriba una función para ordenar una matriz en Python.",
        "assistantExample": "Aquí hay una función de clasificación simple:\n\n```pitón\ndef sort_array(arr):\n    devolver ordenado(arr)\n```",
        "userFollowUp": "Ahora haz que se clasifique en orden descendente."
      },
      "thinking": {
        "question": "¿Cuál es la suma de los primeros 100 números primos?"
      },
      "systemPrompt": {
        "systemInstruction": "Eres un ingeniero de software senior especializado en sistemas distribuidos. Responda preguntas de manera concisa utilizando las mejores prácticas de la industria. Proporcione siempre ejemplos de código cuando sea relevante. Formatee sus respuestas usando Markdown.",
        "question": "¿Cómo implemento un patrón de disyuntor?"
      },
      "streaming": {
        "prompt": "Cuéntame una historia corta sobre un robot que aprende a pintar."
      },
      "vision": {
        "system": "Eres un asistente que describe imágenes con precisión.",
        "userPrompt": "¿Qué se muestra en esta imagen?",
        "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/600px-PNG_transparency_demonstration_1.png"
      },
      "schemaCoercion": {
        "userPrompt": "Busque el clima de Tokio usando unidades métricas e incluya el desglose por horas.",
        "toolDescription": "Obtenga el clima de una ciudad con opciones estructuradas.",
        "cityDescription": "La ciudad a consultar, p.e. 'Tokio' o 'Nueva York'."
      }
    },
    "openaiCompatibleLabel": "Compatible con OpenAI",
    "anthropicCompatibleLabel": "Compatible antrópico",
    "noTemplateForFormat": "No hay plantilla para este formato",
    "translationFailed": "Error de traducción: {error}",
    "pipelineDebugger": "Depurador de canalización",
    "translationPipeline": "Canal de traducción",
    "pipelineVisualization": "Visualización de tuberías",
    "pipelineVisualizationHint": "Envíe un mensaje para ver cómo fluye su solicitud a través de detección → traducción → llamada al proveedor.",
    "chatTesterDescription": "Envíe mensajes en un formato de cliente específico e inspeccione cada paso del proceso de traducción.",
    "chatTesterFlow": "Solicitud de cliente → Detección de formato → OpenAI Intermedio → Formato de proveedor → Respuesta",
    "clickStepToInspect": "Haga clic en cualquier paso para inspeccionar los datos en esa etapa.",
    "clientFormat": "Formato de cliente",
    "provider": "Proveedor",
    "modelPlaceholder": "Seleccione o escriba un nombre de modelo...",
    "sendMessageToSeePipeline": "Envíe un mensaje para ver el proceso de traducción",
    "chatMessageHintPrefix": "Su mensaje tendrá el formato de",
    "chatMessageHintSuffix": "solicitud, traducida a través del proceso y enviada al proveedor seleccionado.",
    "youWithFormat": "Tú ({format})",
    "assistant": "asistente",
    "typeMessage": "Escribe un mensaje...",
    "send": "enviar",
    "clientRequest": "Solicitud de cliente",
    "clientRequestDescription": "El cuerpo de la solicitud como lo enviaría su cliente.",
    "formatDetected": "Formato detectado",
    "formatDetectedDescription": "OmniRoute auto-detects the API format from the request structure",
    "openaiIntermediate": "Intermedio OpenAI",
    "openaiIntermediateDescription": "All formats are first normalized to OpenAI format (the universal bridge)",
    "providerFormat": "Formato del proveedor",
    "providerFormatDescription": "OpenAI format is translated to the provider's native format",
    "providerResponse": "Respuesta del proveedor",
    "providerResponseRawDescription": "La respuesta cruda de la API del proveedor",
    "providerResponseSseDescription": "El flujo SSE sin procesar de la API del proveedor",
    "unexpectedError": "Ocurrió un error inesperado",
    "error": "error",
    "errorMessage": "Error: {message}",
    "requestFailed": "Solicitud fallida",
    "noTextExtracted": "(No se extrae texto)",
    "liveMonitorMemoryNote": "Los eventos se almacenan en la memoria y se pierden al reiniciar.",
    "liveMonitorMemoryCapNote": "Máximo 200 eventos retenidos.",
    "eventSourcesLabel": "Fuentes de eventos:",
    "eventSourceTranslatorPage": "• Página de traductor (Chat Tester, Test Bench)",
    "eventSourceMainPipeline": "• Canalización de solicitudes principal (tráfico CLI/IDE/API)",
    "liveMonitorDescriptionPrefix": "Shows translation events as API calls flow through OmniRoute. Events come from the in-memory buffer (resets on restart). uso",
    "liveMonitorDescriptionSuffix": "o llamadas API externas para generar eventos.",
    "streamTransformer": "Transformador de corriente",
    "modeDescriptionStreamTransformer": "Ejecute transmisiones SSE de finalización de chat a través del transformador de Respuestas.",
    "streamTransformerTitle": "Transformador de flujo de respuestas",
    "streamTransformerDescription": "Pegue una secuencia SSE de finalización de chat, ejecútela a través del transformador de respuestas de OmniRoute e inspeccione los eventos de respuesta.* emitidos antes de conectar a un cliente.",
    "loadTextSample": "Cargar muestra de texto",
    "loadToolSample": "Cargar muestra de llamada a herramienta",
    "transformToResponses": "Transformar en respuestas",
    "rawChatSseInput": "Finalizaciones de chat sin procesar SSE",
    "transformedResponsesSse": "API de respuestas transformadas SSE",
    "noResultsYet": "Aún no hay resultados",
    "transformedEvents": "Eventos transformados",
    "uniqueEventTypes": "Tipos de eventos únicos",
    "inputLines": "Líneas de entrada",
    "outputLines": "Líneas de salida",
    "transformedEventTimeline": "Cronología del evento transformada",
    "transformerTimelineHint": "Ejecute el transformador para inspeccionar los eventos de respuesta.output_* emitidos en orden.",
    "eventType": "Tipo de evento",
    "eventPreview": "Vista previa",
    "comboRouted": "Combo enrutado",
    "uniqueEndpoints": "Puntos finales únicos",
    "routeDetails": "Detalles de la ruta",
    "comboBadge": "combinado",
    "routeEndpointLabel": "Punto final",
    "routeConnectionLabel": "Conexión",
    "scenarioVision": "Visión (comprensión de imágenes)",
    "scenarioSchemaCoercion": "Coerción de esquema (salida estructurada)",
    "techniques": "Técnicas:"
  },
  "usage": {
    "title": "Uso",
    "loggerTab": "registrador",
    "proxyTab": "apoderado",
    "budgetManagement": "Gestión Presupuestaria",
    "budgetSaved": "Límites de presupuesto guardados",
    "budgetSaveFailed": "No se pudo guardar el presupuesto",
    "loadingBudgetData": "Cargando datos de presupuesto...",
    "noApiKeysTitle": "Sin claves API",
    "noApiKeysDescription": "Primero agregue claves API para configurar límites de presupuesto.",
    "apiKey": "Clave API",
    "todaysSpend": "Gasto de hoy",
    "thisMonth": "este mes",
    "setLimits": "Establecer límites",
    "dailyLimitUsd": "Límite diario (USD)",
    "monthlyLimitUsd": "Límite mensual (USD)",
    "warningThresholdPercent": "Umbral de advertencia (%)",
    "dailyLimitPlaceholder": "por ej. 5.00",
    "monthlyLimitPlaceholder": "por ej. 50.00",
    "warningThresholdPlaceholder": "80",
    "saveLimits": "Guardar límites",
    "budgetOk": "Presupuesto correcto: {remaining} restante",
    "budgetExceeded": "Presupuesto excedido: las solicitudes pueden bloquearse",
    "totalRequests": "Solicitudes totales",
    "noDataYet": "Aún no hay datos",
    "latency": "Latencia",
    "latencyP50": "p50",
    "latencyP95": "p95",
    "latencyP99": "p99",
    "promptCache": "Caché de aviso",
    "systemHealth": "Estado del sistema",
    "entries": "Entradas",
    "activeCount": "{count} activo",
    "openCircuitBreakersDetected": "Se detectaron disyuntores abiertos",
    "hitRate": "Tasa de aciertos",
    "hitsMisses": "Aciertos/fallos",
    "circuitBreakers": "Disyuntores",
    "lockedIPs": "IP bloqueadas",
    "lockoutsAutoRefreshHint": "Bloqueos de límite de velocidad por modelo • Actualización automática 10 s",
    "lockedCount": "{count, plural, one {# locked} other {# locked}}",
    "timeLeft": "{time} izquierda",
    "howItWorks": "Cómo funciona",
    "howItWorksSubtitle": "Learn how evaluations validate your LLM responses",
    "define": "Definir",
    "defineStepDescription": "Create test cases with input prompts and expected output criteria using strategies like contains, regex, or exact match.",
    "run": "correr",
    "runStepDescription": "Execute test cases against your LLM endpoints through OmniRoute. Cada caso se envía como una solicitud API real.",
    "evaluate": "evaluar",
    "evaluateStepDescription": "Responses are compared against expected criteria. See pass/fail for each case with latency metrics and detailed feedback.",
    "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",
    "evalSuites": "Suites de evaluación",
    "evalSuitesHint": "Click a suite to view test cases, then run to evaluate your LLM endpoints",
    "evalsLoading": "Cargando suites de evaluación...",
    "noEvalSuitesFound": "No se encontraron suites Eval",
    "noEvalSuitesDescription": "Eval suites can be defined via the API or in code. They test model outputs against expected results using strategies like contains, regex, exact match, and custom functions.",
    "columnCase": "caso",
    "columnStatus": "Estado",
    "columnLatency": "Latencia",
    "columnDetails": "Detalles",
    "columnModel": "modelo",
    "columnStrategy": "Estrategia",
    "columnExpected": "esperado",
    "statsSuites": "Suites",
    "statsTestCases": "Casos de prueba",
    "statsModels": "Modelos",
    "statsCoverage": "Cobertura",
    "statsStrategiesCount": "{count} estrategias",
    "evaluationStrategies": "Estrategias de evaluación",
    "modelsUnderTest": "Modelos bajo prueba",
    "searchSuitesPlaceholder": "Conjuntos de búsqueda...",
    "passSuffix": "pasar",
    "casesCount": "{count, plural, one {# case} other {# cases}}",
    "runEval": "Ejecutar evaluación",
    "runAllSuites": "Ejecutar todo",
    "runAllRunning": "Corriendo todo...",
    "runAllProgress": "Ejecutando {current}/{total}: {name}",
    "runAllFailedSuites": "{count, plural, one {# suite failed} other {# suites failed}}",
    "runAllCompleted": "Ejecutó {suites} suites: {passed} pasó, {failed} falló",
    "runAllCompletedWithFailures": "Ejecutó {completed} suites; {failedSuites} no se pudo completar",
    "runningProgress": "Ejecutando {current}/{total}...",
    "passRate": "tasa de aprobación",
    "summaryBreakdown": "{passed} aprobado · {failed} fallido · {total} total",
    "passedIconLabel": "✅ Aprobado",
    "failedIconLabel": "❌ Fallido",
    "resultPassed": "Aprobado",
    "resultFailed": "Fallido",
    "expandResult": "Ampliar detalles de resultados",
    "collapseResult": "Contraer detalles de resultados",
    "detailsContains": "Contiene: \"{term}\"",
    "detailsRegex": "Expresión regular: {pattern}",
    "detailsExpected": "Se esperaba: \"{expected}\"",
    "expectedOutputLabel": "Salida esperada",
    "noResultsYet": "Aún no hay resultados",
    "testCasesCount": "Casos de prueba ({count})",
    "noTestCasesDefined": "No hay casos de prueba definidos",
    "runEvalHint": "Haga clic en \"Ejecutar evaluación\" para ejecutar todos los casos en su punto final LLM. Cada prueba envía una solicitud real a través de OmniRoute.",
    "notifyNoTestCases": "No hay casos de prueba definidos para esta suite",
    "notifyAllCasesPassed": "Todos los {total} casos pasados ✅",
    "notifySomeCasesFailed": "{passed}/{total} pasó, {failed} falló",
    "notifyEvalRunFailed": "La ejecución de evaluación falló",
    "notifyEvalTitle": "Evaluación: {name}",
    "modelEvals": "Evaluaciones de modelos",
    "evalsHeroDescription": "Pruebe y valide sus puntos finales de LLM ejecutando conjuntos de evaluación predefinidos. Cada conjunto contiene casos de prueba que envían indicaciones reales a través de OmniRoute y comparan respuestas con criterios esperados, lo que le ayuda a detectar regresiones, comparar modelos y garantizar la calidad de las respuestas entre proveedores.",
    "qualityValidation": "Validación de calidad",
    "modelComparison": "Comparación de modelos",
    "regressionDetection": "Detección de regresión",
    "latencyBenchmarks": "Puntos de referencia de latencia",
    "modelLockouts": "Bloqueos de modelos",
    "noLockouts": "No hay modelos bloqueados actualmente",
    "activeSessions": "Sesiones activas",
    "noSessions": "No hay sesiones activas",
    "sessionsHint": "Las sesiones aparecen a medida que las solicitudes fluyen a través del proxy.",
    "sessionsTrackedHint": "Seguimiento mediante solicitud de huellas dactilares • Actualización automática 5s",
    "session": "Sesión",
    "age": "edad",
    "requests": "Solicitudes",
    "connection": "Conexión",
    "durationMillisecondsShort": "{value}ms",
    "durationSecondsShort": "{value}s",
    "durationMinutesShort": "{value}m",
    "durationHoursShort": "{value}h",
    "reasonSeparator": " - ",
    "notAvailableSymbol": "-",
    "providerLimits": "Límites del proveedor",
    "noProviders": "No hay proveedores conectados",
    "connectProvidersForQuota": "Conéctese con proveedores con OAuth para realizar un seguimiento de los límites y el uso de su cuota de API.",
    "accountsCount": "{count, plural, one {# account} other {# accounts}}",
    "filteredFromCount": "(filtrado de {count})",
    "autoRefresh": "Actualización automática",
    "refreshAll": "Actualizar todo",
    "loadingQuotas": "Cargando...",
    "account": "cuenta",
    "modelQuotas": "Cuotas modelo",
    "lastUsed": "Last Refreshed",
    "actions": "Acciones",
    "refreshQuota": "Actualizar cuota",
    "today": "hoy",
    "tomorrow": "mañana",
    "dayTimeFormat": "{day}, {time}",
    "inDuration": "en {duration}",
    "notApplicable": "N/A",
    "rawPlanWithValue": "Plan sin formato: {plan}",
    "noPlanFromProvider": "Sin plan del proveedor",
    "noQuotaData": "Sin datos de cuota",
    "cardExpand": "__MISSING__:Expand",
    "cardCollapse": "__MISSING__:Collapse",
    "moreQuotas": "__MISSING__:+{count} more",
    "ungrouped": "Ungrouped",
    "viewFlat": "Flat",
    "viewByEnvironment": "By Environment",
    "noQuotaDataAvailable": "No hay datos de cuota disponibles",
    "noAccountsForTierFilter": "No se encontraron cuentas para el filtro de niveles",
    "tierAll": "Todos",
    "tierEnterprise": "Empresa",
    "tierTeam": "equipo",
    "tierBusiness": "Negocios",
    "tierUltra": "Ultra",
    "tierPro": "profesional",
    "tierPlus": "Más",
    "tierFree": "Gratis",
    "tierLite": "__MISSING__:Lite",
    "tierUnknown": "Desconocido",
    "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": "Editar límites",
    "forceRefresh": "Actualizar ahora",
    "suiteBuilderSaveFailed": "Failed to save suite",
    "clone": "clonar",
    "exportSuite": "Exportar",
    "importSuite": "Importar",
    "suiteExported": "Suite exportada",
    "suiteExportFailed": "No se pudo exportar el conjunto",
    "suiteImportReady": "Importación de suite cargada para revisión",
    "suiteImportFailed": "No se pudo importar la suite",
    "suiteImportInvalid": "JSON del conjunto de evaluación no válido",
    "suiteBuilderCloneSuffix": "copiar",
    "suiteBuilderImportedSuite": "Suite importada",
    "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",
    "suiteBuilderCaseSystemPromptLabel": "System Prompt",
    "suiteBuilderCaseExpectedPlaceholder": "e.g. def fibonacci",
    "suiteBuilderCaseExpectedPlaceholderContains": "por ej. fibonacci",
    "suiteBuilderCaseExpectedPlaceholderExact": "Pegue la respuesta esperada exacta",
    "suiteBuilderCaseExpectedPlaceholderRegex": "por ej. ^\\\\s*\\\\{.*\\\\}\\\\s*$",
    "suiteBuilderCaseExpectedHintRegex": "Utilice una expresión regular de JavaScript sin barras diagonales.",
    "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",
    "suiteBuilderCaseUserPromptLabel": "User Prompt",
    "daily": "Daily",
    "resultErrorLabel": "Error",
    "suiteBuilderBuiltInBadge": "Built-in",
    "suiteBuilderCaseCardTitle": "Test Case",
    "suiteBuilderDuplicateCase": "Duplicar",
    "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",
    "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": "Min restante",
    "quotaCutoffsColumnHelp": "Detenga las solicitudes cuando la cuota restante caiga a este porcentaje o menos.",
    "quotaCutoffsButtonDefault": "Predeterminado",
    "quotaCutoffsButtonHelp": "Edite los límites de cuota mínima restante para esta cuenta.",
    "quotaCutoffsButtonDisabled": "Aún no hay períodos de cuota disponibles para esta cuenta.",
    "quotaCutoffsTitle": "Límites de cuota para {name} ({provider})",
    "quotaCutoffsExplainer": "Anule el porcentaje de cuota restante mínimo cuando esta cuenta deja de seleccionarse para cada ventana de cuota. Déjelo en blanco para heredar el valor predeterminado del proveedor.",
    "quotaCutoffsDefaultHint": "Min restante predeterminado: {default}%",
    "quotaCutoffsResetAll": "Restablecer todo",
    "quotaCutoffsNoWindows": "Aún no hay períodos de cuota disponibles para esta cuenta.",
    "quotaThresholdInvalid": "Introduzca un número entero del 0 al 100.",
    "budgetKpiToday": "hoy",
    "budgetKpiThisMonth": "este mes",
    "budgetKpiProjEom": "MOE del proyecto",
    "budgetKpiBlocked": "Bloqueado",
    "budgetKpiAtRisk": "En riesgo",
    "budgetKpiActiveKeys": "Claves activas",
    "budgetSearchKeysPlaceholder": "Claves de búsqueda...",
    "budgetSortPctUsed": "Ordenar: % usado ↓",
    "budgetSortTodayDollar": "Ordenar: Hoy $ ↓",
    "budgetSortMonthDollar": "Ordenar: Mes $ ↓",
    "budgetSortNameAZ": "Ordenar: Nombre (A–Z)",
    "budgetColDailyLim": "límite diario",
    "budgetColMonthlyLim": "límite mensual",
    "budgetColUsedPct": "% usado",
    "budgetLoading": "Cargando…",
    "budgetNoKeysMatch": "Ninguna clave coincide con los filtros",
    "budgetLinearExtrapolation": "extrapolación lineal",
    "budgetThisMonthSoFar": "Este mes hasta ahora",
    "budgetProjectedEndOfMonth": "Fin de mes proyectado",
    "budgetByProvider": "por proveedor",
    "budgetDailyDollar": "Diariamente $",
    "budgetWeeklyDollar": "Semanal $",
    "budgetMonthlyDollar": "$ Mensual",
    "budgetWarnAtPct": "Advertir al %",
    "quotaAlerts": "Alertas de cuota",
    "quotaTableRefreshing": "⟳Refrescante...",
    "noSpendLast30Days": "Sin gastos en los últimos 30 días",
    "updatedShort": "__MISSING__:Updated",
    "lastRefreshed": "__MISSING__:Last refreshed",
    "providerQuota": "__MISSING__:Provider Quota",
    "providerQuotaHomeHint": "__MISSING__:Live status across connected accounts"
  },
  "modals": {
    "waitingAuth": "Esperando autorización",
    "verificationUrl": "URL de verificación",
    "yourCode": "Tu código",
    "remoteAccess": "Acceso remoto:",
    "connectedSuccess": "¡Conectado exitosamente!",
    "connectionFailed": "Conexión fallida",
    "chooseAuthMethod": "Elija su método de autenticación:",
    "awsBuilderId": "ID del creador de AWS",
    "awsIamIdentity": "Centro de identidad de AWS IAM",
    "googleAccount": "Cuenta de Google",
    "githubAccount": "Cuenta GitHub",
    "importToken": "Importar token",
    "pasteToken": "Pegue el token de actualización de Kiro IDE.",
    "awsRegion": "Región de AWS",
    "autoDetecting": "Tokens de detección automática...",
    "readingFromCache": "Lectura de la caché de AWS SSO",
    "readingFromCursor": "Lectura de la base de datos Cursor IDE",
    "initializing": "Inicializando...",
    "pricingConfig": "Configuración de precios",
    "loadingPricing": "Cargando datos de precios...",
    "pricingRatesFormat": "Formato de tarifas de precios",
    "noPricingData": "No hay datos de precios disponibles",
    "noModelsFound": "No se encontraron modelos"
  },
  "loggers": {
    "allProviders": "Todos los proveedores",
    "allModels": "Todos los modelos",
    "allAccounts": "Todas las cuentas",
    "allApiKeys": "Todas las claves API",
    "allTypes": "Todos los tipos",
    "allLevels": "Todos los niveles",
    "modelAZ": "Modelo A-Z",
    "modelZA": "Modelo Z-A",
    "loadingLogs": "Cargando registros...",
    "loadingProxyLogs": "Cargando registros de proxy...",
    "noLogEntries": "No se encontraron entradas de registro",
    "noPayloadData": "No hay datos de carga disponibles para esta entrada de registro.",
    "proxyEvent": "Evento de proxy",
    "proxy": "apoderado",
    "level": "Nivel",
    "directNative": "Directo (nativo)",
    "combo": "combinado",
    "inputTokens": "Yo:",
    "outputTokens": "Oh:"
  },
  "stats": {
    "usageOverview": "Descripción general de uso",
    "outputTokens": "Fichas de salida",
    "totalCost": "Costo total",
    "usageByModel": "Uso por modelo",
    "usageByAccount": "Uso por cuenta",
    "failedToLoad": "No se pudieron cargar las estadísticas de uso.",
    "tokenHealth": "Salud del token",
    "totalOAuth": "OAuth total",
    "healthy": "saludable",
    "warning": "Advertencia",
    "errored": "Error",
    "lastCheck": "último control",
    "noData": "Sin datos",
    "share": "Compartir",
    "unableToLoad": "No se pueden cargar las métricas del sistema",
    "product": "Producto",
    "resources": "Recursos",
    "company": "Empresa"
  },
  "auth": {
    "welcome": "Bienvenido",
    "signIn": "Iniciar sesión",
    "enterPassword": "Ingresa tu contraseña para continuar",
    "password": "Contraseña",
    "unifiedProxy": "Proxy de API de IA unificado",
    "unifiedAiApiProxy": "Proxy de API de IA unificado",
    "unifiedAiApiProxyDesc": "Enrute solicitudes a múltiples proveedores de IA a través de un único punto final. Equilibrio de carga, conmutación por error y seguimiento de uso integrados.",
    "passwordNotEnabled": "La protección con contraseña no está habilitada",
    "loading": "Cargando...",
    "invalidPassword": "Contraseña no válida",
    "errorOccurredRetry": "Se produjo un error. Por favor inténtalo de nuevo.",
    "configureInstance": "Configuremos su instancia de OmniRoute",
    "runOnboardingWizard": "Ejecuta el asistente de onboarding para configurar tu contraseña y conectar tu primer proveedor de IA.",
    "startOnboarding": "Iniciar la incorporación",
    "secureYourInstance": "Asegure su instancia",
    "setPasswordDescription": "Establezca una contraseña para proteger su panel y proteger sus puntos finales API contra accesos no autorizados.",
    "configurePassword": "Configurar contraseña",
    "continue": "Continuar",
    "windowWillClose": "Esta ventana se cerrará automáticamente...",
    "closeTabNow": "Puedes cerrar esta pestaña ahora.",
    "copyUrlManual": "Copia la URL de la barra de direcciones y pégala en la aplicación.",
    "accessDeniedDescription": "No tienes permiso para acceder a este recurso. Verifique su clave API o comuníquese con el administrador.",
    "goToDashboard": "Ir al panel",
    "featureMultiProviderTitle": "Multiproveedor",
    "featureMultiProviderDesc": "OpenAI, Anthropic, Google y más",
    "featureLoadBalancingTitle": "Equilibrio de carga",
    "featureLoadBalancingDesc": "Distribuya las solicitudes de forma inteligente",
    "featureUsageTrackingTitle": "Seguimiento de uso",
    "featureUsageTrackingDesc": "Monitorear costos y tokens",
    "resetPassword": "Restablecer contraseña",
    "resetDescription": "Elija un método para recuperar el acceso a su panel",
    "stopServer": "Detén el servidor OmniRoute",
    "processing": "Procesando...",
    "pleaseWait": "Espere mientras completamos la autorización.",
    "authSuccess": "¡Autorización exitosa!",
    "copyUrl": "Copia esta URL",
    "accessDenied": "Acceso denegado",
    "methodCliTitle": "Método 1: reinicio de CLI",
    "methodCliDescription": "Ejecute el siguiente comando en el servidor donde se ejecuta OmniRoute:",
    "methodCliHint": "Esto le pedirá que establezca una nueva contraseña. Primero se debe detener el servidor.",
    "methodManualTitle": "Método 2: reinicio manual",
    "methodManualDescription": "Elimina la contraseña de la base de datos y configura una nueva al iniciar:",
    "setPasswordInYour": "Define una nueva contraseña en tu",
    "fileLabelSuffix": "archivo:",
    "newPasswordPlaceholder": "tu_nueva_contraseña",
    "deleteSettingsFile": "Eliminar",
    "orRemovePasswordHashField": "o eliminar el campo contraseñaHash",
    "restartServerWithNewPassword": "Reinicia el servidor; usará la nueva contraseña",
    "backToLogin": "Volver a iniciar sesión",
    "forgotPassword": "¿Olvidaste tu contraseña?",
    "defaultPasswordHint": "Default password: CHANGEME (unless INITIAL_PASSWORD was set)",
    "Authorization": "Autorización",
    "Content-Disposition": "Disposición de contenido",
    "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 20.20.2+ (20.x LTS), 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended."
  },
  "landing": {
    "brandName": "OmniRuta",
    "navigateHome": "Navegar a casa",
    "toggleMenu": "Alternar menú",
    "featuresLink": "Características",
    "docsLink": "Documentos",
    "github": "GitHub",
    "versionLive": "v1.0 ya está disponible",
    "oneEndpoint": "Un punto final para",
    "allProviders": "Todos los proveedores de IA",
    "heroDescription": "Proxy de punto final de IA con panel web: un puerto JavaScript de CLIProxyAPI. Funciona a la perfección con Claude Code, OpenAI Codex, Cline, RooCode y otras herramientas CLI.",
    "getStarted": "Empezar",
    "viewOnGithub": "Ver en GitHub",
    "powerfulFeatures": "Funciones potentes",
    "featuresSubtitle": "Todo lo que necesita para administrar su infraestructura de IA en un solo lugar, diseñado para escalar.",
    "featureUnifiedEndpointTitle": "Punto final unificado",
    "featureUnifiedEndpointDesc": "Acceda a todos los proveedores a través de una única URL API estándar.",
    "featureEasySetupTitle": "Fácil configuración",
    "featureEasySetupDesc": "Póngase en funcionamiento en minutos con el comando npx.",
    "featureModelFallbackTitle": "Modelo de reserva",
    "featureModelFallbackDesc": "Cambie automáticamente de proveedor en caso de falla o alta latencia.",
    "featureUsageTrackingTitle": "Seguimiento de uso",
    "featureUsageTrackingDesc": "Análisis detallados y seguimiento de costes en todos los modelos.",
    "featureOAuthApiKeysTitle": "Claves OAuth y API",
    "featureOAuthApiKeysDesc": "Administre de forma segura las credenciales en una bóveda.",
    "featureCloudSyncTitle": "Sincronización en la nube",
    "featureCloudSyncDesc": "Sincronice sus configuraciones entre dispositivos al instante.",
    "featureCliSupportTitle": "Soporte CLI",
    "featureCliSupportDesc": "Funciona con Claude Code, Codex, Cline, Cursor y más.",
    "featureDashboardTitle": "Panel de control",
    "featureDashboardDesc": "Panel visual para análisis de tráfico en tiempo real.",
    "howItWorks": "Cómo funciona OmniRoute",
    "howItWorksDescription": "Los datos fluyen sin problemas desde su aplicación a través de nuestra capa de enrutamiento inteligente hasta el mejor proveedor para el trabajo.",
    "howItWorksStep1Title": "1. CLI y SDK",
    "howItWorksStep1Description": "Sus solicitudes comienzan desde sus herramientas favoritas o nuestro SDK unificado. Simplemente cambie la URL base.",
    "howItWorksStep2Title": "2. Centro OmniRoute",
    "howItWorksStep2Description": "Nuestro motor analiza el aviso, verifica el estado del proveedor y las rutas para obtener la latencia o el costo más bajo.",
    "howItWorksStep3Title": "3. Proveedores de IA",
    "howItWorksStep3Description": "OpenAI, Anthropic, Gemini u otros cumplen la solicitud al instante.",
    "getStartedIn30Seconds": "Comience en 30 segundos",
    "getStartedDescription": "Instale OmniRoute, configure sus proveedores a través del panel web y comience a enrutar solicitudes de IA.",
    "installOmniRoute": "Instalar OmniRoute",
    "installStepDescription": "Ejecute el comando npx para iniciar el servidor al instante",
    "openDashboard": "Abrir panel",
    "openDashboardStepDescription": "Configure proveedores y claves API a través de la interfaz web",
    "routeRequests": "Solicitudes de ruta",
    "routeRequestsStepDescription": "Apunte sus herramientas CLI a {endpoint}",
    "terminal": "terminales",
    "copy": "Copiar",
    "copied": "✓ Copiado",
    "startingOmniRoute": "Iniciando OmniRoute...",
    "serverRunningOnLabel": "Servidor ejecutándose en",
    "dashboardLabel": "Panel de control",
    "readyToRoute": "¡Listo para la ruta! ✓",
    "configureProvidersNote": "📝 Configure proveedores en el panel o use variables de entorno",
    "dataLocation": "Ubicación de datos:",
    "dataLocationMacLinux": " MacOS/Linux:",
    "dataLocationWindows": " Ventanas:",
    "product": "Producto",
    "dashboardLink": "Panel de control",
    "changelog": "Registro de cambios",
    "resources": "Recursos",
    "documentation": "Documentación",
    "npm": "MNP",
    "legal": "Legales",
    "mitLicense": "Licencia MIT",
    "footerTagline": "El punto final unificado para la generación de IA. Conecte, enrute y administre sus proveedores de IA con facilidad.",
    "copyright": "© {year} OmniRoute. Reservados todos los derechos.",
    "flowToolClaudeCode": "Código Claude",
    "flowToolOpenAICodex": "Códice OpenAI",
    "flowToolCline": "Clina",
    "flowToolCursor": "Cursor",
    "flowProviderOpenAI": "AbiertoAI",
    "flowProviderAnthropic": "antrópico",
    "flowProviderGemini": "Géminis",
    "flowProviderGithubCopilot": "Copiloto de GitHub",
    "interactiveDiagram": "Diagrama interactivo visible en el escritorio.",
    "ctaTitle": "¿Listo para simplificar su infraestructura de IA?",
    "ctaDescription": "Únase a los desarrolladores que están optimizando sus integraciones de IA con OmniRoute. Código abierto y gratuito para comenzar.",
    "startFree": "Comience gratis",
    "readDocumentation": "Leer documentación"
  },
  "docs": {
    "title": "Documentación",
    "quickStart": "Inicio rápido",
    "deploymentGuides": "Guías de implementación",
    "features": "Características",
    "supportedProviders": "Proveedores compatibles",
    "supportedProvidersToc": "Proveedores",
    "commonUseCases": "Casos de uso comunes",
    "clientCompatibility": "Compatibilidad del cliente",
    "protocolsToc": "Protocolos",
    "apiReference": "Referencia de API",
    "managementApiReference": "Management API Reference",
    "managementApiDescription": "Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.",
    "method": "Método",
    "path": "Camino",
    "notes": "Notas",
    "modelPrefixes": "Prefijos de modelo",
    "prefix": "Prefijo",
    "troubleshooting": "Solución de problemas",
    "supportsChat": "Admite puntos finales de chat y respuestas.",
    "oauthAutoRefresh": "Conexión OAuth con actualización automática de token.",
    "fullStreaming": "Soporte completo de transmisión para todos los modelos.",
    "docsLabel": "Documentos",
    "docsHeroDescription": "Puerta de enlace de IA para LLM de múltiples proveedores. Un punto final para OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor y más de 20 proveedores.",
    "openDashboard": "Abrir panel",
    "endpointPage": "Página de punto final",
    "github": "GitHub",
    "reportIssue": "Informar problema",
    "onThisPage": "En esta página",
    "documentationVersion": "Documentación: v{version}",
    "quickStartStep1Title": "1. Instalar y ejecutar",
    "quickStartStep1Prefix": "correr",
    "quickStartStep1Middle": "o clonar desde GitHub y ejecutar",
    "quickStartStep2Title": "2. Crear clave API",
    "quickStartStep2Text": "Vaya a Punto final -> Claves registradas. Genere una clave por entorno.",
    "quickStartStep3Title": "3. Conectar proveedores",
    "quickStartStep3Text": "Agregue cuentas de proveedor mediante el inicio de sesión de OAuth, la clave API o la conexión automática de nivel gratuito.",
    "quickStartStep4Title": "4. Establecer la URL de la base de clientes",
    "quickStartStep4Prefix": "Apunte su cliente IDE o API a",
    "quickStartStep4Suffix": "Utilice el prefijo del proveedor, por ejemplo",
    "deploySetupTitle": "Guía de configuración",
    "deploySetupText": "Instalación paso a paso, configuración del entorno y tutorial de primera ejecución de OmniRoute.",
    "deployElectronTitle": "Escritorio electrónico",
    "deployElectronText": "Ejecute OmniRoute como una aplicación de escritorio nativa en Windows, macOS y Linux.",
    "deployDockerTitle": "acoplador",
    "deployDockerText": "Implementación en contenedores con Docker Compose; listo para pilas de producción y Kubernetes.",
    "deployVmTitle": "Máquina virtual",
    "deployVmText": "Autohospedaje en cualquier máquina virtual Linux. Incluye unidad systemd, rotación de registros y herramientas de respaldo.",
    "deployFlyTitle": "volar.io",
    "deployFlyText": "Implemente en el tiempo de ejecución perimetral de Fly.io con un fly.toml y un único comando de implementación.",
    "deployPwaTitle": "PWA",
    "deployPwaText": "Instale OmniRoute como una aplicación web progresiva en Android, iOS y navegadores de escritorio.",
    "deployTermuxTitle": "Termux (Android)",
    "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser.",
    "featureRoutingTitle": "Enrutamiento multiproveedor",
    "featureRoutingText": "Enrute solicitudes a más de 30 proveedores de IA a través de un único punto final compatible con OpenAI. Admite API de chat, respuestas, audio e imágenes.",
    "featureCombosTitle": "Combos y equilibrio",
    "featureCombosText": "Cree combinaciones de modelos con cadenas de respaldo y estrategias de equilibrio: round-robin, prioridad, aleatorio, menos utilizado y de costo optimizado.",
    "featureUsageTitle": "Seguimiento de uso y costos",
    "featureUsageText": "Recuento de tokens en tiempo real, cálculo de costos por proveedor/modelo y desglose detallado del uso por clave API y cuenta.",
    "featureAnalyticsTitle": "Panel de análisis",
    "featureAnalyticsText": "Análisis visual con gráficos de solicitudes, tokens, errores, latencia, costos y popularidad del modelo a lo largo del tiempo.",
    "featureHealthTitle": "Monitoreo de salud",
    "featureHealthText": "Comprobaciones de estado en vivo, estado del proveedor, estados de los disyuntores y detección automática del límite de velocidad con retroceso exponencial.",
    "featureCliTitle": "Herramientas CLI",
    "featureCliText": "Administre configuraciones de IDE, exporte/importe copias de seguridad, descubra perfiles de códice y configure ajustes desde el panel.",
    "featureSecurityTitle": "Seguridad y políticas",
    "featureSecurityText": "Autenticación de clave API, filtrado de IP, protección contra inyección rápida, políticas de dominio, gestión de sesiones y registro de auditoría.",
    "featureCloudSyncTitle": "Sincronización en la nube",
    "featureCloudSyncText": "Sincronice su configuración con Cloudflare Workers para obtener acceso remoto con credenciales cifradas y conmutación por error automática.",
    "providersAcrossConnectionTypes": "{count} proveedores en tres tipos de conexión.",
    "manageProviders": "Administrar proveedores",
    "providersCount": "{count} proveedores",
    "providerTypeFree": "Nivel gratuito",
    "providerTypeOAuth": "OAuth",
    "providerTypeApiKey": "Clave API",
    "useCaseSingleEndpointTitle": "Punto final único para muchos proveedores",
    "useCaseSingleEndpointText": "Dirija a los clientes a una URL base y enrútelos por prefijo de modelo (por ejemplo: gh/, cc/, kr/, openai/).",
    "useCaseFallbackTitle": "Retroceso y cambio de modelo con combos",
    "useCaseFallbackText": "Cree modelos combinados en el Panel y mantenga estable la configuración del cliente mientras los proveedores rotan internamente.",
    "useCaseUsageVisibilityTitle": "Visibilidad de uso, costo y depuración",
    "useCaseUsageVisibilityText": "Realice un seguimiento de los tokens y el costo por proveedor, cuenta y clave API en las pestañas Uso y Análisis.",
    "clientCherryStudioTitle": "estudio de cereza",
    "baseUrlLabel": "URL básica",
    "chatEndpointLabel": "Punto final del chat",
    "modelRecommendationLabel": "Recomendación del modelo: prefijo explícito",
    "clientCodexTitle": "Modelos de copiloto Codex/GitHub",
    "clientCodexBullet1": "Utilice ID de modelo con",
    "clientCodexBullet2": "Los modelos de la familia Codex se enrutan automáticamente a",
    "clientCodexBullet3": "Los modelos que no pertenecen al Codex continúan",
    "clientCursorTitle": "Cursor IDE",
    "clientCursorBullet1": "uso",
    "clientCursorBullet1Suffix": "Prefijo para modelos de cursor.",
    "clientCursorBullet2": "Conexión OAuth: inicie sesión desde la página de Proveedores.",
    "clientClaudeTitle": "Código Claude / Antigravedad",
    "clientClaudeBullet1Prefix": "uso",
    "clientClaudeBullet1Middle": "(Claude) o",
    "clientClaudeBullet1Suffix": "Prefijo (antigravedad).",
    "clientWindsurfTitle": "windsurf",
    "clientWindsurfBullet1": "Utilice OmniRoute como URL base compatible con OpenAI y mantenga prefijos de proveedor explícitos para un enrutamiento determinista.",
    "clientWindsurfBullet2": "Apunte los modelos a `/v1/chat/completions` para el tráfico general y conserve `/v1/responses` para flujos de estilo Codex.",
    "clientWindsurfBullet3": "Utilice Panel -> Herramientas CLI para obtener una guía de configuración de Windsurf lista para usar.",
    "clientClineTitle": "Clina",
    "clientClineBullet1": "Cline funciona mejor con prefijos explícitos de proveedor/modelo para que el enrutador nunca tenga que adivinar el backend.",
    "clientClineBullet2": "Utilice `/v1/chat/completions` para modelos generales y reutilice la misma URL base de OmniRoute en diferentes cuentas.",
    "clientClineBullet3": "Utilice el panel de proveedores para validar la clave OAuth/API antes de depurar problemas de tiempo de ejecución de Cline.",
    "clientKimiTitle": "Codificación Kimi",
    "clientKimiBullet1": "Utilice OmniRoute como URL base estable mientras rota cuentas o combinaciones de proveedores debajo.",
    "clientKimiBullet2": "Prefiera modelos con prefijos en los flujos de codificación para que el respaldo y el seguimiento de auditoría sigan siendo explícitos.",
    "clientKimiBullet3": "Utilice `/v1/responses` cuando desee un enrutamiento nativo estilo Respuestas para clientes que utilizan herramientas.",
    "protocolsTitle": "Protocolos: MCP y A2A",
    "protocolsDescription": "OmniRoute expone dos protocolos operativos además de las API compatibles con OpenAI: MCP para la ejecución de herramientas y A2A para flujos de trabajo de agente a agente.",
    "protocolMcpTitle": "MCP (Protocolo de contexto modelo)",
    "protocolMcpDesc": "Utilice MCP sobre stdio para permitir que los clientes descubran y llamen a las herramientas OmniRoute con visibilidad de auditoría.",
    "protocolMcpStep1": "Inicie el transporte MCP con `omniroute --mcp`.",
    "protocolMcpStep2": "Apunte su cliente MCP al transporte stdio.",
    "protocolMcpStep3": "Llame a `omniroute_get_health` y `omniroute_list_combos` para validar la conectividad.",
    "protocolA2aTitle": "A2A (Agente2Agente)",
    "protocolA2aDesc": "Utilice A2A JSON-RPC para enviar tareas de forma sincrónica o mediante transmisión SSE.",
    "protocolA2aStep1": "Lea `/.well-known/agent.json` para descubrir agentes.",
    "protocolA2aStep2": "Envíe solicitudes `message/send` o `message/stream` a `POST /a2a`.",
    "protocolA2aStep3": "Administre el ciclo de vida de las tareas con `tasks/get` y `tasks/cancel`.",
    "protocolTroubleshootingTitle": "Solución de problemas de protocolo",
    "protocolTroubleshooting1": "Si el estado de MCP está fuera de línea, verifique que el proceso stdio se esté ejecutando y que el archivo de latido se esté actualizando.",
    "protocolTroubleshooting2": "Si las tareas A2A permanecen en `working`, inspeccione `/api/a2a/tasks/:id` y transmita eventos para ver el estado terminal.",
    "protocolTroubleshooting3": "Utilice `/dashboard/mcp` y `/dashboard/a2a` para controles operativos y visibilidad de auditoría.",
    "endpointChatNote": "Punto final de chat compatible con OpenAI (predeterminado).",
    "endpointResponsesNote": "Punto final de API de respuestas (Codex, o-series).",
    "endpointModelsNote": "Catálogo de modelos para todos los proveedores conectados.",
    "endpointAudioNote": "Transcripción de audio (Deepgram, AssemblyAI).",
    "endpointSpeechNote": "Generación de texto a voz (ElevenLabs, OpenAI TTS).",
    "endpointEmbeddingsNote": "Generación de embeddings de texto (OpenAI, Cohere, Voyage).",
    "endpointImagesNote": "Generación de imágenes (NanoBanana).",
    "endpointRewriteChatNote": "Reescribir el asistente para clientes sin /v1.",
    "endpointRewriteResponsesNote": "Reescriba el asistente para respuestas sin /v1.",
    "endpointRewriteModelsNote": "Reescriba el asistente para el descubrimiento de modelos sin /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": "Utilice el prefijo del proveedor antes del nombre del modelo para enrutar a un proveedor específico. Ejemplo:",
    "modelPrefixesDescriptionEnd": "rutas al copiloto de GitHub.",
    "provider": "Proveedor",
    "type": "Tipo",
    "troubleshootingModelRouting": "Si el cliente falla con el enrutamiento del modelo, utilice proveedor/modelo explícito (por ejemplo: gh/gpt-5.1-codex).",
    "troubleshootingAmbiguousModels": "Si recibe errores de modelo ambiguos, elija un prefijo de proveedor en lugar de una identificación de modelo simple.",
    "troubleshootingCodexFamily": "Para los modelos de la familia GitHub Codex, mantenga el modelo como gh/codex-model; El enrutador selecciona/respuestas automáticamente.",
    "troubleshootingTestConnection": "Utilice Panel > Proveedores > Probar conexión antes de realizar pruebas desde IDE o clientes externos.",
    "troubleshootingCircuitBreaker": "Si un proveedor muestra el disyuntor abierto, espere el tiempo de reutilización o consulte la página de Salud para obtener más detalles.",
    "troubleshootingOAuth": "Para los proveedores de OAuth, vuelva a autenticarse si los tokens caducan. Verifique el indicador de estado de la tarjeta del proveedor.",
    "endpointCompletionsNote": "Punto final de finalización heredado para la generación de texto.",
    "endpointModerationsNote": "Moderación de contenidos y clasificación de seguridad.",
    "endpointRerankNote": "Reclasificación de documentos para generación aumentada de recuperación (Cohere, Jina).",
    "endpointSearchNote": "Búsqueda web con 5 proveedores (Serper, Brave, Exa, Tavily, Perplexity).",
    "endpointSearchAnalyticsNote": "Análisis y métricas para solicitudes de búsqueda.",
    "endpointVideoNote": "Generación de vídeo (ComfyUI, flujos de trabajo SD WebUI).",
    "endpointMusicNote": "Generación de música a través de flujos de trabajo de ComfyUI.",
    "endpointMessagesNote": "Punto final de mensajes nativos antrópicos.",
    "endpointCountTokensNote": "Cuente los tokens para una carga útil de mensaje determinada.",
    "endpointFilesNote": "Carga de archivos para entradas multimodales.",
    "endpointBatchesNote": "Procesamiento por lotes para solicitudes API masivas.",
    "endpointWsNote": "Punto final WebSocket para transmisión en tiempo real.",
    "mgmtProvidersListNote": "Enumere todas las conexiones de proveedores registrados.",
    "mgmtProvidersCreateNote": "Cree una nueva conexión de proveedor.",
    "mgmtProvidersUpdateNote": "Actualizar una conexión de proveedor existente.",
    "mgmtProvidersDeleteNote": "Eliminar una conexión de proveedor.",
    "mgmtProvidersTestNote": "Pruebe la conectividad y la autenticación de un proveedor.",
    "mgmtProvidersModelsNote": "Enumere los modelos disponibles para un proveedor específico.",
    "mgmtSettingsGetNote": "Recuperar la configuración actual de la aplicación.",
    "mgmtSettingsUpdateNote": "Actualizar la configuración de la aplicación.",
    "mgmtPayloadRulesGetNote": "Obtenga reglas de transformación de carga útil.",
    "mgmtPayloadRulesUpdateNote": "Actualice las reglas de transformación de carga útil.",
    "mcpToolsTitle": "Herramientas MCP",
    "mcpToolsDescription": "OmniRoute expone {count} herramientas a través del protocolo de contexto del modelo para la orquestación de agentes.",
    "mcpToolsCount": "{count} herramientas",
    "mcpToolsToc": "Herramientas MCP",
    "mcpToolsRoutingTitle": "Enrutamiento y descubrimiento",
    "mcpToolsRoutingDesc": "Comprobaciones de estado, gestión combinada, seguimiento de cuotas, informes de costes y acceso al catálogo de modelos.",
    "mcpToolsOperationsTitle": "Operaciones y estrategia",
    "mcpToolsOperationsDesc": "Simulación de rutas, guardias de presupuesto, cambio de estrategia, perfiles de resiliencia y métricas de proveedores.",
    "mcpToolsCacheTitle": "Gestión de caché",
    "mcpToolsCacheDesc": "Vea estadísticas de caché y vacíe cachés semánticos o de firmas.",
    "mcpToolsCompressionTitle": "Motores de compresión",
    "mcpToolsCompressionDesc": "Configure la compresión RTK/Brotli, intercambie motores e inspeccione los análisis de compresión por combo.",
    "mcpToolsOneProxyTitle": "1Proxy / Túneles",
    "mcpToolsOneProxyDesc": "Administre servidores proxy salientes, rote IP residenciales e inspeccione el estado del proxy.",
    "mcpToolsMemoryTitle": "Memoria",
    "mcpToolsMemoryDesc": "Busque, agregue y borre entradas persistentes de la memoria conversacional.",
    "mcpToolsSkillsTitle": "Habilidades",
    "mcpToolsSkillsDesc": "Enumere, habilite, ejecute y supervise ejecuciones de habilidades personalizadas.",
    "featureAutoComboTitle": "Combo automático",
    "featureAutoComboText": "Cree automáticamente combinaciones optimizadas basadas en sus proveedores conectados, patrones de uso y capacidades del modelo.",
    "featureSearchTitle": "Búsqueda web",
    "featureSearchText": "Búsqueda web integrada con 5 proveedores (Serper, Brave, Exa, Tavily, Perplexity) que incluyen análisis y seguimiento de costos.",
    "featureMemoryTitle": "Sistema de memoria",
    "featureMemoryText": "Memoria conversacional persistente con extracción, inyección, recuperación y resumen entre sesiones.",
    "featureSkillsTitle": "Marco de habilidades",
    "featureSkillsText": "Sistema de habilidades extensible con habilidades integradas y personalizadas, ejecución de espacio aislado, interceptación de solicitudes e inyección de contexto.",
    "featureAcpTitle": "Comunicación del agente",
    "featureAcpText": "Registro del Protocolo de comunicación del agente (ACP) para gestionar flujos de trabajo de agente a agente y orquestación de herramientas.",
    "protocolAcpTitle": "ACP (Comunicación del agente)",
    "protocolAcpDesc": "Registre y administre agentes a través del registro ACP para la comunicación entre agentes y el intercambio de herramientas.",
    "protocolAcpStep1": "Navegue hasta Panel → Agentes para ver los agentes ACP registrados.",
    "protocolAcpStep2": "Registrar nuevos agentes con capacidades y configuración de endpoints.",
    "protocolAcpStep3": "Utilice las herramientas CLI para configurar los canales de comunicación del agente."
  },
  "legal": {
    "privacyPolicy": "Política de privacidad",
    "termsOfService": "Términos de servicio",
    "providerConfigurations": "Configuraciones de proveedor",
    "apiKeys": "Claves API",
    "usageLogs": "Registros de uso",
    "applicationSettings": "Configuración de la aplicación",
    "viewExportAnalytics": "Ver y exportar análisis de uso",
    "clearHistory": "Borrar el historial de uso en cualquier momento",
    "configureRetention": "Configurar políticas de retención de registros",
    "backupRestore": "Haga una copia de seguridad y restaure su base de datos",
    "privacyMetadataTitle": "Política de privacidad | OmniRuta",
    "privacyMetadataDescription": "Política de privacidad para el enrutador proxy API OmniRoute AI.",
    "termsMetadataTitle": "Términos de servicio | OmniRuta",
    "termsMetadataDescription": "Términos de servicio para el enrutador proxy API OmniRoute AI.",
    "backToHome": "De vuelta a casa",
    "lastUpdated": "Última actualización: {date}",
    "policyLastUpdatedDate": "13 de febrero de 2026",
    "listSeparator": "-",
    "questionsVisit": "¿Preguntas? Visita nuestro",
    "githubRepository": "repositorio de GitHub",
    "privacySection1Title": "1. Arquitectura local primero",
    "privacySection1Text": "OmniRoute está diseñado como una aplicación local. Todo el procesamiento y almacenamiento de datos se realiza íntegramente en su máquina. No existe un servidor centralizado que recopile su información.",
    "privacySection2Title": "2. Datos que almacenamos",
    "privacyDataStoredIn": "Los siguientes datos se almacenan localmente en",
    "privacyDataProviderConfigurationsDesc": "URL de conexión, tipos de proveedores y configuración de prioridad",
    "privacyDataApiKeysDesc": "cifrado y almacenado localmente para autenticarse con proveedores de IA",
    "privacyDataUsageLogsDesc": "recuentos de solicitudes, uso de tokens, nombres de modelos, marcas de tiempo y tiempos de respuesta",
    "privacyDataApplicationSettingsDesc": "preferencias de tema, estrategia de enrutamiento y configuraciones combinadas",
    "privacySection3Title": "3. Sin telemetría",
    "privacySection3Text": "OmniRoute no recopila telemetría, análisis ni informes de fallos. No se envían datos a nosotros ni a ningún tercero. Sus patrones de uso, llamadas API y configuraciones permanecen completamente privados.",
    "privacySection4Title": "4. Proveedores de IA de terceros",
    "privacySection4Text": "Cuando realiza llamadas API a través de OmniRoute, sus solicitudes se reenvían a los proveedores de IA que haya configurado (por ejemplo: OpenAI, Anthropic, Google). Estos proveedores tienen sus propias políticas de privacidad que rigen cómo manejan sus datos. Por favor revise:",
    "privacyOpenAiPolicy": "Política de privacidad de OpenAI",
    "privacyAnthropicPolicy": "Política de privacidad antrópica",
    "privacyGooglePolicy": "Política de privacidad de Google",
    "privacySection5Title": "5. Sincronización en la nube (opcional)",
    "privacySection5Text": "Si habilita la función opcional de sincronización en la nube, las configuraciones del proveedor y las claves API pueden transmitirse a un punto final en la nube configurado. Esta función está deshabilitada de forma predeterminada y requiere una suscripción explícita.",
    "privacySection6Title": "6. Registro",
    "privacyLoggingIntro": "Los registros de solicitudes se pueden configurar a través de la configuración del panel. Puedes:",
    "privacySection7Title": "7. Tus derechos",
    "privacySection7TextStart": "Dado que todos los datos se almacenan localmente, usted tiene control total. Puedes eliminar tus datos en cualquier momento eliminando el",
    "privacySection7TextEnd": "directorio o utilizando las funciones de copia de seguridad y restauración de la base de datos en el panel.",
    "termsSection1Title": "1. Descripción general",
    "termsSection1Text": "OmniRoute es un enrutador proxy API de IA local que funciona completamente en su máquina. Enruta solicitudes a múltiples proveedores de IA con equilibrio de carga, conmutación por error y seguimiento de uso.",
    "termsSection2Title": "2. Responsabilidades del usuario",
    "termsResponsibilityApiKeys": "Usted es el único responsable de administrar sus propias claves API y credenciales para proveedores de IA externos (OpenAI, Anthropic, Google, etc.).",
    "termsResponsibilityCompliance": "Debe cumplir con los términos de servicio de cada proveedor de IA a cuya API acceda a través de OmniRoute.",
    "termsResponsibilitySecurity": "Usted es responsable de la seguridad de su instalación local de OmniRoute, incluida la configuración de una contraseña y la restricción del acceso a la red.",
    "termsSection3Title": "3. Cómo funciona",
    "termsSection3Text": "OmniRoute actúa como proxy intermediario. Las llamadas API enviadas a OmniRoute se traducen y reenvían a sus proveedores de IA configurados. OmniRoute no modifica el contenido de sus solicitudes o respuestas más allá de la traducción del protocolo necesaria.",
    "termsSection4Title": "4. Manejo de datos",
    "termsDataStoredLocally": "Todos los datos se almacenan localmente en su máquina en una base de datos SQLite.",
    "termsNoTransmission": "OmniRoute no transmite ningún dato a servidores externos a menos que habilite explícitamente las funciones de sincronización en la nube.",
    "termsDataLocationText": "Los registros de uso, las claves API y la configuración se almacenan en",
    "termsSection5Title": "5. Descargo de responsabilidad",
    "termsSection5Text": "OmniRoute se proporciona \"tal cual\" sin garantía de ningún tipo. No somos responsables de los costos incurridos por el uso de API, interrupciones del servicio o pérdida de datos. Mantenga siempre copias de seguridad de su configuración.",
    "termsSection6Title": "6. Código abierto",
    "termsSection6Text": "OmniRoute es un software de código abierto. Usted es libre de inspeccionarlo, modificarlo y distribuirlo según los términos de su licencia."
  },
  "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",
    "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": "Herramientas CLI frente a objetivos de agentes: ¿cuál es la diferencia?",
    "comparisonCliToolsLabel": "Página de herramientas CLI",
    "comparisonCliToolsTitle": "Su IDE envía solicitudes a través de OmniRoute",
    "comparisonCliToolsDesc": "Configure Claude Code, Codex, Cursor y otros IDE para utilizar OmniRoute como su URL base de API. OmniRoute actúa como un proxy y enruta las solicitudes a sus proveedores configurados.",
    "comparisonAgentsLabel": "Esta página (objetivos del agente)",
    "comparisonAgentsTitle": "OmniRoute envía solicitudes a herramientas CLI locales",
    "comparisonAgentsDesc": "OmniRoute puede generar archivos binarios CLI locales (claude, codex, goose) como servidores de ejecución. La herramienta CLI procesa la solicitud utilizando su propia autenticación y devuelve el resultado.",
    "comparisonSummary": "En resumen: Herramientas CLI = configura herramientas para que apunten a OmniRoute. Objetivos del agente = OmniRoute utiliza herramientas como puntos finales.",
    "agentUseCaseHint": "Se puede utilizar como objetivo de ejecución a través del protocolo ACP.",
    "flowDiagramClient": "Aplicación del cliente",
    "flowDiagramClientDesc": "SDK, API o servicio ascendente",
    "flowDiagramOmniRoute": "OmniRuta",
    "flowDiagramOmniRouteDesc": "Recibe la solicitud y selecciona el objetivo.",
    "flowDiagramSpawn": "Proceso de generación",
    "flowDiagramSpawnDesc": "Inicia CLI binario a través de stdio",
    "flowDiagramCli": "Agente CLI",
    "flowDiagramCliDesc": "Procesos con autenticación/modelo propio",
    "fingerprintSettingsHint": "La coincidencia de huellas dactilares CLI (disfrazar solicitudes como herramientas CLI específicas) se puede configurar en",
    "settingsRoutingLink": "Configuración/Enrutamiento",
    "openSettings": "Configuración",
    "copyRawUrlTitle": "Copiar URL sin formato al portapapeles",
    "copied": "¡Copiado!",
    "copyUrl": "Copiar URL",
    "startHere": "Comience aquí",
    "badgeNew": "Nuevo",
    "viewOnGithub": "Ver en GitHub",
    "howToUse": "como usar",
    "browseAllSkillsOnGithub": "Explora todas las habilidades en GitHub",
    "apiSkills": "Habilidades API",
    "cliSkills": "Habilidades CLI",
    "apiSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via REST / HTTP",
    "cliSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via the omniroute terminal binary",
    "howToUseStep1": "__MISSING__:Click <bold>{copyUrl}</bold> 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."
  },
  "cloudAgents": {
    "title": "Agentes de la nube",
    "description": "Gestionar agentes de codificación autónomos (Jules, Devin, Codex Cloud)",
    "loading": "Cargando tareas...",
    "aboutTitle": "Acerca de los agentes en la nube",
    "aboutDescription": "Los agentes de la nube son asistentes remotos de codificación de IA que pueden ejecutar tareas de forma autónoma. Funcionan de manera diferente a los agentes CLI locales: usted interactúa con ellos a través de la API de OmniRoute.",
    "howItWorksTitle": "Cómo funciona:",
    "howItWorksDesc": "Cree una tarea → El agente analiza y propone un plan → Usted aprueba → El agente ejecuta → Resultados devueltos",
    "newTaskTitle": "Crear nueva tarea",
    "newTaskDescription": "Iniciar una nueva tarea con un agente en la nube",
    "selectAgent": "Seleccionar Agente",
    "taskDescription": "Descripción de la tarea",
    "taskDescriptionPlaceholder": "Describe lo que quieres que haga el agente...",
    "startTask": "Iniciar tarea",
    "tasks": "Tareas",
    "taskDetail": "Detalle de la tarea",
    "noTasks": "Aún no hay tareas. Crea uno para comenzar.",
    "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": "Tarea sin título",
    "created": "Creado",
    "conversation": "Conversación",
    "result": "Resultado",
    "error": "error",
    "planReady": "Plan listo para aprobación",
    "approvePlan": "Aprobar plan",
    "rejectPlan": "Rechazar y cancelar",
    "sendMessagePlaceholder": "Envía un mensaje al agente...",
    "cancel": "Cancelar",
    "delete": "Eliminar",
    "selectTaskPrompt": "Seleccione una tarea para ver los detalles",
    "statusPending": "Pendiente",
    "statusRunning": "corriendo",
    "statusWaitingApproval": "Esperando aprobación",
    "statusCompleted": "Completado",
    "statusFailed": "Fallido",
    "statusCancelled": "Cancelado",
    "repositoryName": "Nombre del repositorio",
    "repositoryUrl": "URL del repositorio",
    "branch": "Sucursal"
  },
  "templateNames": {
    "simple-chat": "Simple Chat",
    "streaming": "Streaming",
    "system-prompt": "System Prompt",
    "thinking": "Thinking",
    "tool-calling": "Tool Calling",
    "multi-turn": "Multi-turn",
    "vision": "Visión",
    "schema-coercion": "Coerción de esquema"
  },
  "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",
    "vision": "Plantilla multimodal con entrada de imagen.",
    "schema-coercion": "Aplicación de esquema JSON/salida estructurada"
  },
  "templatePayloads": {
    "simpleChat": {
      "system": "Eres un útil asistente de IA.",
      "userGreeting": "¡Hola! ¿Cómo puedo ayudarte hoy?"
    },
    "streaming": {
      "prompt": "Escribe una historia sobre"
    },
    "systemPrompt": {
      "question": "¿Cuál es el significado de la vida?",
      "systemInstruction": "Proporcione una respuesta reflexiva y filosófica."
    },
    "thinking": {
      "question": "Explicar la computación cuántica"
    },
    "toolCalling": {
      "cityNameDescription": "El nombre de la ciudad para obtener el clima.",
      "toolDescription": "Obtener el clima actual para una ubicación",
      "userWeather": "¿Cuál es el clima en Tokio?"
    },
    "multiTurn": {
      "system": "Eres un asistente útil.",
      "assistantExample": "Estaré encantado de ayudarte con eso.",
      "userInitial": "necesito ayuda con",
      "userFollowUp": "¿Puedes dar más detalles sobre eso?"
    }
  },
  "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",
    "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",
    "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.",
    "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",
    "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": "Repetición de razonamiento",
    "reasoningCacheDesc": "Preserva el pensamiento de modelo para flujos de llamada de herramientas de múltiples vueltas",
    "reasoningEntries": "Entradas activas",
    "reasoningReplayRate": "Tasa de reproducción",
    "reasoningReplays": "Repeticiones totales",
    "reasoningCharsCached": "Personajes almacenados en caché",
    "reasoningMisses": "Errores de caché",
    "reasoningByProvider": "Por proveedor",
    "reasoningByModel": "Por modelo",
    "reasoningRecentEntries": "Entradas recientes",
    "reasoningToolCallId": "ID de llamada de herramienta",
    "reasoningChars": "Personajes",
    "reasoningAge": "edad",
    "reasoningView": "Ver",
    "reasoningDetail": "Contenido de razonamiento",
    "reasoningBehavior": "Comportamiento",
    "reasoningBehaviorCapture": "Captura contenido_razonamiento de las respuestas en tiempo real",
    "reasoningBehaviorReplay": "Se reinyecta en el siguiente turno cuando el cliente lo omite.",
    "reasoningBehaviorFallback": "Memoria primero con respaldo de SQLite para recuperación de fallas",
    "reasoningBehaviorTtl": "TTL: 2 horas | Entradas máximas: 2000 (memoria)",
    "reasoningBehaviorModels": "Compatible: DeepSeek, Kimi, Qwen-Thinking, GLM",
    "reasoningClearAll": "Borrar caché de razonamiento",
    "reasoningClearSuccess": "Se borraron {count} entradas de caché de razonamiento",
    "reasoningClearError": "No se pudo borrar el caché de razonamiento",
    "reasoningNoData": "Aún no hay entradas de razonamiento almacenadas en caché. Las entradas aparecen cuando los modelos mentales utilizan la llamada de herramientas.",
    "cachePerformanceRetry": "Reintentar",
    "cachePerformanceHitRate": "Tasa de aciertos",
    "cachePerformanceAvgLatency": "Latencia promedio (ms)",
    "cachePerformanceP95Latency": "p95 Latencia (ms)",
    "retry": "Reintentar",
    "reasoningAvgChars": "Caracteres promedio",
    "tableShare": "__MISSING__:Share",
    "justNow": "__MISSING__:just now",
    "minutesAgo": "__MISSING__:{minutes}m ago",
    "hoursAgo": "__MISSING__:{hours}h ago",
    "daysAgo": "__MISSING__:{days}d ago",
    "entries": "Entries"
  },
  "proxyConfigModal": {
    "levelGlobal": "Mundial",
    "levelProvider": "Proveedor",
    "levelCombo": "combinado",
    "levelKey": "clave",
    "levelDirect": "Directo (sin proxy)",
    "titleGlobal": "Configuración de proxy global",
    "titleLevel": "{level} Proxy — {label}",
    "loading": "Cargando configuración de proxy...",
    "inheritingFrom": "Heredando de",
    "source": "Fuente",
    "savedProxy": "Proxy guardado",
    "custom": "personalizado",
    "selectSavedProxyPlaceholder": "Seleccione el proxy guardado...",
    "proxyType": "Tipo de proxy",
    "host": "Anfitrión",
    "hostPlaceholder": "1.2.3.4 o proxy.ejemplo.com",
    "port": "Puerto",
    "authOptional": "Autenticación (opcional)",
    "username": "Nombre de usuario",
    "usernamePlaceholder": "Nombre de usuario",
    "password": "Contraseña",
    "passwordPlaceholder": "Contraseña",
    "connected": "Conectado",
    "ip": "IP:",
    "connectionFailed": "La conexión falló",
    "testConnection": "Conexión de prueba",
    "clear": "Borrar",
    "cancel": "Cancelar",
    "save": "Guardar",
    "errorSelectSavedProxy": "Primero seleccione un proxy guardado.",
    "errorSelectProxyFirst": "Primero seleccione un proxy.",
    "errorProxyNotFound": "No se encontró el proxy seleccionado.",
    "errorClearSavedProxy": "No se pudo borrar el proxy guardado",
    "errorSaveProxy": "No se pudo guardar la configuración del proxy",
    "errorClearProxy": "No se pudo borrar la configuración del proxy",
    "errorSocks5Hidden": "SOCKS5 está configurado pero oculto porque NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=false."
  },
  "oauthModal": {
    "title": "Conectar {providerName}",
    "waiting": "Esperando autorización",
    "completeAuthInPopup": "Autorización completa en ventana emergente.",
    "popupClosedHint": "Si la ventana emergente se cerró sin redirigir (por ejemplo, Qoder), este cuadro de diálogo cambiará automáticamente al modo de entrada manual de URL.",
    "popupBlocked": "¿Ventana emergente bloqueada? Ingrese la URL manualmente",
    "deviceCodeVisitUrl": "Visite la siguiente URL e ingrese el código:",
    "deviceCodeVerificationUrl": "URL de verificación",
    "deviceCodeYourCode": "tu codigo",
    "deviceCodeWaiting": "Esperando autorización...",
    "googleOAuthWarning": "Acceso remoto + Google OAuth: las credenciales predeterminadas solo aceptan redireccionamientos a <code>localhost</code>. Después de autorizar, su navegador intentará abrir <code>localhost</code>; copie esa URL completa y péguela a continuación. Para un uso totalmente remoto sin este paso manual, <a>configure sus propias credenciales de OAuth</a>.",
    "remoteAccessInfo": "Acceso remoto: dado que accede a OmniRoute de forma remota, después de la autorización verá una página de error (localhost no encontrado). Esto es normal: simplemente copie la URL completa de la barra de direcciones de su navegador y péguela a continuación.",
    "step1OpenUrl": "Paso 1: abre esta URL en tu navegador",
    "copy": "Copiar",
    "step2PasteCallback": "Paso 2: pegue aquí la URL de devolución de llamada o el código de autorización",
    "step2Hint": "Después de la autorización, pegue la URL de devolución de llamada completa. Para Claude Code y Cline, también puede pegar el código de autenticación directamente, p. <code>código#estado</code>.",
    "connect": "Conectar",
    "cancel": "Cancelar",
    "success": "¡Conexión exitosa!",
    "successMessage": "Su cuenta {providerName} ha sido conectada.",
    "done": "hecho",
    "error": "La conexión falló",
    "tryAgain": "Inténtalo de nuevo"
  },
  "cursorAuthModal": {
    "title": "Conectar cursor IDE",
    "autoDetecting": "Tokens de detección automática...",
    "readingFromCursor": "Lectura desde Cursor IDE o cursor-agent",
    "tokensAutoDetected": "¡Los tokens se detectaron automáticamente con éxito desde Cursor IDE!",
    "cursorNotDetected": "IDE del cursor no detectado. Pegue manualmente su token.",
    "accessToken": "Token de acceso",
    "required": "*",
    "accessTokenPlaceholder": "El token de acceso se completará automáticamente...",
    "machineId": "ID de máquina",
    "optional": "(opcional)",
    "machineIdPlaceholder": "La identificación de la máquina se completará automáticamente...",
    "importing": "Importando...",
    "importToken": "Importar token",
    "cancel": "Cancelar",
    "errorAutoDetect": "No se pueden detectar tokens automáticamente",
    "errorAutoDetectFailed": "Error de detección automática de tokens",
    "errorEnterToken": "Por favor ingrese el token de acceso",
    "errorImportFailed": "Importación fallida"
  },
  "pricingModal": {
    "title": "Configuración de precios",
    "loading": "Cargando datos de precios...",
    "pricingRatesFormat": "Formato de tarifas de precios",
    "ratesDescription": "Todas las tarifas están en <strong>dólares por millón de tokens</strong> ($/1 millón de tokens). Ejemplo: la tasa de entrada de 2,50 significa 2,50 dólares por cada 1.000.000 de tokens de entrada.",
    "model": "modelo",
    "input": "Entrada",
    "output": "Salida",
    "cached": "En caché",
    "reasoning": "Razonamiento",
    "cacheCreation": "Creación de caché",
    "noPricingData": "No hay datos de precios disponibles",
    "resetToDefaults": "Restablecer los valores predeterminados",
    "cancel": "Cancelar",
    "saving": "Guardando...",
    "saveChanges": "Guardar cambios",
    "resetConfirm": "¿Restablecer todos los precios a los valores predeterminados? Esto no se puede deshacer.",
    "errorSaveFailed": "No se pudo guardar el precio",
    "errorResetFailed": "No se pudo restablecer el precio"
  },
  "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",
    "test": "Test",
    "edit": "Edit",
    "delete": "Delete",
    "modalCreateTitle": "Modal Create Title",
    "modalEditTitle": "Modal Edit Title",
    "labelName": "Label Name",
    "labelType": "Tipo",
    "labelHost": "Anfitrión",
    "labelPort": "Puerto",
    "labelUsername": "Nombre de usuario",
    "labelPassword": "Contraseña",
    "labelRegion": "Región",
    "labelStatus": "Estado",
    "labelNotes": "Notas",
    "usernamePlaceholderEdit": "Déjelo en blanco para mantener el nombre de usuario actual",
    "passwordPlaceholderEdit": "Déjelo en blanco para mantener la contraseña actual",
    "statusActive": "Activo",
    "statusInactive": "Inactivo",
    "cancel": "Cancelar",
    "save": "Guardar",
    "bulkModalTitle": "Asignación de proxy masiva",
    "bulkLabelScope": "Alcance",
    "bulkLabelProxy": "apoderado",
    "bulkClearAssignment": "(Borrar tarea)",
    "bulkLabelScopeIds": "ID de alcance (separados por comas o nueva línea)",
    "bulkScopeIdsPlaceholder": "proveedor-openai,proveedor-antrópico",
    "bulkApply": "Aplicar",
    "labelScope": "__MISSING__:Scope",
    "labelProxy": "__MISSING__:Proxy",
    "scopeGlobal": "__MISSING__:global",
    "scopeProvider": "__MISSING__:provider",
    "scopeAccount": "__MISSING__:account",
    "scopeCombo": "__MISSING__:combo",
    "bulkImportErrorMissingName": "Falta NOMBRE",
    "bulkImportErrorMissingHost": "Anfitrión faltante",
    "bulkImportErrorInvalidPort": "PUERTO no válido (debe ser 1-65535)",
    "bulkImportErrorInvalidType": "TIPO no válido (use http, https o calcetines5)",
    "bulkImportErrorInvalidStatus": "ESTADO no válido (usar activo o inactivo)",
    "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",
    "success": "✓",
    "failure": "✗",
    "failed": "Failed",
    "successRate": "{rate}% de éxito",
    "avgLatency": "{latency}ms promedio",
    "assignmentsCount": "{count} tareas",
    "noData": "No Data",
    "testSuccess": "✓ {ip}",
    "testLatency": "{latency}ms",
    "testFailure": "✗ {error}",
    "bulkImport": "Importación masiva",
    "bulkImportTitle": "Proxies de importación masiva",
    "bulkImportDescription": "Pegue perfiles de proxy utilizando el formato delimitado por barras verticales. Un proxy por línea. Se actualizarán los servidores proxy existentes (mismo host + puerto).",
    "bulkImportParse": "analizar",
    "bulkImportImport": "Importar proxies {count}",
    "bulkImportImporting": "Importando...",
    "bulkImportParsed": "{count} proxies analizados",
    "bulkImportSkipped": "{count} líneas omitidas",
    "bulkImportParseErrors": "{count} errores",
    "bulkImportNoValidEntries": "No se encontraron entradas válidas. Comprueba el formato y vuelve a intentarlo.",
    "bulkImportSuccess": "Importación completa: {created} creado, {updated} actualizado, {failed} fallido",
    "bulkImportErrorLine": "Línea {line}: {reason}",
    "bulkImportMaxExceeded": "Máximo 100 proxies por importación",
    "bulkImportPreview": "Vista previa",
    "clearAssignment": "(asignación clara)",
    "bulkProxyAssignment": "Asignación de proxy masiva"
  },
  "playground": {
    "title": "Title",
    "description": "Description",
    "endpoint": "Endpoint",
    "provider": "Provider",
    "model": "Model",
    "accountKey": "Account Key",
    "autoAccounts": "Automático ({count} cuentas)",
    "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",
    "imagesGenerated": "{count} imágenes generadas",
    "generatedImage": "Imagen generada {index}",
    "save": "Save",
    "endpointOptions": {
      "chat": "Chat",
      "responses": "Responses",
      "images": "Images",
      "embeddings": "Embeddings",
      "speech": "Speech",
      "transcription": "Transcription",
      "video": "Video",
      "music": "Music",
      "rerank": "Rerank",
      "search": "Search"
    },
    "conversationalChat": "Chat conversacional",
    "clearChat": "Borrar chat",
    "typeMessagePlaceholder": "Escriba un mensaje... (Mayús+Entrar para una nueva línea)",
    "tabChat": "Chat",
    "tabCompare": "Compare",
    "tabApi": "API",
    "tabBuild": "Build",
    "configPane": "Config",
    "systemPrompt": "System prompt",
    "systemPromptPlaceholder": "You are a helpful assistant.",
    "modelPlaceholder": "e.g. openai/gpt-4o",
    "endpointLabel": "Endpoint",
    "parametersLabel": "Parameters",
    "collapseConfig": "Collapse config pane",
    "expandConfig": "Expand config pane",
    "temperature": "Temperature",
    "maxTokens": "Max 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",
    "noStateToExport": "No playground state available to export.",
    "copyCode": "Copy",
    "copiedCode": "Copied!",
    "addModel": "+ Add model",
    "runAll": "Run all",
    "cancelAll": "Cancel all",
    "maxColumnsReached": "Maximum {max} columns",
    "modelPlaceholderCompare": "Model (Cmd+K)…",
    "ttft": "TTFT",
    "tps": "TPS",
    "metricsDisclaimer": "client-side estimate",
    "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…"
  },
  "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"
  },
  "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",
    "combo": "Combo",
    "keys": "Keys",
    "shown": "Shown",
    "sortNewest": "Newest",
    "sortOldest": "Oldest",
    "sortTokensDesc": "Tokens ↓",
    "sortTokensAsc": "Tokens ↑",
    "sortDurationDesc": "Duration ↓",
    "sortDurationAsc": "Duration ↑",
    "sortStatusDesc": "Status ↓",
    "sortStatusAsc": "Status ↑",
    "sortModelAsc": "Model A-Z",
    "sortModelDesc": "Model Z-A",
    "sortLogs": "Sort logs",
    "refresh": "Refresh",
    "columnsLabel": "Columns",
    "cacheSem": "SEM",
    "cacheUp": "UP",
    "semantic": "Semantic",
    "upstream": "Upstream",
    "semanticCacheHit": "Semantic cache hit (served by OmniRoute)",
    "upstreamResponse": "Upstream provider response",
    "noApiKey": "No API key",
    "requestedRoutedTitle": "Requested {requested}, routed as {routed}",
    "statusFilters": {
      "all": "All",
      "error": "Errors",
      "success": "Success",
      "combo": "Combo"
    },
    "columns": {
      "status": "Status",
      "cacheSource": "Cache Source",
      "model": "Model",
      "requested": "Requested",
      "provider": "Provider",
      "protocol": "Request Protocol",
      "account": "Account",
      "apiKey": "API Key",
      "combo": "Combo",
      "tokens": "Tokens",
      "compressed": "Compresión",
      "tps": "TPS",
      "duration": "Duration",
      "time": "Time"
    },
    "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}."
  },
  "proxyLogger": {
    "filterAll": "All",
    "filterErrors": "Errors",
    "filterSuccess": "Success",
    "filterTimeout": "Timeout",
    "colStatus": "Status",
    "colProxy": "Proxy",
    "colTls": "TLS",
    "colType": "Type",
    "colLevel": "Level",
    "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",
    "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"
  },
  "endpointOptions": {
    "speech": "Speech",
    "search": "Search",
    "images": "Images",
    "chat": "Chat",
    "music": "Music",
    "responses": "Responses",
    "rerank": "Rerank",
    "video": "Video",
    "embeddings": "Embeddings",
    "transcription": "Transcription"
  },
  "toolDescriptions": {
    "cline": "Cline",
    "openclaw": "Openclaw",
    "droid": "Droid",
    "codex": "Codex",
    "claude": "Claude",
    "kilo": "Kilo"
  },
  "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",
    "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"
  },
  "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",
    "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)",
    "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: vista previa de la interfaz de usuario.",
    "betaConfigSavedPrefix": "La configuración se guarda en",
    "betaConfigSavedSuffix": "(aún no persiste en el servidor). La aplicación del límite por solicitud aún no está integrada en el proceso de proxy. Esta pantalla le permite diseñar y visualizar la división de cuota; La aplicación real se producirá en una iteración futura con persistencia de base de datos e interceptación de llamadas ascendentes.",
    "policyLabel": "Política:",
    "resetIn": "restablecer en",
    "quotaTotal": "total"
  },
  "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",
    "status": "Status",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "hooks": "Hooks"
  }
}
