i18n: fix review findings and polish ru/es strings

Fixes the 51 P0–P2 findings from the full review of the i18n branch and
the issues found while checking every new string on screen in ru and es.

- Translate errors and statuses that still reached ru/es in English:
  feed and tile errors, provider statuses, the ALPR chip, the traffic
  mode chip, voice plan step labels, fire feed values, receiver bands,
  scene save reasons and the Cesium attribution link.
- Show preset city names in the UI language (src/ui/placeNames.js);
  data and everything sent to the model stay English.
- Share layer names between the layer panel, HUD and voice card
  (src/ui/layerNames.js).
- Keep long ru/es strings whole: voice card error lines, analyst
  titles, the voice tier status, the Nepal evidence button, the ALPR
  retry chip. English layout is unchanged.
- Ask before a language switch drops unsaved work.
- Catalog fixes: glossary terms (пуск, пресет), gender agreement and
  consistent "peticiones" in es, fewer calques in both languages.
- Fix English text that was itself wrong (e.g. "Exit cockpit to fly to
  a weather", raw tool ids in voice plan steps).

Catalogs: es/ru 2535 messages each, complete.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-15 23:49:52 +04:00
1 parent 8029747b7e
commit 00704ddc89
212 files changed
+9871 -909

No files matched your search

+558 -5
View File
@@ -10,7 +10,7 @@
"LOAD FAILED": "CARGA FALLIDA",
"LOAD CANCELLED": "CARGA CANCELADA",
"syncing road network": "sincronizando la red vial",
"retrying in {seconds}s": "reintentando en {seconds} s",
"retrying in {seconds}s": "reintento 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",
@@ -812,7 +812,7 @@
"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",
"{tier} applies next session": "{tier} desde 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 — púlsalo para activar o desactivar la voz; mantén pulsado Space para hablar",
@@ -989,7 +989,7 @@
"Coverage colours": "Colores de cobertura",
"That shape already has {count} points — finish it or press Backspace.": "Esa forma ya tiene {count} puntos — termínala o pulsa Backspace.",
"Could not place the shape: {error}": "No se pudo colocar la forma: {error}",
"{owner} is using the pointer — close it first.": "{owner} está usando el puntero — ciérralo primero.",
"{owner} is using the pointer — close it first.": "Puntero en uso: {owner}. Ciérralo primero.",
"{label} · Detailed outline unavailable": "{label} · Contorno detallado no disponible",
"Witness source": "Fuente de testigo",
"{provider} · EMBEDDED SOURCE": "{provider} · FUENTE INSERTADA",
@@ -1758,7 +1758,7 @@
"Mark {targets} +{more}": "Marcar {targets} +{more}",
"Mark {targets}": "Marcar: {targets}",
"Fly to {place}": "Volar a {place}",
"Nearest aircraft to {place}": "Aeronaves más cercanas a {place}",
"Nearest aircraft to {place}": "Aeronave más cercana a {place}",
"Read the view": "Consultar la vista",
"Check view state": "Comprobar el estado de la vista",
"Frame {target}": "Encuadrar {target}",
@@ -2208,5 +2208,558 @@
"Show your own GeoJSON, KML, KMZ or GPX files on the globe (or drop them onto it). File bytes stay on this device; overlays can appear in map screenshots shared with voice.": "Muestra en el globo tus propios archivos GeoJSON, KML, KMZ o GPX (o suéltalos sobre él). Los archivos no salen de este dispositivo; las capas pueden aparecer en capturas del mapa compartidas con la voz.",
"Import": "Importar",
"Choose GeoJSON, KML, KMZ or GPX files": "Elige archivos GeoJSON, KML, KMZ o GPX",
"Imported files": "Archivos importados"
"Imported files": "Archivos importados",
"DOCKED · {name}": "ACOPLE · {name}",
"DOCKED · {name} · +{extra}": "ACOPLE · {name} · +{extra}",
"loading coverage...": "cargando cobertura...",
"live feed unavailable": "fuente en vivo no disponible",
"GBFS fetch error": "error al obtener datos GBFS",
"GBFS status update failed": "falló la actualización del estado GBFS",
"Open the Street Level panel to view imagery": "Abre el panel \"A pie de calle\" para ver las imágenes",
"Image could not be opened": "No se pudo abrir la imagen",
"Mapillary rejected MAPILLARY_CLIENT_TOKEN — replace it in Provider Settings": "Mapillary rechazó MAPILLARY_CLIENT_TOKEN — sustitúyelo en Ajustes de proveedores",
"Coverage requests are being rate-limited — they resume on their own": "Las peticiones de cobertura están limitadas por frecuencia — se reanudan solas",
"No street-level imagery within {radius} m of that point": "No hay imágenes a pie de calle a menos de {radius} m de ese punto",
"No street-level imagery within {radius} m of the view centre": "No hay imágenes a pie de calle a menos de {radius} m del centro de la vista",
"Aim the middle of the view at a street to look for imagery there": "Apunta el centro de la vista a una calle para buscar imágenes allí",
"Street View has no imagery for this place": "Street View no tiene imágenes de este lugar",
"GOOGLE_MAPS_API_KEY is not set": "GOOGLE_MAPS_API_KEY no está configurada",
"The Google Maps JavaScript API could not load": "No se pudo cargar la API de Maps JavaScript de Google",
"Weather request timed out": "La petición del clima agotó el tiempo de espera",
"Malformed weather manifest": "Manifiesto del clima mal formado",
"Weather HTTP {status}": "Clima: HTTP {status}",
"Weather image HTTP {status}": "Imagen del clima: HTTP {status}",
"Weather prefetch unavailable": "Precarga del clima no disponible",
"Infrared decode failed": "Falló la decodificación del infrarrojo",
"rate limited": "límite de peticiones superado",
"routing service is rate limited": "el servicio de rutas superó el límite de peticiones",
"route leg too long": "tramo de la ruta demasiado largo",
"route too long": "ruta demasiado larga",
"Routing is rate limited — try again in a moment": "Se alcanzó el límite de peticiones de rutas — inténtalo de nuevo en un momento",
"{error} — try again in a moment": "{error} — inténtalo de nuevo en un momento",
"Routing unavailable (HTTP {status})": "Rutas no disponibles (HTTP {status})",
"CelesTrak unreachable": "CelesTrak inaccesible",
"KartaView is rate-limiting requests — they resume on their own": "KartaView está limitando las peticiones — se reanudan solas",
"KartaView’s photos here are archived and cannot be shown": "Las fotos de KartaView de aquí están archivadas y no se pueden mostrar",
"KartaView did not filter this area in time — move the map to ask again": "KartaView no filtró esta zona a tiempo — mueve el mapa para pedirlo de nuevo",
"None of KartaView’s photos here pass the imagery filter": "Ninguna foto de KartaView de aquí pasa el filtro de imágenes",
"KartaView did not answer in time — try again": "KartaView no respondió a tiempo — inténtalo de nuevo",
"KartaView could not be reached — check the network": "No se pudo conectar con KartaView — comprueba la red",
"KartaView sent an answer that could not be read": "KartaView envió una respuesta que no se pudo leer",
"KartaView is rate-limiting requests": "KartaView está limitando las peticiones",
"KartaView is rate-limiting requests — try again in a moment": "KartaView está limitando las peticiones — inténtalo de nuevo en un momento",
"KartaView sent too much data": "KartaView envió demasiados datos",
"KartaView has no such photo": "KartaView no tiene esa foto",
"The KartaView photo could not be loaded": "No se pudo cargar la foto de KartaView",
"KartaView has no position for this photo": "KartaView no tiene la posición de esta foto",
"Map tiles temporarily unavailable": "Teselas del mapa temporalmente no disponibles",
"Mapped names temporarily unavailable": "Nombres mapeados temporalmente no disponibles",
"No mapped sites in view": "No hay sitios mapeados a la vista",
"No mapped sites within {km} km of the contact": "No hay sitios mapeados a menos de {km} km del contacto",
"{count} mapped sites in view": {
"one": "{count} sitio mapeado a la vista",
"many": "{count} de sitios mapeados a la vista",
"other": "{count} sitios mapeados a la vista"
},
"{count} mapped sites within {km} km of the contact": {
"one": "{count} sitio mapeado a menos de {km} km del contacto",
"many": "{count} de sitios mapeados a menos de {km} km del contacto",
"other": "{count} sitios mapeados a menos de {km} km del contacto"
},
"Too many mapped sites in view to list them all": "Hay demasiados sitios mapeados a la vista para listarlos todos",
"Installation context unavailable": "Contexto de instalaciones no disponible",
"Focus vessel {name}, MMSI {mmsi}": "Enfocar el buque {name}, MMSI {mmsi}",
"Open the USGS initial report for the 26 August 2026 Nepal landslide": "Abrir el informe inicial del USGS sobre el deslizamiento del 26 de agosto de 2026 en Nepal",
"YouTube source": "Fuente de YouTube",
"Facebook source": "Fuente de Facebook",
"Military airfield": "Aeródromo militar",
"Naval base": "Base naval",
"Firing range": "Campo de tiro",
"Military land": "Terreno militar",
"Mapped installation": "Instalación mapeada",
"Military area": "Zona militar",
"SIMULATED — {reason}": "SIMULADO — {reason}",
"TomTom key unavailable": "Clave de TomTom no disponible",
"TomTom daily budget reached": "Se alcanzó el límite diario de TomTom",
"TomTom upstream unreachable": "Servidor de TomTom inaccesible",
"TomTom flow unavailable": "Flujo de TomTom no disponible",
"API key rejected — check AISSTREAM_API_KEY": "Clave de API rechazada — revisa AISSTREAM_API_KEY",
"feed silent {seconds}s — no AIS data": "fuente en silencio {seconds} s — sin datos AIS",
"feed silent — no AIS data": "fuente en silencio — sin datos AIS",
"feed down — retrying slowly (attempt {attempt})": "fuente caída — reintentando despacio (intento {attempt})",
"feed down — retrying slowly": "fuente caída — reintentando despacio",
"reconnecting to feed… (attempt {attempt})": "reconectando con la fuente… (intento {attempt})",
"reconnecting to feed…": "reconectando con la fuente…",
"AISSTREAM_API_KEY not set": "AISSTREAM_API_KEY no está configurada",
"live feed unsupported": "fuente en vivo no compatible",
"connecting to feed…": "conectando con la fuente…",
"feed disconnected": "fuente desconectada",
"feed down": "fuente caída",
"feed idle": "fuente inactiva",
"AIS live load failed": "Falló la carga de AIS en vivo",
"age|{count}m": "{count} min",
"{acres} ac": {
"one": "{acres} acre",
"many": "{acres} de acres",
"other": "{acres} acres"
},
"{percent}% contained": "contenido al {percent}%",
"containment unknown": "contención desconocida",
"{cause} cause": "causa: {cause}",
"{personnel} personnel": {
"one": "{personnel} efectivo",
"many": "{personnel} de efectivos",
"other": "{personnel} efectivos"
},
"{county} County": "condado de {county}",
"{cost} to date": "{cost} hasta la fecha",
"discovered {age} ago": "detectado hace {age}",
"updated {age} ago": "actualizado hace {age}",
"part of {complex}": "parte de {complex}",
"InciWeb ↗ · click card to open": "InciWeb ↗ · haz clic en la tarjeta para abrir",
"FIRE · {name}": "INCENDIO · {name}",
"Unnamed incident": "Sin nombre",
"Open {title} on InciWeb": "Abrir {title} en InciWeb",
"Vehicle {vehicle}": "Vehículo {vehicle}",
"Bus": "Autobús",
"Tram": "Tranvía",
"Subway": "Metro",
"Train": "Tren",
"Ferry": "Ferri",
"Transit vehicle": "Vehículo de transporte público",
"No recent fix": "Sin posición reciente",
"Waiting for update": "Esperando actualización",
"Moving": "En movimiento",
"reported {speed} km/h": "velocidad notificada: {speed} km/h",
"reported hdg {heading}°": "rumbo notificado: {heading}°",
"Last report: stopped at stop {stop}": "Último informe: detenido en la parada {stop}",
"Last report: arriving at stop {stop}": "Último informe: llegando a la parada {stop}",
"Last report: next stop {stop}": "Último informe: próxima parada {stop}",
"occupancy|empty": "vacío",
"occupancy|many seats available": "muchos asientos libres",
"occupancy|few seats available": "pocos asientos libres",
"occupancy|standing room only": "solo de pie",
"occupancy|crushed standing room only": "abarrotado, solo de pie",
"occupancy|full": "lleno",
"occupancy|not accepting passengers": "no admite pasajeros",
"occupancy|not boardable": "no se puede subir",
"Shown at street level · depth not in the feed": "Se muestra a nivel de calle · la fuente no indica la profundidad",
"Reported {seconds} s ago": "Notificado hace {seconds} s",
"Reported {minutes} min ago": "Notificado hace {minutes} min",
"{reported} (feed time)": "{reported} (hora de la fuente)",
"shown {seconds} s behind": "se muestra con {seconds} s de retraso",
"Available trail: {minutes} min": "Rastro disponible: {minutes} min",
"Available trail: {minutes} min (limited)": "Rastro disponible: {minutes} min (limitado)",
"UNAVAILABLE · {source} · Roads unavailable": "NO DISPONIBLE · {source} · Vías no disponibles",
"Roads: {source}": "Vías: {source}",
"TomTom roads unavailable while the traffic service is unreachable": "Vías de TomTom no disponibles mientras el servicio de tráfico esté inaccesible",
"Hybrid unavailable while the traffic service is unreachable": "Modo híbrido no disponible mientras el servicio de tráfico esté inaccesible",
"TomTom roads need a TomTom key": "Las vías de TomTom necesitan una clave de TomTom",
"Hybrid needs a TomTom key": "El modo híbrido necesita una clave de TomTom",
"Local surface still loading": "La superficie bajo las vías aún se está cargando",
"Partial coverage": "Cobertura parcial",
"Detailed roads unavailable": "Vías detalladas no disponibles",
"Reduced detail coverage": "Cobertura con menos detalle",
"OpenFreeMap tiles rate-limited": "Teselas de OpenFreeMap con límite de peticiones",
"OpenFreeMap tiles timed out": "Las teselas de OpenFreeMap agotaron el tiempo de espera",
"OpenFreeMap tiles unavailable": "Teselas de OpenFreeMap no disponibles",
"Heard by your receiver": "Captado por tu receptor",
"browser SDR": "SDR del navegador",
"decoder feed": "fuente del decodificador",
"Your RTL-SDR receiver and decoder feed": "Tu receptor RTL-SDR y la fuente del decodificador",
"Your decoder feed": "Tu fuente del decodificador",
"Your RTL-SDR receiver": "Tu receptor RTL-SDR",
"NO CALLSIGN": "SIN INDICATIVO",
"ALT {altitude} FT · GS {speed} KT · TRK {track}": "ALT {altitude} FT · VEL. SUELO {speed} KN · TRK {track}",
"V/S {rate}": "VEL. VERT. {rate}",
"V/S {rate} FPM": "VEL. VERT. {rate} FT/MIN",
"POSITION {age}": "POSICIÓN {age}",
"POSITION {seconds} S AGO": "POSICIÓN HACE {seconds} S",
"{count} MSGS": {
"one": "{count} MENSAJE",
"many": "{count} DE MENSAJES",
"other": "{count} MENSAJES"
},
"installation class|BARRACKS": "CUARTEL",
"installation class|TRAINING AREA": "ZONA DE INSTRUCCIÓN",
"Seeking up…": "Buscando hacia arriba…",
"Seeking down…": "Buscando hacia abajo…",
"Scanning {mhz} MHz…": "Escaneando {mhz} MHz…",
"Found {mhz} MHz · {snr} dB": "Encontrado {mhz} MHz · {snr} dB",
"Broadcaster stream is unavailable or blocked by the browser.": "El flujo de la emisora no está disponible o el navegador lo ha bloqueado.",
"Playback requires a direct click or tap.": "La reproducción requiere un clic o un toque directo.",
"Broadcaster stream could not be started.": "No se pudo iniciar el flujo de la emisora.",
"Directory refresh degraded; showing the previous station catalog.": "La actualización del directorio fue parcial; se muestra el catálogo de emisoras anterior.",
"Radio directory coverage is degraded.": "El directorio de radio funciona con interrupciones.",
"Directory refresh failed; showing the previous station catalog.": "La actualización del directorio falló; se muestra el catálogo de emisoras anterior.",
"Radio directory is temporarily unavailable.": "El directorio de radio no está disponible temporalmente.",
"Decoder feeds: {feeds}": "Fuentes del decodificador: {feeds}",
" · read while Local ADS-B is on": " · se leen mientras ADS-B local está activo",
"idle": "en espera",
"running": "activo",
"suspended": "suspendido",
"closed": "cerrado",
"Local FM stopped: internet radio started": "FM local detenida: se inició la radio por Internet",
"ALPR cameras": "cámaras ALPR",
"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",
"MAP TILES TEMPORARILY UNAVAILABLE": "TESELAS DEL MAPA TEMPORALMENTE NO DISPONIBLES",
"MAPPED NAMES TEMPORARILY UNAVAILABLE": "NOMBRES MAPEADOS TEMPORALMENTE NO DISPONIBLES",
"Shared flight follow expired": "El seguimiento del vuelo compartido ha caducado",
"Shared military flight follow expired": "El seguimiento del vuelo militar compartido ha caducado",
"Shared satellite follow expired": "El seguimiento del satélite compartido ha caducado",
"Shared flight could not be restored — feed unavailable": "No se pudo restaurar el vuelo compartido — fuente no disponible",
"Shared military flight could not be restored — feed unavailable": "No se pudo restaurar el vuelo militar compartido — fuente no disponible",
"Shared satellite could not be restored — feed unavailable": "No se pudo restaurar el satélite compartido — fuente no disponible",
"Shared flight is unavailable": "El vuelo compartido no está disponible",
"Shared military flight is unavailable": "El vuelo militar compartido no está disponible",
"Shared satellite is unavailable": "El satélite compartido no está disponible",
"Scene not saved — browser storage unavailable": "Escena no guardada — almacenamiento del navegador no disponible",
"Scene not saved — existing saved project could not be read. Export edits or import a valid file.": "Escena no guardada — no se pudo leer el proyecto guardado. Exporta los cambios o importa un archivo válido.",
"Saved project could not be read; storage preserved. Import a valid file to resume saving.": "No se pudo leer el proyecto guardado; el almacenamiento se conserva. Importa un archivo válido para volver a guardar.",
"Scene not saved — {reason}": "Escena no guardada — {reason}",
"Stopped": "Detenido",
"Stopped (Esc)": "Detenido (Esc)",
"Camera ownership changed": "Cambió el control de la cámara",
"Scene layer turned off": "Capa de la escena desactivada",
"Seeking scene clock": "Desplazando el reloj de la escena",
"Importing project": "Importando proyecto",
"Camera move interrupted": "Movimiento de cámara interrumpido",
"Scene media timed out": "El contenido multimedia de la escena agotó el tiempo de espera",
"Space Missions isolates replay data. Exit the mode to enable {layer}.": "El modo Misiones espaciales aísla los datos de repetición. Sal del modo para activar {layer}.",
"Tilted view": "Vista inclinada",
"Straight-down view": "Vista cenital",
"North up": "Norte arriba",
"Exit cockpit to fly to a camera": "Sal de la cabina para volar a una cámara",
"Exit cockpit to fly to a location": "Sal de la cabina para volar a una ubicación",
"Exit cockpit to fly to a photo": "Sal de la cabina para volar a una foto",
"Exit cockpit to fly to a shared view": "Sal de la cabina para volar a una vista compartida",
"Exit cockpit to fly to a target": "Sal de la cabina para volar a un objetivo",
"Exit cockpit to fly to a vessel": "Sal de la cabina para volar a un buque",
"Exit cockpit to fly to a fire": "Sal de la cabina para volar a un incendio",
"Exit cockpit to fly to a route": "Sal de la cabina para volar a una ruta",
"Exit cockpit to fly to a file": "Sal de la cabina para volar a un archivo",
"Exit cockpit to fly to a scene": "Sal de la cabina para volar a una escena",
"Exit cockpit to fly to a {noun}": "Sal de la cabina para volar a {noun}",
"Go to expanded Radio section": "Ir a la sección de Radio expandida",
"Expand Radio section in Context": "Expandir la sección de Radio en Contexto",
"Double-click the header to snap the panel back": "Haz doble clic en el encabezado para devolver el panel a su sitio",
"New scene name": "Nombre de la nueva escena",
"Delete scene \"{scene}\" and all shots?": "¿Eliminar la escena \"{scene}\" y todos sus planos?",
"Detailed outline unavailable": "Contorno detallado no disponible",
"Provider Settings does not answer proxied requests": "Ajustes de proveedores no responde a peticiones a través de un proxy",
"Provider Settings is disabled while sharing is enabled": "El panel \"Ajustes de proveedores\" está desactivado mientras el uso compartido esté activado",
"Provider Settings answers only the machine running the server": "Ajustes de proveedores solo responde al equipo que ejecuta el servidor",
"Provider Settings answers only local hostnames": "Ajustes de proveedores solo responde a nombres de host locales",
"Provider Settings requires an exact local Origin": "Ajustes de proveedores requiere un Origin local exacto",
"Unrecognized Origin refused": "Origin no reconocido: petición rechazada",
"Cross-origin requests are refused": "Se rechazan las peticiones de otro origen",
"Content-Type must be application/json": "Content-Type debe ser application/json",
"Method not allowed": "Método no permitido",
"Request too large": "Petición demasiado grande",
"Invalid JSON": "JSON no válido",
"Body must be a JSON object of {ENV_VAR: value}": "El cuerpo debe ser un objeto JSON de {ENV_VAR: value}",
"No keys provided": "No se envió ninguna clave",
"At most {limit} keys per save": "Como máximo {limit} claves por guardado",
"Unknown key: {name}": "Clave desconocida: {name}",
"{name} must be a string": "{name}: el valor debe ser una cadena de texto",
"{name} is empty": "{name}: el valor está vacío",
"{name} is longer than any real key ({limit} max)": "{name}: el valor es más largo que cualquier clave real (máximo {limit})",
"{name} may only contain printable characters with no spaces": "{name}: solo se admiten caracteres imprimibles, sin espacios",
"{name} contains a character that is not valid in a key (#, quotes, $, \\, or backtick)": "{name}: hay un carácter no válido en una clave (#, comillas, $, \\ o acento grave)",
"{name} is configured outside Provider Settings and can only be changed where it was set": "{name} se configuró fuera de Ajustes de proveedores y solo se puede cambiar donde se definió",
"The key was not saved: could not restrict the credential file to your account; nothing was saved": "La clave no se guardó: no se pudo restringir el archivo de credenciales a tu cuenta; no se guardó nada",
"The key was not saved: the existing configuration could not be read, so nothing was changed": "La clave no se guardó: no se pudo leer la configuración existente, así que no se cambió nada",
"Could not write the {store} store": "No se pudo escribir en el almacén {store}",
"Could not check ChatGPT sign-in. Try again.": "No se pudo comprobar el inicio de sesión de ChatGPT. Inténtalo de nuevo.",
"Cloud voice will use OPENAI_API_KEY on the next session.": "La voz en la nube usará OPENAI_API_KEY en la próxima sesión.",
"Checking local ChatGPT OAuth sign-in…": "Comprobando el inicio de sesión OAuth local de ChatGPT…",
"Could not check ChatGPT sign-in.": "No se pudo comprobar el inicio de sesión de ChatGPT.",
"ChatGPT OAuth selected for cloud voice. Your API key stays saved and available.": "OAuth de ChatGPT seleccionado para la voz en la nube. Tu clave de API sigue guardada y disponible.",
"ChatGPT sign-in expired. Opening sign-in again…": "El inicio de sesión de ChatGPT caducó. Abriéndolo de nuevo…",
"Opening ChatGPT sign-in in your browser…": "Abriendo el inicio de sesión de ChatGPT en tu navegador…",
"Could not start ChatGPT sign-in on this machine.": "No se pudo abrir el inicio de sesión de ChatGPT en este equipo.",
"Finish ChatGPT sign-in in the browser. Waiting for it to complete…": "Termina de iniciar sesión en ChatGPT en el navegador. Esperando a que se complete…",
"ChatGPT sign-in timed out. Click {button} to try again.": "Se agotó el tiempo para iniciar sesión en ChatGPT. Haz clic en \"{button}\" para intentarlo de nuevo.",
"ChatGPT sign-in complete. OAuth will be used for the next cloud voice session.": "Sesión de ChatGPT iniciada. Se usará OAuth en la próxima sesión de voz en la nube.",
"OAuth check failed: {detail}": "Error al comprobar OAuth: {detail}",
"unsaved CCTV calibration": "la calibración de CCTV sin guardar",
"the open cockpit": "la cabina abierta",
"Switching language reloads the page. This will be lost: {items}. Switch anyway?": "Cambiar de idioma recarga la página. Se perderá lo siguiente: {items}. ¿Cambiar de todos modos?",
"Wind upstream unavailable": "Origen de datos de viento no disponible",
"WebUSB needs desktop Chrome or Edge": "WebUSB requiere Chrome o Edge de escritorio",
"connect a receiver in Radio": "conecta un receptor en Radio",
"receiver is in FM mode": "el receptor está en modo FM",
"Cyclone advisories unavailable": "Avisos de ciclones no disponibles",
"Cyclone data unavailable": "Datos de ciclones no disponibles",
"Drag to size the box": "Arrastra para dar tamaño al recuadro",
"Press on the ground, not the sky": "Pulsa sobre el suelo, no sobre el cielo",
"Point the camera at the ground to use the view": "Apunta la cámara al suelo para usar la vista",
"That point cannot anchor a box": "Ese punto no puede anclar un recuadro",
"Box edges must be finite": "Coordenadas del recuadro no válidas",
"Longitudes must be within ±180°": "Las longitudes deben estar dentro de ±180°",
"Select one side of the dateline": "No cruces la línea de cambio de fecha",
"Box must enclose an area": "El recuadro debe abarcar un área",
"Imagery stops at ±{limit}° latitude": "Las imágenes llegan hasta ±{limit}° de latitud",
"{owner} is using the pointer — close it first": "Puntero en uso: {owner}. Ciérralo primero",
"OpenSky OAuth client missing/invalid": "Cliente OAuth de OpenSky ausente o no válido",
"OpenSky OAuth rejected credentials": "OpenSky OAuth rechazó las credenciales",
"OpenSky username/password rejected": "OpenSky rechazó el usuario o la contraseña",
"OpenSky auth missing": "Falta la autenticación de OpenSky",
"OpenSky auth required": "OpenSky requiere autenticación",
"OpenSky auth invalid": "Autenticación de OpenSky no válida",
"OpenSky auth failed": "Falló la autenticación de OpenSky",
"Source snapshot {minutes} min old": "La instantánea de la fuente tiene {minutes} min",
"{source} rate limited (anonymous)": "{source}: límite de peticiones (anónimo)",
"{source} rate limited": "{source}: límite de peticiones",
"{source} HTTP {status}": "{source}: HTTP {status}",
"{source} network error": "{source}: error de red",
"Malformed {source} aircraft rows": "{source}: filas de aeronaves mal formadas",
"Malformed {source} response": "{source}: respuesta mal formada",
"Source snapshot time unavailable": "Hora de la instantánea de la fuente no disponible",
"Live data unavailable": "Datos en vivo no disponibles",
"{n} aircraft": {
"one": "{n} aeronave",
"many": "{n} de aeronaves",
"other": "{n} aeronaves"
},
"{n} military aircraft": {
"one": "{n} aeronave militar",
"many": "{n} de aeronaves militares",
"other": "{n} aeronaves militares"
},
"{n} ships": {
"one": "{n} buque",
"many": "{n} de buques",
"other": "{n} buques"
},
"{n} satellites": {
"one": "{n} satélite",
"many": "{n} de satélites",
"other": "{n} satélites"
},
"{n} launches": {
"one": "{n} lanzamiento",
"many": "{n} de lanzamientos",
"other": "{n} lanzamientos"
},
"{n} earthquakes": {
"one": "{n} terremoto",
"many": "{n} de terremotos",
"other": "{n} terremotos"
},
"{n} fires": {
"one": "{n} incendio",
"many": "{n} de incendios",
"other": "{n} incendios"
},
"{n} fire perimeters": {
"one": "{n} perímetro de incendio",
"many": "{n} de perímetros de incendio",
"other": "{n} perímetros de incendio"
},
"{n} cyclones": {
"one": "{n} ciclón",
"many": "{n} de ciclones",
"other": "{n} ciclones"
},
"{n} buses": {
"one": "{n} autobús",
"many": "{n} de autobuses",
"other": "{n} autobuses"
},
"{n} bike share": {
"one": "{n} estación de bicicletas compartidas",
"many": "{n} de estaciones de bicicletas compartidas",
"other": "{n} estaciones de bicicletas compartidas"
},
"{n} flock cameras": {
"one": "{n} cámara ALPR",
"many": "{n} de cámaras ALPR",
"other": "{n} cámaras ALPR"
},
"{n} military bases": {
"one": "{n} base militar",
"many": "{n} de bases militares",
"other": "{n} bases militares"
},
"{n} datacenters": {
"one": "{n} centro de datos",
"many": "{n} de centros de datos",
"other": "{n} centros de datos"
},
"{n} dams": {
"one": "{n} presa",
"many": "{n} de presas",
"other": "{n} presas"
},
"{n} results": {
"one": "{n} resultado",
"many": "{n} de resultados",
"other": "{n} resultados"
},
"anywhere in the loaded data": "en todos los datos cargados",
"in view": "a la vista",
"within {radius} of the view centre": "en un radio de {radius} del centro de la vista",
"within {radius} of {place} (Contacts window)": "en un radio de {radius} de {place} (ventana de Contactos)",
"within {radius} of {place}": "en un radio de {radius} de {place}",
"within {radius}": "en un radio de {radius}",
"over {region}": "en {region}",
"At least {items}": "Al menos {items}",
"{items} {scope}": "{items} {scope}",
"last 24 h": "últimas 24 h",
"past 30 d and upcoming": "últimos 30 d y próximos",
"the flights layer loads by viewport": "la capa de vuelos se carga según la vista",
"distance is ground distance, not overhead": "la distancia es sobre el terreno hasta el punto subsatélite, no hasta el satélite",
"the count is a lower bound because at least one layer reached its retained limit.": "el recuento es un mínimo porque al menos una capa alcanzó su límite de retención.",
"{label} loading": "{label}: cargando",
"{label} error": "{label}: error",
"counted the first {returned} loaded records": "se contaron los primeros {returned} registros cargados",
"counted {returned} of {total} loaded records": "se contaron {returned} de {total} registros cargados",
"{layers} just turned on — still loading, counts will rise": "{layers}: recién activado — aún se está cargando, los recuentos subirán",
"Contacts panel snapshot at {time} — the same retained cohort supplies the card, speech, and follow-up memory": "Instantánea del panel Contactos ({time}) — el mismo conjunto retenido alimenta la tarjeta, la voz y la memoria de seguimiento",
"Contacts panel snapshot — the same retained cohort supplies the card, speech, and follow-up memory": "Instantánea del panel Contactos — el mismo conjunto retenido alimenta la tarjeta, la voz y la memoria de seguimiento",
"Not answered: {layers}": "Sin respuesta: {layers}",
"The flights layer is not enabled": "La capa de vuelos no está activada",
"The military layer is not enabled": "La capa de vuelos militares no está activada",
"The satellites layer is not enabled": "La capa de satélites no está activada",
"The ais-live-vessels layer is not enabled": "La capa de buques AIS no está activada",
"Could not enable the requested layer": "No se pudo activar la capa solicitada",
"Could not disable the requested layer": "No se pudo desactivar la capa solicitada",
"Radio layer unavailable": "La capa de radio no está disponible",
"Camera navigation is unavailable in the current view": "La navegación de la cámara no está disponible en la vista actual",
"Camera navigation policy unavailable": "La política de navegación de la cámara no está disponible",
"Nearest-aircraft selection supports Flights or Military Flights only": "La selección de la aeronave más cercana solo funciona con vuelos o vuelos militares",
"Nearest-aircraft selection needs a preset, place name, or latitude and longitude": "Para seleccionar la aeronave más cercana se necesita un preajuste, un nombre de lugar o la latitud y la longitud",
"Could not arrive at the requested place": "No se pudo llegar al lugar solicitado",
"The nearest airborne aircraft could not be selected": "No se pudo seleccionar la aeronave en vuelo más cercana",
"No flights within {radius} of the current view": "No hay vuelos en un radio de {radius} de la vista actual",
"No military within {radius} of the current view": "No hay vuelos militares en un radio de {radius} de la vista actual",
"No satellites within {radius} of the current view": "No hay satélites en un radio de {radius} de la vista actual",
"No vessels within {radius} of the current view": "No hay buques en un radio de {radius} de la vista actual",
"{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "La capa {layer} está activada con la fuente {source}, pero aún no hay aeronaves en vuelo cargadas en la vista de {place}",
"{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "La capa {layer} está activada, pero aún no hay aeronaves en vuelo cargadas en la vista de {place}",
"{layer} is enabled, but its aircraft feed is unavailable": "La capa {layer} está activada, pero su fuente de aeronaves no está disponible",
"{layer} is enabled, but its destination refresh did not complete": "La capa {layer} está activada, pero la actualización en el destino no terminó",
"{layer} is enabled, but {source} is unavailable": "La capa {layer} está activada, pero {source} no está disponible",
"Could not arrive at {place}": "No se pudo llegar a {place}",
"{name} is no longer loaded": "{name} ya no está cargado",
"Unknown target layer: {target}": "Capa de destino desconocida: {target}",
"Layer": "Capa",
"there": "allí",
"Frame flights": "Encuadrar aeronaves",
"Frame military": "Encuadrar aeronaves militares",
"Frame vessels": "Encuadrar buques",
"Fly to Location": "Volar al lugar",
"Nearest aircraft to Here": "Aeronave más cercana aquí",
"Estimate is incomplete — a response was still in flight when the session ended, so its usage was never reported.": "La estimación está incompleta: una respuesta seguía en curso cuando terminó la sesión, así que su uso nunca se informó.",
"STANDARD": "ESTÁNDAR",
"vehicle motion|Stopped": "Detenido",
"ACQUIRING FRAME": "OBTENIENDO FOTOGRAMA",
"Camera source temporarily unavailable": "Fuente de cámaras no disponible temporalmente",
"Perimeter source unavailable": "Fuente de perímetros no disponible",
"Imagery catalog unavailable": "Catálogo de imágenes no disponible",
"Earthquake source unavailable": "Fuente de terremotos no disponible",
"TeleGeography load failed": "Falló la carga de TeleGeography",
"Wind request timed out": "La petición del viento agotó el tiempo de espera",
"Malformed wind manifest": "Manifiesto del viento mal formado",
"Malformed wind grid": "Malla del viento mal formada",
"Unknown wind model": "Modelo de viento desconocido",
"Unknown weather overlay": "Capa de clima desconocida",
"Temperature field unavailable": "Campo de temperatura no disponible",
"Mean sea level pressure field unavailable": "Campo de presión a nivel del mar no disponible",
"KartaView answered HTTP {status}": "KartaView respondió HTTP {status}",
"KartaView refused the request (code {code})": "KartaView rechazó la petición (código {code})",
"Stopped by voice": "Detenido por voz",
"drawings on the map": "los dibujos del mapa",
"imported map files": "los archivos importados en el mapa",
"the active voice session": "la sesión de voz activa",
"Light aircraft": "Avioneta",
"Glider": "Planeador",
"Turboprop": "Turbohélice",
"Airliner": "Avión comercial",
"Widebody": "Avión de fuselaje ancho",
"Four-engine jet": "Reactor cuatrimotor",
"Helicopter": "Helicóptero",
"Fast jet": "Avión de alto rendimiento",
"Business jet": "Reactor ejecutivo",
"Drone": "Dron",
"fire cause|Human": "humana",
"fire cause|Natural": "natural",
"fire cause|Undetermined": "indeterminada",
"fire cause|Unknown": "desconocida",
"fire behavior|Minimal": "actividad mínima",
"fire behavior|Moderate": "actividad moderada",
"fire behavior|Active": "actividad alta",
"fire behavior|Extreme": "actividad extrema",
"Type {level} Incident": "incidente de tipo {level}",
"${amount}K": "{amount} mil $",
"${amount}M": "{amount} M$",
"${amount}B": "{amount} mil M$",
"{speed} kn": "{speed} kn",
"1090 MHz": "1090 MHz",
"978 MHz UAT": "978 MHz UAT",
"feed status|live": "en vivo",
"feed status|stale": "desactualizada",
"feed status|unreachable": "inaccesible",
"feed status|invalid": "no válida",
"Vector tile metadata unavailable": "Metadatos de teselas vectoriales no disponibles",
"Vector tiles unavailable": "Teselas vectoriales no disponibles",
"Vector tiles unavailable (HTTP {status})": "Teselas vectoriales no disponibles (HTTP {status})",
"Vector tile request timed out": "Las teselas vectoriales agotaron el tiempo de espera",
"Zoom in for vector tile coverage": "Acércate para cargar las teselas vectoriales",
"Camera coverage unavailable": "Cobertura de cámaras no disponible",
"Hybrid": "Híbrido",
"TomTom roads only, each with its live flow": "Solo vías de TomTom, cada una con su flujo en vivo",
"TomTom roads only, each with its live flow (needs a TomTom key)": "Solo vías de TomTom, cada una con su flujo en vivo (necesita una clave de TomTom)",
"OpenStreetMap roads, with TomTom flow matched when available": "Vías de OpenStreetMap, con el flujo de TomTom emparejado cuando está disponible",
"TomTom roads first; OpenStreetMap fills the rest, simulated": "Primero las vías de TomTom; OpenStreetMap completa el resto con flujo simulado",
"TomTom roads first; OpenStreetMap fills the rest, simulated (needs a TomTom key)": "Primero las vías de TomTom; OpenStreetMap completa el resto con flujo simulado (necesita una clave de TomTom)",
"Austin": "Austin",
"San Francisco": "San Francisco",
"New York": "Nueva York",
"Tokyo": "Tokio",
"London": "Londres",
"Paris": "París",
"Dubai": "Dubái",
"Washington DC": "Washington D. C.",
"Tallinn": "Tallin",
"Los Angeles": "Los Ángeles",
"Data attribution": "Atribución de datos",
"Data provided by:": "Datos proporcionados por:",
"Exit cockpit to view weather coverage": "Sal de la cabina para ver la cobertura de la capa meteorológica",
"Exit cockpit to fly to a cyclone": "Sal de la cabina para volar a un ciclón",
"the title of scene {scene} is empty or longer than {max} characters": "el título de la escena {scene} está vacío o supera los {max} caracteres",
"the title of shot {shot} in scene {scene} is empty or longer than {max} characters": "el título del plano {shot} de la escena {scene} está vacío o supera los {max} caracteres",
"the project is larger than 5 MiB": "el proyecto pesa más de 5 MiB",
"the project has too many shots": "el proyecto tiene demasiados planos",
"the scene data failed validation": "los datos de la escena no superaron la validación",
"Layer on": "Capa: activada",
"Layer off": "Capa: desactivada",
"Zoom in": "Acercar",
"Zoom out": "Alejar",
"Zoom out to globe": "Alejar hasta el globo",
"Open data layers": "Abrir las capas de datos",
"Open or close a panel": "Abrir o cerrar un panel",
"Change context mode": "Cambiar el modo de contexto",
"Control cockpit": "Controlar la cabina",
"Change visual style": "Cambiar el estilo visual",
"Adjust HUD": "Ajustar el HUD",
"Adjust cyber sonar": "Ajustar el sonar Ciber",
"Adjust detection overlay": "Ajustar la superposición de detección",
"Change map stack": "Cambiar el conjunto de mapas",
"Adjust post-processing": "Ajustar el posprocesado",
"Control scene": "Controlar la escena",
"Control CCTV": "Controlar las cámaras CCTV",
"Control radio": "Controlar la radio",
"Track contact": "Rastrear el contacto",
"Stop tracking": "Detener el rastreo",
"Clear marks": "Borrar las marcas",
"Move camera": "Mover la cámara",
"Fly route": "Recorrer la ruta",
"Analyst query": "Consulta analítica",
"Next ISS pass": "Próximo paso de la EEI",
"Next satellite pass": "Próximo paso del satélite",
"Action": "Acción"
}