From 47cfdb823e5618cb3c2aef73ad0e0bdeb098c870 Mon Sep 17 00:00:00 2001 From: Meir Michanie Date: Mon, 12 Oct 2026 14:26:08 +0400 Subject: [PATCH] feat(i18n): Spanish catalog Meir Michanie's Spanish translation from #602 (9d69e11, 4ba5d69), converted to the English-keyed format: one entry per English message in src/i18n/locales/es.json, translations unchanged. Also carries the es-only CCTV control-row wrap rule. Co-Authored-By: German Khokhlov --- src/i18n/locales/es.json | 843 +++++++++++++++++++++++++++++++++++++++ src/ui/styles/cctv.css | 8 + 2 files changed, 851 insertions(+) create mode 100644 src/i18n/locales/es.json diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json new file mode 100644 index 000000000..54c5dedcf --- /dev/null +++ b/src/i18n/locales/es.json @@ -0,0 +1,843 @@ +{ + "NO PLACE LEFT BEHIND": "NINGÚN RINCÓN SIN VIGILAR", + "Initializing photorealistic world...": "Inicializando el mundo fotorrealista...", + "Configuring viewer...": "Configurando el visor...", + "Google 3D Tiles unavailable ({detail}). Loading the keyless globe...": "Google 3D Tiles no disponibles ({detail}). Cargando el globo sin clave...", + "Flying to Austin, TX...": "Volando a Austin, TX...", + "Restoring shared view...": "Restaurando la vista compartida...", + "LOADING LIVE DATA": "CARGANDO DATOS EN VIVO", + "LOAD COMPLETE": "CARGA COMPLETA", + "LOAD FAILED": "CARGA FALLIDA", + "LOAD CANCELLED": "CARGA CANCELADA", + "syncing road network": "sincronizando la red vial", + "retrying in {seconds}s": "reintentando en {seconds} s", + "retry pending": "reintento pendiente", + "Clear selected data layers": "Limpiar las capas de datos seleccionadas", + "Turn off all selected data layers": "Desactivar todas las capas de datos seleccionadas", + "Copy share link": "Copiar enlace para compartir", + "Reset to full globe view": "Restablecer la vista del globo completo", + "DATA LAYERS": "CAPAS DE DATOS", + "Collapse panel": "Contraer panel", + "Navigation, voice, and visual preset controls": "Controles de navegación, voz y preajustes visuales", + "Globe actions": "Acciones del globo", + "Reset camera and return to full globe view": "Restablecer la cámara y volver a la vista del globo completo", + "loading frames": "cargando fotogramas", + "Language": "Idioma", + "Loading Google 3D Tiles...": "Cargando Google 3D Tiles...", + "Loading the keyless globe...": "Cargando el globo sin clave...", + "Initializing systems...": "Inicializando sistemas...", + "LIVE DATA OFF": "DATOS EN VIVO DESACTIVADOS", + "MAPPED SITES LOADED": "SITIOS MAPEADOS CARGADOS", + "RETRYING MAPPED SITES": "REINTENTANDO SITIOS MAPEADOS", + "FETCHING MAPPED SITES": "OBTENIENDO SITIOS MAPEADOS", + "TURNING OFF LIVE DATA": "DESACTIVANDO DATOS EN VIVO", + "REFRESHING LIVE DATA": "ACTUALIZANDO DATOS EN VIVO", + "Close data attribution": "Cerrar la atribución de datos", + "Aircraft cockpit view": "Vista de cabina de la aeronave", + "EXIT COCKPIT": "SALIR DE CABINA", + "GROUND SPEED": "VEL. SUELO", + "ALTITUDE": "ALTITUD", + "CONTACT": "CONTACTO", + "CONTACTS · 250 KM": "CONTACTOS · 250 KM", + "LIVE SIGNALS": "SEÑALES EN VIVO", + "OBSERVED / MAPPED PINGS": "PINGS OBSERVADOS / MAPEADOS", + "CURRENT": "ACTUAL", + "READY": "LISTA", + "ACTIVE STYLE": "ESTILO ACTUAL", + "Return UI controls": "Volver a mostrar los controles de la interfaz", + "EXIT CLEAN VIEW": "SALIR DE VISTA LIMPIA", + "Expand Visual Presets": "Expandir Preajustes visuales", + "VISUAL PRESETS": "PREAJUSTES VISUALES", + "Pin visual presets": "Fijar Preajustes visuales", + "Keep visual presets open": "Mantener abiertos los Preajustes visuales", + "Show the globe without a visual filter.": "Muestra el globo sin filtro visual.", + "Normal": "Normal", + "Emulate a green phosphor CRT with scanlines and screen curvature.": "Emula un CRT de fósforo verde con líneas de barrido y curvatura de pantalla.", + "CRT": "CRT", + "Simulate night-vision goggles with green intensification and a tube vignette.": "Simula unas gafas de visión nocturna con intensificación verde y viñeta de tubo.", + "NVG": "NVG", + "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Simula un contraste térmico estilo FLIR. Sube Ironbow para tener color.", + "FLIR": "FLIR", + "Apply bright cel-shaded color and illustrated outlines.": "Aplica un color brillante de cel-shading y contornos ilustrados.", + "Anime": "Anime", + "Apply high-contrast monochrome film-noir grading.": "Aplica una gradación monocroma de alto contraste estilo film noir.", + "Noir": "Noir", + "Add a cold, snowy whiteout treatment to the scene.": "Añade a la escena un tratamiento frío de ventisca blanca.", + "Snow": "Nieve", + "MAP SOURCE": "FUENTE DEL MAPA", + "Map source": "Fuente del mapa", + "Style": "Estilo", + "DISPLAY": "VISUALIZACIÓN", + "Intelligence HUD (H)": "HUD de inteligencia (H)", + "Layout": "Disposición", + "HUD layout": "Disposición del HUD", + "Tactical": "Táctica", + "Operator": "De operador", + "Minimal": "Mínima", + "Detection Overlay (D)": "Superposición de detección (D)", + "Detection overlay": "Superposición de detección", + "DETECT": "DETECTAR", + "Density": "Densidad", + "Detection label density": "Densidad de etiquetas de detección", + "Allocation": "Asignación", + "Detection label allocation": "Asignación de etiquetas de detección", + "Elastic": "Elástica", + "Weighted": "Ponderada", + "Fade": "Desvanecido", + "Detection fade distance": "Distancia de desvanecimiento de detección", + "World-overlay fade distance outside the keyhole as a percentage of its radius": "Distancia de desvanecimiento de la superposición del mundo fuera del ojo de cerradura, como porcentaje de su radio", + "Outside": "Exterior", + "Detection opacity outside the keyhole": "Opacidad de detección fuera del ojo de cerradura", + "World-overlay label and card opacity beyond the fade distance": "Opacidad de etiquetas y tarjetas de la superposición del mundo más allá de la distancia de desvanecimiento", + "PARAMETERS": "PARÁMETROS", + "3D aircraft — flat icons zoomed out, 3D models up close": "Aeronaves 3D — iconos planos de lejos, modelos 3D de cerca", + "Models": "Modelos", + "3D model coverage": "Cobertura de modelos 3D", + "Proximity": "Proximidad", + "All": "Todos", + "Scope — the circular viewport mask": "Mirilla — la máscara circular del visor", + "Scope": "Mirilla", + "Feather": "Difuminado", + "Scope edge feather as a percentage of the keyhole radius": "Difuminado del borde de la mirilla como porcentaje del radio del ojo de cerradura", + "Celestial ring — reveal the full globe": "Anillo celestial — muestra el globo completo", + "Celestial": "Celeste", + "Hide UI chrome": "Ocultar los elementos de la interfaz", + "Clean UI": "Interfaz limpia", + "Bloom / Glow": "Bloom / Resplandor", + "Bloom": "Bloom", + "Sharpening": "Nitidez", + "Sharpen": "Nitidez", + "LOCATION": "UBICACIÓN", + "Pin location tray": "Fijar bandeja de ubicación", + "Keep location tray open": "Mantener abierta la bandeja de ubicación", + "📍 Location: --": "📍 Ubicación: --", + "Landmark: --": "Punto de interés: --", + "Search any location": "Buscar cualquier ubicación", + "Search any location...": "Buscar cualquier ubicación...", + "LEVEL": "NIVEL", + "Estimated destination direction": "Dirección estimada del destino", + "DEST ---°": "DEST ---°", + "OPTICAL PLANE · 01": "PLANO ÓPTICO · 01", + "VISOR LOCK · ACTIVE": "BLOQUEO DE VISERA · ACTIVO", + "FIRST PERSON": "PRIMERA PERSONA", + "LIVE TRACK · COURSE ALIGNED": "RASTREO EN VIVO · RUMBO ALINEADO", + "Cockpit vision style": "Estilo de visión de la cabina", + "Current aircraft heading": "Rumbo actual de la aeronave", + "GROUND SPEED · KTS": "VEL. SUELO · KTS", + "ALTITUDE · FT": "ALTITUD · FT", + "PREV": "ANT", + "Previous cockpit vision style": "Estilo de visión de cabina anterior", + "Previous vision style": "Estilo de visión anterior", + "Current cockpit vision style: NORMAL. Activate for next style.": "Estilo de visión de cabina actual: NORMAL. Actívalo para pasar al siguiente estilo.", + "Current style: NORMAL — click for next": "Estilo actual: NORMAL — haz clic para el siguiente", + "NEXT": "SIG", + "Next cockpit vision style": "Siguiente estilo de visión de cabina", + "Next vision style": "Siguiente estilo de visión", + "View switcher": "Selector de vistas", + "Reset cockpit to full globe view": "Restablecer la cabina a la vista de globo completo", + "Exit cockpit and return to full globe view": "Salir de la cabina y volver a la vista de globo completo", + "RESET": "RESTABLECER", + "Exit cockpit view": "Salir de la vista de cabina", + "Estimated flight plan": "Plan de vuelo estimado", + "ESTIMATED FLIGHT PLAN": "PLAN DE VUELO ESTIMADO", + "ROUTE DATA UNAVAILABLE": "DATOS DE RUTA NO DISPONIBLES", + "FROM": "DESDE", + "TO": "HACIA", + "UNKNOWN": "DESCONOCIDO", + "Cockpit briefing carousel": "Carrusel de información de la cabina", + "Cockpit briefing controls": "Controles de información de la cabina", + "Previous briefing page": "Página de información anterior", + "Next briefing page": "Página de información siguiente", + "Cycle briefing pages automatically every 9 seconds (Signals → News → Local). Pauses while you hover or focus the panel. Live signal data refreshes continuously either way.": "Cambia las páginas de información automáticamente cada 9 segundos (Señales → Noticias → Local). Se pausa mientras pasas el cursor por el panel o lo enfocas. Los datos de señales en vivo se actualizan continuamente de todos modos.", + "Collapse cockpit briefing panel": "Contraer el panel de información de la cabina", + "Collapse briefing panel": "Contraer el panel de información", + "Live signals": "Señales en vivo", + "Latest regional news": "Últimas noticias regionales", + "Location-based information": "Información basada en la ubicación", + "ACQUIRING REGIONAL NEWS": "OBTENIENDO NOTICIAS REGIONALES", + "RESOLVING REGION": "DETERMINANDO REGIÓN", + "TEMP": "TEMP", + "WIND": "VIENTO", + "SKY": "CIELO", + "PRECIP": "PRECIP", + "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "EVENTOS CON FUENTE · SIN NOTICIAS SINTÉTICAS", + "Show Live Signals": "Mostrar Señales en vivo", + "Show Regional News": "Mostrar Noticias regionales", + "Show Local Info": "Mostrar Información local", + "Contact cockpit summary": "Resumen de contacto de la cabina", + "Contact navigation": "Navegación de contactos", + "Previous — prior visited contact in the 250 km window": "Anterior — contacto ya visitado en la ventana de 250 km", + "Next — nearest unvisited contact in the 250 km window": "Siguiente — contacto sin visitar más cercano en la ventana de 250 km", + "Collapse Contact panel": "Contraer el panel de contacto", + "Collapse contact panel": "Contraer el panel de contacto", + "CONTEXT ONLY": "SOLO CONTEXTO", + "Nearby cohort counts": "Recuento de grupos cercanos", + "NEAREST OBSERVED / MAPPED": "MÁS CERCANO OBSERVADO / MAPEADO", + "NO AVAILABLE EXAMPLE": "SIN EJEMPLO DISPONIBLE", + "AVAILABLE INPUTS ONLY · NOT AN ALL-CLEAR": "SOLO DATOS DISPONIBLES · NO IMPLICA TODO DESPEJADO", + "Enable cockpit weather effects": "Activar los efectos climáticos de la cabina", + "CONTEXT": "CONTEXTO", + "Expand panel": "Expandir panel", + "Context mode": "Modo de contexto", + "CONTACTS": "CONTACTOS", + "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Ronda por los contactos más cercanos del tipo que elijas — aeronaves, embarcaciones, instalaciones. Los satélites se rastrean por separado.", + "SPACE MISSIONS": "MISIONES ESPACIALES", + "SELECT CONTEXT": "SELECCIONAR CONTEXTO", + "Contact Context actions": "Acciones de contexto de contacto", + "COCKPIT": "CABINA", + "SEARCH NEARBY SITES": "BUSCAR SITIOS CERCANOS", + "Reclassify tracked contact as TR-3B": "Reclasificar el contacto rastreado como TR-3B", + "Reclassify as TR-3B": "Reclasificar como TR-3B", + "CONTACTS CONTEXT OFF": "CONTEXTO DE CONTACTOS DESACTIVADO", + "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "SELECCIONA CONTACTOS PARA CARGAR LA PROXIMIDAD OBSERVADA / MAPEADA", + "Available Space Missions": "Misiones espaciales disponibles", + "AVAILABLE MISSIONS": "MISIONES DISPONIBLES", + "SELECT A MISSION TO INSPECT": "SELECCIONA UNA MISIÓN PARA INSPECCIONAR", + "LOADING 30-DAY MISSION INDEX": "CARGANDO ÍNDICE DE MISIONES DE 30 DÍAS", + "Open compact Radio controls": "Abrir los controles compactos de Radio", + "Compact Radio controls": "Controles compactos de Radio", + "RADIO": "RADIO", + "RADIO READY": "RADIO LISTA", + "Open detailed Radio controls": "Abrir los controles detallados de Radio", + "Close compact Radio controls": "Cerrar los controles compactos de Radio", + "ENABLE": "ACTIVAR", + "Previous filtered radio station": "Emisora de radio filtrada anterior", + "Previous station": "Emisora anterior", + "Play selected radio station": "Reproducir la emisora de radio seleccionada", + "Play": "Reproducir", + "Next filtered radio station": "Siguiente emisora de radio filtrada", + "Next station": "Siguiente emisora", + "VOLUME": "VOLUMEN", + "Compact Radio volume": "Volumen de la Radio compacta", + "Cockpit display and Radio controls": "Controles de visualización y Radio de la cabina", + "Expand Cockpit display options": "Expandir las opciones de visualización de la cabina", + "Cockpit display options": "Opciones de visualización de la cabina", + "Expand Cockpit Radio controls": "Expandir los controles de Radio de la cabina", + "Cockpit compact Radio controls": "Controles compactos de Radio de la cabina", + "Cockpit Radio volume": "Volumen de la Radio de la cabina", + "Expand {name}": "Expandir {name}", + "Collapse {name}": "Contraer {name}", + "panel": "panel", + "Collapse Radio": "Contraer Radio", + "Collapse Radio section": "Contraer la sección de Radio", + "Searched location": "Ubicación buscada", + "Disable cockpit weather effects": "Desactivar los efectos climáticos de la cabina", + "ON": "ACTIVADO", + "OFF": "DESACTIVADO", + "Restore real aircraft": "Restaurar la aeronave real", + "Night vision": "Visión nocturna", + "Thermal": "Térmica", + "Current cockpit vision style: {style}. Activate for next style.": "Estilo de visión de cabina actual: {style}. Actívalo para pasar al siguiente estilo.", + "Current style: {style} — click for next": "Estilo actual: {style} — haz clic para el siguiente", + "TRACK ACQUIRED": "RASTREO ADQUIRIDO", + "{label} · COURSE {heading}°": "{label} · RUMBO {heading}°", + "Select flight {title}": "Seleccionar el vuelo {title}", + "CONTEXT STANDBY": "CONTEXTO EN ESPERA", + "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "ACTIVAR CONTEXTO GLOBAL PARA PINGS DE PROXIMIDAD", + "CONTACT LOST · {subject}": "CONTACTO PERDIDO · {subject}", + "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "EL OBJETIVO SALIÓ DE SU FUENTE · LA LECTURA CONSERVA EL ÚLTIMO DATO CONOCIDO", + "MILITARY FLIGHT": "VUELO MILITAR", + "COMMERCIAL FLIGHT": "VUELO COMERCIAL", + "{aircraftClass} · CURRENT": "{aircraftClass} · ACTUAL", + "{aircraftClass} · {distance}": "{aircraftClass} · {distance}", + "DISTANCE UNKNOWN": "DISTANCIA DESCONOCIDA", + "{count} INPUTS UNKNOWN": { + "one": "{count} DATO DESCONOCIDO", + "other": "{count} DATOS DESCONOCIDOS" + }, + "SOURCE STATUS UNAVAILABLE": "ESTADO DE FUENTE NO DISPONIBLE", + "AIRCRAFT": "AERONAVE", + "MILITARY": "MILITAR", + "COMMERCIAL": "COMERCIAL", + "ACQUIRING SURFACE": "OBTENIENDO SUPERFICIE", + "SURFACE FALLBACK": "RESPALDO DE SUPERFICIE", + "STALE FEED": "FUENTE DESACTUALIZADA", + "LIVE TRACK": "RASTREO EN VIVO", + "{aircraftClass} · {feedState} · COURSE ALIGNED": "{aircraftClass} · {feedState} · RUMBO ALINEADO", + "ARROW · ESTIMATED DIRECTION": "FLECHA · DIRECCIÓN ESTIMADA", + "DEST {bearing}": "DEST {bearing}", + "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "CONTACTO PERDIDO · ÚLTIMA LECTURA CONOCIDA · NO IMPLICA TODO DESPEJADO", + "{count} INPUTS UNKNOWN · NOT AN ALL-CLEAR": { + "one": "{count} DATO DESCONOCIDO · NO IMPLICA TODO DESPEJADO", + "other": "{count} DATOS DESCONOCIDOS · NO IMPLICA TODO DESPEJADO" + }, + "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "DATOS DISPONIBLES ACTUALIZADOS · NO IMPLICA TODO DESPEJADO", + "{cohort} · {contact}": "{cohort} · {contact}", + "{cohort}, Unavailable": "{cohort}, no disponible", + "BRG —": "BRG —", + "AHEAD": "AL FRENTE", + "{side} {angle}": "{side} {angle}", + "L": "I", + "R": "D", + "Expand Contact panel": "Expandir el panel de contacto", + "Expand contact panel": "Expandir el panel de contacto", + "Expand cockpit briefing panel": "Expandir el panel de información de la cabina", + "Expand briefing panel": "Expandir el panel de información", + "CYCLE ON": "CICLO ACTIVADO", + "CYCLE OFF": "CICLO DESACTIVADO", + "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Detén el cambio automático de páginas. Anterior, Siguiente y las pestañas SIG/NEWS/LOCAL siguen disponibles.", + "REGIONAL NEWS": "NOTICIAS REGIONALES", + "LOCAL INFO": "INFORMACIÓN LOCAL", + "LATEST LOCATION-MATCHED REPORTING": "ÚLTIMOS REPORTES SEGÚN UBICACIÓN", + "PLACE / CONDITIONS / POSITION": "LUGAR / CONDICIONES / POSICIÓN", + "POSITION UNAVAILABLE": "POSICIÓN NO DISPONIBLE", + "REGIONAL NEWS UNAVAILABLE": "NOTICIAS REGIONALES NO DISPONIBLES", + "REGION UNAVAILABLE": "REGIÓN NO DISPONIBLE", + "NO RECENT LOCATION MATCHES": "SIN COINCIDENCIAS RECIENTES DE UBICACIÓN", + "SOURCE": "FUENTE", + "{domain} · {age}": "{domain} · {age}", + "{source} · LOCATION QUERY": "{source} · CONSULTA POR UBICACIÓN", + "TIME UNKNOWN": "HORA DESCONOCIDA", + "{count}M AGO": "HACE {count} M", + "{count}H AGO": "HACE {count} H", + "{count}D AGO": "HACE {count} D", + "DIR UNKNOWN": "DIR DESCONOCIDA", + "CLOUD {pct}%": "NUBES {pct}%", + "CLOUD UNKNOWN": "NUBES DESCONOCIDAS", + "Panel layout updated — positions reset to new defaults": "Disposición de paneles actualizada — posiciones restablecidas a los nuevos valores predeterminados", + "Link copied!": "¡Enlace copiado!", + "Copy failed": "No se pudo copiar", + "Location not found": "Ubicación no encontrada", + "Search failed": "No se pudo completar la búsqueda", + "Fly to a POI first": "Ve primero a un punto de interés", + "Clearing selected data layers": "Limpiando las capas de datos seleccionadas", + "Selected data layers could not be cleared": "No se pudieron limpiar las capas de datos seleccionadas", + "ACQUIRING": "OBTENIENDO", + "entity": "entidad", + "SHARED {subject}": "{subject} COMPARTIDA", + "Shared {subject} follow expired": "El seguimiento de {subject} compartido ha caducado", + "Shared {subject} could not be restored — feed unavailable": "No se pudo restaurar {subject} compartido — fuente no disponible", + "Shared {subject} is unavailable": "{subject} compartido no está disponible", + "Context": "Contexto", + "Space Missions": "Misiones espaciales", + "{mode} could not start because another layer did not stop cleanly": "{mode} no pudo iniciarse porque otra capa no se detuvo correctamente", + "Contacts could not complete the requested transition; try again": "Contactos no pudo completar la transición solicitada; inténtalo de nuevo", + "Space Missions could not complete the requested transition; try again": "Misiones espaciales no pudo completar la transición solicitada; inténtalo de nuevo", + "Nearby installations could not be refreshed; try again": "No se pudieron actualizar las instalaciones cercanas; inténtalo de nuevo", + "Context could not restore every layer; try again": "Contexto no pudo restaurar todas las capas; inténtalo de nuevo", + "Zoom in to search mapped installations": "Haz zoom para buscar instalaciones mapeadas", + "Nearby installations refreshed": "Instalaciones cercanas actualizadas", + "That layer is unavailable in the current Context mode": "Esa capa no está disponible en el modo de contexto actual", + "start": "iniciar", + "stop": "detenerse", + "{layerId} could not {action} cleanly": "{layerId} no pudo {action} correctamente", + "Radio could not {action} cleanly": "Radio no pudo {action} correctamente", + "camera grid ready": "cuadrícula de cámaras lista", + "CCTV calibration saved": "Calibración de CCTV guardada", + "CCTV calibration reset": "Calibración de CCTV restablecida", + "CCTV layer unavailable": "Capa de CCTV no disponible", + "MAP": "MAPA", + "CONTACTS — nearest planes · vessels · sites": "CONTACTOS — aeronaves · embarcaciones · sitios más cercanos", + "SPACE MISSIONS — launches & orbital assets": "MISIONES ESPACIALES — lanzamientos y activos orbitales", + "Space Missions cancellation could not restore the previous layer state": "La cancelación de Misiones espaciales no pudo restaurar el estado previo de las capas", + "Collapse Cockpit display options": "Contraer las opciones de visualización de la cabina", + "Collapse Cockpit Radio controls": "Contraer los controles de Radio de la cabina", + "SYNC": "SINCR.", + "{category} BAND": "BANDA {category}", + "NO STATIONS": "SIN EMISORAS", + "{name}, station {index} of {total}": "{name}, emisora {index} de {total}", + "No station available": "Sin emisoras disponibles", + "OFF AIR": "FUERA DEL AIRE", + "STATION UNAVAILABLE": "EMISORA NO DISPONIBLE", + "Pause": "Pausar", + "Resume": "Reanudar", + "selected": "seleccionada", + "nearest": "más cercana", + "{action} {target} radio station": "{action} la emisora de radio {target}", + "RADIO STATE UNCERTAIN": "ESTADO DE RADIO SIN CONFIRMAR", + "SYNCING DIRECTORY": "SINCRONIZANDO DIRECTORIO", + "SYNCING": "SINCRONIZANDO", + "station": "emisora", + "Ready": "Lista", + "VIEWSHED ON": "ÁREA VISIBLE ACTIVADA", + "FRAME · LOADING": "FOTOGRAMA · CARGANDO", + "FRAME · UNAVAILABLE": "FOTOGRAMA · NO DISPONIBLE", + "CAL · EDITED (UNSAVED)": "CAL · EDITADA (SIN GUARDAR)", + "CAL · {badge}": "CAL · {badge}", + "CALIBRATED": "CALIBRADA", + "CURATED": "CURADA", + "RAW PRIOR": "PREVIA SIN PROCESAR", + "MONITOR": "MONITOR", + "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}": "{city} · HDG {heading} · FOV {fov} · ALCANCE {range}m · {projection}{calBadge} · {provider}{status}", + "{count} cameras loaded · click a camera to activate": { + "one": "{count} cámara cargada · haz clic en una cámara para activarla", + "other": "{count} cámaras cargadas · haz clic en una cámara para activarla" + }, + "{count} cameras loaded · enable CCTV to activate": { + "one": "{count} cámara cargada · activa CCTV para activarla", + "other": "{count} cámaras cargadas · activa CCTV para activarlas" + }, + "No summary available.": "No hay resumen disponible.", + "Celestial ring — available in Normal style": "Anillo celestial — disponible en el estilo Normal", + "Detection overlay: {mode}": "Superposición de detección: {mode}", + "Detection overlay: off": "Superposición de detección: desactivada", + "SPARSE": "DISPERSA", + "BALANCED": "EQUILIBRADA", + "DENSE": "DENSA", + "Resetting to full globe view": "Restableciendo la vista de globo completo", + "Resetting cockpit to full globe view": "Restableciendo la cabina a la vista de globo completo", + "ORBIT": "ÓRBITA", + "SUMMARY": "RESUMEN", + "Awaiting telemetry...": "Esperando telemetría...", + "REC": "REC", + "Scope edge feather": "Suavizado del borde de la mirilla", + "Bloom intensity": "Intensidad del bloom", + "Sharpen intensity": "Intensidad de la nitidez", + "Search location by name or coordinates": "Buscar ubicación por nombre o coordenadas", + "Expand LOCATION": "Expandir UBICACIÓN", + "UNAVAILABLE": "NO DISPONIBLE", + "Live Flights": "Vuelos en vivo", + "Earthquakes (24h)": "Terremotos (24h)", + "No selected data layers": "No hay capas de datos seleccionadas", + "Cleared {count} data layers": { + "one": "Se limpió {count} capa de datos", + "other": "Se limpiaron {count} capas de datos" + }, + "{count} data layers could not be cleared": { + "one": "No se pudo limpiar {count} capa de datos", + "other": "No se pudieron limpiar {count} capas de datos" + }, + "Visible map targets": "Objetivos visibles en el mapa", + "CCTV": "CCTV", + "SOURCE · UNKNOWN": "FUENTE · DESCONOCIDA", + "Enable CCTV to load camera intersections": "Activa CCTV para cargar intersecciones con cámaras", + "CCTV OFF": "CCTV DESACTIVADO", + "NEAREST": "MÁS CERCANA", + "CCTV camera": "Cámara CCTV", + "FOCUS": "ENFOCAR", + "COVERAGE OFF": "COBERTURA DESACTIVADA", + "AUTO HOP OFF": "AUTO HOP DESACTIVADO", + "PROJECTION ON": "PROYECCIÓN ACTIVADA", + "CALIBRATION": "CALIBRACIÓN", + "ADJUST": "AJUSTAR", + "Drag the camera in the world: rings rotate, arrows move, handles set range/FOV": "Arrastra la cámara en el mundo: los anillos rotan, las flechas se mueven, los tiradores ajustan alcance/FOV", + "Camera pose — click a value to type": "Pose de la cámara — clic en un valor para escribirlo", + "Heading (compass °) — click to type": "Rumbo (° brújula) — clic para escribir", + "Pitch (° up/down) — click to type": "Inclinación (° arriba/abajo) — clic para escribir", + "Horizontal FOV (°) — click to type": "FOV horizontal (°) — clic para escribir", + "Range / monitor-plane distance (m) — click to type": "Alcance / distancia al plano del monitor (m) — clic para escribir", + "Mount height above ground (m) — click to type": "Altura de montaje sobre el suelo (m) — clic para escribir", + "North offset from catalog position (m) — click to type": "Desplazamiento al norte desde la posición del catálogo (m) — clic para escribir", + "East offset from catalog position (m) — click to type": "Desplazamiento al este desde la posición del catálogo (m) — clic para escribir", + "SAVE CAL": "GUARDAR CAL", + "RESET CAL": "RESTABLECER CAL", + "SCENE SUMMARY": "RESUMEN DE ESCENA", + "Enable CCTV to start camera-linked intelligence summaries.": "Activa CCTV para iniciar resúmenes de inteligencia vinculados a cámaras.", + "Internet radio and local SDR": "Radio por Internet y SDR local", + "Expand Radio": "Expandir Radio", + "Expand Radio section": "Expandir la sección de Radio", + "STATION TAG": "ETIQUETA DE EMISORA", + "Filter stations by station tag": "Filtrar emisoras por etiqueta de emisora", + "NO STATION SELECTED": "NINGUNA EMISORA SELECCIONADA", + "Enable Radio, then choose a globe marker or use next.": "Activa Radio y elige un marcador del globo o usa siguiente.", + "DIRECTORY BAND": "BANDA DEL DIRECTORIO", + "DRAG TO TUNE": "ARRASTRA PARA SINTONIZAR", + "ALL · DRAG THE NEEDLE": "TODAS · ARRASTRA LA AGUJA", + "SNAPS TO AVAILABLE STATIONS": "SE AJUSTA A EMISORAS DISPONIBLES", + "Radio playback": "Reproducción de Radio", + "Previous filtered station": "Emisora filtrada anterior", + "PLAY": "REPRODUCIR", + "Play selected station": "Reproducir la emisora seleccionada", + "Next filtered station": "Siguiente emisora filtrada", + "STOP": "DETENER", + "Stop radio playback": "Detener la reproducción de Radio", + "Radio volume": "Volumen de Radio", + "Radio off": "Radio desactivada", + "STATION SITE": "SITIO DE LA EMISORA", + "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "El audio se conecta directamente con la emisora después de pulsar reproducir. Tu IP es visible para esa emisora.", + "LOADING": "CARGANDO", + "DEGRADED": "DEGRADADO", + "STALE": "DESACTUALIZADO", + "FALLBACK": "RESPALDO", + "PARTIAL": "PARCIAL", + "UNCERTAIN": "INCIERTO", + "ENABLING": "ACTIVANDO", + "DISABLING": "DESACTIVANDO", + "Military Flights": "Vuelos militares", + "Satellites": "Satélites", + "Space Missions (30d)": "Misiones espaciales (30d)", + "Street Traffic": "Tráfico urbano", + "Radio": "Radio", + "Bikeshare": "Bicicletas compartidas", + "Live AIS Vessels": "Buques AIS en vivo", + "Mapped Installations": "Instalaciones mapeadas", + "Global Context": "Contexto global", + "Datacenters": "Centros de datos", + "Dams": "Presas", + "Submarine Cables": "Cables submarinos", + "FIRMS Active Fires": "Incendios activos FIRMS", + "just now": "justo ahora", + "{count}s ago": "hace {count}s", + "{count}m ago": "hace {count}m", + "{count}h ago": "hace {count}h", + "never": "nunca", + "loading...": "cargando...", + "UNCERTAIN · {source} · lifecycle state requires reconciliation": "INCIERTO · {source} · el estado del ciclo de vida requiere reconciliación", + "{state} · {source}": "{state} · {source}", + "{state} · {source} · {detail} · retry {seconds}s": "{state} · {source} · {detail} · reintento en {seconds}s", + "{state} · {source} · {detail}": "{state} · {source} · {detail}", + "{state} · {source} · {ago}": "{state} · {source} · {ago}", + "{state} · {source} · {ago} · retrying in {seconds}s": "{state} · {source} · {ago} · reintentando en {seconds}s", + "{source} · {loadingLabel}": "{source} · {loadingLabel}", + "{source} · {ago}": "{source} · {ago}", + "{accepted} of {raw} records accepted": "{accepted} de {raw} registros aceptados", + "incomplete snapshot": "instantánea incompleta", + "{state} · {source} · {detail} · {ago}": "{state} · {source} · {detail} · {ago}", + "{name}: {state}": "{name}: {state}", + "Type unknown": "Tipo desconocido", + "Reg unknown": "Matrícula desconocida", + "Operator unknown": "Operador desconocido", + "Alt unknown": "Altitud desconocida", + "FISHING": "PESCA", + "TOWING": "REMOLQUE", + "DREDGER": "DRAGA", + "DIVE OPS": "BUCEO", + "SAILING": "VELERO", + "PLEASURE": "RECREO", + "PILOT": "PRÁCTICO", + "SAR": "SAR", + "TUG": "REMOLCADOR", + "PORT TENDER": "AUXILIAR DE PUERTO", + "ANTI-POLLUTION": "ANTICONTAMINACIÓN", + "LAW ENFORCE": "APLICACIÓN DE LA LEY", + "MEDICAL": "MÉDICO", + "HIGH-SPEED": "ALTA VELOCIDAD", + "PASSENGER": "PASAJEROS", + "CARGO": "CARGA", + "TANKER": "PETROLERO", + "OTHER": "OTRO", + "VESSEL": "BUQUE", + "POS: LIVE": "POS: EN VIVO", + "POS: {time}Z": "POS: {time}Z", + "AIS: --": "AIS: --", + "AIS: {name}": "AIS: {name}", + "{type} SPD: {speed} HDG: {heading}": "{type} SPD: {speed} HDG: {heading}", + "awaiting first AIS position…": "esperando la primera posición AIS…", + "CCTV ON": "CCTV ACTIVADO", + "COVERAGE ON": "COBERTURA ACTIVADA", + "AUTO HOP ON": "AUTO HOP ACTIVADO", + "PROJECTION OFF": "PROYECCIÓN DESACTIVADA", + "ADJUST ON": "AJUSTE ACTIVADO", + "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} CÁMARAS EN ESPERA · NINGUNA CÁMARA SELECCIONADA · CLIC EN UNA CÁMARA PARA ACTIVARLA", + "No cameras available in catalog.": "No hay cámaras disponibles en el catálogo.", + "{city} CCTV": "CCTV de {city}", + "HDG {value}°": "HDG {value}°", + "HDG {value}° (ESTIMATED)": "HDG {value}° (ESTIMADO)", + "FOV {value}°": "FOV {value}°", + "COVERAGE {value}km²": "COBERTURA {value}km²", + "OVERLAP {count} cams": "SOLAPE {count} cáms", + "ISOLATED VIEW": "VISTA AISLADA", + "PROJ MONITOR": "PROY MONITOR", + "PROJ OFF": "PROY DESACT", + "VIEWSHED": "ÁREA VISIBLE", + "CAL {value}": "CAL {value}", + "SRC {value}": "SRC {value}", + "{value} CONTEXT": "{value} CONTEXTO", + "News": "Noticias", + "Talk": "Debate", + "Weather / Emergency": "Clima / Emergencias", + "Public Safety": "Seguridad pública", + "Aviation / Marine": "Aviación / Marítima", + "Traffic / Transit": "Tráfico / Tránsito", + "Music": "Música", + "Other": "Otros", + "NO STATION AVAILABLE": "NINGUNA EMISORA DISPONIBLE", + "DISABLE": "DESACTIVAR", + "RECONCILE": "RECONCILIAR", + "Enable Radio": "Activar Radio", + "Disable Radio": "Desactivar Radio", + "Reconcile Radio — lifecycle uncertain": "Reconciliar Radio — ciclo de vida incierto", + "Loading station directory…": "Cargando el directorio de emisoras…", + "Directory metadata only": "Solo metadatos del directorio", + "Choose a globe marker or use next.": "Elige un marcador del globo o usa siguiente.", + "TAGS · {tags}": "ETIQUETAS · {tags}", + "Ready — playback starts only from your action": "Lista — la reproducción comienza solo con tu acción", + "Connecting directly to broadcaster…": "Conectando directamente con la emisora…", + "Buffering broadcaster stream…": "Almacenando en búfer el flujo de la emisora…", + "Playing {station}": "Reproduciendo {station}", + "Paused {station}": "En pausa {station}", + "Broadcaster stream unavailable": "Flujo de la emisora no disponible", + " · degraded directory": " · directorio degradado", + " · stale directory": " · directorio desactualizado", + " · stale/degraded directory": " · directorio desactualizado/degradado", + " · outside current filter": " · fuera del filtro actual", + " · muted during voice interaction": " · silenciado durante la interacción de voz", + " · restoring volume after voice": " · restaurando el volumen tras la voz", + " · static indicates no broadcaster audio": " · la estática indica que no hay audio de la emisora", + " · tuning static until broadcaster starts": " · estática de sintonía hasta que la emisora comience", + "Station unavailable after directory refresh — choose another channel": "Emisora no disponible tras actualizar el directorio — elige otro canal", + "Radio is enabling…": "Activando Radio…", + "Radio is disabling…": "Desactivando Radio…", + "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "El ciclo de vida de Radio es incierto — usa Activar o Desactivar para reconciliar", + "LAUNCH SITE": "LUGAR DE LANZAMIENTO", + "LAUNCH SITE · {site}": "LUGAR DE LANZAMIENTO · {site}", + "SELECTED SPACE MISSION": "MISIÓN ESPACIAL SELECCIONADA", + "Show all missions": "Mostrar todas las misiones", + "Deselect mission": "Deseleccionar misión", + "MISSION": "MISIÓN", + "STATUS · ": "ESTADO · ", + "LAUNCH SITE · ": "LUGAR DE LANZAMIENTO · ", + "LAUNCH TIME · ": "HORA DE LANZAMIENTO · ", + "ORBIT · ": "ÓRBITA · ", + "ASCENT PATH · ": "TRAYECTORIA DE ASCENSO · ", + "CURRENT DISTANCE FROM EARTH · ": "DISTANCIA ACTUAL A LA TIERRA · ", + "SATELLITE SPEED · ": "VELOCIDAD DEL SATÉLITE · ", + "PAYLOAD": "CARGA ÚTIL", + "NAME": "NOMBRE", + "TYPE": "TIPO", + "DESTINATION": "DESTINO", + "STAGE / RE-ENTRY / RECOVERY": "ETAPA / REENTRADA / RECUPERACIÓN", + "STAGE": "ETAPA", + "STATUS": "ESTADO", + "FINAL POSITION": "POSICIÓN FINAL", + "Previous mission": "Misión anterior", + "Next mission": "Misión siguiente", + "SHOW ALL / DESELECT": "MOSTRAR TODAS / DESELECCIONAR", + "NO MISSIONS AVAILABLE IN THE CURRENT 30-DAY WINDOW": "SIN MISIONES DISPONIBLES EN LA VENTANA ACTUAL DE 30 DÍAS", + "{count} / 30D": "{count} / 30D", + "DATE UNAVAILABLE": "FECHA NO DISPONIBLE", + "UNSPECIFIED OPERATOR": "OPERADOR NO ESPECIFICADO", + "Select {mission}": "Seleccionar {mission}", + "+{count} additional payload records": "+{count} registros de carga útil adicionales", + "PAYLOAD DATA UNAVAILABLE": "DATOS DE CARGA ÚTIL NO DISPONIBLES", + "NO STAGE RE-ENTRY / RECOVERY DATA": "SIN DATOS DE REENTRADA / RECUPERACIÓN DE ETAPA", + "UNSPECIFIED": "NO ESPECIFICADO", + "FLIGHT {count}": "VUELO {count}", + "REUSED": "REUTILIZADO", + "{value} KM DOWNRANGE": "{value} KM DE TRAYECTORIA", + "PLANNED · ": "PLANIFICADA · ", + "SUPPLIED TRAJECTORY POINTS": "PUNTOS DE TRAYECTORIA SUMINISTRADOS", + "RECONSTRUCTED ESTIMATE": "ESTIMACIÓN RECONSTRUIDA", + "{value} KM": "{value} KM", + "{value} KM/S": "{value} KM/S", + "REPLAY ASCENT": "REPETIR ASCENSO", + "Replay the estimated ascent with a following camera": "Reproduce el ascenso estimado con una cámara de seguimiento", + "Pause replay": "Pausar repetición", + "Resume replay": "Reanudar repetición", + "Cancel replay": "Cancelar repetición", + "REPLAY SPEED": "VELOCIDAD DE REPETICIÓN", + "Replay speed multiplier": "Multiplicador de velocidad de repetición", + "T−{time} · {mission}": "T−{time} · {mission}", + "LAUNCH STANDBY": "EN ESPERA DE LANZAMIENTO", + "LIFTOFF · {mission}": "DESPEGUE · {mission}", + "ASCENT REPLAY · {mission}": "REPETICIÓN DEL ASCENSO · {mission}", + "ASCENT ESTIMATE · {mission}": "ESTIMACIÓN DEL ASCENSO · {mission}", + "STAGE RE-ENTRY / RECOVERY · {mission}": "REENTRADA / RECUPERACIÓN DE ETAPA · {mission}", + "ORBIT REPLAY · {mission}": "REPETICIÓN EN ÓRBITA · {mission}", + "PAUSED · {title}": "EN PAUSA · {title}", + "T minus {seconds}": "T menos {seconds}", + "Preparing launch site": "Preparando el lugar de lanzamiento", + "Liftoff": "Despegue", + "Ascent replay": "Repetición del ascenso", + "Orbit replay": "Repetición en órbita", + ", paused": ", en pausa", + "DENSE ···": "DENSO ···", + "DENSE ✕": "DENSO ✕", + "Add the full Starlink broadband shell (thousands of extra points)": "Añade la capa completa de banda ancha de Starlink (miles de puntos extra)", + "Loading the Starlink shell…": "Cargando la capa de Starlink…", + "Starlink {detail} — click to retry": "Starlink {detail} — clic para reintentar", + "load failed": "carga fallida", + "Showing the full Starlink shell — click for the core catalog only": "Mostrando la capa completa de Starlink — clic para ver solo el catálogo principal", + "STATION": "ESTACIÓN", + "Crewed stations and their visiting vehicles": "Estaciones tripuladas y sus vehículos de visita", + "NAV": "NAVEGACIÓN", + "GNSS navigation — GPS, GLONASS, Galileo": "Navegación GNSS — GPS, GLONASS, Galileo", + "GEO": "GEO", + "Geostationary belt — comms and weather, fixed over the equator": "Cinturón geoestacionario — comunicaciones y meteorología, fijos sobre el ecuador", + "VISUAL": "VISUAL", + "Brightest naked-eye objects — CelesTrak visual group": "Objetos más brillantes a simple vista — grupo visual de CelesTrak", + "COMMS": "COMUNICACIONES", + "Broadband constellation shell — shown only in DENSE mode": "Capa de constelación de banda ancha — visible solo en modo DENSO", + "refreshing...": "actualizando...", + "KEY REQUIRED": "CLAVE REQUERIDA", + "STALE · cached {age}": "DESACTUALIZADO · en caché hace {age}", + "LIVE · updated {age}": "EN VIVO · actualizado hace {age}", + "<1m ago": "hace <1m", + "FIRE · {frp} MW": "INCENDIO · {frp} MW", + "▲ {frp} MW": "▲ {frp} MW", + "FIRE": "INCENDIO", + "FIRES": "INCENDIOS", + "{value} conf": "{value} conf", + "{value} ago": "hace {value}", + "max {value} MW": "máx {value} MW", + "new {value}": "nueva hace {value}", + "NIGHT": "NOCHE", + "sensor n/a": "sensor n/d", + "Focus fire detection {title}, {details}": "Enfocar la detección de incendio {title}, {details}", + "SIMULATED — traffic service unreachable": "SIMULADO — servicio de tráfico inaccesible", + "SIMULATED — add TomTom key for live": "SIMULADO — añade una clave de TomTom para datos en vivo", + "syncing {count} city feeds...": "sincronizando {count} fuentes de ciudades...", + "scanning nearby systems...": "escaneando sistemas cercanos...", + "🚲 {bikes} avail · {docks} docks · {capacity} cap": "🚲 {bikes} disp · {docks} anclajes · {capacity} cap", + "⚠️ Not installed": "⚠️ No instalada", + "⚠️ Not renting": "⚠️ No alquila", + "⚠️ Not returning": "⚠️ No admite devoluciones", + "Station": "Estación", + "Station {id}": "Estación {id}", + "MAPPED INSTALLATION": "INSTALACIÓN MAPEADA", + "loading mapped installation context": "cargando contexto de instalaciones mapeadas", + "Overpass rate-limited": "Overpass con límite de peticiones", + "Overpass timed out": "Overpass agotó el tiempo de espera", + "Overpass could not complete the query": "Overpass no pudo completar la consulta", + "Overpass temporarily unavailable": "Overpass temporalmente no disponible", + "Retrying mapped sites…": "Reintentando sitios mapeados…", + "Fetching mapped sites…": "Obteniendo sitios mapeados…", + "{reason} — retrying in {seconds}s": "{reason} — reintentando en {seconds}s", + "{reason} — retry pending": "{reason} — reintento pendiente", + "Showing cached mapped sites": "Mostrando sitios mapeados en caché", + "Mapped sites not loaded": "Sitios mapeados sin cargar", + "Mapped sites loaded": "Sitios mapeados cargados", + "CONTEXT READY": "CONTEXTO LISTO", + "GLOBAL CONTEXT OFF": "CONTEXTO GLOBAL DESACTIVADO", + "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "SELECCIONA UN VUELO, BUQUE U INSTALACIÓN MAPEADA", + "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "ACTIVA PARA CARGAR PROXIMIDAD OBSERVADA / MAPEADA", + "Global Context navigation": "Navegación del Contexto global", + "PREVIOUS": "ANTERIOR", + "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Contexto mapeado/observado de fuentes abiertas. Las transmisiones ausentes, las zonas del mapa sin cargar o los sitios sin mapear no son evidencia de ausencia.", + "Unavailable": "No disponible", + "Focus {label}": "Enfocar {label}", + "Flights": "Vuelos", + "Military flights": "Vuelos militares", + "AIS vessels": "Buques AIS", + "Mapped installations": "Instalaciones mapeadas", + "CURRENT VIEWPORT ONLY": "SOLO LA VENTANA VISIBLE ACTUAL", + "BRG {value}°": "BRG {value}°", + "CRS {value}°": "CRS {value}°", + "feed unavailable": "fuente no disponible", + "feed stale": "fuente desactualizada", + "observed or mapped nearby context": "contexto cercano observado o mapeado", + "no observed or mapped objects in current feeds": "sin objetos observados o mapeados en las fuentes actuales", + "CONDITIONS UNKNOWN": "CONDICIONES DESCONOCIDAS", + "CLEAR": "DESPEJADO", + "PARTLY CLOUDY": "PARCIALMENTE NUBLADO", + "OVERCAST": "CUBIERTO", + "FOG": "NIEBLA", + "DRIZZLE": "LLOVIZNA", + "RAIN": "LLUVIA", + "SNOW": "NIEVE", + "RAIN SHOWERS": "CHUBASCOS", + "SNOW SHOWERS": "CHUBASCOS DE NIEVE", + "THUNDERSTORM": "TORMENTA", + "MIXED CONDITIONS": "CONDICIONES MIXTAS", + "TAB PREVIEWS · ENTER / SPACE SELECTS": "TAB VISTAS PREVIAS · INTRO / ESPACIO SELECCIONA", + "awaiting usable AIS positions…": "esperando posiciones AIS utilizables…", + "awaiting first AIS message…": "esperando el primer mensaje AIS…", + "EST. DOWNRANGE": "DIST. ESTIMADA", + "MISSION CONTROL · FIRST LAUNCH": "CENTRO DE MANDO · PRIMER INICIO", + "Choose your first view": "Elige tu primera vista", + "LIVE CONTACTS": "CONTACTOS EN VIVO", + "Don't show this again": "No volver a mostrar", + "POWER UP": "ENCENDER", + "GROUND STATION · PROVIDER SETTINGS": "ESTACIÓN TERRENA · AJUSTES DE PROVEEDORES", + "Power up the globe": "Enciende el globo", + "SAVE KEYS": "GUARDAR CLAVES", + "Saving…": "Guardando…", + "It feels like a forbidden cockpit—then you realize the sources are public and the data is real.": "Parece una cabina prohibida—hasta que descubres que las fuentes son públicas y los datos son reales.", + "Aircraft, vessels and nearby intelligence": "Aviones, barcos e inteligencia cercana", + "Launches, spacecraft and orbital context": "Lanzamientos, naves y contexto orbital", + "EXPLORE MANUALLY": "EXPLORAR MANUALMENTE", + "Begin with a clean globe": "Empieza con un globo limpio", + "ESC to dismiss": "ESC para cerrar", + "Tip: the GEV MIC button in the dock lets you talk to the map.": "Consejo: el botón MIC de GEV en el dock te permite hablar con el mapa.", + "Close key setup": "Cerrar la configuración de claves", + "The globe already flies keyless. Every key below switches on another real feed — paste one and it's saved into this app's local configuration, then the server restarts itself. Server-side keys stay on this machine; Google Maps and Cesium ion run in the browser and must be provider-restricted. Keys you configured elsewhere are shown but never touched.": "El globo ya vuela sin claves. Cada clave de abajo activa otra fuente real — pega una y queda guardada en la configuración local de esta app, y luego el servidor se reinicia solo. Las claves del servidor se quedan en esta máquina; Google Maps y Cesium ion funcionan en el navegador y sus claves deben estar restringidas por el proveedor. Las claves que configuraste en otro lugar se muestran, pero nunca se modifican.", + "ESC to close": "ESC para cerrar", + "The Google Maps key buys the photorealistic planet — everything else stacks on top.": "La clave de Google Maps compra el planeta fotorrealista — todo lo demás se monta encima.", + "SCENES": "ESCENAS", + "Scene recipe": "Receta de escena", + "NEW": "NUEVA", + "DEL": "BORRAR", + "CAPTURE SHOT": "CAPTURAR PLANO", + "UPDATE SHOT": "ACTUALIZAR PLANO", + "START": "INICIAR", + "EXPORT PRESETS": "EXPORTAR PREAJUSTES", + "IMPORT": "IMPORTAR", + "RUN LOG": "REGISTRO DE EJECUCIÓN", + "Starting live contacts…": "Iniciando contactos en vivo…", + "Opening space missions…": "Abriendo misiones espaciales…", + "Scanning active events…": "Escaneando eventos activos…", + "Working…": "Trabajando…", + "Could not open that mission{detail}. Retry or explore manually.": "No se pudo abrir esa misión{detail}. Reintenta o explora manualmente.", + "This browser is blocking storage, so that could not be saved.": "Este navegador bloquea el almacenamiento, así que no se pudo guardar.", + "Live earthquakes and active fires, from USGS and NASA": "Terremotos en vivo y fuegos activos, de USGS y NASA", + "ENVIRONMENTAL": "MEDIO AMBIENTE", + "EARTH WATCH": "VIGILANCIA TERRESTRE", + "ACTIVE EVENTS": "EVENTOS ACTIVOS", + "POWER UP · {count} KEYS WAITING": { + "one": "ENCENDER · {count} CLAVE EN ESPERA", + "other": "ENCENDER · {count} CLAVES EN ESPERA" + }, + "POWERED UP": "ENCENDIDO", + "Save failed ({status}).": "Error al guardar ({status}).", + "Save failed: {detail}": "Error al guardar: {detail}", + "Paste at least one key first.": "Pega al menos una clave primero.", + "Saved to {store}. Restarting — this page reloads itself.": "Guardado en {store}. Reiniciando — esta página se recarga sola.", + "Removed from {store}. Restarting — this page reloads itself.": "Eliminado de {store}. Reiniciando — esta página se recarga sola.", + "your app configuration": "tu configuración de la app", + "your local .env": "tu .env local", + "Remove this key from your saved configuration?": "¿Eliminar esta clave de tu configuración guardada?", + "This map stack": "Este conjunto de mapas", + "{label} is unavailable": "{label} no está disponible", + "{label} unavailable: {hint}": "{label} no disponible: {hint}", + "Global Flights Radar": "Radar global de vuelos", + "Orbital Watch": "Vigilancia orbital", + "Thermal Threat Board": "Panel de amenazas térmicas", + "City Overload": "Sobrecarga urbana", + "Omniscience Pullback": "Alejamiento omnisciente", + "CONNECTING": "CONECTANDO", + "LISTENING": "ESCUCHANDO", + "EXECUTING": "EJECUTANDO", + "ERROR": "ERROR", + "Session ended — cost cap {cost}": "Sesión finalizada — límite de costo {cost}", + "VOICE STANDBY": "VOZ EN ESPERA", + "VOICE ACTIVE": "VOZ ACTIVA", + "VOICE UNAVAILABLE": "VOZ NO DISPONIBLE", + "WebRTC microphone support unavailable": "Compatibilidad con micrófono WebRTC no disponible", + "Requesting microphone": "Solicitando micrófono", + "Hold Space to talk": "Mantén Espacio para hablar", + "Release Space to send": "Suelta la barra espaciadora para enviar", + "Ask or command": "Pregunta o ordena", + "Voice off": "Voz desactivada", + "Running command": "Ejecutando comando", + "Radio did not start": "La radio no se inició", + "Hold Space to speak · tap Space to activate focused controls": "Mantén presionada la barra espaciadora para hablar · púlsala brevemente para activar los controles enfocados", + "Voice session could not be started.": "No se pudo iniciar la sesión de voz.", + "VOICE SYSTEM ERROR": "ERROR DEL SISTEMA DE VOZ", + "DISMISS": "CERRAR", + "Check microphone permission and network access, then try again.": "Revisa el permiso del micrófono y el acceso a la red, y vuelve a intentarlo.", + "AI AGENT": "AGENTE DE IA", + "VOICE CONTROL": "CONTROL DE VOZ", + "{tier} applies next session": "{tier} se aplica en la próxima sesión", + "Voice model tier — applies next session": "Nivel del modelo de voz — se aplica en la próxima sesión", + "Estimated session cost": "Costo estimado de la sesión", + "Voice control — activate to toggle voice; hold Space to speak": "Control de voz — actívalo para conectar o cortar la voz; mantén presionada la barra espaciadora para hablar", + "Cannot capture shot: camera not ready": "No se puede capturar el plano: la cámara no está lista", + "Shot {n}": "Plano {n}", + "Captured: {scene} / {shot}": "Capturado: {scene} / {shot}", + "Select a shot first": "Selecciona primero un plano", + "Updated: {scene} / {shot}": "Actualizado: {scene} / {shot}", + "Delete shot \"{shot}\"?": "¿Eliminar el plano \"{shot}\"?", + "Loaded: {scene} / {shot}": "Cargado: {scene} / {shot}", + "Camera unavailable — exit cockpit first": "Cámara no disponible — sal primero de la cabina", + "No shots to run": "No hay planos para ejecutar", + "Running {index}/{total}: {scene} / {shot}": "Ejecutando {index}/{total}: {scene} / {shot}", + "Scene run complete": "Ejecución de escenas completada", + "Error: {message}": "Error: {message}", + "Could not exit {mode} — scene layers may be refused": "No se pudo salir de {mode} — las capas de la escena pueden rechazarse", + "REMOVE": "ELIMINAR", + "Remove {title} from this app's saved keys": "Elimina {title} de las claves guardadas de esta app", + "Needs {envVars} — add it in Provider Settings": "Necesita {envVars} — añádela en Ajustes de proveedores", + "The photorealistic 3D planet + place search": "El planeta 3D fotorrealista + búsqueda de lugares", + "Places context + Street View fallback; optional separate key": "Contexto de Places + respaldo de Street View; clave separada opcional", + "Live ships, worldwide": "Barcos en vivo, en todo el mundo", + "Live active-fire detections": "Detecciones de incendios activos en vivo", + "Real live traffic (keyless runs a simulation)": "Tráfico real en vivo (sin clave usa una simulación)", + "Bing imagery map stacks + world terrain": "Conjuntos de mapas Bing imagery + terreno mundial", + "More flight-polling credits (anonymous works without)": "Más créditos de consulta de vuelos (sin clave funciona el modo anónimo)", + "Higher space-missions request allowance": "Mayor límite de peticiones para misiones espaciales", + "Scene action failed": "La acción de escena falló", + "Project exported": "Proyecto exportado", + "Next session: {pendingId} — this session stays on {modelId}": "Sesión siguiente: {pendingId} — esta sesión sigue en {modelId}", + "Voice model: {pendingId} — click to switch to {target}; applies next session": "Modelo de voz: {pendingId} — toca para cambiar a {target}; se aplica en la próxima sesión", + "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Coste de sesión estimado en {modelId} — {responses} respuesta(s). Avisa a {warn} y cierra la sesión a {cap}." +} diff --git a/src/ui/styles/cctv.css b/src/ui/styles/cctv.css index ece71c732..38261d501 100644 --- a/src/ui/styles/cctv.css +++ b/src/ui/styles/cctv.css @@ -70,6 +70,14 @@ margin-bottom: 0; } +/* Spanish labels run ~25% longer than English and overflow the nowrap + .scene-btn rows inside the fixed-width CCTV panel (e.g. ENFOCAR · + COBERTURA DESACTIVADA · AUTO HOP DESACTIVADO). Let the rows wrap under + es only; the English layout stays pixel-identical. */ +html[lang='es'] .cctv-controls { + flex-wrap: wrap; +} + .cctv-calibration-block { border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 9px;