omniroute 3.3.6 → 3.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/build-manifest.json +2 -2
  3. package/app/.next/prerender-manifest.json +3 -3
  4. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/_global-error.html +2 -2
  42. package/app/.next/server/app/_global-error.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  46. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  47. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  48. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
  50. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
  63. package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
  64. package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
  65. package/app/.next/server/chunks/[root-of-the-server]__950558b8._.js +1 -1
  66. package/app/.next/server/chunks/[root-of-the-server]__9698d25e._.js +1 -1
  67. package/app/.next/server/chunks/[root-of-the-server]__a32d3818._.js +1 -1
  68. package/app/.next/server/chunks/[root-of-the-server]__bc251fbe._.js +1 -1
  69. package/app/.next/server/chunks/[root-of-the-server]__d5a064d5._.js +1 -1
  70. package/app/.next/server/chunks/_05c48915._.js +1 -1
  71. package/app/.next/server/chunks/_06515a8a._.js +1 -1
  72. package/app/.next/server/chunks/_2115d8de._.js +1 -1
  73. package/app/.next/server/chunks/_3ac953eb._.js +1 -1
  74. package/app/.next/server/chunks/_4b8fd853._.js +1 -1
  75. package/app/.next/server/chunks/_68683848._.js +1 -1
  76. package/app/.next/server/chunks/_ee9b677b._.js +1 -1
  77. package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
  78. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  79. package/app/.next/server/chunks/ssr/src_i18n_messages_ar_json_e1d5145b._.js +1 -1
  80. package/app/.next/server/chunks/ssr/src_i18n_messages_bg_json_34495a0f._.js +1 -1
  81. package/app/.next/server/chunks/ssr/src_i18n_messages_cs_json_db6f9ebc._.js +1 -1
  82. package/app/.next/server/chunks/ssr/src_i18n_messages_da_json_7500ed02._.js +1 -1
  83. package/app/.next/server/chunks/ssr/src_i18n_messages_de_json_b2a40318._.js +1 -1
  84. package/app/.next/server/chunks/ssr/src_i18n_messages_es_json_82775c4a._.js +1 -1
  85. package/app/.next/server/chunks/ssr/src_i18n_messages_fi_json_dcc6745e._.js +1 -1
  86. package/app/.next/server/chunks/ssr/src_i18n_messages_fr_json_fe904570._.js +1 -1
  87. package/app/.next/server/chunks/ssr/src_i18n_messages_he_json_3e3c1e1b._.js +1 -1
  88. package/app/.next/server/chunks/ssr/src_i18n_messages_hi_json_83a0b9e5._.js +1 -1
  89. package/app/.next/server/chunks/ssr/src_i18n_messages_hu_json_651e00d3._.js +1 -1
  90. package/app/.next/server/chunks/ssr/src_i18n_messages_id_json_725d4a34._.js +1 -1
  91. package/app/.next/server/chunks/ssr/src_i18n_messages_in_json_2d7cd177._.js +1 -1
  92. package/app/.next/server/chunks/ssr/src_i18n_messages_it_json_e23882ae._.js +1 -1
  93. package/app/.next/server/chunks/ssr/src_i18n_messages_ja_json_fc6af4d8._.js +1 -1
  94. package/app/.next/server/chunks/ssr/src_i18n_messages_ko_json_0ffdbdc6._.js +1 -1
  95. package/app/.next/server/chunks/ssr/src_i18n_messages_ms_json_610df819._.js +1 -1
  96. package/app/.next/server/chunks/ssr/src_i18n_messages_nl_json_55ad1507._.js +1 -1
  97. package/app/.next/server/chunks/ssr/src_i18n_messages_no_json_9f484a8c._.js +1 -1
  98. package/app/.next/server/chunks/ssr/src_i18n_messages_phi_json_871ece45._.js +1 -1
  99. package/app/.next/server/chunks/ssr/src_i18n_messages_pl_json_79d0be4b._.js +1 -1
  100. package/app/.next/server/chunks/ssr/src_i18n_messages_pt-BR_json_e7b9e8db._.js +1 -1
  101. package/app/.next/server/chunks/ssr/src_i18n_messages_pt_json_2fc13a82._.js +1 -1
  102. package/app/.next/server/chunks/ssr/src_i18n_messages_ro_json_d1a5f5ee._.js +1 -1
  103. package/app/.next/server/chunks/ssr/src_i18n_messages_ru_json_9d7a9dfe._.js +1 -1
  104. package/app/.next/server/chunks/ssr/src_i18n_messages_sk_json_1c5bff4a._.js +1 -1
  105. package/app/.next/server/chunks/ssr/src_i18n_messages_sv_json_e8ae9f28._.js +1 -1
  106. package/app/.next/server/chunks/ssr/src_i18n_messages_th_json_6ed546bd._.js +1 -1
  107. package/app/.next/server/chunks/ssr/src_i18n_messages_tr_json_c8d78b01._.js +1 -1
  108. package/app/.next/server/chunks/ssr/src_i18n_messages_uk-UA_json_c72cdf08._.js +1 -1
  109. package/app/.next/server/chunks/ssr/src_i18n_messages_vi_json_03ec9dfd._.js +1 -1
  110. package/app/.next/server/pages/500.html +2 -2
  111. package/app/.next/server/server-reference-manifest.js +1 -1
  112. package/app/.next/server/server-reference-manifest.json +1 -1
  113. package/app/.next/static/chunks/{b9999bd9d2b99bf6.js → d3c3a9266158d9b0.js} +1 -1
  114. package/app/CHANGELOG.md +19 -1
  115. package/app/docs/openapi.yaml +1 -1
  116. package/app/open-sse/handlers/responseTranslator.ts +1 -1
  117. package/app/open-sse/package.json +1 -1
  118. package/app/package-lock.json +3 -3
  119. package/app/package.json +1 -1
  120. package/app/src/i18n/messages/ar.json +2 -1
  121. package/app/src/i18n/messages/bg.json +2 -1
  122. package/app/src/i18n/messages/cs.json +2 -1
  123. package/app/src/i18n/messages/da.json +2 -1
  124. package/app/src/i18n/messages/de.json +2 -1
  125. package/app/src/i18n/messages/es.json +2 -1
  126. package/app/src/i18n/messages/fi.json +2 -1
  127. package/app/src/i18n/messages/fr.json +2 -1
  128. package/app/src/i18n/messages/he.json +2 -1
  129. package/app/src/i18n/messages/hi.json +2 -1
  130. package/app/src/i18n/messages/hu.json +2 -1
  131. package/app/src/i18n/messages/id.json +2 -1
  132. package/app/src/i18n/messages/in.json +2 -1
  133. package/app/src/i18n/messages/it.json +2 -1
  134. package/app/src/i18n/messages/ja.json +2 -1
  135. package/app/src/i18n/messages/ko.json +2 -1
  136. package/app/src/i18n/messages/ms.json +2 -1
  137. package/app/src/i18n/messages/nl.json +2 -1
  138. package/app/src/i18n/messages/no.json +2 -1
  139. package/app/src/i18n/messages/phi.json +2 -1
  140. package/app/src/i18n/messages/pl.json +2 -1
  141. package/app/src/i18n/messages/pt-BR.json +2 -1
  142. package/app/src/i18n/messages/pt.json +2 -1
  143. package/app/src/i18n/messages/ro.json +2 -1
  144. package/app/src/i18n/messages/ru.json +2 -1
  145. package/app/src/i18n/messages/sk.json +2 -1
  146. package/app/src/i18n/messages/sv.json +2 -1
  147. package/app/src/i18n/messages/th.json +2 -1
  148. package/app/src/i18n/messages/tr.json +2 -1
  149. package/app/src/i18n/messages/uk-UA.json +2 -1
  150. package/app/src/i18n/messages/vi.json +2 -1
  151. package/app/src/shared/services/opencodeConfig.ts +14 -13
  152. package/app/tests/unit/t40-opencode-cli-tools-integration.test.mjs +5 -5
  153. package/package.json +1 -1
  154. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_buildManifest.js +0 -0
  155. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_clientMiddlewareManifest.json +0 -0
  156. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[221152,a=>{a.v(JSON.parse('{"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","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":"Usado por última vez","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","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"},"sidebar":{"home":"Inicio","dashboard":"Panel de control","providers":"Proveedores","combos":"Combos","usage":"Uso","analytics":"Analítica","costs":"Costos","health":"Salud","limits":"Límites y cuotas","cliTools":"Herramientas CLI","media":"Multimedia","settings":"Configuración","translator":"Traductor","docs":"Documentación","issues":"Problemas","apiManager":"Gestor de API","logs":"Registros","auditLog":"Registro de auditoría","shutdown":"Apagar","restart":"Reiniciar","shutdownConfirm":"¿Cerrar OmniRoute?","restartConfirm":"¿Reiniciar OmniRoute?","version":"v{version}","debug":"Depurar","system":"Sistema","help":"Ayuda","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","endpoints":"Endpoints","playground":"Playground","agents":"Agentes","cliToolsShort":"Herramientas","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"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","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","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"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.","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..."},"analytics":{"title":"Analítica","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"},"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","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","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","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Último: {date}","editPermissions":"Editar permisos","deleteKey":"Eliminar clave","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","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","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"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."},"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.","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","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"},"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"}},"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."}}},"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.","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.","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."}},"combos":{"title":"combos","description":"Cree combinaciones de modelos con enrutamiento ponderado y soporte alternativo","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","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","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)","advancedHint":"Déjelo vacío para usar los valores predeterminados globales. Estos anulan la configuración por proveedor.","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."}},"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."},"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.","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.","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."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Costos","budget":"Presupuesto","totalCost":"Costo total","breakdown":"Desglose de costos","noData":"Sin datos de coste","byModel":"Por modelo","byProvider":"Por proveedor"},"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","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","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","categoryUtility":"Utilidades y Gestión","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","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","categorySearch":"Search & Discovery","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."},"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","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"},"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","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"},"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","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}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Configurado en el tablero","configuredProvidersHint":"Proveedores con credenciales guardadas en /dashboard/providers, independientemente del estado de ejecución.","activeProvidersHint":"Proveedores configurados actualmente habilitados para enrutar solicitudes.","monitoredProvidersHint":"Proveedores actualmente rastreados por monitores de estado de interruptores."},"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"},"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","apiKeyMgmt":"Gestión de claves API","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"},"providers":{"title":"Proveedores","addProvider":"Agregar proveedor","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","noConnections":"Sin conexiones","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","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ó","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?","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","chatCompletions":"Finalizaciones de chat","importingModels":"Importando...","importFromModels":"Importar desde /modelos","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...","importingModelsTitle":"Importar modelos","copyModel":"Copiar 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","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","noConnectionsYet":"Aún no hay conexiones","addFirstConnectionHint":"Agregue su primera conexión para comenzar","addConnection":"Agregar conexión","availableModels":"Modelos disponibles","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.","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.","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.)","providerTestTimeout":"Provider test timed out — too many connections to test at once","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)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","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","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","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.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","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","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"},"settings":{"title":"Configuración","general":"generales","security":"Seguridad","appearance":"Apariencia","routing":"Enrutamiento","cache":"caché","resilience":"Resiliencia","systemPrompt":"Aviso del sistema","thinkingBudget":"Pensando en el presupuesto","proxy":"apoderado","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","systemTheme":"Tema del sistema","enableCache":"Habilitar caché","cacheTTL":"TTL de caché","maxCacheSize":"Tamaño máximo de caché","clearCache":"Borrar caché","cacheHits":"Visitas de caché","cacheMisses":"Errores de caché","hitRate":"Tasa de aciertos","cacheEntries":"Entradas de caché","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","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","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","promptCache":"Caché de aviso","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","systemPromptDesc":"Inyectado en todas las solicitudes a nivel de proxy","saved":"Guardado","systemPromptPlaceholder":"Ingrese el mensaje del sistema para inyectar en todas las solicitudes...","systemPromptHint":"Este mensaje se antepone al mensaje del sistema de cada solicitud. Úselo para instrucciones globales, pautas de seguridad o reglas de formato de respuesta.","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.","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}","routingStrategy":"Estrategia de enrutamiento","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","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":"Patrones comodín para reasignar nombres de modelos • Utilice * y ?","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","globalComboConfig":"Configuración combinada global","defaultStrategy":"Estrategia predeterminada","defaultStrategyDesc":"Aplicado a nuevos combos sin estrategia explícita.","comboStrategyAria":"estrategia combinada","priority":"Prioridad","weighted":"ponderado","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)","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.","justNow":"justo ahora","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","providers":"Proveedores","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","saving":"Guardando...","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","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}","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.","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."},"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).","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"},"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"},"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."}},"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)","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."},"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.","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","runningProgress":"Ejecutando {current}/{total}...","passRate":"tasa de aprobación","summaryBreakdown":"{passed} aprobado · {failed} fallido · {total} total","passedIconLabel":"✅ Aprobado","failedIconLabel":"❌ Fallido","detailsContains":"Contiene: \\"{term}\\"","detailsRegex":"Expresión regular: {pattern}","detailsExpected":"Se esperaba: \\"{expected}\\"","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":"Usado por última vez","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","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","tierUnknown":"Desconocido"},"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: 123456 (unless INITIAL_PASSWORD was set)","waitingForAuthorization":"Waiting for authorization...","waitingForGoogleAuthorization":"Waiting for Google authorization...","waitingForOpenAIAuthorization":"Waiting for OpenAI authorization...","waitingForAntigravityAuthorization":"Waiting for Antigravity authorization...","waitingForIFlowAuthorization":"Waiting for iFlow authorization...","exchangingCodeForTokens":"Exchanging code for tokens...","Authorization":"Autorización","Content-Disposition":"Disposición de contenido"},"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","features":"Características","supportedProviders":"Proveedores compatibles","supportedProvidersToc":"Proveedores","commonUseCases":"Casos de uso comunes","clientCompatibility":"Compatibilidad del cliente","protocolsToc":"Protocolos","apiReference":"Referencia de API","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","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).","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).","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.","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.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","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.","endpointSpeechNote":"Generación de texto a voz (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Generación de embeddings de texto (OpenAI, Cohere, Voyage)."},"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."},"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"},"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."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"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","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","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"},"templateNames":{"simple-chat":"Simple Chat","streaming":"Streaming","system-prompt":"System Prompt","thinking":"Thinking","tool-calling":"Tool Calling","multi-turn":"Multi-turn"},"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"},"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","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","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.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","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}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
1
+ module.exports=[221152,a=>{a.v(JSON.parse('{"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","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":"Usado por última vez","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","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"},"sidebar":{"home":"Inicio","dashboard":"Panel de control","providers":"Proveedores","combos":"Combos","usage":"Uso","analytics":"Analítica","costs":"Costos","health":"Salud","limits":"Límites y cuotas","cliTools":"Herramientas CLI","media":"Multimedia","settings":"Configuración","translator":"Traductor","docs":"Documentación","issues":"Problemas","apiManager":"Gestor de API","logs":"Registros","auditLog":"Registro de auditoría","shutdown":"Apagar","restart":"Reiniciar","shutdownConfirm":"¿Cerrar OmniRoute?","restartConfirm":"¿Reiniciar OmniRoute?","version":"v{version}","debug":"Depurar","system":"Sistema","help":"Ayuda","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","endpoints":"Endpoints","playground":"Playground","agents":"Agentes","cliToolsShort":"Herramientas","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"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","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","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"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.","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..."},"analytics":{"title":"Analítica","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"},"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","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","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","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Último: {date}","editPermissions":"Editar permisos","deleteKey":"Eliminar clave","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","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","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"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."},"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.","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","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"},"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"}},"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."}}},"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.","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.","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."}},"combos":{"title":"combos","description":"Cree combinaciones de modelos con enrutamiento ponderado y soporte alternativo","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","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","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)","advancedHint":"Déjelo vacío para usar los valores predeterminados globales. Estos anulan la configuración por proveedor.","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."}},"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."},"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.","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.","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."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Costos","budget":"Presupuesto","totalCost":"Costo total","breakdown":"Desglose de costos","noData":"Sin datos de coste","byModel":"Por modelo","byProvider":"Por proveedor"},"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","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","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","categoryUtility":"Utilidades y Gestión","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","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","categorySearch":"Search & Discovery","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.","cloudflaredUrlNotice":"Crea un Quick Tunnel temporal de Cloudflare. La URL cambia después de cada reinicio."},"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","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"},"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","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"},"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","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}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Configurado en el tablero","configuredProvidersHint":"Proveedores con credenciales guardadas en /dashboard/providers, independientemente del estado de ejecución.","activeProvidersHint":"Proveedores configurados actualmente habilitados para enrutar solicitudes.","monitoredProvidersHint":"Proveedores actualmente rastreados por monitores de estado de interruptores."},"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"},"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","apiKeyMgmt":"Gestión de claves API","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"},"providers":{"title":"Proveedores","addProvider":"Agregar proveedor","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","noConnections":"Sin conexiones","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","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ó","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?","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","chatCompletions":"Finalizaciones de chat","importingModels":"Importando...","importFromModels":"Importar desde /modelos","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...","importingModelsTitle":"Importar modelos","copyModel":"Copiar 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","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","noConnectionsYet":"Aún no hay conexiones","addFirstConnectionHint":"Agregue su primera conexión para comenzar","addConnection":"Agregar conexión","availableModels":"Modelos disponibles","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.","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.","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.)","providerTestTimeout":"Provider test timed out — too many connections to test at once","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)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","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","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","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.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","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","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"},"settings":{"title":"Configuración","general":"generales","security":"Seguridad","appearance":"Apariencia","routing":"Enrutamiento","cache":"caché","resilience":"Resiliencia","systemPrompt":"Aviso del sistema","thinkingBudget":"Pensando en el presupuesto","proxy":"apoderado","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","systemTheme":"Tema del sistema","enableCache":"Habilitar caché","cacheTTL":"TTL de caché","maxCacheSize":"Tamaño máximo de caché","clearCache":"Borrar caché","cacheHits":"Visitas de caché","cacheMisses":"Errores de caché","hitRate":"Tasa de aciertos","cacheEntries":"Entradas de caché","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","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","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","promptCache":"Caché de aviso","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","systemPromptDesc":"Inyectado en todas las solicitudes a nivel de proxy","saved":"Guardado","systemPromptPlaceholder":"Ingrese el mensaje del sistema para inyectar en todas las solicitudes...","systemPromptHint":"Este mensaje se antepone al mensaje del sistema de cada solicitud. Úselo para instrucciones globales, pautas de seguridad o reglas de formato de respuesta.","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.","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}","routingStrategy":"Estrategia de enrutamiento","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","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":"Patrones comodín para reasignar nombres de modelos • Utilice * y ?","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","globalComboConfig":"Configuración combinada global","defaultStrategy":"Estrategia predeterminada","defaultStrategyDesc":"Aplicado a nuevos combos sin estrategia explícita.","comboStrategyAria":"estrategia combinada","priority":"Prioridad","weighted":"ponderado","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)","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.","justNow":"justo ahora","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","providers":"Proveedores","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","saving":"Guardando...","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","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}","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.","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."},"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).","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"},"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"},"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."}},"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)","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."},"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.","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","runningProgress":"Ejecutando {current}/{total}...","passRate":"tasa de aprobación","summaryBreakdown":"{passed} aprobado · {failed} fallido · {total} total","passedIconLabel":"✅ Aprobado","failedIconLabel":"❌ Fallido","detailsContains":"Contiene: \\"{term}\\"","detailsRegex":"Expresión regular: {pattern}","detailsExpected":"Se esperaba: \\"{expected}\\"","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":"Usado por última vez","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","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","tierUnknown":"Desconocido"},"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: 123456 (unless INITIAL_PASSWORD was set)","waitingForAuthorization":"Waiting for authorization...","waitingForGoogleAuthorization":"Waiting for Google authorization...","waitingForOpenAIAuthorization":"Waiting for OpenAI authorization...","waitingForAntigravityAuthorization":"Waiting for Antigravity authorization...","waitingForIFlowAuthorization":"Waiting for iFlow authorization...","exchangingCodeForTokens":"Exchanging code for tokens...","Authorization":"Autorización","Content-Disposition":"Disposición de contenido"},"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","features":"Características","supportedProviders":"Proveedores compatibles","supportedProvidersToc":"Proveedores","commonUseCases":"Casos de uso comunes","clientCompatibility":"Compatibilidad del cliente","protocolsToc":"Protocolos","apiReference":"Referencia de API","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","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).","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).","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.","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.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","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.","endpointSpeechNote":"Generación de texto a voz (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Generación de embeddings de texto (OpenAI, Cohere, Voyage)."},"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."},"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"},"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."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"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","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","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"},"templateNames":{"simple-chat":"Simple Chat","streaming":"Streaming","system-prompt":"System Prompt","thinking":"Thinking","tool-calling":"Tool Calling","multi-turn":"Multi-turn"},"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"},"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","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","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.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","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}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
2
2
 
3
3
  //# sourceMappingURL=src_i18n_messages_es_json_82775c4a._.js.map