{
  "backups": {
    "warning": "Detén el grupo de batalla antes de crear o restaurar una copia de seguridad. Las copias tomadas con el juego en marcha pueden ser inconsistentes, y una restauración requiere el grupo de batalla detenido.",
    "loadFailed": "Error al cargar las copias: {{message}}",
    "take": {
      "title": "Crear copia",
      "desc": "Crea una instantánea de la base de datos PostgreSQL del grupo de batalla en un archivo con marca de tiempo en el host. Recomendado antes de cambios arriesgados.",
      "btn": "Crear copia"
    },
    "taken": "Copia creada: {{name}}",
    "takeFailed": "Copia fallida: {{message}}",
    "recent": {
      "title": "Copias recientes",
      "empty": "Aún no hay copias."
    },
    "col": {
      "name": "Archivo",
      "size": "Tamaño",
      "modified": "Creada"
    },
    "download": "Descargar",
    "restoreLabel": "Restaurar",
    "restoreFailed": "Restauración fallida: {{message}}",
    "restoreConfirmTitle": "¿Restaurar la base de datos?",
    "restoreConfirmDesc": "Esto reemplaza la base de datos activa con {{name}}. El grupo de batalla debe estar detenido — no se puede deshacer.",
    "deleteLabel": "Eliminar",
    "deleteConfirmTitle": "¿Eliminar copia?",
    "deleteConfirmDesc": "¿Eliminar {{name}} permanentemente?",
    "deleteFailed": "Error al eliminar: {{message}}",
    "schedule": {
      "title": "Programación de copias",
      "enable": "Activado",
      "desc": "Ejecuta copias automáticas según una programación semanal. Las horas son en la zona horaria configurada.",
      "nextBackup": "Próxima copia: {{when}}",
      "noneScheduled": "No hay copias programadas",
      "noRules": "Aún no hay reglas: añade una abajo.",
      "addRule": "Añadir regla",
      "removeRule": "Eliminar regla",
      "keepN": "Conservar últimas",
      "keepHint": "0 = conservar todas",
      "timezone": "Zona horaria",
      "tzPlaceholder": "local del host (p. ej. UTC)",
      "save": "Guardar",
      "saveFailed": "Error al guardar: {{message}}"
    }
  },
  "serverHealth": {
    "directorProxied": "(con proxy)",
    "ifaceLoadFailed": "Error al cargar las interfaces web: {{message}}",
    "ifaceSaveFailed": "Error al guardar: {{message}}",
    "ifaceLabel": "Etiqueta",
    "ifaceUrl": "URL (http:// o /ruta)",
    "editInterfaces": "Editar interfaces web",
    "removeInterface": "Eliminar",
    "addInterface": "Añadir interfaz",
    "saveInterfaces": "Guardar",
    "title": "Estado del servidor",
    "subtitle": "Estado en vivo de la VM, el grupo de batalla y los puertos.",
    "gamePorts": "Juego (UDP)",
    "webPort": "Web",
    "vm": "VM",
    "bg": "Grupo de batalla",
    "up": "Activo",
    "down": "Inactivo",
    "bgVm": "Grupo de batalla + VM",
    "upFor": "Activo {{uptime}}",
    "noUptime": "Tiempo de actividad no disponible",
    "components": "Información del grupo de batalla",
    "bgState": "Estado GB",
    "database": "Base de datos",
    "director": "Director",
    "configured": "Configurado",
    "notConfigured": "Sin configurar",
    "uptime": "Tiempo activo",
    "readyState": "Estado de juego listo",
    "ready": "Listo",
    "notReady": "No listo",
    "webInterfaces": "Interfaces web",
    "noInterfaces": "No hay interfaces web configuradas.",
    "copied": "Copiado al portapapeles",
    "copyFailed": "Error al copiar",
    "copy": "Copiar",
    "open": "Abrir",
    "gameServers": "Servidores de juego",
    "pods": "{{n}} pods"
  },
  "restarts": {
    "title": "Reinicios programados",
    "enable": "Activado",
    "nextRestart": "Próximo reinicio: {{when}}",
    "noneScheduled": "Sin reinicios programados",
    "noRules": "Aún no hay reglas: añade una abajo.",
    "addRule": "Añadir regla",
    "removeRule": "Eliminar regla",
    "warnMinutes": "Aviso (min)",
    "timezone": "Zona horaria",
    "tzPlaceholder": "local del host (p. ej. UTC)",
    "save": "Guardar",
    "skipNext": "Saltar el próximo",
    "failedToLoad": "Error al cargar: {{message}}",
    "saveFailed": "Error al guardar: {{message}}"
  },
  "director": {
    "title": "Configuración del Director",
    "subtitle": "Ajustes del Battlegroup Director — instanciación de mapas y opciones avanzadas (AMP).",
    "loading": "Cargando la configuración del Director…",
    "unsupported": "La edición de la configuración del Director solo está disponible en el plano de control AMP.",
    "save": "Guardar",
    "saveWithCount": "Guardar ({{count}})",
    "saveFailed": "Error al guardar: {{message}}",
    "readOnly": "solo lectura",
    "restartNote": "Los cambios se escriben en director_config.ini y se aplican tras reiniciar el servidor."
  },
  "help": {
    "menu": "Ayuda",
    "reportIssue": "Informar de un problema",
    "copyDiagnostics": "Copiar diagnóstico",
    "viewOnGitHub": "Ver en GitHub",
    "copied": "Diagnóstico copiado al portapapeles",
    "copyFailed": "No se pudo copiar al portapapeles"
  },
  "landsraad": {
    "title": "Landsraad",
    "subtitle": "El período político semanal: decretos y el tablero de tareas de las casas (solo lectura).",
    "failedToLoad": "Error al cargar el Landsraad: {{message}}",
    "currentTerm": "Período actual",
    "noTerm": "Sin período activo.",
    "testTerm": "Período de prueba",
    "term": {
      "id": "Período",
      "window": "Intervalo",
      "reigning": "Facción reinante",
      "activeDecree": "Decreto activo",
      "electedDecree": "Decreto elegido",
      "winning": "Facción ganadora"
    },
    "decrees": "Decretos",
    "decreesDesc": "Mejoras de servidor que pueden elegirse cada período.",
    "noDecrees": "Sin decretos.",
    "weight": "Peso {{weight}}",
    "enabled": "Activado",
    "disabled": "Desactivado",
    "taskBoard": "Tablero de tareas",
    "taskBoardDesc": "Tareas de contribución de las casas para el período actual.",
    "noTasks": "Sin tareas.",
    "tasks": {
      "index": "#",
      "house": "Casa",
      "goal": "Objetivo",
      "completed": "Estado",
      "sysselraad": "Sysselraad",
      "done": "Hecho",
      "open": "Abierto",
      "yes": "Sí"
    }
  },
  "guilds": {
    "title": "Gremios ({{count}})",
    "subtitle": "Gremios de jugadores en este servidor.",
    "view": "Ver",
    "empty": "No se encontraron gremios.",
    "failedToLoad": "Error al cargar los gremios: {{message}}",
    "members": "Miembros",
    "invites": "Invitaciones pendientes",
    "noMembers": "Sin miembros.",
    "noInvites": "Sin invitaciones pendientes.",
    "roleN": "Rol {{id}}",
    "manage": "Gestionar",
    "editGuild": "Editar gremio",
    "nameLabel": "Nombre",
    "descLabel": "Descripción",
    "save": "Guardar",
    "saved": "Gremio actualizado.",
    "saveFailed": "Error al guardar: {{message}}",
    "makeAdmin": "Hacer admin",
    "roleAdmin": "Admin",
    "roleMember": "Miembro",
    "roleChanged": "Rol actualizado.",
    "roleChangeFailed": "Error al cambiar el rol: {{message}}",
    "invitedBy": "invitado por {{name}}",
    "columns": {
      "name": "Nombre",
      "faction": "Facción",
      "members": "Miembros",
      "description": "Descripción"
    }
  },
  "app": {
    "reportIssue": "Informar de un problema en GitHub",
    "changesNote": "Los cambios en todas las pestañas se guardan juntos.",
    "checkUpdates": "Buscar actualizaciones",
    "configureBackend": "Configurar backend",
    "goHome": "Ir al inicio",
    "openSettings": "Abrir configuración",
    "reconnect": "Reconectar",
    "reconnected": "Reconectado — base de datos conectada",
    "reconnectFailed": "Error al reconectar: {{error}}",
    "reconnecting": "Reconectando…",
    "reinstall": "Reinstalar",
    "reinstalled": "{{version}} reinstalado. El servidor se está reiniciando…",
    "saveApply": "Guardar y aplicar",
    "selectLanguage": "Seleccionar idioma",
    "selectTheme": "Seleccionar tema",
    "settings": "Configuración",
    "signIn": "Iniciar sesión",
    "switchToSidenav": "Cambiar a navegación lateral",
    "switchToTopnav": "Cambiar a navegación superior",
    "title": "DUNE ADMIN",
    "updateAvailable": "Actualización disponible",
    "updateAvailableBody": "Hay una nueva versión disponible: v{{current}} → v{{latest}}.",
    "updated": "Actualizado a {{version}}. El servidor se está reiniciando…",
    "updateFailed": "Error de actualización: {{message}}",
    "updateNow": "Actualizar ahora",
    "viewReleaseNotes": "Ver notas de la versión",
    "backendUnreachable": {
      "body": "La aplicación web se cargó, pero no pudo conectarse al backend de dune-admin. Asegúrate de que el ejecutable de dune-admin esté en ejecución y sea accesible desde este navegador.",
      "hint1": "Asegúrate de que el servicio/ejecutable de dune-admin esté en ejecución en el servidor.",
      "hint2": "Comprueba que la URL del backend anterior sea correcta y accesible (host, puerto, firewall, HTTPS).",
      "hint3": "¿Detrás de un proxy o en otro host? Configura la URL del backend en Ajustes.",
      "retry": "Reintentar",
      "targetLabel": "Backend configurado",
      "title": "No se puede conectar con el backend de dune-admin"
    }
  },
  "bases": {
    "ariaLabel": "Bases de jugadores",
    "columns": {
      "id": "ID",
      "name": "Nombre",
      "pieces": "Piezas",
      "placeables": "Colocables"
    },
    "export": "Exportar",
    "failedToLoad": "Error al cargar bases: {{message}}",
    "featureNotAvailable": "Función no disponible",
    "featureNotAvailableDesc": "Esta versión del binario dune-admin no soporta el listado de bases. Actualiza a la última versión para usar esta función.",
    "layoutAccountStrong": "Layout Tools",
    "noBasesFound": "No se encontraron bases.",
    "subtitle": "Bases de jugadores en vivo en el mundo. Exporta cualquier base como un plano compatible con solido.",
    "title_one": "Bases ({{count}})",
    "title_many": "MISSING",
    "title_other": "Bases ({{count}})"
  },
  "battlegroup": {
    "actions": {
      "backup": "Respaldar",
      "backupMsg": "¿Crear una copia de seguridad de la base de datos? Esto puede tardar unos minutos.",
      "restart": "Reiniciar",
      "restartMsg": "¿Reiniciar el servidor? Los jugadores serán desconectados brevemente.",
      "restore": "Restaurar",
      "restoreMsg": "¿Restaurar la base de datos desde la copia de seguridad? Esto sobrescribirá los datos actuales.",
      "start": "Iniciar",
      "startMsg": "¿Iniciar el servidor del grupo de batalla?",
      "stop": "Detener",
      "stopMsg": "¿Detener el servidor? Todos los jugadores serán desconectados.",
      "update": "Actualizar",
      "updateMsg": "¿Ejecutar una actualización del servidor? Esto pone el servidor fuera de línea brevemente."
    },
    "backupLoadFailed": "No se pudieron cargar los archivos de copia de seguridad",
    "bodyPlaceholder": "Cuerpo",
    "broadcastBtn": "Transmitir",
    "broadcasts": "Transmisiones",
    "broadcastSent": "Transmisión enviada",
    "clickRefresh": "Haz clic en Actualizar para cargar el estado.",
    "cmdCompleted": "{{label}} completado",
    "cmdFailed": "{{label}} falló: {{message}}",
    "columns": {
      "age": "Edad",
      "dim": "Dim",
      "map": "Mapa",
      "part": "Part",
      "phase": "Fase",
      "players": "Jugadores",
      "queue": "Cola",
      "ready": "Listo"
    },
    "confirm": {
      "confirmPrefix": "Confirmar",
      "serverSuffix": "Servidor"
    },
    "database": "Base de datos",
    "durationLabel": "Duración (s)",
    "genericMessage": "Mensaje genérico",
    "initializing": "(inicializando)",
    "initWarning": "El servidor acaba de iniciarse — los servidores de juego pueden seguir inicializándose (~2 min).",
    "loadingStatus": "Cargando estado...",
    "modal": {
      "download": "Descargar"
    },
    "noGameServers": "No se encontraron servidores de juego.",
    "noOutput": "(sin salida)",
    "phase": "Fase",
    "restore": {
      "dropzone": "Suelta o haz clic para subir un archivo .backup o .zip desde tu computadora",
      "noBackups": "Aún no hay archivos de copia de seguridad en el servidor.",
      "restoreBtn": "Restaurar {{file}}",
      "restoreCompleted": "Restauración completada",
      "title": "Restaurar desde copia de seguridad",
      "uploaded": "{{name}} subido",
      "warning": "Esto sobrescribe los datos actuales. El servidor debe detenerse primero."
    },
    "restoreLabel": "Restaurar",
    "runningCmd": "Ejecutando {{cmd}}...",
    "serverControl": "Control del servidor",
    "shutdownBroadcast": "Transmisión de cierre",
    "shutdownCancelled": "Transmisión de cierre cancelada",
    "shutdownDelay": "Retraso (min)",
    "shutdownDelayLabel": "Minutos de retraso",
    "shutdownSent": "Transmisión de cierre enviada ({{delay}} min)",
    "shutdownType": "Tipo",
    "shutdownTypeLabel": "Tipo de cierre",
    "statusFailed": "Error de estado: {{message}}",
    "statusTitle": "Estado del grupo de batalla",
    "titleFull": "{{bgTitle}} ({{bgName}})",
    "titlePlaceholder": "Título"
  },
  "blueprints": {
    "ariaLabel": "Planos",
    "columns": {
      "id": "ID",
      "itemId": "ID de objeto",
      "name": "Nombre",
      "owner": "Propietario",
      "pieces": "Piezas",
      "placeables": "Colocables"
    },
    "failedToLoad": "Error al cargar planos: {{message}}",
    "importBlueprint": "Importar plano",
    "importFailed": "Error al importar: {{message}}",
    "importModal": {
      "blueprintFile": "Archivo de plano",
      "dropzone": "Suelta o haz clic para subir un archivo de plano .json",
      "import": "Importar",
      "playerLabel": "Jugador",
      "playerPlaceholder": "Seleccionar un jugador…",
      "playersLabel": "Jugadores",
      "title": "Importar plano"
    },
    "importSuccess": "Plano importado con éxito",
    "layoutAccountStrong": "Layout Tools",
    "noBlueprintsFound": "No se encontraron planos.",
    "selectFile": "Seleccionar un archivo de plano",
    "selectPlayer": "Seleccionar un jugador",
    "subtitle": "Gestionar planos de bases guardados. Exportar o importar construcciones de jugadores.",
    "title_one": "Planos ({{count}})",
    "title_many": "MISSING",
    "title_other": "Planos ({{count}})"
  },
  "common": {
    "timezone": "Zona horaria",
    "tzHostLocal": "Local del host",
    "add": "Añadir",
    "cancel": "Cancelar",
    "checking": "Comprobando…",
    "close": "Cerrar",
    "confirm": "Confirmar",
    "error": "Error:",
    "export": "Exportar",
    "failed": "Error: {{message}}",
    "noResults": "Sin resultados.",
    "refresh": "Actualizar",
    "remove": "Eliminar",
    "save": "Guardar",
    "saving": "Guardando…",
    "send": "Enviar"
  },
  "database": {
    "columnColumn": "Columna",
    "enterSearchTerm": "Ingresa un término de búsqueda",
    "enterSQL": "Ingresa una consulta SQL",
    "enterTableName": "Ingresa un nombre de tabla",
    "failed": "Error: {{message}}",
    "limitLabel": "Límite",
    "noResults": "Sin resultados.",
    "nullableColumn": "Nullable",
    "refreshLabel": "Actualizar",
    "resultLabel": "Resultado",
    "rowsColumn": "Filas",
    "rowsLimited": "Resultados limitados a 200 filas.",
    "runBtn": "Ejecutar",
    "runHint": "Cmd/Ctrl+Enter para ejecutar · Tab acepta sugerencia",
    "runQuery": "Ejecutar consulta",
    "searchLabel": "Nombre de columna o tabla",
    "searchPlaceholder": "player_id, faction...",
    "sections": {
      "backups": "Copias de seguridad",
      "describe": "Describir",
      "sample": "Muestra",
      "search": "Buscar columnas",
      "sql": "Ejecutar SQL",
      "tables": "Tablas"
    },
    "sideNavTitle": "Base de datos",
    "sqlPlaceholder": "SELECT * FROM dune.actors LIMIT 10;",
    "tableColumn": "Tabla",
    "tableNameLabel": "Nombre de tabla",
    "tablePlaceholder": "actors",
    "typeColumn": "Tipo"
  },
  "liveMap": {
    "betaBody": "Esta función está en desarrollo activo. Algunas funcionalidades aún pueden cambiar.",
    "betaTitle": "Beta — Trabajo en progreso",
    "calibActive": "Modo calibración — haz clic en el mapa exactamente donde está tu personaje.",
    "calibNoPlayer": "No hay jugador en línea para anclar la calibración.",
    "calibPoints": "{{n}} punto(s) capturado(s) — necesita 2+, separados, para resolver.",
    "calibrate": "Calibrar",
    "clear": "Limpiar",
    "clearFilters": "Borrar filtros",
    "densityNoneSelected": "Activa tipos de recursos arriba para ver su densidad.",
    "densityOverlay": "Mostrar densidad de recursos",
    "dragTeleportDesc": "Ajuste seguro a ({{x}}, {{y}}) — el jugador aterrizará en el suelo válido más cercano.",
    "dragTeleportTitle": "¿Teleportar a {{name}}?",
    "failedToLoad": "Error al cargar el mapa: {{message}}",
    "filter": "Filtro",
    "filterBases": "Bases",
    "filterHazards": "Hazards",
    "filterKeys": "Keys",
    "filterLandsraad": "Landsraad",
    "filterDensity": "Superposición de densidad",
    "filterLocations": "Locations",
    "filterNPCs": "NPCs",
    "filterResources": "Resources",
    "filterLive": "En vivo",
    "filterStaticObjects": "Static Objects",
    "filterTrainers": "Trainers",
    "filterVendors": "Vendors",
    "filterSearch": "Buscar filtro…",
    "players": "Jugadores",
    "spawnsLoaded_one": "{{count}} marcadores estáticos cargados",
    "spawnsLoaded_many": "MISSING",
    "spawnsLoaded_other": "{{count}} marcadores estáticos cargados",
    "spawnTooltipCoords": "{{x}}, {{y}}",
    "subtitle": "Jugadores, vehículos y bases en el mapa en vivo",
    "teleportHere": "Teletransportar aquí",
    "teleportMode": "Modo teletransporte",
    "teleportModeActive": "Haz clic en el mapa para establecer el destino",
    "teleportPlayer": "Jugador a teletransportar",
    "teleportSelectPlayer": "Seleccionar un jugador…",
    "teleportSent": "Teletransporte enviado",
    "title": "Mapa en vivo",
    "total": "Total",
    "unsupported": "El mapa en vivo no está disponible en este servidor.",
    "updated": "actualizado a las {{time}}",
    "vehicles": "Vehículos"
  },
  "logs": {
    "antiCheatLabel": "Eventos antitrampas",
    "antiCheatLog": "Registro antitrampas",
    "antiCheatTitle": "Eventos antitrampas (7d)",
    "autoScroll": "Desplazamiento automático",
    "cheats7d": "Trucos (7d)",
    "clear": "Limpiar",
    "columns": {
      "character": "Personaje",
      "cheatType": "Tipo de trampa",
      "time": "Hora"
    },
    "connectedPod": "● Conectado · {{pod}}",
    "disconnected": "○ Desconectado",
    "disconnectedState": "Desconectado.",
    "eventsCount_one": "{{count}} eventos",
    "eventsCount_many": "MISSING",
    "eventsCount_other": "{{count}} eventos",
    "failedToLoad": "Error al cargar pods: {{message}}",
    "linesCount_one": "{{count}} líneas",
    "linesCount_many": "MISSING",
    "linesCount_other": "{{count}} líneas",
    "logFiles": "Archivos de registro",
    "logFileSingular": "archivo de registro",
    "noCheatEvents": "No se encontraron eventos de trampa en los últimos 7 días.",
    "pods": "Pods",
    "podSingular": "pod",
    "reconnect": "Reconectar",
    "selectFromPanel": "Selecciona {{label}} del panel izquierdo para comenzar a transmitir registros.",
    "selectSource": "○ Seleccionar {{label}}",
    "sourceTitle_one": "{{label}} ({{count}})",
    "sourceTitle_many": "MISSING",
    "sourceTitle_other": "{{label}} ({{count}})",
    "stop": "Detener",
    "waitingForLines": "Esperando líneas de registro...",
    "wsError": "Error de WebSocket"
  },
  "market": {
    "bot": {
      "actions": {
        "cleanupFailed": "Error de limpieza: {{message}}",
        "dormantHint": "Bot desactivado — actívalo en la pestaña Servidor para usar los controles del ciclo de vida.",
        "pause": "Pausar",
        "pauseFailed": "Error al pausar el bot: {{message}}",
        "pauseSuccess": "Bot pausado: {{output}}",
        "reinitialize": "Reinicializar",
        "reinitializeFailed": "Error al reinicializar el bot: {{message}}",
        "reinitializeSuccess": "Bot reinicializado: {{output}}",
        "resume": "Reanudar",
        "resumeFailed": "Error al reanudar el bot: {{message}}",
        "resumeSuccess": "Bot reanudado: {{output}}",
        "wipedListings": "{{orders}} listados borrados ({{items}} objetos)",
        "wipeListings": "Borrar listados",
        "wipeListingsConfirm": "Borrar listados",
        "wipeListingsDesc": "Esto elimina cada listado activo de Revy en el intercambio. Los listados de jugadores, el historial de pedidos completados y el balance de Solari de Revy no se modifican. El próximo tick de listado repoblará los listados desde el catálogo.",
        "wipeListingsTitle": "¿Borrar todos los listados del bot?"
      },
      "botSectionsLabel": "Secciones del bot",
      "config": "Configuración",
      "configEditor": {
        "buyThreshold": "Umbral de compra",
        "buyThresholdDesc": "Compra un listado solo cuando su precio está en o por debajo de este % del precio de referencia del bot. 100% = igual o inferior · 70% = se requiere descuento del 30%+ · 110% = hasta 10% por encima del precio del bot.",
        "buyThresholdHint": "{{pct}}% del precio de referencia del bot",
        "buyTickHint": "ej. 5m",
        "buyTickInterval": "Intervalo de tick de compra",
        "configSaved": "Configuración guardada — los cambios se aplican en el próximo tick",
        "gradeFlawless": "Impecable",
        "gradeMasterwork": "Obra maestra",
        "gradeMultipliers": "Multiplicadores de grado",
        "gradeMultipliersDesc": "Escala el precio del listado por grado de calidad. El grado 0 (Estándar) es la base y debe permanecer en 1,0.",
        "gradePristine": "Pristino",
        "gradeRefined": "Refinado",
        "gradeStandard": "Estándar",
        "gradeSuperior": "Superior",
        "limits": "Límites",
        "limitsDesc": "Controla cuántos objetos compra y lista el bot por tick.",
        "listingsPerGrade": "Listados por grado",
        "listingsPerGradeDesc": "Listados activos mantenidos por objeto por grado de calidad (0 = Estándar … 5 = Impecable). Los apilables usan solo el grado 0. Ejemplo: 5 × 6 grados = hasta 30 listados por objeto gradable.",
        "listingsPerGradeHint": "por objeto por nivel de calidad",
        "listTickHint": "ej. 30m, 1h",
        "listTickInterval": "Intervalo de tick de listado",
        "maxBuysPerTick": "Máx. compras por tick",
        "rarityMultipliers": "Multiplicadores de rareza",
        "rarityMultipliersDesc": "Se aplica a objetos sin precio de vendedor NPC y a equipo fabricado Único/Recuerdo. Codificado por rareza; Común (1,0) es la referencia. Los multiplicadores de grado se aplican adicionalmente.",
        "tickIntervals": "Intervalos de tick",
        "vendorMultipliers": "Multiplicadores de vendedor",
        "vendorMultipliersDesc": "Se aplica a objetos que tienen precio de vendedor NPC (la mayoría de los objetos). Precio del listado = precio del vendedor × este multiplicador, codificado por rareza. Solo uno de Vendedor o Rareza se aplica a un objeto dado."
      },
      "configUnavailable": "Configuración no disponible.",
      "disabledItems": {
        "ariaLabel": "Objetos desactivados",
        "columns": {
          "name": "Nombre",
          "templateId": "ID de plantilla"
        },
        "disabledItemsCount_one": "Objetos desactivados ({{count}})",
        "disabledItemsCount_many": "MISSING",
        "disabledItemsCount_other": "Objetos desactivados ({{count}})",
        "disabledItemsHeading": "Objetos desactivados",
        "noDisabledItems": "Actualmente no hay objetos desactivados.",
        "noMatchingItems": "No se encontraron objetos coincidentes.",
        "searchAriaLabel": "Buscar objetos desactivados",
        "searchLabel": "Buscar objetos para desactivar",
        "searchPlaceholder": "Buscar por nombre o ID de plantilla…"
      },
      "disabledItemsTab": "Objetos desactivados",
      "log": {
        "autoScroll": "Desplazamiento automático",
        "backendUnreachable": "No se pudo alcanzar el backend — verifica que esté en ejecución.",
        "clear": "Limpiar",
        "connClosed": "Conexión cerrada (código {{code}})",
        "connClosedReason": "Conexión cerrada (código {{code}}): {{reason}}",
        "connect": "Conectar",
        "connected": "● conectado",
        "connecting": "◌ conectando…",
        "connectingState": "Conectando…",
        "error": "✕ error",
        "idle": "○ desconectado",
        "notAvailable": "Transmisión de registros no disponible",
        "stop": "Detener",
        "waitingForLines": "Esperando líneas de registro…",
        "wsError": "Error de conexión WebSocket — el flujo de registro fue interrumpido."
      },
      "logs": "Registros",
      "panelTitle": "Control del bot — Revy",
      "reloadConfig": "Recargar configuración",
      "reset": "Restablecer",
      "saveConfig": "Guardar configuración",
      "server": "Servidor",
      "serverConfig": {
        "cacheDb": "BD caché",
        "changesNote": "Los cambios requieren un reinicio del servidor para tener efecto.",
        "embeddedBot": "Bot integrado",
        "enableEmbedded": "Activar bot integrado",
        "itemData": "Datos de objetos",
        "loadFailed": "Error al cargar la configuración del servidor",
        "remoteBot": "Bot remoto",
        "remoteToken": "Token remoto",
        "remoteUrl": "URL remota",
        "restartRequired": "(reinicio requerido)",
        "savedConfig": "Configuración del servidor guardada — se requiere reinicio para aplicar cambios",
        "saveFailed": "Error al guardar: {{message}}",
        "statePath": "Ruta de estado"
      },
      "status": {
        "balance": "Balance",
        "errors": "Errores",
        "label": "Estado",
        "lastBuyTick": "Último tick de compra",
        "lastListTick": "Último tick de listado",
        "listings": "Listados",
        "nextBuyTick": "Próximo tick de compra",
        "nextListTick": "Próximo tick de listado",
        "paused": "⏸ En pausa",
        "running": "● En ejecución",
        "uptime": "Tiempo activo"
      },
      "tickingEnabled": "Ticking activado"
    },
    "botControl": "Control del bot",
    "itemDetail": {
      "activeListings": "Listados activos",
      "armorStats": "Estadísticas de armadura",
      "armorValue": "Valor de armadura",
      "armorValueByQuality": "Valor de armadura por calidad",
      "botStock": "Stock del bot",
      "category": "Categoría",
      "damageMultiplierByQuality": "Multiplicador de daño por calidad",
      "itemInfo": "Info del objeto",
      "listingsLabel": "Listados",
      "lowestPrice": "Precio más bajo",
      "noActiveListings": "Sin listados activos.",
      "priceCol": "Precio",
      "rarityLabel": "Rareza",
      "resistances": "Resistencias",
      "seller": "Vendedor",
      "stockCol": "Stock",
      "tierLabel": "Rango",
      "totalStock": "Stock total",
      "weaponQualityScaling": "Escala de calidad de arma"
    },
    "noBotConnected": "No hay bot de mercado conectado — activa el bot integrado para gestionarlo aquí",
    "search": {
      "allSellers": "Todos los vendedores",
      "ariaLabel": "Buscar objetos",
      "botOnly": "Solo bot",
      "clearFilters": "Limpiar",
      "playersOnly": "Solo jugadores",
      "searchPlaceholder": "Buscar objetos...",
      "sellerAriaLabel": "Filtrar por vendedor"
    },
    "sidebar": {
      "allItems": "Todos los objetos",
      "categories": "Categorías",
      "collapseAriaLabel": "Contraer barra lateral",
      "expandAriaLabel": "Expandir barra lateral",
      "schematics": "Esquemas"
    },
    "subtitle": "Explorar listados activos del intercambio de vendedores bot y jugadores.",
    "table": {
      "ariaLabel": "Objetos del mercado",
      "botStock": "Stock del bot",
      "category": "Categoría",
      "grade": "Grado",
      "item": "Objeto",
      "listings": "Listados",
      "lowestPrice": "Precio más bajo",
      "noItemsFound": "No se encontraron objetos.",
      "rarity": "Rareza",
      "stock": "Stock",
      "tier": "Rango"
    },
    "title": "Tablero del mercado"
  },
  "nav": {
    "director": "Director",
    "landsraad": "Landsraad",
    "guilds": "Gremios",
    "bases": "Bases",
    "battlegroup": "Estado del servidor",
    "blueprints": "Planos",
    "database": "Base de datos",
    "groups": {
      "economy": "Economía",
      "operations": "Operaciones",
      "playerWorld": "Mundo del jugador"
    },
    "liveMap": "Mapa en vivo",
    "logs": "Registros",
    "market": "Bot del mercado",
    "players": "Jugadores",
    "server": "Configuración del servidor",
    "storage": "Almacenamiento",
    "welcome": "Kits de bienvenida"
  },
  "players": {
    "actions": {
      "admin": {
        "characterExport": "Exportar personaje",
        "characterExportDesc": "Descargar datos del personaje como JSON",
        "confirmReset": "Confirmar restablecimiento",
        "confirmWipe": "Confirmar borrado",
        "delete": "Eliminar",
        "deleteTutorials": "Eliminar tutoriales",
        "deleteTutorialsConfirmDesc": "Esto eliminará todos los registros de finalización de tutoriales para {{player}}.",
        "deleteTutorialsDesc": "Elimina todos los registros de finalización de tutoriales",
        "deleteTutorialsTitle": "¿Eliminar tutoriales?",
        "destructive": "Acciones destructivas en vivo",
        "destructiveDesc": "Irreversible — el jugador debe estar en línea.",
        "dismiss": "Descartar",
        "dismissReturning": "Descartar popup de jugador que regresa",
        "dismissReturningDesc": "Marca el premio como reclamado para que el popup de inicio de sesión deje de aparecer",
        "downloadExport": "Descargar",
        "exportDownloaded": "Exportación descargada",
        "kick": "Expulsar",
        "kickDesc": "Desconecta al jugador del servidor",
        "kickPlayer": "Expulsar jugador",
        "liveActions": "Acciones en vivo",
        "liveActionsDesc": "Comandos RabbitMQ — el jugador debe estar en línea.",
        "loadingPlayers": "Cargando jugadores…",
        "manageLocations": "Gestionar ubicaciones",
        "manageLocationsModal": {
          "addHint": "Introduce un nombre y coordenadas, luego Guardar. Guardar un nombre existente actualiza sus coordenadas. Deja Z en blanco para nivel del suelo (0).",
          "addSection": "Añadir / Actualizar ubicación",
          "delete": "Eliminar",
          "done": "Hecho",
          "nameLabel": "Nombre",
          "namePlaceholder": "ej. Windsack",
          "noLocations": "Aún no hay ubicaciones — añade una arriba.",
          "save": "Guardar",
          "title": "Gestionar ubicaciones"
        },
        "mapPickerModal": {
          "cancel": "Cancelar",
          "confirm": "Usar estas coordenadas",
          "hint": "Haz clic en cualquier lugar de la Cuenca Hagga para capturar X/Y. Z tiene por defecto {{z}} — ajusta manualmente si es necesario.",
          "selected": "Seleccionado:",
          "title": "Seleccionar ubicación en el mapa"
        },
        "move": "Mover",
        "moveToXyz": "Mover a XYZ",
        "persistent": "Persistente",
        "pickOnMap": "Seleccionar en el mapa",
        "pickTarget": "Elegir un objetivo…",
        "positionReadFailed": "No se pudo leer la posición del jugador",
        "resetActions": "Restablecer acciones",
        "resetProgression": "Restablecer progresión",
        "resetProgressionConfirmDesc": "Esto borrará XP, habilidades y progreso de viaje para {{player}}. Esta acción no se puede deshacer.",
        "resetProgressionDesc": "Borra XP, habilidades y viaje del jugador",
        "resetProgressionTitle": "¿Restablecer progresión permanentemente?",
        "selectSpawnLocation": "Seleccionar ubicación de aparición…",
        "selectTargetLabel": "Jugador objetivo",
        "selectVehicle": "Seleccionar vehículo…",
        "spawn": "Invocar",
        "spawnLocationLabel": "Ubicación de aparición",
        "spawnVehicle": "Invocar vehículo",
        "spawnVehicleDesc": "El jugador debe estar en línea. Se invoca en la ubicación de partición elegida.",
        "teleport": "Teleportar",
        "teleportNote": "En vivo si está en línea · escrito en BD si está fuera de línea",
        "teleportPlaceholder": "Seleccionar ubicación...",
        "teleportToPlayer": "Teleportar al jugador",
        "templateLabel": "Plantilla",
        "useCurrent": "Usar actual",
        "vehicleLabel": "Tipo de vehículo",
        "whisper": "Susurrar",
        "whisperFrom": "De:",
        "whisperSent": "Susurro enviado a {{player}}",
        "wipe": "Borrar",
        "wipeCodex": "Borrar códex",
        "wipeCodexConfirmDesc": "Esto borrará todos los descubrimientos del códex para {{player}}.",
        "wipeCodexDesc": "Borra todos los descubrimientos del códex",
        "wipeCodexTitle": "¿Borrar códex?",
        "wipeInventory": "Borrar inventario",
        "wipeInventoryConfirmDesc": "Esto destruirá todos los objetos en el inventario de {{player}}. Esta acción no se puede deshacer.",
        "wipeInventoryDesc": "Destruye todos los objetos en el inventario del jugador",
        "wipeInventoryTitle": "¿Borrar inventario permanentemente?"
      },
      "contracts": {
        "applyContracts_one": "Aplicar contrato(s) ({{count}})",
        "applyContracts_many": "MISSING",
        "applyContracts_other": "Aplicar contrato(s) ({{count}})",
        "clearAll": "borrar todo",
        "count_one": "{{count}} contratos",
        "count_many": "MISSING",
        "count_other": "{{count}} contratos",
        "desc": "Aplica las etiquetas AddedFlagsOnCompletion del contrato + efectos secundarios de promoción de rango. Selección múltiple compatible.",
        "filterLabel": "Filtrar contratos",
        "filterPlaceholder": "Filtrar contratos (ej. Trainer_Mentat, Atre_Rank01)...",
        "loadFailed": "Error de carga: {{error}} — reiniciar el servidor",
        "loadingContracts": "cargando…",
        "noMatching": "No hay contratos coincidentes",
        "reverseContracts_one": "Revertir contrato(s) ({{count}})",
        "reverseContracts_many": "MISSING",
        "reverseContracts_other": "Revertir contrato(s) ({{count}})",
        "tagCount_one": "{{count}} etiqueta",
        "tagCount_many": "MISSING",
        "tagCount_other": "{{count}} etiqueta",
        "tagCountPlural_one": "{{count}} etiquetas",
        "tagCountPlural_many": "MISSING",
        "tagCountPlural_other": "{{count}} etiquetas",
        "title": "Completar contrato(s)"
      },
      "experimental": {
        "confirmRun": "Confirmar ejecución",
        "customScript": "CheatScript — Personalizado",
        "customScriptDesc": "Prueba cualquier nombre de script o comando de consola.",
        "customScriptLabel": "Nombre de script personalizado",
        "customScriptPlaceholder": "Nombre del script / comando…",
        "knownScripts": "CheatScript — Scripts conocidos",
        "knownScriptsDesc": "Scripts nombrados definidos en DefaultGame.ini. Fire-and-forget.",
        "run": "Ejecutar",
        "runTitle": "¿Ejecutar {{label}}?",
        "scripts": {
          "AwardPlayerXP": "Award Player XP",
          "AwardPlayerXPDesc": "Otorga 10.000 XP de Combate + 10.000 XP de Exploración + 10.000 XP de Ciencia",
          "LeaveMeAlone": "Leave Me Alone",
          "LeaveMeAloneDesc": "Destruye todos los NPCs, limpia encuentros + tormentas de arena, desactiva el gusano de arena (en todo el servidor)",
          "PlaytestSetup": "Playtest Setup",
          "PlaytestSetupAdmin": "Playtest Setup (Admin)",
          "PlaytestSetupAdminDesc": "⚠ DESTRUCTIVE — igual que Playtest Setup pero usa nombres de plantilla sin procesar",
          "PlaytestSetupDesc": "⚠ DESTRUCTIVE — ResetProgression + CleanInventory, luego kit completo de equipo",
          "UnlockAllAbilities": "Unlock All Abilities",
          "UnlockAllAbilitiesDesc": "Establece todos los módulos de habilidades al nivel 1",
          "UnlockAllSkills": "Unlock All Skills",
          "UnlockAllSkillsDesc": "Establece todos los módulos del árbol de habilidades al nivel 1"
        },
        "try": "Intentar",
        "warning": "⚠ Experimental — estos comandos se envían a través de RabbitMQ pero sus efectos no están verificados. Usar solo en personajes de prueba."
      },
      "history": {
        "columns": {
          "difficulty": "Dificultad",
          "dungeon": "Mazmorra",
          "duration": "Duración",
          "eventType": "Tipo de evento",
          "location": "Ubicación",
          "map": "Mapa",
          "partySize": "Tamaño del grupo",
          "time": "Hora"
        },
        "dungeonLabel": "Registros de mazmorras",
        "dungeonRecords": "Registros de mazmorras",
        "gameEvents": "Eventos del juego",
        "gameEventsLabel": "Eventos del juego",
        "noDungeons": "Sin registros de mazmorras",
        "noEvents": "Sin eventos"
      },
      "journey": {
        "columns": {
          "done": "Hecho",
          "nodeId": "ID de nodo",
          "revealed": "Revelado",
          "reward": "Recompensa"
        },
        "complete": "Completar",
        "filterPlaceholder": "Filtrar nodos...",
        "journeyLabel": "Nodos de viaje",
        "noMatching": "No hay nodos coincidentes",
        "noNodes": "No se encontraron nodos de viaje",
        "redo": "↻ Re-do",
        "reset": "Restablecer",
        "title": "Nodos de viaje",
        "wipeAll": "Borrar todo",
        "wipeAllDesc": "Esto eliminará todo el progreso de viaje para {{player}}. Esta acción no se puede deshacer.",
        "wipeAllTitle": "¿Borrar todos los nodos de viaje?"
      },
      "progression": {
        "apply": "Aplicar",
        "applyUnlock": "Aplicar desbloqueo",
        "loadingPresets": "Cargando…",
        "mainQuestLabel": "Misión principal",
        "nodes_one": "{{count}} nodos",
        "nodes_many": "MISSING",
        "nodes_other": "{{count}} nodos",
        "noPresets": "No hay preajustes disponibles",
        "presets": {
          "a_new_beginning": {
            "desc": "Introducción de la historia — fabricar Stillsuit, recolectar recursos, investigación del fabricador. Desbloquea el inicio del juego.",
            "name": "Completar: A New Beginning"
          },
          "act1_complete": {
            "desc": "A New Beginning + Find the Fremen combinados. El jugador comienza listo para el Acto 2.",
            "name": "Completar: Todo el Acto 1"
          },
          "deep_desert_intro": {
            "desc": "Completa la cadena de misiones secundarias del Desierto Profundo.",
            "name": "Omitir: Introducción al Desierto Profundo"
          },
          "find_the_fremen": {
            "desc": "Las 7 pruebas, el Sietch y el Epílogo. Desbloquea el Fremkit (Stillsuit, Thumper, Cryss Knife, etc.) y completa el Acto 1.",
            "name": "Completar: Find the Fremen (Trials of Aql)"
          },
          "overland_intro": {
            "desc": "Completa la cadena de misiones secundarias del mapa de superficie (misiones Hark Landsraad, piedras clave).",
            "name": "Omitir: Introducción al Mapa de Superficie"
          },
          "skip_npe": {
            "desc": "Marca el tutorial/NPE como completado. Útil para jugadores experimentados que no necesitan la introducción.",
            "name": "Omitir NPE (Experiencia de Jugador Nuevo)"
          },
          "taxation_intro": {
            "desc": "Completa la cadena tutorial de intercambio/viaje.",
            "name": "Omitir: Tutorial de Impuestos / Intercambio"
          },
          "unlock_all_lore": {
            "desc": "Revela todas las entradas de la Dunipedia: Universo Conocido, Lugares de Interés, Manual del Desierto Amistoso, Guerra por Arrakis.",
            "name": "Desbloquear Todo el Lore (Dunipedia)"
          },
          "vermillius_intro": {
            "desc": "Completa todas las misiones tutoriales de Vermillius Gap (investigación, fabricación, exploración). Sin efectos secundarios en etiquetas — omisión pura de tutorial.",
            "name": "Omitir: Tutoriales de Vermillius Gap"
          }
        },
        "progressionUnlock": "Desbloqueo de progresión",
        "progressionUnlockDesc": "Completa los nodos de viaje DA_FQ_ClimbTheRanks y escribe etiquetas de rango de facción.",
        "quickPresets": "Preajustes rápidos",
        "quickPresetsDesc": "Paquetes seleccionados que completan uno o más nodos de viaje raíz y se propagan a todos los hijos y etiquetas.",
        "resetSkillTree": "Restablecer árbol de habilidades",
        "resetSkillTreeDesc": "Esto borrará el árbol de habilidades profesional completo de {{trainer}} para {{player}}.",
        "resetSkillTreeTitle": "¿Restablecer árbol de habilidades {{trainer}}?",
        "reverseUnlock": "Revertir desbloqueo",
        "reverseUnlockDesc": "Esto deshará el preajuste {{preset}} para {{faction}} y eliminará las etiquetas asociadas de {{player}}.",
        "reverseUnlockTitle": "¿Revertir el desbloqueo de progresión?",
        "trainerLabel": "Entrenador",
        "unlockMainQuest": "Desbloquear misión principal",
        "unlockMainQuestDesc": "Marca cada fila de viaje DA_MQ_<name>.* como completa y aplica la unión m_TagsToAdd.",
        "unlockTrainer": "Desbloquear entrenador",
        "unlockTrainerDesc": "Completa cada contrato Trainer_X_* y otorga el árbol de habilidades profesional completo."
      },
      "resources": {
        "award": "Otorgar",
        "awardCharXP": "Otorgar XP de personaje",
        "awardIntel": "Otorgar inteligencia",
        "characterXP": "XP de personaje",
        "charXPNote": "Máx. 344.440 (nivel 200) · en vivo si está en línea, BD si está fuera de línea",
        "currencyResources": "Moneda y recursos",
        "currentXP": "Actual: {{xp}} XP — Nivel {{level}} / 200",
        "faction": "Facción",
        "factionReputation": "Reputación de facción",
        "fill": "Llenar",
        "fillWater": "Llenar agua",
        "fillWaterNote": "Llena todos los recipientes de agua al máximo (el jugador debe estar en línea)",
        "give": "Dar",
        "giveCurrency": "Dar moneda",
        "giveScrip": "Dar Scrip",
        "liveActions": "Acciones en vivo",
        "liveActionsNote": "El jugador debe estar en línea.",
        "reputation": "Reputación",
        "reputationNote": "Se añade al actual, máx. 12.474",
        "selectModule": "Seleccionar módulo…",
        "set": "Establecer",
        "setSkillModule": "Establecer módulo de habilidad",
        "skillModules": "Módulos de habilidad",
        "skillPoints": "Puntos de habilidad",
        "skillPointsNote": "Establece puntos no gastados"
      },
      "sections": {
        "admin": "Admin",
        "contracts": "Contratos",
        "experimental": "Experimental",
        "history": "Historial",
        "journey": "Viaje",
        "progression": "Progresión",
        "resources": "Estadísticas",
        "specs": "Especializaciones",
        "tags": "Etiquetas"
      },
      "specs": {
        "columns": {
          "level": "Nivel",
          "track": "Rama",
          "xp": "XP"
        },
        "grantMax": "Otorgar máximo",
        "grantMaxKeystones": "Otorgar piedras angulares máximas",
        "onlineWarning": "⚠ El jugador está en línea — los cambios de XP pueden no tener efecto hasta que se reconecte",
        "resetAllKeystones": "Restablecer todas las piedras angulares",
        "resetKeystonesDesc": "Esto eliminará todas las piedras angulares otorgadas para {{player}}. Esta acción no se puede deshacer.",
        "resetKeystonesTitle": "¿Restablecer todas las piedras angulares?",
        "resetSpec": "Restablecer especialización",
        "resetSpecDesc": "Esto borrará todo el XP y los niveles de la rama de especialización {{track}}.",
        "resetSpecTitle": "¿Restablecer especialización {{track}}?",
        "specializations": "Especializaciones",
        "specsLabel": "Especializaciones"
      },
      "tags": {
        "activeTags_one": "Etiquetas activas ({{count}})",
        "activeTags_many": "MISSING",
        "activeTags_other": "Etiquetas activas ({{count}})",
        "activeTagsLabel": "Etiquetas activas",
        "addCount_one": "Añadir ({{count}})",
        "addCount_many": "MISSING",
        "addCount_other": "Añadir ({{count}})",
        "addTags": "Añadir etiquetas",
        "filterPlaceholder": "Filtrar para eliminar…",
        "noTags": "Sin etiquetas",
        "removedTag": "Etiqueta eliminada",
        "searchPlaceholder": "Buscar etiquetas…",
        "tagColumn": "Etiqueta"
      }
    },
    "dashboard": {
      "activityTrend": "Actividad — últimos {{days}} días",
      "avgLevel": "Nivel medio",
      "avgLevelCol": "Nivel med.",
      "byFaction": "Por facción",
      "byMap": "Jugadores por mapa",
      "econPctCol": "% econ.",
      "factionCol": "Facción",
      "growthApprox": "Aproximado — de instantáneas en línea",
      "growthTitle": "Crecimiento de facciones",
      "metricLevel": "Nivel medio",
      "metricSolaris": "Solaris",
      "navLabel": "Resumen del servidor",
      "noPlayers": "Aún no hay jugadores",
      "online": "En línea ahora",
      "playersCol": "Jugadores",
      "scripCol": "Scrip",
      "sessions": "Sesiones",
      "solarisCol": "Solaris",
      "subtitle": "Estadísticas y tendencias de jugadores en todo el servidor",
      "title": "Resumen del servidor",
      "totalPlayers": "Jugadores totales",
      "totalPlaytime": "Tiempo de juego total",
      "totalScrip": "Scrip total",
      "totalSolaris": "Solaris total"
    },
    "detail": {
      "avgSession": "Prom.",
      "charXP": "XP de personaje",
      "earned": "Ganado",
      "economy": "Economía",
      "factionAlignment": "Alineación de facción",
      "unaligned": "Sin facción",
      "factionTier": "Rango de facción",
      "failedToLoad": "Error al cargar estadísticas.",
      "lastSeen": "Última vez visto",
      "milestones": "Hitos",
      "playtime": "Tiempo de juego",
      "pois": "Puntos de interés",
      "progression": "Progresión",
      "scrip": "Scrip",
      "sessionCount": "Contador",
      "sessionHistory": "Historial de sesiones",
      "sessionHistoryEmpty": "Los datos de sesión se acumulan cuando los jugadores inician sesión. El rastreador consulta cada 5 minutos.",
      "sessions": "Sesiones",
      "skillPts": "Pts de habilidad",
      "solaris": "Solaris",
      "solarisBalance": "Balance",
      "solarisHistory": "Historial de Solaris",
      "solarisHistoryEmpty": "Las instantáneas de Solaris se escriben cada 5 minutos mientras los jugadores están en línea.",
      "spent": "Gastado",
      "tier": "Rango {{tier}}",
      "xpCharXP": "XP de personaje",
      "xpCombat": "Combate",
      "xpCrafting": "Fabricación",
      "xpExploration": "Exploración",
      "xpGathering": "Recolección",
      "xpHistory": "Historial de XP",
      "xpHistoryEmpty": "Las instantáneas de XP se escriben cada 5 minutos mientras los jugadores están en línea.",
      "xpSabotage": "Sabotaje"
    },
    "give": {
      "add": "Añadir",
      "gave": "✓ Dado:",
      "gaveItems_one": "{{count}} objeto dado a {{player}}",
      "gaveItems_many": "MISSING",
      "gaveItems_other": "{{count}} objetos dados a {{player}}",
      "giveCount_one": "Dar {{count}} objeto",
      "giveCount_many": "MISSING",
      "giveCount_other": "Dar {{count}} objetos",
      "loadPack": "Cargar paquete…",
      "managePacks": "Gestionar paquetes",
      "modalTitle": "{{name}} — Dar objetos",
      "qty": "Cant.",
      "quality": "Calidad",
      "searchTemplates": "Buscar plantillas...",
      "selectTemplate": "Seleccionar una plantilla",
      "skipped": "✕ {{template}} omitido: {{reason}}"
    },
    "givePacks": {
      "addItem": "Añadir objeto",
      "addPack": "Añadir paquete",
      "category": "Categoría",
      "deletePack": "Eliminar paquete",
      "duplicateId": "Ya existe un paquete con ese ID.",
      "editingPack": "Editando paquete",
      "newPack": "Nuevo paquete",
      "noItemsYet": "Este paquete aún no tiene objetos.",
      "noPacks": "Todavía no hay paquetes — añade uno arriba.",
      "noPackSelected": "Selecciona un paquete para editar sus objetos.",
      "packId": "ID",
      "packName": "Nombre",
      "removeItem": "Quitar objeto",
      "save": "Guardar paquetes",
      "saved": "Paquetes guardados",
      "saveFailed": "No se pudieron guardar los paquetes: {{message}}",
      "searchTemplates": "Buscar plantilla de objeto…",
      "tier": "Nivel",
      "title": "Gestionar paquetes de objetos",
      "updatePack": "Actualizar paquete"
    },
    "inventory": {
      "columns": {
        "durability": "Durabilidad",
        "quality": "Calidad",
        "stack": "Pila",
        "template": "Plantilla"
      },
      "deleteOnlineWarning": "El jugador está en línea — eliminar objetos puede causar desincronizaciones de inventario. ¿Continuar?",
      "itemDeleted": "Objeto eliminado",
      "itemsLabel": "Objetos",
      "noItemsFound": "No se encontraron objetos",
      "repair": "Reparar",
      "repaired": "{{name}} reparado",
      "repairGear": "Reparar equipo",
      "repairGearDone": "{{repaired}} de {{scanned}} piezas de equipo reparadas — vuelve a iniciar sesión para verlo en el juego",
      "repairGearNone": "Ningún equipo necesitaba reparación ({{scanned}} objetos escaneados)",
      "repairNotice": "Los cambios de durabilidad se guardan en la BD. El jugador debe relogearse para verlos en el juego.",
      "title": "Inventario"
    },
    "searchLabel": "Buscar jugadores",
    "searchPlaceholder": "Filtrar jugadores...",
    "tabs": {
      "actions": "Acciones",
      "give": "Dar",
      "inventory": "Inventario",
      "overview": "Resumen",
      "vehicles": "Vehículos"
    },
    "title": "Jugadores",
    "vehicles": {
      "backup": "Respaldar",
      "columns": {
        "chassis": "Chasis",
        "class": "Clase",
        "location": "Ubicación",
        "name": "Nombre",
        "type": "Tipo"
      },
      "noVehiclesFound": "No se encontraron vehículos",
      "recovered": "Recuperado",
      "refuel": "Repostar",
      "refuelDone": "{{label}} repostado — vuelve a iniciar sesión para verlo en el juego",
      "repair": "Reparar",
      "repairDone": "{{repaired}} módulos reparados en {{label}} — vuelve a iniciar sesión para verlo en el juego",
      "repairNone": "No se encontraron módulos en {{label}}",
      "repairNotice": "Las reparaciones de vehículos requieren reiniciar el servidor para tener efecto en el juego.",
      "repairPartial": "{{repaired}} de {{total}} módulos reparados en {{label}} ({{skipped}} omitidos) — vuelve a iniciar sesión para verlo en el juego",
      "vehiclesLabel": "Vehículos"
    }
  },
  "server": {
    "advancedCategories": "Avanzado",
    "advancedCategoriesDesc": "Haz clic en una categoría para expandirla en su lugar. Haz clic de nuevo o elige otra para cambiar.",
    "collapse": "Cancelar",
    "collapseCategory": "Contraer categoría",
    "collapseSection": "Contraer sección",
    "commonSettings": "Configuración común",
    "commonSettingsDesc": "La docena de ajustes que los administradores usan con más frecuencia. Todo lo demás está en las categorías a continuación.",
    "deleteFailed": "Error al eliminar: {{message}}",
    "iniNotFound": "No se pudieron localizar los archivos INI del servidor: {{error}}. Para kubectl, asegúrate de que el PVC del servidor de juego esté montado. Para docker/local, añade server_ini_dir a ~/.dune-admin/config.yaml.",
    "loading": "Cargando configuración…",
    "noMatchSettings": "Ninguna configuración coincide con \"{{query}}\".",
    "overriddenCount_one": "{{count}} sobrescritas",
    "overriddenCount_many": "MISSING",
    "overriddenCount_other": "{{count}} sobrescritas",
    "rawIniDesc": "Entradas de matriz (+key=val) y claves no reconocidas, agrupadas por sección INI.",
    "rawIniSections": "Secciones INI sin procesar",
    "rawPlaceholder": "Key=Value o +Key=Value para entradas de matriz",
    "removedFrom": "Eliminado de {{file}}",
    "save": "Guardar",
    "savedTo": "Guardado en {{file}}",
    "saveFailed": "Error al guardar: {{message}}",
    "saveWithCount_one": "Guardar ({{count}})",
    "saveWithCount_many": "MISSING",
    "saveWithCount_other": "Guardar ({{count}})",
    "searchLabel": "Buscar configuración",
    "searchPlaceholder": "Buscar configuración…",
    "settingCount_one_one": "{{count}} configuración",
    "settingCount_one_many": "MISSING",
    "settingCount_one_other": "{{count}} configuración",
    "settingCount_other_one": "{{count}} configuraciones",
    "settingCount_other_many": "MISSING",
    "settingCount_other_other": "{{count}} configuraciones",
    "showAll": "Todo",
    "showAllAriaLabel": "Mostrando toda la configuración — haz clic para mostrar solo la configuración de usuario",
    "showUser": "Usuario",
    "showUserAriaLabel": "Mostrando solo la configuración de usuario — haz clic para mostrar todo",
    "title": "Configuración del servidor",
    "unsaved": "sin guardar",
    "userOverride": "· anulación de usuario",
    "expertCategories": "Experto",
    "expertCategoriesDesc": "Componentes internos del motor y del sistema. Cámbialos solo si sabes exactamente lo que haces.",
    "ampManagedTooltip": "Gestionado a través de la API de AMP — se aplica en el próximo reinicio del servidor",
    "removeFrom": "Eliminar de {{file}}"
  },
  "settings": {
    "adv": {
      "applyReload": "Aplicar y recargar",
      "backendUrlHint": "Solo necesario cuando la UI se sirve desde un host diferente (túnel SSH, CDN). Dejar en blanco para configuración de binario único.",
      "backupDir": "Directorio de copias de seguridad",
      "defaultIniDir": "Directorio INI predeterminado",
      "defaultIniDirHint": "capa base de DefaultGame.ini",
      "directorUrl": "URL de Director",
      "directorUrlHint": "proxy en /director/",
      "listenAddr": "Dirección de escucha",
      "listenAddrHint": "⚠ se requiere reinicio",
      "reset": "Restablecer",
      "scripCurrency": "ID de moneda Scrip",
      "serverIniDir": "Directorio INI del servidor",
      "serverIniDirHint": "ubicación de UserGame.ini",
      "url": "URL",
      "urlHint": "almacenada en el navegador, no en el servidor"
    },
    "amp": {
      "containerName": "Nombre de contenedor",
      "containerNameHint": "predeterminado: AMP_<instance>",
      "dataRoot": "Raíz de datos",
      "instanceName": "Nombre de instancia",
      "logPath": "Ruta de registros",
      "useContainer": "Usar contenedor (podman exec)",
      "useContainerHint": "Desactiva para ejecutar directamente en el host como el usuario AMP.",
      "user": "Usuario AMP",
      "apiUser": "Usuario de la API de AMP",
      "apiPassword": "Contraseña de la API de AMP",
      "apiPort": "Puerto de la API de AMP",
      "apiHint": "Inicio de sesión de la API web de AMP. Permite a dune-admin gestionar la configuración del servidor en AMP para que sobreviva a los reinicios. Puerto predeterminado 8081."
    },
    "broker": {
      "adminAddr": "Dirección de admin",
      "execPrefix": "Prefijo de ejecución",
      "execPrefixHint": "cuando el broker está dentro de un contenedor",
      "gameAddr": "Dirección del juego",
      "jwtSecret": "Secreto JWT",
      "jwtSecretHint": "en blanco = valor predeterminado integrado",
      "optionalHint": "Activa captura y notificaciones cuando está configurado.",
      "password": "Contraseña",
      "user": "Usuario",
      "useTls": "Usar TLS (amqps://)"
    },
    "cmd": {
      "restart": "Reiniciar",
      "start": "Iniciar",
      "status": "Estado",
      "stop": "Detener"
    },
    "configSaved": "Configuración guardada — aplicando ajustes…",
    "control": {
      "amp": "amp — CubeCoders AMP",
      "docker": "docker — Contenedores Docker",
      "kubectl": "kubectl — Kubernetes / k3s",
      "local": "local — bare metal / LGSM / shell",
      "modeHint": "Cómo dune-admin gestiona el servidor de juego",
      "selectMode": "Selecciona un modo de control arriba para ver la configuración específica del modo."
    },
    "db": {
      "host": "Host",
      "hostHint": "127.0.0.1 vía túnel SSH",
      "name": "Nombre de base de datos",
      "password": "Contraseña",
      "passwordHint": "enviar marcador de posición para mantener el existente",
      "port": "Puerto",
      "schema": "Esquema",
      "user": "Usuario"
    },
    "docker": {
      "brokerAdmin": "Broker (admin)",
      "brokerGame": "Broker (juego)",
      "database": "Base de datos",
      "gameServer": "Servidor de juego"
    },
    "k8s": {
      "namespace": "Espacio de nombres",
      "namespaceHint": "en blanco = detección automática"
    },
    "loadFailed": "No se pudo cargar la configuración: {{message}}",
    "loadingConfig": "Cargando configuración…",
    "saveFailed": "Error al guardar: {{message}}",
    "sections": {
      "amp": "CubeCoders AMP",
      "backendUrlOverride": "Anulación de URL del backend",
      "controlPlane": "Plano de control",
      "database": "Base de datos",
      "dockerContainers": "Contenedores Docker",
      "kubernetes": "Kubernetes",
      "paths": "Rutas",
      "rabbitmq": "RabbitMQ (opcional)",
      "server": "Servidor",
      "serverCommands": "Comandos del servidor",
      "ssh": "SSH (dejar en blanco para local)"
    },
    "ssh": {
      "hostPort": "Host : puerto",
      "hostPortHint": "activa el túnel SSH para todo BD + exec",
      "privateKey": "Ruta de clave privada",
      "privateKeyHint": "ruta absoluta, en blanco = detección automática",
      "user": "Usuario"
    },
    "tabs": {
      "advanced": "Avanzado",
      "broker": "Broker",
      "connection": "Conexión",
      "control": "Control"
    }
  },
  "storage": {
    "addItems": "Añadir objetos",
    "addModal": {
      "add": "Añadir",
      "qtyColLabel": "Cant.",
      "qtyLabel": "Cant.",
      "qualityColLabel": "Calidad",
      "qualityLabel": "Calidad",
      "searchPlaceholder": "Buscar plantillas...",
      "selectTemplate": "Seleccionar una plantilla",
      "templateLabel": "Plantilla"
    },
    "ariaLabel": "Objetos del contenedor",
    "columns": {
      "durability": "Durabilidad",
      "id": "ID",
      "quality": "Calidad",
      "stack": "Pila",
      "template": "Plantilla"
    },
    "containerEmpty": "El contenedor está vacío",
    "containersTitle_one": "Contenedores ({{count}})",
    "containersTitle_many": "MISSING",
    "containersTitle_other": "Contenedores ({{count}})",
    "containerTitle": "Contenedor #{{id}}",
    "itemRemoved": "Objeto eliminado",
    "ownerLabel": "Propietario: {{name}}",
    "remove": "Eliminar",
    "searchLabel": "Buscar contenedores",
    "searchPlaceholder": "Buscar...",
    "selectContainer": "Seleccionar un contenedor para ver su contenido",
    "warningText": "Los objetos añadidos o eliminados de los contenedores de almacenamiento requieren un reinicio de zona del servidor para volverse visibles a otros jugadores."
  },
  "welcome": {
    "activeVersionGranted": "VERSIÓN(ES) ACTIVA(S) (CONCEDIDA)",
    "addItem": "Añadir objeto",
    "addVersion": "Añadir versión",
    "columns": {
      "character": "Personaje",
      "error": "Error",
      "flsId": "FLS ID",
      "status": "Estado",
      "tries": "Intentos",
      "updated": "Actualizado",
      "version": "Versión"
    },
    "configSubtitle": "Activa concesiones, establece paquetes activos y configura el mensaje de bienvenida.",
    "editingVersion": "Editando versión",
    "enabledHint": "— otorga el paquete activo a jugadores en línea que no han recibido esa versión.",
    "enabledLabel": "Activado",
    "failedToLoad": "Error al cargar el paquete de bienvenida: {{message}}",
    "grantsLabel": "Otorgamientos de kit de bienvenida",
    "grantsTitle_one": "Historial de concesiones ({{count}})",
    "grantsTitle_many": "MISSING",
    "grantsTitle_other": "Historial de concesiones ({{count}})",
    "message": {
      "enabledHint": "Enviado una vez por jugador por versión activa a través del personaje GM. Registrado en el libro de concesiones.",
      "enabledLabel": "Enviar susurro a los nuevos jugadores en su primer inicio de sesión",
      "messageLabel": "Mensaje",
      "messagePlaceholder": "¡Bienvenido al servidor! Disfruta tu paquete inicial.",
      "senderLabel": "ID FLS del remitente (opcional)",
      "senderPlaceholder": "Dejar en blanco para usar el personaje GM configurado",
      "title": "Mensaje de bienvenida"
    },
    "newVersionLabel": "Nombre de nueva versión",
    "newVersionPlaceholder": "ej. v2 o temporada2",
    "noGrants": "Aún no hay otorgamientos.",
    "noItemsYet": "Aún no hay objetos en esta versión.",
    "noPackageSelected": "No hay paquete seleccionado. Añade una versión para comenzar.",
    "packagesSubtitle": "Crea y gestiona paquetes de objetos. Cada versión puede concederse de forma independiente.",
    "removeItem": "Eliminar objeto",
    "retry": "Reintentar",
    "retryCleared": "Limpiado — se reintentará en el próximo escaneo",
    "retryFailed": "Error al reintentar: {{message}}",
    "runFailed": "Error de ejecución: {{message}}",
    "runNow": "Ejecutar ahora",
    "saveConfig": "Guardar configuración",
    "savedDisabled": "Paquete de bienvenida guardado (desactivado)",
    "savedEnabled": "Activado — otorgando \"{{version}}\" dentro de un tick de escaneo",
    "saveFailed": "Error al guardar: {{message}}",
    "scanComplete": "Escaneo completo — {{granted}} otorgados, {{failed}} fallidos, {{skipped}} omitidos",
    "scanInterval": "Intervalo de escaneo (segundos)",
    "sections": {
      "config": "Configuración",
      "grants": "Concesiones",
      "packages": "Paquetes"
    },
    "title": "Kits de bienvenida",
    "revoke": "Revocar",
    "revoked": "Concesión revocada — el paquete se puede otorgar de nuevo",
    "revokeFailed": "Error al revocar: {{message}}",
    "motd": {
      "enabledHint": "Susurrado a través del personaje GM en cada conexión (cada sesión, no solo la primera). Usa {player} para el nombre del jugador.",
      "enabledLabel": "Enviar un mensaje a los jugadores cada vez que se conectan",
      "messageLabel": "Mensaje",
      "messagePlaceholder": "¡Bienvenido de nuevo, {player}! Consulta el Discord para ver eventos.",
      "senderLabel": "ID FLS del remitente (opcional)",
      "senderPlaceholder": "Dejar en blanco para usar el personaje GM configurado",
      "title": "Mensaje del día"
    },
    "runConfirmTitle": "¿Otorgar paquete de bienvenida ahora?",
    "runConfirmBody": "Esto otorga el/los paquete(s) {{versions}} a todos los jugadores en línea elegibles ahora mismo. ¿Continuar?"
  }
}
