{
  "nav": {
    "models": "Modelos",
    "playground": "Entorno de pruebas",
    "keys": "Claves",
    "analytics": "Analíticas",
    "premium": "Premium",
    "signOut": "Cerrar sesión",
    "openMenu": "Abrir el menú de navegación",
    "theme": "Tema",
    "switchLight": "Cambiar al tema claro",
    "switchDark": "Cambiar al tema oscuro",
    "language": "Cambiar idioma",
    "switchToChinese": "Cambiar a chino",
    "switchToEnglish": "Cambiar a inglés",
    "modelsMenu": "Explorar tipos de modelos"
  },
  "auth": {
    "createYourAccount": "Crea tu cuenta",
    "signIn": "Iniciar sesión",
    "email": "Correo electrónico",
    "password": "Contraseña",
    "emailPlaceholder": "tu@ejemplo.com",
    "passwordPlaceholderSetup": "al menos 8 caracteres",
    "passwordPlaceholderLogin": "tu contraseña",
    "setupDescription": "Define el correo y la contraseña que protegerán este panel.",
    "loginDescription": "Inicia sesión para gestionar tus claves, el enrutamiento y las analíticas.",
    "createAccount": "Crear cuenta",
    "creating": "Creando…",
    "signingIn": "Iniciando sesión…",
    "loading": "Cargando…",
    "newPasswordAutoComplete": "new-password",
    "currentPasswordAutoComplete": "current-password",
    "serverUnreachableBefore": "No se puede conectar con el servidor. Asegúrate de que el backend esté en ejecución (",
    "serverUnreachableAfter": ")."
  },
  "common": {
    "save": "Guardar",
    "saving": "Guardando…",
    "cancel": "Cancelar",
    "discard": "Descartar",
    "delete": "Eliminar",
    "confirm": "Confirmar",
    "copy": "Copiar",
    "copied": "Copiado",
    "show": "Mostrar",
    "hide": "Ocultar",
    "apply": "Aplicar",
    "applied": "Aplicado",
    "applying": "Aplicando…",
    "active": "Activo",
    "inactive": "Inactivo",
    "never": "nunca",
    "loading": "Cargando…",
    "error": "Error",
    "noData": "Aún no hay datos",
    "unsavedChanges": "Cambios sin guardar",
    "saveChanges": "Guardar cambios",
    "remove": "Quitar",
    "unknownError": "Error desconocido",
    "model": "Modelo",
    "provider": "Proveedor",
    "success": "Aciertos",
    "failures": "Fallos",
    "dismiss": "Descartar",
    "status": "Estado"
  },
  "models": {
    "title": "Modelos",
    "chatModelsTab": "Modelos de chat",
    "fusionTab": "Fusión",
    "embeddingsTab": "Embeddings",
    "imageTab": "Imagen",
    "audioTab": "Audio",
    "imageTitle": "Modelos de imagen",
    "audioTitle": "Modelos de audio",
    "imageDesc": "Modelos de generación de texto a imagen.",
    "audioDesc": "Modelos de generación de texto a voz.",
    "mediaHint": "Generar mediante",
    "mediaEmpty": "Aún no hay modelos. Se sincronizan desde el catálogo.",
    "newBadge": "Nuevo",
    "monthlyTokenBudget": "Presupuesto mensual de tokens",
    "remaining": "restante",
    "used": "usados",
    "of": "de",
    "showAllModels": "Mostrar los {count} modelos",
    "showLess": "Mostrar menos",
    "vision": "Visión",
    "visionTitle": "Acepta imágenes como entrada",
    "tools": "Herramientas",
    "toolsTitle": "Emite llamadas a herramientas estructuradas, por lo que es apto para solicitudes con herramientas",
    "penalty": "penalización de −{value}",
    "obs": "{count} obs",
    "tokPerMonth": "{count} tok/mes",
    "rpmLimit": "{count} rpm",
    "rpdLimit": "{count} rpd",
    "noKey": "sin clave",
    "dragToReorder": "Arrastra para reordenar",
    "columnModel": "Modelo",
    "columnOn": "Activo",
    "noModelsBefore": "No hay modelos disponibles. Añade claves API en la ",
    "keysPageLink": "página Claves",
    "noModelsAfter": " primero.",
    "hiddenNoKeys": "Ocultos (sin clave): {platforms}",
    "searchPlaceholder": "Buscar modelos o proveedores…",
    "clearSearch": "Borrar búsqueda",
    "ctxAny": "Cualquier contexto",
    "ctxBadge": "{size} ctx",
    "ctxTitle": "Ventana de contexto",
    "copyModelId": "Copiar id del modelo",
    "showingCount": "{shown} de {total} modelos",
    "clearFilters": "Borrar filtros",
    "noMatches": "Ningún modelo coincide con tus filtros.",
    "noModelsTitle": "No hay modelos configurados",
    "dragToReorderGroup": "Arrastra para reordenar el modelo",
    "providerCount": "{count} proveedores",
    "servedBy": "Servido por {providers}",
    "viewProviders": "Ver proveedores",
    "backToModels": "Volver a modelos",
    "providersHeading": "Proveedores que sirven este modelo",
    "codeSnippetHeading": "Usar este modelo",
    "modelNotFound": "Este modelo no está disponible o no tiene proveedores configurados.",
    "providerIdsHeading": "IDs de modelo por proveedor",
    "providerIdsHint": "Envía el id de modelo unificado para conmutar entre todos los proveedores, o un id específico de proveedor para fijar uno solo.",
    "copyModelName": "Copiar nombre del modelo",
    "settingsHeading": "Ajustes del proveedor",
    "settingsHint": "Las ediciones locales a los modelos del catálogo se conservan entre sincronizaciones del catálogo. Los modelos del catálogo eliminados permanecen eliminados hasta que los agregues de nuevo mediante la configuración.",
    "catalogModel": "catálogo",
    "customModel": "personalizado",
    "localOverride": "anulación local",
    "displayName": "Nombre visible",
    "contextWindow": "Contexto",
    "inFallback": "En cadena",
    "saveModelSettings": "Guardar ajustes del modelo",
    "aggregateBudget": "{count}/mes",
    "aggregateBudgetTitle": "Total de tokens gratuitos por mes entre los proveedores de este modelo",
    "rateRpm": "{count} RPM",
    "rateRpd": "{count} RPD",
    "rateTitle": "Con límite de tasa: sin presupuesto mensual fijo de tokens",
    "unifyToggle": "Unificar modelos duplicados",
    "unifyToggleHint": "Muestra un modelo servido por varios proveedores como un solo elemento, y conmuta entre sus proveedores cuando se selecciona."
  },
  "strategies": {
    "title": "Estrategia de enrutamiento",
    "description": "Elige una estrategia de enrutamiento. En el modo manual, arrastra para definir el orden; las demás estrategias enrutan según una puntuación en vivo de fiabilidad, velocidad e inteligencia.",
    "manual": "Manual",
    "manualBlurb": "Enrutar en el orden exacto que definas abajo. Arrastra los controles para reordenar. Sin puntuación; la cadena se sigue de arriba abajo.",
    "balanced": "Equilibrado",
    "balancedBlurb": "La fiabilidad va primero (50 %), con velocidad e inteligencia ponderadas por igual (25 % cada una). Un valor por defecto sensato y versátil.",
    "smartest": "El más inteligente",
    "smartestBlurb": "Prefiere el modelo más capaz que siga funcionando. Inteligencia 55 %, fiabilidad 35 %, velocidad 10 %.",
    "fastest": "El más rápido",
    "fastestBlurb": "Prefiere el modelo más rápido que siga funcionando. Velocidad 55 %, fiabilidad 35 %, inteligencia 10 %.",
    "reliable": "El más fiable",
    "reliableBlurb": "Maximizar la tasa de éxito por encima de todo. Fiabilidad 70 %, velocidad e inteligencia 15 % cada una.",
    "custom": "Personalizado",
    "customBlurb": "Define tu propio equilibrio entre fiabilidad, velocidad e inteligencia con controles deslizantes. El mismo motor que los preajustes, pero con tus pesos.",
    "adjust": "Ajustar",
    "customWeights": "Pesos personalizados",
    "customWeightsHelp": "Los controles son independientes; las proporciones se equilibran automáticamente al 100 %.",
    "weightReliability": "Fiabilidad",
    "weightSpeed": "Velocidad",
    "weightIntelligence": "Inteligencia",
    "weightRequired": "Al menos un peso debe ser mayor que cero.",
    "scoreColumn": "Puntuación",
    "weightsSummary": "fiabilidad {reliability}% · velocidad {speed}% · inteligencia {intelligence}%",
    "guardrails": "Salvaguardas",
    "guardrailsTooltip": "Salvaguardas siempre activas: margen de cuota gratuita × penalización de límite de tasa en vivo. Por debajo de 1,0 el modelo está siendo frenado.",
    "scoreTooltip": "Puntuación de enrutamiento final = media ponderada de los tres ejes, multiplicada por las salvaguardas. La más alta se enruta primero.",
    "modeManualHint": "Modo manual: las solicitudes siguen el orden de abajo, de arriba abajo. Arrastra para reordenar.",
    "modeScoreHint": "Las puntuaciones se actualizan con el tráfico real. El orden de abajo es cómo se enrutan las solicitudes ahora mismo."
  },
  "keys": {
    "pageTitle": "Claves",
    "pageDescription": "Las credenciales de los proveedores y la clave API unificada con la que se conectan tus aplicaciones.",
    "tabProviders": "Proveedores",
    "tabQuotaSignals": "Señales de cuota",
    "tabApiKey": "Clave de API unificada",
    "tabAnthropic": "Anthropic",
    "unifiedKey": "Tu clave API unificada",
    "regenerate": "Regenerar",
    "showKey": "Mostrar",
    "hideKey": "Ocultar",
    "copyKey": "Copiar",
    "copiedKey": "Copiado",
    "baseUrl": "URL base",
    "endpointChat": "Chat",
    "endpointResponses": "Responses",
    "endpointEmbeddings": "Embeddings",
    "endpointEmbeddingsHint": "model: «auto» o una familia de la pestaña Embeddings",
    "endpointMessages": "Messages",
    "endpointMessagesHint": "Compatible con Anthropic (Claude)",
    "anthropicTitle": "Modelos Claude (Anthropic)",
    "anthropicDesc": "Apunta un cliente SDK de Claude o Anthropic a este servidor. Los clientes de Anthropic envían nombres de modelos Claude: asigna cada uno a Auto (el router elige un modelo gratuito) o fija uno específico.",
    "anthropicBaseUrl": "URL base",
    "anthropicAuth": "Encabezado de autenticación",
    "anthropicAuto": "Auto — el router elige el mejor modelo",
    "anthropicSave": "Guardar asignación",
    "anthropicSaved": "Guardado",
    "anthropicNote": "Los clientes de Anthropic conservan sus nombres de modelos Claude integrados; la asignación de arriba decide cómo se enruta cada uno hacia tu grupo.",
    "familyDefault": "Predeterminado",
    "familyOpus": "Opus",
    "familySonnet": "Sonnet",
    "familyHaiku": "Haiku",
    "selectPlatform": "Selecciona un proveedor",
    "addKey": "Añadir clave",
    "keyAdded": "Clave añadida",
    "adding": "Añadiendo…",
    "selectProvider": "Selecciona un proveedor…",
    "accountId": "ID de cuenta",
    "label": "Etiqueta",
    "noKeyNeeded": "(no se necesita clave)",
    "outboundProxy": "Proxy de salida",
    "outboundProxyDescription": "Enruta las solicitudes LLM salientes a través de un proxy. Compatible con SOCKS5, HTTP y HTTPS.",
    "proxyUrl": "URL del proxy",
    "saveProxy": "Guardar",
    "savingProxy": "Guardando…",
    "proxyLoadFailed": "No se pudieron cargar los ajustes del proxy.",
    "addCustom": "Añadir un modelo personalizado compatible con OpenAI",
    "addCustomDescription": "Apunta a cualquier endpoint compatible con OpenAI: llama.cpp, LM Studio, vLLM, un Ollama local o una pasarela remota. Indica un modelo por línea (o separados por comas) para añadir varios a la vez; todos comparten el mismo endpoint. La clave API es opcional (la mayoría de los servidores locales no la necesitan).",
    "customBaseUrl": "URL base",
    "customModels": "Modelos",
    "customDisplayName": "Nombre visible",
    "customDisplayNamePerModel": "por modelo",
    "customDisplayNameOptional": "opcional",
    "customApiKey": "Clave API",
    "customCapabilities": "Capacidades",
    "addModel": "Añadir modelo",
    "modelAdded": "Modelo añadido",
    "addModels": "Añadir {count} modelos",
    "addingCustom": "Añadiendo…",
    "getApiKey": "Obtener clave API",
    "deleteKeyConfirm": "¿Eliminar esta clave? No se puede deshacer.",
    "checkAll": "Comprobar todo",
    "checking": "Comprobando…",
    "editLabel": "Editar etiqueta",
    "saveLabel": "Guardar etiqueta",
    "unifiedKeyDescBefore": "Úsala como tu ",
    "unifiedKeyDescAfter": " de OpenAI; autentica las solicitudes a este proxy.",
    "serverUnreachableBefore": "No se puede conectar con el servidor en ",
    "serverUnreachableAfter": ". Asegúrate de que el backend esté en ejecución. npm run dev inicia ambos, y los registros del servidor se imprimen con el prefijo server.",
    "paneProviderKey": "Clave de proveedor",
    "paneImportFile": "Importar archivo",
    "paneCustomEndpoint": "Endpoint personalizado",
    "platform": "Plataforma",
    "apiToken": "Token de API",
    "noKeyNeededPlaceholder": "No se necesita clave API",
    "bearerTokenPlaceholder": "Token Bearer",
    "pasteKeyPlaceholder": "pega la clave aquí",
    "keylessHint": "No se necesita clave API: el nivel gratuito de este proveedor es anónimo (con límite por IP).",
    "enable": "Habilitar",
    "noProviderKeys": "Aún no hay claves de proveedor. Añade una arriba para empezar a enrutar.",
    "filterPlaceholder": "Filtrar proveedores o claves",
    "filterAll": "Todos",
    "filterHealthy": "Correctos",
    "filterIssues": "Con problemas",
    "filterDisabled": "Deshabilitados",
    "noFilterMatch": "Ningún proveedor coincide con tus filtros.",
    "providerCountSummary": "{providers} proveedores · {keys} claves",
    "summaryHealthy": "{count} correctos",
    "summaryIssueOne": "{count} problema",
    "summaryIssueOther": "{count} problemas",
    "providerActions": "Acciones del proveedor",
    "routeViaProxy": "Enrutar por proxy",
    "checkNow": "Comprobar ahora",
    "proxyEnvHintBefore": "También configurable mediante la variable de entorno ",
    "proxyEnvHintAfter": " (tiene prioridad). Déjalo en blanco para desactivar. Ejemplos:",
    "confirmRemove": "¿Confirmar?",
    "quotaSignalsTitle": "Señales de cuota",
    "quotaSignalsEmptyTitle": "Aún no hay observaciones de cuota",
    "quotaSignalsEmptyDesc": "Esto se completa cuando los proveedores devuelven encabezados de límite, errores de cuota o señales de validación.",
    "quotaKeyRef": "clave n.º {id}",
    "quotaPoolRef": "grupo {pool}",
    "quotaLimit": "Límite",
    "quotaRemaining": "Restante",
    "quotaReset": "Reinicio",
    "quotaObserved": "Observado",
    "customType": "Tipo",
    "customTypeChat": "Chat",
    "customTypeEmbedding": "Embedding",
    "customTypeImage": "Imagen",
    "customTypeAudio": "Audio",
    "customModel": "Modelo",
    "customFamily": "Familia",
    "customFamilyPlaceholder": "por defecto, el id del modelo",
    "addEmbeddingModel": "Agregar embedding",
    "addImageModel": "Agregar modelo de imagen",
    "addAudioModel": "Agregar modelo de audio",
    "importKeys": "Importar claves de proveedor",
    "importKeysDescription": "Sube archivos .env, JSON, JSONC, CSV, Markdown o de texto.",
    "importFiles": "Archivos",
    "importFileCount": "{count} seleccionados",
    "previewFiles": "Vista previa",
    "previewing": "Previsualizando…",
    "selected": "Seleccionado",
    "provider": "Proveedor",
    "keyName": "Nombre de la clave",
    "keyValue": "Valor de la clave",
    "chooseProvider": "Elegir proveedor",
    "noPreviewKeys": "No se encontraron claves en esos archivos.",
    "skippedItems": "Omitidos:",
    "moreItems": "+{count} más",
    "importSelected": "Importar {count}",
    "importing": "Importando…",
    "noImportSelection": "Selecciona al menos una fila con un proveedor.",
    "duplicate": "Duplicado",
    "duplicatesFound": "{count} duplicado(s) detectado(s) — ya existen y se omitirán.",
    "importResult": "Importados {imported}; fallidos {failed}.",
    "export": {
      "json": "JSON",
      "env": ".env",
      "csv": "CSV"
    },
    "exportAll": "All keys",
    "exportHealthy": "Healthy only",
    "exportKeys": "Export API keys",
    "exportFormat": "Format",
    "exportHealthyOnly": "Healthy keys only",
    "exportHealthyOnlyDesc": "Exclude keys that are currently failing health checks",
    "exportWillExport": "Will export",
    "exportKey": "key",
    "exportKeys plural": "keys",
    "exporting": "Exporting…",
    "exportDownload": "Download",
    "exportSuccess": "Exported {count} keys"
  },
  "status": {
    "healthy": "correcto",
    "rateLimited": "limitado",
    "invalid": "no válido",
    "error": "error",
    "unchecked": "sin comprobar"
  },
  "analytics": {
    "title": "Analíticas",
    "description": "Volumen de solicitudes, latencia, consumo de tokens y fallos.",
    "range24h": "24 h",
    "range7d": "7 d",
    "range30d": "30 d",
    "range90d": "90 d",
    "requests": "Solicitudes",
    "successRate": "Tasa de éxito",
    "inputTokens": "Tokens de entrada",
    "outputTokens": "Tokens de salida",
    "avgLatency": "Latencia media",
    "p95Latency": "Latencia P95",
    "avgTtft": "TTFT medio",
    "estSavings": "Ahorro est.",
    "requestsByProvider": "Solicitudes por proveedor",
    "avgLatencyByProvider": "Latencia media por proveedor",
    "ttftByProvider": "Tiempo hasta el primer token por proveedor",
    "ttftEmpty": "Aún no se ha registrado el tiempo hasta el primer token.",
    "requestsOverTime": "Solicitudes a lo largo del tiempo",
    "tokensOverTime": "Tokens a lo largo del tiempo",
    "byModel": "Por modelo",
    "byPlatform": "Por plataforma",
    "errors": "Errores",
    "errorDistribution": "Distribución de errores",
    "pinnedRequests": "Solicitudes fijadas",
    "pinnedHonored": "Respetadas",
    "fallbackAttempts": "Intentos de reserva",
    "savingsHint": "Realmente ahorraste {actual} $ en los últimos {range}. Eso es lo que los mismos tokens habrían costado en APIs de pago, con precio por modelo. La cifra mostrada proyecta tu ritmo de los {span} de datos más recientes a 30 días completos.",
    "savingsHintExact": "Realmente ahorraste {actual} $ en los últimos {range}. Eso es lo que los mismos tokens habrían costado en APIs de pago, con precio por modelo. La cifra mostrada es tu total real de 30 días.",
    "requestsHintPinned": "{pinned} de estas solicitudes fijaron un modelo concreto por su nombre. {honored} fueron atendidas por el modelo fijado; {failed} conmutaron a otro. El resto se enrutaron automáticamente.",
    "requestsHintAuto": "Todas las solicitudes de este periodo se enrutaron automáticamente; ningún cliente fijó un modelo concreto por su nombre.",
    "requestsHintTypes": "{chat} solicitudes de chat y {embedding} de embeddings.",
    "rangeLabel24h": "24 horas",
    "rangeLabel7d": "7 días",
    "rangeLabel30d": "30 días",
    "rangeLabel90d": "90 días",
    "spanDays": "{count} días",
    "spanHours": "{count} horas",
    "latencyMs": "Latencia (ms)",
    "latency": "Latencia",
    "pinned": "Fijado",
    "inTokens": "Tokens de entrada",
    "outTokens": "Tokens de salida",
    "saved": "Ahorrado",
    "message": "Mensaje",
    "time": "Hora",
    "perModelBreakdown": "Desglose por modelo",
    "usageByKey": "Uso por clave",
    "keyColumn": "Clave",
    "keyLabelFallback": "Clave n.º {id}",
    "errorsByProvider": "Errores por proveedor",
    "recentErrors": "Errores recientes",
    "noErrors": "Sin errores",
    "recentCalls": "Llamadas recientes",
    "clientIp": "IP del cliente",
    "clientAgent": "Aplicación cliente",
    "requestedModelHint": "Se solicitó {model}, servido por respaldo"
  },
  "playground": {
    "title": "Entorno de pruebas",
    "description": "Envía una finalización de chat a través del enrutador y observa qué proveedor la atiende.",
    "autoModel": "Auto (cadena de reserva)",
    "fusionModel": "Fusión (síntesis multimodelo)",
    "send": "Enviar",
    "sending": "Enviando…",
    "clear": "Limpiar",
    "inputPlaceholder": "Escribe un mensaje… (⏎ para enviar, ⇧⏎ para nueva línea)",
    "emptyTitle": "Envía un mensaje para empezar.",
    "emptyDescription": "Usando {model}. Cambia de modelo en el selector de arriba.",
    "noModels": "Aún no hay modelos. Añade una clave API en la página Claves para llenar esta lista.",
    "copyReply": "Copiar respuesta",
    "fallback": "reserva",
    "fallbacks": "reservas",
    "fusionPanel": "Panel",
    "fusionJudge": "Juez",
    "fusionTrace": "{count} respuestas de modelos",
    "fusionFailed": "sin respuesta",
    "fusionJudgeSynth": "sintetizó la respuesta final",
    "errorPrefix": "Error:",
    "errorTitle": "La solicitud falló",
    "selectModel": "Seleccionar modelo",
    "searchModels": "Buscar modelos…",
    "noModelsFound": "No se encontraron modelos",
    "systemPromptLabel": "Prompt del sistema",
    "systemPromptPlaceholder": "Opcional. Se envía como mensaje del sistema antes de tu chat."
  },
  "embeddings": {
    "title": "Modelos",
    "description": "Los embeddings solo conmutan dentro de una misma familia: el mismo modelo servido por otro proveedor. Los vectores de modelos distintos son incompatibles, por lo que el enrutador nunca cambia de modelo a tus espaldas.",
    "defaultBadge": "Predeterminado · auto",
    "makeDefault": "Establecer como predeterminado",
    "moveUp": "Subir",
    "moveDown": "Bajar",
    "usageToday": "{count} sol. hoy",
    "usageMonth": "{count} tok este mes",
    "autoDescription": "model: «auto» en POST /v1/embeddings enruta a la familia predeterminada. Nombrar una familia (o un id de modelo de proveedor) fija esa familia; los proveedores dentro de ella se prueban en orden.",
    "unsavedChanges": "Cambios sin guardar",
    "saveChanges": "Guardar cambios",
    "savingChanges": "Guardando…",
    "tokMax": "{tokens} tok máx.",
    "emptyTitle": "Aún no hay modelos de embeddings",
    "emptyDesc": "Las familias de embeddings aparecen aquí cuando añades una clave de proveedor compatible con embeddings.",
    "dragToReorder": "Arrastra para reordenar el proveedor"
  },
  "fusion": {
    "title": "Fusión",
    "description": "Un panel de modelos responde en paralelo y luego un juez sintetiza una respuesta más sólida. Úsala llamando a la API con el modelo «fusion».",
    "panelSource": "Origen del panel",
    "panelSourceHelp": "De dónde provienen los modelos del panel cuando una solicitud no especifica los suyos.",
    "mode": {
      "auto": "Auto (cadena de reserva)",
      "autoHelp": "Elige un conjunto diverso de modelos de tu cadena de reserva, ordenados según tu estrategia de enrutamiento activa.",
      "explicit": "Panel explícito",
      "explicitHelp": "Usar siempre los modelos específicos que elijas a continuación."
    },
    "panelModels": "Modelos del panel",
    "selectedCount": "{count} de {max} seleccionados",
    "noModels": "Aún no hay modelos conectados. Añade una clave API y luego activa modelos en la cadena de reserva.",
    "panelSize": "Tamaño del panel",
    "panelSizeHelp": "Cuántos modelos diversos seleccionar automáticamente (1–{max}).",
    "judge": "Modelo juez",
    "judgeHelp": "El modelo que sintetiza las respuestas del panel en una sola. «Auto» usa tu mejor modelo disponible.",
    "judgeAuto": "Auto (mejor disponible)",
    "strategy": "Estrategia",
    "strategySynthesize": "Síntesis: combina el panel en una sola respuesta",
    "strategyBestOf": "Mejor respuesta: devuelve la respuesta más sólida (sin llamar al juez)",
    "strategySynthesizeShort": "Síntesis",
    "strategyBestOfShort": "Mejor respuesta",
    "exposePanel": "Exponer detalles del panel",
    "exposePanelHelp": "Adjunta la respuesta de cada modelo y los metadatos del juez en un campo x_fusion de la respuesta.",
    "howToUse": "Cómo usarlo",
    "howToUseHelp": "Envía una solicitud de chat normal con el modelo «fusion». Estos ajustes son los predeterminados; cualquier solicitud puede anularlos con un campo «fusion».",
    "unsavedChanges": "Cambios sin guardar",
    "save": "Guardar"
  },
  "premium": {
    "title": "Premium",
    "description": "El catálogo de modelos en vivo, en todos tus dispositivos.",
    "loading": "Cargando…",
    "checkForUpdates": "Buscar actualizaciones",
    "syncing": "Sincronizando…",
    "catalogFeed": "Fuente del catálogo",
    "liveFeed": "Fuente en vivo",
    "monthlySnapshot": "Instantánea mensual",
    "lastChecked": "Última comprobación: {when}",
    "liveDescription": "Los nuevos modelos gratuitos, los cambios de cuota y las correcciones llegan aquí pocas horas después de publicarse. La aplicación comprueba automáticamente dos veces al día; no hay nada que hacer.",
    "snapshotDescription": "Nivel gratuito: el catálogo se actualiza desde una instantánea mensual, comprobada automáticamente dos veces al día. Premium cambia esto a la fuente en vivo, actualizada cada 2 o 3 días.",
    "lastSyncProblem": "Problema en la última sincronización: {error}",
    "license": "Licencia",
    "planAnnual": "Premium Anual",
    "planLifetime": "Premium de por vida",
    "expired": "Caducada",
    "inactive": "Inactiva",
    "lifetimeNote": "Licencia de por vida: nunca caduca.",
    "renewsOn": "Se renueva el {date}.",
    "willNotRenew": "No se renovará. Premium hasta el {date}; después, esta instalación vuelve al catálogo mensual gratuito.",
    "keyInactive": "Esta clave ya no está activa. La aplicación sigue funcionando con el catálogo mensual gratuito.",
    "manageSubscription": "Gestionar suscripción",
    "openingPortal": "Abriendo…",
    "removeKey": "Quitar la clave de este dispositivo",
    "manageHint": "«Gestionar suscripción» abre el portal de facturación de Stripe: cancelar, actualizar tu tarjeta o descargar facturas. Quitar la clave solo desactiva este dispositivo; tu compra permanece intacta.",
    "licenseKey": "Clave de licencia",
    "licenseKeyPlaceholder": "fla_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "activate": "Activar",
    "activating": "Activando…",
    "keyHint": "Tu clave está en el correo de compra y en la página posterior al pago. ¿La perdiste?",
    "recoverKey": "Recupérala en el sitio web",
    "upsellTitle": "Pásate al directo por 19 $ al año",
    "upsellDescription": "Nuevos modelos gratuitos en cuanto existen, en lugar de 30 días después. Una clave, todos tus dispositivos. Cancela cuando quieras; el enrutador sigue siendo gratis para siempre.",
    "goPremium": "Hazte Premium",
    "bundled": "incluido",
    "planGeneric": "Premium"
  },
  "languages": {
    "en": "English",
    "zh-CN": "中文 (简体)",
    "fr": "Français",
    "es": "Español",
    "pt-BR": "Português (Brasil)",
    "it": "Italiano"
  },
  "errors": {
    "boundaryTitle": "Algo salió mal",
    "boundaryDescription": "El panel encontró un error inesperado. Tus datos están a salvo. Inténtalo de nuevo o vuelve a la página de modelos.",
    "tryAgain": "Intentar de nuevo",
    "goHome": "Volver a modelos"
  },
  "notFound": {
    "title": "Página no encontrada",
    "description": "Esta página no existe o puede haberse movido."
  },
  "setup": {
    "title": "Primeros pasos",
    "subtitle": "Tres pasos para enrutar tu primera solicitud.",
    "progress": "{done} de {total}",
    "step1Title": "Añade una clave de proveedor",
    "step1Desc": "Conecta al menos una cuenta de proveedor. Las claves gratuitas funcionan.",
    "step1Cta": "Añadir claves",
    "step2Title": "Envía una solicitud de prueba",
    "step2Desc": "Elige cualquier modelo en el Playground y saluda.",
    "step2Cta": "Abrir Playground",
    "step3Title": "Conecta tu aplicación",
    "step3Desc": "Usa tu clave API unificada con cualquier cliente compatible con OpenAI.",
    "copyKey": "Copiar clave API",
    "copyUrl": "Copiar URL base",
    "copiedKey": "Clave API copiada al portapapeles",
    "copiedUrl": "URL base copiada al portapapeles"
  },
  "palette": {
    "title": "Paleta de comandos",
    "placeholder": "Buscar páginas, modelos, acciones…",
    "empty": "Sin resultados",
    "groupPages": "Páginas",
    "groupActions": "Acciones",
    "groupModels": "Modelos",
    "toggleTheme": "Alternar modo oscuro"
  },
  "penaltyInspector": {
    "title": "Presión del router",
    "subtitle": "Penalizaciones, cooldowns y fallos de los últimos {minutes} min",
    "rowCount": "{count} activos",
    "offChain": "fuera de cadena",
    "penaltyValue": "Penalización {value}",
    "factor": "puntuación x{factor}",
    "noCooldown": "Sin cooldown",
    "cooldownChip": "{key} - {time}",
    "errorsHeading": "{count} errores recientes",
    "noRecentErrors": "Sin errores recientes",
    "noKey": "sin clave",
    "reasons": {
      "penalty": "penalizado",
      "cooldown": "cooldown",
      "recent_errors": "fallando"
    }
  },
  "validation": {
    "required": "Obligatorio",
    "url": "Introduce una URL válida que empiece por http:// o https://",
    "email": "Introduce una dirección de correo válida",
    "passwordMin": "Al menos {min} caracteres"
  }
}
