From 978cd72ac246cf6cb3ad1c4f7c83c09e174b32f9 Mon Sep 17 00:00:00 2001 From: Enzo Abyie Date: Wed, 28 Oct 2026 12:36:27 +0400 Subject: [PATCH 01/20] i18n(it): Italian strings from #912 The Italian locale by abiyeenzo (#912), converted from its namespaced JS catalogs to the English-keyed it.json: 859 entries whose English still matches the current UI. --- src/i18n/locales/it.json | 882 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 882 insertions(+) create mode 100644 src/i18n/locales/it.json diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json new file mode 100644 index 000000000..d5c65f04c --- /dev/null +++ b/src/i18n/locales/it.json @@ -0,0 +1,882 @@ +{ + "Flying to Austin, TX...": "Volo verso Austin, TX...", + "Restoring shared view...": "Ripristino della vista condivisa...", + "Configuring viewer...": "Configurazione del visualizzatore...", + "Loading Google 3D Tiles...": "Caricamento di Google 3D Tiles...", + "Loading the keyless globe...": "Caricamento del globo senza chiave...", + "Google 3D Tiles unavailable ({detail}). Loading the keyless globe...": "Google 3D Tiles non disponibile ({detail}). Caricamento del globo senza chiave...", + "Initializing systems...": "Inizializzazione dei sistemi...", + "Close data attribution": "Chiudi le attribuzioni dei dati", + "UNAVAILABLE": "NON DISPONIBILE", + "SOURCE": "FONTE", + "Overpass rate-limited": "Overpass ha limitato le richieste", + "Overpass timed out": "Overpass è andato in timeout", + "Overpass could not complete the query": "Overpass non ha potuto completare la query", + "Overpass temporarily unavailable": "Overpass temporaneamente non disponibile", + "Retrying mapped sites…": "Nuovo tentativo sui siti mappati…", + "Fetching mapped sites…": "Ricerca dei siti mappati…", + "{reason} — retrying in {seconds}s": "{reason} — nuovo tentativo tra {seconds}s", + "{reason} — retry pending": "{reason} — nuovo tentativo in sospeso", + "Zoom in to search mapped installations": "Ingrandisci per cercare le installazioni mappate", + "Showing cached mapped sites": "Siti mappati in cache", + "Mapped sites not loaded": "Siti mappati non caricati", + "Mapped sites loaded": "Siti mappati caricati", + "feed unavailable": "feed non disponibile", + "feed stale": "feed obsoleto", + "observed or mapped nearby context": "contesto osservato o mappato nelle vicinanze", + "no observed or mapped objects in current feeds": "nessun oggetto osservato o mappato nei feed attuali", + "STATION": "STAZIONE", + "Crewed stations and their visiting vehicles": "Stazioni con equipaggio e veicoli in visita", + "NAV": "NAV", + "GNSS navigation — GPS, GLONASS, Galileo": "Navigazione GNSS — GPS, GLONASS, Galileo", + "GEO": "GEO", + "Geostationary belt — comms and weather, fixed over the equator": "Fascia geostazionaria — comunicazioni e meteo, fissi sopra l'equatore", + "VISUAL": "VISIVO", + "Brightest naked-eye objects — CelesTrak visual group": "Oggetti più luminosi a occhio nudo — gruppo visual di CelesTrak", + "COMMS": "COMUN", + "Broadband constellation shell — shown only in DENSE mode": "Shell della costellazione broadband — mostrato solo in modalità DENSO", + "FISHING": "PESCA", + "TOWING": "RIMORCHIO", + "DREDGER": "DRAGA", + "DIVE OPS": "OP. SUBACQUEE", + "MILITARY": "MILITARE", + "SAILING": "VELA", + "PLEASURE": "DIPORTO", + "PILOT": "PILOTINA", + "SAR": "SAR", + "TUG": "REBOCCATORE", + "PORT TENDER": "TENDER PORTO", + "ANTI-POLLUTION": "ANTINQUINAMENTO", + "LAW ENFORCE": "FORZE ORDINE", + "MEDICAL": "MEDICA", + "HIGH-SPEED": "ALTA VELOCITÀ", + "PASSENGER": "PASSEGGERI", + "CARGO": "CARGO", + "TANKER": "CISTERNA", + "OTHER": "ALTRO", + "ENVIRONMENTAL": "AMBIENTE", + "EARTH WATCH": "OSSERVATORIO TERRA", + "ACTIVE EVENTS": "EVENTI ATTIVI", + "Starting live contacts…": "Avvio dei contatti live…", + "Opening space missions…": "Apertura delle missioni spaziali…", + "Scanning active events…": "Scansione degli eventi attivi…", + "Live earthquakes and active fires, from USGS and NASA": "Terremoti e incendi attivi in tempo reale, da USGS e NASA", + "It feels like a forbidden cockpit—then you realize the sources are public and the data is real.": "Sembra un cockpit proibito, poi capisci che le fonti sono pubbliche e i dati sono reali.", + "Working…": "Operazione in corso…", + "Could not open that mission{detail}. Retry or explore manually.": "Impossibile aprire quella missione{detail}. Riprova o esplora a mano.", + "This browser is blocking storage, so that could not be saved.": "Questo browser blocca l'archiviazione, quindi non è stato possibile salvare.", + "CRT": "CRT", + "NVG": "NVG", + "FLIR": "FLIR", + "SNOW": "NEVE", + "LOADING": "CARICAMENTO", + "DEGRADED": "DEGRADATO", + "STALE": "OBSOLETO", + "PARTIAL": "PARZIALE", + "FALLBACK": "FALLBACK", + "SUMMARY": "RIEPILOGO", + "Awaiting telemetry...": "In attesa di telemetria...", + "REC": "REC", + "AIS: --": "AIS: --", + "POWER UP · {count} KEYS WAITING": { + "one": "POWER UP · {count} CHIAVE IN ATTESA", + "other": "POWER UP · {count} CHIAVI IN ATTESA" + }, + "POWERED UP": "ACCESO", + "Save failed ({status}).": "Salvataggio non riuscito ({status}).", + "REMOVE": "RIMUOVI", + "Remove {title} from this app's saved keys": "Rimuovi {title} dalle chiavi salvate di questa app", + "your app configuration": "la configurazione della tua app", + "your local .env": "il tuo .env locale", + "Saving…": "Salvataggio…", + "Save failed: {detail}": "Salvataggio non riuscito: {detail}", + "Paste at least one key first.": "Incolla prima almeno una chiave.", + "Saved to {store}. Restarting — this page reloads itself.": "Salvato ({store}). Riavvio in corso: questa pagina si ricarica da sola.", + "Remove this key from your saved configuration?": "Rimuovere questa chiave dalla configurazione salvata?", + "Removed from {store}. Restarting — this page reloads itself.": "Rimosso ({store}). Riavvio in corso: questa pagina si ricarica da sola.", + "Places context + Street View fallback; optional separate key": "Contesto luoghi + fallback Street View; chiave separata opzionale", + "Live ships, worldwide": "Navi live, in tutto il mondo", + "Live active-fire detections": "Rilevamenti live di incendi attivi", + "Real live traffic (keyless runs a simulation)": "Traffico reale live (senza chiave usa una simulazione)", + "Bing imagery map stacks + world terrain": "Stack mappa con immagini Bing + terreno globale", + "More flight-polling credits (anonymous works without)": "Più crediti di polling voli (funziona anche in modo anonimo)", + "CONTEXT READY": "CONTESTO PRONTO", + "GLOBAL CONTEXT OFF": "CONTESTO GLOBALE OFF", + "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "SELEZIONA UN VOLO, UNA NAVE O UN'INSTALLAZIONE MAPPATA", + "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "ATTIVA PER CARICARE LA PROSSIMITÀ OSSERVATA / MAPPATA", + "Unavailable": "Non disponibile", + "Focus {label}": "Focus su {label}", + "Global Context navigation": "Navigazione Contesto globale", + "Previous — prior visited contact in the 250 km window": "Precedente — contatto visitato in precedenza nella finestra di 250 km", + "PREVIOUS": "PRECEDENTE", + "FOCUS": "FOCUS", + "Next — nearest unvisited contact in the 250 km window": "Successivo — contatto non visitato più vicino nella finestra di 250 km", + "NEXT": "SUCC", + "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Contesto mappato/osservato da fonti aperte. Trasmissioni mancanti, aree di mappa non caricate o siti non mappati non sono prova di assenza.", + "HDG {value}°": "HDG {value}°", + "BRG {value}°": "BRG {value}°", + "BRG —": "BRG —", + "CRS {value}°": "CRS {value}°", + "CURRENT VIEWPORT ONLY": "SOLO VISTA ATTUALE", + "WITHIN {km} KM": "ENTRO {km} KM", + "Flights": "Voli", + "Military flights": "Voli militari", + "AIS vessels": "Navi AIS", + "Mapped installations": "Installazioni mappate", + "syncing {count} city feeds...": "sincronizzazione di {count} feed città...", + "scanning nearby systems...": "scansione dei sistemi vicini...", + "Station {id}": "Stazione {id}", + "Station": "Stazione", + "🚲 {bikes} avail · {docks} docks · {capacity} cap": "🚲 {bikes} disp · {docks} stalli · {capacity} cap", + "⚠️ Not installed": "⚠️ Non installata", + "⚠️ Not renting": "⚠️ Noleggio non attivo", + "⚠️ Not returning": "⚠️ Restituzione non attiva", + "HDG {value}° (ESTIMATED)": "HDG {value}° (STIMATO)", + "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} TELECAMERE IN ATTESA · NESSUNA TELECAMERA SELEZIONATA · CLIC SU UNA TELECAMERA PER ATTIVARLA", + "No cameras available in catalog.": "Nessuna telecamera disponibile nel catalogo.", + "{city} CCTV": "CCTV {city}", + "FOV {value}°": "FOV {value}°", + "COVERAGE {value}km²": "COPERTURA {value}km²", + "OVERLAP {count} cams": "SOVRAPP. {count} cam", + "ISOLATED VIEW": "VISTA ISOLATA", + "PROJ MONITOR": "PROIEZ MONITOR", + "PROJ OFF": "PROIEZ OFF", + "VIEWSHED": "VIEWSHED", + "CAL {value}": "CAL {value}", + "SRC {value}": "FONTE {value}", + "{value} CONTEXT": "CONTESTO {value}", + "Focus fire detection {title}, {details}": "Focus sul rilevamento incendio {title}, {details}", + "{value} conf": "{value} conf", + "{value} ago": "{value} fa", + "sensor n/a": "sensore n/d", + "FIRE · {frp} MW": "INCENDIO · {frp} MW", + "NIGHT": "NOTTE", + "▲ {frp} MW": "▲ {frp} MW", + "FIRE": "INCENDIO", + "FIRES": "INCENDI", + "max {value} MW": "max {value} MW", + "new {value}": "nuovo {value}", + "just now": "adesso", + "<1m ago": "<1m fa", + "{count}m ago": "{count}m fa", + "{count}h ago": "{count}h fa", + "STALE · cached {age}": "OBSOLETO · in cache {age}", + "refreshing...": "aggiornamento...", + "loading...": "caricamento...", + "KEY REQUIRED": "CHIAVE RICHIESTA", + "LIVE · updated {age}": "LIVE · aggiornato {age}", + "loading mapped installation context": "caricamento del contesto dell'installazione mappata", + "MAPPED INSTALLATION": "INSTALLAZIONE MAPPATA", + "LAUNCH SITE · {site}": "SITO DI LANCIO · {site}", + "LAUNCH SITE": "SITO DI LANCIO", + "T−{time} · {mission}": "T−{time} · {mission}", + "LAUNCH STANDBY": "LANCIO IN ATTESA", + "LIFTOFF · {mission}": "DECOLLO · {mission}", + "ASCENT REPLAY · {mission}": "REPLAY SALITA · {mission}", + "ASCENT ESTIMATE · {mission}": "STIMA SALITA · {mission}", + "STAGE RE-ENTRY / RECOVERY · {mission}": "RIENTRO / RECUPERO STADI · {mission}", + "ORBIT REPLAY · {mission}": "REPLAY ORBITA · {mission}", + "PAUSED · {title}": "IN PAUSA · {title}", + "UNSPECIFIED": "NON SPECIFICATO", + "+{count} additional payload records": "+{count} record payload aggiuntivi", + "PAYLOAD DATA UNAVAILABLE": "DATI PAYLOAD NON DISPONIBILI", + "{value} KM DOWNRANGE": "{value} KM DOWNRANGE", + "POSITION UNAVAILABLE": "POSIZIONE NON DISPONIBILE", + "FLIGHT {count}": "VOLO {count}", + "REUSED": "RIUTILIZZATO", + "NO STAGE RE-ENTRY / RECOVERY DATA": "NESSUN DATO DI RIENTRO / RECUPERO DEGLI STADI", + "{count} / 30D": "{count} / 30G", + "NO MISSIONS AVAILABLE IN THE CURRENT 30-DAY WINDOW": "NESSUNA MISSIONE DISPONIBILE NELLA FINESTRA ATTUALE DI 30 GIORNI", + "DATE UNAVAILABLE": "DATA NON DISPONIBILE", + "UNSPECIFIED OPERATOR": "OPERATORE NON SPECIFICATO", + "Select {mission}": "Seleziona {mission}", + "{value} KM": "{value} KM", + "{value} KM/S": "{value} KM/S", + "SELECTED SPACE MISSION": "MISSIONE SPAZIALE SELEZIONATA", + "Show all missions": "Mostra tutte le missioni", + "Deselect mission": "Deseleziona la missione", + "MISSION": "MISSIONE", + "STATUS · ": "STATO · ", + "LAUNCH SITE · ": "SITO DI LANCIO · ", + "LAUNCH TIME · ": "ORA DI LANCIO · ", + "ORBIT · ": "ORBITA · ", + "ASCENT PATH · ": "TRAIETTORIA DI SALITA · ", + "CURRENT DISTANCE FROM EARTH · ": "DISTANZA ATTUALE DALLA TERRA · ", + "SATELLITE SPEED · ": "VELOCITÀ SATELLITE · ", + "PAYLOAD": "PAYLOAD", + "NAME": "NOME", + "TYPE": "TIPO", + "DESTINATION": "DESTINAZIONE", + "STAGE / RE-ENTRY / RECOVERY": "STADIO / RIENTRO / RECUPERO", + "STAGE": "STADIO", + "STATUS": "STATO", + "FINAL POSITION": "POSIZIONE FINALE", + "REPLAY SPEED": "VELOCITÀ REPLAY", + "Replay speed multiplier": "Moltiplicatore di velocità del replay", + "REPLAY ASCENT": "RIVEDI SALITA", + "Previous mission": "Missione precedente", + "PREV": "PREC", + "Next mission": "Missione successiva", + "SHOW ALL / DESELECT": "MOSTRA TUTTE / DESELEZIONA", + "Pause replay": "Metti in pausa il replay", + "Cancel replay": "Annulla il replay", + "EST. DOWNRANGE": "DOWNRANGE STIM.", + "PLANNED · ": "PIANIFICATO · ", + "SUPPLIED TRAJECTORY POINTS": "PUNTI DI TRAIETTORIA FORNITI", + "RECONSTRUCTED ESTIMATE": "STIMA RICOSTRUITA", + "Replay the estimated ascent with a following camera": "Rivedi la salita stimata con una camera che segue il razzo", + "Resume replay": "Riprendi il replay", + "T minus {seconds}": "T meno {seconds}", + "Preparing launch site": "Preparazione del sito di lancio", + "Liftoff": "Decollo", + "Ascent replay": "Replay della salita", + "Orbit replay": "Replay dell'orbita", + ", paused": ", in pausa", + "Alt unknown": "Quota sconosciuta", + "Type unknown": "Tipo sconosciuto", + "Reg unknown": "Matricola sconosciuta", + "Operator unknown": "Operatore sconosciuto", + "News": "Notizie", + "Talk": "Talk", + "Weather / Emergency": "Meteo / Emergenza", + "Public Safety": "Sicurezza pubblica", + "Aviation / Marine": "Aviazione / Marina", + "Traffic / Transit": "Traffico / Trasporti", + "Music": "Musica", + "Other": "Altro", + "radio|TALK": "TALK", + "radio|SAFETY": "SICUREZZA", + "radio|AIR / SEA": "AERO / MARE", + "radio|TRANSIT": "TRASPORTI", + "radio|MUSIC": "MUSICA", + "Alternative": "Alternative", + "Ambient": "Ambient", + "Blues": "Blues", + "Classical": "Classica", + "Country": "Country", + "Dance": "Dance", + "Electronic": "Elettronica", + "Folk": "Folk", + "Funk": "Funk", + "Hip-Hop": "Hip-Hop", + "House": "House", + "Indie": "Indie", + "Jazz": "Jazz", + "Latin": "Latina", + "Metal": "Metal", + "Oldies": "Oldies", + "Pop": "Pop", + "Punk": "Punk", + "R&B": "R&B", + "Reggae": "Reggae", + "Rock": "Rock", + "Soul": "Soul", + "Techno": "Techno", + "Trance": "Trance", + "World": "World", + "Add the full Starlink broadband shell (thousands of extra points)": "Aggiungi l'intero shell broadband Starlink (migliaia di punti in più)", + "Loading the Starlink shell…": "Caricamento dello shell Starlink…", + "Starlink {detail} — click to retry": "Starlink {detail} — clic per riprovare", + "load failed": "caricamento non riuscito", + "Showing the full Starlink shell — click for the core catalog only": "Mostra l'intero shell Starlink — clic per il solo catalogo principale", + "DENSE ···": "DENSO ···", + "DENSE ✕": "DENSO ✕", + "DENSE": "DENSA", + "Syncing flow · Roads: {source}": "Sincronizzazione flusso · Strade: {source}", + "LIVE · Roads: {source} · Roads without flow hidden": "LIVE · Strade: {source} · Strade senza flusso nascoste", + "LIVE · Roads: {source} · No flow roads in view": "LIVE · Strade: {source} · Nessuna strada con flusso in vista", + "LIVE · Roads: {source} · Flow {percent}%": "LIVE · Strade: {source} · Flusso {percent}%", + "SIMULATED · Roads: {source} · Flow {percent}%": "SIMULATO · Strade: {source} · Flusso {percent}%", + "Syncing flow · Roads: OpenStreetMap · Flow: TomTom · Unmatched: simulated": "Sincronizzazione flusso · Strade: OpenStreetMap · Flusso: TomTom · Non abbinate: simulate", + "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov · Unmatched: simulated": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop · Non abbinate: simulate", + "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop", + "SIMULATED · Roads: OpenStreetMap · Flow: TomTom (no matches)": "SIMULATO · Strade: OpenStreetMap · Flusso: TomTom (nessuna corrispondenza)", + "SIMULATED — traffic service unreachable": "SIMULATO — servizio traffico irraggiungibile", + "SIMULATED — add TomTom key for live": "SIMULATO — aggiungi la chiave TomTom per il live", + "AIS: {name}": "AIS: {name}", + "{type} SPD: {speed} HDG: {heading}": "{type} VEL: {speed} HDG: {heading}", + "VESSEL": "NAVE", + "POS: LIVE": "POS: LIVE", + "POS: {time}Z": "POS: {time}Z", + "awaiting first AIS position…": "in attesa della prima posizione AIS…", + "awaiting usable AIS positions…": "in attesa di posizioni AIS utilizzabili…", + "awaiting first AIS message…": "in attesa del primo messaggio AIS…", + "Resume": "Riprendi", + "Pause": "Pausa", + "Error: {message}": "Errore: {message}", + "Needs {envVars} — add it in Provider Settings": "Richiede {envVars}: vai su Impostazioni Provider", + "{label} is unavailable": "{label} non è disponibile", + "This map stack": "Questo stack mappa", + "{label} unavailable: {hint}": "{label} non disponibile: {hint}", + "Visible map targets": "Obiettivi mappa visibili", + "Ready": "Pronto", + "Loaded: {scene} / {shot}": "Caricato: {scene} / {shot}", + "Cannot capture shot: camera not ready": "Impossibile catturare lo scatto: camera non pronta", + "Captured: {scene} / {shot}": "Catturato: {scene} / {shot}", + "Select a shot first": "Seleziona prima uno scatto", + "Updated: {scene} / {shot}": "Aggiornato: {scene} / {shot}", + "Camera unavailable — exit cockpit first": "Camera non disponibile: esci prima dal cockpit", + "No shots to run": "Nessuno scatto da eseguire", + "Project exported": "Progetto esportato", + "Could not exit {mode} — scene layers may be refused": "Impossibile uscire da {mode}: i livelli della scena potrebbero essere rifiutati", + "Running {index}/{total}: {scene} / {shot}": "Esecuzione {index}/{total}: {scene} / {shot}", + "Scene run complete": "Esecuzione della scena completata", + "Global Flights Radar": "Radar Voli Globale", + "Orbital Watch": "Sorveglianza Orbitale", + "Thermal Threat Board": "Quadro Minacce Termiche", + "City Overload": "Sovraccarico Urbano", + "Omniscience Pullback": "Zoom Out Onniscienza", + "Shot {n}": "Scatto {n}", + "Density": "Densità", + "Bloom": "Bloom", + "VISUAL PRESETS": "PRESET VISIVI", + "LOCATION": "POSIZIONE", + "CONTACTS — nearest planes · vessels · sites": "CONTATTI — aerei · navi · siti più vicini", + "SPACE MISSIONS — launches & orbital assets": "MISSIONI SPAZIALI — lanci e asset orbitali", + "LIVE SIGNALS": "SEGNALI LIVE", + "Contacts could not complete the requested transition; try again": "Impossibile completare la transizione richiesta per Contatti; riprova", + "CCTV layer unavailable": "Livello CCTV non disponibile", + "Link copied!": "Link copiato!", + "Copy failed": "Copia non riuscita", + "CCTV calibration saved": "Calibrazione CCTV salvata", + "CCTV calibration reset": "Calibrazione CCTV ripristinata", + "ADJUST ON": "REGOLAZ. ON", + "ADJUST": "REGOLAZ.", + "UNKNOWN": "SCONOSCIUTO", + "ERROR": "ERRORE", + "SOURCE · UNKNOWN": "FONTE · SCONOSCIUTA", + "FRAME · LOADING": "FOTOGRAMMA · CARICAMENTO", + "FRAME · UNAVAILABLE": "FOTOGRAMMA · NON DISPONIBILE", + "CALIBRATED": "CALIBRATA", + "CURATED": "CURATA", + "RAW PRIOR": "STIMA GREZZA", + "CCTV ON": "CCTV ON", + "CCTV OFF": "CCTV OFF", + "VIEWSHED ON": "VIEWSHED ON", + "COVERAGE ON": "COPERTURA ON", + "COVERAGE OFF": "COPERTURA OFF", + "AUTO HOP ON": "AUTO HOP ON", + "AUTO HOP OFF": "AUTO HOP OFF", + "PROJECTION ON": "PROIEZIONE ON", + "PROJECTION OFF": "PROIEZIONE OFF", + "CAL · EDITED (UNSAVED)": "CAL · MODIFICATA (NON SALVATA)", + "CAL · {badge}": "CAL · {badge}", + "MONITOR": "MONITOR", + "OFF": "OFF", + "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}": "{city} · HDG {heading} · FOV {fov} · PORTATA {range}m · {projection}{calBadge} · {provider}{status}", + "{count} cameras loaded · click a camera to activate": { + "one": "{count} telecamera caricata · clic su una telecamera per attivarla", + "other": "{count} telecamere caricate · clic su una telecamera per attivarla" + }, + "{count} cameras loaded · enable CCTV to activate": { + "one": "{count} telecamera caricata · attiva CCTV per attivarla", + "other": "{count} telecamere caricate · attiva CCTV per attivarle" + }, + "Enable CCTV to load camera intersections": "Attiva CCTV per caricare gli incroci delle telecamere", + "Enable CCTV to start camera-linked intelligence summaries.": "Attiva CCTV per avviare i riepiloghi intelligence collegati alle telecamere.", + "No summary available.": "Nessun riepilogo disponibile.", + "loading frames": "caricamento fotogrammi", + "camera grid ready": "griglia telecamere pronta", + "Clearing selected data layers": "Disattivazione dei livelli dati selezionati", + "Clear selected data layers": "Disattiva i livelli dati selezionati", + "CONDITIONS UNKNOWN": "CONDIZIONI SCONOSCIUTE", + "CLEAR": "SERENO", + "PARTLY CLOUDY": "POCO NUVOLOSO", + "OVERCAST": "COPERTO", + "FOG": "NEBBIA", + "DRIZZLE": "PIOGGERELLA", + "RAIN": "PIOGGIA", + "RAIN SHOWERS": "ROVESCI DI PIOGGIA", + "SNOW SHOWERS": "ROVESCI DI NEVE", + "THUNDERSTORM": "TEMPORALE", + "MIXED CONDITIONS": "CONDIZIONI MISTE", + "CYCLE ON": "CICLO ON", + "CYCLE OFF": "CICLO OFF", + "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Ferma lo scorrimento automatico delle pagine. Precedente, Successiva e le schede SIG/NEWS/LOCAL restano disponibili.", + "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.": "Scorre automaticamente le pagine del briefing ogni 9 secondi (Segnali → Notizie → Locale). Si mette in pausa quando passi sul pannello o lo selezioni. I dati dei segnali live si aggiornano comunque di continuo.", + "ACQUIRING REGIONAL NEWS": "ACQUISIZIONE NOTIZIE REGIONALI", + "REGIONAL NEWS UNAVAILABLE": "NOTIZIE REGIONALI NON DISPONIBILI", + "RESOLVING REGION": "RISOLUZIONE REGIONE", + "REGION UNAVAILABLE": "REGIONE NON DISPONIBILE", + "NO RECENT LOCATION MATCHES": "NESSUNA CORRISPONDENZA RECENTE PER POSIZIONE", + "{domain} · {age}": "{domain} · {age}", + "CLOUD {pct}%": "NUVOLE {pct}%", + "CLOUD UNKNOWN": "NUVOLE SCONOSCIUTE", + "{source} · LOCATION QUERY": "{source} · QUERY PER POSIZIONE", + "REGIONAL NEWS": "NOTIZIE REGIONALI", + "CONTEXT STANDBY": "CONTESTO IN ATTESA", + "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "ATTIVA IL CONTESTO GLOBALE PER I PING DI PROSSIMITÀ", + "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "CONTATTO PERSO · ULTIMA LETTURA NOTA · NON È UN VIA LIBERA", + "CONTACT LOST · {subject}": "CONTATTO PERSO · {subject}", + "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "IL SOGGETTO HA LASCIATO IL FEED · LETTURA ALL'ULTIMO VALORE NOTO", + "{cohort} · {contact}": "{cohort} · {contact}", + "NO AVAILABLE EXAMPLE": "NESSUN ESEMPIO DISPONIBILE", + "{cohort}, Unavailable": "{cohort}, non disponibile", + "AHEAD": "DAVANTI", + "{side} {angle}": "{side} {angle}", + "L": "S", + "R": "D", + "{count} INPUTS UNKNOWN · NOT AN ALL-CLEAR": { + "one": "{count} INPUT SCONOSCIUTO · NON È UN VIA LIBERA", + "other": "{count} INPUT SCONOSCIUTI · NON È UN VIA LIBERA" + }, + "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "INPUT DISPONIBILI AGGIORNATI · NON È UN VIA LIBERA", + "AIRCRAFT": "AEREO", + "ACQUIRING SURFACE": "ACQUISIZIONE SUPERFICIE", + "SURFACE FALLBACK": "FALLBACK SUPERFICIE", + "STALE FEED": "FEED OBSOLETO", + "LIVE TRACK": "TRACCIA LIVE", + "COMMERCIAL": "COMMERCIALE", + "{aircraftClass} · {feedState} · COURSE ALIGNED": "{aircraftClass} · {feedState} · ROTTA ALLINEATA", + "ARROW · ESTIMATED DIRECTION": "FRECCIA · DIREZIONE STIMATA", + "ROUTE DATA UNAVAILABLE": "DATI ROTTA NON DISPONIBILI", + "DEST {bearing}": "DEST {bearing}", + "Disable cockpit weather effects": "Disattiva gli effetti meteo del cockpit", + "Enable cockpit weather effects": "Attiva gli effetti meteo del cockpit", + "ON": "ON", + "Normal": "Normale", + "Night vision": "Visione notturna", + "Thermal": "Termico", + "Anime": "Anime", + "Noir": "Noir", + "Snow": "Neve", + "Current cockpit vision style: {style}. Activate for next style.": "Stile di visione del cockpit attuale: {style}. Attiva per lo stile successivo.", + "Current style: {style} — click for next": "Stile attuale: {style} — clic per il successivo", + "Collapse Contact panel": "Comprimi il pannello Contatto", + "Expand Contact panel": "Espandi il pannello Contatto", + "Collapse contact panel": "Comprimi pannello contatto", + "Expand contact panel": "Espandi pannello contatto", + "Collapse cockpit briefing panel": "Comprimi il pannello briefing del cockpit", + "Expand cockpit briefing panel": "Espandi il pannello briefing del cockpit", + "Collapse briefing panel": "Comprimi pannello briefing", + "Expand briefing panel": "Espandi pannello briefing", + "OBSERVED / MAPPED PINGS": "PING OSSERVATI / MAPPATI", + "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "EVENTI DA FONTI · NESSUNA NOTIZIA SINTETICA", + "LATEST LOCATION-MATCHED REPORTING": "ULTIME NOTIZIE PER POSIZIONE", + "LOCAL INFO": "INFO LOCALI", + "PLACE / CONDITIONS / POSITION": "LUOGO / CONDIZIONI / POSIZIONE", + "TIME UNKNOWN": "ORA SCONOSCIUTA", + "{count}M AGO": "{count} MIN FA", + "{count}H AGO": "{count} H FA", + "{count}D AGO": "{count} G FA", + "DIR UNKNOWN": "DIR SCONOSCIUTA", + "Select flight {title}": "Seleziona il volo {title}", + "{aircraftClass} · CURRENT": "{aircraftClass} · ATTUALE", + "MILITARY FLIGHT": "VOLO MILITARE", + "COMMERCIAL FLIGHT": "VOLO COMMERCIALE", + "{aircraftClass} · {distance}": "{aircraftClass} · {distance}", + "DISTANCE UNKNOWN": "DISTANZA SCONOSCIUTA", + "{count} INPUTS UNKNOWN": { + "one": "{count} INPUT SCONOSCIUTO", + "other": "{count} INPUT SCONOSCIUTI" + }, + "SOURCE STATUS UNAVAILABLE": "STATO FONTE NON DISPONIBILE", + "Restore real aircraft": "Ripristina l'aereo reale", + "Reclassify as TR-3B": "Riclassifica come TR-3B", + "TRACK ACQUIRED": "TRACCIA ACQUISITA", + "{label} · COURSE {heading}°": "{label} · ROTTA {heading}°", + "Context could not restore every layer; try again": "Il Contesto non ha potuto ripristinare tutti i livelli; riprova", + "No selected data layers": "Nessun livello dati selezionato", + "{count} data layers could not be cleared": { + "one": "{count} livello dati non è stato disattivato", + "other": "{count} livelli dati non sono stati disattivati" + }, + "Cleared {count} data layers": { + "one": "Disattivato {count} livello dati", + "other": "Disattivati {count} livelli dati" + }, + "Selected data layers could not be cleared": "Impossibile disattivare i livelli dati selezionati", + "Space Missions could not complete the requested transition; try again": "Impossibile completare la transizione richiesta per Missioni spaziali; riprova", + "Nearby installations refreshed": "Installazioni vicine aggiornate", + "Nearby installations could not be refreshed; try again": "Impossibile aggiornare le installazioni vicine; riprova", + "Space Missions cancellation could not restore the previous layer state": "L'annullamento di Missioni spaziali non ha potuto ripristinare lo stato precedente dei livelli", + "That layer is unavailable in the current Context mode": "Quel livello non è disponibile nella modalità Contesto attuale", + "{layerId} could not {action} cleanly": "{layerId} non ha potuto {action} correttamente", + "start": "avviarsi", + "stop": "fermarsi", + "{mode} could not start because another layer did not stop cleanly": "Impossibile avviare {mode}: un altro livello non si è fermato correttamente", + "Space Missions": "Missioni spaziali", + "Context": "Contesto", + "Live Flights": "Voli Live", + "Military Flights": "Voli Militari", + "Earthquakes (24h)": "Terremoti (24h)", + "Satellites": "Satelliti", + "Space Missions (30d)": "Missioni Spaziali (30g)", + "Street Traffic": "Traffico Stradale", + "CCTV": "CCTV", + "Radio": "Radio", + "Bikeshare": "Bike Sharing", + "Live AIS Vessels": "Navi AIS Live", + "Mapped Installations": "Installazioni Mappate", + "Global Context": "Contesto Globale", + "Datacenters": "Data Center", + "Dams": "Dighe", + "Submarine Cables": "Cavi Sottomarini", + "FIRMS Active Fires": "Incendi Attivi FIRMS", + "ENABLING": "ATTIVAZIONE", + "DISABLING": "DISATTIVAZIONE", + "{state} · {source}": "{state} · {source}", + "UNCERTAIN · {source} · lifecycle state requires reconciliation": "INCERTO · {source} · lo stato del ciclo di vita richiede riconciliazione", + "{state} · {source} · {detail} · retry {seconds}s": "{state} · {source} · {detail} · nuovo tentativo tra {seconds}s", + "{state} · {source} · {detail}": "{state} · {source} · {detail}", + "never": "mai", + "{source} · {loadingLabel}": "{source} · {loadingLabel}", + "{accepted} of {raw} records accepted": "{accepted} record accettati su {raw}", + "incomplete snapshot": "snapshot incompleto", + "{state} · {source} · {detail} · {ago}": "{state} · {source} · {detail} · {ago}", + "{state} · {source} · {ago} · retrying in {seconds}s": "{state} · {source} · {ago} · nuovo tentativo tra {seconds}s", + "{state} · {source} · {ago}": "{state} · {source} · {ago}", + "{source} · {ago}": "{source} · {ago}", + "UNCERTAIN": "INCERTO", + "{name}: {state}": "{name}: {state}", + "{count}s ago": "{count}s fa", + "CONNECTING": "CONNESSIONE", + "📍 Location: --": "📍 Posizione: --", + "Landmark: --": "Punto di interesse: --", + "Searched location": "Luogo cercato", + "ORBIT": "ORBITA", + "Location not found": "Luogo non trovato", + "Search failed": "Ricerca non riuscita", + "Fly to a POI first": "Vola prima a un punto di interesse", + "Reset to full globe view": "Ripristina la vista del globo intero", + "Reset cockpit to full globe view": "Ripristina il cockpit alla vista del globo intero", + "Resetting to full globe view": "Ripristino della vista del globo intero", + "Resetting cockpit to full globe view": "Ripristino del cockpit alla vista del globo intero", + "MAP": "MAPPA", + "panel": "pannello", + "Expand {name}": "Espandi {name}", + "Collapse {name}": "Comprimi {name}", + "Expand Radio": "Espandi Radio", + "Collapse Radio": "Comprimi Radio", + "Expand Radio section": "Espandi la sezione Radio", + "Collapse Radio section": "Comprimi la sezione Radio", + "Panel layout updated — positions reset to new defaults": "Layout dei pannelli aggiornato — posizioni ripristinate ai nuovi valori predefiniti", + "Collapse Cockpit display options": "Comprimi le opzioni display del cockpit", + "Expand Cockpit display options": "Espandi le opzioni display del cockpit", + "Collapse Cockpit Radio controls": "Comprimi i controlli Radio del cockpit", + "Expand Cockpit Radio controls": "Espandi i controlli Radio del cockpit", + "NO STATIONS": "NESSUNA STAZIONE", + "NO STATION AVAILABLE": "NESSUNA STAZIONE DISPONIBILE", + "{name}, station {index} of {total}": "{name}, stazione {index} di {total}", + "No station available": "Nessuna stazione disponibile", + "OFF AIR": "FUORI ONDA", + "STATION UNAVAILABLE": "STAZIONE NON DISPONIBILE", + "Radio could not {action} cleanly": "La Radio non ha potuto {action} correttamente", + "Close compact Radio controls": "Chiudi i controlli Radio compatti", + "Open compact Radio controls": "Apri i controlli Radio compatti", + "SYNC": "SYNC", + "RECONCILE": "RICONCILIA", + "DISABLE": "DISATTIVA", + "ENABLE": "ATTIVA", + "Reconcile Radio — lifecycle uncertain": "Riconcilia la Radio — ciclo di vita incerto", + "Disable Radio": "Disattiva la Radio", + "Enable Radio": "Attiva la Radio", + "DIRECTORY BAND": "BANDA ELENCO", + "{category} BAND": "BANDA {category}", + "NO STATION SELECTED": "NESSUNA STAZIONE SELEZIONATA", + "Directory metadata only": "Solo metadati dell'elenco", + "Loading station directory…": "Caricamento dell'elenco stazioni…", + "Choose a globe marker or use next.": "Scegli un marcatore sul globo o usa SUCC.", + "TAGS · {tags}": "TAG · {tags}", + "Play": "Riproduci", + "PLAY": "PLAY", + "selected": "selezionata", + "nearest": "più vicina", + "{action} {target} radio station": "{action} stazione radio {target}", + "RADIO STATE UNCERTAIN": "STATO RADIO INCERTO", + "SYNCING DIRECTORY": "SINCRONIZZAZIONE ELENCO", + "RADIO READY": "RADIO PRONTA", + "SYNCING": "SYNC IN CORSO", + "READY": "PRONTA", + "station": "stazione", + " · stale/degraded directory": " · elenco obsoleto/degradato", + " · degraded directory": " · elenco degradato", + " · stale directory": " · elenco obsoleto", + " · outside current filter": " · fuori dal filtro attuale", + "Ready — playback starts only from your action": "Pronta — la riproduzione parte solo su tua azione", + "Radio off": "Radio spenta", + "Connecting directly to broadcaster…": "Connessione diretta all'emittente…", + "Buffering broadcaster stream…": "Buffering del flusso dell'emittente…", + "Playing {station}": "In riproduzione: {station}", + "Paused {station}": "In pausa: {station}", + "Broadcaster stream unavailable": "Flusso dell'emittente non disponibile", + " · muted during voice interaction": " · silenziata durante l'interazione vocale", + " · restoring volume after voice": " · ripristino del volume dopo la voce", + " · static indicates no broadcaster audio": " · il rumore indica assenza di audio dall'emittente", + " · tuning static until broadcaster starts": " · rumore di sintonia fino all'avvio dell'emittente", + "Station unavailable after directory refresh — choose another channel": "Stazione non disponibile dopo l'aggiornamento dell'elenco — scegli un altro canale", + "Radio is enabling…": "Attivazione della Radio…", + "Radio is disabling…": "Disattivazione della Radio…", + "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "Il ciclo di vita della Radio è incerto — usa Attiva o Disattiva per riconciliare", + "Scene action failed": "Azione sulla scena non riuscita", + "Delete shot \"{shot}\"?": "Eliminare lo scatto \"{shot}\"?", + "SPARSE": "RADA", + "BALANCED": "BILANCIATA", + "DEL": "ELIM", + "entity": "elemento", + "Shared {subject} follow expired": "Il tracciamento condiviso di {subject} è scaduto", + "Shared {subject} could not be restored — feed unavailable": "Impossibile ripristinare la condivisione di {subject} — feed non disponibile", + "Shared {subject} is unavailable": "La condivisione di {subject} non è disponibile", + "ACQUIRING": "ACQUISIZIONE", + "SHARED {subject}": "CONDIVISO: {subject}", + "LOADING LIVE DATA": "CARICAMENTO DATI LIVE", + "LOAD COMPLETE": "CARICAMENTO COMPLETATO", + "LOAD CANCELLED": "CARICAMENTO ANNULLATO", + "LOAD FAILED": "CARICAMENTO FALLITO", + "LIVE DATA OFF": "DATI LIVE DISATTIVATI", + "MAPPED SITES LOADED": "SITI MAPPATI CARICATI", + "RETRYING MAPPED SITES": "NUOVO TENTATIVO SITI MAPPATI", + "FETCHING MAPPED SITES": "RICERCA SITI MAPPATI", + "TURNING OFF LIVE DATA": "DISATTIVAZIONE DATI LIVE", + "REFRESHING LIVE DATA": "AGGIORNAMENTO DATI LIVE", + "syncing road network": "sincronizzazione rete stradale", + "retry pending": "nuovo tentativo in sospeso", + "retrying in {seconds}s": "nuovo tentativo tra {seconds}s", + "Celestial ring — reveal the full globe": "Anello celeste — mostra il globo intero", + "Celestial ring — available in Normal style": "Anello celeste — disponibile nello stile Normale", + "Detection overlay: {mode}": "Overlay di rilevamento: {mode}", + "Detection overlay: off": "Overlay di rilevamento: disattivato", + "DETECT": "RILEV.", + "voice|LISTENING": "IN ASCOLTO", + "voice|EXECUTING": "ESECUZIONE", + "AI AGENT": "AGENTE IA", + "Voice model tier — applies next session": "Livello del modello vocale: si applica alla prossima sessione", + "Estimated session cost": "Costo stimato della sessione", + "Voice control — activate to toggle voice; hold Space to speak": "Controllo vocale: attiva per abilitare la voce; tieni premuto Spazio per parlare", + "VOICE STANDBY": "VOCE IN ATTESA", + "VOICE CONTROL": "CONTROLLO VOCALE", + "Hold Space to speak · tap Space to activate focused controls": "Tieni premuto Spazio per parlare · tocca Spazio per attivare i controlli in focus", + "VOICE SYSTEM ERROR": "ERRORE SISTEMA VOCALE", + "DISMISS": "CHIUDI", + "Check microphone permission and network access, then try again.": "Controlla il permesso del microfono e l'accesso alla rete, poi riprova.", + "Release Space to send": "Rilascia Spazio per inviare", + "Hold Space to talk": "Tieni premuto Spazio per parlare", + "Requesting microphone": "Richiesta microfono", + "Ask or command": "Chiedi o comanda", + "Running command": "Comando in esecuzione", + "Voice off": "Voce disattivata", + "WebRTC microphone support unavailable": "Supporto microfono WebRTC non disponibile", + "VOICE UNAVAILABLE": "VOCE NON DISPONIBILE", + "VOICE ACTIVE": "VOCE ATTIVA", + "Voice session could not be started.": "Impossibile avviare la sessione vocale.", + "Next session: {pendingId} — this session stays on {modelId}": "Prossima sessione: {pendingId}. Questa sessione resta su {modelId}", + "Voice model: {pendingId} — click to switch to {target}; applies next session": "Modello vocale: {pendingId}. Clic per passare a {target}; si applica alla prossima sessione", + "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Costo stimato della sessione su {modelId}: {responses} risposta/e. Avviso a {warn}, la sessione termina a {cap}.", + "{tier} applies next session": "{tier} si applica alla prossima sessione", + "Session ended — cost cap {cost}": "Sessione terminata: limite di costo {cost}", + "Radio did not start": "La radio non si è avviata", + "Aircraft cockpit view": "Vista cockpit dell'aereo", + "LEVEL": "LIVELLO", + "Estimated destination direction": "Direzione stimata della destinazione", + "DEST ---°": "DEST ---°", + "OPTICAL PLANE · 01": "PIANO OTTICO · 01", + "VISOR LOCK · ACTIVE": "BLOCCO VISIERA · ATTIVO", + "GROUND SPEED · KTS": "VEL. AL SUOLO · KTS", + "ALTITUDE · FT": "ALTITUDINE · FT", + "FIRST PERSON": "PRIMA PERSONA", + "LIVE TRACK · COURSE ALIGNED": "TRACCIA LIVE · ROTTA ALLINEATA", + "Cockpit vision style": "Stile di visione del cockpit", + "Previous cockpit vision style": "Stile di visione del cockpit precedente", + "Previous vision style": "Stile di visione precedente", + "Current cockpit vision style: NORMAL. Activate for next style.": "Stile di visione del cockpit attuale: NORMALE. Attiva per lo stile successivo.", + "Current style: NORMAL — click for next": "Stile attuale: NORMALE — clic per il successivo", + "CURRENT": "ATTUALE", + "Next cockpit vision style": "Stile di visione del cockpit successivo", + "Next vision style": "Stile di visione successivo", + "Current aircraft heading": "Prua attuale dell'aereo", + "GROUND SPEED": "VEL. AL SUOLO", + "ALTITUDE": "ALTITUDINE", + "Contact cockpit summary": "Riepilogo contatto del cockpit", + "CONTACT": "CONTATTO", + "CONTACTS · 250 KM": "CONTATTI · 250 KM", + "Contact navigation": "Navigazione contatti", + "CONTEXT ONLY": "SOLO CONTESTO", + "Nearby cohort counts": "Conteggi dei gruppi vicini", + "NEAREST OBSERVED / MAPPED": "PIÙ VICINO OSSERVATO / MAPPATO", + "AVAILABLE INPUTS ONLY · NOT AN ALL-CLEAR": "SOLO INPUT DISPONIBILI · NON È UN VIA LIBERA", + "Cockpit briefing carousel": "Carosello briefing del cockpit", + "Estimated flight plan": "Piano di volo stimato", + "ESTIMATED FLIGHT PLAN": "PIANO DI VOLO STIMATO", + "FROM": "DA", + "TO": "A", + "Cockpit briefing controls": "Controlli briefing del cockpit", + "Previous briefing page": "Pagina briefing precedente", + "Next briefing page": "Pagina briefing successiva", + "Live signals": "Segnali live", + "Latest regional news": "Ultime notizie regionali", + "Location-based information": "Informazioni basate sulla posizione", + "TEMP": "TEMP", + "WIND": "VENTO", + "SKY": "CIELO", + "PRECIP": "PRECIP", + "Show Live Signals": "Mostra Segnali live", + "NEWS": "NOTIZIE", + "Show Regional News": "Mostra Notizie regionali", + "Show Local Info": "Mostra Info locali", + "Cockpit display and Radio controls": "Controlli display e Radio del cockpit", + "DISPLAY": "DISPLAY", + "Cockpit display options": "Opzioni display del cockpit", + "RADIO": "RADIO", + "Cockpit compact Radio controls": "Controlli Radio compatti del cockpit", + "Previous filtered radio station": "Stazione radio filtrata precedente", + "Play selected radio station": "Riproduci la stazione radio selezionata", + "Next filtered radio station": "Stazione radio filtrata successiva", + "VOLUME": "VOLUME", + "Cockpit Radio volume": "Volume Radio del cockpit", + "View switcher": "Selettore vista", + "Exit cockpit and return to full globe view": "Esci dal cockpit e torna alla vista del globo intero", + "RESET": "RESET", + "Exit cockpit view": "Esci dalla vista cockpit", + "EXIT COCKPIT": "ESCI DAL COCKPIT", + "Navigation, voice, and visual preset controls": "Controlli di navigazione, voce e preset visivi", + "Expand Visual Presets": "Espandi Preset visivi", + "Pin visual presets": "Fissa i preset visivi", + "Keep visual presets open": "Mantieni aperti i preset visivi", + "Show the globe without a visual filter.": "Mostra il globo senza filtro visivo.", + "Emulate a green phosphor CRT with scanlines and screen curvature.": "Emula un CRT a fosfori verdi con scanline e curvatura dello schermo.", + "Simulate night-vision goggles with green intensification and a tube vignette.": "Simula la visione notturna con intensificazione verde e vignettatura del tubo.", + "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Simula il contrasto termico in stile FLIR. Alza Ironbow per il colore.", + "Apply bright cel-shaded color and illustrated outlines.": "Applica colori vivaci cel-shaded e contorni illustrati.", + "Apply high-contrast monochrome film-noir grading.": "Applica un color grading noir monocromatico ad alto contrasto.", + "Add a cold, snowy whiteout treatment to the scene.": "Aggiunge alla scena un effetto freddo di nevicata e whiteout.", + "MAP SOURCE": "FONTE MAPPA", + "Map source": "Fonte mappa", + "Style": "Stile", + "Expand LOCATION": "Espandi POSIZIONE", + "Collapse panel": "Comprimi pannello", + "Pin location tray": "Fissa il pannello posizione", + "Keep location tray open": "Mantieni aperto il pannello posizione", + "Search any location": "Cerca un luogo qualsiasi", + "Search location by name or coordinates": "Cerca un luogo per nome o coordinate", + "Search any location...": "Cerca un luogo qualsiasi...", + "WEATHER": "METEO", + "CONTEXT": "CONTESTO", + "Compact Radio controls": "Controlli Radio compatti", + "Open detailed Radio controls": "Apri i controlli Radio dettagliati", + "Previous station": "Stazione precedente", + "Next station": "Stazione successiva", + "Compact Radio volume": "Volume Radio compatto", + "Expand panel": "Espandi pannello", + "Context mode": "Modalità contesto", + "CONTACTS": "CONTATTI", + "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Scorre i contatti più vicini del tipo selezionato: aerei, navi, installazioni. I satelliti vengono tracciati in modo indipendente.", + "SPACE MISSIONS": "MISSIONI SPAZIALI", + "SELECT CONTEXT": "SELEZIONA CONTESTO", + "Contact Context actions": "Azioni Contesto contatto", + "COCKPIT": "COCKPIT", + "SEARCH NEARBY SITES": "CERCA SITI VICINI", + "Reclassify tracked contact as TR-3B": "Riclassifica il contatto tracciato come TR-3B", + "CONTACTS CONTEXT OFF": "CONTESTO CONTATTI DISATTIVATO", + "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "SELEZIONA CONTATTI PER CARICARE LA PROSSIMITÀ OSSERVATA / MAPPATA", + "Available Space Missions": "Missioni spaziali disponibili", + "AVAILABLE MISSIONS": "MISSIONI DISPONIBILI", + "SELECT A MISSION TO INSPECT": "SELEZIONA UNA MISSIONE DA ESAMINARE", + "LOADING 30-DAY MISSION INDEX": "CARICAMENTO INDICE MISSIONI A 30 GIORNI", + "TAB PREVIEWS · ENTER / SPACE SELECTS": "TAB ANTEPRIMA · INVIO / SPAZIO SELEZIONA", + "Internet radio and local SDR": "Radio internet e SDR locale", + "STATION TAG": "TAG STAZIONE", + "Filter stations by station tag": "Filtra le stazioni per tag", + "All": "Tutti", + "Enable Radio, then choose a globe marker or use next.": "Attiva la Radio, poi scegli un marcatore sul globo o usa SUCC.", + "DRAG TO TUNE": "TRASCINA PER SINTONIZZARE", + "ALL · DRAG THE NEEDLE": "TUTTE · TRASCINA L'AGO", + "SNAPS TO AVAILABLE STATIONS": "SI AGGANCIA ALLE STAZIONI DISPONIBILI", + "Radio playback": "Riproduzione radio", + "Previous filtered station": "Stazione filtrata precedente", + "Play selected station": "Riproduci la stazione selezionata", + "Next filtered station": "Stazione filtrata successiva", + "STOP": "STOP", + "Stop radio playback": "Ferma la riproduzione radio", + "Radio volume": "Volume radio", + "STATION SITE": "SITO STAZIONE", + "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "L'audio si collega direttamente all'emittente dopo aver premuto play. Il tuo IP è visibile a quell'emittente.", + "Intelligence HUD (H)": "HUD Intelligence (H)", + "Layout": "Layout", + "HUD layout": "Layout HUD", + "Tactical": "Tattico", + "Operator": "Operatore", + "Minimal": "Minimale", + "Detection Overlay (D)": "Overlay di rilevamento (D)", + "Detection overlay": "Overlay di rilevamento", + "Detection label density": "Densità delle etichette di rilevamento", + "Allocation": "Allocazione", + "Detection label allocation": "Allocazione delle etichette di rilevamento", + "Elastic": "Elastica", + "Weighted": "Ponderata", + "Fade": "Dissolv.", + "Detection fade distance": "Distanza di dissolvenza del rilevamento", + "World-overlay fade distance outside the keyhole as a percentage of its radius": "Distanza di dissolvenza dell'overlay fuori dal foro, come percentuale del suo raggio", + "Outside": "Esterno", + "Detection opacity outside the keyhole": "Opacità del rilevamento fuori dal foro", + "World-overlay label and card opacity beyond the fade distance": "Opacità di etichette e schede dell'overlay oltre la distanza di dissolvenza", + "PARAMETERS": "PARAMETRI", + "3D aircraft — flat icons zoomed out, 3D models up close": "Aerei 3D — icone piatte da lontano, modelli 3D da vicino", + "Models": "Modelli", + "3D model coverage": "Copertura dei modelli 3D", + "Proximity": "Prossimità", + "Scope — the circular viewport mask": "Scope — la maschera circolare della vista", + "Scope": "Scope", + "Feather": "Sfumatura", + "Scope edge feather": "Sfumatura del bordo dello scope", + "Scope edge feather as a percentage of the keyhole radius": "Sfumatura del bordo dello scope, come percentuale del raggio del foro", + "Celestial": "Celeste", + "Hide UI chrome": "Nascondi l'interfaccia", + "Clean UI": "UI pulita", + "Bloom / Glow": "Bloom / Bagliore", + "Bloom intensity": "Intensità del bloom", + "Sharpening": "Nitidezza", + "Sharpen": "Nitidezza", + "Sharpen intensity": "Intensità della nitidezza", + "EXIT CLEAN VIEW": "ESCI DA VISTA PULITA", + "Return UI controls": "Ripristina i controlli UI", + "Initializing photorealistic world...": "Inizializzazione del mondo fotorealistico...", + "DATA LAYERS": "LIVELLI DATI", + "NEAREST": "PIÙ VICINA", + "CCTV camera": "Telecamera CCTV", + "CALIBRATION": "CALIBRAZIONE", + "Drag the camera in the world: rings rotate, arrows move, handles set range/FOV": "Trascina la telecamera nel mondo: gli anelli ruotano, le frecce spostano, i punti di controllo impostano portata/FOV", + "Camera pose — click a value to type": "Posa della telecamera — clic su un valore per digitare", + "Heading (compass °) — click to type": "Direzione (bussola °) — clic per digitare", + "Pitch (° up/down) — click to type": "Inclinazione (° su/giù) — clic per digitare", + "Horizontal FOV (°) — click to type": "FOV orizzontale (°) — clic per digitare", + "Range / monitor-plane distance (m) — click to type": "Portata / distanza del piano monitor (m) — clic per digitare", + "Mount height above ground (m) — click to type": "Altezza di montaggio dal suolo (m) — clic per digitare", + "North offset from catalog position (m) — click to type": "Scostamento a nord dalla posizione a catalogo (m) — clic per digitare", + "East offset from catalog position (m) — click to type": "Scostamento a est dalla posizione a catalogo (m) — clic per digitare", + "SAVE CAL": "SALVA CAL", + "RESET CAL": "RESET CAL", + "SCENE SUMMARY": "RIEPILOGO SCENA", + "SCENES": "SCENE", + "Scene recipe": "Ricetta della scena", + "NEW": "NUOVA", + "CAPTURE SHOT": "CATTURA SCATTO", + "UPDATE SHOT": "AGGIORNA SCATTO", + "START": "AVVIA", + "EXPORT PRESETS": "ESPORTA PRESET", + "IMPORT": "IMPORTA", + "RUN LOG": "LOG ESECUZIONE", + "POWER UP": "POWER UP", + "GROUND STATION · PROVIDER SETTINGS": "STAZIONE A TERRA · IMPOSTAZIONI PROVIDER", + "Close key setup": "Chiudi la configurazione delle chiavi", + "Power up the globe": "Accendi il globo", + "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.": "Il globo funziona già senza chiavi. Ogni chiave qui sotto attiva un altro feed reale: incollane una e verrà salvata nella configurazione locale di questa app, poi il server si riavvia da solo. Le chiavi lato server restano su questa macchina; Google Maps e Cesium ion funzionano nel browser e vanno limitate al provider. Le chiavi configurate altrove vengono mostrate ma mai modificate.", + "SAVE KEYS": "SALVA CHIAVI", + "ESC to close": "ESC per chiudere", + "The Google Maps key buys the photorealistic planet — everything else stacks on top.": "La chiave Google Maps sblocca il pianeta fotorealistico: tutto il resto si aggiunge sopra.", + "NO PLACE LEFT BEHIND": "NESSUN LUOGO ESCLUSO", + "ACTIVE STYLE": "STILE ATTIVO", + "Globe actions": "Azioni del globo", + "Turn off all selected data layers": "Disattiva tutti i livelli dati selezionati", + "Copy share link": "Copia il link di condivisione", + "Reset camera and return to full globe view": "Ripristina la camera e torna alla vista del globo intero", + "MISSION CONTROL · FIRST LAUNCH": "CONTROLLO MISSIONE · PRIMO AVVIO", + "Choose your first view": "Scegli la tua prima vista", + "LIVE CONTACTS": "CONTATTI LIVE", + "Aircraft, vessels and nearby intelligence": "Aerei, navi e intelligence nelle vicinanze", + "Launches, spacecraft and orbital context": "Lanci, veicoli spaziali e contesto orbitale", + "EXPLORE MANUALLY": "ESPLORA A MANO", + "Begin with a clean globe": "Inizia con un globo pulito", + "Don't show this again": "Non mostrare più", + "ESC to dismiss": "ESC per chiudere", + "Tip: the GEV MIC button in the dock lets you talk to the map.": "Suggerimento: il pulsante GEV MIC nel dock ti permette di parlare con la mappa." +} From e2acee4b0a29d4d273b16343117b055a6dbe3754 Mon Sep 17 00:00:00 2001 From: Meir Michanie Date: Wed, 28 Oct 2026 12:37:13 +0400 Subject: [PATCH 02/20] i18n(uk): Ukrainian strings from #312 The Ukrainian locale by meirm (#312), converted from its namespaced JS catalogs to the English-keyed uk.json: 832 entries whose English still matches the current UI. --- src/i18n/locales/uk.json | 869 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 869 insertions(+) create mode 100644 src/i18n/locales/uk.json diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json new file mode 100644 index 000000000..09fdc59e3 --- /dev/null +++ b/src/i18n/locales/uk.json @@ -0,0 +1,869 @@ +{ + "Flying to Austin, TX...": "Переліт до Austin, TX...", + "Restoring shared view...": "Відновлення спільного вигляду...", + "Configuring viewer...": "Налаштування переглядача...", + "Loading Google 3D Tiles...": "Завантаження Google 3D Tiles...", + "Loading the keyless globe...": "Завантаження глобуса без ключа...", + "Google 3D Tiles unavailable ({detail}). Loading the keyless globe...": "Google 3D Tiles недоступні ({detail}). Завантаження глобуса без ключа...", + "Initializing systems...": "Ініціалізація систем...", + "Close data attribution": "Закрити відомості про джерела даних", + "UNAVAILABLE": "НЕДОСТУПНО", + "SOURCE": "ДЖЕРЕЛО", + "Overpass rate-limited": "Overpass обмежує частоту запитів", + "Overpass timed out": "Перевищено час очікування Overpass", + "Overpass could not complete the query": "Overpass не зміг завершити запит", + "Overpass temporarily unavailable": "Overpass тимчасово недоступний", + "Retrying mapped sites…": "Повторне завантаження нанесених об’єктів…", + "Fetching mapped sites…": "Завантаження нанесених об’єктів…", + "{reason} — retrying in {seconds}s": "{reason} — повтор через {seconds} с", + "{reason} — retry pending": "{reason} — очікується повтор", + "Zoom in to search mapped installations": "Наблизьте карту, щоб шукати нанесені об’єкти", + "Showing cached mapped sites": "Показано кешовані нанесені об’єкти", + "Mapped sites not loaded": "Нанесені об’єкти не завантажено", + "Mapped sites loaded": "Нанесені об’єкти завантажено", + "feed unavailable": "канал даних недоступний", + "feed stale": "канал даних застарів", + "observed or mapped nearby context": "спостережений або нанесений контекст поблизу", + "no observed or mapped objects in current feeds": "немає спостережених або нанесених об’єктів у поточних каналах даних", + "STATION": "СТАНЦІЇ", + "Crewed stations and their visiting vehicles": "Пілотовані станції та кораблі відвідування", + "NAV": "НАВ", + "GNSS navigation — GPS, GLONASS, Galileo": "Навігація GNSS — GPS, GLONASS, Galileo", + "GEO": "ГЕО", + "Geostationary belt — comms and weather, fixed over the equator": "Геостаціонарний пояс — зв’язок і погода, нерухомо над екватором", + "VISUAL": "ВИДИМІ", + "Brightest naked-eye objects — CelesTrak visual group": "Найяскравіші об’єкти для неозброєного ока — група visual CelesTrak", + "COMMS": "ЗВ’ЯЗОК", + "Broadband constellation shell — shown only in DENSE mode": "Оболонка широкосмугового угруповання — лише в режимі ЩІЛЬНО", + "FISHING": "РИБАЛЬСЬКЕ", + "TOWING": "БУКСИРУВАННЯ", + "DREDGER": "ДНОПОГЛИБ.", + "DIVE OPS": "ВОДОЛАЗНІ РОБОТИ", + "MILITARY": "ВІЙСЬКОВЕ", + "SAILING": "ВІТРИЛЬНЕ", + "PLEASURE": "ПРОГУЛКОВЕ", + "PILOT": "ЛОЦМАН", + "SAR": "SAR", + "TUG": "БУКСИР", + "PORT TENDER": "ПОРТОВИЙ КАТЕР", + "ANTI-POLLUTION": "АНТИЗАБРУДНЕННЯ", + "LAW ENFORCE": "ПРАВООХОРОНА", + "MEDICAL": "МЕДИЧНЕ", + "HIGH-SPEED": "ШВИДКІСНЕ", + "PASSENGER": "ПАСАЖИРСЬКЕ", + "CARGO": "ВАНТАЖНЕ", + "TANKER": "ТАНКЕР", + "OTHER": "ІНШЕ", + "ENVIRONMENTAL": "ДОВКІЛЛЯ", + "EARTH WATCH": "НАГЛЯД ЗА ЗЕМЛЕЮ", + "ACTIVE EVENTS": "АКТИВНІ ПОДІЇ", + "Starting live contacts…": "Запуск контактів у реальному часі…", + "Opening space missions…": "Відкриття космічних місій…", + "Scanning active events…": "Сканування активних подій…", + "Live earthquakes and active fires, from USGS and NASA": "Землетруси в реальному часі й активні пожежі від USGS та NASA", + "It feels like a forbidden cockpit—then you realize the sources are public and the data is real.": "Немов заборонена кабіна — а потім ви усвідомлюєте: джерела публічні, а дані — справжні.", + "Working…": "Працюємо…", + "Could not open that mission{detail}. Retry or explore manually.": "Не вдалося відкрити цю місію{detail}. Повторіть спробу або дослідіть вручну.", + "This browser is blocking storage, so that could not be saved.": "Цей браузер блокує сховище, тож зберегти не вдалося.", + "CRT": "CRT", + "NVG": "NVG", + "FLIR": "FLIR", + "SNOW": "СНІГ", + "LOADING": "ЗАВАНТАЖЕННЯ", + "DEGRADED": "ДЕГРАД.", + "STALE": "ЗАСТАРІЛО", + "FALLBACK": "РЕЗЕРВ", + "SUMMARY": "ЗВЕДЕННЯ", + "Awaiting telemetry...": "Очікування телеметрії...", + "REC": "REC", + "AIS: --": "AIS: --", + "POWER UP · {count} KEYS WAITING": { + "one": "ЗАПУСК · {count} ключ у черзі", + "few": "ЗАПУСК · {count} ключі в черзі", + "many": "ЗАПУСК · {count} ключів у черзі", + "other": "ЗАПУСК · {count} ключа в черзі" + }, + "POWERED UP": "ЗАПУЩЕНО", + "Save failed ({status}).": "Не вдалося зберегти ({status}).", + "REMOVE": "ВИДАЛИТИ", + "Remove {title} from this app's saved keys": "Видалити {title} із збережених ключів застосунку", + "your app configuration": "вашої конфігурації застосунку", + "your local .env": "вашого локального .env", + "Saving…": "Збереження…", + "Save failed: {detail}": "Не вдалося зберегти: {detail}", + "Paste at least one key first.": "Спочатку вставте принаймні один ключ.", + "Saved to {store}. Restarting — this page reloads itself.": "Збережено до {store}. Перезапуск — сторінка перезавантажиться сама.", + "Remove this key from your saved configuration?": "Видалити цей ключ із вашої збереженої конфігурації?", + "Removed from {store}. Restarting — this page reloads itself.": "Видалено з {store}. Перезапуск — сторінка перезавантажиться сама.", + "Places context + Street View fallback; optional separate key": "Контекст Places + резервний Street View; окремий ключ за бажанням", + "Live ships, worldwide": "Судна в реальному часі по всьому світу", + "Live active-fire detections": "Виявлення активних пожеж у реальному часі", + "Real live traffic (keyless runs a simulation)": "Справжній трафік у реальному часі (без ключа — симуляція)", + "Bing imagery map stacks + world terrain": "Стеки карт Bing imagery + світовий рельєф", + "More flight-polling credits (anonymous works without)": "Більше кредитів опитування польотів (працює й анонімно)", + "CONTEXT READY": "КОНТЕКСТ ГОТОВИЙ", + "GLOBAL CONTEXT OFF": "ГЛОБАЛЬНИЙ КОНТЕКСТ ВИМК.", + "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "ВИБЕРІТЬ ЛІТАК, СУДНО ЧИ НАНЕСЕНИЙ ОБ’ЄКТ", + "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "УВІМКНІТЬ ДЛЯ ЗАВАНТАЖЕННЯ СПОСТЕРЕЖЕНОЇ / НАНЕСЕНОЇ ОКРУГИ", + "Unavailable": "Недоступно", + "Focus {label}": "Фокус: {label}", + "Global Context navigation": "Навігація глобального контексту", + "Previous — prior visited contact in the 250 km window": "Попередня — вже відвідана ціль у вікні 250 км", + "PREVIOUS": "ПОПЕРЕДНЯ", + "FOCUS": "ФОКУС", + "Next — nearest unvisited contact in the 250 km window": "Наступна — найближча невідвідана ціль у вікні 250 км", + "NEXT": "ДАЛІ", + "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Контекст із відкритих джерел (нанесений/спостережений). Відсутність трансляцій, незавантажені ділянки карти або ненанесені об’єкти не є доказом відсутності.", + "HDG {value}°": "HDG {value}°", + "BRG {value}°": "BRG {value}°", + "BRG —": "BRG —", + "CRS {value}°": "CRS {value}°", + "CURRENT VIEWPORT ONLY": "ЛИШЕ ПОТОЧНА ОБЛАСТЬ ОГЛЯДУ", + "Flights": "Літаки", + "Military flights": "Військова авіація", + "AIS vessels": "Судна AIS", + "Mapped installations": "Нанесені об’єкти", + "syncing {count} city feeds...": "синхронізація каналів даних {count} міст...", + "scanning nearby systems...": "пошук ближніх систем...", + "Station {id}": "Станція {id}", + "Station": "Станція", + "🚲 {bikes} avail · {docks} docks · {capacity} cap": "🚲 {bikes} вільно · {docks} доків · {capacity} містк.", + "⚠️ Not installed": "⚠️ Не встановлено", + "⚠️ Not renting": "⚠️ Не видає", + "⚠️ Not returning": "⚠️ Не приймає", + "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} КАМЕР ОЧІКУЄ · КАМЕРУ НЕ ВИБРАНО · КЛАЦНІТЬ КАМЕРУ ДЛЯ АКТИВАЦІЇ", + "No cameras available in catalog.": "У каталозі немає доступних камер.", + "{city} CCTV": "CCTV: {city}", + "FOV {value}°": "FOV {value}°", + "COVERAGE {value}km²": "ЗОНА ОГЛЯДУ {value}km²", + "OVERLAP {count} cams": "ПЕРЕКРИТТЯ {count} КАМ.", + "ISOLATED VIEW": "ОКРЕМИЙ ВИГЛЯД", + "PROJ MONITOR": "ПРОЄКЦ. МОНІТОР", + "PROJ OFF": "ПРОЄКЦ. ВИМК.", + "VIEWSHED": "ЗОНА ВИДИМОСТІ", + "CAL {value}": "КАЛ. {value}", + "SRC {value}": "ДЖЕР. {value}", + "{value} CONTEXT": "{value} КОНТЕКСТ", + "Focus fire detection {title}, {details}": "Фокус на виявленні пожежі {title}, {details}", + "{value} conf": "{value} впевн.", + "{value} ago": "{value} тому", + "sensor n/a": "датчик н/д", + "FIRE · {frp} MW": "ПОЖЕЖА · {frp} MW", + "NIGHT": "НІЧ", + "▲ {frp} MW": "▲ {frp} MW", + "FIRE": "ПОЖЕЖА", + "FIRES": "ПОЖЕЖІ", + "max {value} MW": "макс {value} MW", + "new {value}": "нова {value}", + "just now": "щойно", + "<1m ago": "<1 хв тому", + "{count}m ago": "{count} хв тому", + "{count}h ago": "{count} год тому", + "STALE · cached {age}": "ЗАСТАРІЛО · кешовано {age}", + "refreshing...": "оновлення...", + "loading...": "завантаження...", + "KEY REQUIRED": "ПОТРІБЕН КЛЮЧ", + "LIVE · updated {age}": "У РЕАЛЬНОМУ ЧАСІ · оновлено {age}", + "loading mapped installation context": "завантаження контексту нанесених об’єктів", + "MAPPED INSTALLATION": "НАНЕСЕНИЙ ОБ’ЄКТ", + "LAUNCH SITE · {site}": "МІСЦЕ ЗАПУСКУ · {site}", + "LAUNCH SITE": "МІСЦЕ ЗАПУСКУ", + "T−{time} · {mission}": "T−{time} · {mission}", + "LAUNCH STANDBY": "ГОТОВНІСТЬ ДО ЗАПУСКУ", + "LIFTOFF · {mission}": "СТАРТ · {mission}", + "ASCENT REPLAY · {mission}": "ПОВТОР ЗЛЬОТУ · {mission}", + "ASCENT ESTIMATE · {mission}": "РОЗРАХУНКОВИЙ ЗЛІТ · {mission}", + "STAGE RE-ENTRY / RECOVERY · {mission}": "ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ · {mission}", + "ORBIT REPLAY · {mission}": "ПОВТОР ОРБІТИ · {mission}", + "PAUSED · {title}": "ПАУЗА · {title}", + "UNSPECIFIED": "НЕ ВКАЗАНО", + "+{count} additional payload records": "+{count} додаткових записів корисного навантаження", + "PAYLOAD DATA UNAVAILABLE": "ДАНІ КОРИСНОГО НАВАНТАЖЕННЯ НЕДОСТУПНІ", + "{value} KM DOWNRANGE": "{value} KM ПО ТРАЄКТОРІЇ", + "POSITION UNAVAILABLE": "ПОЗИЦІЯ НЕДОСТУПНА", + "FLIGHT {count}": "РЕЙС {count}", + "REUSED": "ПОВТОРНО ВИКОРИСТАНИЙ", + "NO STAGE RE-ENTRY / RECOVERY DATA": "НЕМАЄ ДАНИХ ПРО ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ", + "{count} / 30D": "{count} / 30D", + "NO MISSIONS AVAILABLE IN THE CURRENT 30-DAY WINDOW": "НЕМАЄ МІСІЙ У ПОТОЧНОМУ 30-ДЕННОМУ ВІКНІ", + "DATE UNAVAILABLE": "ДАТА НЕДОСТУПНА", + "UNSPECIFIED OPERATOR": "ОПЕРАТОРА НЕ ВКАЗАНО", + "Select {mission}": "Вибрати {mission}", + "{value} KM": "{value} KM", + "{value} KM/S": "{value} KM/S", + "SELECTED SPACE MISSION": "ВИБРАНА КОСМІЧНА МІСІЯ", + "Show all missions": "Показати всі місії", + "Deselect mission": "Зняти вибір місії", + "MISSION": "МІСІЯ", + "PAYLOAD": "КОРИСНЕ НАВАНТАЖЕННЯ", + "NAME": "НАЗВА", + "TYPE": "ТИП", + "DESTINATION": "ПРИЗНАЧЕННЯ", + "STAGE / RE-ENTRY / RECOVERY": "СТУПІНЬ / ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ", + "STAGE": "СТУПІНЬ", + "STATUS": "СТАТУС", + "FINAL POSITION": "КІНЦЕВА ПОЗИЦІЯ", + "REPLAY SPEED": "ШВИДКІСТЬ ПОВТОРУ", + "Replay speed multiplier": "Множник швидкості повтору", + "REPLAY ASCENT": "ПОВТОР ЗЛЬОТУ", + "Previous mission": "Попередня місія", + "PREV": "ПОПЕР.", + "Next mission": "Наступна місія", + "SHOW ALL / DESELECT": "ПОКАЗАТИ ВСІ / ЗНЯТИ ВИБІР", + "Pause replay": "Призупинити повтор", + "Cancel replay": "Скасувати повтор", + "EST. DOWNRANGE": "РОЗРАХ. ДАЛЬНІСТЬ", + "SUPPLIED TRAJECTORY POINTS": "НАДАНІ ТОЧКИ ТРАЄКТОРІЇ", + "RECONSTRUCTED ESTIMATE": "ВІДТВОРЕНА ОЦІНКА", + "Replay the estimated ascent with a following camera": "Відтворити розрахунковий зліт із камерою-супроводом", + "Resume replay": "Продовжити повтор", + "T minus {seconds}": "T мінус {seconds}", + "Preparing launch site": "Підготовка місця запуску", + "Liftoff": "Старт", + "Ascent replay": "Повтор зльоту", + "Orbit replay": "Повтор орбіти", + ", paused": ", пауза", + "Alt unknown": "Висота невідома", + "Type unknown": "Тип невідомий", + "Reg unknown": "Рег. невідомий", + "Operator unknown": "Оператор невідомий", + "radio tag|All": "Усі", + "News": "Новини", + "Talk": "Розмовні", + "Weather / Emergency": "Погода / Надзвичайні події", + "Public Safety": "Громадська безпека", + "Aviation / Marine": "Авіація / Флот", + "Traffic / Transit": "Рух / Транспорт", + "Music": "Музика", + "Other": "Інше", + "radio|NEWS": "НОВИНИ", + "radio|TALK": "РОЗМОВНІ", + "radio|WEATHER": "ПОГОДА", + "radio|SAFETY": "БЕЗПЕКА", + "radio|AIR / SEA": "АВІА / ФЛОТ", + "radio|TRANSIT": "ТРАНСПОРТ", + "radio|MUSIC": "МУЗИКА", + "radio|OTHER": "ІНШЕ", + "Alternative": "Альтернатива", + "Ambient": "Ембієнт", + "Blues": "Блюз", + "Classical": "Класика", + "Country": "Кантрі", + "Dance": "Танцювальна", + "Electronic": "Електронна", + "Folk": "Фолк", + "Funk": "Фанк", + "Hip-Hop": "Хіп-хоп", + "House": "Хаус", + "Indie": "Інді", + "Jazz": "Джаз", + "Latin": "Латина", + "Metal": "Метал", + "Oldies": "Ретро", + "Pop": "Поп", + "Punk": "Панк", + "R&B": "R&B", + "Reggae": "Реґі", + "Rock": "Рок", + "Soul": "Соул", + "Techno": "Техно", + "Trance": "Транс", + "World": "Етнічна", + "Add the full Starlink broadband shell (thousands of extra points)": "Додати повну широкосмугову оболонку Starlink (тисячі додаткових точок)", + "Loading the Starlink shell…": "Завантаження оболонки Starlink…", + "Starlink {detail} — click to retry": "Starlink: {detail} — клацніть, щоб повторити", + "load failed": "помилка завантаження", + "Showing the full Starlink shell — click for the core catalog only": "Показано повну оболонку Starlink — клацніть, щоб лишити лише основний каталог", + "DENSE ···": "ЩІЛЬНО ···", + "DENSE ✕": "ЩІЛЬНО ✕", + "DENSE": "ЩІЛЬНО", + "SIMULATED — traffic service unreachable": "ІМІТАЦІЯ — сервіс руху недоступний", + "SIMULATED — add TomTom key for live": "ІМІТАЦІЯ — додайте ключ TomTom для реального часу", + "AIS: {name}": "AIS: {name}", + "VESSEL": "СУДНО", + "POS: LIVE": "POS: У РЕАЛЬНОМУ ЧАСІ", + "POS: {time}Z": "POS: {time}Z", + "awaiting first AIS position…": "очікується перша позиція AIS…", + "awaiting usable AIS positions…": "очікуються придатні позиції AIS…", + "awaiting first AIS message…": "очікується перше повідомлення AIS…", + "Resume": "Продовжити", + "Pause": "Пауза", + "Error: {message}": "Помилка: {message}", + "Needs {envVars} — add it in Provider Settings": "Потрібно {envVars} — додайте у налаштуваннях постачальників", + "{label} is unavailable": "{label} — недоступно", + "This map stack": "Цей стек карт", + "{label} unavailable: {hint}": "{label} — недоступно: {hint}", + "Visible map targets": "Видимі цілі на карті", + "Ready": "Готово", + "Loaded: {scene} / {shot}": "Завантажено: {scene} / {shot}", + "Cannot capture shot: camera not ready": "Не вдалося зняти кадр: камера не готова", + "Captured: {scene} / {shot}": "Знято: {scene} / {shot}", + "Select a shot first": "Спочатку оберіть кадр", + "Updated: {scene} / {shot}": "Оновлено: {scene} / {shot}", + "Camera unavailable — exit cockpit first": "Камера недоступна — спершу вийдіть із кабіни", + "No shots to run": "Немає кадрів для запуску", + "Project exported": "Проєкт експортовано", + "Could not exit {mode} — scene layers may be refused": "Не вдалося вийти з {mode} — шари сцени може бути відхилено", + "Running {index}/{total}: {scene} / {shot}": "Виконання {index}/{total}: {scene} / {shot}", + "Scene run complete": "Запуск сцени завершено", + "Global Flights Radar": "Глобальний радар польотів", + "Orbital Watch": "Орбітальний нагляд", + "Thermal Threat Board": "Панель теплових загроз", + "City Overload": "Міське перевантаження", + "Omniscience Pullback": "Всевидячий від'їзд", + "Shot {n}": "Кадр {n}", + "Density": "Щільність", + "Bloom": "Світіння", + "VISUAL PRESETS": "ВІЗУАЛЬНІ ПРЕСЕТИ", + "LOCATION": "РОЗТАШУВАННЯ", + "CONTACTS — nearest planes · vessels · sites": "КОНТАКТИ — найближчі літаки · судна · об’єкти", + "SPACE MISSIONS — launches & orbital assets": "КОСМІЧНІ МІСІЇ — запуски та орбітальні апарати", + "LIVE SIGNALS": "СИГНАЛИ У РЕАЛЬНОМУ ЧАСІ", + "Contacts could not complete the requested transition; try again": "Контакти не змогли завершити запитаний перехід; спробуйте ще раз", + "CCTV layer unavailable": "Шар CCTV недоступний", + "Link copied!": "Посилання скопійовано!", + "Copy failed": "Не вдалося скопіювати", + "CCTV calibration saved": "Калібрування CCTV збережено", + "CCTV calibration reset": "Калібрування CCTV скинуто", + "ADJUST ON": "КОРИГУВАННЯ УВІМК.", + "ADJUST": "КОРИГУВАННЯ", + "UNKNOWN": "НЕВІДОМО", + "ERROR": "ПОМИЛКА", + "SOURCE · UNKNOWN": "ДЖЕРЕЛО · НЕВІДОМЕ", + "FRAME · LOADING": "КАДР · ЗАВАНТАЖЕННЯ", + "FRAME · UNAVAILABLE": "КАДР · НЕДОСТУПНИЙ", + "CALIBRATED": "КАЛІБРОВАНО", + "CURATED": "ПІДІБРАНО", + "RAW PRIOR": "СИРЕ АПРІОРНЕ", + "CCTV ON": "CCTV УВІМК.", + "CCTV OFF": "CCTV ВИМК.", + "VIEWSHED ON": "ЗОНА ВИДИМОСТІ УВІМКНЕНА", + "COVERAGE ON": "ЗОНА ОГЛЯДУ УВІМК.", + "COVERAGE OFF": "ЗОНА ОГЛЯДУ ВИМК.", + "AUTO HOP ON": "АВТОПЕРЕХІД УВІМК.", + "AUTO HOP OFF": "АВТОПЕРЕХІД ВИМК.", + "PROJECTION ON": "ПРОЄКЦІЯ УВІМК.", + "PROJECTION OFF": "ПРОЄКЦІЯ ВИМК.", + "CAL · EDITED (UNSAVED)": "CAL · ЗМІНЕНО (НЕ ЗБЕРЕЖЕНО)", + "CAL · {badge}": "CAL · {badge}", + "MONITOR": "МОНІТОР", + "OFF": "ВИМКНЕНО", + "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}": "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}", + "{count} cameras loaded · click a camera to activate": { + "one": "{count} камеру завантажено · клацніть камеру, щоб активувати", + "few": "{count} камери завантажено · клацніть камеру, щоб активувати", + "many": "{count} камер завантажено · клацніть камеру, щоб активувати", + "other": "{count} камери завантажено · клацніть камеру, щоб активувати" + }, + "{count} cameras loaded · enable CCTV to activate": { + "one": "{count} камеру завантажено · увімкніть CCTV, щоб активувати", + "few": "{count} камери завантажено · увімкніть CCTV, щоб активувати", + "many": "{count} камер завантажено · увімкніть CCTV, щоб активувати", + "other": "{count} камери завантажено · увімкніть CCTV, щоб активувати" + }, + "Enable CCTV to load camera intersections": "Увімкніть CCTV, щоб завантажити перехрестя камер", + "Enable CCTV to start camera-linked intelligence summaries.": "Увімкніть CCTV, щоб почати зведення розвідки за камерами.", + "No summary available.": "Зведення недоступне.", + "loading frames": "завантаження кадрів", + "camera grid ready": "сітка камер готова", + "Clearing selected data layers": "Очищення обраних шарів даних", + "Clear selected data layers": "Очистити вибрані шари даних", + "CONDITIONS UNKNOWN": "УМОВИ НЕВІДОМІ", + "CLEAR": "ЯСНО", + "PARTLY CLOUDY": "МІНЛИВА ХМАРНІСТЬ", + "OVERCAST": "ПОХМУРО", + "FOG": "ТУМАН", + "DRIZZLE": "МЖИЧКА", + "RAIN": "ДОЩ", + "RAIN SHOWERS": "ЗЛИВИ", + "SNOW SHOWERS": "СНІЖНІ ЗЛИВИ", + "THUNDERSTORM": "ГРОЗА", + "MIXED CONDITIONS": "ЗМІШАНІ УМОВИ", + "CYCLE ON": "ЦИКЛ УВІМКНЕНО", + "CYCLE OFF": "ЦИКЛ ВИМКНЕНО", + "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Зупинити автоматичне гортання сторінок. Попередня, Наступна та вкладки СИГ/НОВ/ЛОК залишаються доступними.", + "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.": "Гортає сторінки брифінгу автоматично кожні 9 секунд (Сигнали → Новини → Локально). Пауза, доки ви наводите вказівник або фокусуєте панель. Дані сигналів у реальному часі оновлюються безперервно незалежно від цього.", + "ACQUIRING REGIONAL NEWS": "ОТРИМАННЯ РЕГІОНАЛЬНИХ НОВИН", + "REGIONAL NEWS UNAVAILABLE": "РЕГІОНАЛЬНІ НОВИНИ НЕДОСТУПНІ", + "RESOLVING REGION": "ВИЗНАЧЕННЯ РЕГІОНУ", + "REGION UNAVAILABLE": "РЕГІОН НЕДОСТУПНИЙ", + "NO RECENT LOCATION MATCHES": "НЕМАЄ СВІЖИХ ЗБІГІВ ЗА РОЗТАШУВАННЯМ", + "{domain} · {age}": "{domain} · {age}", + "CLOUD {pct}%": "ХМАРНІСТЬ {pct}%", + "CLOUD UNKNOWN": "ХМАРНІСТЬ НЕВІДОМА", + "{source} · LOCATION QUERY": "{source} · ЗАПИТ ЗА РОЗТАШУВАННЯМ", + "REGIONAL NEWS": "РЕГІОНАЛЬНІ НОВИНИ", + "CONTEXT STANDBY": "КОНТЕКСТ: ОЧІКУВАННЯ", + "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "УВІМКНІТЬ ГЛОБАЛЬНИЙ КОНТЕКСТ ДЛЯ ПІНГІВ БЛИЗЬКОСТІ", + "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "КОНТАКТ ВТРАЧЕНО · ОСТАННІ ВІДОМІ ПОКАЗНИКИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "CONTACT LOST · {subject}": "КОНТАКТ ВТРАЧЕНО · {subject}", + "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "ОБ’ЄКТ ПОКИНУВ КАНАЛ ДАНИХ · ІНДИКАТОРИ ТРИМАЮТЬ ОСТАННЄ ВІДОМЕ", + "{cohort} · {contact}": "{cohort} · {contact}", + "NO AVAILABLE EXAMPLE": "НЕМАЄ ДОСТУПНОГО ПРИКЛАДУ", + "{cohort}, Unavailable": "{cohort}, недоступно", + "AHEAD": "ПОПЕРЕДУ", + "{side} {angle}": "{side} {angle}", + "L": "L", + "R": "R", + "{count} INPUTS UNKNOWN · NOT AN ALL-CLEAR": { + "one": "{count} НЕВІДОМИЙ ПАРАМЕТР · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "few": "{count} НЕВІДОМІ ПАРАМЕТРИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "many": "{count} НЕВІДОМИХ ПАРАМЕТРІВ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "other": "{count} НЕВІДОМОГО ПАРАМЕТРА · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»" + }, + "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "ДОСТУПНІ ВХІДНІ ДАНІ АКТУАЛЬНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "AIRCRAFT": "БОРТ", + "ACQUIRING SURFACE": "ОТРИМАННЯ НАЗЕМНИХ ДАНИХ", + "SURFACE FALLBACK": "РЕЗЕРВ НАЗЕМНИХ ДАНИХ", + "STALE FEED": "ЗАСТАРІЛИЙ КАНАЛ ДАНИХ", + "LIVE TRACK": "ТРЕК У РЕАЛЬНОМУ ЧАСІ", + "COMMERCIAL": "КОМЕРЦІЙНИЙ", + "{aircraftClass} · {feedState} · COURSE ALIGNED": "{aircraftClass} · {feedState} · КУРС ВИРІВНЯНО", + "ARROW · ESTIMATED DIRECTION": "СТРІЛКА · ОРІЄНТОВНИЙ НАПРЯМОК", + "ROUTE DATA UNAVAILABLE": "ДАНІ МАРШРУТУ НЕДОСТУПНІ", + "DEST {bearing}": "DEST {bearing}", + "Disable cockpit weather effects": "Вимкнути погодні ефекти кабіни", + "Enable cockpit weather effects": "Увімкнути погодні ефекти кабіни", + "ON": "УВІМК.", + "Normal": "Звичайний", + "Night vision": "Нічне бачення", + "Thermal": "Тепловізор", + "Anime": "Аніме", + "Noir": "Нуар", + "Snow": "Сніг", + "Current cockpit vision style: {style}. Activate for next style.": "Поточний стиль бачення кабіни: {style}. Активуйте для наступного стилю.", + "Current style: {style} — click for next": "Поточний стиль: {style} — клацніть для наступного", + "Collapse Contact panel": "Згорнути панель контактів", + "Expand Contact panel": "Розгорнути панель контактів", + "Collapse contact panel": "Згорнути панель контактів", + "Expand contact panel": "Розгорнути панель контактів", + "Collapse cockpit briefing panel": "Згорнути панель брифінгу кабіни", + "Expand cockpit briefing panel": "Розгорнути панель брифінгу кабіни", + "Collapse briefing panel": "Згорнути панель брифінгу", + "Expand briefing panel": "Розгорнути панель брифінгу", + "OBSERVED / MAPPED PINGS": "СПОСТЕРЕЖЕНІ / КАРТОГРАФОВАНІ ПІНГИ", + "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "ПОДІЇ ПІДТВЕРДЖЕНІ ДЖЕРЕЛАМИ · БЕЗ ШТУЧНИХ НОВИН", + "LATEST LOCATION-MATCHED REPORTING": "ОСТАННІ ПУБЛІКАЦІЇ ЗА РОЗТАШУВАННЯМ", + "LOCAL INFO": "ЛОКАЛЬНА ІНФОРМАЦІЯ", + "PLACE / CONDITIONS / POSITION": "МІСЦЕ / УМОВИ / ПОЗИЦІЯ", + "TIME UNKNOWN": "ЧАС НЕВІДОМИЙ", + "{count}M AGO": "{count} ХВ ТОМУ", + "{count}H AGO": "{count} ГОД ТОМУ", + "{count}D AGO": "{count} ДН ТОМУ", + "DIR UNKNOWN": "НАПР. НЕВІДОМИЙ", + "Select flight {title}": "Обрати рейс {title}", + "{aircraftClass} · CURRENT": "{aircraftClass} · ПОТОЧНИЙ", + "MILITARY FLIGHT": "ВІЙСЬКОВИЙ РЕЙС", + "COMMERCIAL FLIGHT": "КОМЕРЦІЙНИЙ РЕЙС", + "{aircraftClass} · {distance}": "{aircraftClass} · {distance}", + "DISTANCE UNKNOWN": "ВІДСТАНЬ НЕВІДОМА", + "{count} INPUTS UNKNOWN": { + "one": "{count} НЕВІДОМИЙ ПАРАМЕТР", + "few": "{count} НЕВІДОМІ ПАРАМЕТРИ", + "many": "{count} НЕВІДОМИХ ПАРАМЕТРІВ", + "other": "{count} НЕВІДОМОГО ПАРАМЕТРА" + }, + "SOURCE STATUS UNAVAILABLE": "СТАТУС ДЖЕРЕЛА НЕДОСТУПНИЙ", + "Restore real aircraft": "Повернути справжній літак", + "Reclassify as TR-3B": "Перекласифікувати як TR-3B", + "TRACK ACQUIRED": "ТРЕК ЗАХОПЛЕНО", + "{label} · COURSE {heading}°": "{label} · КУРС {heading}°", + "Context could not restore every layer; try again": "Не вдалося відновити всі шари контексту; спробуйте ще раз", + "No selected data layers": "Шари даних не вибрано", + "{count} data layers could not be cleared": { + "one": "Не вдалося очистити {count} шар даних", + "few": "Не вдалося очистити {count} шари даних", + "many": "Не вдалося очистити {count} шарів даних", + "other": "Не вдалося очистити {count} шара даних" + }, + "Cleared {count} data layers": { + "one": "Очищено {count} шар даних", + "few": "Очищено {count} шари даних", + "many": "Очищено {count} шарів даних", + "other": "Очищено {count} шара даних" + }, + "Selected data layers could not be cleared": "Не вдалося очистити обрані шари даних", + "Space Missions could not complete the requested transition; try again": "Космічні місії не змогли завершити запитаний перехід; спробуйте ще раз", + "Nearby installations refreshed": "Найближчі об’єкти оновлено", + "Nearby installations could not be refreshed; try again": "Не вдалося оновити найближчі об’єкти; спробуйте ще раз", + "Space Missions cancellation could not restore the previous layer state": "Скасування Космічних місій не змогло відновити попередній стан шарів", + "That layer is unavailable in the current Context mode": "Цей шар недоступний у поточному режимі контексту", + "{layerId} could not {action} cleanly": "{layerId}: не вдалося коректно {action}", + "start": "запустити", + "stop": "зупинити", + "{mode} could not start because another layer did not stop cleanly": "{mode} не вдалося запустити, бо інший шар не зупинився коректно", + "Space Missions": "Космічні місії", + "Context": "Контекст", + "Live Flights": "Літаки в реальному часі", + "Military Flights": "Військова авіація", + "Earthquakes (24h)": "Землетруси (24 год)", + "Satellites": "Супутники", + "Space Missions (30d)": "Космічні місії (30 дн)", + "Street Traffic": "Вуличний рух", + "CCTV": "CCTV", + "Radio": "Радіо", + "Bikeshare": "Велопрокат", + "Live AIS Vessels": "Судна AIS у реальному часі", + "Mapped Installations": "Нанесені об’єкти", + "Global Context": "Глобальний контекст", + "Datacenters": "Дата-центри", + "Dams": "Греблі", + "Submarine Cables": "Підводні кабелі", + "FIRMS Active Fires": "Активні пожежі FIRMS", + "ENABLING": "УВІМКНЕННЯ", + "DISABLING": "ВИМКНЕННЯ", + "{state} · {source}": "{state} · {source}", + "UNCERTAIN · {source} · lifecycle state requires reconciliation": "НЕВИЗНАЧЕНО · {source} · стан життєвого циклу потребує звірки", + "{state} · {source} · {detail} · retry {seconds}s": "{state} · {source} · {detail} · повтор через {seconds} с", + "{state} · {source} · {detail}": "{state} · {source} · {detail}", + "never": "ніколи", + "{source} · {loadingLabel}": "{source} · {loadingLabel}", + "{state} · {source} · {ago} · retrying in {seconds}s": "{state} · {source} · {ago} · повтор через {seconds} с", + "{state} · {source} · {ago}": "{state} · {source} · {ago}", + "{source} · {ago}": "{source} · {ago}", + "UNCERTAIN": "НЕВИЗНАЧЕНО", + "status chip|UNAVAILABLE": "НЕДОСТУПНО", + "{name}: {state}": "{name}: {state}", + "{count}s ago": "{count} с тому", + "CONNECTING": "З'ЄДНАННЯ", + "📍 Location: --": "📍 Розташування: --", + "Landmark: --": "Орієнтир: --", + "Searched location": "Знайдене розташування", + "ORBIT": "ОРБІТА", + "Location not found": "Розташування не знайдено", + "Search failed": "Пошук не вдався", + "Fly to a POI first": "Спершу полетіть до орієнтира", + "Reset to full globe view": "Скинути до загального вигляду глобуса", + "Reset cockpit to full globe view": "Скинути кабіну до вигляду всього глобуса", + "Resetting to full globe view": "Скидання до вигляду всього глобуса", + "Resetting cockpit to full globe view": "Скидання кабіни до вигляду всього глобуса", + "MAP": "КАРТА", + "panel": "панель", + "Expand {name}": "Розгорнути {name}", + "Collapse {name}": "Згорнути {name}", + "Expand Radio": "Розгорнути радіо", + "Collapse Radio": "Згорнути радіо", + "Expand Radio section": "Розгорнути розділ радіо", + "Collapse Radio section": "Згорнути розділ радіо", + "Panel layout updated — positions reset to new defaults": "Компонування панелей оновлено — позиції скинуто до нових типових", + "Collapse Cockpit display options": "Згорнути параметри дисплея кабіни", + "Expand Cockpit display options": "Розгорнути параметри дисплея кабіни", + "Collapse Cockpit Radio controls": "Згорнути керування радіо кабіни", + "Expand Cockpit Radio controls": "Розгорнути керування радіо кабіни", + "NO STATIONS": "НЕМАЄ СТАНЦІЙ", + "NO STATION AVAILABLE": "НЕМАЄ ДОСТУПНИХ СТАНЦІЙ", + "{name}, station {index} of {total}": "{name}, станція {index} з {total}", + "No station available": "Немає доступної станції", + "OFF AIR": "НЕ В ЕФІРІ", + "STATION UNAVAILABLE": "СТАНЦІЯ НЕДОСТУПНА", + "Radio could not {action} cleanly": "Радіо: не вдалося коректно {action}", + "Close compact Radio controls": "Закрити компактне керування радіо", + "Open compact Radio controls": "Відкрити компактне керування радіо", + "SYNC": "СИНХР.", + "RECONCILE": "ЗВІРИТИ", + "DISABLE": "ВИМКНУТИ", + "ENABLE": "УВІМКНУТИ", + "Reconcile Radio — lifecycle uncertain": "Звірити радіо — стан життєвого циклу невизначений", + "Disable Radio": "Вимкнути радіо", + "Enable Radio": "Увімкнути радіо", + "DIRECTORY BAND": "ДІАПАЗОН КАТАЛОГУ", + "{category} BAND": "{category} ДІАПАЗОН", + "NO STATION SELECTED": "СТАНЦІЮ НЕ ВИБРАНО", + "Directory metadata only": "Лише метадані каталогу", + "Loading station directory…": "Завантаження каталогу станцій…", + "Choose a globe marker or use next.": "Виберіть маркер на глобусі або натисніть «наступна».", + "TAGS · {tags}": "ТЕГИ · {tags}", + "Play": "Відтворити", + "PLAY": "ВІДТВОРИТИ", + "selected": "обрану", + "nearest": "найближчу", + "{action} {target} radio station": "{action} {target} радіостанцію", + "RADIO STATE UNCERTAIN": "СТАН РАДІО НЕВИЗНАЧЕНИЙ", + "SYNCING DIRECTORY": "СИНХРОНІЗАЦІЯ КАТАЛОГУ", + "RADIO READY": "РАДІО ГОТОВЕ", + "SYNCING": "СИНХРОНІЗАЦІЯ", + "READY": "ГОТОВА", + "station": "станція", + "Ready — playback starts only from your action": "Готово — відтворення починається лише за вашою дією", + "Radio off": "Радіо вимкнено", + "Connecting directly to broadcaster…": "Пряме з’єднання з мовником…", + "Buffering broadcaster stream…": "Буферизація потоку мовника…", + "Playing {station}": "Відтворюється: {station}", + "Paused {station}": "Пауза: {station}", + "Broadcaster stream unavailable": "Потік мовника недоступний", + "Station unavailable after directory refresh — choose another channel": "Станція недоступна після оновлення каталогу — виберіть інший канал", + "Radio is enabling…": "Радіо вмикається…", + "Radio is disabling…": "Радіо вимикається…", + "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "Стан радіо невизначений — звірте через «Увімкнути» або «Вимкнути»", + "Scene action failed": "Не вдалося виконати дію сцени", + "Delete shot \"{shot}\"?": "Видалити кадр «{shot}»?", + "SPARSE": "РЕДКИЙ", + "BALANCED": "ЗБАЛАНСОВАНИЙ", + "DEL": "ВИДАЛ.", + "entity": "об’єкт", + "Shared {subject} follow expired": "{subject}: ТЕРМІН СТЕЖЕННЯ МИНУВ", + "Shared {subject} could not be restored — feed unavailable": "{subject} НЕ ВДАЛОСЯ ВІДНОВИТИ — КАНАЛ ДАНИХ НЕДОСТУПНИЙ", + "Shared {subject} is unavailable": "{subject}: НЕМАЄ ДОСТУПУ", + "ACQUIRING": "ОТРИМАННЯ", + "SHARED {subject}": "ПОДІЛЕНО: {subject}", + "LOADING LIVE DATA": "ЗАВАНТАЖЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", + "LOAD COMPLETE": "ЗАВАНТАЖЕННЯ ЗАВЕРШЕНО", + "LOAD CANCELLED": "ЗАВАНТАЖЕННЯ СКАСОВАНО", + "LOAD FAILED": "ПОМИЛКА ЗАВАНТАЖЕННЯ", + "LIVE DATA OFF": "ДАНІ У РЕАЛЬНОМУ ЧАСІ ВИМКНЕНО", + "MAPPED SITES LOADED": "МІСЦЯ НА КАРТІ ЗАВАНТАЖЕНО", + "RETRYING MAPPED SITES": "ПОВТОРНЕ ЗАВАНТАЖЕННЯ МІСЦЬ НА КАРТІ", + "FETCHING MAPPED SITES": "ЗАВАНТАЖЕННЯ МІСЦЬ НА КАРТІ", + "TURNING OFF LIVE DATA": "ВИМКНЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", + "REFRESHING LIVE DATA": "ОНОВЛЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", + "syncing road network": "синхронізація дорожньої мережі", + "Celestial ring — reveal the full globe": "Небесне кільце — показати весь глобус", + "Celestial ring — available in Normal style": "Небесне кільце — доступне у стилі «Звичайний»", + "Detection overlay: {mode}": "Накладка виявлення: {mode}", + "Detection overlay: off": "Накладка виявлення: вимк.", + "DETECT": "ВИЯВЛЕННЯ", + "voice|OFF": "ВИМКНЕНО", + "voice|CONNECTING": "З'ЄДНАННЯ", + "voice|LISTENING": "СЛУХАЮ", + "voice|EXECUTING": "ВИКОНАННЯ", + "voice|ERROR": "ПОМИЛКА", + "AI AGENT": "АГЕНТ ШІ", + "Voice model tier — applies next session": "Рівень голосової моделі — набуде чинності з наступної сесії", + "Estimated session cost": "Орієнтовна вартість сесії", + "Voice control — activate to toggle voice; hold Space to speak": "Голосове керування — активуйте, щоб увімкнути або вимкнути голос; утримуйте Space, щоб говорити", + "VOICE STANDBY": "ГОЛОСОВЕ ОЧІКУВАННЯ", + "VOICE CONTROL": "ГОЛОСОВЕ КЕРУВАННЯ", + "Hold Space to speak · tap Space to activate focused controls": "Утримуйте Space, щоб говорити · тапніть Space, щоб активувати елемент у фокусі", + "VOICE SYSTEM ERROR": "ПОМИЛКА ГОЛОСОВОЇ СИСТЕМИ", + "DISMISS": "ЗАКРИТИ", + "Check microphone permission and network access, then try again.": "Перевірте дозвіл на мікрофон і доступ до мережі, потім спробуйте ще раз.", + "Release Space to send": "Відпустіть Space, щоб надіслати", + "Hold Space to talk": "Утримуйте Space, щоб говорити", + "Requesting microphone": "Запит доступу до мікрофона", + "Ask or command": "Питання або команда", + "Running command": "Виконання команди", + "Voice off": "Голос вимкнено", + "WebRTC microphone support unavailable": "Підтримка мікрофона WebRTC недоступна", + "VOICE UNAVAILABLE": "ГОЛОС НЕДОСТУПНИЙ", + "VOICE ACTIVE": "ГОЛОС АКТИВНИЙ", + "Voice session could not be started.": "Не вдалося запустити голосову сесію.", + "Next session: {pendingId} — this session stays on {modelId}": "Наступна сесія: {pendingId} — поточна залишається на {modelId}", + "Voice model: {pendingId} — click to switch to {target}; applies next session": "Голосова модель: {pendingId} — натисніть, щоб перейти на {target}; набуде чинності з наступної сесії", + "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Орієнтовна вартість сесії на {modelId} — відповідей: {responses}. Попереджає при {warn}, завершує сесію при {cap}.", + "{tier} applies next session": "{tier} набуде чинності з наступної сесії", + "Session ended — cost cap {cost}": "Сесію завершено — ліміт витрат {cost}", + "Radio did not start": "Радіо не запустилося", + "Aircraft cockpit view": "Вигляд кабіни повітряного судна", + "LEVEL": "РІВЕНЬ", + "Estimated destination direction": "Орієнтовний напрямок до пункту призначення", + "DEST ---°": "DEST ---°", + "OPTICAL PLANE · 01": "ОПТИЧНА ПЛОЩИНА · 01", + "VISOR LOCK · ACTIVE": "ФІКСАЦІЯ ВІЗОРА · АКТИВНА", + "GROUND SPEED · KTS": "ШВИДКІСТЬ · KTS", + "ALTITUDE · FT": "ВИСОТА · FT", + "FIRST PERSON": "ВІД ПЕРШОЇ ОСОБИ", + "LIVE TRACK · COURSE ALIGNED": "ТРЕК У РЕАЛЬНОМУ ЧАСІ · КУРС ВИРІВНЯНО", + "Cockpit vision style": "Стиль бачення кабіни", + "Previous cockpit vision style": "Попередній стиль бачення кабіни", + "Previous vision style": "Попередній стиль бачення", + "Current cockpit vision style: NORMAL. Activate for next style.": "Поточний стиль бачення кабіни: NORMAL. Активуйте для наступного стилю.", + "Current style: NORMAL — click for next": "Поточний стиль: NORMAL — клацніть для наступного", + "CURRENT": "ПОТОЧНИЙ", + "Next cockpit vision style": "Наступний стиль бачення кабіни", + "Next vision style": "Наступний стиль бачення", + "Current aircraft heading": "Поточний курс повітряного судна", + "GROUND SPEED": "ШВИДКІСТЬ", + "ALTITUDE": "ВИСОТА", + "Contact cockpit summary": "Зведення контакта в кабіні", + "CONTACT": "КОНТАКТ", + "CONTACTS · 250 KM": "КОНТАКТИ · 250 KM", + "Contact navigation": "Навігація контактами", + "CONTEXT ONLY": "ЛИШЕ КОНТЕКСТ", + "Nearby cohort counts": "Кількість найближчих груп", + "NEAREST OBSERVED / MAPPED": "НАЙБЛИЖЧІ СПОСТЕРЕЖЕНІ / КАРТОГРАФОВАНІ", + "AVAILABLE INPUTS ONLY · NOT AN ALL-CLEAR": "ЛИШЕ ДОСТУПНІ ВХІДНІ ДАНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "Cockpit briefing carousel": "Карусель брифінгу кабіни", + "Estimated flight plan": "Орієнтовний план польоту", + "ESTIMATED FLIGHT PLAN": "ОРІЄНТОВНИЙ ПЛАН ПОЛЬОТУ", + "FROM": "ВІД", + "TO": "ДО", + "Cockpit briefing controls": "Керування брифінгом кабіни", + "Previous briefing page": "Попередня сторінка брифінгу", + "Next briefing page": "Наступна сторінка брифінгу", + "Live signals": "Сигнали в реальному часі", + "Latest regional news": "Останні регіональні новини", + "Location-based information": "Інформація за розташуванням", + "TEMP": "ТЕМП", + "WIND": "ВІТЕР", + "SKY": "НЕБО", + "PRECIP": "ОПАДИ", + "Show Live Signals": "Показати сигнали в реальному часі", + "NEWS": "НОВИНИ", + "Show Regional News": "Показати регіональні новини", + "Show Local Info": "Показати локальну інформацію", + "Cockpit display and Radio controls": "Керування дисплеєм і радіо кабіни", + "DISPLAY": "ДИСПЛЕЙ", + "Cockpit display options": "Параметри дисплея кабіни", + "RADIO": "РАДІО", + "Cockpit compact Radio controls": "Компактне керування радіо кабіни", + "Previous filtered radio station": "Попередня відфільтрована радіостанція", + "Play selected radio station": "Відтворити обрану радіостанцію", + "Next filtered radio station": "Наступна відфільтрована радіостанція", + "VOLUME": "ГУЧНІСТЬ", + "Cockpit Radio volume": "Гучність радіо кабіни", + "View switcher": "Перемикач вигляду", + "Exit cockpit and return to full globe view": "Вийти з кабіни та повернутися до вигляду всього глобуса", + "RESET": "СКИНУТИ", + "Exit cockpit view": "Вийти з вигляду кабіни", + "EXIT COCKPIT": "ВИЙТИ З КАБІНИ", + "Navigation, voice, and visual preset controls": "Керування навігацією, голосом і візуальними пресетами", + "Expand Visual Presets": "Розгорнути візуальні пресети", + "Pin visual presets": "Закріпити візуальні пресети", + "Keep visual presets open": "Тримати візуальні пресети відкритими", + "Show the globe without a visual filter.": "Показує глобус без візуального фільтра.", + "Emulate a green phosphor CRT with scanlines and screen curvature.": "Імітує CRT-монітор із зеленим фосфором, рядками розгортки та вигнутим екраном.", + "Simulate night-vision goggles with green intensification and a tube vignette.": "Імітує прилад нічного бачення з зеленим підсиленням та віньєткою туби.", + "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Імітує термальний контраст у стилі FLIR. Для кольору збільште Ironbow.", + "Apply bright cel-shaded color and illustrated outlines.": "Застосовує яскраву мультяшну заливку та ілюстровані контури.", + "Apply high-contrast monochrome film-noir grading.": "Застосовує висококонтрастну чорно-білу обробку в стилі нуар.", + "Add a cold, snowy whiteout treatment to the scene.": "Додає до сцени холодний засніжений білий ефект.", + "MAP SOURCE": "ДЖЕРЕЛО КАРТИ", + "Map source": "Джерело карти", + "Style": "Стиль", + "Expand LOCATION": "Розгорнути РОЗТАШУВАННЯ", + "Collapse panel": "Згорнути панель", + "Pin location tray": "Закріпити панель розташування", + "Keep location tray open": "Тримати панель розташування відкритою", + "Search any location": "Шукати будь-яке розташування", + "Search location by name or coordinates": "Шукати розташування за назвою або координатами", + "Search any location...": "Шукати будь-яке розташування...", + "WEATHER": "ПОГОДА", + "CONTEXT": "КОНТЕКСТ", + "Compact Radio controls": "Компактне керування радіо", + "Open detailed Radio controls": "Відкрити докладне керування радіо", + "Previous station": "Попередня станція", + "Next station": "Наступна станція", + "Compact Radio volume": "Гучність компактного радіо", + "Expand panel": "Розгорнути панель", + "Context mode": "Режим контексту", + "CONTACTS": "КОНТАКТИ", + "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Гортає найближчі контакти обраного вами типу — літаки, судна, об’єкти. Супутники відстежуються окремо.", + "SPACE MISSIONS": "КОСМІЧНІ МІСІЇ", + "SELECT CONTEXT": "ОБЕРІТЬ КОНТЕКСТ", + "Contact Context actions": "Дії контексту контактів", + "COCKPIT": "КАБІНА", + "SEARCH NEARBY SITES": "ПОШУК НАЙБЛИЖЧИХ ОБ’ЄКТІВ", + "Reclassify tracked contact as TR-3B": "Перекласифікувати відстежуваний контакт як TR-3B", + "CONTACTS CONTEXT OFF": "КОНТЕКСТ КОНТАКТІВ ВИМКНЕНО", + "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "ОБЕРІТЬ КОНТАКТИ, ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНУ / КАРТОГРАФОВАНУ БЛИЗЬКІСТЬ", + "Available Space Missions": "Доступні космічні місії", + "AVAILABLE MISSIONS": "ДОСТУПНІ МІСІЇ", + "SELECT A MISSION TO INSPECT": "ОБЕРІТЬ МІСІЮ ДЛЯ ПЕРЕГЛЯДУ", + "LOADING 30-DAY MISSION INDEX": "ЗАВАНТАЖЕННЯ ІНДЕКСУ МІСІЙ ЗА 30 ДНІВ", + "TAB PREVIEWS · ENTER / SPACE SELECTS": "TAB — ОГЛЯД · ENTER / SPACE — ВИБІР", + "STATION TAG": "ТЕГ СТАНЦІЇ", + "Filter stations by station tag": "Фільтрувати станції за тегом", + "All": "Усі", + "Enable Radio, then choose a globe marker or use next.": "Увімкніть радіо, потім виберіть маркер на глобусі або натисніть «наступна».", + "DRAG TO TUNE": "ТЯГНІТЬ ДЛЯ НАЛАШТУВАННЯ", + "ALL · DRAG THE NEEDLE": "УСІ · ПОТЯГНІТЬ СТРІЛКУ", + "SNAPS TO AVAILABLE STATIONS": "ПРИЛИПАЄ ДО ДОСТУПНИХ СТАНЦІЙ", + "Radio playback": "Відтворення радіо", + "Previous filtered station": "Попередня станція у фільтрі", + "Play selected station": "Відтворити вибрану станцію", + "Next filtered station": "Наступна станція у фільтрі", + "STOP": "СТОП", + "Stop radio playback": "Зупинити відтворення радіо", + "Radio volume": "Гучність радіо", + "STATION SITE": "САЙТ СТАНЦІЇ", + "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "Після натискання відтворення аудіо з’єднується напряму з мовником. Мовник бачить вашу IP-адресу.", + "Intelligence HUD (H)": "Розвідувальний HUD (H)", + "Layout": "Компонування", + "HUD layout": "Компонування HUD", + "Tactical": "Тактичне", + "Operator": "Операторське", + "Minimal": "Мінімальне", + "Detection Overlay (D)": "Накладка виявлення (D)", + "Detection overlay": "Накладка виявлення", + "Detection label density": "Щільність підписів виявлення", + "Allocation": "Розподіл", + "Detection label allocation": "Розподіл підписів виявлення", + "Elastic": "Пружний", + "Weighted": "Зважений", + "Fade": "Згасання", + "Detection fade distance": "Відстань згасання виявлення", + "World-overlay fade distance outside the keyhole as a percentage of its radius": "Відстань згасання накладки світу за межами ілюмінатора у відсотках його радіуса", + "Outside": "Ззовні", + "Detection opacity outside the keyhole": "Непрозорість виявлення за межами ілюмінатора", + "World-overlay label and card opacity beyond the fade distance": "Непрозорість підписів і карток накладки світу за межею згасання", + "PARAMETERS": "ПАРАМЕТРИ", + "3D aircraft — flat icons zoomed out, 3D models up close": "3D літаки — плоскі іконки здалеку, 3D-моделі зблизька", + "Models": "Моделі", + "3D model coverage": "Зона огляду 3D-моделей", + "Proximity": "Поблизу", + "Scope — the circular viewport mask": "Приціл — кругла маска вікна перегляду", + "Scope": "Приціл", + "Feather": "Розмиття", + "Scope edge feather": "Розмиття краю приціла", + "Scope edge feather as a percentage of the keyhole radius": "Розмиття краю приціла у відсотках радіуса ілюмінатора", + "Celestial": "Небесне", + "Hide UI chrome": "Сховати оформлення інтерфейсу", + "Clean UI": "Чистий інтерфейс", + "Bloom / Glow": "Світіння / Ореол", + "Bloom intensity": "Інтенсивність світіння", + "Sharpening": "Підвищення різкості", + "Sharpen": "Різкість", + "Sharpen intensity": "Інтенсивність різкості", + "EXIT CLEAN VIEW": "ВИЙТИ З ЧИСТОГО ВИГЛЯДУ", + "Return UI controls": "Повернути елементи керування", + "Initializing photorealistic world...": "Ініціалізація фотореалістичного світу...", + "DATA LAYERS": "ШАРИ ДАНИХ", + "NEAREST": "НАЙБЛИЖЧА", + "CCTV camera": "Камера CCTV", + "CALIBRATION": "КАЛІБРУВАННЯ", + "Drag the camera in the world: rings rotate, arrows move, handles set range/FOV": "Перетягніть камеру у сцені: кільця обертаються, стрілки переміщуються, маркери задають дальність/FOV", + "Camera pose — click a value to type": "Позиція камери — клацніть значення, щоб увести", + "Heading (compass °) — click to type": "Курс (° за компасом) — клацніть, щоб увести", + "Pitch (° up/down) — click to type": "Тангаж (° вгору/вниз) — клацніть, щоб увести", + "Horizontal FOV (°) — click to type": "Горизонтальний FOV (°) — клацніть, щоб увести", + "Range / monitor-plane distance (m) — click to type": "Дальність / відстань до площини монітора (м) — клацніть, щоб увести", + "Mount height above ground (m) — click to type": "Висота кріплення над землею (м) — клацніть, щоб увести", + "North offset from catalog position (m) — click to type": "Зміщення на північ від позиції каталогу (м) — клацніть, щоб увести", + "East offset from catalog position (m) — click to type": "Зміщення на схід від позиції каталогу (м) — клацніть, щоб увести", + "SAVE CAL": "ЗБЕРЕГТИ КАЛ.", + "RESET CAL": "СКИНУТИ КАЛ.", + "SCENE SUMMARY": "ЗВЕДЕННЯ СЦЕНИ", + "SCENES": "СЦЕНИ", + "Scene recipe": "Рецепт сцени", + "NEW": "НОВА", + "CAPTURE SHOT": "ЗНЯТИ КАДР", + "UPDATE SHOT": "ОНОВИТИ КАДР", + "START": "СТАРТ", + "EXPORT PRESETS": "ЕКСПОРТУВАТИ ПРЕСЕТИ", + "IMPORT": "ІМПОРТУВАТИ", + "RUN LOG": "ЖУРНАЛ ЗАПУСКІВ", + "POWER UP": "ЗАПУСК", + "GROUND STATION · PROVIDER SETTINGS": "НАЗЕМНА СТАНЦІЯ · НАЛАШТУВАННЯ ПОСТАЧАЛЬНИКІВ", + "Close key setup": "Закрити налаштування ключів", + "Power up the globe": "Запустіть глобус", + "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.": "Глобус уже літає без ключів. Кожен ключ нижче вмикає ще один справжній канал даних — вставте його, і він збережеться в локальну конфігурацію застосунку, після чого сервер перезапуститься самостійно. Серверні ключі залишаються на цій машині; Google Maps і Cesium ion працюють у браузері, тож їхні ключі треба обмежити на боці постачальника. Ключі, налаштовані деінде, показуються, але ніколи не змінюються.", + "SAVE KEYS": "ЗБЕРЕГТИ КЛЮЧІ", + "ESC to close": "ESC — закрити", + "The Google Maps key buys the photorealistic planet — everything else stacks on top.": "Ключ Google Maps відкриває фотореалістичну планету — усе інше нашаровується зверху.", + "NO PLACE LEFT BEHIND": "НІКОГО НЕ ЗАЛИШАЄМО ПОЗАДУ", + "ACTIVE STYLE": "АКТИВНИЙ СТИЛЬ", + "Globe actions": "Дії з глобусом", + "Turn off all selected data layers": "Вимкнути всі вибрані шари даних", + "Copy share link": "Копіювати посилання для поширення", + "Reset camera and return to full globe view": "Скинути камеру та повернутися до загального вигляду глобуса", + "MISSION CONTROL · FIRST LAUNCH": "ЦЕНТР КЕРУВАННЯ · ПЕРШИЙ ЗАПУСК", + "Choose your first view": "Оберіть свій перший вигляд", + "LIVE CONTACTS": "КОНТАКТИ В РЕАЛЬНОМУ ЧАСІ", + "Aircraft, vessels and nearby intelligence": "Літаки, судна та розвідка поблизу", + "Launches, spacecraft and orbital context": "Запуски, космічні апарати та орбітальний контекст", + "EXPLORE MANUALLY": "ДОСЛІДИТИ ВРУЧНУ", + "Begin with a clean globe": "Почніть із чистого глобуса", + "Don't show this again": "Більше не показувати", + "ESC to dismiss": "ESC — приховати", + "Tip: the GEV MIC button in the dock lets you talk to the map.": "Порада: кнопка GEV MIC у доку дає змогу говорити з картою." +} From 2172183dc7581c3d1010c57dfea3064903eb6dc4 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 12:51:02 +0400 Subject: [PATCH 03/20] i18n(it): translate the remaining strings and review #912 - Translate the 1,868 strings #912 does not cover: directions, weather and wind, cyclones, Recent Imagery, Street Level, GNSS, the Bhote Koshi reconstruction, scenes and sharing, local SDR, voice and key setup. - Add the Italian `many` plural form (exact millions) to every plural entry. - Review the #912 entries: fix RIMORCHIATORE, POWER UP (ACCENDI), DENSO, minutes as "min", sentence case for layer and scene names, keyboard keys kept in English (Space, Enter), and the SIG/NOTIZIE/LOCALE tab names. - List codes, product names and words Italian spells as English in same-as-english.json. Co-Authored-By: Claude Opus 5.5 --- src/i18n/locales/it.json | 2199 ++++++++++++++++++++++++++++++++- src/i18n/same-as-english.json | 167 +++ 2 files changed, 2328 insertions(+), 38 deletions(-) diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index d5c65f04c..bf4df8736 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -1,4 +1,24 @@ { + "Pick a shape, then click the map.": "Scegli una forma, poi fai clic sulla mappa.", + "Enter to place the pin, Esc to cancel.": "Premi Enter per posizionare il segnaposto, Esc per annullare.", + "Click where the pin goes.": "Fai clic dove va il segnaposto.", + "Click {count} more points.": { + "one": "Fai clic su {count} altro punto.", + "many": "Fai clic su altri {count} di punti.", + "other": "Fai clic su altri {count} punti." + }, + "Those points are in a line — move one off it to enclose an area.": "Quei punti sono allineati: spostane uno fuori dalla linea per racchiudere un'area.", + "That line has no length — click somewhere further away.": "Quella linea non ha lunghezza: fai clic più lontano.", + " · {max}-point limit reached": " · raggiunto il limite di {max} punti", + "{measure} · double-click or Enter to finish, Backspace undoes, Esc cancels.{full}": "{measure} · doppio clic o Enter per finire, Backspace torna indietro, Esc annulla.{full}", + "drawings on the map": "disegni sulla mappa", + "That shape already has {count} points — finish it or press Backspace.": "Quella forma ha già {count} punti: finiscila o premi Backspace.", + "That point is off the globe — click on the world.": "Quel punto è fuori dal globo: fai clic sul mondo.", + "That shape could not be placed.": "Impossibile posizionare quella forma.", + "Could not place the shape: {error}": "Impossibile posizionare la forma: {error}", + "Board cleared.": "Lavagna cancellata.", + "{owner} is using the pointer — close it first.": "{owner} sta usando il puntatore: chiudilo prima.", + "{label} · Detailed outline unavailable": "{label} · Contorno dettagliato non disponibile", "Flying to Austin, TX...": "Volo verso Austin, TX...", "Restoring shared view...": "Ripristino della vista condivisa...", "Configuring viewer...": "Configurazione del visualizzatore...", @@ -6,12 +26,221 @@ "Loading the keyless globe...": "Caricamento del globo senza chiave...", "Google 3D Tiles unavailable ({detail}). Loading the keyless globe...": "Google 3D Tiles non disponibile ({detail}). Caricamento del globo senza chiave...", "Initializing systems...": "Inizializzazione dei sistemi...", + "Space Missions isolates replay data. Exit the mode to enable {layer}.": "Missioni spaziali isola i dati del replay. Esci dalla modalità per attivare {layer}.", + "Data attribution": "Attribuzione dei dati", + "Data provided by:": "Dati forniti da:", "Close data attribution": "Chiudi le attribuzioni dei dati", + "Light aircraft": "Aereo leggero", + "Glider": "Aliante", + "Turboprop": "Turboelica", + "Airliner": "Aereo di linea", + "Widebody": "Fusoliera larga", + "Four-engine jet": "Quadrigetto", + "Helicopter": "Elicottero", + "Fast jet": "Jet veloce", + "Business jet": "Business jet", + "Drone": "Drone", + "General emergency": "Emergenza generale", + "Unlawful interference": "Interferenza illecita", + "Radio failure": "Avaria radio", + "Downed aircraft": "Aeromobile abbattuto", + "Minimum fuel": "Carburante minimo", + "Lifeguard (medical priority)": "Lifeguard (priorità medica)", + "Rasuwagadhi witness video": "Video del testimone a Rasuwagadhi", + "Bhote Koshi valley footage": "Riprese della valle del Bhote Koshi", + "Flood footage": "Riprese dell'alluvione", + "Compilation and casualty claims": "Compilazione e dichiarazioni sulle vittime", + "SOURCE GEOCONFIRMED · WORLD-PINNED": "FONTE GEOCONFERMATA · ANCORATA AL MONDO", + "SOURCE CREDITED · LOCATION UNRESOLVED": "FONTE CITATA · POSIZIONE NON RISOLTA", + "REFERENCE ONLY · CLAIMS UNVERIFIED": "SOLO RIFERIMENTO · DICHIARAZIONI NON VERIFICATE", + "SOURCE GEOCONFIRMED": "FONTE GEOCONFERMATA", + "2021 historical reference versus 2026 post-event imagery; changes are cumulative and include the July 2025 Rasuwagadhi flood. Schematic downstream progression, not modeled arrival time; not an official hazard model.": "Riferimento storico 2021 contro immagini 2026 successive all'evento; i cambiamenti sono cumulativi e includono l'alluvione di Rasuwagadhi del luglio 2025. Progressione schematica a valle, non un tempo di arrivo modellato; non è un modello ufficiale di pericolosità.", + "Immediate collapse viewpoint": "Punto di vista sul crollo immediato", + "Collapse viewpoint": "Punto di vista sul crollo", + "Debris-dammed lake": "Lago di sbarramento da detriti", + "Dammed lake": "Lago di sbarramento", + "Second landslide": "Seconda frana", + "Gyirong border gate": "Valico di frontiera di Gyirong", + "Border gate": "Valico di frontiera", + "Timure evidence cluster": "Gruppo di prove di Timure", + "Mailung / Upper Trishuli bridge": "Ponte di Mailung / Alto Trishuli", + "Dandagaun viewpoint restaurant": "Ristorante panoramico di Dandagaun", + "Dandagaun viewpoint": "Punto panoramico di Dandagaun", + "Bidur - Trishuli bridge": "Ponte di Bidur - Trishuli", + "Bidur bridge": "Ponte di Bidur", + "Devighat / Taadi Khola Bridge": "Ponte di Devighat / Taadi Khola", + "Devighat bridge": "Ponte di Devighat", + "Facebook player API did not initialize.": "L'API del player di Facebook non si è inizializzata.", + "Facebook player API could not load.": "Impossibile caricare l'API del player di Facebook.", + "Facebook player API timed out.": "L'API del player di Facebook è andata in timeout.", + "X embed API did not initialize.": "L'API di incorporamento di X non si è inizializzata.", + "X embed could not load.": "Impossibile caricare l'incorporamento di X.", + "X embed timed out.": "L'incorporamento di X è andato in timeout.", "UNAVAILABLE": "NON DISPONIBILE", + "TIMEOUT": "TIMEOUT", + "BLOCKED": "BLOCCATO", "SOURCE": "FONTE", + "Facebook embed unavailable. The post may be private, removed, region-restricted, or blocked.": "Incorporamento di Facebook non disponibile. Il post potrebbe essere privato, rimosso, limitato per regione o bloccato.", + "Preloading {provider} media": "Precaricamento dei contenuti {provider}", + "LOADING X POST…": "CARICAMENTO POST DI X…", + "The X post is unavailable or cannot be embedded.": "Il post di X non è disponibile o non può essere incorporato.", + "X POST · PROVIDER CONTROLS": "POST DI X · CONTROLLI DEL PROVIDER", + "{reason} OPEN ORIGINAL.": "{reason} APRI L'ORIGINALE.", + "X embed unavailable": "Incorporamento di X non disponibile", + "FACEBOOK · PROVIDER CONTROLS": "FACEBOOK · CONTROLLI DEL PROVIDER", + "Facebook embed unavailable": "Incorporamento di Facebook non disponibile", + "AUTOPLAY BLOCKED · USE PROVIDER CONTROLS": "AUTOPLAY BLOCCATO · USA I CONTROLLI DEL PROVIDER", + "Embedded {provider} media for {source}": "Contenuto {provider} incorporato per {source}", + "witness source": "fonte testimone", + "Witness source": "Fonte testimone", + "{provider} · EMBEDDED SOURCE": "{provider} · FONTE INCORPORATA", + "OPEN ORIGINAL ↗": "APRI L'ORIGINALE ↗", + "{provider} media: {source}": "Contenuto {provider}: {source}", + "{provider} · PROVIDER CONTROLS": "{provider} · CONTROLLI DEL PROVIDER", + "YOUTUBE {state} · OPEN ORIGINAL": "YOUTUBE {state} · APRI L'ORIGINALE", + "INITIATION": "INNESCO", + "DAMMING": "SBARRAMENTO", + "SECONDARY FAILURE": "CEDIMENTO SECONDARIO", + "BORDER ARRIVAL": "ARRIVO AL CONFINE", + "PROPAGATION": "PROPAGAZIONE", + "DOWNSTREAM PASSAGE": "PASSAGGIO A VALLE", + "CONSEQUENCE": "CONSEGUENZA", + "DOWNSTREAM CONSEQUENCE": "CONSEGUENZA A VALLE", + "EVIDENCE": "PROVE", + "{year} HISTORICAL REFERENCE": "RIFERIMENTO STORICO {year}", + "{year} POST-EVENT": "{year} DOPO L'EVENTO", + "{count} GEOLOCATED SOURCE-MAP PLACEMENTS": { + "one": "{count} POSIZIONAMENTO GEOLOCALIZZATO SULLA MAPPA DELLE FONTI", + "many": "{count} DI POSIZIONAMENTI GEOLOCALIZZATI SULLA MAPPA DELLE FONTI", + "other": "{count} POSIZIONAMENTI GEOLOCALIZZATI SULLA MAPPA DELLE FONTI" + }, + "NO PREVIEW": "NESSUNA ANTEPRIMA", + "YouTube source": "Fonte YouTube", + "Facebook source": "Fonte Facebook", + "SOURCE LINK": "LINK ALLA FONTE", + "{publisher} / OPEN": "{publisher} / APRI", + "Bhote Koshi flood reconstruction controls": "Controlli della ricostruzione dell'alluvione del Bhote Koshi", + "EVENT RECONSTRUCTION · 26 AUG 2026": "RICOSTRUZIONE DELL'EVENTO · 26 AGO 2026", + "BHOTE KOSHI OUTBURST FLOOD": "ALLUVIONE DA SVUOTAMENTO DEL BHOTE KOSHI", + "Close event layer": "Chiudi il livello evento", + "OBSERVED IMAGERY": "IMMAGINI OSSERVATE", + "SCHEMATIC CORRIDOR": "CORRIDOIO SCHEMATICO", + "2021 HISTORICAL REFERENCE / 2026 POST-EVENT": "RIFERIMENTO STORICO 2021 / DOPO L'EVENTO 2026", + "Historical reference and post-event image split": "Confronto tra immagine storica di riferimento e immagine successiva all'evento", + "RECONSTRUCTION CLOCK": "OROLOGIO DELLA RICOSTRUZIONE", + "Schematic downstream progression": "Progressione schematica a valle", + "Story beat navigation": "Navigazione tra le tappe del racconto", + "Previous story beat": "Tappa precedente del racconto", + "CAUSE": "CAUSA", + "CAPTURE TIME UNVERIFIED": "ORA DI ACQUISIZIONE NON VERIFICATA", + "Next story beat": "Tappa successiva del racconto", + "▶ PLAY": "▶ RIPRODUCI", + "Play the next shot and continue through this scene": "Riproduci lo scatto successivo e prosegui con questa scena", + "▶ PLAY SCENE": "▶ RIPRODUCI SCENA", + "◉ CINEMATIC": "◉ CINEMATICA", + "↺ FULL STORY": "↺ STORIA COMPLETA", + "↗ OPEN ORIGINAL": "↗ APRI L'ORIGINALE", + "⌖ LOWER GORGE": "⌖ GOLA INFERIORE", + "FIELD REPORTS · {count}": "RAPPORTI DAL CAMPO · {count}", + "GEOLOCATIONS · {credit}": "GEOLOCALIZZAZIONI · {credit}", + "↗ OPEN PUBLIC MAP": "↗ APRI LA MAPPA PUBBLICA", + " Clouds are preserved from the source imagery.": " Le nuvole sono conservate dalle immagini di origine.", + "Rasuwagadhi witness": "Testimone a Rasuwagadhi", + "Open original source for {source}; capture time unverified": "Apri la fonte originale per {source}; ora di acquisizione non verificata", + "Historical reference and post-event image divider": "Divisore tra immagine storica di riferimento e immagine successiva all'evento", + "A historical reference {before} percent, B post-event {after} percent": "A riferimento storico {before} percento, B dopo l'evento {after} percento", + "■ RELEASE CAMERA": "■ RILASCIA LA CAMERA", + "Seek Nepal scene clock": "Scorri l'orologio della scena in Nepal", + "NEPAL SCENE CLOCK": "OROLOGIO SCENA NEPAL", + "… PLAYING SHOT": "… SCATTO IN RIPRODUZIONE", + "▶ PLAY SHOT": "▶ RIPRODUCI SCATTO", + "Ⅱ PAUSE": "Ⅱ PAUSA", + "↺ REPLAY CINEMATIC": "↺ RIVEDI CINEMATICA", + "↺ REPLAY": "↺ RIVEDI", + "… PLAYING SCENE": "… SCENA IN RIPRODUZIONE", + "Continue {scene} from next shot": "Continua {scene} dallo scatto successivo", + "current scene": "scena attuale", + "Replay the full reconstruction": "Rivedi l'intera ricostruzione", + "SCENE SHOT": "SCATTO DELLA SCENA", + "TIME UNVERIFIED": "ORA NON VERIFICATA", + "{count} SOURCES": { + "one": "{count} FONTE", + "many": "{count} DI FONTI", + "other": "{count} FONTI" + }, + "OUTSIDE IMAGERY SWIPE": "FUORI DAL CONFRONTO IMMAGINI", + "{scene} / AUTHORED SHOT": "{scene} / SCATTO D'AUTORE", + "NEPAL FLOOD INCIDENT": "ALLUVIONE IN NEPAL", + "Play {shot}": "Riproduci {shot}", + "current scene shot": "scatto della scena attuale", + "Play reconstruction": "Riproduci la ricostruzione", + "Load previous scene shot": "Carica lo scatto precedente della scena", + "Load next scene shot": "Carica lo scatto successivo della scena", + "SCHEMATIC CORRIDOR, NOT MODELED ARRIVAL TIME.": "CORRIDOIO SCHEMATICO, NON UN TEMPO DI ARRIVO MODELLATO.", + "Rasuwa · 26 Aug 2026": "Rasuwa · 26 ago 2026", + "Event reconstruction": "Ricostruzione dell'evento", + "BHOTE KOSHI FLOOD INCIDENT": "ALLUVIONE DEL BHOTE KOSHI", + "NEPAL · 26 AUG 2026": "NEPAL · 26 AGO 2026", + "USGS INITIAL REPORT": "RAPPORTO INIZIALE USGS", + "26 AUG 2026 · 08:37 NPT": "26 AGO 2026 · 08:37 NPT", + "28.2710° N · 85.5150° E": "28,2710° N · 85,5150° E", + "INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "INIZIALE M4.4 · RICLASSIFICATO FRANA M5.2", + "USGS EVENT us7000tbwb · OPEN SOURCE": "EVENTO USGS us7000tbwb · FONTE APERTA", + "Open the USGS initial report for the 26 August 2026 Nepal landslide": "Apri il rapporto iniziale USGS sulla frana del 26 agosto 2026 in Nepal", + "Show the Nepal context callout without a border or country fill": "Mostra il riquadro di contesto sul Nepal senza confine né riempimento del paese", + "Introduce Nepal, draw its border, then reveal the Bhote Koshi incident": "Presenta il Nepal, traccia il suo confine, poi mostra l'evento del Bhote Koshi", + "CITIES": "CITTÀ", + "Keep the regional incident context and introduce nearby city labels": "Mantieni il contesto regionale dell'evento e mostra le etichette delle città vicine", + "PLACES": "LUOGHI", + "Introduce the reconstruction scene key places from trigger to downstream": "Presenta i luoghi chiave della scena ricostruita, dall'innesco fino a valle", + "PATH": "PERCORSO", + "Animate the sourced cyan river-centerline route to Trishuli Bazaar": "Anima il percorso ciano lungo l'asse del fiume, da fonti, fino a Trishuli Bazaar", + "OVERVIEW": "PANORAMICA", + "Keep the completed flood path and location labels visible": "Mantieni visibili il percorso completo dell'alluvione e le etichette dei luoghi", + "RECORD": "REGISTRO", + "Reveal the trigger record while making a slow camera approach": "Mostra il registro dell'innesco con un lento avvicinamento della camera", + "{speed} kn": "{speed} kn", + "That file is not valid JSON.": "Quel file non è un JSON valido.", + "That JSON file is not GeoJSON.": "Quel file JSON non è GeoJSON.", + "That FeatureCollection has no features list.": "Quella FeatureCollection non ha un elenco di feature.", + "Every GeoJSON feature must have type Feature.": "Ogni feature GeoJSON deve avere type Feature.", + "That GeoJSON has invalid geometries.": "Quel GeoJSON ha geometrie non valide.", + "That GeoJSON contains an unsupported geometry.": "Quel GeoJSON contiene una geometria non supportata.", + "That GeoJSON has invalid coordinates.": "Quel GeoJSON ha coordinate non valide.", + "That file creates more than {limit} map objects (the limit).": "Quel file crea più di {limit} oggetti sulla mappa (il limite).", + "That file has more than {limit} style definitions and image links after cleanup (the limit).": "Quel file ha più di {limit} definizioni di stile e link a immagini dopo la pulizia (il limite).", + "That file has more than {limit} features (the limit).": "Quel file ha più di {limit} feature (il limite).", + "That file has more than {limit} points (the limit) across {features} features.": "Quel file ha più di {limit} punti (il limite) in {features} feature.", + "That file has more than {limit} points (the limit).": "Quel file ha più di {limit} punti (il limite).", + "That KMZ unpacks to more than the import limit.": "Quel KMZ, una volta estratto, supera il limite di importazione.", + "That KMZ is damaged and could not be unpacked.": "Quel KMZ è danneggiato e non è stato possibile estrarlo.", + "That KMZ is not a readable zip archive.": "Quel KMZ non è un archivio zip leggibile.", + "That KMZ uses a zip format this import does not read.": "Quel KMZ usa un formato zip che questa importazione non legge.", + "That KMZ is encrypted.": "Quel KMZ è crittografato.", + "That KMZ uses a compression method this import does not read.": "Quel KMZ usa un metodo di compressione che questa importazione non legge.", + "That KML has invalid geometry bounds.": "Quel KML ha limiti di geometria non validi.", + "That KML has invalid coordinates.": "Quel KML ha coordinate non valide.", + "That GPX file has no document.": "Quel file GPX non ha un documento .", + "That {format} file is not valid XML.": "Quel file {format} non è un XML valido.", + "That file has an unreadable image or exceeds the 16-megapixel image limit.": "Quel file ha un'immagine illeggibile o supera il limite di 16 megapixel per immagine.", + "That KML could not be read.": "Impossibile leggere quel KML.", + "That file has invalid point coordinates.": "Quel file ha coordinate dei punti non valide.", + "Ground heights are not available for that file. Try again when the map has loaded.": "Le quote del terreno non sono disponibili per quel file. Riprova quando la mappa è caricata.", + "That file took too long to read.": "La lettura di quel file ha richiesto troppo tempo.", + "Nothing to import.": "Niente da importare.", + "That file is larger than {size} MiB.": "Quel file supera i {size} MiB.", + "Only GeoJSON, KML, KMZ and GPX files can be imported.": "Si possono importare solo file GeoJSON, KML, KMZ e GPX.", + "That file has nothing to draw.": "Quel file non contiene nulla da disegnare.", + "That KMZ holds no KML document.": "Quel KMZ non contiene alcun documento KML.", + "That {format} file could not be read.": "Impossibile leggere quel file {format}.", + "That file has {count} map objects; the limit is {limit}.": "Quel file ha {count} oggetti sulla mappa; il limite è {limit}.", + "Ground heights could not be read. Try that file again.": "Impossibile leggere le quote del terreno. Riprova con quel file.", + "That file has invalid point graphics.": "Quel file ha grafiche dei punti non valide.", "Overpass rate-limited": "Overpass ha limitato le richieste", "Overpass timed out": "Overpass è andato in timeout", "Overpass could not complete the query": "Overpass non ha potuto completare la query", + "Map tiles temporarily unavailable": "Tile della mappa temporaneamente non disponibili", + "Mapped names temporarily unavailable": "Nomi mappati temporaneamente non disponibili", "Overpass temporarily unavailable": "Overpass temporaneamente non disponibile", "Retrying mapped sites…": "Nuovo tentativo sui siti mappati…", "Fetching mapped sites…": "Ricerca dei siti mappati…", @@ -21,10 +250,22 @@ "Showing cached mapped sites": "Siti mappati in cache", "Mapped sites not loaded": "Siti mappati non caricati", "Mapped sites loaded": "Siti mappati caricati", + "Military airfield": "Aeroporto militare", + "Naval base": "Base navale", + "Firing range": "Poligono di tiro", + "Military land": "Terreno militare", + "Mapped installation": "Installazione mappata", + "Military area": "Area militare", + "flight": "volo", + "military flight": "volo militare", + "satellite": "satellite", "feed unavailable": "feed non disponibile", "feed stale": "feed obsoleto", "observed or mapped nearby context": "contesto osservato o mappato nelle vicinanze", "no observed or mapped objects in current feeds": "nessun oggetto osservato o mappato nei feed attuali", + "Draw": "Disegno", + "Directions": "Indicazioni", + "Recent imagery": "Immagini recenti", "STATION": "STAZIONE", "Crewed stations and their visiting vehicles": "Stazioni con equipaggio e veicoli in visita", "NAV": "NAV", @@ -33,7 +274,7 @@ "Geostationary belt — comms and weather, fixed over the equator": "Fascia geostazionaria — comunicazioni e meteo, fissi sopra l'equatore", "VISUAL": "VISIVO", "Brightest naked-eye objects — CelesTrak visual group": "Oggetti più luminosi a occhio nudo — gruppo visual di CelesTrak", - "COMMS": "COMUN", + "COMMS": "TLC", "Broadband constellation shell — shown only in DENSE mode": "Shell della costellazione broadband — mostrato solo in modalità DENSO", "FISHING": "PESCA", "TOWING": "RIMORCHIO", @@ -44,7 +285,7 @@ "PLEASURE": "DIPORTO", "PILOT": "PILOTINA", "SAR": "SAR", - "TUG": "REBOCCATORE", + "TUG": "RIMORCHIATORE", "PORT TENDER": "TENDER PORTO", "ANTI-POLLUTION": "ANTINQUINAMENTO", "LAW ENFORCE": "FORZE ORDINE", @@ -54,6 +295,10 @@ "CARGO": "CARGO", "TANKER": "CISTERNA", "OTHER": "ALTRO", + "Included in bundle": "Incluso nel pacchetto", + "Missing bundle file — reimport its bundle": "File del pacchetto mancante: reimporta il suo pacchetto", + "Source configured; file checked when loaded": "Fonte configurata; file verificato al caricamento", + "Source unavailable": "Fonte non disponibile", "ENVIRONMENTAL": "AMBIENTE", "EARTH WATCH": "OSSERVATORIO TERRA", "ACTIVE EVENTS": "EVENTI ATTIVI", @@ -65,41 +310,182 @@ "Working…": "Operazione in corso…", "Could not open that mission{detail}. Retry or explore manually.": "Impossibile aprire quella missione{detail}. Riprova o esplora a mano.", "This browser is blocking storage, so that could not be saved.": "Questo browser blocca l'archiviazione, quindi non è stato possibile salvare.", + "NORMAL": "NORMALE", "CRT": "CRT", "NVG": "NVG", "FLIR": "FLIR", + "ANIME": "ANIME", + "NOIR": "NOIR", "SNOW": "NEVE", + "ARCTIC": "ARTICO", + "ANTARCTIC": "ANTARTIDE", + "NORTH AMERICA": "NORD AMERICA", + "SOUTH AMERICA": "SUD AMERICA", + "EUROPE": "EUROPA", + "AFRICA": "AFRICA", + "ASIA": "ASIA", + "OCEANIA": "OCEANIA", + "NORTHERN OCEANIC GRID": "GRIGLIA OCEANICA NORD", + "SOUTHERN OCEANIC GRID": "GRIGLIA OCEANICA SUD", "LOADING": "CARICAMENTO", "DEGRADED": "DEGRADATO", "STALE": "OBSOLETO", "PARTIAL": "PARZIALE", - "FALLBACK": "FALLBACK", + "FALLBACK": "RISERVA", + "{state} {layers}": "{state} {layers}", + "view band|STREET": "STRADA", + "view band|CITY": "CITTÀ", + "view band|METRO": "METRO", + "view band|REGIONAL": "REGIONALE", + "view band|GLOBAL": "GLOBALE", "SUMMARY": "RIEPILOGO", "Awaiting telemetry...": "In attesa di telemetria...", "REC": "REC", "AIS: --": "AIS: --", + "N/A": "N/D", + "{mode} {band} {locality} | {region} | ALT {alt} | WINDOW {window} | SUN {sun}° | ONA {ona}° | {zone}": " {mode} {band} {locality} | {region} | ALT {alt} | FINESTRA {window} | SOLE {sun}° | ONA {ona}° | {zone}", + "NEAR {poi} ({city}) {distance}": "VICINO A {poi} ({city}) {distance}", + "SECTOR {lat} {lon}": "SETTORE {lat} {lon}", + "hemisphere|N": "N", + "hemisphere|S": "S", + "hemisphere|E": "E", + "hemisphere|W": "O", "POWER UP · {count} KEYS WAITING": { - "one": "POWER UP · {count} CHIAVE IN ATTESA", - "other": "POWER UP · {count} CHIAVI IN ATTESA" + "one": "ACCENDI · {count} CHIAVE IN ATTESA", + "many": "ACCENDI · {count} DI CHIAVI IN ATTESA", + "other": "ACCENDI · {count} CHIAVI IN ATTESA" }, "POWERED UP": "ACCESO", + "Provider Settings does not answer proxied requests": "Impostazioni provider non risponde alle richieste tramite proxy", + "Provider Settings is disabled while sharing is enabled": "Impostazioni provider è disattivato mentre la condivisione è attiva", + "Provider Settings answers only the machine running the server": "Impostazioni provider risponde solo alla macchina su cui gira il server", + "Provider Settings answers only local hostnames": "Impostazioni provider risponde solo a nomi host locali", + "Provider Settings requires an exact local Origin": "Impostazioni provider richiede un'Origin locale esatta", + "Unrecognized Origin refused": "Origin non riconosciuta rifiutata", + "Cross-origin requests are refused": "Le richieste cross-origin sono rifiutate", + "Content-Type must be application/json": "Content-Type deve essere application/json", + "Method not allowed": "Metodo non consentito", + "Request too large": "Richiesta troppo grande", + "Invalid JSON": "JSON non valido", + "Body must be a JSON object of {ENV_VAR: value}": "Il corpo deve essere un oggetto JSON {ENV_VAR: value}", + "No keys provided": "Nessuna chiave fornita", + "At most {limit} keys per save": "Al massimo {limit} chiavi per salvataggio", + "Unknown key: {name}": "Chiave sconosciuta: {name}", + "{name} must be a string": "{name} deve essere una stringa", + "{name} is empty": "{name} è vuota", + "{name} is longer than any real key ({limit} max)": "{name} è più lunga di qualsiasi chiave reale (max {limit})", + "{name} may only contain printable characters with no spaces": "{name} può contenere solo caratteri stampabili senza spazi", + "{name} contains a character that is not valid in a key (#, quotes, $, \\, or backtick)": "{name} contiene un carattere non valido in una chiave (#, virgolette, $, \\ o backtick)", + "{name} is configured outside Provider Settings and can only be changed where it was set": "{name} è configurata fuori da Impostazioni provider e si può cambiare solo dove è stata impostata", + "The key was not saved: could not restrict the credential file to your account; nothing was saved": "La chiave non è stata salvata: impossibile limitare il file delle credenziali al tuo account; non è stato salvato nulla", + "The key was not saved: the existing configuration could not be read, so nothing was changed": "La chiave non è stata salvata: impossibile leggere la configurazione esistente, quindi non è cambiato nulla", + "Could not write the {store} store": "Impossibile scrivere nell'archivio {store}", "Save failed ({status}).": "Salvataggio non riuscito ({status}).", + "OAuth check failed: {detail}": "Verifica OAuth non riuscita: {detail}", + "Could not check ChatGPT sign-in. Try again.": "Impossibile verificare l'accesso a ChatGPT. Riprova.", + "VOICE AUTH · CHATGPT OAUTH": "AUTENTICAZIONE VOCE · CHATGPT OAUTH", + "VOICE AUTH · API KEY": "AUTENTICAZIONE VOCE · CHIAVE API", + "USE API KEY": "USA CHIAVE API", + "USE CHATGPT OAUTH": "USA CHATGPT OAUTH", + "Use OPENAI_API_KEY for the next cloud voice session": "Usa OPENAI_API_KEY per la prossima sessione vocale cloud", + "Use the signed-in local ChatGPT/Codex OAuth session for the next cloud voice session": "Usa la sessione OAuth locale di ChatGPT/Codex con accesso effettuato per la prossima sessione vocale cloud", + "Metered — a billing-enabled account": "A consumo: un account con fatturazione attiva", + "Optional paid token — public access works without one": "Token a pagamento opzionale: l'accesso pubblico funziona anche senza", + "Free key — register, paste, done": "Chiave gratuita: registrati, incolla, fatto", + "browser-side": "lato browser", + "This key runs in the browser by design — restrict it at the provider (see SECURITY.md)": "Questa chiave gira nel browser per progettazione: limitala presso il provider (vedi SECURITY.md)", + "configured externally": "configurata esternamente", + "Supplied by your environment, Keychain, or launcher — change it where it was set": "Fornita dal tuo ambiente, dal Portachiavi o dal launcher: cambiala dove è stata impostata", + "MANAGE ↗": "GESTISCI ↗", + "GET KEY ↗": "OTTIENI CHIAVE ↗", + "{envVar} saved — paste to replace": "{envVar} salvata: incolla per sostituirla", + "paste {envVar}": "incolla {envVar}", "REMOVE": "RIMUOVI", "Remove {title} from this app's saved keys": "Rimuovi {title} dalle chiavi salvate di questa app", + "unsaved provider keys": "chiavi provider non salvate", + "Project keys: {status}": "Chiavi del progetto: {status}", "your app configuration": "la configurazione della tua app", "your local .env": "il tuo .env locale", "Saving…": "Salvataggio…", "Save failed: {detail}": "Salvataggio non riuscito: {detail}", "Paste at least one key first.": "Incolla prima almeno una chiave.", "Saved to {store}. Restarting — this page reloads itself.": "Salvato ({store}). Riavvio in corso: questa pagina si ricarica da sola.", + "Cloud voice will use OPENAI_API_KEY on the next session.": "La voce cloud userà OPENAI_API_KEY dalla prossima sessione.", + "Checking local ChatGPT OAuth sign-in…": "Verifica dell'accesso OAuth locale a ChatGPT…", + "Could not check ChatGPT sign-in.": "Impossibile verificare l'accesso a ChatGPT.", + "ChatGPT OAuth selected for cloud voice. Your API key stays saved and available.": "ChatGPT OAuth selezionato per la voce cloud. La tua chiave API resta salvata e disponibile.", + "ChatGPT sign-in expired. Opening sign-in again…": "Accesso a ChatGPT scaduto. Riapertura dell'accesso…", + "Opening ChatGPT sign-in in your browser…": "Apertura dell'accesso a ChatGPT nel browser…", + "Could not start ChatGPT sign-in on this machine.": "Impossibile avviare l'accesso a ChatGPT su questa macchina.", + "Finish ChatGPT sign-in in the browser. Waiting for it to complete…": "Completa l'accesso a ChatGPT nel browser. In attesa del completamento…", + "ChatGPT sign-in timed out. Click {button} to try again.": "Accesso a ChatGPT scaduto. Fai clic su {button} per riprovare.", + "ChatGPT sign-in complete. OAuth will be used for the next cloud voice session.": "Accesso a ChatGPT completato. OAuth verrà usato per la prossima sessione vocale cloud.", "Remove this key from your saved configuration?": "Rimuovere questa chiave dalla configurazione salvata?", "Removed from {store}. Restarting — this page reloads itself.": "Rimosso ({store}). Riavvio in corso: questa pagina si ricarica da sola.", + "The photorealistic 3D planet, place search + Street View": "Il pianeta 3D fotorealistico, ricerca luoghi + Street View", "Places context + Street View fallback; optional separate key": "Contesto luoghi + fallback Street View; chiave separata opzionale", + "Voice control — API key or ChatGPT OAuth": "Controllo vocale: chiave API o ChatGPT OAuth", + "Gemini Live voice control": "Controllo vocale Gemini Live", "Live ships, worldwide": "Navi live, in tutto il mondo", "Live active-fire detections": "Rilevamenti live di incendi attivi", "Real live traffic (keyless runs a simulation)": "Traffico reale live (senza chiave usa una simulazione)", "Bing imagery map stacks + world terrain": "Stack mappa con immagini Bing + terreno globale", "More flight-polling credits (anonymous works without)": "Più crediti di polling voli (funziona anche in modo anonimo)", + "Street-level imagery and coverage in the Street Level layer. Free: register an app in the Mapillary developer dashboard and paste its Client Token": "Immagini a livello stradale e copertura nel livello Vista stradale. Gratis: registra un'app nella dashboard sviluppatori di Mapillary e incolla il suo Client Token", + "Public space-missions access needs no key. Leave blank for standard use; paid tokens only raise request limits.": "L'accesso pubblico alle missioni spaziali non richiede chiavi. Lascia vuoto per l'uso normale; i token a pagamento alzano solo i limiti di richieste.", + "Air quality request failed": "Richiesta della qualità dell'aria non riuscita", + "No readings available": "Nessuna lettura disponibile", + "No current readings": "Nessuna lettura attuale", + "{count} stations reporting": { + "one": "{count} stazione attiva", + "many": "{count} di stazioni attive", + "other": "{count} stazioni attive" + }, + "Highest air-quality readings in view": "Valori di qualità dell'aria più alti nella vista", + "Low": "Basso", + "Low health risk": "Rischio per la salute basso", + "Moderate": "Moderato", + "Moderate health risk": "Rischio per la salute moderato", + "High": "Alto", + "High health risk": "Rischio per la salute alto", + "Very High": "Molto alto", + "Very High health risk": "Rischio per la salute molto alto", + "Air quality": "Qualità dell'aria", + "Canada only · ECCC AQHI network": "Solo Canada · rete AQHI di ECCC", + "ECCC request timed out": "La richiesta a ECCC è andata in timeout", + "Malformed AQHI station response": "Risposta delle stazioni AQHI non valida", + "No AQHI stations available": "Nessuna stazione AQHI disponibile", + "Malformed AQHI observation response": "Risposta delle osservazioni AQHI non valida", + "Camera source temporarily unavailable": "Fonte delle telecamere temporaneamente non disponibile", + "Mapped camera locations": "Posizioni mappate delle telecamere", + "SHOW NEAREST": "MOSTRA LA PIÙ VICINA", + "Stop following the current object before navigating to a camera": "Smetti di seguire l'oggetto attuale prima di spostarti su una telecamera", + "Move to the nearest loaded camera and show its details": "Spostati sulla telecamera caricata più vicina e mostrane i dettagli", + "Camera badges": "Badge delle telecamere", + "Cyan cameras turn coral when selected. Wedges illustrate mapped direction, not measured coverage. Nearby cameras may be outside the screen.": "Le telecamere ciano diventano corallo quando selezionate. I settori indicano la direzione mappata, non la copertura misurata. Le telecamere vicine possono essere fuori dallo schermo.", + "{count} nearby · {onScreen} on screen": { + "one": "{count} vicina · {onScreen} sullo schermo", + "many": "{count} vicine · {onScreen} sullo schermo", + "other": "{count} vicine · {onScreen} sullo schermo" + }, + "{count} nearby": { + "one": "{count} vicina", + "many": "{count} vicine", + "other": "{count} vicine" + }, + "retrying mapped ALPR cameras": "nuovo tentativo telecamere ALPR mappate", + "loading mapped ALPR cameras": "caricamento telecamere ALPR mappate", + "No ALPR data for this area — US and Canada only": "Nessun dato ALPR per quest'area: solo USA e Canada", + "Zoom in to load mapped cameras": "Ingrandisci per caricare le telecamere mappate", + "Showing cached locations": "Posizioni in cache", + "Coverage limited — zoom in": "Copertura limitata: ingrandisci", + "No ALPR data for this area": "Nessun dato ALPR per quest'area", + "None on screen — nearby cameras are outside the view": "Nessuna sullo schermo: le telecamere vicine sono fuori dalla vista", + "ALPR camera": "Telecamera ALPR", + "Camera coverage unavailable": "Copertura telecamere non disponibile", + "OpenStreetMap · community mapped": "OpenStreetMap · mappatura della comunità", + "Overpass returned an incomplete camera response": "Overpass ha restituito una risposta incompleta sulle telecamere", + "At least {count}": "Almeno {count}", "CONTEXT READY": "CONTESTO PRONTO", "GLOBAL CONTEXT OFF": "CONTESTO GLOBALE OFF", "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "SELEZIONA UN VOLO, UNA NAVE O UN'INSTALLAZIONE MAPPATA", @@ -112,7 +498,13 @@ "FOCUS": "FOCUS", "Next — nearest unvisited contact in the 250 km window": "Successivo — contatto non visitato più vicino nella finestra di 250 km", "NEXT": "SUCC", + "Named areas ({n})": "Aree con nome ({n})", + "{distance} FLIGHT / VESSEL WINDOW": "FINESTRA VOLI / NAVI {distance}", "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Contesto mappato/osservato da fonti aperte. Trasmissioni mancanti, aree di mappa non caricate o siti non mappati non sono prova di assenza.", + "mapped matches within {km} km of the subject": "corrispondenze mappate entro {km} km dal soggetto", + "none mapped within {km} km; not a complete 250 km survey": "nessuna mappata entro {km} km; non è un rilevamento completo di 250 km", + "mapped matches from the loaded viewport": "corrispondenze mappate dalla vista caricata", + "viewport feed is not a complete 250 km survey": "il feed della vista non è un rilevamento completo di 250 km", "HDG {value}°": "HDG {value}°", "BRG {value}°": "BRG {value}°", "BRG —": "BRG —", @@ -125,9 +517,10 @@ "Mapped installations": "Installazioni mappate", "syncing {count} city feeds...": "sincronizzazione di {count} feed città...", "scanning nearby systems...": "scansione dei sistemi vicini...", + "GBFS fetch error": "Errore di recupero GBFS", "Station {id}": "Stazione {id}", "Station": "Stazione", - "🚲 {bikes} avail · {docks} docks · {capacity} cap": "🚲 {bikes} disp · {docks} stalli · {capacity} cap", + "🚲 {bikes} avail · {docks} docks · {capacity} cap": "🚲 {bikes} disp · {docks} stalli · {capacity} tot", "⚠️ Not installed": "⚠️ Non installata", "⚠️ Not renting": "⚠️ Noleggio non attivo", "⚠️ Not returning": "⚠️ Restituzione non attiva", @@ -135,7 +528,9 @@ "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} TELECAMERE IN ATTESA · NESSUNA TELECAMERA SELEZIONATA · CLIC SU UNA TELECAMERA PER ATTIVARLA", "No cameras available in catalog.": "Nessuna telecamera disponibile nel catalogo.", "{city} CCTV": "CCTV {city}", + "FOV {value}° (DATASHEET)": "FOV {value}° (SCHEDA TECNICA)", "FOV {value}°": "FOV {value}°", + "SPEC FOV {span}° (CAPABILITY)": "FOV SPEC {span}° (CAPACITÀ)", "COVERAGE {value}km²": "COPERTURA {value}km²", "OVERLAP {count} cams": "SOVRAPP. {count} cam", "ISOLATED VIEW": "VISTA ISOLATA", @@ -145,7 +540,173 @@ "CAL {value}": "CAL {value}", "SRC {value}": "FONTE {value}", "{value} CONTEXT": "CONTESTO {value}", + "{spec} · SPECS: CCTV-DATABASE.COM": "{spec} · SPECIFICHE: CCTV-DATABASE.COM", + "Atlantic and eastern/central North Pacific; not worldwide cyclone coverage.": "Atlantico e Pacifico settentrionale orientale/centrale; non è una copertura mondiale dei cicloni.", + "Cyclone advisories unavailable": "Bollettini sui cicloni non disponibili", + "Cyclone data unavailable": "Dati sui cicloni non disponibili", + "Potential tropical cyclone": "Potenziale ciclone tropicale", + "Post-tropical cyclone": "Ciclone post-tropicale", + "Hurricane": "Uragano", + "Tropical storm": "Tempesta tropicale", + "Tropical depression": "Depressione tropicale", + "Subtropical storm": "Tempesta subtropicale", + "Subtropical depression": "Depressione subtropicale", + "Track and cone match this advisory": "Traccia e cono corrispondono a questo bollettino", + "Track/cone awaiting advisory {number}": "Traccia/cono in attesa del bollettino {number}", + "Track/cone unavailable": "Traccia/cono non disponibili", + "Cached advisory · stale source": "Bollettino in cache · fonte obsoleta", + "Loading advisories…": "Caricamento dei bollettini…", + "{count} active storms": { + "one": "{count} tempesta attiva", + "many": "{count} di tempeste attive", + "other": "{count} tempeste attive" + }, + "Position as of {time}": "Posizione alle {time}", + "Maximum sustained wind: {wind} · Pressure: {pressure}": "Vento massimo sostenuto: {wind} · Pressione: {pressure}", + "{name} · {classification} · Advisory {number} · issued {time}": "{name} · {classification} · Bollettino {number} · emesso {time}", + "No active NHC/CPHC systems": "Nessun sistema NHC/CPHC attivo", + "Advisories unavailable": "Bollettini non disponibili", + "Cyclones · NHC / CPHC": "Cicloni · NHC / CPHC", + "Atlantic · E/C Pacific": "Atlantico · Pacifico E/C", + "{storms} · {name} selected": "{storms} · {name} selezionata", + "Official advisory ↗": "Bollettino ufficiale ↗", + "Active NHC and CPHC cyclone advisories": "Bollettini attivi sui cicloni di NHC e CPHC", + "Wind unavailable": "Vento non disponibile", + "Advisory center / forecast track": "Centro del bollettino / traccia prevista", + "Center-track uncertainty cone": "Cono di incertezza della traccia del centro", + "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Seleziona una tempesta sulla mappa, o scegline una nell'elenco per selezionarla e spostare la camera. Fai clic su un punto vuoto della mappa per annullare la selezione. Contesto dai bollettini NOAA NHC/CPHC. Il cono descrive l'incertezza prevista sulla traccia del centro, non le dimensioni della tempesta né l'intera area di pericolo. Le etichette dei punti di previsione sono le ore di anticipo della fonte, non orari calcolati dall'emissione del bollettino. La geometria segue la superficie; l'altezza non è la quota meteorologica. Consulta il bollettino ufficiale.", + "DRIVE": "AUTO", + "Drive": "In auto", + "WALK": "A PIEDI", + "Walk": "A piedi", + "BIKE": "BICI", + "Bike": "In bici", + "rate limited": "limite di richieste raggiunto", + "routing service is rate limited": "il servizio di percorsi ha raggiunto il limite di richieste", + "route leg too long": "tratta del percorso troppo lunga", + "route too long": "percorso troppo lungo", + "{error} — try again in a moment": "{error}: riprova tra un momento", + "Routing is rate limited — try again in a moment": "Il calcolo del percorso ha raggiunto il limite di richieste: riprova tra un momento", + "Routing unavailable (HTTP {status})": "Calcolo del percorso non disponibile (HTTP {status})", + "Routing unavailable": "Calcolo del percorso non disponibile", + "direction|left": "a sinistra", + "direction|right": "a destra", + "direction|slightly left": "leggermente a sinistra", + "direction|slightly right": "leggermente a destra", + "direction|sharply left": "nettamente a sinistra", + "direction|sharply right": "nettamente a destra", + "direction|straight": "dritto", + "direction|around": "in senso opposto", + "fork direction|left": "la sinistra", + "fork direction|right": "la destra", + "fork direction|slightly left": "leggermente a sinistra", + "fork direction|slightly right": "leggermente a destra", + "fork direction|sharply left": "nettamente a sinistra", + "fork direction|sharply right": "nettamente a destra", + "fork direction|straight": "dritto", + "lane direction|left": "di sinistra", + "lane direction|right": "di destra", + "lane direction|slightly left": "di sinistra", + "lane direction|slightly right": "di destra", + "lane direction|sharply left": "all'estrema sinistra", + "lane direction|sharply right": "all'estrema destra", + "lane direction|straight": "centrale", + "ordinal|{number}st": "{number}ª", + "ordinal|{number}nd": "{number}ª", + "ordinal|{number}rd": "{number}ª", + "ordinal|{number}th": "{number}ª", + "Head out on {road}": "Parti su {road}", + "Head out": "Parti", + "Arrive at your destination, on the left": "Arrivo a destinazione, sulla sinistra", + "Arrive at your destination, on the right": "Arrivo a destinazione, sulla destra", + "Arrive at your destination": "Arrivo a destinazione", + "Make a U-turn onto {road}": "Fai inversione a U su {road}", + "Make a U-turn": "Fai inversione a U", + "Continue straight onto {road}": "Prosegui dritto su {road}", + "Continue straight": "Prosegui dritto", + "Turn {direction} onto {road}": "Svolta {direction} su {road}", + "Turn {direction}": "Svolta {direction}", + "Turn onto {road}": "Svolta su {road}", + "maneuver|Turn": "Svolta", + "Continue {direction} onto {road}": "Prosegui {direction} su {road}", + "Continue {direction}": "Prosegui {direction}", + "At the end of the road, turn {direction} onto {road}": "Alla fine della strada, svolta {direction} su {road}", + "At the end of the road, turn {direction}": "Alla fine della strada, svolta {direction}", + "At the end of the road, continue onto {road}": "Alla fine della strada, prosegui su {road}", + "At the end of the road, continue": "Alla fine della strada, prosegui", + "Keep {direction} at the fork onto {road}": "Al bivio, tieni {direction} verso {road}", + "Keep {direction} at the fork": "Al bivio, tieni {direction}", + "Continue at the fork onto {road}": "Al bivio, prosegui verso {road}", + "Continue at the fork": "Al bivio, prosegui", + "Merge {direction} onto {road}": "Immettiti {direction} su {road}", + "Merge {direction}": "Immettiti {direction}", + "Merge onto {road}": "Immettiti su {road}", + "maneuver|Merge": "Immettiti", + "Take the ramp on the {direction} onto {road}": "Prendi la rampa {direction} verso {road}", + "Take the ramp on the {direction}": "Prendi la rampa {direction}", + "Take the ramp {direction} onto {road}": "Prendi la rampa {direction} verso {road}", + "Take the ramp {direction}": "Prendi la rampa {direction}", + "Take the ramp onto {road}": "Prendi la rampa verso {road}", + "Take the ramp": "Prendi la rampa", + "Take the exit on the {direction} onto {road}": "Prendi l'uscita {direction} verso {road}", + "Take the exit on the {direction}": "Prendi l'uscita {direction}", + "Take the exit {direction} onto {road}": "Prendi l'uscita {direction} verso {road}", + "Take the exit {direction}": "Prendi l'uscita {direction}", + "Take the exit onto {road}": "Prendi l'uscita verso {road}", + "Take the exit": "Prendi l'uscita", + "At the roundabout, take the {exit} exit onto {road}": "Alla rotonda, prendi la {exit} uscita verso {road}", + "At the roundabout, take the {exit} exit": "Alla rotonda, prendi la {exit} uscita", + "Enter the roundabout onto {road}": "Entra nella rotonda verso {road}", + "Enter the roundabout": "Entra nella rotonda", + "At the roundabout, turn {direction} onto {road}": "Alla rotonda, svolta {direction} su {road}", + "At the roundabout, turn {direction}": "Alla rotonda, svolta {direction}", + "At the roundabout, continue onto {road}": "Alla rotonda, prosegui su {road}", + "At the roundabout, continue": "Alla rotonda, prosegui", + "Exit the roundabout onto {road}": "Esci dalla rotonda su {road}", + "Exit the roundabout": "Esci dalla rotonda", + "Use the {direction} lane onto {road}": "Usa la corsia {direction} verso {road}", + "Use the {direction} lane": "Usa la corsia {direction}", + "Continue onto {road}": "Prosegui su {road}", + "maneuver|Continue": "Prosegui", + "{mode} — reroute for {modeLower}": "{mode} — ricalcola il percorso {modeLower}", + "CLICK MAP": "CLIC SULLA MAPPA", + "SET A": "IMPOSTA A", + "Click a spot on the globe to place A (click again to cancel)": "Fai clic su un punto del globo per posizionare A (clic di nuovo per annullare)", + "Then click the globe to place the start": "Poi fai clic sul globo per posizionare la partenza", + "SET B": "IMPOSTA B", + "Click a spot on the globe to place B (click again to cancel)": "Fai clic su un punto del globo per posizionare B (clic di nuovo per annullare)", + "Then click the globe to place the destination": "Poi fai clic sul globo per posizionare la destinazione", + "Swap A and B": "Scambia A e B", + "FLY ···": "VOLA ···", + "FLYING": "IN VOLO", + "FLY": "VOLA", + "Fly the camera along the route": "Fai volare la camera lungo il percorso", + "Place A and B first": "Posiziona prima A e B", + "action|CLEAR": "CANCELLA", + "Remove the route and both markers": "Rimuovi il percorso ed entrambi i marcatori", + "press Escape twice to leave Draw": "premi Esc due volte per uscire da Disegno", + "{name} is active — turn {name} off, then set {endpoint}": "{name} è attivo: disattiva {name}, poi imposta {endpoint}", + "{name} is active — {leave}, then set {endpoint}": "{name} è attivo: {leave}, poi imposta {endpoint}", + "Only the first {count} turns of this route are shown": "Sono mostrate solo le prime {count} svolte di questo percorso", + "Turn-by-turn directions": "Indicazioni passo passo", + "Another map tool is using clicks — close it, then SET A again": "Un altro strumento della mappa sta usando i clic: chiudilo, poi IMPOSTA A di nuovo", + "Routing…": "Calcolo del percorso…", + "No route found": "Nessun percorso trovato", + "{distance} · {duration} · {mode} · first {count} turns": "{distance} · {duration} · {mode} · prime {count} svolte", + "{distance} · {duration} · {mode}": "{distance} · {duration} · {mode}", + "Click the globe to place {endpoint}": "Fai clic sul globo per posizionare {endpoint}", + "SET B, then click the globe": "IMPOSTA B, poi fai clic sul globo", + "SET A, then click the globe": "IMPOSTA A, poi fai clic sul globo", + "Step {step} of {total} · then {leg}": "Passo {step} di {total} · poi {leg}", + "Step {step} of {total}": "Passo {step} di {total}", + "Then: {instruction}": "Poi: {instruction}", + "No route found between A and B": "Nessun percorso trovato tra A e B", + "Routing failed: {error}": "Calcolo del percorso non riuscito: {error}", + "Routing timed out": "Il calcolo del percorso è andato in timeout", + "Routing unavailable — no response from the routing service": "Calcolo del percorso non disponibile: nessuna risposta dal servizio", + "Earthquake source unavailable": "Fonte dei terremoti non disponibile", "Focus fire detection {title}, {details}": "Focus sul rilevamento incendio {title}, {details}", + "live feed unavailable": "feed live non disponibile", "{value} conf": "{value} conf", "{value} ago": "{value} fa", "sensor n/a": "sensore n/d", @@ -156,17 +717,93 @@ "FIRES": "INCENDI", "max {value} MW": "max {value} MW", "new {value}": "nuovo {value}", + "{value}°N": "{value}°N", + "{value}°S": "{value}°S", + "{value}°E": "{value}°E", + "{value}°W": "{value}°O", "just now": "adesso", - "<1m ago": "<1m fa", - "{count}m ago": "{count}m fa", - "{count}h ago": "{count}h fa", + "<1m ago": "<1 min fa", + "{count}m ago": "{count} min fa", + "{count}h ago": "{count} h fa", + "fire confidence|high": "alta", + "fire confidence|nominal": "nominale", + "fire confidence|low": "bassa", + "age|<1h": "<1 h", + "age|{count}h": "{count} h", + "age|{count}d": "{count} g", "STALE · cached {age}": "OBSOLETO · in cache {age}", "refreshing...": "aggiornamento...", "loading...": "caricamento...", "KEY REQUIRED": "CHIAVE RICHIESTA", "LIVE · updated {age}": "LIVE · aggiornato {age}", + "Source snapshot time unavailable": "Ora dello snapshot della fonte non disponibile", + "Live data unavailable": "Dati live non disponibili", + "Intel Picture": "Quadro intelligence", + "Kinetic 30d": "Cinetico 30 g", + "Border Crisis": "Crisi di confine", + "Iran Picture": "Quadro Iran", + "Iran Kinetic": "Iran cinetico", + "Yemen FLOT": "FLOT Yemen", + "Latest Drop": "Ultima pubblicazione", + "GhostMaps file could not be read": "Impossibile leggere il file GhostMaps", + "{count} source links ↗ · click card to open the first": { + "one": "{count} link alla fonte ↗ · clic sulla scheda per aprirlo", + "many": "{count} di link alle fonti ↗ · clic sulla scheda per aprire il primo", + "other": "{count} link alle fonti ↗ · clic sulla scheda per aprire il primo" + }, + "S2 · {name}": "S2 · {name}", + "Report": "Rapporto", + "Open the source for {title}": "Apri la fonte di {title}", + "GhostMaps catalog unavailable": "Catalogo GhostMaps non disponibile", + "LIVE · GitHub {commit} · {message} · checked every {seconds}s": "LIVE · GitHub {commit} · {message} · controllato ogni {seconds}s", + "GitHub {commit} · {message} · reconnecting for live updates": "GitHub {commit} · {message} · riconnessione per gli aggiornamenti live", + "Connecting to the S2 GhostMaps repository…": "Connessione al repository S2 GhostMaps…", + "{count} placemarks": { + "one": "{count} segnaposto", + "many": "{count} di segnaposto", + "other": "{count} segnaposto" + }, + "S2 Underground publishes these KMZ products to GitHub. New uploads are detected within seconds and replace the previous edition automatically. Click a marker for its report.": "S2 Underground pubblica questi prodotti KMZ su GitHub. I nuovi caricamenti vengono rilevati in pochi secondi e sostituiscono automaticamente l'edizione precedente. Fai clic su un marcatore per il suo rapporto.", + "Malformed GhostMaps catalog": "Catalogo GhostMaps non valido", + "Low-accuracy score < 2%": "Indice di bassa precisione < 2%", + "Low-accuracy score 2–10%": "Indice di bassa precisione 2–10%", + "Low-accuracy score > 10%": "Indice di bassa precisione > 10%", + "GNSS integrity source unavailable": "Fonte di integrità GNSS non disponibile", + "Regional sample · 250 nm radius · cells from visited views over 30 min": "Campione regionale · raggio di 250 NM · celle dalle viste visitate negli ultimi 30 min", + "Retrying automatically at {time} UTC": "Nuovo tentativo automatico alle {time} UTC", + "Retrying automatically after provider cooldown": "Nuovo tentativo automatico dopo la pausa del provider", + "Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Si aggiorna automaticamente dopo uno spostamento o uno zoom e una volta al minuto. Il feed pubblico copre un cerchio di 250 miglia nautiche attorno al centro della vista; allontanare lo zoom non lo rende un'istantanea mondiale. Le celle vuote sono fuori dalla copertura campionata o hanno osservazioni insufficienti.", + "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Indice di bassa precisione = 100 × max(0, anomali − 1) / totale: un aereo viene scontato, quindi non è la quota grezza. Le celle richiedono {aircraft} aerei in {minutes} minuti. Le anomalie di integrità della navigazione non indicano un rilevamento di jamming o spoofing.", + "GNSS snapshot needs a view anchor": "Lo snapshot GNSS richiede un punto di riferimento della vista", + "GNSS feed rate limited (HTTP 429)": "Limite di richieste del feed GNSS raggiunto (HTTP 429)", + "Malformed GNSS integrity snapshot": "Snapshot di integrità GNSS non valido", + "GNSS integrity snapshot has no observation time": "Lo snapshot di integrità GNSS non ha un'ora di osservazione", + "installation class|AIRFIELD": "AEROPORTO", + "installation class|NAVAL BASE": "BASE NAVALE", + "installation class|RANGE": "POLIGONO", + "installation class|MILITARY LAND": "TERRENO MILITARE", + "installation class|BASE": "BASE", + "installation class|BARRACKS": "CASERMA", + "installation class|TRAINING AREA": "AREA ADDESTRAMENTO", + "installation class|PLACES CANDIDATE": "CANDIDATO PLACES", + "installation class|INSTALLATION": "INSTALLAZIONE", + "No mapped sites within {km} km of the contact": "Nessun sito mappato entro {km} km dal contatto", + "{count} mapped sites within {km} km of the contact": { + "one": "{count} sito mappato entro {km} km dal contatto", + "many": "{count} di siti mappati entro {km} km dal contatto", + "other": "{count} siti mappati entro {km} km dal contatto" + }, + "No mapped sites in view": "Nessun sito mappato nella vista", + "{count} mapped sites in view": { + "one": "{count} sito mappato nella vista", + "many": "{count} di siti mappati nella vista", + "other": "{count} siti mappati nella vista" + }, "loading mapped installation context": "caricamento del contesto dell'installazione mappata", + "Too many mapped sites in view to list them all": "Troppi siti mappati nella vista per elencarli tutti", + "Installation context unavailable": "Contesto delle installazioni non disponibile", "MAPPED INSTALLATION": "INSTALLAZIONE MAPPATA", + "Unknown": "Sconosciuto", "LAUNCH SITE · {site}": "SITO DI LANCIO · {site}", "LAUNCH SITE": "SITO DI LANCIO", "T−{time} · {mission}": "T−{time} · {mission}", @@ -192,6 +829,7 @@ "Select {mission}": "Seleziona {mission}", "{value} KM": "{value} KM", "{value} KM/S": "{value} KM/S", + "Selected Space Mission": "Missione spaziale selezionata", "SELECTED SPACE MISSION": "MISSIONE SPAZIALE SELEZIONATA", "Show all missions": "Mostra tutte le missioni", "Deselect mission": "Deseleziona la missione", @@ -232,10 +870,82 @@ "Ascent replay": "Replay della salita", "Orbit replay": "Replay dell'orbita", ", paused": ", in pausa", + "Malformed launch snapshot": "Snapshot dei lanci non valido", + "Heard by your receiver": "Ricevuto dal tuo ricevitore", + "1090 MHz": "1090 MHz", + "978 MHz UAT": "978 MHz UAT", + "browser SDR": "SDR nel browser", + "decoder feed": "feed del decoder", + "Your RTL-SDR receiver and decoder feed": "Il tuo ricevitore RTL-SDR e il feed del decoder", + "Your decoder feed": "Il tuo feed del decoder", + "Your RTL-SDR receiver": "Il tuo ricevitore RTL-SDR", + "NO CALLSIGN": "NESSUN NOMINATIVO", + "ALT {altitude} FT · GS {speed} KT · TRK {track}": "ALT {altitude} FT · GS {speed} KT · TRK {track}", + "V/S {rate}": "V/S {rate}", + "V/S {rate} FPM": "V/S {rate} FPM", + "POSITION {age}": "POSIZIONE {age}", + "POSITION {seconds} S AGO": "POSIZIONE {seconds} S FA", + "{count} MSGS": { + "one": "{count} MSG", + "many": "{count} DI MSG", + "other": "{count} MSG" + }, + "Decoder feeds": "Feed dei decoder", + "WebUSB + decoder feeds": "WebUSB + feed dei decoder", + "opening receiver": "apertura del ricevitore", + "checking decoder feeds": "verifica dei feed dei decoder", + "WebUSB needs desktop Chrome or Edge": "WebUSB richiede Chrome o Edge desktop", + "connect a receiver in Radio": "collega un ricevitore in Radio", + "receiver is in FM mode": "il ricevitore è in modalità FM", + "listening": "in ascolto", + "USB error": "errore USB", "Alt unknown": "Quota sconosciuta", "Type unknown": "Tipo sconosciuto", "Reg unknown": "Matricola sconosciuta", "Operator unknown": "Operatore sconosciuto", + "${amount}K": "{amount}K $", + "${amount}M": "{amount} mln $", + "${amount}B": "{amount} mld $", + "fire cause|Human": "Umana", + "fire cause|Natural": "Naturale", + "fire cause|Undetermined": "Indeterminata", + "fire cause|Unknown": "Sconosciuta", + "fire behavior|Minimal": "Minimo", + "fire behavior|Moderate": "Moderato", + "fire behavior|Active": "Attivo", + "fire behavior|Extreme": "Estremo", + "Type {level} Incident": "Incidente di tipo {level}", + "age|{count}m": "{count} min", + "{acres} ac": { + "one": "{acres} acro", + "many": "{acres} di acri", + "other": "{acres} acri" + }, + "{percent}% contained": "contenuto al {percent}%", + "containment unknown": "contenimento sconosciuto", + "{cause} cause": "causa {cause}", + "{personnel} personnel": { + "one": "{personnel} addetto", + "many": "{personnel} di addetti", + "other": "{personnel} addetti" + }, + "{county} County": "Contea di {county}", + "{cost} to date": "{cost} finora", + "discovered {age} ago": "scoperto {age} fa", + "updated {age} ago": "aggiornato {age} fa", + "part of {complex}": "parte di {complex}", + "InciWeb ↗ · click card to open": "InciWeb ↗ · clic sulla scheda per aprirlo", + "FIRE · {name}": "INCENDIO · {name}", + "Unnamed incident": "Incidente senza nome", + "Open {title} on InciWeb": "Apri {title} su InciWeb", + "Perimeter source unavailable": "Fonte dei perimetri non disponibile", + "Not contained or unknown": "Non contenuto o sconosciuto", + "Under 50% contained": "Contenuto meno del 50%", + "50–99% contained": "Contenuto al 50–99%", + "Fully contained": "Completamente contenuto", + "Colour shows reported containment. Perimeters are simplified to about 100 m.": "Il colore indica il contenimento riportato. I perimetri sono semplificati a circa 100 m.", + "Malformed perimeter snapshot": "Snapshot dei perimetri non valido", + "radio tag|All": "Tutti", "News": "Notizie", "Talk": "Talk", "Weather / Emergency": "Meteo / Emergenza", @@ -244,11 +954,21 @@ "Traffic / Transit": "Traffico / Trasporti", "Music": "Musica", "Other": "Altro", + "Directory refresh degraded; showing the previous station catalog.": "Aggiornamento dell'elenco degradato; viene mostrato il catalogo stazioni precedente.", + "Radio directory coverage is degraded.": "La copertura dell'elenco radio è degradata.", + "Directory refresh failed; showing the previous station catalog.": "Aggiornamento dell'elenco non riuscito; viene mostrato il catalogo stazioni precedente.", + "Radio directory is temporarily unavailable.": "L'elenco radio è temporaneamente non disponibile.", + "radio|NEWS": "NOTIZIE", "radio|TALK": "TALK", + "radio|WEATHER": "METEO", "radio|SAFETY": "SICUREZZA", "radio|AIR / SEA": "AERO / MARE", "radio|TRANSIT": "TRASPORTI", "radio|MUSIC": "MUSICA", + "radio|OTHER": "ALTRO", + "Broadcaster stream is unavailable or blocked by the browser.": "Il flusso dell'emittente non è disponibile o è bloccato dal browser.", + "Playback requires a direct click or tap.": "La riproduzione richiede un clic o un tocco diretto.", + "Broadcaster stream could not be started.": "Impossibile avviare il flusso dell'emittente.", "Alternative": "Alternative", "Ambient": "Ambient", "Blues": "Blues", @@ -274,6 +994,32 @@ "Techno": "Techno", "Trance": "Trance", "World": "World", + "overview": "panoramica", + "cloud unknown": "nuvolosità sconosciuta", + "{percent}% scene cloud": "{percent}% di nubi nella scena", + "{min}–{max}% scene cloud": "{min}–{max}% di nubi nella scena", + "Comparison in use by another scene": "Confronto in uso da un'altra scena", + "Esri map unavailable · no swipe": "Mappa Esri non disponibile · niente confronto", + "Swipe needs a globe map": "Il confronto richiede una mappa del globo", + "Imagery stays on Esri · CLEAR to use Google 3D": "Le immagini restano su Esri · CANCELLA per usare Google 3D", + "Imagery catalog unavailable": "Catalogo immagini non disponibile", + "Catalog truncated · a newer clear day may exist": "Catalogo troncato · potrebbe esistere un giorno sereno più recente", + "{label} catalog unavailable · {detail}": "Catalogo {label} non disponibile · {detail}", + "Daily overview for today may still be empty until the pass": "La panoramica giornaliera di oggi potrebbe restare vuota fino al passaggio", + "Box and images cleared": "Riquadro e immagini cancellati", + "MORE DETAIL · 30 m": "PIÙ DETTAGLIO · 30 m", + "Sentinel-2 and Landsat via HLS, 30 m, every 2–6 days": "Sentinel-2 e Landsat tramite HLS, 30 m, ogni 2–6 giorni", + "DAILY OVERVIEW · 250 m": "PANORAMICA GIORNALIERA · 250 m", + "VIIRS daily mosaic, 250 m, follows broad changes; little detail under 25 km": "Mosaico giornaliero VIIRS, 250 m, segue i cambiamenti ampi; pochi dettagli sotto i 25 km", + "Sentinel-2": "Sentinel-2", + "Sentinel-2 via HLS": "Sentinel-2 tramite HLS", + "Landsat 8/9": "Landsat 8/9", + "Landsat 8/9 via HLS": "Landsat 8/9 tramite HLS", + "Daily overview": "Panoramica giornaliera", + "Box edges must be finite": "I bordi del riquadro devono essere finiti", + "Longitudes must be within ±180°": "Le longitudini devono essere entro ±180°", + "Select one side of the dateline": "Seleziona un solo lato della linea del cambio di data", + "Box must enclose an area": "Il riquadro deve racchiudere un'area", "Add the full Starlink broadband shell (thousands of extra points)": "Aggiungi l'intero shell broadband Starlink (migliaia di punti in più)", "Loading the Starlink shell…": "Caricamento dello shell Starlink…", "Starlink {detail} — click to retry": "Starlink {detail} — clic per riprovare", @@ -281,7 +1027,89 @@ "Showing the full Starlink shell — click for the core catalog only": "Mostra l'intero shell Starlink — clic per il solo catalogo principale", "DENSE ···": "DENSO ···", "DENSE ✕": "DENSO ✕", - "DENSE": "DENSA", + "DENSE": "DENSO", + "CelesTrak unreachable": "CelesTrak irraggiungibile", + "DOCKED · {name} · +{extra}": "AGGANCIATO · {name} · +{extra}", + "DOCKED · {name}": "AGGANCIATO · {name}", + "{name} needs the Google 3D map: choose it under MAP SOURCE": "{name} richiede la mappa Google 3D: sceglila in FONTE MAPPA", + "zoom in to a street to open {name}": "ingrandisci su una strada per aprire {name}", + "loading coverage...": "caricamento della copertura...", + "No street-level imagery within {radius} m of that point": "Nessuna immagine a livello stradale entro {radius} m da quel punto", + "No street-level imagery within {radius} m of the view centre": "Nessuna immagine a livello stradale entro {radius} m dal centro della vista", + "Zoom in to see street-level coverage": "Ingrandisci per vedere la copertura a livello stradale", + "Point the camera at the ground for street-level coverage": "Punta la camera verso il suolo per la copertura a livello stradale", + "Coverage tile failed": "Tile di copertura non riuscito", + "The photo could not be loaded": "Impossibile caricare la foto", + "{name} photo. ← and → step along the sequence. On a 360° photo, drag or use Shift+← →, ↑ ↓ to look around, and + − to zoom": "Foto {name}. ← e → scorrono la sequenza. Su una foto a 360°, trascina o usa Shift+← →, ↑ ↓ per guardarti intorno, e + − per lo zoom", + "{name} street-level photo": "Foto a livello stradale {name}", + "Previous photo in this sequence (←)": "Foto precedente in questa sequenza (←)", + "Next photo in this sequence (→)": "Foto successiva in questa sequenza (→)", + "Aim the middle of the view at a street to look for imagery there": "Punta il centro della vista su una strada per cercare immagini lì", + "KEY REJECTED": "CHIAVE RIFIUTATA", + "GOOGLE_MAPS_API_KEY is not set": "GOOGLE_MAPS_API_KEY non è impostata", + "The Google Maps JavaScript API could not load": "Impossibile caricare la Google Maps JavaScript API", + "Google Street View": "Google Street View", + "GOOGLE STREET VIEW": "GOOGLE STREET VIEW", + "Google refused GOOGLE_MAPS_API_KEY for Street View — check that the Maps JavaScript API is enabled for it and this site is an allowed referrer": "Google ha rifiutato GOOGLE_MAPS_API_KEY per Street View: verifica che la Maps JavaScript API sia abilitata per la chiave e che questo sito sia un referrer consentito", + "Street View did not answer — check the network, and that the Maps JavaScript API is enabled for GOOGLE_MAPS_API_KEY": "Street View non ha risposto: controlla la rete e che la Maps JavaScript API sia abilitata per GOOGLE_MAPS_API_KEY", + "click a street to open Street View": "fai clic su una strada per aprire Street View", + "Street View has no imagery for this place": "Street View non ha immagini per questo luogo", + "KartaView has no position for this photo": "KartaView non ha una posizione per questa foto", + "The KartaView photo could not be loaded": "Impossibile caricare la foto KartaView", + "zoom in to see KartaView coverage": "ingrandisci per vedere la copertura KartaView", + "no KartaView photos in view": "nessuna foto KartaView nella vista", + "KartaView is rate-limiting requests — they resume on their own": "KartaView sta limitando le richieste: riprenderanno da sole", + "KartaView’s photos here are archived and cannot be shown": "Le foto KartaView qui sono archiviate e non possono essere mostrate", + "KartaView did not filter this area in time — move the map to ask again": "KartaView non ha filtrato quest'area in tempo: sposta la mappa per riprovare", + "None of KartaView’s photos here pass the imagery filter": "Nessuna delle foto KartaView qui supera il filtro delle immagini", + "KartaView did not answer in time — try again": "KartaView non ha risposto in tempo: riprova", + "KartaView could not be reached — check the network": "KartaView non è raggiungibile: controlla la rete", + "KartaView sent an answer that could not be read": "KartaView ha inviato una risposta illeggibile", + "KartaView is rate-limiting requests": "KartaView sta limitando le richieste", + "KartaView sent too much data": "KartaView ha inviato troppi dati", + "KartaView is rate-limiting requests — try again in a moment": "KartaView sta limitando le richieste: riprova tra un momento", + "KartaView has no such photo": "KartaView non ha questa foto", + "Mapillary rejected MAPILLARY_CLIENT_TOKEN — replace it in Provider Settings": "Mapillary ha rifiutato MAPILLARY_CLIENT_TOKEN: sostituiscilo in Impostazioni provider", + "Coverage requests are being rate-limited — they resume on their own": "Le richieste di copertura sono limitate: riprenderanno da sole", + "The Panoramax photo could not be loaded": "Impossibile caricare la foto Panoramax", + "Panoramax is busy — coverage resumes on its own": "Panoramax è occupato: la copertura riprenderà da sola", + "no Panoramax photos in view": "nessuna foto Panoramax nella vista", + "no Panoramax photos here match the filters": "nessuna foto Panoramax qui corrisponde ai filtri", + "Panoramax sent a map tile that could not be read": "Panoramax ha inviato un tile della mappa illeggibile", + "This Panoramax photo is no longer available": "Questa foto Panoramax non è più disponibile", + "zoom in to see Panoramax coverage": "ingrandisci per vedere la copertura Panoramax", + "Panoramax did not answer in time — try again": "Panoramax non ha risposto in tempo: riprova", + "Panoramax could not be reached — check the connection": "Panoramax non è raggiungibile: controlla la connessione", + "Panoramax sent too much data": "Panoramax ha inviato troppi dati", + "Panoramax is busy": "Panoramax è occupato", + "Panoramax sent an unreadable answer": "Panoramax ha inviato una risposta illeggibile", + "Sequence images unavailable": "Immagini della sequenza non disponibili", + "No street-level imagery providers configured": "Nessun provider di immagini a livello stradale configurato", + "(by upload date)": "(per data di caricamento)", + "Open the Street Level panel to view imagery": "Apri il pannello Vista stradale per vedere le immagini", + "Image could not be opened": "Impossibile aprire l'immagine", + "TeleGeography load failed": "Caricamento TeleGeography non riuscito", + "UNAVAILABLE · {source} · Roads unavailable": "NON DISPONIBILE · {source} · Strade non disponibili", + "Roads: {source}": "Strade: {source}", + "TomTom roads unavailable while the traffic service is unreachable": "Strade TomTom non disponibili mentre il servizio traffico è irraggiungibile", + "Hybrid unavailable while the traffic service is unreachable": "Ibrido non disponibile mentre il servizio traffico è irraggiungibile", + "TomTom roads need a TomTom key": "Le strade TomTom richiedono una chiave TomTom", + "Hybrid needs a TomTom key": "Ibrido richiede una chiave TomTom", + "Local surface still loading": "Superficie locale ancora in caricamento", + "Partial coverage": "Copertura parziale", + "Detailed roads unavailable": "Strade dettagliate non disponibili", + "Reduced detail coverage": "Copertura con dettaglio ridotto", + "TomTom roads only, each with its live flow": "Solo strade TomTom, ognuna con il suo flusso live", + "TomTom roads only, each with its live flow (needs a TomTom key)": "Solo strade TomTom, ognuna con il suo flusso live (richiede una chiave TomTom)", + "OpenStreetMap roads, with TomTom flow matched when available": "Strade OpenStreetMap, con il flusso TomTom abbinato quando disponibile", + "TomTom roads first; OpenStreetMap fills the rest, simulated": "Prima le strade TomTom; OpenStreetMap completa il resto, simulato", + "TomTom roads first; OpenStreetMap fills the rest, simulated (needs a TomTom key)": "Prima le strade TomTom; OpenStreetMap completa il resto, simulato (richiede una chiave TomTom)", + "Hybrid": "Ibrido", + "TomTom key unavailable": "Chiave TomTom non disponibile", + "TomTom daily budget reached": "Budget giornaliero TomTom esaurito", + "TomTom upstream unreachable": "Servizio TomTom irraggiungibile", + "TomTom flow unavailable": "Flusso TomTom non disponibile", + "SIMULATED — {reason}": "SIMULATO — {reason}", "Syncing flow · Roads: {source}": "Sincronizzazione flusso · Strade: {source}", "LIVE · Roads: {source} · Roads without flow hidden": "LIVE · Strade: {source} · Strade senza flusso nascoste", "LIVE · Roads: {source} · No flow roads in view": "LIVE · Strade: {source} · Nessuna strada con flusso in vista", @@ -293,42 +1121,425 @@ "SIMULATED · Roads: OpenStreetMap · Flow: TomTom (no matches)": "SIMULATO · Strade: OpenStreetMap · Flusso: TomTom (nessuna corrispondenza)", "SIMULATED — traffic service unreachable": "SIMULATO — servizio traffico irraggiungibile", "SIMULATED — add TomTom key for live": "SIMULATO — aggiungi la chiave TomTom per il live", + "OpenFreeMap tiles rate-limited": "Tile OpenFreeMap con limite di richieste", + "OpenFreeMap tiles timed out": "Tile OpenFreeMap in timeout", + "OpenFreeMap tiles unavailable": "Tile OpenFreeMap non disponibili", + "occupancy|empty": "vuoto", + "occupancy|many seats available": "molti posti disponibili", + "occupancy|few seats available": "pochi posti disponibili", + "occupancy|standing room only": "solo posti in piedi", + "occupancy|crushed standing room only": "solo posti in piedi, affollato", + "occupancy|full": "pieno", + "occupancy|not accepting passengers": "non accetta passeggeri", + "occupancy|not boardable": "non accessibile", + "Route {route}": "Linea {route}", + "Vehicle {vehicle}": "Veicolo {vehicle}", + "vehicle motion|Stopped": "Fermo", + "No recent fix": "Nessuna posizione recente", + "Waiting for update": "In attesa di aggiornamento", + "Moving": "In movimento", + "reported {speed} km/h": "{speed} km/h riportati", + "reported hdg {heading}°": "prua {heading}° riportata", + "Last report: stopped at stop {stop}": "Ultimo rapporto: fermo alla fermata {stop}", + "Last report: arriving at stop {stop}": "Ultimo rapporto: in arrivo alla fermata {stop}", + "Last report: next stop {stop}": "Ultimo rapporto: prossima fermata {stop}", + "Shown at street level · depth not in the feed": "Mostrato a livello stradale · profondità non presente nel feed", + "Reported {seconds} s ago": "Riportato {seconds} s fa", + "Reported {minutes} min ago": "Riportato {minutes} min fa", + "shown {seconds} s behind": "mostrato con {seconds} s di ritardo", + "{reported} (feed time)": "{reported} (ora del feed)", + "Available trail: {minutes} min (limited)": "Scia disponibile: {minutes} min (limitata)", + "Available trail: {minutes} min": "Scia disponibile: {minutes} min", + "Bus": "Autobus", + "Tram": "Tram", + "Subway": "Metropolitana", + "Train": "Treno", + "Ferry": "Traghetto", + "Transit vehicle": "Veicolo del trasporto pubblico", "AIS: {name}": "AIS: {name}", "{type} SPD: {speed} HDG: {heading}": "{type} VEL: {speed} HDG: {heading}", "VESSEL": "NAVE", + "{speed}KT": "{speed}KT", + "{heading}DEG": "{heading}°", "POS: LIVE": "POS: LIVE", "POS: {time}Z": "POS: {time}Z", + "AIS live load failed": "Caricamento AIS live non riuscito", "awaiting first AIS position…": "in attesa della prima posizione AIS…", "awaiting usable AIS positions…": "in attesa di posizioni AIS utilizzabili…", "awaiting first AIS message…": "in attesa del primo messaggio AIS…", + "AISSTREAM_API_KEY not set": "AISSTREAM_API_KEY non impostata", + "live feed unsupported": "feed live non supportato", + "connecting to feed…": "connessione al feed…", + "feed disconnected": "feed disconnesso", + "feed down": "feed inattivo", + "feed idle": "feed fermo", + "API key rejected — check AISSTREAM_API_KEY": "Chiave API rifiutata: controlla AISSTREAM_API_KEY", + "feed silent {seconds}s — no AIS data": "feed silenzioso da {seconds}s: nessun dato AIS", + "feed silent — no AIS data": "feed silenzioso: nessun dato AIS", + "feed down — retrying slowly (attempt {attempt})": "feed fermo: nuovi tentativi lenti (tentativo {attempt})", + "reconnecting to feed… (attempt {attempt})": "riconnessione al feed… (tentativo {attempt})", + "feed down — retrying slowly": "feed fermo: nuovi tentativi lenti", + "reconnecting to feed…": "riconnessione al feed…", + "Focus vessel {name}, MMSI {mmsi}": "Focus sulla nave {name}, MMSI {mmsi}", + "Hidden by this map source · choose a globe map": "Nascosto da questa fonte mappa · scegli una mappa del globo", + "Weather image HTTP {status}": "Immagine meteo HTTP {status}", + "Weather HTTP {status}": "Meteo HTTP {status}", + "Frame unavailable; previous observation retained": "Fotogramma non disponibile; mantenuta l'osservazione precedente", + "Weather imagery unavailable": "Immagini meteo non disponibili", + "Weather source unavailable; previous observation retained": "Fonte meteo non disponibile; mantenuta l'osservazione precedente", + "Weather unavailable": "Meteo non disponibile", + "No frame within {gap} min of {time}": "Nessun fotogramma entro {gap} min dalle {time}", + "No frame within {gap} h of {time}": "Nessun fotogramma entro {gap} h dalle {time}", + "{hours}h {minutes}m ago": "{hours} h {minutes} min fa", + "{minutes}m ago": "{minutes} min fa", + "{state} · {time} · {lag}": "{state} · {time} · {lag}", + "Observed": "Osservato", + "History": "Storico", + "Observation unavailable": "Osservazione non disponibile", + "Waiting for observation": "In attesa dell'osservazione", + "{detail} · synced": "{detail} · sincronizzato", + "{detail} · nearest": "{detail} · più vicino", + "RADAR REFLECTIVITY · dBZ": "RIFLETTIVITÀ RADAR · dBZ", + "LIGHTNING DENSITY · 15 min accumulation": "DENSITÀ DI FULMINI · accumulo di 15 min", + "GLOBAL INFRARED · hourly": "INFRAROSSO GLOBALE · orario", + "GOES INFRARED · ~5 min": "INFRAROSSO GOES · ~5 min", + "{state}: {time}": "{state}: {time}", + "Latest observation": "Ultima osservazione", + "frame {index}/{total}": "fotogramma {index}/{total}", + "loading": "caricamento", + "Observation: unavailable": "Osservazione: non disponibile", + "Contiguous US · gaps ≠ no rain": "USA contigui · lacune ≠ assenza di pioggia", + "Americas + Pacific · not individual strikes": "Americhe + Pacifico · non singole fulminazioni", + "Color: strikes/km²/min ×10³": "Colore: fulmini/km²/min ×10³", + "60°S–60°N · typically 2–3 h delayed": "60°S–60°N · di solito 2–3 h di ritardo", + "North America · infrared imagery": "Nord America · immagini all'infrarosso", + "Reduced motion · history playback unavailable": "Movimento ridotto · riproduzione dello storico non disponibile", + "Reduced motion · manual history available": "Movimento ridotto · storico manuale disponibile", + "Rain radar · US": "Radar pioggia · USA", + "Lightning density · 15 min": "Densità di fulmini · 15 min", + "Satellite clouds": "Nuvole da satellite", + "Americas + Pacific": "Americhe + Pacifico", + "Global · 60°S–60°N": "Globale · 60°S–60°N", + "North America": "Nord America", + "Source observations delayed": "Osservazioni della fonte in ritardo", + "Stale source": "Fonte obsoleta", + "Loading next frame…": "Caricamento del fotogramma successivo…", + "Map center outside coverage": "Centro della mappa fuori copertura", + "strikes/km²/min ×10³": "fulmini/km²/min ×10³", + "N. America": "Nord America", + "Global": "Globale", + "Hourly global mosaic; usually 2–3 hours delayed": "Mosaico globale orario; di solito 2–3 ore di ritardo", + "GOES regional clouds; approximately 5-minute updates": "Nuvole regionali GOES; aggiornamenti circa ogni 5 minuti", + "Clouds only": "Solo nuvole", + "Apply the full cloud brightness key; 100% filter strength": "Applica l'intera scala di luminosità delle nuvole; intensità del filtro 100%", + "Full": "Completo", + "Show the complete infrared image; 0% filter strength": "Mostra l'intera immagine all'infrarosso; intensità del filtro 0%", + "Soft": "Tenue", + "Vivid": "Vivido", + "Image opacity; does not alter the observed values": "Opacità dell'immagine; non altera i valori osservati", + "View US radar": "Vedi il radar USA", + "View Americas & Pacific": "Vedi Americhe e Pacifico", + "View coverage": "Vedi la copertura", + "{value} strikes/km²/min ×10³ (15-minute density)": "{value} fulmini/km²/min ×10³ (densità su 15 minuti)", + "{value} dBZ radar reflectivity": "{value} dBZ di riflettività radar", + "STALE · cached source metadata": "OBSOLETO · metadati della fonte in cache", + "Map center is outside source coverage": "Il centro della mappa è fuori dalla copertura della fonte", + "NOAA/NWS 15-minute lightning density derived from Vaisala NLDN/GLD360. Coverage 110°E across the Pacific/Americas to 0°, 25°S–80°N. Not a live strike count, global coverage or a safety warning.": "Densità di fulmini a 15 minuti NOAA/NWS derivata da Vaisala NLDN/GLD360. Copertura da 110°E attraverso il Pacifico e le Americhe fino a 0°, 25°S–80°N. Non è un conteggio live delle fulminazioni, né una copertura globale né un avviso di sicurezza.", + "NOAA MRMS radar echoes indicate precipitation patterns, not rain rate, a storm warning or a future forecast. Native source approximately 1 km; display is limited to level 6. Frames use exact advertised observation times.": "Gli echi radar NOAA MRMS indicano la distribuzione delle precipitazioni, non l'intensità della pioggia, un avviso di tempesta o una previsione. Risoluzione nativa della fonte circa 1 km; la visualizzazione è limitata al livello 6. I fotogrammi usano gli orari esatti di osservazione dichiarati.", + "GOES-19/18 longwave infrared Band 14 regional; NESDIS global longwave mosaic. Clouds only dims everything but bright, cold cloud tops; a brightness filter, not a cloud mask. Coverage and freshness differ by region.": "Infrarosso a onda lunga GOES-19/18 Banda 14 regionale; mosaico globale a onda lunga NESDIS. Solo nuvole attenua tutto tranne le sommità nuvolose fredde e luminose; è un filtro di luminosità, non una maschera delle nuvole. Copertura e aggiornamento variano per regione.", + "REGION": "REGIONE", + "IMAGE": "IMMAGINE", + "FILTER": "FILTRO", + "Cloud filter strength": "Intensità del filtro nuvole", + "OPACITY": "OPACITÀ", + "Infrared decode failed": "Decodifica dell'infrarosso non riuscita", + "Weather prefetch unavailable": "Precaricamento meteo non disponibile", + "Weather tiles unavailable · previous frame retained": "Tile meteo non disponibili · mantenuto il fotogramma precedente", + "Some weather tiles unavailable": "Alcuni tile meteo non sono disponibili", + "Malformed weather manifest": "Manifest meteo non valido", + "Weather request timed out": "La richiesta meteo è andata in timeout", + "Temperature field unavailable": "Campo di temperatura non disponibile", + "Mean sea level pressure field unavailable": "Campo di pressione al livello del mare non disponibile", + "Wind upstream unavailable": "Servizio del vento non disponibile", + "{source} HTTP {status}": "{source} HTTP {status}", + "Wind": "Vento", + "Wind source unavailable": "Fonte del vento non disponibile", + "Forecast · does not follow history": "Previsione · non segue lo storico", + "Wind motion": "Movimento del vento", + "Wind speed": "Velocità del vento", + "Sea-level pressure": "Pressione al livello del mare", + "Air temperature · 2 m": "Temperatura dell'aria · 2 m", + "Global · 1° grid": "Globale · griglia di 1°", + "{model} forecast · {time}": "Previsione {model} · {time}", + "Loading forecast": "Caricamento della previsione", + "Preparing flow": "Preparazione del flusso", + "Selected field unavailable": "Campo selezionato non disponibile", + "Cached forecast · stale": "Previsione in cache · obsoleta", + "ECMWF IFS surface forecast": "Previsione di superficie ECMWF IFS", + "NOAA GFS surface forecast": "Previsione di superficie NOAA GFS", + "Reduced motion": "Movimento ridotto", "Resume": "Riprendi", "Pause": "Pausa", + "Pause visual flow; forecast time does not advance with animation": "Mette in pausa il flusso visivo; l'ora della previsione non avanza con l'animazione", + "None": "Nessuno", + "Speed": "Velocità", + "Pressure": "Pressione", + "Temperature": "Temperatura", + "Wind trails with no field shading": "Scie del vento senza ombreggiatura del campo", + "How hard the surface wind is blowing": "Quanto forte soffia il vento in superficie", + "Sea-level air pressure: broad highs and lows": "Pressione atmosferica al livello del mare: aree di alta e bassa pressione", + "Air temperature two meters above the surface": "Temperatura dell'aria a due metri dalla superficie", + "Wind speed units": "Unità della velocità del vento", + "Read wind at map center": "Leggi il vento al centro della mappa", + "Read the forecast at the center of the map without changing selection": "Leggi la previsione al centro della mappa senza cambiare la selezione", + "{model} forecast · {field} ({unit})": "Previsione {model} · {field} ({unit})", + "Valid: {time}": "Valida: {time}", + "preparing": "preparazione", + "Issued: {time}": "Emessa: {time}", + "Selected field unavailable · wind remains visible": "Campo selezionato non disponibile · il vento resta visibile", + "{error} · wind remains visible": "{error} · il vento resta visibile", + "Surface wind at 10 m. Approximately 1° global grid. Curves follow the 10 m wind field, lifted 12 km for visibility; display height is not weather altitude. View lighting is for readability. Animation shows flow through one fixed forecast; it does not advance time. Color fields drape the globe basemap or the active photorealistic 3D Tiles.": "Vento in superficie a 10 m. Griglia globale di circa 1°. Le curve seguono il campo del vento a 10 m, sollevate di 12 km per visibilità; l'altezza visualizzata non è la quota meteorologica. L'illuminazione della vista serve alla leggibilità. L'animazione mostra il flusso di una singola previsione fissa; non fa avanzare il tempo. I campi colorati ricoprono la mappa di base del globo o i 3D Tiles fotorealistici attivi.", + "MODEL": "MODELLO", + "FIELD": "CAMPO", + "UNITS": "UNITÀ", + "MOTION": "MOVIMENTO", + "Forecast": "Previsione", + "N": "N", + "NNE": "NNE", + "NE": "NE", + "ENE": "ENE", + "E": "E", + "ESE": "ESE", + "SE": "SE", + "SSE": "SSE", + "S": "S", + "SSW": "SSO", + "SW": "SO", + "WSW": "OSO", + "W": "O", + "WNW": "ONO", + "NW": "NO", + "NNW": "NNO", + "No surface reading": "Nessuna lettura in superficie", + "Aim the map center at Earth": "Punta il centro della mappa sulla Terra", + "A location reading needs a loaded forecast and the Earth at the center of the view.": "Una lettura sul luogo richiede una previsione caricata e la Terra al centro della vista.", + "Interpolated model forecast on an approximately 1° grid. Broad weather patterns, not a street-level measurement.": "Previsione del modello interpolata su una griglia di circa 1°. Andamenti meteo generali, non una misura a livello stradale.", + " · calm": " · calma", + " from {direction}": " da {direction}", + "WIND AT {coordinates}": "VENTO A {coordinates}", + "{model} · valid {time}": "{model} · valida {time}", + "Wind speed field unavailable": "Campo della velocità del vento non disponibile", + "Globe imagery unavailable": "Immagini del globo non disponibili", + "Globe field image unavailable": "Immagine del campo sul globo non disponibile", + "Unknown wind model": "Modello del vento sconosciuto", + "Unknown weather overlay": "Overlay meteo sconosciuto", + "Wind request timed out": "La richiesta del vento è andata in timeout", + "Malformed wind manifest": "Manifest del vento non valido", + "Malformed wind grid": "Griglia del vento non valida", "Error: {message}": "Errore: {message}", - "Needs {envVars} — add it in Provider Settings": "Richiede {envVars}: vai su Impostazioni Provider", + "Needs {envVars} — add it in Provider Settings": "Richiede {envVars}: aggiungila in Impostazioni provider", "{label} is unavailable": "{label} non è disponibile", "This map stack": "Questo stack mappa", "{label} unavailable: {hint}": "{label} non disponibile: {hint}", + "Google 3D tiles unavailable — check the key's API restrictions, quota, or network": "Google 3D Tiles non disponibili: controlla le restrizioni API della chiave, la quota o la rete", + "Needs {envVars} — add it in Provider Settings — or a Cesium ion token for the ion-hosted route": "Richiede {envVars}: aggiungila in Impostazioni provider, oppure un token Cesium ion per il percorso ospitato da ion", + "Exit cockpit to fly to a camera": "Esci dal cockpit per volare a una telecamera", + "Exit cockpit to fly to a location": "Esci dal cockpit per volare a un luogo", + "Exit cockpit to fly to a photo": "Esci dal cockpit per volare a una foto", + "Exit cockpit to fly to a shared view": "Esci dal cockpit per volare a una vista condivisa", + "Exit cockpit to fly to a target": "Esci dal cockpit per volare a un obiettivo", + "Exit cockpit to fly to a vessel": "Esci dal cockpit per volare a una nave", + "Exit cockpit to fly to a fire": "Esci dal cockpit per volare a un incendio", + "Exit cockpit to fly to a route": "Esci dal cockpit per volare a un percorso", + "Exit cockpit to fly to a file": "Esci dal cockpit per volare a un file", + "Exit cockpit to fly to a scene": "Esci dal cockpit per volare a una scena", + "Exit cockpit to view weather coverage": "Esci dal cockpit per vedere la copertura meteo", + "Exit cockpit to fly to a cyclone": "Esci dal cockpit per volare a un ciclone", + "Exit cockpit to fly to an aircraft": "Esci dal cockpit per volare a un aereo", + "Exit cockpit to fly to a satellite": "Esci dal cockpit per volare a un satellite", + "Exit cockpit to frame contacts": "Esci dal cockpit per inquadrare i contatti", "Visible map targets": "Obiettivi mappa visibili", + "Focusing {label}": "Focus su {label}", + "Source": "Fonte", + "Camera ownership changed": "Il controllo della camera è cambiato", + "Saved project could not be read; storage preserved. Import a valid file to resume saving.": "Impossibile leggere il progetto salvato; archivio conservato. Importa un file valido per riprendere i salvataggi.", "Ready": "Pronto", + "Scene layer turned off": "Livello della scena disattivato", + "Stopped": "Fermato", + "Scene not saved — existing saved project could not be read. Export edits or import a valid file.": "Scena non salvata: impossibile leggere il progetto salvato esistente. Esporta le modifiche o importa un file valido.", + "Scene not saved — {reason}": "Scena non salvata: {reason}", + "Scene not saved — browser storage unavailable": "Scena non salvata: archiviazione del browser non disponibile", "Loaded: {scene} / {shot}": "Caricato: {scene} / {shot}", + "Cannot update {scene}: shot inventory changed": "Impossibile aggiornare {scene}: l'elenco degli scatti è cambiato", + "Cannot update {scene}: evidence beats changed": "Impossibile aggiornare {scene}: le tappe delle prove sono cambiate", + "Cannot update {scene}: shot bindings are incomplete": "Impossibile aggiornare {scene}: i collegamenti degli scatti sono incompleti", + "Updated {count} shots: {scene}": { + "one": "Aggiornato {count} scatto: {scene}", + "many": "Aggiornati {count} di scatti: {scene}", + "other": "Aggiornati {count} scatti: {scene}" + }, + "Appended {count} shots: {scene}": { + "one": "Aggiunto {count} scatto: {scene}", + "many": "Aggiunti {count} di scatti: {scene}", + "other": "Aggiunti {count} scatti: {scene}" + }, "Cannot capture shot: camera not ready": "Impossibile catturare lo scatto: camera non pronta", "Captured: {scene} / {shot}": "Catturato: {scene} / {shot}", "Select a shot first": "Seleziona prima uno scatto", "Updated: {scene} / {shot}": "Aggiornato: {scene} / {shot}", + "Could not leave scene: {scene}": "Impossibile uscire dalla scena: {scene}", + "Seeked: {scene} / {shot}": "Posizionato: {scene} / {shot}", + "Seeking scene clock": "Spostamento sull'orologio della scena", "Camera unavailable — exit cockpit first": "Camera non disponibile: esci prima dal cockpit", "No shots to run": "Nessuno scatto da eseguire", + "Scene transition limit reached — load a shot to reset": "Limite di transizioni della scena raggiunto: carica uno scatto per azzerarlo", + "Export failed: {error}": "Esportazione non riuscita: {error}", "Project exported": "Progetto esportato", + "Importing project": "Importazione del progetto", + "Imported {file}": "Importato {file}", + "Import failed: {error}": "Importazione non riuscita: {error}", + "Import failed (could not read JSON file)": "Importazione non riuscita (impossibile leggere il file JSON)", + "Layers refused: {layers}": "Livelli rifiutati: {layers}", "Could not exit {mode} — scene layers may be refused": "Impossibile uscire da {mode}: i livelli della scena potrebbero essere rifiutati", + "Camera move interrupted": "Movimento della camera interrotto", + "Scene media timed out": "I contenuti della scena sono andati in timeout", + "Action complete": "Azione completata", + "Action unavailable or cancelled": "Azione non disponibile o annullata", + "Scene actions": "Azioni della scena", + "Select a feature or use Tab and Enter to choose an action.": "Seleziona un elemento o usa Tab e Enter per scegliere un'azione.", + "Selected feature: {feature}. Choose an action.": "Elemento selezionato: {feature}. Scegli un'azione.", "Running {index}/{total}: {scene} / {shot}": "Esecuzione {index}/{total}: {scene} / {shot}", "Scene run complete": "Esecuzione della scena completata", - "Global Flights Radar": "Radar Voli Globale", - "Orbital Watch": "Sorveglianza Orbitale", - "Thermal Threat Board": "Quadro Minacce Termiche", - "City Overload": "Sovraccarico Urbano", - "Omniscience Pullback": "Zoom Out Onniscienza", + "Bhote Koshi Evidence Sequence": "Sequenza delle prove del Bhote Koshi", + "Nepal Flood Incident": "Alluvione in Nepal", + "Global Flights Radar": "Radar voli globale", + "Orbital Watch": "Sorveglianza orbitale", + "Thermal Threat Board": "Quadro minacce termiche", + "City Overload": "Sovraccarico urbano", + "Omniscience Pullback": "Allontanamento onnisciente", + "Global Incident Context": "Contesto globale dell'evento", + "Nepal-Focused Globe Rotation": "Rotazione del globo sul Nepal", + "Bhote Koshi Regional Approach": "Avvicinamento regionale al Bhote Koshi", + "Bhote Koshi Nearby Cities": "Città vicine al Bhote Koshi", + "Bhote Koshi Incident Corridor": "Corridoio dell'evento del Bhote Koshi", + "Bhote Koshi Flood Path": "Percorso dell'alluvione del Bhote Koshi", + "Bhote Koshi Corridor Overview": "Panoramica del corridoio del Bhote Koshi", + "Bhote Koshi Upper Valley": "Alta valle del Bhote Koshi", + "Upper Valley Collapse": "Crollo nell'alta valle", + "Debris-Dammed Lake": "Lago di sbarramento da detriti", + "Nepal-China Border Gate": "Valico di frontiera Nepal-Cina", + "Timure Evidence Cluster": "Gruppo di prove di Timure", + "Syabru Besi Passage": "Passaggio a Syabru Besi", + "Bidur / Trishuli Consequence": "Conseguenze a Bidur / Trishuli", + "Final view": "Vista finale", + "Scene {n}": "Scena {n}", "Shot {n}": "Scatto {n}", + "the title of scene {scene} is empty or longer than {max} characters": "il titolo della scena {scene} è vuoto o supera i {max} caratteri", + "the title of shot {shot} in scene {scene} is empty or longer than {max} characters": "il titolo dello scatto {shot} nella scena {scene} è vuoto o supera i {max} caratteri", + "the project is larger than 5 MiB": "il progetto supera i 5 MiB", + "the project has too many shots": "il progetto ha troppi scatti", + "the scene data failed validation": "i dati della scena non hanno superato la validazione", + "Could not complete this action. Check the file, references and selected assets.": "Impossibile completare questa azione. Controlla il file, i riferimenti e le risorse selezionate.", + "{count} scenes": { + "one": "{count} scena", + "many": "{count} di scene", + "other": "{count} scene" + }, + "{count} shots": { + "one": "{count} scatto", + "many": "{count} di scatti", + "other": "{count} scatti" + }, + "{count} data packs": { + "one": "{count} pacchetto dati", + "many": "{count} di pacchetti dati", + "other": "{count} pacchetti dati" + }, + "{scene} / {pack}: {status}. File: {path}. {attribution} · {license}": "{scene} / {pack}: {status}. File: {path}. {attribution} · {license}", + "Unavailable layers: {layers}": "Livelli non disponibili: {layers}", + "Uses registered content or linked media. Those external files are not included in a scene bundle. Their original notices still apply.": "Usa contenuti registrati o media collegati. Quei file esterni non sono inclusi nel pacchetto della scena. Valgono ancora le loro note originali.", + "{bytes} bundled bytes verified. Files stay in memory for this session. Reimport the bundle after reloading the app.": "{bytes} byte nel pacchetto verificati. I file restano in memoria per questa sessione. Reimporta il pacchetto dopo aver ricaricato l'app.", + "Review scene import": "Rivedi l'importazione della scena", + "Nothing is loaded or changed until you apply this file.": "Nulla viene caricato o modificato finché non applichi questo file.", + "Ready to import": "Pronto per l'importazione", + "Apply replaces the current project. Export your current project first if you want to keep both.": "Applica sostituisce il progetto attuale. Esporta prima il progetto attuale se vuoi conservarli entrambi.", + "Apply import": "Applica importazione", + "Import was not applied. The current project may have changed.": "L'importazione non è stata applicata. Il progetto attuale potrebbe essere cambiato.", + "Select a scene and shot first": "Seleziona prima una scena e uno scatto", + "Edit scene details": "Modifica i dettagli della scena", + "Camera positions use degrees and meters above the ellipsoid. Drafts are validated before they replace your saved scene.": "Le posizioni della camera usano gradi e metri sopra l'ellissoide. Le bozze vengono validate prima di sostituire la scena salvata.", + "Anchors and data packs": "Ancore e pacchetti dati", + "Shot camera, timing, packs and actions": "Camera, tempi, pacchetti e azioni dello scatto", + "New anchor ID": "ID nuova ancora", + "Capture camera as anchor": "Cattura la camera come ancora", + "Anchor added to draft": "Ancora aggiunta alla bozza", + "Set move start to current camera": "Imposta l'inizio del movimento sulla camera attuale", + "Move added to draft; destination remains the shot camera": "Movimento aggiunto alla bozza; la destinazione resta la camera dello scatto", + "Use ordinary flight": "Usa il volo normale", + "Invalid shot JSON": "JSON dello scatto non valido", + "Apply details": "Applica i dettagli", + "Select a scene first": "Seleziona prima una scena", + "Share selected scene": "Condividi la scena selezionata", + "Scene JSON preserves authored settings and attribution. It does not include asset files. Bundles include only pack files you choose here or previously imported bundle files.": "Il JSON della scena conserva le impostazioni d'autore e l'attribuzione. Non include i file delle risorse. I pacchetti includono solo i file dei pacchetti dati scelti qui o i file di pacchetti importati in precedenza.", + "Download scene JSON": "Scarica il JSON della scena", + "Choose data-pack files": "Scegli i file del pacchetto dati", + "Or choose a data-pack folder": "Oppure scegli una cartella del pacchetto dati", + "Download asset bundle": "Scarica il pacchetto di risorse", + "Asset bundle downloaded": "Pacchetto di risorse scaricato", + "No RTL-SDR device selected": "Nessun dispositivo RTL-SDR selezionato", + "WebUSB requires desktop Chrome or Edge on localhost/HTTPS": "WebUSB richiede Chrome o Edge desktop su localhost/HTTPS", + "RTL-SDR access failed; close other SDR apps and check USB permissions": "Accesso a RTL-SDR non riuscito; chiudi le altre app SDR e controlla i permessi USB", + "RTL-SDR connection failed": "Connessione a RTL-SDR non riuscita", + "Receiving 1090 MHz ADS-B": "Ricezione ADS-B a 1090 MHz", + "Receiving broadcast FM": "Ricezione FM broadcast", + "Connect an RTL-SDR to begin.": "Collega un RTL-SDR per iniziare.", + "WebUSB is unavailable in this browser": "WebUSB non è disponibile in questo browser", + "USB work abandoned after a stalled transfer": "Operazione USB abbandonata dopo un trasferimento bloccato", + "SDR decoder worker failed": "Errore del worker del decoder SDR", + "SDR decoder did not start; receiver stopped": "Il decoder SDR non si è avviato; ricevitore fermato", + "SDR decoder stopped responding; receiver stopped": "Il decoder SDR ha smesso di rispondere; ricevitore fermato", + "SDR decoder fell behind; receiver stopped": "Il decoder SDR è rimasto indietro; ricevitore fermato", + "WebUSB requires desktop Chrome or Edge": "WebUSB richiede Chrome o Edge desktop", + "Waiting for an RTL-SDR device…": "In attesa di un dispositivo RTL-SDR…", + "Browser audio is suspended; press Connect again to resume it": "L'audio del browser è sospeso; premi di nuovo Connetti per riprenderlo", + "RTL-SDR sample stream stopped": "Flusso di campioni RTL-SDR interrotto", + "Switching to {mode}…": "Passaggio a {mode}…", + "Browser audio is suspended; select FM again to resume it": "L'audio del browser è sospeso; seleziona di nuovo FM per riprenderlo", + "RTL-SDR gain change failed": "Modifica del guadagno RTL-SDR non riuscita", + "Tuned to {mhz} MHz FM": "Sintonizzato su {mhz} MHz FM", + "Seeking up…": "Ricerca verso l'alto…", + "Seeking down…": "Ricerca verso il basso…", + "Seek stopped": "Ricerca interrotta", + "Scanning {mhz} MHz…": "Scansione di {mhz} MHz…", + "Found {mhz} MHz · {snr} dB": "Trovato {mhz} MHz · {snr} dB", + "FM signal found at {mhz} MHz": "Segnale FM trovato a {mhz} MHz", + "No FM signal found": "Nessun segnale FM trovato", + "Browser location is unavailable": "La posizione del browser non è disponibile", + "Receiver location was not granted": "Posizione del ricevitore non concessa", + "RTL-SDR disconnected": "RTL-SDR disconnesso", + "Upstream response too large": "Risposta del servizio upstream troppo grande", + "Vector tile request timed out": "La richiesta dei tile vettoriali è andata in timeout", + "Vector tiles unavailable": "Tile vettoriali non disponibili", + "Vector tile metadata unavailable": "Metadati dei tile vettoriali non disponibili", + "Zoom in for vector tile coverage": "Ingrandisci per la copertura dei tile vettoriali", + "Saturation": "Saturazione", + "Edge Thickness": "Spessore dei bordi", + "Contrast": "Contrasto", + "Grain": "Grana", + "Vignette": "Vignettatura", + "Pixelation": "Pixelizzazione", + "Distortion": "Distorsione", + "Instability": "Instabilità", "Density": "Densità", + "Gain": "Guadagno", "Bloom": "Bloom", + "Scanlines": "Scanline", + "Sensitivity": "Sensibilità", + "WHOT/BHOT": "WHOT/BHOT", + "Ironbow": "Ironbow", + "unsaved CCTV calibration": "calibrazione CCTV non salvata", + "the open cockpit": "il cockpit aperto", + "Switching language reloads the page. This will be lost: {items}. Switch anyway?": "Cambiare lingua ricarica la pagina. Andrà perso: {items}. Cambiare comunque?", "VISUAL PRESETS": "PRESET VISIVI", "LOCATION": "POSIZIONE", "CONTACTS — nearest planes · vessels · sites": "CONTATTI — aerei · navi · siti più vicini", @@ -336,14 +1547,51 @@ "LIVE SIGNALS": "SEGNALI LIVE", "Contacts could not complete the requested transition; try again": "Impossibile completare la transizione richiesta per Contatti; riprova", "CCTV layer unavailable": "Livello CCTV non disponibile", + "Link shared": "Link condiviso", "Link copied!": "Link copiato!", "Copy failed": "Copia non riuscita", + "Return map to straight-down view": "Riporta la mappa alla vista dall'alto", + "Tilt map to oblique view": "Inclina la mappa in vista obliqua", + "Reset map to north up. Current heading {heading} degrees": "Orienta la mappa a nord. Direzione attuale {heading} gradi", + "Tilted view": "Vista inclinata", + "Straight-down view": "Vista dall'alto", + "North up": "Nord in alto", "CCTV calibration saved": "Calibrazione CCTV salvata", + "HDG": "HDG", + "PITCH": "INCL.", + "FOV": "FOV", + "RANGE": "PORTATA", + "HGT": "ALT.", + "ΔN": "ΔN", + "ΔE": "ΔE", + "{value}m": "{value} m", "CCTV calibration reset": "Calibrazione CCTV ripristinata", "ADJUST ON": "REGOLAZ. ON", "ADJUST": "REGOLAZ.", + "SNAPSHOT": "SNAPSHOT", + "LIVE": "LIVE", + "UPSTREAM": "UPSTREAM", + "SYNTHETIC": "SINTETICO", + "CONFIGURED": "CONFIGURATO", + "SEED": "CATALOGO", "UNKNOWN": "SCONOSCIUTO", + "OK": "OK", "ERROR": "ERRORE", + "Live HLS connected": "HLS live connesso", + "Live HLS unavailable": "HLS live non disponibile", + "No stream URL configured": "Nessun URL di stream configurato", + "Live stream connected": "Stream live connesso", + "Snapshot feed connected": "Feed di snapshot connesso", + "Media fetch failed": "Recupero dei media non riuscito", + "Upstream snapshot active": "Snapshot upstream attivo", + "Fallback Street View frame": "Fotogramma Street View di riserva", + "Upstream unavailable": "Upstream non disponibile", + "No source configured": "Nessuna fonte configurata", + "Configured source": "Fonte configurata", + "Configured Source": "Fonte configurata", + "Synthetic fallback": "Riserva sintetica", + "Upstream HTTP {status}": "Upstream HTTP {status}", + "Unexpected media type {type}": "Tipo di media inatteso {type}", "SOURCE · UNKNOWN": "FONTE · SCONOSCIUTA", "FRAME · LOADING": "FOTOGRAMMA · CARICAMENTO", "FRAME · UNAVAILABLE": "FOTOGRAMMA · NON DISPONIBILE", @@ -366,10 +1614,12 @@ "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}": "{city} · HDG {heading} · FOV {fov} · PORTATA {range}m · {projection}{calBadge} · {provider}{status}", "{count} cameras loaded · click a camera to activate": { "one": "{count} telecamera caricata · clic su una telecamera per attivarla", + "many": "{count} di telecamere caricate · clic su una telecamera per attivarla", "other": "{count} telecamere caricate · clic su una telecamera per attivarla" }, "{count} cameras loaded · enable CCTV to activate": { "one": "{count} telecamera caricata · attiva CCTV per attivarla", + "many": "{count} di telecamere caricate · attiva CCTV per attivarle", "other": "{count} telecamere caricate · attiva CCTV per attivarle" }, "Enable CCTV to load camera intersections": "Attiva CCTV per caricare gli incroci delle telecamere", @@ -392,7 +1642,7 @@ "MIXED CONDITIONS": "CONDIZIONI MISTE", "CYCLE ON": "CICLO ON", "CYCLE OFF": "CICLO OFF", - "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Ferma lo scorrimento automatico delle pagine. Precedente, Successiva e le schede SIG/NEWS/LOCAL restano disponibili.", + "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Ferma lo scorrimento automatico delle pagine. Precedente, Successiva e le schede SIG/NOTIZIE/LOCALE restano disponibili.", "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.": "Scorre automaticamente le pagine del briefing ogni 9 secondi (Segnali → Notizie → Locale). Si mette in pausa quando passi sul pannello o lo selezioni. I dati dei segnali live si aggiornano comunque di continuo.", "ACQUIRING REGIONAL NEWS": "ACQUISIZIONE NOTIZIE REGIONALI", "REGIONAL NEWS UNAVAILABLE": "NOTIZIE REGIONALI NON DISPONIBILI", @@ -400,10 +1650,13 @@ "REGION UNAVAILABLE": "REGIONE NON DISPONIBILE", "NO RECENT LOCATION MATCHES": "NESSUNA CORRISPONDENZA RECENTE PER POSIZIONE", "{domain} · {age}": "{domain} · {age}", + "{value} KM/H": "{value} KM/H", "CLOUD {pct}%": "NUVOLE {pct}%", "CLOUD UNKNOWN": "NUVOLE SCONOSCIUTE", "{source} · LOCATION QUERY": "{source} · QUERY PER POSIZIONE", "REGIONAL NEWS": "NOTIZIE REGIONALI", + "{label} · {radius} AIR/SEA WINDOW": "{label} · FINESTRA ARIA/MARE {radius}", + "{scope} · INSTALLATIONS {coverage}": "{scope} · INSTALLAZIONI {coverage}", "CONTEXT STANDBY": "CONTESTO IN ATTESA", "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "ATTIVA IL CONTESTO GLOBALE PER I PING DI PROSSIMITÀ", "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "CONTATTO PERSO · ULTIMA LETTURA NOTA · NON È UN VIA LIBERA", @@ -418,15 +1671,20 @@ "R": "D", "{count} INPUTS UNKNOWN · NOT AN ALL-CLEAR": { "one": "{count} INPUT SCONOSCIUTO · NON È UN VIA LIBERA", + "many": "{count} DI INPUT SCONOSCIUTI · NON È UN VIA LIBERA", "other": "{count} INPUT SCONOSCIUTI · NON È UN VIA LIBERA" }, "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "INPUT DISPONIBILI AGGIORNATI · NON È UN VIA LIBERA", + "SQUAWK {code} · {status}": "SQUAWK {code} · {status}", + "ADS-B PRIORITY · {status}": "PRIORITÀ ADS-B · {status}", + "ADS-B EMERGENCY · {status}": "EMERGENZA ADS-B · {status}", "AIRCRAFT": "AEREO", "ACQUIRING SURFACE": "ACQUISIZIONE SUPERFICIE", "SURFACE FALLBACK": "FALLBACK SUPERFICIE", "STALE FEED": "FEED OBSOLETO", "LIVE TRACK": "TRACCIA LIVE", "COMMERCIAL": "COMMERCIALE", + "{aircraftClass} · {emergency} · {feedState}": "{aircraftClass} · {emergency} · {feedState}", "{aircraftClass} · {feedState} · COURSE ALIGNED": "{aircraftClass} · {feedState} · ROTTA ALLINEATA", "ARROW · ESTIMATED DIRECTION": "FRECCIA · DIREZIONE STIMATA", "ROUTE DATA UNAVAILABLE": "DATI ROTTA NON DISPONIBILI", @@ -453,6 +1711,7 @@ "OBSERVED / MAPPED PINGS": "PING OSSERVATI / MAPPATI", "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "EVENTI DA FONTI · NESSUNA NOTIZIA SINTETICA", "LATEST LOCATION-MATCHED REPORTING": "ULTIME NOTIZIE PER POSIZIONE", + "{source} · LOCATION QUERY · RECENT": "{source} · QUERY PER POSIZIONE · RECENTI", "LOCAL INFO": "INFO LOCALI", "PLACE / CONDITIONS / POSITION": "LUOGO / CONDIZIONI / POSIZIONE", "TIME UNKNOWN": "ORA SCONOSCIUTA", @@ -468,6 +1727,7 @@ "DISTANCE UNKNOWN": "DISTANZA SCONOSCIUTA", "{count} INPUTS UNKNOWN": { "one": "{count} INPUT SCONOSCIUTO", + "many": "{count} DI INPUT SCONOSCIUTI", "other": "{count} INPUT SCONOSCIUTI" }, "SOURCE STATUS UNAVAILABLE": "STATO FONTE NON DISPONIBILE", @@ -479,10 +1739,12 @@ "No selected data layers": "Nessun livello dati selezionato", "{count} data layers could not be cleared": { "one": "{count} livello dati non è stato disattivato", + "many": "{count} di livelli dati non sono stati disattivati", "other": "{count} livelli dati non sono stati disattivati" }, "Cleared {count} data layers": { "one": "Disattivato {count} livello dati", + "many": "Disattivati {count} di livelli dati", "other": "Disattivati {count} livelli dati" }, "Selected data layers could not be cleared": "Impossibile disattivare i livelli dati selezionati", @@ -497,24 +1759,89 @@ "{mode} could not start because another layer did not stop cleanly": "Impossibile avviare {mode}: un altro livello non si è fermato correttamente", "Space Missions": "Missioni spaziali", "Context": "Contesto", - "Live Flights": "Voli Live", - "Military Flights": "Voli Militari", + "Rendered globe frames per second · toggle with `": "Fotogrammi al secondo del globo · attiva/disattiva con `", + "imported map files": "file di mappa importati", + "Ground heights could not be refreshed. Try the file again when the map has loaded.": "Impossibile aggiornare le quote del terreno. Riprova con il file quando la mappa è caricata.", + "{count} map objects": { + "one": "{count} oggetto sulla mappa", + "many": "{count} di oggetti sulla mappa", + "other": "{count} oggetti sulla mappa" + }, + ", drawn with its own styles": ", disegnato con i propri stili", + "Hide {name}": "Nascondi {name}", + "Show {name}": "Mostra {name}", + "Fly to {name}": "Vola su {name}", + "Remove {name}": "Rimuovi {name}", + "At most {count} files at once — remove one first.": "Al massimo {count} file alla volta: rimuovine uno prima.", + "Reading {name}…": "Lettura di {name}…", + "That file could not be read.": "Impossibile leggere quel file.", + "Added {count} files.": { + "one": "Aggiunto {count} file.", + "many": "Aggiunti {count} di file.", + "other": "Aggiunti {count} file." + }, + "{count} files could not be added ({name}: {error})": { + "one": "Impossibile aggiungere {count} file ({name}: {error})", + "many": "Impossibile aggiungere {count} di file ({name}: {error})", + "other": "Impossibile aggiungere {count} file ({name}: {error})" + }, + "Some KML content was left out.": "Una parte del contenuto KML è stata esclusa.", + "Press on the ground, not the sky": "Premi sul terreno, non sul cielo", + "Drag to size the box": "Trascina per dimensionare il riquadro", + "light {source} to use your {name} key": "attiva {source} per usare la tua chiave {name}", + "light {source}": "attiva {source}", + ", or ": ", oppure ", + "{requirement}, or {offer}": "{requirement}, oppure {offer}", + "Live Flights": "Voli live", + "Military Flights": "Voli militari", "Earthquakes (24h)": "Terremoti (24h)", "Satellites": "Satelliti", - "Space Missions (30d)": "Missioni Spaziali (30g)", - "Street Traffic": "Traffico Stradale", + "Space Missions (30d)": "Missioni spaziali (30 g)", + "Street Traffic": "Traffico stradale", "CCTV": "CCTV", "Radio": "Radio", - "Bikeshare": "Bike Sharing", - "Live AIS Vessels": "Navi AIS Live", - "Mapped Installations": "Installazioni Mappate", - "Global Context": "Contesto Globale", + "Bikeshare": "Bike sharing", + "Live AIS Vessels": "Navi AIS live", + "Mapped Installations": "Installazioni mappate", + "Global Context": "Contesto globale", "Datacenters": "Data Center", "Dams": "Dighe", - "Submarine Cables": "Cavi Sottomarini", - "FIRMS Active Fires": "Incendi Attivi FIRMS", + "Submarine Cables": "Cavi sottomarini", + "FIRMS Active Fires": "Incendi attivi FIRMS", + "Local ADS-B": "ADS-B locale", + "Transit": "Trasporto pubblico", + "Recent Imagery": "Immagini recenti", + "Fire Perimeters": "Perimetri degli incendi", + "GNSS Integrity": "Integrità GNSS", + "S2 GhostMaps": "S2 GhostMaps", + "Rain radar": "Radar pioggia", + "Lightning density": "Densità di fulmini", + "Cyclone advisories": "Bollettini sui cicloni", + "ALPR Cameras": "Telecamere ALPR", + "Live Vessels": "Navi live", + "Bike Share": "Bike sharing", + "Cameras": "Telecamere", + "Street Level": "Vista stradale", + "Mapped ALPR Cameras": "Telecamere ALPR mappate", + "Data Centers": "Data center", + "Active Fires": "Incendi attivi", + "Military aircraft": "Aerei militari", + "Vessels": "Navi", + "CCTV + Street View fallback": "CCTV + Street View di riserva", + "OpenStreetMap + optional Google Maps Places": "OpenStreetMap + Google Maps Places opzionale", + "GFS / ECMWF IFS · FORECAST": "GFS / ECMWF IFS · PREVISIONE", + "NOAA nowCOAST · OBSERVED": "NOAA nowCOAST · OSSERVATO", + "NASA FIRMS · LIVE": "NASA FIRMS · LIVE", + "OSM routing": "Percorsi OSM", + "data source|Local": "Dati locali", "ENABLING": "ATTIVAZIONE", "DISABLING": "DISATTIVAZIONE", + "Movement": "Movimento", + "Infrastructure": "Infrastrutture", + "Events": "Eventi", + "Weather": "Meteo", + "Utilities": "Strumenti", + "Other layers": "Altri livelli", "{state} · {source}": "{state} · {source}", "UNCERTAIN · {source} · lifecycle state requires reconciliation": "INCERTO · {source} · lo stato del ciclo di vita richiede riconciliazione", "{state} · {source} · {detail} · retry {seconds}s": "{state} · {source} · {detail} · nuovo tentativo tra {seconds}s", @@ -528,21 +1855,75 @@ "{state} · {source} · {ago}": "{state} · {source} · {ago}", "{source} · {ago}": "{source} · {ago}", "UNCERTAIN": "INCERTO", + "status chip|UNAVAILABLE": "NON DISPONIBILE", + "Data source unavailable": "Fonte dati non disponibile", "{name}: {state}": "{name}: {state}", - "{count}s ago": "{count}s fa", + "{count}s ago": "{count} s fa", + "Local FM stopped: internet radio started": "FM locale fermata: radio internet avviata", + "IDLE": "INATTIVO", "CONNECTING": "CONNESSIONE", + "TUNING": "SINTONIA", + "STREAMING": "IN STREAMING", + "UNSUPPORTED": "NON SUPPORTATO", + "idle": "inattivo", + "running": "in esecuzione", + "suspended": "sospeso", + "closed": "chiuso", + "feed status|live": "in diretta", + "feed status|stale": "obsoleto", + "feed status|unreachable": "irraggiungibile", + "feed status|invalid": "non valido", + "waiting for IQ": "in attesa di IQ", + "{count} messages": { + "one": "{count} messaggio", + "many": "{count} di messaggi", + "other": "{count} messaggi" + }, + "DSP {count} blocks": { + "one": "DSP {count} blocco", + "many": "DSP {count} di blocchi", + "other": "DSP {count} blocchi" + }, + "DSP waiting": "DSP in attesa", + "{level} dBFS audio": "audio {level} dBFS", + "audio signal --": "segnale audio --", + "audio {state}": "audio {state}", + "{count} HEARD": { + "one": "{count} RICEVUTO", + "many": "{count} RICEVUTI", + "other": "{count} RICEVUTI" + }, + "DISCONNECT": "DISCONNETTI", + "CONNECT": "CONNETTI", + "LOCATING…": "LOCALIZZAZIONE…", + "LOCATED": "LOCALIZZATO", + "LOCATE": "LOCALIZZA", + " · read while Local ADS-B is on": " · letto mentre ADS-B locale è attivo", + "Decoder feeds: {feeds}": "Feed dei decoder: {feeds}", + "Language: {language}": "Lingua: {language}", + "Change the interface language": "Cambia la lingua dell'interfaccia", + "Interface language": "Lingua dell'interfaccia", + "Search languages": "Cerca lingue", + "No matching languages": "Nessuna lingua corrispondente", "📍 Location: --": "📍 Posizione: --", "Landmark: --": "Punto di interesse: --", "Searched location": "Luogo cercato", "ORBIT": "ORBITA", "Location not found": "Luogo non trovato", + "Check the spelling and press Enter to search again.": "Controlla l'ortografia e premi Enter per cercare di nuovo.", "Search failed": "Ricerca non riuscita", + "Press Enter to try again.": "Premi Enter per riprovare.", + "Detailed outline unavailable": "Contorno dettagliato non disponibile", "Fly to a POI first": "Vola prima a un punto di interesse", "Reset to full globe view": "Ripristina la vista del globo intero", "Reset cockpit to full globe view": "Ripristina il cockpit alla vista del globo intero", "Resetting to full globe view": "Ripristino della vista del globo intero", "Resetting cockpit to full globe view": "Ripristino del cockpit alla vista del globo intero", "MAP": "MAPPA", + "Layers": "Livelli", + "Search": "Cerca", + "More": "Altro", + "Panels": "Pannelli", "panel": "pannello", "Expand {name}": "Espandi {name}", "Collapse {name}": "Comprimi {name}", @@ -551,17 +1932,31 @@ "Expand Radio section": "Espandi la sezione Radio", "Collapse Radio section": "Comprimi la sezione Radio", "Panel layout updated — positions reset to new defaults": "Layout dei pannelli aggiornato — posizioni ripristinate ai nuovi valori predefiniti", + "Austin": "Austin", + "San Francisco": "San Francisco", + "New York": "New York", + "Tokyo": "Tokyo", + "London": "Londra", + "Paris": "Parigi", + "Dubai": "Dubai", + "Washington DC": "Washington DC", + "Tallinn": "Tallinn", + "Los Angeles": "Los Angeles", "Collapse Cockpit display options": "Comprimi le opzioni display del cockpit", "Expand Cockpit display options": "Espandi le opzioni display del cockpit", "Collapse Cockpit Radio controls": "Comprimi i controlli Radio del cockpit", "Expand Cockpit Radio controls": "Espandi i controlli Radio del cockpit", + "CH {index} / {total}": "CAN {index} / {total}", "NO STATIONS": "NESSUNA STAZIONE", "NO STATION AVAILABLE": "NESSUNA STAZIONE DISPONIBILE", "{name}, station {index} of {total}": "{name}, stazione {index} di {total}", "No station available": "Nessuna stazione disponibile", "OFF AIR": "FUORI ONDA", "STATION UNAVAILABLE": "STAZIONE NON DISPONIBILE", + "Station unavailable after directory refresh": "Stazione non disponibile dopo l'aggiornamento dell'elenco", "Radio could not {action} cleanly": "La Radio non ha potuto {action} correttamente", + "Go to expanded Radio section": "Vai alla sezione Radio espansa", + "Expand Radio section in Context": "Espandi la sezione Radio in Contesto", "Close compact Radio controls": "Chiudi i controlli Radio compatti", "Open compact Radio controls": "Apri i controlli Radio compatti", "SYNC": "SYNC", @@ -571,14 +1966,17 @@ "Reconcile Radio — lifecycle uncertain": "Riconcilia la Radio — ciclo di vita incerto", "Disable Radio": "Disattiva la Radio", "Enable Radio": "Attiva la Radio", + "{category} ({count})": "{category} ({count})", "DIRECTORY BAND": "BANDA ELENCO", "{category} BAND": "BANDA {category}", "NO STATION SELECTED": "NESSUNA STAZIONE SELEZIONATA", "Directory metadata only": "Solo metadati dell'elenco", "Loading station directory…": "Caricamento dell'elenco stazioni…", - "Choose a globe marker or use next.": "Scegli un marcatore sul globo o usa SUCC.", + "Choose a globe marker or use next.": "Scegli un marcatore sul globo o passa alla successiva.", "TAGS · {tags}": "TAG · {tags}", "Play": "Riproduci", + "PAUSE": "PAUSA", + "RESUME": "RIPRENDI", "PLAY": "PLAY", "selected": "selezionata", "nearest": "più vicina", @@ -608,63 +2006,692 @@ "Radio is enabling…": "Attivazione della Radio…", "Radio is disabling…": "Disattivazione della Radio…", "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "Il ciclo di vita della Radio è incerto — usa Attiva o Disattiva per riconciliare", + "Clear reading": "Cancella la lettura", + "Earlier observation": "Osservazione precedente", + "Observed history": "Storico osservato", + "Later observation": "Osservazione successiva", + "Latest": "Più recente", + "Newest frame per product": "Fotogramma più recente per prodotto", + "Replay observed history": "Rivedi lo storico osservato", + "Imagery on Esri · Google 3D returns when cleared": "Immagini su Esri · Google 3D torna dopo la cancellazione", + "Point the camera at the ground to use the view": "Punta la camera verso il suolo per usare la vista", + "That point cannot anchor a box": "Quel punto non può ancorare un riquadro", + "Imagery stops at ±{limit}° latitude": "Le immagini si fermano a ±{limit}° di latitudine", + "{owner} is using the pointer — close it first": "{owner} sta usando il puntatore: chiudilo prima", + "Box is {size} wide · limit {limit}": "Il riquadro è largo {size} · limite {limit}", + "View is {size} wide · limit {limit}": "La vista è larga {size} · limite {limit}", + "VS BASEMAP": "VS MAPPA DI BASE", + "A / B": "A / B", + "Newest low-cloud day for this box · scene cloud, not box cloud": "Giorno più recente con poche nuvole per questo riquadro · nuvole della scena, non del riquadro", + "Newest day covering this box · cloudier than 20%": "Giorno più recente che copre questo riquadro · nuvole oltre il 20%", + "Newest day with imagery for this box · partial coverage": "Giorno più recente con immagini per questo riquadro · copertura parziale", + "Newest daily overview for this box": "Panoramica giornaliera più recente per questo riquadro", + "newest clear day": "giorno sereno più recente", + "newest day (cloudy)": "giorno più recente (nuvoloso)", + "newest day (partial coverage)": "giorno più recente (copertura parziale)", + "newest overview": "panoramica più recente", + "No imagery": "Nessuna immagine", + "Loading": "Caricamento", + "coverage|full": "completa", + "coverage|partial": "parziale", + "unknown": "sconosciuta", + "no imagery": "nessuna immagine", + "{percent}% cloud": "{percent}% di nubi", + "{min}–{max}% cloud": "{min}–{max}% di nubi", + "NO BOX": "NESSUN RIQUADRO", + "SEARCHING": "RICERCA", + "{count} DAYS": { + "one": "{count} GIORNO", + "many": "{count} DI GIORNI", + "other": "{count} GIORNI" + }, + "Zoom in or draw a smaller box": "Ingrandisci o disegna un riquadro più piccolo", + "Select a box or use the view": "Seleziona un riquadro o usa la vista", + "Searching the last 30 days": "Ricerca negli ultimi 30 giorni", + "No days to show for this box": "Nessun giorno da mostrare per questo riquadro", + "Drag the divider · SWAP trades sides": "Trascina il divisore · SCAMBIA inverte i lati", + "← → preview · A or B pins the focused day": "← → anteprima · A o B fissa il giorno selezionato", + "← → preview the other side · A or B pins it": "← → anteprima dell'altro lato · A o B lo fissa", + "S on another day replaces it · × unpins": "S su un altro giorno lo sostituisce · × lo sblocca", + "← → preview · S shows the focused day": "← → anteprima · S mostra il giorno selezionato", + "ZOOM IN": "INGRANDISCI", + "Fly in until the view fits the 1,000 km limit": "Avvicinati finché la vista rientra nel limite di 1.000 km", + "Imagery days, newest first · arrows move, S or A and B pin": "Giorni con immagini, dal più recente · le frecce spostano, S o A e B fissano", + "On the map": "Sulla mappa", + "Mode": "Modalità", + "Imagery opacity": "Opacità delle immagini", + "SWAP": "SCAMBIA", + "Trade the two sides of the divider": "Inverti i due lati del divisore", + "SELECT BOX": "SELEZIONA RIQUADRO", + "Drag a box on the map (Esc cancels)": "Trascina un riquadro sulla mappa (Esc annulla)", + "USE VIEW": "USA LA VISTA", + "Use the current view as the box": "Usa la vista attuale come riquadro", + "Forget the box and its images": "Dimentica il riquadro e le sue immagini", + "START HERE": "INIZIA DA QUI", + "Checking": "Verifica", + "PREVIEW": "ANTEPRIMA", + "Newest day with imagery for this box": "Giorno più recente con immagini per questo riquadro", + "SHOW": "MOSTRA", + "Pin {day} as {slot}": "Fissa {day} come {slot}", + "Show {day}": "Mostra {day}", + "pinned {slot}": "fissato {slot}", + "shown": "mostrato", + "preview": "anteprima", + "start here": "inizia da qui", + "No box": "Nessun riquadro", + "Searching": "Ricerca", + "Every day is empty here": "Ogni giorno è vuoto qui", + "Sources off": "Fonti disattivate", + "VS": "VS", + "Not set": "Non impostato", + "Basemap": "Mappa di base", + "Source off": "Fonte disattivata", + "Unpin {slot}": "Sblocca {slot}", + "Unpin the image": "Sblocca l'immagine", + "EXPORT {slot}": "ESPORTA {slot}", + "EXPORT": "ESPORTA", + "Download {slot} as a PNG": "Scarica {slot} come PNG", + "Download the image as a PNG": "Scarica l'immagine come PNG", + "Box {width} × {height} km": "Riquadro {width} × {height} km", + "Acquired {time}": "Acquisita {time}", + "Coverage {coverage}": "Copertura {coverage}", + "START HERE · {reason}": "INIZIA DA QUI · {reason}", + "Daily overview shows little detail in a box this small": "La panoramica giornaliera mostra pochi dettagli in un riquadro così piccolo", + "Imagery: NASA GIBS and Worldview · HLS (Sentinel-2, Landsat 8/9) and VIIRS": "Immagini: NASA GIBS e Worldview · HLS (Sentinel-2, Landsat 8/9) e VIIRS", + "Details": "Dettagli", + "Times, coverage, sources": "Orari, copertura, fonti", + "HIDE EMPTY DAYS": "NASCONDI GIORNI VUOTI", + "SHOW EMPTY DAYS · {count}": "MOSTRA GIORNI VUOTI · {count}", + "Days the probe found empty in this box": "Giorni che la verifica ha trovato vuoti in questo riquadro", + "image": "immagine", + "BASEMAP": "MAPPA DI BASE", + "The basemap": "La mappa di base", + "basemap": "mappa di base", + "Recent imagery against the basemap divider": "Divisore tra immagini recenti e mappa di base", + "Recent imagery A and B divider": "Divisore tra immagini recenti A e B", + "{before} {left} percent, {after} {right} percent": "{before} {left} percento, {after} {right} percento", + "Export failed · {error}": "Esportazione non riuscita · {error}", "Scene action failed": "Azione sulla scena non riuscita", + "New scene name": "Nome della nuova scena", + "Delete scene \"{scene}\" and all shots?": "Eliminare la scena \"{scene}\" e tutti i suoi scatti?", "Delete shot \"{shot}\"?": "Eliminare lo scatto \"{shot}\"?", + "Stopped (Esc)": "Fermato (Esc)", "SPARSE": "RADA", "BALANCED": "BILANCIATA", + "No shots yet. Use CAPTURE SHOT to save current look.": "Ancora nessuno scatto. Usa CATTURA SCATTO per salvare l'aspetto attuale.", + "Double-click to rename": "Doppio clic per rinominare", + "Shot name": "Nome dello scatto", + "LOAD": "CARICA", "DEL": "ELIM", + "{duration}s + {hold}s": "{duration}s + {hold}s", + "Choose files": "Scegli i file", + "{count} files selected": { + "one": "{count} file selezionato", + "many": "{count} di file selezionati", + "other": "{count} file selezionati" + }, + "No file chosen": "Nessun file scelto", + "Cancel": "Annulla", + "EDIT DETAILS": "MODIFICA DETTAGLI", + "SHARE SCENE": "CONDIVIDI SCENA", + "Shared flight follow expired": "Il tracciamento condiviso del volo è scaduto", + "Shared military flight follow expired": "Il tracciamento condiviso del volo militare è scaduto", + "Shared satellite follow expired": "Il tracciamento condiviso del satellite è scaduto", + "Shared flight could not be restored — feed unavailable": "Impossibile ripristinare il volo condiviso: feed non disponibile", + "Shared military flight could not be restored — feed unavailable": "Impossibile ripristinare il volo militare condiviso: feed non disponibile", + "Shared satellite could not be restored — feed unavailable": "Impossibile ripristinare il satellite condiviso: feed non disponibile", + "Shared flight is unavailable": "Il volo condiviso non è disponibile", + "Shared military flight is unavailable": "Il volo militare condiviso non è disponibile", + "Shared satellite is unavailable": "Il satellite condiviso non è disponibile", "entity": "elemento", "Shared {subject} follow expired": "Il tracciamento condiviso di {subject} è scaduto", "Shared {subject} could not be restored — feed unavailable": "Impossibile ripristinare la condivisione di {subject} — feed non disponibile", "Shared {subject} is unavailable": "La condivisione di {subject} non è disponibile", + "{id} isn't reporting now — showing where it was last seen": "{id} non sta trasmettendo ora: viene mostrata l'ultima posizione nota", + "{id} isn't reporting now — showing where it was at {time}": "{id} non sta trasmettendo ora: viene mostrata la posizione alle {time}", + "This share link can't be opened": "Impossibile aprire questo link di condivisione", + "Shared vessel is unavailable": "La nave condivisa non è disponibile", "ACQUIRING": "ACQUISIZIONE", "SHARED {subject}": "CONDIVISO: {subject}", + "subject": "soggetto", "LOADING LIVE DATA": "CARICAMENTO DATI LIVE", "LOAD COMPLETE": "CARICAMENTO COMPLETATO", "LOAD CANCELLED": "CARICAMENTO ANNULLATO", - "LOAD FAILED": "CARICAMENTO FALLITO", + "LOAD FAILED": "CARICAMENTO NON RIUSCITO", "LIVE DATA OFF": "DATI LIVE DISATTIVATI", "MAPPED SITES LOADED": "SITI MAPPATI CARICATI", "RETRYING MAPPED SITES": "NUOVO TENTATIVO SITI MAPPATI", "FETCHING MAPPED SITES": "RICERCA SITI MAPPATI", + "RETRYING ALPR CAMERAS": "NUOVO TENTATIVO TELECAMERE ALPR", + "FETCHING ALPR CAMERAS": "RICERCA TELECAMERE ALPR", + "OVERPASS TEMPORARILY UNAVAILABLE": "OVERPASS TEMPORANEAMENTE NON DISPONIBILE", + "OVERPASS RATE-LIMITED": "OVERPASS HA LIMITATO LE RICHIESTE", + "OVERPASS TIMED OUT": "OVERPASS IN TIMEOUT", + "OVERPASS COULD NOT COMPLETE THE QUERY": "OVERPASS NON HA POTUTO COMPLETARE LA QUERY", + "MAP TILES TEMPORARILY UNAVAILABLE": "TILE DELLA MAPPA TEMPORANEAMENTE NON DISPONIBILI", + "MAPPED NAMES TEMPORARILY UNAVAILABLE": "NOMI MAPPATI TEMPORANEAMENTE NON DISPONIBILI", "TURNING OFF LIVE DATA": "DISATTIVAZIONE DATI LIVE", "REFRESHING LIVE DATA": "AGGIORNAMENTO DATI LIVE", "syncing road network": "sincronizzazione rete stradale", "retry pending": "nuovo tentativo in sospeso", "retrying in {seconds}s": "nuovo tentativo tra {seconds}s", + "ALPR cameras": "telecamere ALPR", + "OpenSky OAuth client missing/invalid": "Client OAuth di OpenSky mancante/non valido", + "OpenSky OAuth rejected credentials": "OAuth di OpenSky ha rifiutato le credenziali", + "OpenSky username/password rejected": "Nome utente/password di OpenSky rifiutati", + "OpenSky auth missing": "Autenticazione OpenSky mancante", + "OpenSky auth required": "Autenticazione OpenSky richiesta", + "OpenSky auth invalid": "Autenticazione OpenSky non valida", + "OpenSky auth failed": "Autenticazione OpenSky non riuscita", + "KartaView answered HTTP {status}": "KartaView ha risposto HTTP {status}", + "Panoramax answered HTTP {status}": "Panoramax ha risposto HTTP {status}", + "KartaView refused the request (code {code})": "KartaView ha rifiutato la richiesta (codice {code})", + "Vector tiles unavailable (HTTP {status})": "Tile vettoriali non disponibili (HTTP {status})", + "GNSS feed unavailable (HTTP {status})": "Feed GNSS non disponibile (HTTP {status})", + "{count} CelesTrak groups unavailable": { + "one": "{count} gruppo CelesTrak non disponibile", + "many": "{count} di gruppi CelesTrak non disponibili", + "other": "{count} gruppi CelesTrak non disponibili" + }, + "{feed} feed unavailable": "feed {feed} non disponibile", + "Source snapshot {minutes} min old": "Snapshot della fonte vecchio di {minutes} min", + "{source} rate limited (anonymous)": "{source}: limite di richieste (anonimo)", + "{source} rate limited": "{source}: limite di richieste", + "{source} network error": "{source}: errore di rete", + "Malformed {source} aircraft rows": "Righe aereo di {source} non valide", + "Malformed {source} response": "Risposta di {source} non valida", + "entry {n}": "voce {n}", + "feeds {names} stale": { + "one": "feed {names} obsoleto", + "many": "feed {names} obsoleti", + "other": "feed {names} obsoleti" + }, + "feeds {names} unreachable": { + "one": "feed {names} irraggiungibile", + "many": "feed {names} irraggiungibili", + "other": "feed {names} irraggiungibili" + }, + "feeds {names} invalid": { + "one": "feed {names} non valido", + "many": "feed {names} non validi", + "other": "feed {names} non validi" + }, + "Loading {feeds}": "Caricamento di {feeds}", + "{count} heard": { + "one": "{count} ricevuto", + "many": "{count} ricevuti", + "other": "{count} ricevuti" + }, + "USB {rate} msg/s": "USB {rate} msg/s", + "{rate} msg/s": "{rate} msg/s", + "{count} feeds live": { + "one": "{count} feed live", + "many": "{count} di feed live", + "other": "{count} feed live" + }, + "{feed} {count} ({seconds}s old)": "{feed} {count} ({seconds}s fa)", + "Street Level toggle failed": "Attivazione di Vista stradale non riuscita", + "Street Level could not start": "Impossibile avviare Vista stradale", + "SHRINK": "RIDUCI", + "EXPAND": "ESPANDI", + "Shrink": "Riduci", + "Expand": "Espandi", + "ANY DATE": "QUALSIASI DATA", + "LAST 10 YEARS": "ULTIMI 10 ANNI", + "LAST 5 YEARS": "ULTIMI 5 ANNI", + "LAST 3 YEARS": "ULTIMI 3 ANNI", + "LAST 2 YEARS": "ULTIMI 2 ANNI", + "LAST YEAR": "ULTIMO ANNO", + "LAST 6 MONTHS": "ULTIMI 6 MESI", + "LAST 3 MONTHS": "ULTIMI 3 MESI", + "LAST MONTH": "ULTIMO MESE", + "LAST {count} DAYS": { + "one": "ULTIMO {count} GIORNO", + "many": "ULTIMI {count} DI GIORNI", + "other": "ULTIMI {count} GIORNI" + }, + "{window} · SINCE {date}": "{window} · DAL {date}", + "Turn Street Level off": "Disattiva Vista stradale", + "Turn Street Level on": "Attiva Vista stradale", + "{name} imagery on": "Immagini {name} attive", + "{name} imagery off": "Immagini {name} disattivate", + "Image by {creator}": "Immagine di {creator}", + " or ": " o ", + "OPEN {labels}": "APRI {labels}", + "Open {names} at the centre of the view": "Apri {names} al centro della vista", + "Zoom in to a street to open {names} here": "Ingrandisci su una strada per aprire {names} qui", + "Switch Street Level on to draw its coverage.": "Attiva Vista stradale per disegnarne la copertura.", + "Every provider is switched off: light a chip to draw its coverage.": "Tutti i provider sono disattivati: accendi un chip per disegnarne la copertura.", + "Loading this sequence…": "Caricamento di questa sequenza…", + "{n} images in this sequence · Esc clears": { + "one": "{n} immagine in questa sequenza · Esc cancella", + "many": "{n} di immagini in questa sequenza · Esc cancella", + "other": "{n} immagini in questa sequenza · Esc cancella" + }, + "No sequences in view match the filter": "Nessuna sequenza nella vista corrisponde al filtro", + "No coverage in view": "Nessuna copertura nella vista", + "{n} streets in view · click a line for its nearest photo": { + "one": "{n} strada nella vista · clic su una linea per la foto più vicina", + "many": "{n} di strade nella vista · clic su una linea per la foto più vicina", + "other": "{n} strade nella vista · clic su una linea per la foto più vicina" + }, + "{n} sequences in view · click a line for its nearest photo": { + "one": "{n} sequenza nella vista · clic su una linea per la foto più vicina", + "many": "{n} di sequenze nella vista · clic su una linea per la foto più vicina", + "other": "{n} sequenze nella vista · clic su una linea per la foto più vicina" + }, + "{n} sequences in view · click a line for its photos": { + "one": "{n} sequenza nella vista · clic su una linea per le sue foto", + "many": "{n} di sequenze nella vista · clic su una linea per le sue foto", + "other": "{n} sequenze nella vista · clic su una linea per le sue foto" + }, + "km/h": "km/h", + "m/s": "m/s", + "mph": "mph", + "hPa": "hPa", + "kt": "kn", + "kts": "kn", + "ft": "ft", + "km": "km", + "m": "m", + "h": "h", + "min": "min", + "s": "s", + "dB": "dB", "Celestial ring — reveal the full globe": "Anello celeste — mostra il globo intero", "Celestial ring — available in Normal style": "Anello celeste — disponibile nello stile Normale", "Detection overlay: {mode}": "Overlay di rilevamento: {mode}", "Detection overlay: off": "Overlay di rilevamento: disattivato", "DETECT": "RILEV.", + "{time} · {minutes} min ago": "{time} · {minutes} min fa", + "Active weather": "Meteo attivo", + "LATEST · newest per product": "ULTIMO · il più recente per prodotto", + "Forecast · valid {valid} · issued {issued}": "Previsione · valida {valid} · emessa {issued}", + "{detail} · Does not follow history": "{detail} · Non segue lo storico", + "Forecast · valid {valid}": "Previsione · valida {valid}", + "voice|OFF": "OFF", + "voice|CONNECTING": "CONNESSIONE", "voice|LISTENING": "IN ASCOLTO", "voice|EXECUTING": "ESECUZIONE", + "voice|ERROR": "ERRORE", + "Voice provider": "Provider vocale", + "Changing provider reconnects voice if it is on.": "Cambiare provider riconnette la voce se è attiva.", + "Voice Settings": "Impostazioni voce", "AI AGENT": "AGENTE IA", "Voice model tier — applies next session": "Livello del modello vocale: si applica alla prossima sessione", + "STD": "STD", "Estimated session cost": "Costo stimato della sessione", - "Voice control — activate to toggle voice; hold Space to speak": "Controllo vocale: attiva per abilitare la voce; tieni premuto Spazio per parlare", + "Voice control — activate to toggle voice; hold Space to speak": "Controllo vocale: attiva per abilitare o disabilitare la voce; tieni premuto Space per parlare", + "ON/OFF": "ON/OFF", "VOICE STANDBY": "VOCE IN ATTESA", "VOICE CONTROL": "CONTROLLO VOCALE", - "Hold Space to speak · tap Space to activate focused controls": "Tieni premuto Spazio per parlare · tocca Spazio per attivare i controlli in focus", + "Hold Space to speak · tap Space to activate focused controls": "Tieni premuto Space per parlare · premi Space per attivare il controllo selezionato", + "VOICE": "VOCE", + "Preview": "Anteprima", + "Settings": "Impostazioni", + "Close voice panel": "Chiudi il pannello voce", + "Voice replies appear here.": "Le risposte vocali appaiono qui.", + "Voice assistant": "Assistente vocale", + "Dismiss voice card": "Chiudi la scheda voce", + "YOU": "TU", + "THIS": "QUESTO", + "Plan": "Piano", + "Referenced items": "Elementi citati", + "NOTES & SOURCES": "NOTE E FONTI", + "Show Voice Preview": "Mostra l'anteprima voce", + "Voice inactivity timeout": "Timeout di inattività della voce", + "Minutes": "Minuti", + "Custom": "Personalizzato", + "These preferences stay in this browser.": "Queste preferenze restano in questo browser.", "VOICE SYSTEM ERROR": "ERRORE SISTEMA VOCALE", "DISMISS": "CHIUDI", "Check microphone permission and network access, then try again.": "Controlla il permesso del microfono e l'accesso alla rete, poi riprova.", - "Release Space to send": "Rilascia Spazio per inviare", - "Hold Space to talk": "Tieni premuto Spazio per parlare", + "Gemini returned an oversized audio chunk": "Gemini ha restituito un blocco audio troppo grande", + "Gemini returned an unsupported audio format": "Gemini ha restituito un formato audio non supportato", + "Gemini returned an invalid audio sample rate": "Gemini ha restituito una frequenza di campionamento audio non valida", + "Gemini returned incomplete PCM audio": "Gemini ha restituito audio PCM incompleto", + "This browser does not support Gemini microphone audio": "Questo browser non supporta l'audio del microfono per Gemini", + "Microphone audio processing failed": "Elaborazione dell'audio del microfono non riuscita", + "Gemini audio playback fell behind. Reconnect to continue.": "La riproduzione audio di Gemini è rimasta indietro. Riconnetti per continuare.", + "Gemini token response did not include an ephemeral credential": "La risposta del token Gemini non includeva una credenziale temporanea", + "Invalid Gemini connection endpoint": "Endpoint di connessione Gemini non valido", + "Gemini voice could not connect. Try again.": "Impossibile connettere la voce Gemini. Riprova.", + "Gemini voice requires a same-origin app request": "La voce Gemini richiede una richiesta dall'app con la stessa origine", + "Add a Gemini API key in Provider Settings": "Aggiungi una chiave API Gemini in Impostazioni provider", + "The Gemini Live model configuration is invalid": "La configurazione del modello Gemini Live non è valida", + "Gemini voice is starting too often. Try again shortly.": "La voce Gemini si sta avviando troppo spesso. Riprova tra poco.", + "Gemini quota is unavailable. Try again later.": "La quota Gemini non è disponibile. Riprova più tardi.", + "Gemini access was refused. Check the API key and model access.": "L'accesso a Gemini è stato rifiutato. Controlla la chiave API e l'accesso al modello.", + "Gemini Live is unavailable for the configured model.": "Gemini Live non è disponibile per il modello configurato.", + "Token request is too large": "La richiesta del token è troppo grande", + "Use an empty JSON token request": "Usa una richiesta di token JSON vuota", + "Release Space to send": "Rilascia Space per inviare", + "Hold Space to talk": "Tieni premuto Space per parlare", + "Voice command context is too large": "Il contesto del comando vocale è troppo grande", + "Gemini reliable transport exceeded its queue limit. Start voice again.": "Il trasporto affidabile di Gemini ha superato il limite della coda. Riavvia la voce.", + "Gemini reliable transport did not drain. Start voice again.": "Il trasporto affidabile di Gemini non si è svuotato. Riavvia la voce.", + "Gemini token request failed (HTTP {status})": "Richiesta del token Gemini non riuscita (HTTP {status})", + "Gemini token response did not include a valid model": "La risposta del token Gemini non includeva un modello valido", + "Gemini token response did not include session settings": "La risposta del token Gemini non includeva le impostazioni della sessione", + "Gemini session settings do not match the input mode": "Le impostazioni della sessione Gemini non corrispondono alla modalità di input", "Requesting microphone": "Richiesta microfono", + "Gemini could not submit this input. Start voice again.": "Gemini non ha potuto inviare questo input. Riavvia la voce.", + "Connecting to Gemini": "Connessione a Gemini", "Ask or command": "Chiedi o comanda", + "Gemini returned an oversized message": "Gemini ha restituito un messaggio troppo grande", + "Gemini Live connection failed. Check network access, then start voice again.": "Connessione a Gemini Live non riuscita. Controlla l'accesso alla rete, poi riavvia la voce.", + "Gemini Live connection ended. Start voice again for a new conversation.": "Connessione a Gemini Live terminata. Riavvia la voce per una nuova conversazione.", + "Gemini Live could not start. Start voice again to request a fresh session.": "Gemini Live non si è avviato. Riavvia la voce per richiedere una nuova sessione.", + "Start voice again for a fresh token and a new conversation.": "Riavvia la voce per un nuovo token e una nuova conversazione.", + "Start voice again to request a fresh session credential.": "Riavvia la voce per richiedere una nuova credenziale di sessione.", + "Microphone permission was denied. Allow microphone access and try again.": "Il permesso del microfono è stato negato. Consenti l'accesso al microfono e riprova.", + "Gemini connection timed out. Try again.": "La connessione a Gemini è andata in timeout. Riprova.", + "Gemini voice could not start": "Impossibile avviare la voce Gemini", + "Gemini did not finish the interrupted reply. Start voice again.": "Gemini non ha completato la risposta interrotta. Riavvia la voce.", + "Gemini session expiring; finishing the current reply": "Sessione Gemini in scadenza; completamento della risposta in corso", + "Gemini rejected the voice session. Start voice again to request a fresh session.": "Gemini ha rifiutato la sessione vocale. Riavvia la voce per richiedere una nuova sessione.", + "Start voice again for a fresh session credential. If it repeats, check Gemini model and API access.": "Riavvia la voce per una nuova credenziale di sessione. Se si ripete, controlla il modello Gemini e l'accesso API.", + "Gemini action history is full. Start voice again for a fresh session.": "La cronologia delle azioni di Gemini è piena. Riavvia la voce per una nuova sessione.", + "Gemini requested too many simultaneous actions": "Gemini ha richiesto troppe azioni simultanee", "Running command": "Comando in esecuzione", + "Voice text command is too long": "Il comando vocale testuale è troppo lungo", + "Gemini voice is not connected": "La voce Gemini non è connessa", + "Gemini interrupted input exceeded its buffer or wait limit. Start voice again.": "L'input interrotto di Gemini ha superato il limite di buffer o di attesa. Riavvia la voce.", + "Gemini Live connection is expiring. Start voice again for a new conversation.": "La connessione a Gemini Live sta scadendo. Riavvia la voce per una nuova conversazione.", "Voice off": "Voce disattivata", + "Gemini voice sessions have a time limit. When a session expires, start voice again for a new conversation.": "Le sessioni vocali Gemini hanno un limite di tempo. Quando una sessione scade, riavvia la voce per una nuova conversazione.", + "Stopped by voice": "Fermato dalla voce", + "Automatic stop is unavailable for this voice connection.": "L'arresto automatico non è disponibile per questa connessione vocale.", + "Preview is off.": "L'anteprima è disattivata.", + "Your choice applies now, but could not be saved.": "La tua scelta vale da subito, ma non è stato possibile salvarla.", "WebRTC microphone support unavailable": "Supporto microfono WebRTC non disponibile", "VOICE UNAVAILABLE": "VOCE NON DISPONIBILE", "VOICE ACTIVE": "VOCE ATTIVA", "Voice session could not be started.": "Impossibile avviare la sessione vocale.", + "MINI": "MINI", "Next session: {pendingId} — this session stays on {modelId}": "Prossima sessione: {pendingId}. Questa sessione resta su {modelId}", "Voice model: {pendingId} — click to switch to {target}; applies next session": "Modello vocale: {pendingId}. Clic per passare a {target}; si applica alla prossima sessione", + "standard": "standard", + "mini": "mini", + "COST UNKNOWN": "COSTO SCONOSCIUTO", + "ChatGPT OAuth session: {responses} response(s), {input} input and {output} output tokens, {captions} caption transcription(s) reported.": "Sessione ChatGPT OAuth: {responses} risposta/e, {input} token di input e {output} di output, {captions} trascrizione/i di sottotitoli riportate.", + "USD cost and the API spend cap are unavailable for this auth mode.": "Il costo in USD e il limite di spesa API non sono disponibili per questa modalità di autenticazione.", + "Usage is incomplete because a response was still in flight when the session ended.": "L'utilizzo è incompleto perché una risposta era ancora in corso quando la sessione è terminata.", "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Costo stimato della sessione su {modelId}: {responses} risposta/e. Avviso a {warn}, la sessione termina a {cap}.", + "Estimate is incomplete — a response was still in flight when the session ended, so its usage was never reported.": "Stima incompleta: una risposta era ancora in corso quando la sessione è terminata, quindi il suo utilizzo non è mai stato riportato.", + "STANDARD": "STANDARD", "{tier} applies next session": "{tier} si applica alla prossima sessione", "Session ended — cost cap {cost}": "Sessione terminata: limite di costo {cost}", + "MIC": "MIC", "Radio did not start": "La radio non si è avviata", + "{n} aircraft": { + "one": "{n} aereo", + "many": "{n} di aerei", + "other": "{n} aerei" + }, + "{n} military aircraft": { + "one": "{n} aereo militare", + "many": "{n} di aerei militari", + "other": "{n} aerei militari" + }, + "{n} ships": { + "one": "{n} nave", + "many": "{n} di navi", + "other": "{n} navi" + }, + "{n} satellites": { + "one": "{n} satellite", + "many": "{n} di satelliti", + "other": "{n} satelliti" + }, + "{n} launches": { + "one": "{n} lancio", + "many": "{n} di lanci", + "other": "{n} lanci" + }, + "{n} earthquakes": { + "one": "{n} terremoto", + "many": "{n} di terremoti", + "other": "{n} terremoti" + }, + "{n} fires": { + "one": "{n} incendio", + "many": "{n} di incendi", + "other": "{n} incendi" + }, + "{n} fire perimeters": { + "one": "{n} perimetro di incendio", + "many": "{n} di perimetri di incendi", + "other": "{n} perimetri di incendi" + }, + "{n} cyclones": { + "one": "{n} ciclone", + "many": "{n} di cicloni", + "other": "{n} cicloni" + }, + "{n} buses": { + "one": "{n} autobus", + "many": "{n} di autobus", + "other": "{n} autobus" + }, + "{n} bike share": { + "one": "{n} stazione bike sharing", + "many": "{n} di stazioni bike sharing", + "other": "{n} stazioni bike sharing" + }, + "{n} flock cameras": { + "one": "{n} telecamera Flock", + "many": "{n} di telecamere Flock", + "other": "{n} telecamere Flock" + }, + "{n} military bases": { + "one": "{n} base militare", + "many": "{n} di basi militari", + "other": "{n} basi militari" + }, + "{n} datacenters": { + "one": "{n} data center", + "many": "{n} di data center", + "other": "{n} data center" + }, + "{n} dams": { + "one": "{n} diga", + "many": "{n} di dighe", + "other": "{n} dighe" + }, + "{n} air quality": { + "one": "{n} stazione qualità dell'aria", + "many": "{n} di stazioni qualità dell'aria", + "other": "{n} stazioni qualità dell'aria" + }, + "{n} results": { + "one": "{n} risultato", + "many": "{n} di risultati", + "other": "{n} risultati" + }, + "anywhere in the loaded data": "ovunque nei dati caricati", + "in view": "nella vista", + "within {radius} of the view centre": "entro {radius} dal centro della vista", + "within {radius} of {place} (Contacts window)": "entro {radius} da {place} (finestra Contatti)", + "within {radius} of {place}": "entro {radius} da {place}", + "within {radius}": "entro {radius}", + "over {region}": "sopra {region}", + "At least {items}": "Almeno {items}", + "{items} {scope}": "{items} {scope}", + "last 24 h": "ultime 24 h", + "past 30 d and upcoming": "ultimi 30 g e prossimi", + "the flights layer loads by viewport": "il livello voli si carica per vista", + "distance is ground distance, not overhead": "la distanza è al suolo, non in linea d'aria", + "the count is a lower bound because at least one layer reached its retained limit.": "il conteggio è un limite inferiore perché almeno un livello ha raggiunto il suo limite di conservazione.", + "{label} off": "{label} disattivato", + "{label} loading": "{label} in caricamento", + "{label} error": "{label} in errore", + "counted the first {returned} loaded records": "contati i primi {returned} record caricati", + "counted {returned} of {total} loaded records": "contati {returned} di {total} record caricati", + "{layers} just turned on — still loading, counts will rise": "{layers} appena attivati: ancora in caricamento, i conteggi aumenteranno", + "Contacts panel snapshot at {time} — the same retained cohort supplies the card, speech, and follow-up memory": "Snapshot del pannello Contatti alle {time}: lo stesso gruppo conservato fornisce la scheda, il parlato e la memoria per le domande successive", + "Contacts panel snapshot — the same retained cohort supplies the card, speech, and follow-up memory": "Snapshot del pannello Contatti: lo stesso gruppo conservato fornisce la scheda, il parlato e la memoria per le domande successive", + "Fly below {km} km to a covered region": "Scendi sotto {km} km su una regione coperta", + "No feed here yet · {n} regions available": { + "one": "Ancora nessun feed qui · {n} regione disponibile", + "many": "Ancora nessun feed qui · {n} di regioni disponibili", + "other": "Ancora nessun feed qui · {n} regioni disponibili" + }, + "degraded": "degradato", + "stale": "obsoleto", + "partial": "parziale", + "fallback": "di riserva", + "unavailable": "non disponibile", + "Not answered: {layers}": "Senza risposta: {layers}", + "Toggle voice control": "Attiva/disattiva il controllo vocale", + "Activate to toggle voice": "Attiva per abilitare o disabilitare la voce", + "Voice active": "Voce attiva", + "Voice could not be started.": "Impossibile avviare la voce.", + "the active voice session": "la sessione vocale attiva", + "{value} feet": "{value} piedi", + "Fire · FRP {frp} MW": "Incendio · FRP {frp} MW", + "The flights layer is not enabled": "Il livello voli non è attivo", + "The military layer is not enabled": "Il livello militare non è attivo", + "The satellites layer is not enabled": "Il livello satelliti non è attivo", + "The ais-live-vessels layer is not enabled": "Il livello ais-live-vessels non è attivo", + "Could not enable the requested layer": "Impossibile attivare il livello richiesto", + "Could not disable the requested layer": "Impossibile disattivare il livello richiesto", + "Radio layer unavailable": "Livello Radio non disponibile", + "Camera navigation is unavailable in the current view": "La navigazione della camera non è disponibile nella vista attuale", + "Camera navigation policy unavailable": "Regole di navigazione della camera non disponibili", + "Nearest-aircraft selection supports Flights or Military Flights only": "La selezione dell'aereo più vicino supporta solo Voli o Voli militari", + "Nearest-aircraft selection needs a preset, place name, or latitude and longitude": "La selezione dell'aereo più vicino richiede un preset, un nome di luogo o latitudine e longitudine", + "Could not arrive at the requested place": "Impossibile arrivare al luogo richiesto", + "The nearest airborne aircraft could not be selected": "Impossibile selezionare l'aereo in volo più vicino", + "No flights within {radius} of the current view": "Nessun volo entro {radius} dalla vista attuale", + "No military within {radius} of the current view": "Nessun mezzo militare entro {radius} dalla vista attuale", + "No satellites within {radius} of the current view": "Nessun satellite entro {radius} dalla vista attuale", + "No vessels within {radius} of the current view": "Nessuna nave entro {radius} dalla vista attuale", + "{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "{layer} è attivo sul feed {source}, ma nessun aereo in volo è ancora caricato nella vista di {place}", + "{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "{layer} è attivo, ma nessun aereo in volo è ancora caricato nella vista di {place}", + "{layer} is enabled, but its aircraft feed is unavailable": "{layer} è attivo, ma il suo feed di aerei non è disponibile", + "{layer} is enabled, but its destination refresh did not complete": "{layer} è attivo, ma l'aggiornamento delle destinazioni non è stato completato", + "{layer} is enabled, but {source} is unavailable": "{layer} è attivo, ma {source} non è disponibile", + "Could not arrive at {place}": "Impossibile arrivare a {place}", + "{name} is no longer loaded": "{name} non è più caricato", + "Unknown target layer: {target}": "Livello obiettivo sconosciuto: {target}", + "nominal": "nominale", + "{label} on": "{label} attivato", + "Frame aircraft": "Inquadra gli aerei", + "Frame military aircraft": "Inquadra gli aerei militari", + "Frame ships": "Inquadra le navi", + "Frame satellites": "Inquadra i satelliti", + "Frame contacts": "Inquadra i contatti", + "{count} aircraft in frame": { + "one": "{count} aereo inquadrato", + "many": "{count} di aerei inquadrati", + "other": "{count} aerei inquadrati" + }, + "{count} military aircraft in frame": { + "one": "{count} aereo militare inquadrato", + "many": "{count} di aerei militari inquadrati", + "other": "{count} aerei militari inquadrati" + }, + "{count} ships in frame": { + "one": "{count} nave inquadrata", + "many": "{count} di navi inquadrate", + "other": "{count} navi inquadrate" + }, + "{count} satellites in frame": { + "one": "{count} satellite inquadrato", + "many": "{count} di satelliti inquadrati", + "other": "{count} satelliti inquadrati" + }, + "{count} contacts in frame": { + "one": "{count} contatto inquadrato", + "many": "{count} di contatti inquadrati", + "other": "{count} contatti inquadrati" + }, + "Nearest military aircraft": "Aerei militari più vicini", + "Nearest ships": "Navi più vicine", + "Nearest satellites": "Satelliti più vicini", + "Nearest aircraft": "Aerei più vicini", + "{first} and {second}": "{first} e {second}", + "Layer": "Livello", + "there": "lì", + "Camera range {range}": "Distanza della camera {range}", + "Within {radius} of the view": "Entro {radius} dalla vista", + "Labels on": "Etichette attivate", + "Framing uses the nearest 80 loaded contacts": "L'inquadratura usa gli 80 contatti caricati più vicini", + "{distance} from {location}": "{distance} da {location}", + "Altitude {altitude}": "Altitudine {altitude}", + "{origin} to {destination}": "Da {origin} a {destination}", + "from {origin}": "da {origin}", + "to {destination}": "a {destination}", + "Registration {registration}": "Immatricolazione {registration}", + "View state": "Stato della vista", + "Marked {count} places": { + "one": "Segnato {count} luogo", + "many": "Segnati {count} di luoghi", + "other": "Segnati {count} luoghi" + }, + "Nothing marked": "Nulla di segnato", + "Not found: {places}": "Non trovati: {places}", + "Tracing outlines": "Tracciamento dei contorni", + "Frame flights": "Inquadra i voli", + "Frame military": "Inquadra i militari", + "Frame vessels": "Inquadra le navi", + "Frame {target}": "Inquadra {target}", + "Zoom out to globe": "Allontana fino al globo", + "Open data layers": "Apri i livelli dati", + "Open or close a panel": "Apri o chiudi un pannello", + "Change context mode": "Cambia la modalità contesto", + "Control cockpit": "Controlla il cockpit", + "Change visual style": "Cambia lo stile visivo", + "Adjust HUD": "Regola l'HUD", + "Adjust cyber sonar": "Regola il sonar Cyber", + "Adjust detection overlay": "Regola l'overlay di rilevamento", + "Change map stack": "Cambia lo stack mappa", + "Adjust post-processing": "Regola la post-elaborazione", + "Control scene": "Controlla la scena", + "Control CCTV": "Controlla le CCTV", + "Control radio": "Controlla la radio", + "Track contact": "Traccia il contatto", + "Stop tracking": "Interrompi il tracciamento", + "Clear marks": "Cancella i segni", + "Move camera": "Sposta la camera", + "Fly route": "Vola lungo il percorso", + "Analyst query": "Richiesta di analisi", + "Next ISS pass": "Prossimo passaggio della ISS", + "Next satellite pass": "Prossimo passaggio del satellite", + "Mark the map": "Segna sulla mappa", + "Mark {targets} +{more}": "Segna {targets} +{more}", + "Mark {targets}": "Segna {targets}", + "Fly to {place}": "Vola su {place}", + "Fly to Location": "Vola sul luogo", + "Nearest aircraft to {place}": "Aereo più vicino a {place}", + "Nearest aircraft to Here": "Aereo più vicino a qui", + "Layer on": "Livello attivato", + "Layer off": "Livello disattivato", + "Zoom out": "Allontana", + "Zoom in": "Avvicina", + "Read the view": "Leggi la vista", + "Check view state": "Controlla lo stato della vista", + "Action": "Azione", + "Finding places": "Ricerca dei luoghi", + "Tracing outline": "Tracciamento del contorno", + "Looking up place": "Ricerca del luogo", + "Flying": "In volo", + "Turning on layer": "Attivazione del livello", + "Loading aircraft": "Caricamento degli aerei", + "Picking nearest": "Scelta del più vicino", + "Working": "Operazione in corso", + "in progress": "in corso", + "done": "fatto", + "failed": "non riuscito", + "cancelled": "annullato", + "Outline traced": "Contorno tracciato", + "Outline unavailable": "Contorno non disponibile", + "Source: {label}": "Fonte: {label}", + "WORKING": "IN CORSO", + "DONE": "FATTO", + "Recent speech": "Parlato recente", + "HERE": "QUI", "Aircraft cockpit view": "Vista cockpit dell'aereo", "LEVEL": "LIVELLO", "Estimated destination direction": "Direzione stimata della destinazione", @@ -685,15 +2712,21 @@ "Next vision style": "Stile di visione successivo", "Current aircraft heading": "Prua attuale dell'aereo", "GROUND SPEED": "VEL. AL SUOLO", + "KTS": "KTS", "ALTITUDE": "ALTITUDINE", + "FT": "FT", "Contact cockpit summary": "Riepilogo contatto del cockpit", "CONTACT": "CONTATTO", "CONTACTS · 250 KM": "CONTATTI · 250 KM", "Contact navigation": "Navigazione contatti", "CONTEXT ONLY": "SOLO CONTESTO", "Nearby cohort counts": "Conteggi dei gruppi vicini", + "FLT": "VOLI", + "MIL": "MIL", + "SITE": "SITI", "NEAREST OBSERVED / MAPPED": "PIÙ VICINO OSSERVATO / MAPPATO", "AVAILABLE INPUTS ONLY · NOT AN ALL-CLEAR": "SOLO INPUT DISPONIBILI · NON È UN VIA LIBERA", + "WX": "METEO", "Cockpit briefing carousel": "Carosello briefing del cockpit", "Estimated flight plan": "Piano di volo stimato", "ESTIMATED FLIGHT PLAN": "PIANO DI VOLO STIMATO", @@ -709,9 +2742,14 @@ "WIND": "VENTO", "SKY": "CIELO", "PRECIP": "PRECIP", + "MM": "MM", + "Weather data by Open-Meteo.com": "Dati meteo di Open-Meteo.com", + "Cockpit briefing pages": "Pagine del briefing del cockpit", + "SIG": "SIG", "Show Live Signals": "Mostra Segnali live", "NEWS": "NOTIZIE", "Show Regional News": "Mostra Notizie regionali", + "LOCAL": "LOCALE", "Show Local Info": "Mostra Info locali", "Cockpit display and Radio controls": "Controlli display e Radio del cockpit", "DISPLAY": "DISPLAY", @@ -723,6 +2761,8 @@ "Next filtered radio station": "Stazione radio filtrata successiva", "VOLUME": "VOLUME", "Cockpit Radio volume": "Volume Radio del cockpit", + "ESC EXIT": "ESC ESCI", + "C TOGGLE": "C ALTERNA", "View switcher": "Selettore vista", "Exit cockpit and return to full globe view": "Esci dal cockpit e torna alla vista del globo intero", "RESET": "RESET", @@ -750,6 +2790,9 @@ "Search location by name or coordinates": "Cerca un luogo per nome o coordinate", "Search any location...": "Cerca un luogo qualsiasi...", "WEATHER": "METEO", + "Active weather products": "Prodotti meteo attivi", + "RECENT IMAGERY": "IMMAGINI RECENTI", + "Imagery days in the box": "Giorni con immagini nel riquadro", "CONTEXT": "CONTESTO", "Compact Radio controls": "Controlli Radio compatti", "Open detailed Radio controls": "Apri i controlli Radio dettagliati", @@ -772,13 +2815,14 @@ "AVAILABLE MISSIONS": "MISSIONI DISPONIBILI", "SELECT A MISSION TO INSPECT": "SELEZIONA UNA MISSIONE DA ESAMINARE", "LOADING 30-DAY MISSION INDEX": "CARICAMENTO INDICE MISSIONI A 30 GIORNI", - "TAB PREVIEWS · ENTER / SPACE SELECTS": "TAB ANTEPRIMA · INVIO / SPAZIO SELEZIONA", + "TAB PREVIEWS · ENTER / SPACE SELECTS": "TAB: ANTEPRIMA · ENTER / SPACE: SELEZIONA", "Internet radio and local SDR": "Radio internet e SDR locale", "STATION TAG": "TAG STAZIONE", "Filter stations by station tag": "Filtra le stazioni per tag", "All": "Tutti", - "Enable Radio, then choose a globe marker or use next.": "Attiva la Radio, poi scegli un marcatore sul globo o usa SUCC.", + "Enable Radio, then choose a globe marker or use next.": "Attiva la Radio, poi scegli un marcatore sul globo o passa alla successiva.", "DRAG TO TUNE": "TRASCINA PER SINTONIZZARE", + "Tune available internet radio stations": "Sintonizza le stazioni radio internet disponibili", "ALL · DRAG THE NEEDLE": "TUTTE · TRASCINA L'AGO", "SNAPS TO AVAILABLE STATIONS": "SI AGGANCIA ALLE STAZIONI DISPONIBILI", "Radio playback": "Riproduzione radio", @@ -789,13 +2833,48 @@ "Stop radio playback": "Ferma la riproduzione radio", "Radio volume": "Volume radio", "STATION SITE": "SITO STAZIONE", + "DIRECTORY: RADIO BROWSER": "ELENCO: RADIO BROWSER", "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "L'audio si collega direttamente all'emittente dopo aver premuto play. Il tuo IP è visibile a quell'emittente.", - "Intelligence HUD (H)": "HUD Intelligence (H)", + "Local RTL-SDR receiver": "Ricevitore RTL-SDR locale", + "LOCAL RTL-SDR": "RTL-SDR LOCALE", + "Chrome/Edge · WebUSB · one local tuner shared by FM and the Local ADS-B layer.": "Chrome/Edge · WebUSB · un sintonizzatore locale condiviso tra FM e il livello ADS-B locale.", + "Use your location for faster ADS-B position decoding": "Usa la tua posizione per decodificare più in fretta le posizioni ADS-B", + "CHANGE DEVICE": "CAMBIA DISPOSITIVO", + "Choose a different RTL-SDR or receiver channel": "Scegli un altro RTL-SDR o canale del ricevitore", + "RTL-SDR receiver mode": "Modalità del ricevitore RTL-SDR", + "GAIN": "GUADAGNO", + "RTL-SDR tuner gain for the current mode": "Guadagno del sintonizzatore RTL-SDR per la modalità attuale", + "AUTO": "AUTO", + "MSG/S": "MSG/S", + "HEARD": "RICEVUTI", + "POSITIONED": "POSIZIONATI", + "FM MHZ": "FM MHZ", + "TUNE": "SINTONIZZA", + "Seek broadcast FM stations": "Cerca stazioni FM broadcast", + "◀ SEEK": "◀ CERCA", + "SEEK ▶": "CERCA ▶", + "SDR VOL": "VOL SDR", + "Local SDR volume": "Volume dell'SDR locale", + "Intelligence HUD (H)": "HUD intelligence (H)", "Layout": "Layout", "HUD layout": "Layout HUD", "Tactical": "Tattico", "Operator": "Operatore", "Minimal": "Minimale", + "Cyber": "Cyber", + "Sonar": "Sonar", + "Cyber sonar contact scanner": "Scanner di contatti sonar Cyber", + "Rings": "Anelli", + "Sonar ring count": "Numero di anelli del sonar", + "Range": "Portata", + "Sonar ring range": "Portata degli anelli del sonar", + "Power": "Potenza", + "Sonar intensity": "Intensità del sonar", + "Opacity": "Opacità", + "Cyber contact and label opacity": "Opacità di contatti ed etichette Cyber", + "Minimum opacity for map dots, icons, models, brackets, and labels between sonar passes": "Opacità minima di punti sulla mappa, icone, modelli, riquadri ed etichette tra un passaggio del sonar e l'altro", + "Sector": "Settore", + "Sonar sector width": "Ampiezza del settore del sonar", "Detection Overlay (D)": "Overlay di rilevamento (D)", "Detection overlay": "Overlay di rilevamento", "Detection label density": "Densità delle etichette di rilevamento", @@ -819,6 +2898,26 @@ "Feather": "Sfumatura", "Scope edge feather": "Sfumatura del bordo dello scope", "Scope edge feather as a percentage of the keyhole radius": "Sfumatura del bordo dello scope, come percentuale del raggio del foro", + "Draw on the world — click vertices, double-click or Enter to finish, Esc to cancel": "Disegna sul mondo: fai clic sui vertici, doppio clic o Enter per finire, Esc per annullare", + "Shape": "Forma", + "Shape to draw": "Forma da disegnare", + "Area": "Area", + "Line": "Linea", + "Pin": "Segnaposto", + "Label (optional)": "Etichetta (opzionale)", + "Label for the drawn shape": "Etichetta della forma disegnata", + "Colour of the drawn shape": "Colore della forma disegnata", + "Primary": "Principale", + "Amber": "Ambra", + "Cyan": "Ciano", + "Green": "Verde", + "Red": "Rosso", + "Clear": "Cancella", + "Remove every mark from the board": "Rimuovi tutti i segni dalla lavagna", + "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.": "Mostra sul globo i tuoi file GeoJSON, KML, KMZ o GPX (o trascinali sopra). I dati dei file restano su questo dispositivo; gli overlay possono comparire negli screenshot della mappa condivisi con la voce.", + "Import": "Importa", + "Choose GeoJSON, KML, KMZ or GPX files": "Scegli file GeoJSON, KML, KMZ o GPX", + "Imported files": "File importati", "Celestial": "Celeste", "Hide UI chrome": "Nascondi l'interfaccia", "Clean UI": "UI pulita", @@ -831,6 +2930,7 @@ "Return UI controls": "Ripristina i controlli UI", "Initializing photorealistic world...": "Inizializzazione del mondo fotorealistico...", "DATA LAYERS": "LIVELLI DATI", + "ACQUIRING FRAME": "ACQUISIZIONE FOTOGRAMMA", "NEAREST": "PIÙ VICINA", "CCTV camera": "Telecamera CCTV", "CALIBRATION": "CALIBRAZIONE", @@ -846,6 +2946,26 @@ "SAVE CAL": "SALVA CAL", "RESET CAL": "RESET CAL", "SCENE SUMMARY": "RIEPILOGO SCENA", + "STREET LEVEL": "VISTA STRADALE", + "Turn Street Level on or off": "Attiva o disattiva Vista stradale", + "Show the street-level view full screen (Esc shrinks it)": "Mostra la vista stradale a schermo intero (Esc la riduce)", + "Image fit": "Adattamento immagine", + "FIT": "ADATTA", + "Fit: show the whole photo, with dark bars where its shape differs from the frame": "Adatta: mostra l'intera foto, con bande scure dove la sua forma differisce dal riquadro", + "FILL": "RIEMPI", + "Fill: fill the frame edge to edge, cropping the photo": "Riempi: riempie il riquadro da bordo a bordo, ritagliando la foto", + "Close the image and deselect it on the map": "Chiudi l'immagine e deselezionala sulla mappa", + "Close the street-level image": "Chiudi l'immagine a livello stradale", + "Street-level viewer": "Visualizzatore a livello stradale", + "Open this image on the provider's site": "Apri questa immagine sul sito del provider", + "Imagery providers": "Provider di immagini", + "PROVIDERS": "PROVIDER", + "Imagery filters": "Filtri delle immagini", + "IMAGERY": "IMMAGINI", + "Panorama filter": "Filtro panorami", + "ALL": "TUTTE", + "FLAT": "PIATTE", + "SINCE": "DAL", "SCENES": "SCENE", "Scene recipe": "Ricetta della scena", "NEW": "NUOVA", @@ -855,7 +2975,7 @@ "EXPORT PRESETS": "ESPORTA PRESET", "IMPORT": "IMPORTA", "RUN LOG": "LOG ESECUZIONE", - "POWER UP": "POWER UP", + "POWER UP": "ACCENDI", "GROUND STATION · PROVIDER SETTINGS": "STAZIONE A TERRA · IMPOSTAZIONI PROVIDER", "Close key setup": "Chiudi la configurazione delle chiavi", "Power up the globe": "Accendi il globo", @@ -868,6 +2988,9 @@ "Globe actions": "Azioni del globo", "Turn off all selected data layers": "Disattiva tutti i livelli dati selezionati", "Copy share link": "Copia il link di condivisione", + "Toggle straight-down and tilted map views": "Alterna tra vista dall'alto e vista inclinata della mappa", + "Reset map to north up": "Orienta la mappa a nord", + "Reset map bearing to north": "Riporta l'orientamento della mappa a nord", "Reset camera and return to full globe view": "Ripristina la camera e torna alla vista del globo intero", "MISSION CONTROL · FIRST LAUNCH": "CONTROLLO MISSIONE · PRIMO AVVIO", "Choose your first view": "Scegli la tua prima vista", diff --git a/src/i18n/same-as-english.json b/src/i18n/same-as-english.json index 83c8897d8..be8a06f0c 100644 --- a/src/i18n/same-as-english.json +++ b/src/i18n/same-as-english.json @@ -124,6 +124,173 @@ "ΔN", "▲ {frp} MW" ], + "it": [ + "1090 MHz", + "978 MHz UAT", + "AFRICA", + "AIS: --", + "AIS: {name}", + "ALT {altitude} FT · GS {speed} KT · TRK {track}", + "ANIME", + "ASIA", + "AUTO", + "AUTO HOP OFF", + "AUTO HOP ON", + "Alternative", + "Ambient", + "Anime", + "Area", + "Austin", + "BRG {value}°", + "BRG —", + "Bloom", + "Blues", + "Business jet", + "CAL {value}", + "CAL · {badge}", + "CARGO", + "CCTV", + "CCTV OFF", + "CCTV ON", + "COCKPIT", + "CRS {value}°", + "CRT", + "Country", + "Cyber", + "DEST ---°", + "DEST {bearing}", + "DISPLAY", + "Dance", + "Drone", + "Dubai", + "ENE", + "ESE", + "FLIR", + "FM MHZ", + "FOCUS", + "FOV", + "FOV {value}°", + "FT", + "Folk", + "Funk", + "GEO", + "GOOGLE STREET VIEW", + "Google Street View", + "HDG", + "HDG {value}°", + "Hip-Hop", + "House", + "Indie", + "Ironbow", + "Jazz", + "KTS", + "LIVE", + "Landsat 8/9", + "Layout", + "Los Angeles", + "MIC", + "MIL", + "MINI", + "MM", + "MONITOR", + "MSG/S", + "Metal", + "NASA FIRMS · LIVE", + "NAV", + "NE", + "NNE", + "NOIR", + "NVG", + "New York", + "Noir", + "OCEANIA", + "OFF", + "OK", + "ON", + "ON/OFF", + "Oldies", + "PAYLOAD", + "PLAY", + "POS: LIVE", + "POS: {time}Z", + "PRECIP", + "Pop", + "Punk", + "RADIO", + "REC", + "RESET", + "RESET CAL", + "Radio", + "Reggae", + "Rock", + "S2 GhostMaps", + "SAR", + "SE", + "SIG", + "SNAPSHOT", + "SQUAWK {code} · {status}", + "SSE", + "STANDARD", + "STD", + "STOP", + "SYNC", + "San Francisco", + "Scope", + "Sentinel-2", + "Sonar", + "Soul", + "TEMP", + "TIMEOUT", + "Talk", + "Tallinn", + "Techno", + "Tokyo", + "Tram", + "Trance", + "UPSTREAM", + "USB {rate} msg/s", + "Upstream HTTP {status}", + "V/S {rate} FPM", + "VIEWSHED", + "VIEWSHED ON", + "VOLUME", + "VS", + "WHOT/BHOT", + "Washington DC", + "World", + "audio {state}", + "dB", + "ft", + "hPa", + "installation class|BASE", + "km", + "km/h", + "max {value} MW", + "min", + "mini", + "mph", + "radio|TALK", + "satellite", + "standard", + "view band|METRO", + "voice|OFF", + "{count} MSGS", + "{count} feeds live", + "{count} scenes", + "{rate} msg/s", + "{scene} / {pack}: {status}. File: {path}. {attribution} · {license}", + "{source} HTTP {status}", + "{speed} kn", + "{speed}KT", + "{value} KM", + "{value} KM DOWNRANGE", + "{value} KM/H", + "{value} KM/S", + "{value} conf", + "ΔE", + "ΔN", + "▲ {frp} MW" + ], "ru": [ "AIS: --", "AIS: {name}", From c4dfee6e5c1504f15f7e26d667399c310c8fd066 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 12:51:02 +0400 Subject: [PATCH 04/20] i18n(it): ship Italian - Register it: catalog in index.js, LOCALES and LOCALE_NAMES (Italiano); it-IT, it-CH and other it tags select it. - List it.json with the other catalogs in package-boundaries.json. - docs/translations/it.md: style, plurals and glossary; Italian in the shipped lists of TRANSLATORS.md and CURRENT-STATE.md. Co-Authored-By: Claude Opus 5.5 --- docs/CURRENT-STATE.md | 2 +- docs/TRANSLATORS.md | 4 +- docs/translations/it.md | 90 +++++++++++++++++++++++++++++++++ scripts/package-boundaries.json | 43 ++++++++++++++++ src/i18n/i18n.test.mjs | 2 + src/i18n/index.js | 9 +++- src/i18n/locale.js | 10 +++- src/ui/localePicker.test.mjs | 6 +-- 8 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 docs/translations/it.md diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index c55031a6a..b65f48193 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -3733,7 +3733,7 @@ test:track` 43 tracking invariants · headless QA harnesses under ### Interface localization (October 2026) -Shipped locales: **en** (source and fallback), **es**, **ru**, **zh-CN** and **zh-Hant**. The code lives in +Shipped locales: **en** (source and fallback), **es**, **it**, **ru**, **zh-CN** and **zh-Hant**. The code lives in `src/i18n/`. How to mark UI text: [`docs/I18N.md`](./I18N.md); translator workflow: [`docs/TRANSLATORS.md`](./TRANSLATORS.md). diff --git a/docs/TRANSLATORS.md b/docs/TRANSLATORS.md index 830ca155e..01ed1a92e 100644 --- a/docs/TRANSLATORS.md +++ b/docs/TRANSLATORS.md @@ -1,6 +1,6 @@ # Translating God's Eye View -Shipped languages: **English** (source and fallback), **Spanish** (`es`), **Russian** (`ru`), **Simplified Chinese** (`zh-CN`) and **Traditional Chinese** (`zh-Hant`). +Shipped languages: **English** (source and fallback), **Spanish** (`es`), **Italian** (`it`), **Russian** (`ru`), **Simplified Chinese** (`zh-CN`) and **Traditional Chinese** (`zh-Hant`). ## How it works @@ -63,4 +63,4 @@ These are contracts, not copy: layer ids and registry keys, status enums and oth ## Language notes -Each language keeps its glossary, plural forms, units and style in its own file, `docs/translations/.md`: [Spanish](./translations/es.md), [Russian](./translations/ru.md), [Simplified Chinese](./translations/zh-CN.md), [Traditional Chinese](./translations/zh-Hant.md). Read it before translating, and add a term there when you settle on one. +Each language keeps its glossary, plural forms, units and style in its own file, `docs/translations/.md`: [Spanish](./translations/es.md), [Italian](./translations/it.md), [Russian](./translations/ru.md), [Simplified Chinese](./translations/zh-CN.md), [Traditional Chinese](./translations/zh-Hant.md). Read it before translating, and add a term there when you settle on one. diff --git a/docs/translations/it.md b/docs/translations/it.md new file mode 100644 index 000000000..155c0e563 --- /dev/null +++ b/docs/translations/it.md @@ -0,0 +1,90 @@ +# Italian (`it`) + +Catalog: `src/i18n/locales/it.json`. General rules: [TRANSLATORS.md](../TRANSLATORS.md). + +Translation source: abiyeenzo (#912). + +## Style + +- Standard Italian as in Italian software UIs. Address the user with informal "tu" imperatives: «Aggiungi», «Attiva», «Scegli», «Incolla», «Riprova». Tooltips that name an action use the same imperative: «Espandi il pannello», «Ripristina la camera». +- Sentence case, not Title Case: "Live Flights" → «Voli live», "Space Missions" → «Missioni spaziali». UPPERCASE English stays UPPERCASE: «LIVE», «NON DISPONIBILE». +- Quotes inside Italian text are straight double quotes: «Eliminare lo scatto "{shot}"?». Use the accented capitals (È, À) in UPPERCASE text: «VELOCITÀ», «CITTÀ». +- Errors read as a statement, not a past participle on its own: "Search failed" → «Ricerca non riuscita»; "Could not …" → «Impossibile …». A dash that joins a cause and a hint becomes a colon: «Chiave API rifiutata: controlla AISSTREAM_API_KEY». +- Short labels, chips and HUD readouts stay short. A standard abbreviation with a period beats a wrapped line: REGOLAZ., RILEV., INCL., ALT., VEL., STIM.; PREC / SUCC for PREV / NEXT. +- The HUD codes HDG, BRG, CRS, FOV and DEST stay in English, as in cockpit avionics. RANGE is «PORTATA». Words used in a sentence are translated: heading → «prua» (aircraft) or «direzione» (camera), course → «rotta». +- Keyboard keys stay in English: Space, Enter, Esc, Tab, Shift, Backspace, H, 1–9 («Tieni premuto Space per parlare», «Premi Enter per riprovare»). +- Decimal comma in numbers written in the text: «28,2710° N». Numbers formatted by the code follow `Intl` and need nothing. +- Units: km, m, km/h, m/s, kn (knots), ft (feet), h, min, s; in UPPERCASE text KM, KM/S, KT, FT, MIN, H. "m" is always metres, so minutes are «min» («5 min fa»). MW stays MW. `°` and `%` stay. +- "ago" goes after the time: «{count} min fa». When a placeholder already holds a localized "ago" text (`{age}`, `{ago}`), do not add «fa» again. +- English loanwords that Italian UIs use as they are stay in English: feed, live, cockpit, briefing, preset, overlay, layout, snapshot, tile, provider, timeout, payload, bloom, scope. + +## Plurals + +A `tn()` entry needs three forms. `Intl.PluralRules('it')` picks: + +| Form | Counts | Example | +| ------- | -------------------------------------- | ----------------------- | +| `one` | 1 | 1 telecamera | +| `many` | 1 000 000, 2 000 000… (exact millions) | 1 000 000 di telecamere | +| `other` | everything else: 0, 2–999 999, 1,5… | 3 telecamere | + +The `many` form is the `other` text with «di» after the number when a noun follows: «{count} di telecamere caricate», «{count} DI CHIAVI IN ATTESA». When no noun follows the number («{count} vicine», «{count} RICEVUTI»), `many` repeats `other`. Nouns that do not change in the plural keep one form for all three (`{count} file`, `{count} data center`), with «di» in `many`. + +## Glossary + +| English | Italiano | +| --------------------------------------------- | ------------------------------------------------------------ | +| layer / data layer | livello / livello dati | +| feed / source / data source | feed / fonte / fonte dati | +| LIVE (status) / live data | LIVE / dati live | +| SIMULATED | SIMULATO | +| stale / degraded / unavailable | obsoleto / degradato / non disponibile | +| retry / retrying | riprova / nuovo tentativo | +| rate limited | limite di richieste (raggiunto) | +| key (API key) / POWER UP / POWERED UP | chiave / ACCENDI / ACCESO | +| Provider Settings | Impostazioni provider | +| ON / OFF (state chips) | ON / OFF | +| enable / disable | attivare / disattivare | +| globe / map / map source / map stack | globo / mappa / fonte mappa / stack mappa | +| basemap / box (Recent Imagery area) | mappa di base / riquadro | +| aircraft, plane / flight / military flights | aereo / volo / voli militari | +| vessel, ship | nave | +| satellite / shell (Starlink) / DENSE | satellite / shell / DENSO | +| launch (rocket) / launch site / space mission | lancio / sito di lancio / missione spaziale | +| ascent / replay / payload / stage | salita / replay / payload / stadio | +| contact / tracking | contatto / tracciamento | +| installation / site | installazione / sito | +| mapped / observed | mappato / osservato | +| camera (view) / camera, CCTV camera | camera / telecamera, telecamera CCTV | +| earthquake / active fire / fire perimeter | terremoto / incendio attivo / perimetro dell'incendio | +| advisory (NHC/CPHC cyclone) / cone | bollettino / cono di incertezza | +| radio station / broadcaster | stazione radio / emittente | +| road / flow (traffic) | strada / flusso | +| transit / bike share | trasporto pubblico / bike sharing | +| scene / shot / scene recipe | scena / scatto / ricetta della scena | +| anchor / data pack / bundle (scene) | ancora / pacchetto dati / pacchetto | +| story beat | tappa del racconto | +| briefing / panel / dock | briefing / pannello / dock | +| cockpit | cockpit | +| preset / visual preset | preset / preset visivo | +| Tactical / Operator / Minimal / Cyber | Tattico / Operatore / Minimale / Cyber | +| Scope (circular viewport mask) / keyhole | scope / foro | +| feather / fade | sfumatura / dissolvenza | +| detection overlay | overlay di rilevamento | +| pin (Draw tool) / mark | segnaposto / segno | +| pin (Recent Imagery) | fissare | +| Draw / Directions (tools) | Disegno / Indicazioni | +| Street Level (layer) / Street View (Google) | Vista stradale / Street View | +| Recent Imagery | Immagini recenti | +| Global Context / Context (panel) | Contesto globale / Contesto | +| heading, course / altitude / ground speed | prua, rotta / altitudine / velocità al suolo (VEL. AL SUOLO) | +| HDG / BRG / CRS / FOV / DEST | HDG / BRG / CRS / FOV / DEST (unchanged) | +| RANGE / PITCH / HGT (CCTV calibration) | PORTATA / INCL. / ALT. | +| PREV / NEXT | PREC / SUCC | +| Previous / Next (button text) | Precedente / Successivo | +| L / R (relative bearing) | S / D | +| SIG / NEWS / LOCAL (briefing tabs) | SIG / NOTIZIE / LOCALE | +| compass points (N, NNE, …, W, NW) | N, NNE, …, O, NO (west is «O», ovest) | +| NOT AN ALL-CLEAR | NON È UN VIA LIBERA | +| weather field / model / valid / issued | campo / modello / valida / emessa | +| click / click to … | fai clic / clic per … | diff --git a/scripts/package-boundaries.json b/scripts/package-boundaries.json index 9f06f73f6..991ab9498 100644 --- a/scripts/package-boundaries.json +++ b/scripts/package-boundaries.json @@ -440,6 +440,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -480,6 +481,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -510,6 +512,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -532,6 +535,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -549,6 +553,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -569,6 +574,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -596,6 +602,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -631,6 +638,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -648,6 +656,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -807,6 +816,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -929,6 +939,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -997,6 +1008,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -1046,6 +1058,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1109,6 +1122,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1139,6 +1153,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -1170,6 +1185,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1201,6 +1217,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -1235,6 +1252,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1278,6 +1296,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -1315,6 +1334,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -1366,6 +1386,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1396,6 +1417,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1445,6 +1467,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1509,6 +1532,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -1539,6 +1563,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1580,6 +1605,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1603,6 +1629,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1660,6 +1687,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -1723,6 +1751,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -2606,6 +2635,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -3191,6 +3221,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -3302,6 +3333,7 @@ "src/data/cameraArrival.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -3326,6 +3358,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -3363,6 +3396,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -3390,6 +3424,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -3482,6 +3517,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -3538,6 +3574,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -3793,6 +3830,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -3837,6 +3875,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -3891,6 +3930,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" @@ -3908,6 +3948,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -3968,6 +4009,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", @@ -4165,6 +4207,7 @@ "src/i18n/index.js", "src/i18n/locale.js", "src/i18n/locales/es.json", + "src/i18n/locales/it.json", "src/i18n/locales/ru.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", diff --git a/src/i18n/i18n.test.mjs b/src/i18n/i18n.test.mjs index 1b421f2ff..ae491dc93 100644 --- a/src/i18n/i18n.test.mjs +++ b/src/i18n/i18n.test.mjs @@ -35,6 +35,8 @@ test('normalizeLocale folds regional variants and rejects unshipped tags', () => assert.equal(normalizeLocale(' RU '), 'ru'); assert.equal(normalizeLocale('en_GB'), 'en'); assert.equal(normalizeLocale('xx'), null); + assert.equal(normalizeLocale('it-IT'), 'it'); + assert.equal(normalizeLocale('it_CH'), 'it'); // Explicit script tags take precedence over regional defaults. assert.equal(normalizeLocale('zh'), 'zh-CN'); assert.equal(normalizeLocale('zh-CN'), 'zh-CN'); diff --git a/src/i18n/index.js b/src/i18n/index.js index 6fc4becc9..e7954ed2a 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -17,11 +17,18 @@ import { writeStoredLocale, } from './locale.js'; import es from './locales/es.json' with { type: 'json' }; +import it from './locales/it.json' with { type: 'json' }; import ru from './locales/ru.json' with { type: 'json' }; import zhCN from './locales/zh-CN.json' with { type: 'json' }; import zhHant from './locales/zh-Hant.json' with { type: 'json' }; -const CATALOGS = Object.freeze({ es, ru, 'zh-CN': zhCN, 'zh-Hant': zhHant }); +const CATALOGS = Object.freeze({ + es, + it, + ru, + 'zh-CN': zhCN, + 'zh-Hant': zhHant, +}); let currentLocale = DEFAULT_LOCALE; diff --git a/src/i18n/locale.js b/src/i18n/locale.js index 55ed71163..fda8dacd3 100644 --- a/src/i18n/locale.js +++ b/src/i18n/locale.js @@ -8,12 +8,20 @@ export const LOCALE_STORAGE_KEY = 'gev:locale:v1'; export const DEFAULT_LOCALE = 'en'; /** Shipped locales; order does not matter. Adding one: docs/TRANSLATORS.md. */ -export const LOCALES = Object.freeze(['en', 'es', 'ru', 'zh-CN', 'zh-Hant']); +export const LOCALES = Object.freeze([ + 'en', + 'es', + 'it', + 'ru', + 'zh-CN', + 'zh-Hant', +]); /** Each locale named in its own language, for the selector. */ export const LOCALE_NAMES = Object.freeze({ en: 'English', es: 'Español', + it: 'Italiano', ru: 'Русский', 'zh-CN': '中文(简体)', 'zh-Hant': '中文(繁體)', diff --git a/src/ui/localePicker.test.mjs b/src/ui/localePicker.test.mjs index 057642827..47062f08c 100644 --- a/src/ui/localePicker.test.mjs +++ b/src/ui/localePicker.test.mjs @@ -40,7 +40,7 @@ test('the current language comes first, the rest by their own names', () => { nativeNames: LOCALE_NAMES, }), ), - ['ru', 'en', 'es', 'zh-CN', 'zh-Hant'], + ['ru', 'en', 'es', 'it', 'zh-CN', 'zh-Hant'], ); assert.deepEqual( codes( @@ -50,7 +50,7 @@ test('the current language comes first, the rest by their own names', () => { nativeNames: LOCALE_NAMES, }), ), - ['es', 'en', 'ru', 'zh-CN', 'zh-Hant'], + ['es', 'en', 'it', 'ru', 'zh-CN', 'zh-Hant'], ); assert.deepEqual( codes( @@ -60,7 +60,7 @@ test('the current language comes first, the rest by their own names', () => { nativeNames: LOCALE_NAMES, }), ), - ['en', 'es', 'ru', 'zh-CN', 'zh-Hant'], + ['en', 'es', 'it', 'ru', 'zh-CN', 'zh-Hant'], ); const rows = buildLocaleOptions({ locales: MANY, From 114694620726fb29112181beabb209d09685cbbf Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 12:57:54 +0400 Subject: [PATCH 05/20] i18n(uk): complete and ship Ukrainian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Translate the remaining 1,895 strings for the current UI (Bhote Koshi event, weather, imagery, street level, directions, SDR, voice, scenes, import) and review meirm's 832 entries from #312: 134 edited for Ukrainian HUD terms (КУРС/ПЕЛ./ШЛЯХ/ПРИЗН., Л/П, ОНЛАЙН for LIVE, Cyrillic units КМ, ВУЗ, ФТ, МВт), vessel types, number agreement and the ʼ apostrophe throughout. - Register uk: catalog, LOCALES, LOCALE_NAMES (Українська), package boundaries, same-as-English codes; picker and plural tests cover the four Ukrainian forms. - docs/translations/uk.md: style, plurals, units and glossary. Co-Authored-By: Claude Opus 5.5 --- docs/CURRENT-STATE.md | 2 +- docs/TRANSLATORS.md | 4 +- docs/translations/uk.md | 76 + scripts/package-boundaries.json | 43 + src/i18n/i18n.test.mjs | 18 + src/i18n/index.js | 9 +- src/i18n/locale.js | 10 +- src/i18n/locales/uk.json | 2479 +++++++++++++++++++++++++++++-- src/i18n/same-as-english.json | 13 + src/ui/localePicker.test.mjs | 11 +- 10 files changed, 2518 insertions(+), 147 deletions(-) create mode 100644 docs/translations/uk.md diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index c55031a6a..96d12b5cb 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -3733,7 +3733,7 @@ test:track` 43 tracking invariants · headless QA harnesses under ### Interface localization (October 2026) -Shipped locales: **en** (source and fallback), **es**, **ru**, **zh-CN** and **zh-Hant**. The code lives in +Shipped locales: **en** (source and fallback), **es**, **ru**, **uk**, **zh-CN** and **zh-Hant**. The code lives in `src/i18n/`. How to mark UI text: [`docs/I18N.md`](./I18N.md); translator workflow: [`docs/TRANSLATORS.md`](./TRANSLATORS.md). diff --git a/docs/TRANSLATORS.md b/docs/TRANSLATORS.md index 830ca155e..1992e6fdf 100644 --- a/docs/TRANSLATORS.md +++ b/docs/TRANSLATORS.md @@ -1,6 +1,6 @@ # Translating God's Eye View -Shipped languages: **English** (source and fallback), **Spanish** (`es`), **Russian** (`ru`), **Simplified Chinese** (`zh-CN`) and **Traditional Chinese** (`zh-Hant`). +Shipped languages: **English** (source and fallback), **Spanish** (`es`), **Russian** (`ru`), **Ukrainian** (`uk`), **Simplified Chinese** (`zh-CN`) and **Traditional Chinese** (`zh-Hant`). ## How it works @@ -63,4 +63,4 @@ These are contracts, not copy: layer ids and registry keys, status enums and oth ## Language notes -Each language keeps its glossary, plural forms, units and style in its own file, `docs/translations/.md`: [Spanish](./translations/es.md), [Russian](./translations/ru.md), [Simplified Chinese](./translations/zh-CN.md), [Traditional Chinese](./translations/zh-Hant.md). Read it before translating, and add a term there when you settle on one. +Each language keeps its glossary, plural forms, units and style in its own file, `docs/translations/.md`: [Spanish](./translations/es.md), [Russian](./translations/ru.md), [Ukrainian](./translations/uk.md), [Simplified Chinese](./translations/zh-CN.md), [Traditional Chinese](./translations/zh-Hant.md). Read it before translating, and add a term there when you settle on one. diff --git a/docs/translations/uk.md b/docs/translations/uk.md new file mode 100644 index 000000000..cd90b7b01 --- /dev/null +++ b/docs/translations/uk.md @@ -0,0 +1,76 @@ +# Ukrainian (`uk`) + +Catalog: `src/i18n/locales/uk.json`. General rules: [TRANSLATORS.md](../TRANSLATORS.md). + +Translation source: meirm (#312). + +## Style + +- Address the user with polite imperatives: «Натисніть», «Увімкніть», «Спробуйте ще раз». +- Sentence case, not Title Case: "Live Flights" → «Рейси онлайн». +- Ukrainian norms, not Russian calques: «у радіусі», «за посиланням», «надто довгий», «потім», «вигляд» (view), «стеження» (tracking); prepositions alternate у/в and і/й by euphony. +- The apostrophe is always ʼ (U+02BC): обʼєкт, звʼязок, памʼять. Not ' or ’. +- Quotes inside Ukrainian text are «ялинки»; a button or layer name inside a sentence goes in them: Увімкніть «Вуличні знімки». +- In short labels, a standard abbreviation with a period beats a wrapped line: ПОПЕР., ДАЛЬН., КАЛІБР. +- Units: км, м, км/год, м/с, вуз (knots), фт (feet), год, хв, с, МГц, дБ, гПа; in UPPERCASE text КМ, М, КМ/С, ВУЗ, ФТ. MW is МВт in any case. `°` and `%` stay. Decimal comma in coordinates written as text: 28,2710° пн. ш. +- Coordinates: пн. ш. / пд. ш. / сх. д. / зх. д.; the HUD hemisphere letters are Пн, Пд, Сх, Зх. + +## Plurals + +A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: + +| Form | Counts | Example | +| ------- | ------------------------ | ---------- | +| `one` | 1, 21, 31, 101… | 1 камера | +| `few` | 2–4, 22–24, 32–34… | 3 камери | +| `many` | 0, 5–20, 25–30, 111–114… | 5 камер | +| `other` | fractions: 1.5, 2.25… | 1,5 камери | + +`other` takes the genitive singular: 1,5 кадру, 1,5 літака, 1,5 ключа. When a word next to a number cannot agree in every form, move the number after a colon instead: «поруч: {count}», «відповідей: {responses}». The same trick keeps place names and tool names out of a preposition's case: «звідки: {origin}», «Активно: {name}». + +## Glossary + +| English | Українська | +| ------------------------------------------ | ---------------------------------------------------- | +| layer / data layer | шар / шар даних | +| feed | потік даних (short: потік) | +| source / data source | джерело / джерело даних | +| LIVE (status) / live data | ОНЛАЙН / у реальному часі | +| SIMULATED / SYNTHETIC | ІМІТАЦІЯ | +| stale / degraded / unavailable | застарів / з перебоями (chip: ПЕРЕБОЇ) / недоступний | +| retry | повтор | +| key (API key) / POWER UP | ключ / ЗАПУСК | +| Provider Settings / provider | Налаштування постачальників / постачальник | +| globe / map / map source / basemap | глобус / карта / джерело карти / підкладка | +| aircraft / flight / military flights | літак (short HUD: борт) / рейс / військові рейси | +| vessel, ship / vessels | судно / судна (gen. pl. суден) | +| satellite | супутник | +| launch (rocket) / space mission | запуск / космічна місія | +| contact / tracking | контакт / стеження | +| installation, site / mapped | обʼєкт / нанесений на карту | +| camera / CCTV camera | камера / камера CCTV | +| earthquake / active fire / fire perimeter | землетрус / активна пожежа / контур пожежі | +| advisory (NHC/CPHC cyclone) | зведення | +| scene / shot / scene recipe | сцена / кадр / рецепт сцени | +| briefing / panel / dock | брифінг / панель / док | +| preset / visual preset | пресет / візуальний пресет | +| Scope (circular viewport mask) | приціл | +| overlay (detection overlay) | накладка | +| heading / altitude / ground speed | курс / висота / шляхова швидкість | +| HDG / BRG / CRS / FOV / DEST / SPD / RANGE | КУРС / ПЕЛ. / ШЛЯХ / ОГЛЯД / ПРИЗН. / ШВИД / ДАЛЬН. | +| Street View (Google) | Перегляд вулиць (as in Ukrainian Google Maps) | +| Street Level (layer) | Вуличні знімки | +| imagery / recent imagery | знімки / свіжі знімки | +| radar reflectivity / lightning density | радіолокаційна відбивність / щільність блискавок | +| infrared | інфрачервоний (short: ІЧ) | +| receiver / gain / decoder | приймач / підсилення / декодер | +| broadcaster | мовник | +| CONUS, WHOT/BHOT, Ironbow, CRT, NVG, FLIR | без перекладу | +| PREV / NEXT (HUD) / Previous / Next | ПОПЕР. / ДАЛІ / Попередній / Наступний | +| anchor / data pack / bundle (scene) | якір / пакет даних / архів | +| box (Recent Imagery area) | область | +| camera move | переліт | +| SIG / NEWS / LOCAL (briefing tabs) | СИГН. / НОВИНИ / МІСЦ. | +| compass points (N, NNE, NE, …) | Пн, ПнПнСх, ПнСх, … | +| L / R (relative bearing) | Л / П | +| click / tap | клацнути / натиснути | diff --git a/scripts/package-boundaries.json b/scripts/package-boundaries.json index 9f06f73f6..5e5e2dad1 100644 --- a/scripts/package-boundaries.json +++ b/scripts/package-boundaries.json @@ -441,6 +441,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -481,6 +482,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -511,6 +513,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", @@ -533,6 +536,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -550,6 +554,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -570,6 +575,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", @@ -597,6 +603,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/layerNames.js" @@ -632,6 +639,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js" @@ -649,6 +657,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js" @@ -808,6 +817,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", @@ -930,6 +940,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js" @@ -998,6 +1009,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js" @@ -1047,6 +1059,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1110,6 +1123,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1140,6 +1154,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", @@ -1171,6 +1186,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1202,6 +1218,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js" @@ -1236,6 +1253,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1279,6 +1297,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/layers/installations/classLabel.js" @@ -1316,6 +1335,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js" @@ -1367,6 +1387,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1397,6 +1418,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1446,6 +1468,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1510,6 +1533,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/layers/streetLevel/providers/mapillary/policy.js" @@ -1540,6 +1564,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1581,6 +1606,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1604,6 +1630,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1661,6 +1688,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -1724,6 +1752,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/statusText.js", @@ -2607,6 +2636,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", @@ -3192,6 +3222,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", @@ -3303,6 +3334,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/i18n/index.js" @@ -3327,6 +3359,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -3364,6 +3397,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/scopeMaskPolicy.js", @@ -3391,6 +3425,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -3483,6 +3518,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js" @@ -3539,6 +3575,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/statusText.js", @@ -3794,6 +3831,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -3838,6 +3876,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -3892,6 +3931,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json" ], @@ -3909,6 +3949,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/statusText.js", @@ -3969,6 +4010,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/data/geoImportImages.js", @@ -4166,6 +4208,7 @@ "src/i18n/locale.js", "src/i18n/locales/es.json", "src/i18n/locales/ru.json", + "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", "src/ui/statusText.js", diff --git a/src/i18n/i18n.test.mjs b/src/i18n/i18n.test.mjs index 1b421f2ff..d38e03ae1 100644 --- a/src/i18n/i18n.test.mjs +++ b/src/i18n/i18n.test.mjs @@ -33,6 +33,8 @@ function memoryStorage(initial = {}) { test('normalizeLocale folds regional variants and rejects unshipped tags', () => { assert.equal(normalizeLocale('ru-RU'), 'ru'); assert.equal(normalizeLocale(' RU '), 'ru'); + assert.equal(normalizeLocale('uk'), 'uk'); + assert.equal(normalizeLocale('uk-UA'), 'uk'); assert.equal(normalizeLocale('en_GB'), 'en'); assert.equal(normalizeLocale('xx'), null); // Explicit script tags take precedence over regional defaults. @@ -142,6 +144,22 @@ test('tn() picks English and Russian plural forms', () => { assert.match(label(21), / 21 КЛЮЧ(?![А-ЯЁ])/); }); +test('tn() picks the four Ukrainian plural forms', () => { + const label = (count) => + tn( + count, + 'POWER UP · {count} KEY WAITING', + 'POWER UP · {count} KEYS WAITING', + ); + setLocale('uk'); + assert.match(label(1), / 1 КЛЮЧ(?![А-ЯҐЄІЇ])/); + assert.match(label(3), / 3 КЛЮЧІ(?![А-ЯҐЄІЇ])/); + assert.match(label(5), / 5 КЛЮЧІВ(?![А-ЯҐЄІЇ])/); + assert.match(label(11), / 11 КЛЮЧІВ(?![А-ЯҐЄІЇ])/); + assert.match(label(21), / 21 КЛЮЧ(?![А-ЯҐЄІЇ])/); + assert.match(label(1.5), / 1\.5 КЛЮЧА(?![А-ЯҐЄІЇ])/); +}); + test('t() context separates identical English with different meanings', () => { assert.equal(t('CLEAR', { context: 'action' }), 'CLEAR'); setLocale('ru'); diff --git a/src/i18n/index.js b/src/i18n/index.js index 6fc4becc9..df15690b2 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -18,10 +18,17 @@ import { } from './locale.js'; import es from './locales/es.json' with { type: 'json' }; import ru from './locales/ru.json' with { type: 'json' }; +import uk from './locales/uk.json' with { type: 'json' }; import zhCN from './locales/zh-CN.json' with { type: 'json' }; import zhHant from './locales/zh-Hant.json' with { type: 'json' }; -const CATALOGS = Object.freeze({ es, ru, 'zh-CN': zhCN, 'zh-Hant': zhHant }); +const CATALOGS = Object.freeze({ + es, + ru, + uk, + 'zh-CN': zhCN, + 'zh-Hant': zhHant, +}); let currentLocale = DEFAULT_LOCALE; diff --git a/src/i18n/locale.js b/src/i18n/locale.js index 55ed71163..77c1e68e7 100644 --- a/src/i18n/locale.js +++ b/src/i18n/locale.js @@ -8,13 +8,21 @@ export const LOCALE_STORAGE_KEY = 'gev:locale:v1'; export const DEFAULT_LOCALE = 'en'; /** Shipped locales; order does not matter. Adding one: docs/TRANSLATORS.md. */ -export const LOCALES = Object.freeze(['en', 'es', 'ru', 'zh-CN', 'zh-Hant']); +export const LOCALES = Object.freeze([ + 'en', + 'es', + 'ru', + 'uk', + 'zh-CN', + 'zh-Hant', +]); /** Each locale named in its own language, for the selector. */ export const LOCALE_NAMES = Object.freeze({ en: 'English', es: 'Español', ru: 'Русский', + uk: 'Українська', 'zh-CN': '中文(简体)', 'zh-Hant': '中文(繁體)', }); diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 09fdc59e3..8a543e929 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -1,59 +1,307 @@ { - "Flying to Austin, TX...": "Переліт до Austin, TX...", + "Pick a shape, then click the map.": "Виберіть фігуру й клацніть на карті.", + "Enter to place the pin, Esc to cancel.": "Enter — поставити мітку, Esc — скасувати.", + "Click where the pin goes.": "Клацніть там, де має бути мітка.", + "Click {count} more points.": { + "one": "Позначте ще {count} точку.", + "few": "Позначте ще {count} точки.", + "many": "Позначте ще {count} точок.", + "other": "Позначте ще {count} точки." + }, + "Those points are in a line — move one off it to enclose an area.": "Точки лежать на одній прямій — змістіть одну з них, щоб утворилася замкнена область.", + "That line has no length — click somewhere further away.": "Лінія не має довжини — клацніть далі.", + " · {max}-point limit reached": " · досягнуто ліміту точок: {max}", + "{measure} · double-click or Enter to finish, Backspace undoes, Esc cancels.{full}": "{measure} · подвійне клацання або Enter — завершити, Backspace — скасувати точку, Esc — скасувати.{full}", + "drawings on the map": "малюнки на карті", + "That shape already has {count} points — finish it or press Backspace.": "У цій фігурі вже точок: {count} — завершіть її або натисніть Backspace.", + "That point is off the globe — click on the world.": "Ця точка поза глобусом — клацніть на Землі.", + "That shape could not be placed.": "Не вдалося розмістити фігуру.", + "Could not place the shape: {error}": "Не вдалося розмістити фігуру: {error}", + "Board cleared.": "Дошку очищено.", + "{owner} is using the pointer — close it first.": "Вказівник зайнятий: «{owner}». Спершу закрийте його.", + "{label} · Detailed outline unavailable": "{label} · Докладний контур недоступний", + "Flying to Austin, TX...": "Переліт до Остіна, Техас...", "Restoring shared view...": "Відновлення спільного вигляду...", "Configuring viewer...": "Налаштування переглядача...", "Loading Google 3D Tiles...": "Завантаження Google 3D Tiles...", "Loading the keyless globe...": "Завантаження глобуса без ключа...", "Google 3D Tiles unavailable ({detail}). Loading the keyless globe...": "Google 3D Tiles недоступні ({detail}). Завантаження глобуса без ключа...", "Initializing systems...": "Ініціалізація систем...", + "Space Missions isolates replay data. Exit the mode to enable {layer}.": "Режим «Космічні місії» ізолює дані відтворення. Вийдіть із режиму, щоб увімкнути шар «{layer}».", + "Data attribution": "Джерела даних", + "Data provided by:": "Дані надали:", "Close data attribution": "Закрити відомості про джерела даних", + "Light aircraft": "Легкий літак", + "Glider": "Планер", + "Turboprop": "Турбогвинтовий літак", + "Airliner": "Авіалайнер", + "Widebody": "Широкофюзеляжний літак", + "Four-engine jet": "Чотиримоторний реактивний літак", + "Helicopter": "Гелікоптер", + "Fast jet": "Високоманеврений літак", + "Business jet": "Бізнес-джет", + "Drone": "Безпілотник", + "General emergency": "Загальна аварійна ситуація", + "Unlawful interference": "Незаконне втручання", + "Radio failure": "Відмова радіозвʼязку", + "Downed aircraft": "Вимушена посадка", + "Minimum fuel": "Мінімальний залишок пального", + "Lifeguard (medical priority)": "Санітарний рейс (медичний пріоритет)", + "Rasuwagadhi witness video": "Відео очевидця в Rasuwagadhi", + "Bhote Koshi valley footage": "Зйомка долини Bhote Koshi", + "Flood footage": "Зйомка паводка", + "Compilation and casualty claims": "Добірка відео та повідомлення про жертви", + "SOURCE GEOCONFIRMED · WORLD-PINNED": "МІСЦЕ ЗЙОМКИ ПІДТВЕРДЖЕНО · ПОЗНАЧЕНО НА КАРТІ", + "SOURCE CREDITED · LOCATION UNRESOLVED": "АВТОРА ЗАЗНАЧЕНО · МІСЦЕ НЕ ВСТАНОВЛЕНО", + "REFERENCE ONLY · CLAIMS UNVERIFIED": "ЛИШЕ ДЛЯ ДОВІДКИ · ТВЕРДЖЕННЯ НЕ ПЕРЕВІРЕНО", + "SOURCE GEOCONFIRMED": "МІСЦЕ ЗЙОМКИ ПІДТВЕРДЖЕНО", + "2021 historical reference versus 2026 post-event imagery; changes are cumulative and include the July 2025 Rasuwagadhi flood. Schematic downstream progression, not modeled arrival time; not an official hazard model.": "Історичний знімок 2021 року порівняно зі знімками 2026 року після події; зміни показано сумарно за весь період, вони охоплюють і паводок у Rasuwagadhi в липні 2025 року. Схематичне просування вниз за течією, а не змодельований час добігання паводка; не офіційна модель небезпеки.", + "Immediate collapse viewpoint": "Точка огляду біля місця обвалу", + "Collapse viewpoint": "Вигляд на обвал", + "Debris-dammed lake": "Озеро, загачене уламками", + "Dammed lake": "Загачене озеро", + "Second landslide": "Другий зсув", + "Gyirong border gate": "Прикордонний перехід Gyirong", + "Border gate": "Прикордонний перехід", + "Timure evidence cluster": "Група свідчень біля Timure", + "Mailung / Upper Trishuli bridge": "Mailung / міст Upper Trishuli", + "Dandagaun viewpoint restaurant": "Ресторан з оглядовим майданчиком, Dandagaun", + "Dandagaun viewpoint": "Оглядовий майданчик Dandagaun", + "Bidur - Trishuli bridge": "Міст Bidur — Trishuli", + "Bidur bridge": "Міст Bidur", + "Devighat / Taadi Khola Bridge": "Devighat / міст Taadi Khola", + "Devighat bridge": "Міст Devighat", + "Facebook player API did not initialize.": "API плеєра Facebook не ініціалізувався.", + "Facebook player API could not load.": "Не вдалося завантажити API плеєра Facebook.", + "Facebook player API timed out.": "Минув час очікування API плеєра Facebook.", + "X embed API did not initialize.": "API вбудовування X не ініціалізувався.", + "X embed could not load.": "Не вдалося завантажити вбудовування X.", + "X embed timed out.": "Минув час очікування вбудовування X.", "UNAVAILABLE": "НЕДОСТУПНО", + "TIMEOUT": "ТАЙМАУТ", + "BLOCKED": "ЗАБЛОКОВАНО", "SOURCE": "ДЖЕРЕЛО", + "Facebook embed unavailable. The post may be private, removed, region-restricted, or blocked.": "Вбудовування Facebook недоступне. Допис може бути приватним, видаленим, обмеженим за регіоном або заблокованим.", + "Preloading {provider} media": "Попереднє завантаження медіа {provider}", + "LOADING X POST…": "ЗАВАНТАЖЕННЯ ДОПИСУ X…", + "The X post is unavailable or cannot be embedded.": "Допис X недоступний або його не можна вбудувати.", + "X POST · PROVIDER CONTROLS": "ДОПИС X · ВБУДОВАНИЙ ВІДЖЕТ", + "{reason} OPEN ORIGINAL.": "{reason} ВІДКРИЙТЕ ОРИГІНАЛ.", + "X embed unavailable": "Вбудовування X недоступне", + "FACEBOOK · PROVIDER CONTROLS": "FACEBOOK · ВБУДОВАНИЙ ПЛЕЄР", + "Facebook embed unavailable": "Вбудовування Facebook недоступне", + "AUTOPLAY BLOCKED · USE PROVIDER CONTROLS": "АВТОВІДТВОРЕННЯ ЗАБЛОКОВАНО · ЗАПУСТІТЬ У ПЛЕЄРІ", + "Embedded {provider} media for {source}": "Вбудоване медіа {provider}: {source}", + "witness source": "свідчення очевидця", + "Witness source": "Свідчення очевидця", + "{provider} · EMBEDDED SOURCE": "{provider} · ВБУДОВАНЕ ДЖЕРЕЛО", + "OPEN ORIGINAL ↗": "ВІДКРИТИ ОРИГІНАЛ ↗", + "{provider} media: {source}": "Медіа {provider}: {source}", + "{provider} · PROVIDER CONTROLS": "{provider} · ВБУДОВАНИЙ ПЛЕЄР", + "YOUTUBE {state} · OPEN ORIGINAL": "YOUTUBE {state} · ВІДКРИТИ ОРИГІНАЛ", + "INITIATION": "ЗАРОДЖЕННЯ", + "DAMMING": "ЗАГАТА", + "SECONDARY FAILURE": "ВТОРИННИЙ ПРОРИВ", + "BORDER ARRIVAL": "ДОСЯГНЕННЯ КОРДОНУ", + "PROPAGATION": "ПОШИРЕННЯ", + "DOWNSTREAM PASSAGE": "ПРОХОДЖЕННЯ ВНИЗ ЗА ТЕЧІЄЮ", + "CONSEQUENCE": "НАСЛІДКИ", + "DOWNSTREAM CONSEQUENCE": "НАСЛІДКИ НИЖЧЕ ЗА ТЕЧІЄЮ", + "EVIDENCE": "СВІДЧЕННЯ", + "{year} HISTORICAL REFERENCE": "{year} ІСТОРИЧНИЙ ЗНІМОК", + "{year} POST-EVENT": "{year} ПІСЛЯ ПОДІЇ", + "{count} GEOLOCATED SOURCE-MAP PLACEMENTS": { + "one": "{count} ГЕОПРИВʼЯЗАНА МІТКА НА КАРТІ ДЖЕРЕЛ", + "few": "{count} ГЕОПРИВʼЯЗАНІ МІТКИ НА КАРТІ ДЖЕРЕЛ", + "many": "{count} ГЕОПРИВʼЯЗАНИХ МІТОК НА КАРТІ ДЖЕРЕЛ", + "other": "{count} ГЕОПРИВʼЯЗАНОЇ МІТКИ НА КАРТІ ДЖЕРЕЛ" + }, + "NO PREVIEW": "НЕМАЄ ПОПЕРЕДНЬОГО ПЕРЕГЛЯДУ", + "YouTube source": "Джерело YouTube", + "Facebook source": "Джерело Facebook", + "SOURCE LINK": "ПОСИЛАННЯ НА ДЖЕРЕЛО", + "{publisher} / OPEN": "{publisher} / ВІДКРИТИ", + "Bhote Koshi flood reconstruction controls": "Керування реконструкцією паводка на Bhote Koshi", + "EVENT RECONSTRUCTION · 26 AUG 2026": "РЕКОНСТРУКЦІЯ ПОДІЇ · 26 СЕРП. 2026", + "BHOTE KOSHI OUTBURST FLOOD": "ПРОРИВНИЙ ПАВОДОК НА BHOTE KOSHI", + "Close event layer": "Закрити шар події", + "OBSERVED IMAGERY": "ФАКТИЧНІ ЗНІМКИ", + "SCHEMATIC CORRIDOR": "СХЕМАТИЧНИЙ КОРИДОР", + "2021 HISTORICAL REFERENCE / 2026 POST-EVENT": "2021 ІСТОРИЧНИЙ ЗНІМОК / 2026 ПІСЛЯ ПОДІЇ", + "Historical reference and post-event image split": "Порівняння історичного знімка та знімка після події", + "RECONSTRUCTION CLOCK": "ЧАС РЕКОНСТРУКЦІЇ", + "Schematic downstream progression": "Схематичне просування вниз за течією", + "Story beat navigation": "Навігація етапами сюжету", + "Previous story beat": "Попередній етап сюжету", + "CAUSE": "ПРИЧИНА", + "CAPTURE TIME UNVERIFIED": "ЧАС ЗЙОМКИ НЕ ПІДТВЕРДЖЕНО", + "Next story beat": "Наступний етап сюжету", + "▶ PLAY": "▶ ПУСК", + "Play the next shot and continue through this scene": "Відтворити наступний кадр і продовжити цю сцену", + "▶ PLAY SCENE": "▶ ПУСК СЦЕНИ", + "◉ CINEMATIC": "◉ КІНОРЕЖИМ", + "↺ FULL STORY": "↺ УСЯ ІСТОРІЯ", + "↗ OPEN ORIGINAL": "↗ ОРИГІНАЛ", + "⌖ LOWER GORGE": "⌖ НИЖНЯ УЩЕЛИНА", + "FIELD REPORTS · {count}": "ПОВІДОМЛЕННЯ З МІСЦЯ · {count}", + "GEOLOCATIONS · {credit}": "ГЕОЛОКАЦІЇ · {credit}", + "↗ OPEN PUBLIC MAP": "↗ ВІДКРИТИ ПУБЛІЧНУ КАРТУ", + " Clouds are preserved from the source imagery.": " Хмари залишено такими, як на вихідних знімках.", + "Rasuwagadhi witness": "Очевидець у Rasuwagadhi", + "Open original source for {source}; capture time unverified": "Відкрити оригінал: {source}; час зйомки не підтверджено", + "Historical reference and post-event image divider": "Роздільник історичного знімка та знімка після події", + "A historical reference {before} percent, B post-event {after} percent": "A — історичний знімок: {before}%, B — після події: {after}%", + "■ RELEASE CAMERA": "■ ЗВІЛЬНИТИ КАМЕРУ", + "Seek Nepal scene clock": "Перемотування часу сцени в Непалі", + "NEPAL SCENE CLOCK": "ЧАС СЦЕНИ В НЕПАЛІ", + "… PLAYING SHOT": "… ЙДЕ КАДР", + "▶ PLAY SHOT": "▶ ПУСК КАДРУ", + "Ⅱ PAUSE": "Ⅱ ПАУЗА", + "↺ REPLAY CINEMATIC": "↺ ПОВТОРИТИ КІНОРЕЖИМ", + "↺ REPLAY": "↺ ПОВТОРИТИ", + "… PLAYING SCENE": "… ЙДЕ СЦЕНА", + "Continue {scene} from next shot": "Продовжити з наступного кадру: {scene}", + "current scene": "поточна сцена", + "Replay the full reconstruction": "Повторити всю реконструкцію", + "SCENE SHOT": "КАДР СЦЕНИ", + "TIME UNVERIFIED": "ЧАС НЕ ПІДТВЕРДЖЕНО", + "{count} SOURCES": { + "one": "{count} ДЖЕРЕЛО", + "few": "{count} ДЖЕРЕЛА", + "many": "{count} ДЖЕРЕЛ", + "other": "{count} ДЖЕРЕЛА" + }, + "OUTSIDE IMAGERY SWIPE": "ПОЗА ПОРІВНЯННЯМ ЗНІМКІВ", + "{scene} / AUTHORED SHOT": "{scene} / АВТОРСЬКИЙ КАДР", + "NEPAL FLOOD INCIDENT": "ПАВОДОК У НЕПАЛІ", + "Play {shot}": "Відтворити: {shot}", + "current scene shot": "поточний кадр сцени", + "Play reconstruction": "Відтворити реконструкцію", + "Load previous scene shot": "Завантажити попередній кадр сцени", + "Load next scene shot": "Завантажити наступний кадр сцени", + "SCHEMATIC CORRIDOR, NOT MODELED ARRIVAL TIME.": "СХЕМАТИЧНИЙ КОРИДОР, А НЕ МОДЕЛЬ ЧАСУ ДОБІГАННЯ ПАВОДКА.", + "Rasuwa · 26 Aug 2026": "Rasuwa · 26 серп. 2026", + "Event reconstruction": "Реконструкція події", + "BHOTE KOSHI FLOOD INCIDENT": "ПАВОДОК НА BHOTE KOSHI", + "NEPAL · 26 AUG 2026": "НЕПАЛ · 26 СЕРП. 2026", + "USGS INITIAL REPORT": "ПЕРВИННЕ ПОВІДОМЛЕННЯ USGS", + "26 AUG 2026 · 08:37 NPT": "26 СЕРП. 2026 · 08:37 NPT", + "28.2710° N · 85.5150° E": "28,2710° ПН. Ш. · 85,5150° СХ. Д.", + "INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "СПОЧАТКУ M4,4 · ПЕРЕКЛАСИФІКОВАНО: ЗСУВ M5,2", + "USGS EVENT us7000tbwb · OPEN SOURCE": "ПОДІЯ USGS us7000tbwb · ВІДКРИТИ ДЖЕРЕЛО", + "Open the USGS initial report for the 26 August 2026 Nepal landslide": "Відкрити первинне повідомлення USGS про зсув у Непалі 26 серпня 2026 року", + "Show the Nepal context callout without a border or country fill": "Показати виноску з контекстом Непалу без кордону та заливки країни", + "Introduce Nepal, draw its border, then reveal the Bhote Koshi incident": "Представити Непал, намалювати його кордон, потім показати подію на Bhote Koshi", + "CITIES": "МІСТА", + "Keep the regional incident context and introduce nearby city labels": "Зберегти регіональний контекст події та додати підписи найближчих міст", + "PLACES": "МІСЦЯ", + "Introduce the reconstruction scene key places from trigger to downstream": "Показати ключові місця сцени реконструкції — від першопричини до пониззя", + "PATH": "ШЛЯХ", + "Animate the sourced cyan river-centerline route to Trishuli Bazaar": "Анімувати блакитний маршрут віссю річки до Trishuli Bazaar за даними джерел", + "OVERVIEW": "ОГЛЯД", + "Keep the completed flood path and location labels visible": "Залишити на екрані весь шлях паводка й підписи місць", + "RECORD": "ЗАПИС", + "Reveal the trigger record while making a slow camera approach": "Показати запис про першопричину під час повільного наближення камери", + "{speed} kn": "{speed} вуз", + "That file is not valid JSON.": "Цей файл — некоректний JSON.", + "That JSON file is not GeoJSON.": "Цей файл JSON не є GeoJSON.", + "That FeatureCollection has no features list.": "У цій FeatureCollection немає списку features.", + "Every GeoJSON feature must have type Feature.": "Кожен обʼєкт GeoJSON повинен мати тип Feature.", + "That GeoJSON has invalid geometries.": "У цьому GeoJSON некоректні геометрії.", + "That GeoJSON contains an unsupported geometry.": "У цьому GeoJSON є непідтримувана геометрія.", + "That GeoJSON has invalid coordinates.": "У цьому GeoJSON некоректні координати.", + "That file creates more than {limit} map objects (the limit).": "Файл створює більше обʼєктів на карті, ніж дозволяє ліміт: {limit}.", + "That file has more than {limit} style definitions and image links after cleanup (the limit).": "Після очищення у файлі більше стилів і посилань на зображення, ніж дозволяє ліміт: {limit}.", + "That file has more than {limit} features (the limit).": "У файлі більше обʼєктів, ніж дозволяє ліміт: {limit}.", + "That file has more than {limit} points (the limit) across {features} features.": "У файлі більше точок, ніж дозволяє ліміт: {limit} (обʼєктів: {features}).", + "That file has more than {limit} points (the limit).": "У файлі більше точок, ніж дозволяє ліміт: {limit}.", + "That KMZ unpacks to more than the import limit.": "Після розпакування цей KMZ перевищує ліміт імпорту.", + "That KMZ is damaged and could not be unpacked.": "Цей KMZ пошкоджений, розпакувати його не вдалося.", + "That KMZ is not a readable zip archive.": "Цей KMZ — не придатний для читання zip-архів.", + "That KMZ uses a zip format this import does not read.": "Цей KMZ використовує формат zip, який імпорт не читає.", + "That KMZ is encrypted.": "Цей KMZ зашифровано.", + "That KMZ uses a compression method this import does not read.": "Цей KMZ використовує метод стиснення, який імпорт не читає.", + "That KML has invalid geometry bounds.": "У цьому KML некоректні межі геометрії.", + "That KML has invalid coordinates.": "У цьому KML некоректні координати.", + "That GPX file has no document.": "У цьому файлі GPX немає документа .", + "That {format} file is not valid XML.": "Цей файл {format} — некоректний XML.", + "That file has an unreadable image or exceeds the 16-megapixel image limit.": "У файлі є непридатне для читання зображення або зображення, більше за ліміт 16 мегапікселів.", + "That KML could not be read.": "Не вдалося прочитати цей KML.", + "That file has invalid point coordinates.": "У файлі некоректні координати точок.", + "Ground heights are not available for that file. Try again when the map has loaded.": "Висоти рельєфу для цього файлу недоступні. Спробуйте ще раз, коли карта завантажиться.", + "That file took too long to read.": "Файл читався надто довго.", + "Nothing to import.": "Немає чого імпортувати.", + "That file is larger than {size} MiB.": "Файл більший за {size} МіБ.", + "Only GeoJSON, KML, KMZ and GPX files can be imported.": "Імпортувати можна лише файли GeoJSON, KML, KMZ і GPX.", + "That file has nothing to draw.": "У файлі немає нічого для показу на карті.", + "That KMZ holds no KML document.": "У цьому KMZ немає документа KML.", + "That {format} file could not be read.": "Не вдалося прочитати цей файл {format}.", + "That file has {count} map objects; the limit is {limit}.": "Обʼєктів на карті у файлі: {count}; ліміт: {limit}.", + "Ground heights could not be read. Try that file again.": "Не вдалося отримати висоти рельєфу. Спробуйте імпортувати файл ще раз.", + "That file has invalid point graphics.": "У файлі некоректне оформлення точок.", "Overpass rate-limited": "Overpass обмежує частоту запитів", - "Overpass timed out": "Перевищено час очікування Overpass", + "Overpass timed out": "Минув час очікування Overpass", "Overpass could not complete the query": "Overpass не зміг завершити запит", + "Map tiles temporarily unavailable": "Тайли карти тимчасово недоступні", + "Mapped names temporarily unavailable": "Назви обʼєктів тимчасово недоступні", "Overpass temporarily unavailable": "Overpass тимчасово недоступний", - "Retrying mapped sites…": "Повторне завантаження нанесених об’єктів…", - "Fetching mapped sites…": "Завантаження нанесених об’єктів…", + "Retrying mapped sites…": "Повторне завантаження нанесених обʼєктів…", + "Fetching mapped sites…": "Завантаження нанесених обʼєктів…", "{reason} — retrying in {seconds}s": "{reason} — повтор через {seconds} с", "{reason} — retry pending": "{reason} — очікується повтор", - "Zoom in to search mapped installations": "Наблизьте карту, щоб шукати нанесені об’єкти", - "Showing cached mapped sites": "Показано кешовані нанесені об’єкти", - "Mapped sites not loaded": "Нанесені об’єкти не завантажено", - "Mapped sites loaded": "Нанесені об’єкти завантажено", - "feed unavailable": "канал даних недоступний", - "feed stale": "канал даних застарів", + "Zoom in to search mapped installations": "Наблизьте карту, щоб шукати нанесені обʼєкти", + "Showing cached mapped sites": "Показано кешовані нанесені обʼєкти", + "Mapped sites not loaded": "Нанесені обʼєкти не завантажено", + "Mapped sites loaded": "Нанесені обʼєкти завантажено", + "Military airfield": "Військовий аеродром", + "Naval base": "Військово-морська база", + "Firing range": "Стрільбище", + "Military land": "Військова територія", + "Mapped installation": "Обʼєкт на карті", + "Military area": "Військова зона", + "flight": "рейс", + "military flight": "військовий рейс", + "satellite": "супутник", + "feed unavailable": "потік даних недоступний", + "feed stale": "потік даних застарів", "observed or mapped nearby context": "спостережений або нанесений контекст поблизу", - "no observed or mapped objects in current feeds": "немає спостережених або нанесених об’єктів у поточних каналах даних", + "no observed or mapped objects in current feeds": "немає спостережених або нанесених обʼєктів у поточних потоках даних", + "Draw": "Малювання", + "Directions": "Маршрути", + "Recent imagery": "Свіжі знімки", "STATION": "СТАНЦІЇ", "Crewed stations and their visiting vehicles": "Пілотовані станції та кораблі відвідування", "NAV": "НАВ", "GNSS navigation — GPS, GLONASS, Galileo": "Навігація GNSS — GPS, GLONASS, Galileo", "GEO": "ГЕО", - "Geostationary belt — comms and weather, fixed over the equator": "Геостаціонарний пояс — зв’язок і погода, нерухомо над екватором", + "Geostationary belt — comms and weather, fixed over the equator": "Геостаціонарний пояс — звʼязок і погода, нерухомо над екватором", "VISUAL": "ВИДИМІ", - "Brightest naked-eye objects — CelesTrak visual group": "Найяскравіші об’єкти для неозброєного ока — група visual CelesTrak", - "COMMS": "ЗВ’ЯЗОК", + "Brightest naked-eye objects — CelesTrak visual group": "Найяскравіші обʼєкти для неозброєного ока — група visual CelesTrak", + "COMMS": "ЗВʼЯЗОК", "Broadband constellation shell — shown only in DENSE mode": "Оболонка широкосмугового угруповання — лише в режимі ЩІЛЬНО", "FISHING": "РИБАЛЬСЬКЕ", "TOWING": "БУКСИРУВАННЯ", - "DREDGER": "ДНОПОГЛИБ.", - "DIVE OPS": "ВОДОЛАЗНІ РОБОТИ", + "DREDGER": "ЗЕМСНАРЯД", + "DIVE OPS": "ВОДОЛАЗНЕ", "MILITARY": "ВІЙСЬКОВЕ", "SAILING": "ВІТРИЛЬНЕ", "PLEASURE": "ПРОГУЛКОВЕ", "PILOT": "ЛОЦМАН", - "SAR": "SAR", + "SAR": "РЯТУВАЛЬНЕ", "TUG": "БУКСИР", "PORT TENDER": "ПОРТОВИЙ КАТЕР", - "ANTI-POLLUTION": "АНТИЗАБРУДНЕННЯ", - "LAW ENFORCE": "ПРАВООХОРОНА", + "ANTI-POLLUTION": "НАФТОЗБИРАЛЬНЕ", + "LAW ENFORCE": "ПАТРУЛЬНЕ", "MEDICAL": "МЕДИЧНЕ", "HIGH-SPEED": "ШВИДКІСНЕ", "PASSENGER": "ПАСАЖИРСЬКЕ", "CARGO": "ВАНТАЖНЕ", "TANKER": "ТАНКЕР", "OTHER": "ІНШЕ", + "Included in bundle": "Входить до архіву", + "Missing bundle file — reimport its bundle": "Файлу немає в архіві — імпортуйте цей архів знову", + "Source configured; file checked when loaded": "Джерело налаштовано; файл буде перевірено під час завантаження", + "Source unavailable": "Джерело недоступне", "ENVIRONMENTAL": "ДОВКІЛЛЯ", "EARTH WATCH": "НАГЛЯД ЗА ЗЕМЛЕЮ", "ACTIVE EVENTS": "АКТИВНІ ПОДІЇ", @@ -65,107 +313,509 @@ "Working…": "Працюємо…", "Could not open that mission{detail}. Retry or explore manually.": "Не вдалося відкрити цю місію{detail}. Повторіть спробу або дослідіть вручну.", "This browser is blocking storage, so that could not be saved.": "Цей браузер блокує сховище, тож зберегти не вдалося.", + "NORMAL": "ЗВИЧАЙНИЙ", "CRT": "CRT", "NVG": "NVG", "FLIR": "FLIR", + "ANIME": "АНІМЕ", + "NOIR": "НУАР", "SNOW": "СНІГ", + "ARCTIC": "АРКТИКА", + "ANTARCTIC": "АНТАРКТИКА", + "NORTH AMERICA": "ПІВНІЧНА АМЕРИКА", + "SOUTH AMERICA": "ПІВДЕННА АМЕРИКА", + "EUROPE": "ЄВРОПА", + "AFRICA": "АФРИКА", + "ASIA": "АЗІЯ", + "OCEANIA": "ОКЕАНІЯ", + "NORTHERN OCEANIC GRID": "ПІВНІЧНА ОКЕАНСЬКА СІТКА", + "SOUTHERN OCEANIC GRID": "ПІВДЕННА ОКЕАНСЬКА СІТКА", "LOADING": "ЗАВАНТАЖЕННЯ", - "DEGRADED": "ДЕГРАД.", + "DEGRADED": "ПЕРЕБОЇ", "STALE": "ЗАСТАРІЛО", + "PARTIAL": "ЧАСТКОВО", "FALLBACK": "РЕЗЕРВ", + "{state} {layers}": "{state}: {layers}", + "view band|STREET": "ВУЛИЦЯ", + "view band|CITY": "МІСТО", + "view band|METRO": "АГЛОМЕРАЦІЯ", + "view band|REGIONAL": "РЕГІОН", + "view band|GLOBAL": "ПЛАНЕТА", "SUMMARY": "ЗВЕДЕННЯ", "Awaiting telemetry...": "Очікування телеметрії...", "REC": "REC", "AIS: --": "AIS: --", + "N/A": "Н/Д", + "{mode} {band} {locality} | {region} | ALT {alt} | WINDOW {window} | SUN {sun}° | ONA {ona}° | {zone}": "{mode} · {band} · {locality} | {region} | ALT {alt} | ВІКНО {window} | SUN {sun}° | ONA {ona}° | {zone}", + "NEAR {poi} ({city}) {distance}": "ПОРУЧ: {poi} ({city}) {distance}", + "SECTOR {lat} {lon}": "СЕКТОР {lat} {lon}", + "hemisphere|N": "Пн", + "hemisphere|S": "Пд", + "hemisphere|E": "Сх", + "hemisphere|W": "Зх", "POWER UP · {count} KEYS WAITING": { - "one": "ЗАПУСК · {count} ключ у черзі", - "few": "ЗАПУСК · {count} ключі в черзі", - "many": "ЗАПУСК · {count} ключів у черзі", - "other": "ЗАПУСК · {count} ключа в черзі" + "one": "ЗАПУСК · {count} КЛЮЧ У ЧЕРЗІ", + "few": "ЗАПУСК · {count} КЛЮЧІ В ЧЕРЗІ", + "many": "ЗАПУСК · {count} КЛЮЧІВ У ЧЕРЗІ", + "other": "ЗАПУСК · {count} КЛЮЧА В ЧЕРЗІ" }, "POWERED UP": "ЗАПУЩЕНО", + "Provider Settings does not answer proxied requests": "«Налаштування постачальників» не відповідають на запити через проксі", + "Provider Settings is disabled while sharing is enabled": "«Налаштування постачальників» вимкнено, доки ввімкнено спільний доступ", + "Provider Settings answers only the machine running the server": "«Налаштування постачальників» відповідають лише компʼютеру, на якому запущено сервер", + "Provider Settings answers only local hostnames": "«Налаштування постачальників» відповідають лише на локальні імена хостів", + "Provider Settings requires an exact local Origin": "«Налаштуванням постачальників» потрібен точний локальний Origin", + "Unrecognized Origin refused": "Нерозпізнаний Origin відхилено", + "Cross-origin requests are refused": "Запити з іншого джерела відхиляються", + "Content-Type must be application/json": "Content-Type має бути application/json", + "Method not allowed": "Метод не дозволено", + "Request too large": "Надто великий запит", + "Invalid JSON": "Некоректний JSON", + "Body must be a JSON object of {ENV_VAR: value}": "Тіло запиту має бути JSON-обʼєктом вигляду {ENV_VAR: value}", + "No keys provided": "Ключі не передано", + "At most {limit} keys per save": "Ключів за одне збереження — не більше {limit}", + "Unknown key: {name}": "Невідомий ключ: {name}", + "{name} must be a string": "{name}: значення має бути рядком", + "{name} is empty": "{name}: порожнє значення", + "{name} is longer than any real key ({limit} max)": "{name}: значення довше за будь-який справжній ключ (максимум {limit})", + "{name} may only contain printable characters with no spaces": "{name}: допустимі лише друковані символи без пробілів", + "{name} contains a character that is not valid in a key (#, quotes, $, \\, or backtick)": "{name}: недопустимий для ключа символ (#, лапки, $, \\ або зворотний апостроф)", + "{name} is configured outside Provider Settings and can only be changed where it was set": "{name}: задано поза «Налаштуваннями постачальників», змінити його можна лише там, де його задали", + "The key was not saved: could not restrict the credential file to your account; nothing was saved": "Ключ не збережено: не вдалося закрити файл облікових даних від усіх, крім вашого облікового запису; нічого не збережено", + "The key was not saved: the existing configuration could not be read, so nothing was changed": "Ключ не збережено: не вдалося прочитати поточну конфігурацію, тому нічого не змінено", + "Could not write the {store} store": "Не вдалося записати сховище {store}", "Save failed ({status}).": "Не вдалося зберегти ({status}).", + "OAuth check failed: {detail}": "Не вдалося перевірити OAuth: {detail}", + "Could not check ChatGPT sign-in. Try again.": "Не вдалося перевірити вхід у ChatGPT. Спробуйте ще раз.", + "VOICE AUTH · CHATGPT OAUTH": "ГОЛОС: АВТОРИЗАЦІЯ · CHATGPT OAUTH", + "VOICE AUTH · API KEY": "ГОЛОС: КЛЮЧ API", + "USE API KEY": "ВИКОРИСТАТИ КЛЮЧ API", + "USE CHATGPT OAUTH": "ВИКОРИСТАТИ CHATGPT OAUTH", + "Use OPENAI_API_KEY for the next cloud voice session": "Використати OPENAI_API_KEY для наступної хмарної голосової сесії", + "Use the signed-in local ChatGPT/Codex OAuth session for the next cloud voice session": "Використати локальну OAuth-сесію ChatGPT/Codex, у яку виконано вхід, для наступної хмарної голосової сесії", + "Metered — a billing-enabled account": "Платний — потрібен обліковий запис з увімкненою оплатою", + "Optional paid token — public access works without one": "Необовʼязковий платний токен — публічний доступ працює без нього", + "Free key — register, paste, done": "Безкоштовний ключ — зареєструйтеся, вставте, готово", + "browser-side": "у браузері", + "This key runs in the browser by design — restrict it at the provider (see SECURITY.md)": "Цей ключ за задумом працює в браузері — обмежте його в постачальника (див. SECURITY.md)", + "configured externally": "задано ззовні", + "Supplied by your environment, Keychain, or launcher — change it where it was set": "Задано середовищем, Keychain або лаунчером — змінюйте його там, де його задано", + "MANAGE ↗": "КЕРУВАТИ ↗", + "GET KEY ↗": "ОТРИМАТИ КЛЮЧ ↗", + "{envVar} saved — paste to replace": "{envVar} збережено — вставте, щоб замінити", + "paste {envVar}": "вставте {envVar}", "REMOVE": "ВИДАЛИТИ", - "Remove {title} from this app's saved keys": "Видалити {title} із збережених ключів застосунку", + "Remove {title} from this app's saved keys": "Видалити {title} зі збережених ключів застосунку", + "unsaved provider keys": "незбережені ключі постачальників", + "Project keys: {status}": "Ключі проєкту: {status}", "your app configuration": "вашої конфігурації застосунку", "your local .env": "вашого локального .env", "Saving…": "Збереження…", "Save failed: {detail}": "Не вдалося зберегти: {detail}", "Paste at least one key first.": "Спочатку вставте принаймні один ключ.", - "Saved to {store}. Restarting — this page reloads itself.": "Збережено до {store}. Перезапуск — сторінка перезавантажиться сама.", + "Saved to {store}. Restarting — this page reloads itself.": "Збережено в {store}. Перезапуск — сторінка перезавантажиться сама.", + "Cloud voice will use OPENAI_API_KEY on the next session.": "Наступна хмарна голосова сесія використовуватиме OPENAI_API_KEY.", + "Checking local ChatGPT OAuth sign-in…": "Перевірка локального входу в ChatGPT через OAuth…", + "Could not check ChatGPT sign-in.": "Не вдалося перевірити вхід у ChatGPT.", + "ChatGPT OAuth selected for cloud voice. Your API key stays saved and available.": "Для хмарного голосу вибрано ChatGPT OAuth. Ваш ключ API залишається збереженим і доступним.", + "ChatGPT sign-in expired. Opening sign-in again…": "Сеанс ChatGPT завершився. Знову відкриваємо вхід…", + "Opening ChatGPT sign-in in your browser…": "Відкриваємо вхід у ChatGPT у браузері…", + "Could not start ChatGPT sign-in on this machine.": "Не вдалося почати вхід у ChatGPT на цьому компʼютері.", + "Finish ChatGPT sign-in in the browser. Waiting for it to complete…": "Завершіть вхід у ChatGPT у браузері. Очікування завершення…", + "ChatGPT sign-in timed out. Click {button} to try again.": "Час на вхід у ChatGPT минув. Натисніть «{button}», щоб спробувати ще раз.", + "ChatGPT sign-in complete. OAuth will be used for the next cloud voice session.": "Вхід у ChatGPT виконано. У наступній хмарній голосовій сесії використовуватиметься OAuth.", "Remove this key from your saved configuration?": "Видалити цей ключ із вашої збереженої конфігурації?", "Removed from {store}. Restarting — this page reloads itself.": "Видалено з {store}. Перезапуск — сторінка перезавантажиться сама.", - "Places context + Street View fallback; optional separate key": "Контекст Places + резервний Street View; окремий ключ за бажанням", + "The photorealistic 3D planet, place search + Street View": "Фотореалістична 3D-планета, пошук місць + Перегляд вулиць", + "Places context + Street View fallback; optional separate key": "Контекст Places + резерв: Перегляд вулиць; окремий ключ — за бажанням", + "Voice control — API key or ChatGPT OAuth": "Голосове керування — ключ API або ChatGPT OAuth", + "Gemini Live voice control": "Голосове керування через Gemini Live", "Live ships, worldwide": "Судна в реальному часі по всьому світу", "Live active-fire detections": "Виявлення активних пожеж у реальному часі", - "Real live traffic (keyless runs a simulation)": "Справжній трафік у реальному часі (без ключа — симуляція)", - "Bing imagery map stacks + world terrain": "Стеки карт Bing imagery + світовий рельєф", - "More flight-polling credits (anonymous works without)": "Більше кредитів опитування польотів (працює й анонімно)", + "Real live traffic (keyless runs a simulation)": "Справжні затори в реальному часі (без ключа — імітація)", + "Bing imagery map stacks + world terrain": "Знімки Bing + рельєф світу", + "More flight-polling credits (anonymous works without)": "Вищий ліміт запитів рейсів (анонімно працює й без ключа)", + "Street-level imagery and coverage in the Street Level layer. Free: register an app in the Mapillary developer dashboard and paste its Client Token": "Вуличні знімки й покриття в шарі «Вуличні знімки». Безкоштовно: зареєструйте застосунок у панелі розробника Mapillary і вставте його клієнтський токен (Client Token)", + "Public space-missions access needs no key. Leave blank for standard use; paid tokens only raise request limits.": "Загальнодоступні дані космічних місій не потребують ключа. Для звичайного використання залиште поле порожнім; платні токени лише підвищують ліміти запитів.", + "Air quality request failed": "Не вдалося запитати дані про якість повітря", + "No readings available": "Немає доступних показів", + "No current readings": "Немає актуальних показів", + "{count} stations reporting": { + "one": "{count} станція передає дані", + "few": "{count} станції передають дані", + "many": "{count} станцій передають дані", + "other": "{count} станції передають дані" + }, + "Highest air-quality readings in view": "Найвищі показники якості повітря в полі зору", + "Low": "Низький", + "Low health risk": "Низький ризик для здоровʼя", + "Moderate": "Помірний", + "Moderate health risk": "Помірний ризик для здоровʼя", + "High": "Високий", + "High health risk": "Високий ризик для здоровʼя", + "Very High": "Дуже високий", + "Very High health risk": "Дуже високий ризик для здоровʼя", + "Air quality": "Якість повітря", + "Canada only · ECCC AQHI network": "Лише Канада · мережа AQHI ECCC", + "ECCC request timed out": "Минув час очікування запиту до ECCC", + "Malformed AQHI station response": "Некоректна відповідь зі станціями AQHI", + "No AQHI stations available": "Немає доступних станцій AQHI", + "Malformed AQHI observation response": "Некоректна відповідь зі спостереженнями AQHI", + "Camera source temporarily unavailable": "Джерело камер тимчасово недоступне", + "Mapped camera locations": "Розташування камер на карті", + "SHOW NEAREST": "ПОКАЗАТИ НАЙБЛИЖЧУ", + "Stop following the current object before navigating to a camera": "Припиніть стежити за поточним обʼєктом, перш ніж переходити до камери", + "Move to the nearest loaded camera and show its details": "Перейти до найближчої завантаженої камери й показати її дані", + "Camera badges": "Значки камер", + "Cyan cameras turn coral when selected. Wedges illustrate mapped direction, not measured coverage. Nearby cameras may be outside the screen.": "Блакитні камери після вибору стають кораловими. Сектори показують напрямок за картою, а не виміряне покриття. Найближчі камери можуть бути за межами екрана.", + "{count} nearby · {onScreen} on screen": { + "one": "поруч: {count} · на екрані: {onScreen}", + "few": "поруч: {count} · на екрані: {onScreen}", + "many": "поруч: {count} · на екрані: {onScreen}", + "other": "поруч: {count} · на екрані: {onScreen}" + }, + "{count} nearby": { + "one": "поруч: {count}", + "few": "поруч: {count}", + "many": "поруч: {count}", + "other": "поруч: {count}" + }, + "retrying mapped ALPR cameras": "повторне завантаження камер ALPR", + "loading mapped ALPR cameras": "завантаження камер ALPR", + "No ALPR data for this area — US and Canada only": "Немає даних ALPR для цієї області — лише США й Канада", + "Zoom in to load mapped cameras": "Наблизьте карту, щоб завантажити камери", + "Showing cached locations": "Показано місця з кешу", + "Coverage limited — zoom in": "Покриття обмежене — наблизьте карту", + "No ALPR data for this area": "Немає даних ALPR для цієї області", + "None on screen — nearby cameras are outside the view": "На екрані немає — найближчі камери поза полем зору", + "ALPR camera": "Камера ALPR", + "Camera coverage unavailable": "Покриття камер недоступне", + "OpenStreetMap · community mapped": "OpenStreetMap · дані спільноти", + "Overpass returned an incomplete camera response": "Overpass повернув неповну відповідь про камери", + "At least {count}": "Щонайменше {count}", "CONTEXT READY": "КОНТЕКСТ ГОТОВИЙ", "GLOBAL CONTEXT OFF": "ГЛОБАЛЬНИЙ КОНТЕКСТ ВИМК.", - "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "ВИБЕРІТЬ ЛІТАК, СУДНО ЧИ НАНЕСЕНИЙ ОБ’ЄКТ", - "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "УВІМКНІТЬ ДЛЯ ЗАВАНТАЖЕННЯ СПОСТЕРЕЖЕНОЇ / НАНЕСЕНОЇ ОКРУГИ", + "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "ВИБЕРІТЬ ЛІТАК, СУДНО ЧИ НАНЕСЕНИЙ ОБʼЄКТ", + "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "УВІМКНІТЬ, ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНЕ / НАНЕСЕНЕ ПОБЛИЗУ", "Unavailable": "Недоступно", "Focus {label}": "Фокус: {label}", "Global Context navigation": "Навігація глобального контексту", - "Previous — prior visited contact in the 250 km window": "Попередня — вже відвідана ціль у вікні 250 км", - "PREVIOUS": "ПОПЕРЕДНЯ", + "Previous — prior visited contact in the 250 km window": "Назад — попередній відвіданий контакт у вікні 250 км", + "PREVIOUS": "НАЗАД", "FOCUS": "ФОКУС", - "Next — nearest unvisited contact in the 250 km window": "Наступна — найближча невідвідана ціль у вікні 250 км", + "Next — nearest unvisited contact in the 250 km window": "Далі — найближчий невідвіданий контакт у вікні 250 км", "NEXT": "ДАЛІ", - "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Контекст із відкритих джерел (нанесений/спостережений). Відсутність трансляцій, незавантажені ділянки карти або ненанесені об’єкти не є доказом відсутності.", - "HDG {value}°": "HDG {value}°", - "BRG {value}°": "BRG {value}°", - "BRG —": "BRG —", - "CRS {value}°": "CRS {value}°", + "Named areas ({n})": "Іменовані зони ({n})", + "{distance} FLIGHT / VESSEL WINDOW": "РАДІУС РЕЙСІВ / СУДЕН {distance}", + "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Контекст із відкритих джерел (нанесений/спостережений). Відсутність трансляцій, незавантажені ділянки карти або ненанесені обʼєкти не є доказом відсутності.", + "mapped matches within {km} km of the subject": "збіги на карті в радіусі {km} км від обʼєкта", + "none mapped within {km} km; not a complete 250 km survey": "на карті немає в радіусі {km} км; це не повний огляд на 250 км", + "mapped matches from the loaded viewport": "збіги на карті в завантаженій області", + "viewport feed is not a complete 250 km survey": "дані видимої області — не повний огляд на 250 км", + "HDG {value}°": "КУРС {value}°", + "BRG {value}°": "ПЕЛ. {value}°", + "BRG —": "ПЕЛ. —", + "CRS {value}°": "ШЛЯХ {value}°", "CURRENT VIEWPORT ONLY": "ЛИШЕ ПОТОЧНА ОБЛАСТЬ ОГЛЯДУ", - "Flights": "Літаки", - "Military flights": "Військова авіація", + "WITHIN {km} KM": "У РАДІУСІ {km} КМ", + "Flights": "Рейси", + "Military flights": "Військові рейси", "AIS vessels": "Судна AIS", - "Mapped installations": "Нанесені об’єкти", - "syncing {count} city feeds...": "синхронізація каналів даних {count} міст...", + "Mapped installations": "Нанесені обʼєкти", + "syncing {count} city feeds...": "синхронізація міських потоків: {count}...", "scanning nearby systems...": "пошук ближніх систем...", + "GBFS fetch error": "помилка завантаження GBFS", "Station {id}": "Станція {id}", "Station": "Станція", - "🚲 {bikes} avail · {docks} docks · {capacity} cap": "🚲 {bikes} вільно · {docks} доків · {capacity} містк.", + "🚲 {bikes} avail · {docks} docks · {capacity} cap": "🚲 вільно {bikes} · місць {docks} · містк. {capacity}", "⚠️ Not installed": "⚠️ Не встановлено", "⚠️ Not renting": "⚠️ Не видає", "⚠️ Not returning": "⚠️ Не приймає", - "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} КАМЕР ОЧІКУЄ · КАМЕРУ НЕ ВИБРАНО · КЛАЦНІТЬ КАМЕРУ ДЛЯ АКТИВАЦІЇ", + "HDG {value}° (ESTIMATED)": "КУРС {value}° (ОЦІНКА)", + "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "КАМЕР У ГОТОВНОСТІ: {count} · КАМЕРУ НЕ ВИБРАНО · КЛАЦНІТЬ КАМЕРУ ДЛЯ АКТИВАЦІЇ", "No cameras available in catalog.": "У каталозі немає доступних камер.", "{city} CCTV": "CCTV: {city}", - "FOV {value}°": "FOV {value}°", - "COVERAGE {value}km²": "ЗОНА ОГЛЯДУ {value}km²", + "FOV {value}° (DATASHEET)": "ОГЛЯД {value}° (ЗА ПАСПОРТОМ)", + "FOV {value}°": "ОГЛЯД {value}°", + "SPEC FOV {span}° (CAPABILITY)": "ОГЛЯД ЗА ПАСПОРТОМ {span}° (МОЖЛИВОСТІ)", + "COVERAGE {value}km²": "ОХОПЛЕННЯ {value} КМ²", "OVERLAP {count} cams": "ПЕРЕКРИТТЯ {count} КАМ.", "ISOLATED VIEW": "ОКРЕМИЙ ВИГЛЯД", "PROJ MONITOR": "ПРОЄКЦ. МОНІТОР", "PROJ OFF": "ПРОЄКЦ. ВИМК.", "VIEWSHED": "ЗОНА ВИДИМОСТІ", - "CAL {value}": "КАЛ. {value}", + "CAL {value}": "КАЛІБР. {value}", "SRC {value}": "ДЖЕР. {value}", "{value} CONTEXT": "{value} КОНТЕКСТ", + "{spec} · SPECS: CCTV-DATABASE.COM": "{spec} · ХАРАКТЕРИСТИКИ: CCTV-DATABASE.COM", + "Atlantic and eastern/central North Pacific; not worldwide cyclone coverage.": "Атлантика та східна/центральна частина північного Тихого океану; покриття циклонів не глобальне.", + "Cyclone advisories unavailable": "Зведення про циклони недоступні", + "Cyclone data unavailable": "Дані про циклони недоступні", + "Potential tropical cyclone": "Потенційний тропічний циклон", + "Post-tropical cyclone": "Посттропічний циклон", + "Hurricane": "Ураган", + "Tropical storm": "Тропічний шторм", + "Tropical depression": "Тропічна депресія", + "Subtropical storm": "Субтропічний шторм", + "Subtropical depression": "Субтропічна депресія", + "Track and cone match this advisory": "Трек і конус відповідають цьому зведенню", + "Track/cone awaiting advisory {number}": "Трек і конус зʼявляться зі зведенням № {number}", + "Track/cone unavailable": "Трек/конус недоступні", + "Cached advisory · stale source": "Зведення з кешу · джерело застаріло", + "Loading advisories…": "Завантаження зведень…", + "{count} active storms": { + "one": "{count} активний шторм", + "few": "{count} активні шторми", + "many": "{count} активних штормів", + "other": "{count} активного шторму" + }, + "Position as of {time}": "Положення на {time}", + "Maximum sustained wind: {wind} · Pressure: {pressure}": "Макс. стійкий вітер: {wind} · Тиск: {pressure}", + "{name} · {classification} · Advisory {number} · issued {time}": "{name} · {classification} · Зведення № {number} · випущено {time}", + "No active NHC/CPHC systems": "Немає активних систем NHC/CPHC", + "Advisories unavailable": "Зведення недоступні", + "Cyclones · NHC / CPHC": "Циклони · NHC / CPHC", + "Atlantic · E/C Pacific": "Атлантика · сх./центр. Тихий океан", + "{storms} · {name} selected": "{storms} · вибрано {name}", + "Official advisory ↗": "Офіційне зведення ↗", + "Active NHC and CPHC cyclone advisories": "Чинні зведення NHC і CPHC про циклони", + "Wind unavailable": "Вітер: немає даних", + "Advisory center / forecast track": "Центр циклону за зведенням / прогнозний трек", + "Center-track uncertainty cone": "Конус невизначеності треку центру", + "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Виберіть шторм на карті або в списку, щоб виділити його й перемістити до нього камеру. Клацніть на порожньому місці карти, щоб зняти виділення. Контекст зведень NOAA NHC/CPHC. Конус описує невизначеність прогнозного треку центру, а не розмір шторму чи всю зону небезпеки. Підписи прогнозних точок — завчасність джерела в годинах, а не час, розрахований від випуску зведення. Геометрія повторює поверхню; висота не відображає висоту погодних явищ. Звіряйтеся з офіційним зведенням.", + "DRIVE": "АВТО", + "Drive": "Автомобілем", + "WALK": "ПІШКИ", + "Walk": "Пішки", + "BIKE": "ВЕЛО", + "Bike": "Велосипедом", + "rate limited": "перевищено ліміт запитів", + "routing service is rate limited": "сервіс маршрутизації перевищив ліміт запитів", + "route leg too long": "ділянка маршруту надто довга", + "route too long": "маршрут надто довгий", + "{error} — try again in a moment": "{error} — спробуйте ще раз трохи згодом", + "Routing is rate limited — try again in a moment": "Побудова маршруту: перевищено ліміт запитів — спробуйте ще раз трохи згодом", + "Routing unavailable (HTTP {status})": "Побудова маршруту недоступна (HTTP {status})", + "Routing unavailable": "Побудова маршруту недоступна", + "direction|left": "ліворуч", + "direction|right": "праворуч", + "direction|slightly left": "плавно ліворуч", + "direction|slightly right": "плавно праворуч", + "direction|sharply left": "різко ліворуч", + "direction|sharply right": "різко праворуч", + "direction|straight": "прямо", + "direction|around": "у зворотному напрямку", + "fork direction|left": "лівіше", + "fork direction|right": "правіше", + "fork direction|slightly left": "трохи лівіше", + "fork direction|slightly right": "трохи правіше", + "fork direction|sharply left": "лівіше", + "fork direction|sharply right": "правіше", + "fork direction|straight": "прямо", + "lane direction|left": "ліву", + "lane direction|right": "праву", + "lane direction|slightly left": "ліву", + "lane direction|slightly right": "праву", + "lane direction|sharply left": "крайню ліву", + "lane direction|sharply right": "крайню праву", + "lane direction|straight": "середню", + "ordinal|{number}st": "{number}-й", + "ordinal|{number}nd": "{number}-й", + "ordinal|{number}rd": "{number}-й", + "ordinal|{number}th": "{number}-й", + "Head out on {road}": "Почніть рух дорогою {road}", + "Head out": "Почніть рух", + "Arrive at your destination, on the left": "Пункт призначення ліворуч", + "Arrive at your destination, on the right": "Пункт призначення праворуч", + "Arrive at your destination": "Ви прибули до пункту призначення", + "Make a U-turn onto {road}": "Розверніться на {road}", + "Make a U-turn": "Розверніться", + "Continue straight onto {road}": "Продовжуйте рух прямо на {road}", + "Continue straight": "Продовжуйте рух прямо", + "Turn {direction} onto {road}": "Поверніть {direction} на {road}", + "Turn {direction}": "Поверніть {direction}", + "Turn onto {road}": "Поверніть на {road}", + "maneuver|Turn": "Поверніть", + "Continue {direction} onto {road}": "Продовжуйте рух {direction} на {road}", + "Continue {direction}": "Продовжуйте рух {direction}", + "At the end of the road, turn {direction} onto {road}": "Наприкінці дороги поверніть {direction} на {road}", + "At the end of the road, turn {direction}": "Наприкінці дороги поверніть {direction}", + "At the end of the road, continue onto {road}": "Наприкінці дороги продовжуйте рух на {road}", + "At the end of the road, continue": "Наприкінці дороги продовжуйте рух", + "Keep {direction} at the fork onto {road}": "На розвилці тримайтеся {direction}, щоб виїхати на {road}", + "Keep {direction} at the fork": "На розвилці тримайтеся {direction}", + "Continue at the fork onto {road}": "На розвилці продовжуйте рух на {road}", + "Continue at the fork": "На розвилці продовжуйте рух", + "Merge {direction} onto {road}": "Перешикуйтеся {direction} на {road}", + "Merge {direction}": "Перешикуйтеся {direction}", + "Merge onto {road}": "Виїжджайте на {road}", + "maneuver|Merge": "Перешикуйтеся", + "Take the ramp on the {direction} onto {road}": "Зʼїжджайте {direction} на {road}", + "Take the ramp on the {direction}": "Зʼїжджайте {direction}", + "Take the ramp {direction} onto {road}": "Зʼїжджайте {direction} на {road}", + "Take the ramp {direction}": "Зʼїжджайте {direction}", + "Take the ramp onto {road}": "Скористайтеся зʼїздом на {road}", + "Take the ramp": "Скористайтеся зʼїздом", + "Take the exit on the {direction} onto {road}": "Поверніть на зʼїзд {direction} на {road}", + "Take the exit on the {direction}": "Поверніть на зʼїзд {direction}", + "Take the exit {direction} onto {road}": "Поверніть на зʼїзд {direction} на {road}", + "Take the exit {direction}": "Поверніть на зʼїзд {direction}", + "Take the exit onto {road}": "Поверніть на зʼїзд на {road}", + "Take the exit": "Поверніть на зʼїзд", + "At the roundabout, take the {exit} exit onto {road}": "На колі поверніть на {exit} зʼїзд на {road}", + "At the roundabout, take the {exit} exit": "На колі поверніть на {exit} зʼїзд", + "Enter the roundabout onto {road}": "Вʼїжджайте на коло, виїзд на {road}", + "Enter the roundabout": "Вʼїжджайте на коло", + "At the roundabout, turn {direction} onto {road}": "На колі поверніть {direction} на {road}", + "At the roundabout, turn {direction}": "На колі поверніть {direction}", + "At the roundabout, continue onto {road}": "На колі продовжуйте рух на {road}", + "At the roundabout, continue": "На колі продовжуйте рух", + "Exit the roundabout onto {road}": "Зʼїжджайте з кола на {road}", + "Exit the roundabout": "Зʼїжджайте з кола", + "Use the {direction} lane onto {road}": "Займіть {direction} смугу, щоб виїхати на {road}", + "Use the {direction} lane": "Займіть {direction} смугу", + "Continue onto {road}": "Продовжуйте рух на {road}", + "maneuver|Continue": "Продовжуйте рух", + "{mode} — reroute for {modeLower}": "{mode} — перебудувати маршрут: {modeLower}", + "CLICK MAP": "КЛАЦНІТЬ НА КАРТІ", + "SET A": "ЗАДАТИ A", + "Click a spot on the globe to place A (click again to cancel)": "Клацніть точку на глобусі, щоб поставити A (повторне клацання — скасування)", + "Then click the globe to place the start": "Потім клацніть на глобусі, щоб поставити початок", + "SET B": "ЗАДАТИ B", + "Click a spot on the globe to place B (click again to cancel)": "Клацніть точку на глобусі, щоб поставити B (повторне клацання — скасування)", + "Then click the globe to place the destination": "Потім клацніть на глобусі, щоб поставити пункт призначення", + "Swap A and B": "Поміняти A і B місцями", + "FLY ···": "ПОЛІТ ···", + "FLYING": "У ПОЛЬОТІ", + "FLY": "ПОЛІТ", + "Fly the camera along the route": "Пролетіти камерою маршрутом", + "Place A and B first": "Спершу поставте A і B", + "action|CLEAR": "СКИНУТИ", + "Remove the route and both markers": "Видалити маршрут і обидві мітки", + "press Escape twice to leave Draw": "двічі натисніть Esc, щоб вийти з режиму «Малювання»", + "{name} is active — turn {name} off, then set {endpoint}": "Активно: {name} — вимкніть {name}, потім задайте {endpoint}", + "{name} is active — {leave}, then set {endpoint}": "Активно: {name} — {leave}, потім задайте {endpoint}", + "Only the first {count} turns of this route are shown": "Показано лише перші повороти маршруту: {count}", + "Turn-by-turn directions": "Покрокові вказівки", + "Another map tool is using clicks — close it, then SET A again": "Клацання перехоплює інший інструмент карти — закрийте його й знову натисніть «ЗАДАТИ A»", + "Routing…": "Побудова маршруту…", + "No route found": "Маршрут не знайдено", + "{distance} · {duration} · {mode} · first {count} turns": "{distance} · {duration} · {mode} · перші повороти: {count}", + "{distance} · {duration} · {mode}": "{distance} · {duration} · {mode}", + "Click the globe to place {endpoint}": "Клацніть на глобусі, щоб поставити {endpoint}", + "SET B, then click the globe": "Натисніть «ЗАДАТИ B», потім клацніть на глобусі", + "SET A, then click the globe": "Натисніть «ЗАДАТИ A», потім клацніть на глобусі", + "Step {step} of {total} · then {leg}": "Крок {step} з {total} · потім {leg}", + "Step {step} of {total}": "Крок {step} з {total}", + "Then: {instruction}": "Потім: {instruction}", + "No route found between A and B": "Маршрут між A і B не знайдено", + "Routing failed: {error}": "Не вдалося побудувати маршрут: {error}", + "Routing timed out": "Минув час побудови маршруту", + "Routing unavailable — no response from the routing service": "Побудова маршруту недоступна — сервіс маршрутизації не відповідає", + "Earthquake source unavailable": "Джерело даних про землетруси недоступне", "Focus fire detection {title}, {details}": "Фокус на виявленні пожежі {title}, {details}", - "{value} conf": "{value} впевн.", + "live feed unavailable": "потік даних у реальному часі недоступний", + "{value} conf": "впевн.: {value}", "{value} ago": "{value} тому", "sensor n/a": "датчик н/д", - "FIRE · {frp} MW": "ПОЖЕЖА · {frp} MW", + "FIRE · {frp} MW": "ПОЖЕЖА · {frp} МВт", "NIGHT": "НІЧ", - "▲ {frp} MW": "▲ {frp} MW", + "▲ {frp} MW": "▲ {frp} МВт", "FIRE": "ПОЖЕЖА", "FIRES": "ПОЖЕЖІ", - "max {value} MW": "макс {value} MW", + "max {value} MW": "макс. {value} МВт", "new {value}": "нова {value}", + "{value}°N": "{value}° пн. ш.", + "{value}°S": "{value}° пд. ш.", + "{value}°E": "{value}° сх. д.", + "{value}°W": "{value}° зх. д.", "just now": "щойно", "<1m ago": "<1 хв тому", "{count}m ago": "{count} хв тому", "{count}h ago": "{count} год тому", + "fire confidence|high": "висока", + "fire confidence|nominal": "середня", + "fire confidence|low": "низька", + "age|<1h": "<1 год", + "age|{count}h": "{count} год", + "age|{count}d": "{count} дн", "STALE · cached {age}": "ЗАСТАРІЛО · кешовано {age}", "refreshing...": "оновлення...", "loading...": "завантаження...", "KEY REQUIRED": "ПОТРІБЕН КЛЮЧ", - "LIVE · updated {age}": "У РЕАЛЬНОМУ ЧАСІ · оновлено {age}", - "loading mapped installation context": "завантаження контексту нанесених об’єктів", - "MAPPED INSTALLATION": "НАНЕСЕНИЙ ОБ’ЄКТ", + "LIVE · updated {age}": "ОНЛАЙН · оновлено {age}", + "Source snapshot time unavailable": "Час знімка джерела невідомий", + "Live data unavailable": "Дані в реальному часі недоступні", + "Intel Picture": "Розвідкартина", + "Kinetic 30d": "Бойові 30 дн", + "Border Crisis": "Криза на кордоні", + "Iran Picture": "Іран: картина", + "Iran Kinetic": "Іран: бойові", + "Yemen FLOT": "Ємен: лінія фронту", + "Latest Drop": "Новий випуск", + "GhostMaps file could not be read": "Не вдалося прочитати файл GhostMaps", + "{count} source links ↗ · click card to open the first": { + "one": "{count} посилання на джерело ↗ · клацніть картку, щоб відкрити", + "few": "{count} посилання на джерела ↗ · клацніть картку, щоб відкрити перше", + "many": "{count} посилань на джерела ↗ · клацніть картку, щоб відкрити перше", + "other": "{count} посилання на джерела ↗ · клацніть картку, щоб відкрити перше" + }, + "S2 · {name}": "S2 · {name}", + "Report": "Зведення", + "Open the source for {title}": "Відкрити джерело: {title}", + "GhostMaps catalog unavailable": "Каталог GhostMaps недоступний", + "LIVE · GitHub {commit} · {message} · checked every {seconds}s": "ОНЛАЙН · GitHub {commit} · {message} · перевірка кожні {seconds} с", + "GitHub {commit} · {message} · reconnecting for live updates": "GitHub {commit} · {message} · повторне підключення для оновлень у реальному часі", + "Connecting to the S2 GhostMaps repository…": "Підключення до репозиторію S2 GhostMaps…", + "{count} placemarks": { + "one": "{count} мітка", + "few": "{count} мітки", + "many": "{count} міток", + "other": "{count} мітки" + }, + "S2 Underground publishes these KMZ products to GitHub. New uploads are detected within seconds and replace the previous edition automatically. Click a marker for its report.": "S2 Underground публікує ці продукти KMZ на GitHub. Нові файли виявляються за лічені секунди й автоматично замінюють попередній випуск. Клацніть мітку, щоб відкрити її зведення.", + "Malformed GhostMaps catalog": "Пошкоджений каталог GhostMaps", + "Low-accuracy score < 2%": "Частка неточних < 2%", + "Low-accuracy score 2–10%": "Частка неточних 2–10%", + "Low-accuracy score > 10%": "Частка неточних > 10%", + "GNSS integrity source unavailable": "Джерело цілісності GNSS недоступне", + "Regional sample · 250 nm radius · cells from visited views over 30 min": "Регіональна вибірка · радіус 250 мор. миль · комірки з переглянутих видів за 30 хв", + "Retrying automatically at {time} UTC": "Автоматичний повтор о {time} UTC", + "Retrying automatically after provider cooldown": "Автоматичний повтор після паузи постачальника", + "Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Оновлюється автоматично після зсуву чи масштабування карти та раз на хвилину. Публічний потік даних охоплює коло радіусом 250 морських миль навколо центру вигляду; у разі віддалення карта не стає знімком усього світу. Порожні комірки — поза охопленням вибірки або з недостатньою кількістю спостережень.", + "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Частка неточних = 100 × max(0, неточні − 1) / усього: один літак не враховується, тож це не пряма частка. Для комірки потрібно літаків: {aircraft} за {minutes} хв. Аномалії цілісності навігації — не виявлення глушіння чи підміни сигналу.", + "GNSS snapshot needs a view anchor": "Для знімка GNSS потрібна опорна точка вигляду", + "GNSS feed rate limited (HTTP 429)": "Потік GNSS: перевищено ліміт запитів (HTTP 429)", + "Malformed GNSS integrity snapshot": "Некоректний знімок цілісності GNSS", + "GNSS integrity snapshot has no observation time": "У знімку цілісності GNSS немає часу спостереження", + "installation class|AIRFIELD": "АЕРОДРОМ", + "installation class|NAVAL BASE": "ВІЙСЬКОВО-МОРСЬКА БАЗА", + "installation class|RANGE": "ПОЛІГОН", + "installation class|MILITARY LAND": "ВІЙСЬКОВА ТЕРИТОРІЯ", + "installation class|BASE": "БАЗА", + "installation class|BARRACKS": "КАЗАРМИ", + "installation class|TRAINING AREA": "НАВЧАЛЬНИЙ ПОЛІГОН", + "installation class|PLACES CANDIDATE": "З GOOGLE PLACES", + "installation class|INSTALLATION": "ОБʼЄКТ", + "No mapped sites within {km} km of the contact": "Немає обʼєктів у радіусі {km} км від контакту", + "{count} mapped sites within {km} km of the contact": { + "one": "{count} обʼєкт у радіусі {km} км від контакту", + "few": "{count} обʼєкти в радіусі {km} км від контакту", + "many": "{count} обʼєктів у радіусі {km} км від контакту", + "other": "{count} обʼєкта в радіусі {km} км від контакту" + }, + "No mapped sites in view": "У кадрі немає обʼєктів", + "{count} mapped sites in view": { + "one": "{count} обʼєкт у кадрі", + "few": "{count} обʼєкти в кадрі", + "many": "{count} обʼєктів у кадрі", + "other": "{count} обʼєкта в кадрі" + }, + "loading mapped installation context": "завантаження контексту нанесених обʼєктів", + "Too many mapped sites in view to list them all": "У кадрі забагато обʼєктів, щоб перелічити всі", + "Installation context unavailable": "Контекст обʼєктів недоступний", + "MAPPED INSTALLATION": "НАНЕСЕНИЙ ОБʼЄКТ", + "Unknown": "Невідомо", "LAUNCH SITE · {site}": "МІСЦЕ ЗАПУСКУ · {site}", "LAUNCH SITE": "МІСЦЕ ЗАПУСКУ", "T−{time} · {mission}": "T−{time} · {mission}", @@ -179,22 +829,30 @@ "UNSPECIFIED": "НЕ ВКАЗАНО", "+{count} additional payload records": "+{count} додаткових записів корисного навантаження", "PAYLOAD DATA UNAVAILABLE": "ДАНІ КОРИСНОГО НАВАНТАЖЕННЯ НЕДОСТУПНІ", - "{value} KM DOWNRANGE": "{value} KM ПО ТРАЄКТОРІЇ", + "{value} KM DOWNRANGE": "{value} КМ УЗДОВЖ ТРАСИ", "POSITION UNAVAILABLE": "ПОЗИЦІЯ НЕДОСТУПНА", "FLIGHT {count}": "РЕЙС {count}", "REUSED": "ПОВТОРНО ВИКОРИСТАНИЙ", "NO STAGE RE-ENTRY / RECOVERY DATA": "НЕМАЄ ДАНИХ ПРО ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ", - "{count} / 30D": "{count} / 30D", + "{count} / 30D": "{count} / 30 ДН", "NO MISSIONS AVAILABLE IN THE CURRENT 30-DAY WINDOW": "НЕМАЄ МІСІЙ У ПОТОЧНОМУ 30-ДЕННОМУ ВІКНІ", "DATE UNAVAILABLE": "ДАТА НЕДОСТУПНА", "UNSPECIFIED OPERATOR": "ОПЕРАТОРА НЕ ВКАЗАНО", "Select {mission}": "Вибрати {mission}", - "{value} KM": "{value} KM", - "{value} KM/S": "{value} KM/S", + "{value} KM": "{value} КМ", + "{value} KM/S": "{value} КМ/С", + "Selected Space Mission": "Вибрана космічна місія", "SELECTED SPACE MISSION": "ВИБРАНА КОСМІЧНА МІСІЯ", "Show all missions": "Показати всі місії", "Deselect mission": "Зняти вибір місії", "MISSION": "МІСІЯ", + "STATUS · ": "СТАТУС · ", + "LAUNCH SITE · ": "МІСЦЕ ЗАПУСКУ · ", + "LAUNCH TIME · ": "ЧАС ЗАПУСКУ · ", + "ORBIT · ": "ОРБІТА · ", + "ASCENT PATH · ": "ТРАЄКТОРІЯ ВИВЕДЕННЯ · ", + "CURRENT DISTANCE FROM EARTH · ": "ПОТОЧНА ВІДСТАНЬ ВІД ЗЕМЛІ · ", + "SATELLITE SPEED · ": "ШВИДКІСТЬ СУПУТНИКА · ", "PAYLOAD": "КОРИСНЕ НАВАНТАЖЕННЯ", "NAME": "НАЗВА", "TYPE": "ТИП", @@ -213,6 +871,7 @@ "Pause replay": "Призупинити повтор", "Cancel replay": "Скасувати повтор", "EST. DOWNRANGE": "РОЗРАХ. ДАЛЬНІСТЬ", + "PLANNED · ": "ПЛАН · ", "SUPPLIED TRAJECTORY POINTS": "НАДАНІ ТОЧКИ ТРАЄКТОРІЇ", "RECONSTRUCTED ESTIMATE": "ВІДТВОРЕНА ОЦІНКА", "Replay the estimated ascent with a following camera": "Відтворити розрахунковий зліт із камерою-супроводом", @@ -223,10 +882,84 @@ "Ascent replay": "Повтор зльоту", "Orbit replay": "Повтор орбіти", ", paused": ", пауза", + "Malformed launch snapshot": "Некоректний знімок запусків", + "Heard by your receiver": "Прийнято вашим приймачем", + "1090 MHz": "1090 МГц", + "978 MHz UAT": "978 МГц UAT", + "browser SDR": "SDR у браузері", + "decoder feed": "потік декодера", + "Your RTL-SDR receiver and decoder feed": "Ваш приймач RTL-SDR і потік декодера", + "Your decoder feed": "Ваш потік декодера", + "Your RTL-SDR receiver": "Ваш приймач RTL-SDR", + "NO CALLSIGN": "БЕЗ ПОЗИВНОГО", + "ALT {altitude} FT · GS {speed} KT · TRK {track}": "ВИС. {altitude} ФТ · ШЛЯХ. ШВ. {speed} ВУЗ · ШЛЯХ {track}", + "V/S {rate}": "ВЕРТ. ШВ. {rate}", + "V/S {rate} FPM": "ВЕРТ. ШВ. {rate} ФТ/ХВ", + "POSITION {age}": "ПОЗИЦІЯ {age}", + "POSITION {seconds} S AGO": "ПОЗИЦІЯ {seconds} С ТОМУ", + "{count} MSGS": { + "one": "{count} ПОВІДОМЛЕННЯ", + "few": "{count} ПОВІДОМЛЕННЯ", + "many": "{count} ПОВІДОМЛЕНЬ", + "other": "{count} ПОВІДОМЛЕННЯ" + }, + "Decoder feeds": "Потоки декодера", + "WebUSB + decoder feeds": "WebUSB + потоки декодера", + "opening receiver": "відкриття приймача", + "checking decoder feeds": "перевірка потоків декодера", + "WebUSB needs desktop Chrome or Edge": "Для WebUSB потрібен настільний Chrome або Edge", + "connect a receiver in Radio": "підключіть приймач у розділі «Радіо»", + "receiver is in FM mode": "приймач у режимі FM", + "listening": "приймання", + "USB error": "помилка USB", "Alt unknown": "Висота невідома", "Type unknown": "Тип невідомий", "Reg unknown": "Рег. невідомий", "Operator unknown": "Оператор невідомий", + "${amount}K": "{amount} тис. $", + "${amount}M": "{amount} млн $", + "${amount}B": "{amount} млрд $", + "fire cause|Human": "діяльність людини", + "fire cause|Natural": "природна", + "fire cause|Undetermined": "не встановлена", + "fire cause|Unknown": "невідома", + "fire behavior|Minimal": "мінімальна активність", + "fire behavior|Moderate": "помірна активність", + "fire behavior|Active": "висока активність", + "fire behavior|Extreme": "екстремальна активність", + "Type {level} Incident": "інцидент {level}-го типу", + "age|{count}m": "{count} хв", + "{acres} ac": { + "one": "{acres} акр", + "few": "{acres} акри", + "many": "{acres} акрів", + "other": "{acres} акра" + }, + "{percent}% contained": "локалізовано на {percent}%", + "containment unknown": "локалізація невідома", + "{cause} cause": "причина: {cause}", + "{personnel} personnel": { + "one": "{personnel} особа", + "few": "{personnel} особи", + "many": "{personnel} осіб", + "other": "{personnel} особи" + }, + "{county} County": "округ {county}", + "{cost} to date": "{cost} на сьогодні", + "discovered {age} ago": "виявлено {age} тому", + "updated {age} ago": "оновлено {age} тому", + "part of {complex}": "входить до {complex}", + "InciWeb ↗ · click card to open": "InciWeb ↗ · клацніть картку, щоб відкрити", + "FIRE · {name}": "ПОЖЕЖА · {name}", + "Unnamed incident": "Без назви", + "Open {title} on InciWeb": "Відкрити {title} в InciWeb", + "Perimeter source unavailable": "Джерело контурів пожеж недоступне", + "Not contained or unknown": "Не локалізовано або невідомо", + "Under 50% contained": "Локалізовано менш ніж на 50%", + "50–99% contained": "Локалізовано на 50–99%", + "Fully contained": "Повністю локалізовано", + "Colour shows reported containment. Perimeters are simplified to about 100 m.": "Колір показує заявлений ступінь локалізації. Контури спрощено приблизно до 100 м.", + "Malformed perimeter snapshot": "Некоректний знімок периметрів", "radio tag|All": "Усі", "News": "Новини", "Talk": "Розмовні", @@ -236,6 +969,10 @@ "Traffic / Transit": "Рух / Транспорт", "Music": "Музика", "Other": "Інше", + "Directory refresh degraded; showing the previous station catalog.": "Каталог оновився з перебоями; показано попередній каталог станцій.", + "Radio directory coverage is degraded.": "Каталог радіостанцій працює з перебоями.", + "Directory refresh failed; showing the previous station catalog.": "Не вдалося оновити каталог; показано попередній каталог станцій.", + "Radio directory is temporarily unavailable.": "Каталог радіостанцій тимчасово недоступний.", "radio|NEWS": "НОВИНИ", "radio|TALK": "РОЗМОВНІ", "radio|WEATHER": "ПОГОДА", @@ -244,6 +981,9 @@ "radio|TRANSIT": "ТРАНСПОРТ", "radio|MUSIC": "МУЗИКА", "radio|OTHER": "ІНШЕ", + "Broadcaster stream is unavailable or blocked by the browser.": "Потік мовника недоступний або заблокований браузером.", + "Playback requires a direct click or tap.": "Щоб почати відтворення, натисніть кнопку відтворення.", + "Broadcaster stream could not be started.": "Не вдалося запустити потік мовника.", "Alternative": "Альтернатива", "Ambient": "Ембієнт", "Blues": "Блюз", @@ -257,7 +997,7 @@ "House": "Хаус", "Indie": "Інді", "Jazz": "Джаз", - "Latin": "Латина", + "Latin": "Латиноамериканська", "Metal": "Метал", "Oldies": "Ретро", "Pop": "Поп", @@ -269,6 +1009,32 @@ "Techno": "Техно", "Trance": "Транс", "World": "Етнічна", + "overview": "огляд", + "cloud unknown": "хмарність невідома", + "{percent}% scene cloud": "хмарність сцени {percent}%", + "{min}–{max}% scene cloud": "хмарність сцени {min}–{max}%", + "Comparison in use by another scene": "Порівняння зайняте іншою сценою", + "Esri map unavailable · no swipe": "Карта Esri недоступна · без порівняння", + "Swipe needs a globe map": "Для порівняння потрібна карта-глобус", + "Imagery stays on Esri · CLEAR to use Google 3D": "Знімки залишаються на Esri · «СКИНУТИ», щоб повернути Google 3D", + "Imagery catalog unavailable": "Каталог знімків недоступний", + "Catalog truncated · a newer clear day may exist": "Каталог скорочено · можливо, є пізніший ясний день", + "{label} catalog unavailable · {detail}": "Каталог {label} недоступний · {detail}", + "Daily overview for today may still be empty until the pass": "Щоденний огляд за сьогодні може залишатися порожнім до прольоту супутника", + "Box and images cleared": "Область і знімки скинуто", + "MORE DETAIL · 30 m": "БІЛЬШЕ ДЕТАЛЕЙ · 30 м", + "Sentinel-2 and Landsat via HLS, 30 m, every 2–6 days": "Sentinel‑2 і Landsat через HLS, 30 м, кожні 2–6 днів", + "DAILY OVERVIEW · 250 m": "ЩОДЕННИЙ ОГЛЯД · 250 м", + "VIIRS daily mosaic, 250 m, follows broad changes; little detail under 25 km": "Щоденна мозаїка VIIRS, 250 м, показує великі зміни; мало деталей у масштабі менш ніж 25 км", + "Sentinel-2": "Sentinel‑2", + "Sentinel-2 via HLS": "Sentinel‑2 через HLS", + "Landsat 8/9": "Landsat 8/9", + "Landsat 8/9 via HLS": "Landsat 8/9 через HLS", + "Daily overview": "Щоденний огляд", + "Box edges must be finite": "Некоректні координати області", + "Longitudes must be within ±180°": "Довгота має бути в межах ±180°", + "Select one side of the dateline": "Не перетинайте лінію зміни дат", + "Box must enclose an area": "Область повинна мати площу", "Add the full Starlink broadband shell (thousands of extra points)": "Додати повну широкосмугову оболонку Starlink (тисячі додаткових точок)", "Loading the Starlink shell…": "Завантаження оболонки Starlink…", "Starlink {detail} — click to retry": "Starlink: {detail} — клацніть, щоб повторити", @@ -277,78 +1043,595 @@ "DENSE ···": "ЩІЛЬНО ···", "DENSE ✕": "ЩІЛЬНО ✕", "DENSE": "ЩІЛЬНО", + "CelesTrak unreachable": "CelesTrak недоступний", + "DOCKED · {name} · +{extra}": "ПРИСТИКОВАНО · {name} · +{extra}", + "DOCKED · {name}": "ПРИСТИКОВАНО · {name}", + "{name} needs the Google 3D map: choose it under MAP SOURCE": "{name}: потрібна карта Google 3D — виберіть її в розділі «ДЖЕРЕЛО КАРТИ»", + "zoom in to a street to open {name}": "наблизьтеся до вулиці, щоб відкрити {name}", + "loading coverage...": "завантаження покриття...", + "No street-level imagery within {radius} m of that point": "У радіусі {radius} м від цієї точки вуличних знімків немає", + "No street-level imagery within {radius} m of the view centre": "У радіусі {radius} м від центру вигляду вуличних знімків немає", + "Zoom in to see street-level coverage": "Наблизьтеся, щоб побачити покриття вуличних знімків", + "Point the camera at the ground for street-level coverage": "Спрямуйте камеру на землю, щоб побачити покриття вуличних знімків", + "Coverage tile failed": "Не вдалося завантажити тайл покриття", + "The photo could not be loaded": "Не вдалося завантажити фото", + "{name} photo. ← and → step along the sequence. On a 360° photo, drag or use Shift+← →, ↑ ↓ to look around, and + − to zoom": "Фото {name}. ← і → гортають зйомку. На 360°-фото перетягуйте або використовуйте Shift+← →, ↑ ↓ для огляду, + − для масштабу", + "{name} street-level photo": "Вуличне фото {name}", + "Previous photo in this sequence (←)": "Попереднє фото зйомки (←)", + "Next photo in this sequence (→)": "Наступне фото зйомки (→)", + "Aim the middle of the view at a street to look for imagery there": "Наведіть центр вигляду на вулицю, щоб пошукати там знімки", + "KEY REJECTED": "КЛЮЧ ВІДХИЛЕНО", + "GOOGLE_MAPS_API_KEY is not set": "GOOGLE_MAPS_API_KEY не задано", + "The Google Maps JavaScript API could not load": "Не вдалося завантажити Google Maps JavaScript API", + "Google Street View": "Google Перегляд вулиць", + "GOOGLE STREET VIEW": "GOOGLE ПЕРЕГЛЯД ВУЛИЦЬ", + "Google refused GOOGLE_MAPS_API_KEY for Street View — check that the Maps JavaScript API is enabled for it and this site is an allowed referrer": "Google відхилив GOOGLE_MAPS_API_KEY для Перегляду вулиць — перевірте, що для ключа ввімкнено Maps JavaScript API, а адреса цього сайту є в списку дозволених (HTTP referrer)", + "Street View did not answer — check the network, and that the Maps JavaScript API is enabled for GOOGLE_MAPS_API_KEY": "Перегляд вулиць не відповів — перевірте мережу й те, що для GOOGLE_MAPS_API_KEY увімкнено Maps JavaScript API", + "click a street to open Street View": "клацніть на вулиці, щоб відкрити Перегляд вулиць", + "Street View has no imagery for this place": "У Перегляді вулиць немає знімків цього місця", + "KartaView has no position for this photo": "KartaView не має координат цього фото", + "The KartaView photo could not be loaded": "Не вдалося завантажити фото KartaView", + "zoom in to see KartaView coverage": "наблизьтеся, щоб побачити покриття KartaView", + "no KartaView photos in view": "фото KartaView у полі зору немає", + "KartaView is rate-limiting requests — they resume on their own": "KartaView обмежує частоту запитів — вони відновляться самі", + "KartaView’s photos here are archived and cannot be shown": "Фото KartaView тут в архіві, показати їх не можна", + "KartaView did not filter this area in time — move the map to ask again": "KartaView не встиг відфільтрувати цю область — зсуньте карту, щоб запитати знову", + "None of KartaView’s photos here pass the imagery filter": "Жодне фото KartaView тут не проходить фільтр знімків", + "KartaView did not answer in time — try again": "KartaView не відповів вчасно — спробуйте знову", + "KartaView could not be reached — check the network": "Не вдалося звʼязатися з KartaView — перевірте мережу", + "KartaView sent an answer that could not be read": "KartaView надіслав відповідь, яку не вдалося прочитати", + "KartaView is rate-limiting requests": "KartaView обмежує частоту запитів", + "KartaView sent too much data": "KartaView надіслав забагато даних", + "KartaView is rate-limiting requests — try again in a moment": "KartaView обмежує частоту запитів — спробуйте ще раз трохи згодом", + "KartaView has no such photo": "KartaView не має такого фото", + "Mapillary rejected MAPILLARY_CLIENT_TOKEN — replace it in Provider Settings": "Mapillary відхилив MAPILLARY_CLIENT_TOKEN — замініть його в «Налаштуваннях постачальників»", + "Coverage requests are being rate-limited — they resume on their own": "Запити покриття обмежено за частотою — вони відновляться самі", + "The Panoramax photo could not be loaded": "Не вдалося завантажити фото Panoramax", + "Panoramax is busy — coverage resumes on its own": "Panoramax перевантажений — покриття завантажиться само", + "no Panoramax photos in view": "фото Panoramax у полі зору немає", + "no Panoramax photos here match the filters": "тут немає фото Panoramax, що відповідають фільтрам", + "Panoramax sent a map tile that could not be read": "Panoramax надіслав тайл карти, який не вдалося прочитати", + "This Panoramax photo is no longer available": "Це фото Panoramax більше недоступне", + "zoom in to see Panoramax coverage": "наблизьтеся, щоб побачити покриття Panoramax", + "Panoramax did not answer in time — try again": "Panoramax не відповів вчасно — спробуйте знову", + "Panoramax could not be reached — check the connection": "Не вдалося звʼязатися з Panoramax — перевірте підключення", + "Panoramax sent too much data": "Panoramax надіслав забагато даних", + "Panoramax is busy": "Panoramax перевантажений", + "Panoramax sent an unreadable answer": "Panoramax надіслав відповідь, яку не вдалося прочитати", + "Sequence images unavailable": "Знімки послідовності недоступні", + "No street-level imagery providers configured": "Джерела вуличних знімків не налаштовано", + "(by upload date)": "(за датою завантаження)", + "Open the Street Level panel to view imagery": "Відкрийте панель «Вуличні знімки», щоб їх переглянути", + "Image could not be opened": "Не вдалося відкрити знімок", + "TeleGeography load failed": "Не вдалося завантажити дані TeleGeography", + "UNAVAILABLE · {source} · Roads unavailable": "НЕДОСТУПНО · {source} · Дороги недоступні", + "Roads: {source}": "Дороги: {source}", + "TomTom roads unavailable while the traffic service is unreachable": "Дороги TomTom недоступні, доки сервіс руху не відповідає", + "Hybrid unavailable while the traffic service is unreachable": "Гібридний режим недоступний, доки сервіс руху не відповідає", + "TomTom roads need a TomTom key": "Для доріг TomTom потрібен ключ TomTom", + "Hybrid needs a TomTom key": "Для гібридного режиму потрібен ключ TomTom", + "Local surface still loading": "Поверхня під дорогами ще завантажується", + "Partial coverage": "Часткове покриття", + "Detailed roads unavailable": "Немає детальних даних про дороги", + "Reduced detail coverage": "Покриття зі зниженою деталізацією", + "TomTom roads only, each with its live flow": "Лише дороги TomTom, кожна зі своїм потоком онлайн", + "TomTom roads only, each with its live flow (needs a TomTom key)": "Лише дороги TomTom, кожна зі своїм потоком онлайн (потрібен ключ TomTom)", + "OpenStreetMap roads, with TomTom flow matched when available": "Дороги OpenStreetMap; потік TomTom зіставляється, де він є", + "TomTom roads first; OpenStreetMap fills the rest, simulated": "Спершу дороги TomTom; решту доповнює OpenStreetMap з імітацією потоку", + "TomTom roads first; OpenStreetMap fills the rest, simulated (needs a TomTom key)": "Спершу дороги TomTom; решту доповнює OpenStreetMap з імітацією потоку (потрібен ключ TomTom)", + "Hybrid": "Гібрид", + "TomTom key unavailable": "Ключ TomTom недоступний", + "TomTom daily budget reached": "Вичерпано денний ліміт TomTom", + "TomTom upstream unreachable": "Сервер TomTom не відповідає", + "TomTom flow unavailable": "Потік TomTom недоступний", + "SIMULATED — {reason}": "ІМІТАЦІЯ — {reason}", + "Syncing flow · Roads: {source}": "Синхронізація потоку · Дороги: {source}", + "LIVE · Roads: {source} · Roads without flow hidden": "ОНЛАЙН · Дороги: {source} · Дороги без потоку приховано", + "LIVE · Roads: {source} · No flow roads in view": "ОНЛАЙН · Дороги: {source} · У кадрі немає доріг із потоком", + "LIVE · Roads: {source} · Flow {percent}%": "ОНЛАЙН · Дороги: {source} · Потік {percent}%", + "SIMULATED · Roads: {source} · Flow {percent}%": "ІМІТАЦІЯ · Дороги: {source} · Потік {percent}%", + "Syncing flow · Roads: OpenStreetMap · Flow: TomTom · Unmatched: simulated": "Синхронізація потоку · Дороги: OpenStreetMap · Потік: TomTom · Без збігів: імітація", + "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov · Unmatched: simulated": "ОНЛАЙН · Дороги: OpenStreetMap · Потік: TomTom · охоплення {percent}% · Без збігів: імітація", + "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "ОНЛАЙН · Дороги: OpenStreetMap · Потік: TomTom · охоплення {percent}%", + "SIMULATED · Roads: OpenStreetMap · Flow: TomTom (no matches)": "ІМІТАЦІЯ · Дороги: OpenStreetMap · Потік: TomTom (немає збігів)", "SIMULATED — traffic service unreachable": "ІМІТАЦІЯ — сервіс руху недоступний", "SIMULATED — add TomTom key for live": "ІМІТАЦІЯ — додайте ключ TomTom для реального часу", + "OpenFreeMap tiles rate-limited": "Тайли OpenFreeMap: перевищено ліміт запитів", + "OpenFreeMap tiles timed out": "Тайли OpenFreeMap: минув час очікування", + "OpenFreeMap tiles unavailable": "Тайли OpenFreeMap недоступні", + "occupancy|empty": "порожньо", + "occupancy|many seats available": "багато вільних місць", + "occupancy|few seats available": "мало вільних місць", + "occupancy|standing room only": "лише стоячі місця", + "occupancy|crushed standing room only": "переповнено, лише стоячи", + "occupancy|full": "місць немає", + "occupancy|not accepting passengers": "посадки немає", + "occupancy|not boardable": "посадка неможлива", + "Route {route}": "Маршрут {route}", + "Vehicle {vehicle}": "Борт {vehicle}", + "vehicle motion|Stopped": "Стоїть", + "No recent fix": "Немає свіжих координат", + "Waiting for update": "Очікування оновлення", + "Moving": "У русі", + "reported {speed} km/h": "за звітом {speed} км/год", + "reported hdg {heading}°": "за звітом курс {heading}°", + "Last report: stopped at stop {stop}": "Останній звіт: стоїть на зупинці {stop}", + "Last report: arriving at stop {stop}": "Останній звіт: прибуває на зупинку {stop}", + "Last report: next stop {stop}": "Останній звіт: наступна зупинка {stop}", + "Shown at street level · depth not in the feed": "Показано на рівні вулиці · глибини в потоці немає", + "Reported {seconds} s ago": "Звіт {seconds} с тому", + "Reported {minutes} min ago": "Звіт {minutes} хв тому", + "shown {seconds} s behind": "показ відстає на {seconds} с", + "{reported} (feed time)": "{reported} (час потоку)", + "Available trail: {minutes} min (limited)": "Доступний слід: {minutes} хв (обмежений)", + "Available trail: {minutes} min": "Доступний слід: {minutes} хв", + "Bus": "Автобус", + "Tram": "Трамвай", + "Subway": "Метро", + "Train": "Поїзд", + "Ferry": "Пором", + "Transit vehicle": "Громадський транспорт", "AIS: {name}": "AIS: {name}", + "{type} SPD: {speed} HDG: {heading}": "{type} ШВИД: {speed} КУРС: {heading}", "VESSEL": "СУДНО", - "POS: LIVE": "POS: У РЕАЛЬНОМУ ЧАСІ", - "POS: {time}Z": "POS: {time}Z", + "{speed}KT": "{speed} ВУЗ", + "{heading}DEG": "{heading}°", + "POS: LIVE": "ПОЗ.: ОНЛАЙН", + "POS: {time}Z": "ПОЗ.: {time}Z", + "AIS live load failed": "Не вдалося завантажити AIS у реальному часі", "awaiting first AIS position…": "очікується перша позиція AIS…", "awaiting usable AIS positions…": "очікуються придатні позиції AIS…", "awaiting first AIS message…": "очікується перше повідомлення AIS…", + "AISSTREAM_API_KEY not set": "AISSTREAM_API_KEY не задано", + "live feed unsupported": "потік у реальному часі не підтримується", + "connecting to feed…": "підключення до потоку…", + "feed disconnected": "потік відключено", + "feed down": "потік недоступний", + "feed idle": "потік простоює", + "API key rejected — check AISSTREAM_API_KEY": "Ключ API відхилено — перевірте AISSTREAM_API_KEY", + "feed silent {seconds}s — no AIS data": "немає даних AIS від потоку {seconds} с", + "feed silent — no AIS data": "немає даних AIS від потоку", + "feed down — retrying slowly (attempt {attempt})": "потік недоступний — повторюємо рідше (спроба {attempt})", + "reconnecting to feed… (attempt {attempt})": "повторне підключення до потоку… (спроба {attempt})", + "feed down — retrying slowly": "потік недоступний — повторюємо рідше", + "reconnecting to feed…": "повторне підключення до потоку…", + "Focus vessel {name}, MMSI {mmsi}": "Фокус на судні {name}, MMSI {mmsi}", + "Hidden by this map source · choose a globe map": "Приховано цим джерелом карти · виберіть глобус", + "Weather image HTTP {status}": "Знімок погоди: HTTP {status}", + "Weather HTTP {status}": "Погода: HTTP {status}", + "Frame unavailable; previous observation retained": "Кадр недоступний; показано попереднє спостереження", + "Weather imagery unavailable": "Погодні знімки недоступні", + "Weather source unavailable; previous observation retained": "Джерело погоди недоступне; показано попереднє спостереження", + "Weather unavailable": "Погода недоступна", + "No frame within {gap} min of {time}": "Немає кадру в межах {gap} хв від {time}", + "No frame within {gap} h of {time}": "Немає кадру в межах {gap} год від {time}", + "{hours}h {minutes}m ago": "{hours} год {minutes} хв тому", + "{minutes}m ago": "{minutes} хв тому", + "{state} · {time} · {lag}": "{state} · {time} · {lag}", + "Observed": "Спостереження", + "History": "Історія", + "Observation unavailable": "Спостереження недоступне", + "Waiting for observation": "Очікування спостереження", + "{detail} · synced": "{detail} · синхр.", + "{detail} · nearest": "{detail} · найближчий", + "RADAR REFLECTIVITY · dBZ": "РАДІОЛОК. ВІДБИВНІСТЬ · dBZ", + "LIGHTNING DENSITY · 15 min accumulation": "ЩІЛЬНІСТЬ БЛИСКАВОК · накопичення за 15 хв", + "GLOBAL INFRARED · hourly": "ГЛОБАЛЬНИЙ ІЧ · щогодини", + "GOES INFRARED · ~5 min": "GOES ІЧ · ~5 хв", + "{state}: {time}": "{state}: {time}", + "Latest observation": "Останнє спостереження", + "frame {index}/{total}": "кадр {index}/{total}", + "loading": "завантаження", + "Observation: unavailable": "Спостереження: недоступне", + "Contiguous US · gaps ≠ no rain": "Континентальні США · прогалини ≠ немає дощу", + "Americas + Pacific · not individual strikes": "Америка + Тихий океан · не окремі розряди", + "Color: strikes/km²/min ×10³": "Колір: розрядів/км²/хв ×10³", + "60°S–60°N · typically 2–3 h delayed": "60° пд. ш.–60° пн. ш. · зазвичай затримка 2–3 год", + "North America · infrared imagery": "Північна Америка · ІЧ-знімки", + "Reduced motion · history playback unavailable": "Зменшення руху · відтворення історії недоступне", + "Reduced motion · manual history available": "Зменшення руху · історію можна гортати вручну", + "Rain radar · US": "Радар опадів · США", + "Lightning density · 15 min": "Щільність блискавок · 15 хв", + "Satellite clouds": "Супутникова хмарність", + "Americas + Pacific": "Америка + Тихий океан", + "Global · 60°S–60°N": "Глобально · 60° пд. ш.–60° пн. ш.", + "North America": "Північна Америка", + "Source observations delayed": "Спостереження джерела затримуються", + "Stale source": "Джерело застаріло", + "Loading next frame…": "Завантаження наступного кадру…", + "Map center outside coverage": "Центр карти поза зоною покриття", + "strikes/km²/min ×10³": "розрядів/км²/хв ×10³", + "N. America": "Пн. Америка", + "Global": "Глобально", + "Hourly global mosaic; usually 2–3 hours delayed": "Щогодинна глобальна мозаїка; зазвичай із затримкою 2–3 год", + "GOES regional clouds; approximately 5-minute updates": "Регіональна хмарність GOES; оновлення приблизно кожні 5 хв", + "Clouds only": "Лише хмари", + "Apply the full cloud brightness key; 100% filter strength": "Застосувати повний фільтр яскравості хмар; сила фільтра 100%", + "Full": "Повний", + "Show the complete infrared image; 0% filter strength": "Показати повне ІЧ-зображення; сила фільтра 0%", + "Soft": "Мʼяко", + "Vivid": "Яскраво", + "Image opacity; does not alter the observed values": "Непрозорість зображення; не змінює спостережених значень", + "View US radar": "Показати радар США", + "View Americas & Pacific": "Показати Америку й Тихий океан", + "View coverage": "Показати зону покриття", + "{value} strikes/km²/min ×10³ (15-minute density)": "{value} розрядів/км²/хв ×10³ (щільність за 15 хв)", + "{value} dBZ radar reflectivity": "Радіолокаційна відбивність: {value} dBZ", + "STALE · cached source metadata": "ЗАСТАРІЛО · метадані джерела з кешу", + "Map center is outside source coverage": "Центр карти поза зоною покриття джерела", + "NOAA/NWS 15-minute lightning density derived from Vaisala NLDN/GLD360. Coverage 110°E across the Pacific/Americas to 0°, 25°S–80°N. Not a live strike count, global coverage or a safety warning.": "15-хвилинна щільність блискавок NOAA/NWS на основі Vaisala NLDN/GLD360. Покриття — від 110° сх. д. через Тихий океан і Америку до 0°, 25° пд. ш.–80° пн. ш. Це не підрахунок розрядів у реальному часі, не глобальне покриття й не попередження про небезпеку.", + "NOAA MRMS radar echoes indicate precipitation patterns, not rain rate, a storm warning or a future forecast. Native source approximately 1 km; display is limited to level 6. Frames use exact advertised observation times.": "Радіолокаційні відлуння NOAA MRMS показують картину опадів, а не їхню інтенсивність, штормове попередження чи прогноз. Вихідна роздільність близько 1 км; показ обмежено рівнем 6. Для кадрів використано точний заявлений час спостережень.", + "GOES-19/18 longwave infrared Band 14 regional; NESDIS global longwave mosaic. Clouds only dims everything but bright, cold cloud tops; a brightness filter, not a cloud mask. Coverage and freshness differ by region.": "Регіональний довгохвильовий ІЧ-канал 14 GOES-19/18; глобальна довгохвильова мозаїка NESDIS. Режим «Лише хмари» затемнює все, крім яскравих холодних вершин хмар; це фільтр яскравості, а не маска хмарності. Покриття й актуальність різняться за регіонами.", + "REGION": "РЕГІОН", + "IMAGE": "ЗНІМОК", + "FILTER": "ФІЛЬТР", + "Cloud filter strength": "Сила фільтра хмар", + "OPACITY": "НЕПРОЗОР.", + "Infrared decode failed": "Не вдалося декодувати інфрачервоний знімок", + "Weather prefetch unavailable": "Попереднє завантаження погоди недоступне", + "Weather tiles unavailable · previous frame retained": "Погодні тайли недоступні · показано попередній кадр", + "Some weather tiles unavailable": "Частина погодних тайлів недоступна", + "Malformed weather manifest": "Некоректний маніфест погоди", + "Weather request timed out": "Минув час очікування запиту погоди", + "Temperature field unavailable": "Поле температури недоступне", + "Mean sea level pressure field unavailable": "Поле тиску на рівні моря недоступне", + "Wind upstream unavailable": "Джерело даних про вітер недоступне", + "{source} HTTP {status}": "{source}: HTTP {status}", + "Wind": "Вітер", + "Wind source unavailable": "Джерело вітру недоступне", + "Forecast · does not follow history": "Прогноз · не йде за історією", + "Wind motion": "Рух вітру", + "Wind speed": "Швидкість вітру", + "Sea-level pressure": "Тиск на рівні моря", + "Air temperature · 2 m": "Температура повітря · 2 м", + "Global · 1° grid": "Глобально · сітка 1°", + "{model} forecast · {time}": "Прогноз {model} · {time}", + "Loading forecast": "Завантаження прогнозу", + "Preparing flow": "Підготовка анімації вітру", + "Selected field unavailable": "Вибране поле недоступне", + "Cached forecast · stale": "Прогноз із кешу · застарів", + "ECMWF IFS surface forecast": "Приземний прогноз ECMWF IFS", + "NOAA GFS surface forecast": "Приземний прогноз NOAA GFS", + "Reduced motion": "Зменшення руху", "Resume": "Продовжити", "Pause": "Пауза", + "Pause visual flow; forecast time does not advance with animation": "Призупинити візуальний потік; час прогнозу не зсувається з анімацією", + "None": "Немає", + "Speed": "Швидкість", + "Pressure": "Тиск", + "Temperature": "Температура", + "Wind trails with no field shading": "Сліди вітру без заливки поля", + "How hard the surface wind is blowing": "Наскільки сильно дме приземний вітер", + "Sea-level air pressure: broad highs and lows": "Тиск на рівні моря: великі області високого й низького тиску", + "Air temperature two meters above the surface": "Температура повітря за два метри над поверхнею", + "Wind speed units": "Одиниці швидкості вітру", + "Read wind at map center": "Дізнатися вітер у центрі карти", + "Read the forecast at the center of the map without changing selection": "Отримати прогноз у центрі карти, не змінюючи вибору", + "{model} forecast · {field} ({unit})": "Прогноз {model} · {field} ({unit})", + "Valid: {time}": "Чинний на: {time}", + "preparing": "підготовка", + "Issued: {time}": "Випущено: {time}", + "Selected field unavailable · wind remains visible": "Вибране поле недоступне · вітер залишається видимим", + "{error} · wind remains visible": "{error} · вітер залишається видимим", + "Surface wind at 10 m. Approximately 1° global grid. Curves follow the 10 m wind field, lifted 12 km for visibility; display height is not weather altitude. View lighting is for readability. Animation shows flow through one fixed forecast; it does not advance time. Color fields drape the globe basemap or the active photorealistic 3D Tiles.": "Приземний вітер на висоті 10 м. Глобальна сітка близько 1°. Лінії повторюють поле вітру на 10 м і підняті на 12 км для наочності; висота показу не є висотою погодних явищ. Освітлення вигляду — для зручності читання. Анімація показує потік в одному фіксованому прогнозі й не зсуває час. Кольорові поля накладаються на підкладку глобуса або на активні фотореалістичні 3D Tiles.", + "MODEL": "МОДЕЛЬ", + "FIELD": "ПОЛЕ", + "UNITS": "ОДИНИЦІ", + "MOTION": "РУХ", + "Forecast": "Прогноз", + "N": "Пн", + "NNE": "ПнПнСх", + "NE": "ПнСх", + "ENE": "СхПнСх", + "E": "Сх", + "ESE": "СхПдСх", + "SE": "ПдСх", + "SSE": "ПдПдСх", + "S": "Пд", + "SSW": "ПдПдЗх", + "SW": "ПдЗх", + "WSW": "ЗхПдЗх", + "W": "Зх", + "WNW": "ЗхПнЗх", + "NW": "ПнЗх", + "NNW": "ПнПнЗх", + "No surface reading": "Немає приземних даних", + "Aim the map center at Earth": "Наведіть центр карти на Землю", + "A location reading needs a loaded forecast and the Earth at the center of the view.": "Щоб отримати дані в точці, завантажте прогноз і розмістіть Землю в центрі екрана.", + "Interpolated model forecast on an approximately 1° grid. Broad weather patterns, not a street-level measurement.": "Інтерпольований модельний прогноз на сітці близько 1°. Загальна погодна картина, а не вимірювання на рівні вулиці.", + " · calm": " · штиль", + " from {direction}": " з {direction}", + "WIND AT {coordinates}": "ВІТЕР У ТОЧЦІ {coordinates}", + "{model} · valid {time}": "{model} · на {time}", + "Wind speed field unavailable": "Поле швидкості вітру недоступне", + "Globe imagery unavailable": "Знімки глобуса недоступні", + "Globe field image unavailable": "Зображення поля на глобусі недоступне", + "Unknown wind model": "Невідома модель вітру", + "Unknown weather overlay": "Невідомий погодний шар", + "Wind request timed out": "Минув час очікування запиту вітру", + "Malformed wind manifest": "Некоректний маніфест вітру", + "Malformed wind grid": "Некоректна сітка вітру", "Error: {message}": "Помилка: {message}", - "Needs {envVars} — add it in Provider Settings": "Потрібно {envVars} — додайте у налаштуваннях постачальників", + "Needs {envVars} — add it in Provider Settings": "Потрібен {envVars} — додайте його в «Налаштуваннях постачальників»", "{label} is unavailable": "{label} — недоступно", "This map stack": "Цей стек карт", "{label} unavailable: {hint}": "{label} — недоступно: {hint}", + "Google 3D tiles unavailable — check the key's API restrictions, quota, or network": "Тайли Google 3D недоступні — перевірте обмеження API ключа, квоту або мережу", + "Needs {envVars} — add it in Provider Settings — or a Cesium ion token for the ion-hosted route": "Потрібен {envVars} — додайте його в «Налаштуваннях постачальників» — або токен Cesium ion для варіанта через ion", + "Exit cockpit to fly to a camera": "Вийдіть із кабіни, щоб перелетіти до камери", + "Exit cockpit to fly to a location": "Вийдіть із кабіни, щоб перелетіти до місця", + "Exit cockpit to fly to a photo": "Вийдіть із кабіни, щоб перелетіти до фото", + "Exit cockpit to fly to a shared view": "Вийдіть із кабіни, щоб перелетіти до вигляду за посиланням", + "Exit cockpit to fly to a target": "Вийдіть із кабіни, щоб перелетіти до цілі", + "Exit cockpit to fly to a vessel": "Вийдіть із кабіни, щоб перелетіти до судна", + "Exit cockpit to fly to a fire": "Вийдіть із кабіни, щоб перелетіти до пожежі", + "Exit cockpit to fly to a route": "Вийдіть із кабіни, щоб перелетіти до маршруту", + "Exit cockpit to fly to a file": "Вийдіть із кабіни, щоб перелетіти до файлу", + "Exit cockpit to fly to a scene": "Вийдіть із кабіни, щоб перелетіти до сцени", + "Exit cockpit to view weather coverage": "Вийдіть із кабіни, щоб показати зону покриття погодного шару", + "Exit cockpit to fly to a cyclone": "Вийдіть із кабіни, щоб перелетіти до циклону", + "Exit cockpit to fly to an aircraft": "Вийдіть із кабіни, щоб перелетіти до літака", + "Exit cockpit to fly to a satellite": "Вийдіть із кабіни, щоб перелетіти до супутника", + "Exit cockpit to frame contacts": "Вийдіть із кабіни, щоб показати контакти в кадрі", "Visible map targets": "Видимі цілі на карті", + "Focusing {label}": "Фокусування: {label}", + "Source": "Джерело", + "Camera ownership changed": "Керування камерою перехоплено", + "Saved project could not be read; storage preserved. Import a valid file to resume saving.": "Не вдалося прочитати збережений проєкт; сховище не змінено. Імпортуйте коректний файл, щоб знову зберігати.", "Ready": "Готово", + "Scene layer turned off": "Шар сцени вимкнено", + "Stopped": "Зупинено", + "Scene not saved — existing saved project could not be read. Export edits or import a valid file.": "Сцену не збережено — не вдалося прочитати збережений проєкт. Експортуйте зміни або імпортуйте коректний файл.", + "Scene not saved — {reason}": "Сцену не збережено — {reason}", + "Scene not saved — browser storage unavailable": "Сцену не збережено — сховище браузера недоступне", "Loaded: {scene} / {shot}": "Завантажено: {scene} / {shot}", + "Cannot update {scene}: shot inventory changed": "Не вдалося оновити {scene}: змінився склад кадрів", + "Cannot update {scene}: evidence beats changed": "Не вдалося оновити {scene}: змінилися етапи свідчень", + "Cannot update {scene}: shot bindings are incomplete": "Не вдалося оновити {scene}: привʼязки кадрів неповні", + "Updated {count} shots: {scene}": { + "one": "Оновлено {count} кадр: {scene}", + "few": "Оновлено {count} кадри: {scene}", + "many": "Оновлено {count} кадрів: {scene}", + "other": "Оновлено {count} кадру: {scene}" + }, + "Appended {count} shots: {scene}": { + "one": "Додано {count} кадр: {scene}", + "few": "Додано {count} кадри: {scene}", + "many": "Додано {count} кадрів: {scene}", + "other": "Додано {count} кадру: {scene}" + }, "Cannot capture shot: camera not ready": "Не вдалося зняти кадр: камера не готова", "Captured: {scene} / {shot}": "Знято: {scene} / {shot}", "Select a shot first": "Спочатку оберіть кадр", "Updated: {scene} / {shot}": "Оновлено: {scene} / {shot}", + "Could not leave scene: {scene}": "Не вдалося вийти зі сцени: {scene}", + "Seeked: {scene} / {shot}": "Перемотано: {scene} / {shot}", + "Seeking scene clock": "Перемотування сцени", "Camera unavailable — exit cockpit first": "Камера недоступна — спершу вийдіть із кабіни", "No shots to run": "Немає кадрів для запуску", + "Scene transition limit reached — load a shot to reset": "Досягнуто ліміту переходів сцени — завантажте кадр, щоб скинути лічильник", + "Export failed: {error}": "Помилка експорту: {error}", "Project exported": "Проєкт експортовано", + "Importing project": "Імпорт проєкту", + "Imported {file}": "Імпортовано: {file}", + "Import failed: {error}": "Помилка імпорту: {error}", + "Import failed (could not read JSON file)": "Помилка імпорту (не вдалося прочитати файл JSON)", + "Layers refused: {layers}": "Шари відхилено: {layers}", "Could not exit {mode} — scene layers may be refused": "Не вдалося вийти з {mode} — шари сцени може бути відхилено", + "Camera move interrupted": "Переліт камери перервано", + "Scene media timed out": "Минув час очікування медіа сцени", + "Action complete": "Дію виконано", + "Action unavailable or cancelled": "Дія недоступна або скасована", + "Scene actions": "Дії сцени", + "Select a feature or use Tab and Enter to choose an action.": "Виберіть обʼєкт на карті або скористайтеся Tab і Enter, щоб вибрати дію.", + "Selected feature: {feature}. Choose an action.": "Вибрано обʼєкт: {feature}. Виберіть дію.", "Running {index}/{total}: {scene} / {shot}": "Виконання {index}/{total}: {scene} / {shot}", "Scene run complete": "Запуск сцени завершено", + "Bhote Koshi Evidence Sequence": "Послідовність свідчень: Bhote Koshi", + "Nepal Flood Incident": "Паводок у Непалі", "Global Flights Radar": "Глобальний радар польотів", "Orbital Watch": "Орбітальний нагляд", "Thermal Threat Board": "Панель теплових загроз", "City Overload": "Міське перевантаження", - "Omniscience Pullback": "Всевидячий від'їзд", + "Omniscience Pullback": "Всевидючий відʼїзд", + "Global Incident Context": "Глобальний контекст події", + "Nepal-Focused Globe Rotation": "Поворот глобуса до Непалу", + "Bhote Koshi Regional Approach": "Підліт до регіону Bhote Koshi", + "Bhote Koshi Nearby Cities": "Міста поблизу Bhote Koshi", + "Bhote Koshi Incident Corridor": "Коридор події на Bhote Koshi", + "Bhote Koshi Flood Path": "Шлях паводка на Bhote Koshi", + "Bhote Koshi Corridor Overview": "Огляд коридору Bhote Koshi", + "Bhote Koshi Upper Valley": "Верхня долина Bhote Koshi", + "Upper Valley Collapse": "Обвал у верхній долині", + "Debris-Dammed Lake": "Озеро, загачене уламками", + "Nepal-China Border Gate": "Прикордонний перехід Непал — Китай", + "Timure Evidence Cluster": "Група свідчень біля Timure", + "Syabru Besi Passage": "Проходження через Syabru Besi", + "Bidur / Trishuli Consequence": "Наслідки в Bidur / Trishuli", + "Final view": "Фінальний вигляд", + "Scene {n}": "Сцена {n}", "Shot {n}": "Кадр {n}", + "the title of scene {scene} is empty or longer than {max} characters": "назва сцени {scene} порожня або довша за {max} символів", + "the title of shot {shot} in scene {scene} is empty or longer than {max} characters": "назва кадру {shot} у сцені {scene} порожня або довша за {max} символів", + "the project is larger than 5 MiB": "проєкт більший за 5 МіБ", + "the project has too many shots": "у проєкті забагато кадрів", + "the scene data failed validation": "дані сцени не пройшли перевірку", + "Could not complete this action. Check the file, references and selected assets.": "Не вдалося виконати дію. Перевірте файл, посилання й вибрані ресурси.", + "{count} scenes": { + "one": "{count} сцена", + "few": "{count} сцени", + "many": "{count} сцен", + "other": "{count} сцени" + }, + "{count} shots": { + "one": "{count} кадр", + "few": "{count} кадри", + "many": "{count} кадрів", + "other": "{count} кадру" + }, + "{count} data packs": { + "one": "{count} пакет даних", + "few": "{count} пакети даних", + "many": "{count} пакетів даних", + "other": "{count} пакета даних" + }, + "{scene} / {pack}: {status}. File: {path}. {attribution} · {license}": "{scene} / {pack}: {status}. Файл: {path}. {attribution} · {license}", + "Unavailable layers: {layers}": "Недоступні шари: {layers}", + "Uses registered content or linked media. Those external files are not included in a scene bundle. Their original notices still apply.": "Використовує зареєстрований вміст або повʼязані медіафайли. Ці зовнішні файли не входять до архіву сцени. Їхні початкові умови використання й надалі чинні.", + "{bytes} bundled bytes verified. Files stay in memory for this session. Reimport the bundle after reloading the app.": "Перевірено байтів в архіві: {bytes}. Файли зберігаються в памʼяті лише протягом цього сеансу. Після перезавантаження застосунку імпортуйте архів знову.", + "Review scene import": "Перевірка імпорту сцени", + "Nothing is loaded or changed until you apply this file.": "Нічого не завантажується й не змінюється, доки ви не застосуєте цей файл.", + "Ready to import": "Готово до імпорту", + "Apply replaces the current project. Export your current project first if you want to keep both.": "Застосування замінить поточний проєкт. Щоб не втратити його, спершу експортуйте поточний проєкт.", + "Apply import": "Застосувати імпорт", + "Import was not applied. The current project may have changed.": "Імпорт не застосовано. Можливо, поточний проєкт змінився.", + "Select a scene and shot first": "Спершу виберіть сцену й кадр", + "Edit scene details": "Змінити параметри сцени", + "Camera positions use degrees and meters above the ellipsoid. Drafts are validated before they replace your saved scene.": "Положення камери задаються в градусах і метрах над еліпсоїдом. Перш ніж замінити збережену сцену, чернетку перевіряють.", + "Anchors and data packs": "Якорі й пакети даних", + "Shot camera, timing, packs and actions": "Камера кадру, таймінг, пакети й дії", + "New anchor ID": "ID нового якоря", + "Capture camera as anchor": "Зберегти камеру як якір", + "Anchor added to draft": "Якір додано до чернетки", + "Set move start to current camera": "Початок перельоту — поточна камера", + "Move added to draft; destination remains the shot camera": "Переліт додано до чернетки; кінцевою точкою залишається камера кадру", + "Use ordinary flight": "Використати звичайний переліт", + "Invalid shot JSON": "Некоректний JSON кадру", + "Apply details": "Застосувати параметри", + "Select a scene first": "Спершу виберіть сцену", + "Share selected scene": "Поділитися вибраною сценою", + "Scene JSON preserves authored settings and attribution. It does not include asset files. Bundles include only pack files you choose here or previously imported bundle files.": "JSON сцени зберігає авторські налаштування й атрибуцію, але не містить файлів ресурсів. Архів містить лише файли пакетів, вибрані тут, або файли раніше імпортованих архівів.", + "Download scene JSON": "Завантажити JSON сцени", + "Choose data-pack files": "Виберіть файли пакетів даних", + "Or choose a data-pack folder": "Або виберіть теку пакета даних", + "Download asset bundle": "Завантажити архів ресурсів", + "Asset bundle downloaded": "Архів ресурсів завантажено", + "No RTL-SDR device selected": "Пристрій RTL-SDR не вибрано", + "WebUSB requires desktop Chrome or Edge on localhost/HTTPS": "Для WebUSB потрібен настільний Chrome або Edge на localhost/HTTPS", + "RTL-SDR access failed; close other SDR apps and check USB permissions": "Немає доступу до RTL-SDR; закрийте інші SDR-застосунки й перевірте дозволи USB", + "RTL-SDR connection failed": "Не вдалося підключити RTL-SDR", + "Receiving 1090 MHz ADS-B": "Приймання ADS-B на 1090 МГц", + "Receiving broadcast FM": "Приймання FM-мовлення", + "Connect an RTL-SDR to begin.": "Підключіть RTL-SDR, щоб почати.", + "WebUSB is unavailable in this browser": "WebUSB недоступний у цьому браузері", + "USB work abandoned after a stalled transfer": "Роботу з USB перервано: передавання даних зависло", + "SDR decoder worker failed": "Збій обробника декодера SDR", + "SDR decoder did not start; receiver stopped": "Декодер SDR не запустився; приймач зупинено", + "SDR decoder stopped responding; receiver stopped": "Декодер SDR перестав відповідати; приймач зупинено", + "SDR decoder fell behind; receiver stopped": "Декодер SDR не встигає; приймач зупинено", + "WebUSB requires desktop Chrome or Edge": "Для WebUSB потрібен настільний Chrome або Edge", + "Waiting for an RTL-SDR device…": "Очікування пристрою RTL-SDR…", + "Browser audio is suspended; press Connect again to resume it": "Звук у браузері призупинено; натисніть «Підключити» ще раз, щоб відновити його", + "RTL-SDR sample stream stopped": "Потік вибірок RTL-SDR зупинено", + "Switching to {mode}…": "Перемикання на {mode}…", + "Browser audio is suspended; select FM again to resume it": "Звук у браузері призупинено; виберіть FM ще раз, щоб відновити його", + "RTL-SDR gain change failed": "Не вдалося змінити підсилення RTL-SDR", + "Tuned to {mhz} MHz FM": "Налаштовано на FM {mhz} МГц", + "Seeking up…": "Пошук угору…", + "Seeking down…": "Пошук униз…", + "Seek stopped": "Пошук зупинено", + "Scanning {mhz} MHz…": "Сканування {mhz} МГц…", + "Found {mhz} MHz · {snr} dB": "Знайдено {mhz} МГц · {snr} дБ", + "FM signal found at {mhz} MHz": "Знайдено FM-сигнал на {mhz} МГц", + "No FM signal found": "FM-сигнал не знайдено", + "Browser location is unavailable": "Місцезнаходження браузера недоступне", + "Receiver location was not granted": "Доступ до місцезнаходження приймача не надано", + "RTL-SDR disconnected": "RTL-SDR відключено", + "Upstream response too large": "Надто велика відповідь джерела", + "Vector tile request timed out": "Векторні тайли: минув час очікування", + "Vector tiles unavailable": "Векторні тайли недоступні", + "Vector tile metadata unavailable": "Метадані векторних тайлів недоступні", + "Zoom in for vector tile coverage": "Наблизьте карту, щоб завантажити векторні тайли", + "Saturation": "Насиченість", + "Edge Thickness": "Товщина контурів", + "Contrast": "Контраст", + "Grain": "Зерно", + "Vignette": "Віньєтка", + "Pixelation": "Пікселізація", + "Distortion": "Спотворення", + "Instability": "Нестабільність", "Density": "Щільність", + "Gain": "Підсилення", "Bloom": "Світіння", + "Scanlines": "Рядки розгортки", + "Sensitivity": "Чутливість", + "WHOT/BHOT": "WHOT/BHOT", + "Ironbow": "Ironbow", + "unsaved CCTV calibration": "незбережене калібрування CCTV", + "the open cockpit": "відкрита кабіна", + "Switching language reloads the page. This will be lost: {items}. Switch anyway?": "Зміна мови перезавантажить сторінку. Буде втрачено: {items}. Однаково змінити мову?", "VISUAL PRESETS": "ВІЗУАЛЬНІ ПРЕСЕТИ", "LOCATION": "РОЗТАШУВАННЯ", - "CONTACTS — nearest planes · vessels · sites": "КОНТАКТИ — найближчі літаки · судна · об’єкти", + "CONTACTS — nearest planes · vessels · sites": "КОНТАКТИ — найближчі літаки · судна · обʼєкти", "SPACE MISSIONS — launches & orbital assets": "КОСМІЧНІ МІСІЇ — запуски та орбітальні апарати", - "LIVE SIGNALS": "СИГНАЛИ У РЕАЛЬНОМУ ЧАСІ", + "LIVE SIGNALS": "СИГНАЛИ ОНЛАЙН", "Contacts could not complete the requested transition; try again": "Контакти не змогли завершити запитаний перехід; спробуйте ще раз", "CCTV layer unavailable": "Шар CCTV недоступний", + "Link shared": "Посилання надіслано", "Link copied!": "Посилання скопійовано!", "Copy failed": "Не вдалося скопіювати", + "Return map to straight-down view": "Повернути карту до вигляду згори", + "Tilt map to oblique view": "Нахилити карту в перспективний вигляд", + "Reset map to north up. Current heading {heading} degrees": "Повернути карту північчю вгору. Поточний курс: {heading}°", + "Tilted view": "Вигляд із нахилом", + "Straight-down view": "Вигляд згори", + "North up": "Північ угорі", "CCTV calibration saved": "Калібрування CCTV збережено", + "HDG": "КУРС", + "PITCH": "ТАНГАЖ", + "FOV": "ОГЛЯД", + "RANGE": "ДАЛЬН.", + "HGT": "ВИС.", + "ΔN": "ΔПн", + "ΔE": "ΔСх", + "{value}m": "{value} м", "CCTV calibration reset": "Калібрування CCTV скинуто", "ADJUST ON": "КОРИГУВАННЯ УВІМК.", "ADJUST": "КОРИГУВАННЯ", + "SNAPSHOT": "ЗНІМОК", + "LIVE": "ОНЛАЙН", + "UPSTREAM": "ДЖЕРЕЛО", + "SYNTHETIC": "ІМІТАЦІЯ", + "CONFIGURED": "НАЛАШТОВАНО", + "SEED": "КАТАЛОГ", "UNKNOWN": "НЕВІДОМО", + "OK": "НОРМА", "ERROR": "ПОМИЛКА", + "Live HLS connected": "Потік HLS підключено", + "Live HLS unavailable": "Потік HLS недоступний", + "No stream URL configured": "URL потоку не налаштовано", + "Live stream connected": "Прямий потік підключено", + "Snapshot feed connected": "Потік знімків підключено", + "Media fetch failed": "Не вдалося отримати медіа", + "Upstream snapshot active": "Знімок із джерела активний", + "Fallback Street View frame": "Резервний кадр із Перегляду вулиць", + "Upstream unavailable": "Джерело недоступне", + "No source configured": "Джерело не налаштовано", + "Configured source": "Налаштоване джерело", + "Configured Source": "Налаштоване джерело", + "Synthetic fallback": "Синтетичний резерв", + "Upstream HTTP {status}": "Джерело: HTTP {status}", + "Unexpected media type {type}": "Неочікуваний тип медіа: {type}", "SOURCE · UNKNOWN": "ДЖЕРЕЛО · НЕВІДОМЕ", "FRAME · LOADING": "КАДР · ЗАВАНТАЖЕННЯ", "FRAME · UNAVAILABLE": "КАДР · НЕДОСТУПНИЙ", "CALIBRATED": "КАЛІБРОВАНО", - "CURATED": "ПІДІБРАНО", - "RAW PRIOR": "СИРЕ АПРІОРНЕ", + "CURATED": "ВИВІРЕНО", + "RAW PRIOR": "ПОЧАТКОВА ОЦІНКА", "CCTV ON": "CCTV УВІМК.", "CCTV OFF": "CCTV ВИМК.", - "VIEWSHED ON": "ЗОНА ВИДИМОСТІ УВІМКНЕНА", - "COVERAGE ON": "ЗОНА ОГЛЯДУ УВІМК.", - "COVERAGE OFF": "ЗОНА ОГЛЯДУ ВИМК.", + "VIEWSHED ON": "ЗОНА ВИДИМОСТІ УВІМК.", + "COVERAGE ON": "ОХОПЛЕННЯ УВІМК.", + "COVERAGE OFF": "ОХОПЛЕННЯ ВИМК.", "AUTO HOP ON": "АВТОПЕРЕХІД УВІМК.", "AUTO HOP OFF": "АВТОПЕРЕХІД ВИМК.", "PROJECTION ON": "ПРОЄКЦІЯ УВІМК.", "PROJECTION OFF": "ПРОЄКЦІЯ ВИМК.", - "CAL · EDITED (UNSAVED)": "CAL · ЗМІНЕНО (НЕ ЗБЕРЕЖЕНО)", - "CAL · {badge}": "CAL · {badge}", + "CAL · EDITED (UNSAVED)": "КАЛІБР. · ЗМІНЕНО (НЕ ЗБЕРЕЖЕНО)", + "CAL · {badge}": "КАЛІБР. · {badge}", "MONITOR": "МОНІТОР", - "OFF": "ВИМКНЕНО", - "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}": "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}", + "OFF": "ВИМК.", + "{city} · HDG {heading} · FOV {fov} · RANGE {range}m · {projection}{calBadge} · {provider}{status}": "{city} · КУРС {heading} · ОГЛЯД {fov} · ДАЛЬН. {range} м · {projection}{calBadge} · {provider}{status}", "{count} cameras loaded · click a camera to activate": { "one": "{count} камеру завантажено · клацніть камеру, щоб активувати", "few": "{count} камери завантажено · клацніть камеру, щоб активувати", @@ -381,30 +1664,33 @@ "MIXED CONDITIONS": "ЗМІШАНІ УМОВИ", "CYCLE ON": "ЦИКЛ УВІМКНЕНО", "CYCLE OFF": "ЦИКЛ ВИМКНЕНО", - "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Зупинити автоматичне гортання сторінок. Попередня, Наступна та вкладки СИГ/НОВ/ЛОК залишаються доступними.", - "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.": "Гортає сторінки брифінгу автоматично кожні 9 секунд (Сигнали → Новини → Локально). Пауза, доки ви наводите вказівник або фокусуєте панель. Дані сигналів у реальному часі оновлюються безперервно незалежно від цього.", + "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Зупинити автоматичне гортання сторінок. Кнопки ПОПЕР./ДАЛІ та вкладки СИГН./НОВИНИ/МІСЦ. залишаються доступними.", + "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.": "Автоматично гортає сторінки брифінгу кожні 9 секунд (Сигнали → Новини → Місцеве). Пауза, доки ви наводите вказівник на панель або вона у фокусі. Дані сигналів у реальному часі однаково оновлюються безперервно.", "ACQUIRING REGIONAL NEWS": "ОТРИМАННЯ РЕГІОНАЛЬНИХ НОВИН", "REGIONAL NEWS UNAVAILABLE": "РЕГІОНАЛЬНІ НОВИНИ НЕДОСТУПНІ", "RESOLVING REGION": "ВИЗНАЧЕННЯ РЕГІОНУ", "REGION UNAVAILABLE": "РЕГІОН НЕДОСТУПНИЙ", "NO RECENT LOCATION MATCHES": "НЕМАЄ СВІЖИХ ЗБІГІВ ЗА РОЗТАШУВАННЯМ", "{domain} · {age}": "{domain} · {age}", + "{value} KM/H": "{value} КМ/ГОД", "CLOUD {pct}%": "ХМАРНІСТЬ {pct}%", "CLOUD UNKNOWN": "ХМАРНІСТЬ НЕВІДОМА", "{source} · LOCATION QUERY": "{source} · ЗАПИТ ЗА РОЗТАШУВАННЯМ", "REGIONAL NEWS": "РЕГІОНАЛЬНІ НОВИНИ", + "{label} · {radius} AIR/SEA WINDOW": "{label} · ВІКНО ПОВІТРЯ/МОРЕ {radius}", + "{scope} · INSTALLATIONS {coverage}": "{scope} · ОБʼЄКТИ: {coverage}", "CONTEXT STANDBY": "КОНТЕКСТ: ОЧІКУВАННЯ", "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "УВІМКНІТЬ ГЛОБАЛЬНИЙ КОНТЕКСТ ДЛЯ ПІНГІВ БЛИЗЬКОСТІ", "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "КОНТАКТ ВТРАЧЕНО · ОСТАННІ ВІДОМІ ПОКАЗНИКИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "CONTACT LOST · {subject}": "КОНТАКТ ВТРАЧЕНО · {subject}", - "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "ОБ’ЄКТ ПОКИНУВ КАНАЛ ДАНИХ · ІНДИКАТОРИ ТРИМАЮТЬ ОСТАННЄ ВІДОМЕ", + "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "ОБʼЄКТ ЗНИК ІЗ ПОТОКУ · ПОКАЗНИКИ ОСТАННІ ВІДОМІ", "{cohort} · {contact}": "{cohort} · {contact}", "NO AVAILABLE EXAMPLE": "НЕМАЄ ДОСТУПНОГО ПРИКЛАДУ", "{cohort}, Unavailable": "{cohort}, недоступно", "AHEAD": "ПОПЕРЕДУ", "{side} {angle}": "{side} {angle}", - "L": "L", - "R": "R", + "L": "Л", + "R": "П", "{count} INPUTS UNKNOWN · NOT AN ALL-CLEAR": { "one": "{count} НЕВІДОМИЙ ПАРАМЕТР · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "few": "{count} НЕВІДОМІ ПАРАМЕТРИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", @@ -412,16 +1698,20 @@ "other": "{count} НЕВІДОМОГО ПАРАМЕТРА · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»" }, "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "ДОСТУПНІ ВХІДНІ ДАНІ АКТУАЛЬНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "SQUAWK {code} · {status}": "СКВОК {code} · {status}", + "ADS-B PRIORITY · {status}": "ADS-B ПРІОРИТЕТ · {status}", + "ADS-B EMERGENCY · {status}": "ADS-B АВАРІЯ · {status}", "AIRCRAFT": "БОРТ", "ACQUIRING SURFACE": "ОТРИМАННЯ НАЗЕМНИХ ДАНИХ", "SURFACE FALLBACK": "РЕЗЕРВ НАЗЕМНИХ ДАНИХ", - "STALE FEED": "ЗАСТАРІЛИЙ КАНАЛ ДАНИХ", - "LIVE TRACK": "ТРЕК У РЕАЛЬНОМУ ЧАСІ", + "STALE FEED": "ЗАСТАРІЛИЙ ПОТІК", + "LIVE TRACK": "ТРЕК ОНЛАЙН", "COMMERCIAL": "КОМЕРЦІЙНИЙ", + "{aircraftClass} · {emergency} · {feedState}": "{aircraftClass} · {emergency} · {feedState}", "{aircraftClass} · {feedState} · COURSE ALIGNED": "{aircraftClass} · {feedState} · КУРС ВИРІВНЯНО", "ARROW · ESTIMATED DIRECTION": "СТРІЛКА · ОРІЄНТОВНИЙ НАПРЯМОК", "ROUTE DATA UNAVAILABLE": "ДАНІ МАРШРУТУ НЕДОСТУПНІ", - "DEST {bearing}": "DEST {bearing}", + "DEST {bearing}": "ПРИЗН. {bearing}", "Disable cockpit weather effects": "Вимкнути погодні ефекти кабіни", "Enable cockpit weather effects": "Увімкнути погодні ефекти кабіни", "ON": "УВІМК.", @@ -441,17 +1731,18 @@ "Expand cockpit briefing panel": "Розгорнути панель брифінгу кабіни", "Collapse briefing panel": "Згорнути панель брифінгу", "Expand briefing panel": "Розгорнути панель брифінгу", - "OBSERVED / MAPPED PINGS": "СПОСТЕРЕЖЕНІ / КАРТОГРАФОВАНІ ПІНГИ", + "OBSERVED / MAPPED PINGS": "СПОСТЕРЕЖЕНІ / НАНЕСЕНІ ПІНГИ", "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "ПОДІЇ ПІДТВЕРДЖЕНІ ДЖЕРЕЛАМИ · БЕЗ ШТУЧНИХ НОВИН", "LATEST LOCATION-MATCHED REPORTING": "ОСТАННІ ПУБЛІКАЦІЇ ЗА РОЗТАШУВАННЯМ", - "LOCAL INFO": "ЛОКАЛЬНА ІНФОРМАЦІЯ", + "{source} · LOCATION QUERY · RECENT": "{source} · ЗАПИТ ЗА МІСЦЕМ · НЕЩОДАВНІ", + "LOCAL INFO": "МІСЦЕВА ІНФОРМАЦІЯ", "PLACE / CONDITIONS / POSITION": "МІСЦЕ / УМОВИ / ПОЗИЦІЯ", "TIME UNKNOWN": "ЧАС НЕВІДОМИЙ", "{count}M AGO": "{count} ХВ ТОМУ", "{count}H AGO": "{count} ГОД ТОМУ", "{count}D AGO": "{count} ДН ТОМУ", "DIR UNKNOWN": "НАПР. НЕВІДОМИЙ", - "Select flight {title}": "Обрати рейс {title}", + "Select flight {title}": "Вибрати рейс {title}", "{aircraftClass} · CURRENT": "{aircraftClass} · ПОТОЧНИЙ", "MILITARY FLIGHT": "ВІЙСЬКОВИЙ РЕЙС", "COMMERCIAL FLIGHT": "КОМЕРЦІЙНИЙ РЕЙС", @@ -484,8 +1775,8 @@ }, "Selected data layers could not be cleared": "Не вдалося очистити обрані шари даних", "Space Missions could not complete the requested transition; try again": "Космічні місії не змогли завершити запитаний перехід; спробуйте ще раз", - "Nearby installations refreshed": "Найближчі об’єкти оновлено", - "Nearby installations could not be refreshed; try again": "Не вдалося оновити найближчі об’єкти; спробуйте ще раз", + "Nearby installations refreshed": "Найближчі обʼєкти оновлено", + "Nearby installations could not be refreshed; try again": "Не вдалося оновити найближчі обʼєкти; спробуйте ще раз", "Space Missions cancellation could not restore the previous layer state": "Скасування Космічних місій не змогло відновити попередній стан шарів", "That layer is unavailable in the current Context mode": "Цей шар недоступний у поточному режимі контексту", "{layerId} could not {action} cleanly": "{layerId}: не вдалося коректно {action}", @@ -494,8 +1785,44 @@ "{mode} could not start because another layer did not stop cleanly": "{mode} не вдалося запустити, бо інший шар не зупинився коректно", "Space Missions": "Космічні місії", "Context": "Контекст", - "Live Flights": "Літаки в реальному часі", - "Military Flights": "Військова авіація", + "Rendered globe frames per second · toggle with `": "Кадрів глобуса за секунду · перемикання клавішею `", + "imported map files": "імпортовані файли на карті", + "Ground heights could not be refreshed. Try the file again when the map has loaded.": "Не вдалося оновити висоти рельєфу. Спробуйте імпортувати файл ще раз, коли карта завантажиться.", + "{count} map objects": { + "one": "{count} обʼєкт на карті", + "few": "{count} обʼєкти на карті", + "many": "{count} обʼєктів на карті", + "other": "{count} обʼєкта на карті" + }, + ", drawn with its own styles": ", зі своїми стилями", + "Hide {name}": "Сховати: {name}", + "Show {name}": "Показати: {name}", + "Fly to {name}": "Переліт: {name}", + "Remove {name}": "Видалити: {name}", + "At most {count} files at once — remove one first.": "Не більше {count} файлів одночасно — спершу видаліть один.", + "Reading {name}…": "Читання: {name}…", + "That file could not be read.": "Не вдалося прочитати цей файл.", + "Added {count} files.": { + "one": "Додано {count} файл.", + "few": "Додано {count} файли.", + "many": "Додано {count} файлів.", + "other": "Додано {count} файлу." + }, + "{count} files could not be added ({name}: {error})": { + "one": "Не вдалося додати {count} файл ({name}: {error})", + "few": "Не вдалося додати {count} файли ({name}: {error})", + "many": "Не вдалося додати {count} файлів ({name}: {error})", + "other": "Не вдалося додати {count} файлу ({name}: {error})" + }, + "Some KML content was left out.": "Частину вмісту KML пропущено.", + "Press on the ground, not the sky": "Натисніть на землю, а не на небо", + "Drag to size the box": "Потягніть, щоб задати розмір області", + "light {source} to use your {name} key": "увімкніть {source}, щоб використати свій ключ {name}", + "light {source}": "увімкніть {source}", + ", or ": " або ", + "{requirement}, or {offer}": "{requirement} або {offer}", + "Live Flights": "Рейси онлайн", + "Military Flights": "Військові рейси", "Earthquakes (24h)": "Землетруси (24 год)", "Satellites": "Супутники", "Space Missions (30d)": "Космічні місії (30 дн)", @@ -503,41 +1830,132 @@ "CCTV": "CCTV", "Radio": "Радіо", "Bikeshare": "Велопрокат", - "Live AIS Vessels": "Судна AIS у реальному часі", - "Mapped Installations": "Нанесені об’єкти", + "Live AIS Vessels": "Судна AIS онлайн", + "Mapped Installations": "Нанесені обʼєкти", "Global Context": "Глобальний контекст", "Datacenters": "Дата-центри", "Dams": "Греблі", "Submarine Cables": "Підводні кабелі", "FIRMS Active Fires": "Активні пожежі FIRMS", + "Local ADS-B": "Локальний ADS-B", + "Transit": "Громадський транспорт", + "Recent Imagery": "Свіжі знімки", + "Fire Perimeters": "Контури пожеж", + "GNSS Integrity": "Цілісність GNSS", + "S2 GhostMaps": "S2 GhostMaps", + "Rain radar": "Радар опадів", + "Lightning density": "Щільність блискавок", + "Cyclone advisories": "Зведення про циклони", + "ALPR Cameras": "Камери ALPR", + "Live Vessels": "Судна онлайн", + "Bike Share": "Прокат велосипедів", + "Cameras": "Камери", + "Street Level": "Вуличні знімки", + "Mapped ALPR Cameras": "Камери ALPR на карті", + "Data Centers": "Дата-центри", + "Active Fires": "Активні пожежі", + "Military aircraft": "Військові літаки", + "Vessels": "Судна", + "CCTV + Street View fallback": "CCTV + резерв: Перегляд вулиць", + "OpenStreetMap + optional Google Maps Places": "OpenStreetMap + Google Maps Places (опц.)", + "GFS / ECMWF IFS · FORECAST": "GFS / ECMWF IFS · ПРОГНОЗ", + "NOAA nowCOAST · OBSERVED": "NOAA nowCOAST · СПОСТЕРЕЖЕННЯ", + "NASA FIRMS · LIVE": "NASA FIRMS · ОНЛАЙН", + "OSM routing": "Маршрутизація OSM", + "data source|Local": "Локальні дані", "ENABLING": "УВІМКНЕННЯ", "DISABLING": "ВИМКНЕННЯ", + "Movement": "Рух", + "Infrastructure": "Інфраструктура", + "Events": "Події", + "Weather": "Погода", + "Utilities": "Інструменти", + "Other layers": "Інші шари", "{state} · {source}": "{state} · {source}", "UNCERTAIN · {source} · lifecycle state requires reconciliation": "НЕВИЗНАЧЕНО · {source} · стан життєвого циклу потребує звірки", "{state} · {source} · {detail} · retry {seconds}s": "{state} · {source} · {detail} · повтор через {seconds} с", "{state} · {source} · {detail}": "{state} · {source} · {detail}", "never": "ніколи", "{source} · {loadingLabel}": "{source} · {loadingLabel}", + "{accepted} of {raw} records accepted": "прийнято записів: {accepted} з {raw}", + "incomplete snapshot": "неповний знімок", + "{state} · {source} · {detail} · {ago}": "{state} · {source} · {detail} · {ago}", "{state} · {source} · {ago} · retrying in {seconds}s": "{state} · {source} · {ago} · повтор через {seconds} с", "{state} · {source} · {ago}": "{state} · {source} · {ago}", "{source} · {ago}": "{source} · {ago}", "UNCERTAIN": "НЕВИЗНАЧЕНО", "status chip|UNAVAILABLE": "НЕДОСТУПНО", + "Data source unavailable": "Джерело даних недоступне", "{name}: {state}": "{name}: {state}", "{count}s ago": "{count} с тому", - "CONNECTING": "З'ЄДНАННЯ", + "Local FM stopped: internet radio started": "Локальний FM зупинено: запущено інтернет-радіо", + "IDLE": "ОЧІКУВАННЯ", + "CONNECTING": "ЗʼЄДНАННЯ", + "TUNING": "НАЛАШТУВАННЯ", + "STREAMING": "ПРИЙМАННЯ", + "UNSUPPORTED": "НЕ ПІДТРИМ.", + "idle": "очікування", + "running": "працює", + "suspended": "призупинено", + "closed": "закрито", + "feed status|live": "онлайн", + "feed status|stale": "застарів", + "feed status|unreachable": "недоступний", + "feed status|invalid": "некоректний", + "waiting for IQ": "очікування IQ", + "{count} messages": { + "one": "{count} повідомлення", + "few": "{count} повідомлення", + "many": "{count} повідомлень", + "other": "{count} повідомлення" + }, + "DSP {count} blocks": { + "one": "DSP {count} блок", + "few": "DSP {count} блоки", + "many": "DSP {count} блоків", + "other": "DSP {count} блоку" + }, + "DSP waiting": "DSP очікує", + "{level} dBFS audio": "аудіо {level} dBFS", + "audio signal --": "аудіосигнал --", + "audio {state}": "аудіо: {state}", + "{count} HEARD": { + "one": "ЧУТНО: {count}", + "few": "ЧУТНО: {count}", + "many": "ЧУТНО: {count}", + "other": "ЧУТНО: {count}" + }, + "DISCONNECT": "ВІДКЛЮЧИТИ", + "CONNECT": "ПІДКЛЮЧИТИ", + "LOCATING…": "ВИЗНАЧЕННЯ…", + "LOCATED": "ВИЗНАЧЕНО", + "LOCATE": "ГЕОПОЗИЦІЯ", + " · read while Local ADS-B is on": " · зчитуються, коли ввімкнено шар «Локальний ADS-B»", + "Decoder feeds: {feeds}": "Потоки декодера: {feeds}", + "Language: {language}": "Мова: {language}", + "Change the interface language": "Змінити мову інтерфейсу", + "Interface language": "Мова інтерфейсу", + "Search languages": "Пошук мови", + "No matching languages": "Відповідних мов немає", "📍 Location: --": "📍 Розташування: --", "Landmark: --": "Орієнтир: --", "Searched location": "Знайдене розташування", "ORBIT": "ОРБІТА", "Location not found": "Розташування не знайдено", + "Check the spelling and press Enter to search again.": "Перевірте написання й натисніть Enter, щоб повторити пошук.", "Search failed": "Пошук не вдався", + "Press Enter to try again.": "Натисніть Enter, щоб спробувати знову.", + "Detailed outline unavailable": "Докладний контур недоступний", "Fly to a POI first": "Спершу полетіть до орієнтира", "Reset to full globe view": "Скинути до загального вигляду глобуса", "Reset cockpit to full globe view": "Скинути кабіну до вигляду всього глобуса", "Resetting to full globe view": "Скидання до вигляду всього глобуса", "Resetting cockpit to full globe view": "Скидання кабіни до вигляду всього глобуса", "MAP": "КАРТА", + "Layers": "Шари", + "Search": "Пошук", + "More": "Ще", + "Panels": "Панелі", "panel": "панель", "Expand {name}": "Розгорнути {name}", "Collapse {name}": "Згорнути {name}", @@ -546,17 +1964,31 @@ "Expand Radio section": "Розгорнути розділ радіо", "Collapse Radio section": "Згорнути розділ радіо", "Panel layout updated — positions reset to new defaults": "Компонування панелей оновлено — позиції скинуто до нових типових", + "Austin": "Остін", + "San Francisco": "Сан-Франциско", + "New York": "Нью-Йорк", + "Tokyo": "Токіо", + "London": "Лондон", + "Paris": "Париж", + "Dubai": "Дубай", + "Washington DC": "Вашингтон", + "Tallinn": "Таллінн", + "Los Angeles": "Лос-Анджелес", "Collapse Cockpit display options": "Згорнути параметри дисплея кабіни", "Expand Cockpit display options": "Розгорнути параметри дисплея кабіни", "Collapse Cockpit Radio controls": "Згорнути керування радіо кабіни", "Expand Cockpit Radio controls": "Розгорнути керування радіо кабіни", + "CH {index} / {total}": "КАН. {index} / {total}", "NO STATIONS": "НЕМАЄ СТАНЦІЙ", "NO STATION AVAILABLE": "НЕМАЄ ДОСТУПНИХ СТАНЦІЙ", "{name}, station {index} of {total}": "{name}, станція {index} з {total}", "No station available": "Немає доступної станції", "OFF AIR": "НЕ В ЕФІРІ", "STATION UNAVAILABLE": "СТАНЦІЯ НЕДОСТУПНА", + "Station unavailable after directory refresh": "Станція недоступна після оновлення каталогу", "Radio could not {action} cleanly": "Радіо: не вдалося коректно {action}", + "Go to expanded Radio section": "Перейти до розгорнутого розділу радіо", + "Expand Radio section in Context": "Розгорнути розділ «Радіо» на панелі «Контекст»", "Close compact Radio controls": "Закрити компактне керування радіо", "Open compact Radio controls": "Відкрити компактне керування радіо", "SYNC": "СИНХР.", @@ -566,46 +1998,196 @@ "Reconcile Radio — lifecycle uncertain": "Звірити радіо — стан життєвого циклу невизначений", "Disable Radio": "Вимкнути радіо", "Enable Radio": "Увімкнути радіо", + "{category} ({count})": "{category} ({count})", "DIRECTORY BAND": "ДІАПАЗОН КАТАЛОГУ", "{category} BAND": "{category} ДІАПАЗОН", "NO STATION SELECTED": "СТАНЦІЮ НЕ ВИБРАНО", "Directory metadata only": "Лише метадані каталогу", "Loading station directory…": "Завантаження каталогу станцій…", - "Choose a globe marker or use next.": "Виберіть маркер на глобусі або натисніть «наступна».", + "Choose a globe marker or use next.": "Виберіть маркер на глобусі або перейдіть до наступної станції.", "TAGS · {tags}": "ТЕГИ · {tags}", "Play": "Відтворити", + "PAUSE": "ПАУЗА", + "RESUME": "ПРОДОВЖ.", "PLAY": "ВІДТВОРИТИ", - "selected": "обрану", + "selected": "вибрану", "nearest": "найближчу", "{action} {target} radio station": "{action} {target} радіостанцію", "RADIO STATE UNCERTAIN": "СТАН РАДІО НЕВИЗНАЧЕНИЙ", "SYNCING DIRECTORY": "СИНХРОНІЗАЦІЯ КАТАЛОГУ", "RADIO READY": "РАДІО ГОТОВЕ", "SYNCING": "СИНХРОНІЗАЦІЯ", - "READY": "ГОТОВА", + "READY": "ГОТОВО", "station": "станція", + " · stale/degraded directory": " · каталог застарів/з перебоями", + " · degraded directory": " · каталог з перебоями", + " · stale directory": " · каталог застарів", + " · outside current filter": " · поза поточним фільтром", "Ready — playback starts only from your action": "Готово — відтворення починається лише за вашою дією", "Radio off": "Радіо вимкнено", - "Connecting directly to broadcaster…": "Пряме з’єднання з мовником…", + "Connecting directly to broadcaster…": "Пряме зʼєднання з мовником…", "Buffering broadcaster stream…": "Буферизація потоку мовника…", "Playing {station}": "Відтворюється: {station}", "Paused {station}": "Пауза: {station}", "Broadcaster stream unavailable": "Потік мовника недоступний", + " · muted during voice interaction": " · приглушено під час голосової сесії", + " · restoring volume after voice": " · відновлення гучності після голосової сесії", + " · static indicates no broadcaster audio": " · шум означає відсутність аудіо мовника", + " · tuning static until broadcaster starts": " · шум налаштування, доки не почнеться мовлення", "Station unavailable after directory refresh — choose another channel": "Станція недоступна після оновлення каталогу — виберіть інший канал", "Radio is enabling…": "Радіо вмикається…", "Radio is disabling…": "Радіо вимикається…", "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "Стан радіо невизначений — звірте через «Увімкнути» або «Вимкнути»", + "Clear reading": "Очистити покази", + "Earlier observation": "Раніше спостереження", + "Observed history": "Історія спостережень", + "Later observation": "Пізніше спостереження", + "Latest": "Останні", + "Newest frame per product": "Найсвіжіший кадр кожного продукту", + "Replay observed history": "Відтворити історію спостережень", + "Imagery on Esri · Google 3D returns when cleared": "Підкладка: Esri · скидання поверне Google 3D", + "Point the camera at the ground to use the view": "Наведіть камеру на землю, щоб використати вигляд", + "That point cannot anchor a box": "Від цієї точки не можна побудувати область", + "Imagery stops at ±{limit}° latitude": "Знімки є лише до ±{limit}° широти", + "{owner} is using the pointer — close it first": "Вказівник зайнятий: «{owner}». Спершу закрийте його", + "Box is {size} wide · limit {limit}": "Область завширшки {size} · межа {limit}", + "View is {size} wide · limit {limit}": "Вигляд завширшки {size} · межа {limit}", + "VS BASEMAP": "З ПІДКЛАДКОЮ", + "A / B": "A / B", + "Newest low-cloud day for this box · scene cloud, not box cloud": "Найсвіжіший малохмарний день для цієї області · хмарність усієї сцени, а не області", + "Newest day covering this box · cloudier than 20%": "Найсвіжіший день із покриттям цієї області · хмарність понад 20%", + "Newest day with imagery for this box · partial coverage": "Найсвіжіший день зі знімками цієї області · часткове покриття", + "Newest daily overview for this box": "Найсвіжіший щоденний огляд для цієї області", + "newest clear day": "найсвіжіший ясний день", + "newest day (cloudy)": "найсвіжіший день (хмарно)", + "newest day (partial coverage)": "найсвіжіший день (часткове покриття)", + "newest overview": "найсвіжіший огляд", + "No imagery": "Немає знімків", + "Loading": "Завантаження", + "coverage|full": "повне", + "coverage|partial": "часткове", + "unknown": "невідомо", + "no imagery": "немає знімків", + "{percent}% cloud": "хмарність {percent}%", + "{min}–{max}% cloud": "хмарність {min}–{max}%", + "NO BOX": "НЕМАЄ ОБЛАСТІ", + "SEARCHING": "ПОШУК", + "{count} DAYS": { + "one": "{count} ДЕНЬ", + "few": "{count} ДНІ", + "many": "{count} ДНІВ", + "other": "{count} ДНЯ" + }, + "Zoom in or draw a smaller box": "Наблизьте карту або виділіть меншу область", + "Select a box or use the view": "Виділіть область або використайте поточний вигляд", + "Searching the last 30 days": "Пошук за останні 30 днів", + "No days to show for this box": "Для цієї області немає чого показати", + "Drag the divider · SWAP trades sides": "Тягніть роздільник · «ПОМІНЯТИ» — зміна сторін", + "← → preview · A or B pins the focused day": "← → перегляд · A або B закріплює вибраний день", + "← → preview the other side · A or B pins it": "← → перегляд іншої сторони · A або B закріплює її", + "S on another day replaces it · × unpins": "S на іншому дні замінює його · × відкріплює", + "← → preview · S shows the focused day": "← → перегляд · S показує вибраний день", + "ZOOM IN": "НАБЛИЗИТИ", + "Fly in until the view fits the 1,000 km limit": "Наближайтеся, доки вигляд не вміститься в межу 1000 км", + "Imagery days, newest first · arrows move, S or A and B pin": "Дні зі знімками, спершу нові · стрілки — переміщення, S або A і B — закріпити", + "On the map": "На карті", + "Mode": "Режим", + "Imagery opacity": "Непрозорість знімків", + "SWAP": "ПОМІНЯТИ", + "Trade the two sides of the divider": "Поміняти місцями сторони роздільника", + "SELECT BOX": "ВИДІЛИТИ", + "Drag a box on the map (Esc cancels)": "Виділіть область на карті (Esc — скасування)", + "USE VIEW": "ЗА ВИГЛЯДОМ", + "Use the current view as the box": "Використати поточний вигляд як область", + "Forget the box and its images": "Скинути область і її знімки", + "START HERE": "ПОЧНІТЬ ТУТ", + "Checking": "Перевірка", + "PREVIEW": "ПЕРЕГЛЯД", + "Newest day with imagery for this box": "Найсвіжіший день зі знімками цієї області", + "SHOW": "ПОКАЗАТИ", + "Pin {day} as {slot}": "Закріпити {day} як {slot}", + "Show {day}": "Показати {day}", + "pinned {slot}": "закріплено як {slot}", + "shown": "показано", + "preview": "перегляд", + "start here": "почніть тут", + "No box": "Немає області", + "Searching": "Пошук", + "Every day is empty here": "Тут усі дні порожні", + "Sources off": "Джерела вимкнено", + "VS": "ПОРІВН.", + "Not set": "Не задано", + "Basemap": "Підкладка", + "Source off": "Джерело вимкнено", + "Unpin {slot}": "Відкріпити {slot}", + "Unpin the image": "Відкріпити знімок", + "EXPORT {slot}": "ЕКСП. {slot}", + "EXPORT": "ЕКСПОРТ", + "Download {slot} as a PNG": "Завантажити {slot} у PNG", + "Download the image as a PNG": "Завантажити знімок у PNG", + "Box {width} × {height} km": "Область {width} × {height} км", + "Acquired {time}": "Знято {time}", + "Coverage {coverage}": "Покриття {coverage}", + "START HERE · {reason}": "ПОЧНІТЬ ТУТ · {reason}", + "Daily overview shows little detail in a box this small": "У такій малій області щоденний огляд майже не показує деталей", + "Imagery: NASA GIBS and Worldview · HLS (Sentinel-2, Landsat 8/9) and VIIRS": "Знімки: NASA GIBS і Worldview · HLS (Sentinel‑2, Landsat 8/9) і VIIRS", + "Details": "Докладно", + "Times, coverage, sources": "Час, покриття, джерела", + "HIDE EMPTY DAYS": "СХОВАТИ ПОРОЖНІ ДНІ", + "SHOW EMPTY DAYS · {count}": "ПОКАЗАТИ ПОРОЖНІ ДНІ · {count}", + "Days the probe found empty in this box": "Дні, у які перевірка не знайшла знімків у цій області", + "image": "знімок", + "BASEMAP": "ПІДКЛАДКА", + "The basemap": "Підкладка", + "basemap": "підкладка", + "Recent imagery against the basemap divider": "Роздільник: свіжі знімки й підкладка", + "Recent imagery A and B divider": "Роздільник свіжих знімків A і B", + "{before} {left} percent, {after} {right} percent": "{before}: {left}%, {after}: {right}%", + "Export failed · {error}": "Помилка експорту · {error}", "Scene action failed": "Не вдалося виконати дію сцени", + "New scene name": "Назва нової сцени", + "Delete scene \"{scene}\" and all shots?": "Видалити сцену «{scene}» і всі кадри?", "Delete shot \"{shot}\"?": "Видалити кадр «{shot}»?", - "SPARSE": "РЕДКИЙ", - "BALANCED": "ЗБАЛАНСОВАНИЙ", + "Stopped (Esc)": "Зупинено (Esc)", + "SPARSE": "РІДКО", + "BALANCED": "ПОМІРНО", + "No shots yet. Use CAPTURE SHOT to save current look.": "Кадрів поки немає. Натисніть «ЗНЯТИ КАДР», щоб зберегти поточний вигляд.", + "Double-click to rename": "Двічі клацніть, щоб перейменувати", + "Shot name": "Назва кадру", + "LOAD": "ЗАВАНТАЖИТИ", "DEL": "ВИДАЛ.", - "entity": "об’єкт", - "Shared {subject} follow expired": "{subject}: ТЕРМІН СТЕЖЕННЯ МИНУВ", - "Shared {subject} could not be restored — feed unavailable": "{subject} НЕ ВДАЛОСЯ ВІДНОВИТИ — КАНАЛ ДАНИХ НЕДОСТУПНИЙ", - "Shared {subject} is unavailable": "{subject}: НЕМАЄ ДОСТУПУ", + "{duration}s + {hold}s": "{duration} с + {hold} с", + "Choose files": "Вибрати файли", + "{count} files selected": { + "one": "Вибрано файлів: {count}", + "few": "Вибрано файлів: {count}", + "many": "Вибрано файлів: {count}", + "other": "Вибрано файлів: {count}" + }, + "No file chosen": "Файли не вибрано", + "Cancel": "Скасувати", + "EDIT DETAILS": "ЗМІНИТИ ПАРАМЕТРИ", + "SHARE SCENE": "ПОДІЛИТИСЯ СЦЕНОЮ", + "Shared flight follow expired": "Термін стеження за рейсом за посиланням минув", + "Shared military flight follow expired": "Термін стеження за військовим рейсом за посиланням минув", + "Shared satellite follow expired": "Термін стеження за супутником за посиланням минув", + "Shared flight could not be restored — feed unavailable": "Не вдалося відновити рейс за посиланням — потік даних недоступний", + "Shared military flight could not be restored — feed unavailable": "Не вдалося відновити військовий рейс за посиланням — потік даних недоступний", + "Shared satellite could not be restored — feed unavailable": "Не вдалося відновити супутник за посиланням — потік даних недоступний", + "Shared flight is unavailable": "Рейс за посиланням недоступний", + "Shared military flight is unavailable": "Військовий рейс за посиланням недоступний", + "Shared satellite is unavailable": "Супутник за посиланням недоступний", + "entity": "обʼєкт", + "Shared {subject} follow expired": "Стеження за посиланням завершено: {subject}", + "Shared {subject} could not be restored — feed unavailable": "Не вдалося відновити за посиланням: {subject} — потік даних недоступний", + "Shared {subject} is unavailable": "Недоступно за посиланням: {subject}", + "{id} isn't reporting now — showing where it was last seen": "{id} зараз не передає даних — показано останнє відоме місце", + "{id} isn't reporting now — showing where it was at {time}": "{id} зараз не передає даних — показано останнє відоме місце ({time})", + "This share link can't be opened": "Не вдається відкрити це посилання", + "Shared vessel is unavailable": "Судно за посиланням недоступне", "ACQUIRING": "ОТРИМАННЯ", - "SHARED {subject}": "ПОДІЛЕНО: {subject}", + "SHARED {subject}": "ЗА ПОСИЛАННЯМ: {subject}", + "subject": "обʼєкт", "LOADING LIVE DATA": "ЗАВАНТАЖЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", "LOAD COMPLETE": "ЗАВАНТАЖЕННЯ ЗАВЕРШЕНО", "LOAD CANCELLED": "ЗАВАНТАЖЕННЯ СКАСОВАНО", @@ -614,93 +2196,630 @@ "MAPPED SITES LOADED": "МІСЦЯ НА КАРТІ ЗАВАНТАЖЕНО", "RETRYING MAPPED SITES": "ПОВТОРНЕ ЗАВАНТАЖЕННЯ МІСЦЬ НА КАРТІ", "FETCHING MAPPED SITES": "ЗАВАНТАЖЕННЯ МІСЦЬ НА КАРТІ", + "RETRYING ALPR CAMERAS": "ПОВТОРНЕ ЗАВАНТАЖЕННЯ КАМЕР ALPR", + "FETCHING ALPR CAMERAS": "ЗАВАНТАЖЕННЯ КАМЕР ALPR", + "OVERPASS TEMPORARILY UNAVAILABLE": "OVERPASS ТИМЧАСОВО НЕДОСТУПНИЙ", + "OVERPASS RATE-LIMITED": "OVERPASS: ПЕРЕВИЩЕНО ЛІМІТ ЗАПИТІВ", + "OVERPASS TIMED OUT": "OVERPASS: МИНУВ ЧАС ОЧІКУВАННЯ", + "OVERPASS COULD NOT COMPLETE THE QUERY": "OVERPASS: НЕ ВДАЛОСЯ ЗАВЕРШИТИ ЗАПИТ", + "MAP TILES TEMPORARILY UNAVAILABLE": "ТАЙЛИ КАРТИ ТИМЧАСОВО НЕДОСТУПНІ", + "MAPPED NAMES TEMPORARILY UNAVAILABLE": "НАЗВИ ОБʼЄКТІВ ТИМЧАСОВО НЕДОСТУПНІ", "TURNING OFF LIVE DATA": "ВИМКНЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", "REFRESHING LIVE DATA": "ОНОВЛЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", "syncing road network": "синхронізація дорожньої мережі", + "retry pending": "очікується повтор", + "retrying in {seconds}s": "повтор через {seconds} с", + "ALPR cameras": "камери ALPR", + "OpenSky OAuth client missing/invalid": "Клієнт OAuth OpenSky відсутній або недійсний", + "OpenSky OAuth rejected credentials": "OpenSky OAuth відхилив облікові дані", + "OpenSky username/password rejected": "OpenSky відхилив імʼя користувача або пароль", + "OpenSky auth missing": "Немає даних для входу в OpenSky", + "OpenSky auth required": "OpenSky вимагає входу", + "OpenSky auth invalid": "Неправильні дані для входу в OpenSky", + "OpenSky auth failed": "Не вдалося увійти в OpenSky", + "KartaView answered HTTP {status}": "KartaView відповів: HTTP {status}", + "Panoramax answered HTTP {status}": "Panoramax відповів: HTTP {status}", + "KartaView refused the request (code {code})": "KartaView відхилив запит (код {code})", + "Vector tiles unavailable (HTTP {status})": "Векторні тайли недоступні (HTTP {status})", + "GNSS feed unavailable (HTTP {status})": "Потік GNSS недоступний (HTTP {status})", + "{count} CelesTrak groups unavailable": { + "one": "{count} група CelesTrak недоступна", + "few": "{count} групи CelesTrak недоступні", + "many": "{count} груп CelesTrak недоступні", + "other": "{count} групи CelesTrak недоступні" + }, + "{feed} feed unavailable": "Потік {feed} недоступний", + "Source snapshot {minutes} min old": "Вік знімка джерела: {minutes} хв", + "{source} rate limited (anonymous)": "{source}: ліміт запитів (анонімно)", + "{source} rate limited": "{source}: ліміт запитів", + "{source} network error": "{source}: помилка мережі", + "Malformed {source} aircraft rows": "{source}: некоректні записи про літаки", + "Malformed {source} response": "{source}: некоректна відповідь", + "entry {n}": "№ {n}", + "feeds {names} stale": { + "one": "потік {names} застарів", + "few": "потоки {names} застаріли", + "many": "потоки {names} застаріли", + "other": "потоки {names} застаріли" + }, + "feeds {names} unreachable": { + "one": "потік {names} недоступний", + "few": "потоки {names} недоступні", + "many": "потоки {names} недоступні", + "other": "потоки {names} недоступні" + }, + "feeds {names} invalid": { + "one": "потік {names} некоректний", + "few": "потоки {names} некоректні", + "many": "потоки {names} некоректні", + "other": "потоки {names} некоректні" + }, + "Loading {feeds}": "Завантаження: {feeds}", + "{count} heard": { + "one": "чутно бортів: {count}", + "few": "чутно бортів: {count}", + "many": "чутно бортів: {count}", + "other": "чутно бортів: {count}" + }, + "USB {rate} msg/s": "USB {rate} повід./с", + "{rate} msg/s": "{rate} повід./с", + "{count} feeds live": { + "one": "{count} потік онлайн", + "few": "{count} потоки онлайн", + "many": "{count} потоків онлайн", + "other": "{count} потоку онлайн" + }, + "{feed} {count} ({seconds}s old)": "{feed} {count} ({seconds} с тому)", + "Street Level toggle failed": "Не вдалося перемкнути «Вуличні знімки»", + "Street Level could not start": "Не вдалося запустити «Вуличні знімки»", + "SHRINK": "ЗГОРНУТИ", + "EXPAND": "РОЗГОРНУТИ", + "Shrink": "Згорнути", + "Expand": "Розгорнути", + "ANY DATE": "БУДЬ-ЯКА ДАТА", + "LAST 10 YEARS": "ЗА 10 РОКІВ", + "LAST 5 YEARS": "ЗА 5 РОКІВ", + "LAST 3 YEARS": "ЗА 3 РОКИ", + "LAST 2 YEARS": "ЗА 2 РОКИ", + "LAST YEAR": "ЗА РІК", + "LAST 6 MONTHS": "ЗА 6 МІСЯЦІВ", + "LAST 3 MONTHS": "ЗА 3 МІСЯЦІ", + "LAST MONTH": "ЗА МІСЯЦЬ", + "LAST {count} DAYS": { + "one": "ЗА {count} ДЕНЬ", + "few": "ЗА {count} ДНІ", + "many": "ЗА {count} ДНІВ", + "other": "ЗА {count} ДНЯ" + }, + "{window} · SINCE {date}": "{window} · З {date}", + "Turn Street Level off": "Вимкнути «Вуличні знімки»", + "Turn Street Level on": "Увімкнути «Вуличні знімки»", + "{name} imagery on": "Знімки {name} увімкнено", + "{name} imagery off": "Знімки {name} вимкнено", + "Image by {creator}": "Автор знімка: {creator}", + " or ": " або ", + "OPEN {labels}": "ВІДКРИТИ {labels}", + "Open {names} at the centre of the view": "Відкрити {names} у центрі вигляду", + "Zoom in to a street to open {names} here": "Наблизьтеся до вулиці, щоб відкрити тут {names}", + "Switch Street Level on to draw its coverage.": "Увімкніть «Вуличні знімки», щоб показати покриття.", + "Every provider is switched off: light a chip to draw its coverage.": "Усі джерела вимкнено: увімкніть одне, щоб показати його покриття.", + "Loading this sequence…": "Завантаження послідовності…", + "{n} images in this sequence · Esc clears": { + "one": "{n} знімок у послідовності · Esc — скинути", + "few": "{n} знімки в послідовності · Esc — скинути", + "many": "{n} знімків у послідовності · Esc — скинути", + "other": "{n} знімка в послідовності · Esc — скинути" + }, + "No sequences in view match the filter": "Жодна послідовність у кадрі не відповідає фільтру", + "No coverage in view": "У кадрі немає покриття", + "{n} streets in view · click a line for its nearest photo": { + "one": "{n} вулиця в кадрі · клацніть лінію, щоб відкрити найближче фото", + "few": "{n} вулиці в кадрі · клацніть лінію, щоб відкрити найближче фото", + "many": "{n} вулиць у кадрі · клацніть лінію, щоб відкрити найближче фото", + "other": "{n} вулиці в кадрі · клацніть лінію, щоб відкрити найближче фото" + }, + "{n} sequences in view · click a line for its nearest photo": { + "one": "{n} зйомка в кадрі · клацніть лінію, щоб відкрити найближче фото", + "few": "{n} зйомки в кадрі · клацніть лінію, щоб відкрити найближче фото", + "many": "{n} зйомок у кадрі · клацніть лінію, щоб відкрити найближче фото", + "other": "{n} зйомки в кадрі · клацніть лінію, щоб відкрити найближче фото" + }, + "{n} sequences in view · click a line for its photos": { + "one": "{n} послідовність у кадрі · клацніть лінію, щоб відкрити знімки", + "few": "{n} послідовності в кадрі · клацніть лінію, щоб відкрити знімки", + "many": "{n} послідовностей у кадрі · клацніть лінію, щоб відкрити знімки", + "other": "{n} послідовності в кадрі · клацніть лінію, щоб відкрити знімки" + }, + "km/h": "км/год", + "m/s": "м/с", + "mph": "миль/год", + "hPa": "гПа", + "kt": "вуз", + "kts": "вуз", + "ft": "фт", + "km": "км", + "m": "м", + "h": "год", + "min": "хв", + "s": "с", + "dB": "дБ", "Celestial ring — reveal the full globe": "Небесне кільце — показати весь глобус", "Celestial ring — available in Normal style": "Небесне кільце — доступне у стилі «Звичайний»", "Detection overlay: {mode}": "Накладка виявлення: {mode}", "Detection overlay: off": "Накладка виявлення: вимк.", "DETECT": "ВИЯВЛЕННЯ", - "voice|OFF": "ВИМКНЕНО", - "voice|CONNECTING": "З'ЄДНАННЯ", + "{time} · {minutes} min ago": "{time} · {minutes} хв тому", + "Active weather": "Активні погодні шари", + "LATEST · newest per product": "ОСТАННІ · найсвіжіші для кожного продукту", + "Forecast · valid {valid} · issued {issued}": "Прогноз · чинний на {valid} · випущено {issued}", + "{detail} · Does not follow history": "{detail} · не йде за історією", + "Forecast · valid {valid}": "Прогноз · чинний на {valid}", + "voice|OFF": "ВИМК.", + "voice|CONNECTING": "ЗʼЄДНАННЯ", "voice|LISTENING": "СЛУХАЮ", "voice|EXECUTING": "ВИКОНАННЯ", "voice|ERROR": "ПОМИЛКА", - "AI AGENT": "АГЕНТ ШІ", - "Voice model tier — applies next session": "Рівень голосової моделі — набуде чинності з наступної сесії", + "Voice provider": "Постачальник голосового сервісу", + "Changing provider reconnects voice if it is on.": "Зміна постачальника перепідключає голосовий режим, якщо його ввімкнено.", + "Voice Settings": "Налаштування голосу", + "AI AGENT": "ШІ-АГЕНТ", + "Voice model tier — applies next session": "Рівень голосової моделі — застосовується з наступної сесії", + "STD": "СТД", "Estimated session cost": "Орієнтовна вартість сесії", "Voice control — activate to toggle voice; hold Space to speak": "Голосове керування — активуйте, щоб увімкнути або вимкнути голос; утримуйте Space, щоб говорити", - "VOICE STANDBY": "ГОЛОСОВЕ ОЧІКУВАННЯ", + "ON/OFF": "УВІМК/ВИМК", + "VOICE STANDBY": "ГОЛОС ОЧІКУЄ", "VOICE CONTROL": "ГОЛОСОВЕ КЕРУВАННЯ", - "Hold Space to speak · tap Space to activate focused controls": "Утримуйте Space, щоб говорити · тапніть Space, щоб активувати елемент у фокусі", + "Hold Space to speak · tap Space to activate focused controls": "Утримуйте Space, щоб говорити · натисніть Space, щоб активувати елемент у фокусі", + "VOICE": "ГОЛОС", + "Preview": "Попередній перегляд", + "Settings": "Налаштування", + "Close voice panel": "Закрити голосову панель", + "Voice replies appear here.": "Тут зʼявляються голосові відповіді.", + "Voice assistant": "Голосовий асистент", + "Dismiss voice card": "Закрити картку голосу", + "YOU": "ВИ", + "THIS": "ЦЕ", + "Plan": "План", + "Referenced items": "Згадані обʼєкти", + "NOTES & SOURCES": "НОТАТКИ Й ДЖЕРЕЛА", + "Show Voice Preview": "Показувати попередній перегляд голосу", + "Voice inactivity timeout": "Тайм-аут бездіяльності голосу", + "Minutes": "Хвилини", + "Custom": "Інше", + "These preferences stay in this browser.": "Ці налаштування зберігаються в цьому браузері.", "VOICE SYSTEM ERROR": "ПОМИЛКА ГОЛОСОВОЇ СИСТЕМИ", "DISMISS": "ЗАКРИТИ", "Check microphone permission and network access, then try again.": "Перевірте дозвіл на мікрофон і доступ до мережі, потім спробуйте ще раз.", + "Gemini returned an oversized audio chunk": "Gemini повернув надто великий фрагмент аудіо", + "Gemini returned an unsupported audio format": "Gemini повернув непідтримуваний формат аудіо", + "Gemini returned an invalid audio sample rate": "Gemini повернув неприпустиму частоту дискретизації аудіо", + "Gemini returned incomplete PCM audio": "Gemini повернув неповні аудіодані PCM", + "This browser does not support Gemini microphone audio": "Цей браузер не підтримує звук із мікрофона для Gemini", + "Microphone audio processing failed": "Не вдалося обробити звук із мікрофона", + "Gemini audio playback fell behind. Reconnect to continue.": "Відтворення звуку Gemini відстає. Підключіться знову, щоб продовжити.", + "Gemini token response did not include an ephemeral credential": "У відповіді Gemini немає тимчасових облікових даних", + "Invalid Gemini connection endpoint": "Неприпустима адреса підключення до Gemini", + "Gemini voice could not connect. Try again.": "Не вдалося підключити голосовий режим Gemini. Спробуйте ще раз.", + "Gemini voice requires a same-origin app request": "Голосовий режим Gemini потребує запиту з того самого джерела, що й застосунок", + "Add a Gemini API key in Provider Settings": "Додайте ключ API Gemini в «Налаштуваннях постачальників»", + "The Gemini Live model configuration is invalid": "Неприпустима конфігурація моделі Gemini Live", + "Gemini voice is starting too often. Try again shortly.": "Голосовий режим Gemini запускається надто часто. Спробуйте трохи згодом.", + "Gemini quota is unavailable. Try again later.": "Квота Gemini недоступна. Спробуйте пізніше.", + "Gemini access was refused. Check the API key and model access.": "Доступ до Gemini заборонено. Перевірте ключ API й доступ до моделі.", + "Gemini Live is unavailable for the configured model.": "Gemini Live недоступний для вибраної моделі.", + "Token request is too large": "Запит токена надто великий", + "Use an empty JSON token request": "Використовуйте запит токена з порожнім обʼєктом JSON", "Release Space to send": "Відпустіть Space, щоб надіслати", "Hold Space to talk": "Утримуйте Space, щоб говорити", + "Voice command context is too large": "Контекст голосової команди надто великий", + "Gemini reliable transport exceeded its queue limit. Start voice again.": "Черга надійного передавання Gemini перевищила ліміт. Запустіть голосовий режим знову.", + "Gemini reliable transport did not drain. Start voice again.": "Черга надійного передавання Gemini не звільнилася. Запустіть голосовий режим знову.", + "Gemini token request failed (HTTP {status})": "Не вдалося запитати токен Gemini (HTTP {status})", + "Gemini token response did not include a valid model": "У відповіді Gemini немає допустимої моделі", + "Gemini token response did not include session settings": "У відповіді Gemini немає налаштувань сеансу", + "Gemini session settings do not match the input mode": "Налаштування сеансу Gemini не відповідають режиму введення", "Requesting microphone": "Запит доступу до мікрофона", + "Gemini could not submit this input. Start voice again.": "Gemini не вдалося надіслати ці дані. Запустіть голосовий режим знову.", + "Connecting to Gemini": "Підключення до Gemini", "Ask or command": "Питання або команда", + "Gemini returned an oversized message": "Gemini повернув надто велике повідомлення", + "Gemini Live connection failed. Check network access, then start voice again.": "Не вдалося підключитися до Gemini Live. Перевірте доступ до мережі й запустіть голосовий режим знову.", + "Gemini Live connection ended. Start voice again for a new conversation.": "Зʼєднання з Gemini Live завершено. Запустіть голосовий режим знову для нової розмови.", + "Gemini Live could not start. Start voice again to request a fresh session.": "Не вдалося запустити Gemini Live. Запустіть голосовий режим знову, щоб запитати новий сеанс.", + "Start voice again for a fresh token and a new conversation.": "Запустіть голосовий режим знову, щоб отримати новий токен і почати нову розмову.", + "Start voice again to request a fresh session credential.": "Запустіть голосовий режим знову, щоб запитати нові облікові дані сеансу.", + "Microphone permission was denied. Allow microphone access and try again.": "Доступ до мікрофона заборонено. Дозвольте доступ і спробуйте ще раз.", + "Gemini connection timed out. Try again.": "Минув час очікування підключення до Gemini. Спробуйте ще раз.", + "Gemini voice could not start": "Не вдалося запустити голосовий режим Gemini", + "Gemini did not finish the interrupted reply. Start voice again.": "Gemini не завершив перервану відповідь. Запустіть голосовий режим знову.", + "Gemini session expiring; finishing the current reply": "Сеанс Gemini спливає; завершується поточна відповідь", + "Gemini rejected the voice session. Start voice again to request a fresh session.": "Gemini відхилив голосовий сеанс. Запустіть голосовий режим знову, щоб запитати новий сеанс.", + "Start voice again for a fresh session credential. If it repeats, check Gemini model and API access.": "Запустіть голосовий режим знову, щоб отримати нові облікові дані. Якщо помилка повториться, перевірте модель Gemini і доступ до API.", + "Gemini action history is full. Start voice again for a fresh session.": "Історія дій Gemini заповнена. Запустіть голосовий режим знову для нового сеансу.", + "Gemini requested too many simultaneous actions": "Gemini запросив забагато одночасних дій", "Running command": "Виконання команди", + "Voice text command is too long": "Текст голосової команди задовгий", + "Gemini voice is not connected": "Голосовий режим Gemini не підключено", + "Gemini interrupted input exceeded its buffer or wait limit. Start voice again.": "Перерване введення Gemini перевищило ліміт буфера або очікування. Запустіть голосовий режим знову.", + "Gemini Live connection is expiring. Start voice again for a new conversation.": "Зʼєднання з Gemini Live спливає. Запустіть голосовий режим знову для нової розмови.", "Voice off": "Голос вимкнено", + "Gemini voice sessions have a time limit. When a session expires, start voice again for a new conversation.": "Час голосових сеансів Gemini обмежений. Коли сеанс спливе, запустіть голосовий режим знову для нової розмови.", + "Stopped by voice": "Зупинено голосовою командою", + "Automatic stop is unavailable for this voice connection.": "Автоматична зупинка недоступна для цього голосового підключення.", + "Preview is off.": "Попередній перегляд вимкнено.", + "Your choice applies now, but could not be saved.": "Ваш вибір застосовано, але зберегти його не вдалося.", "WebRTC microphone support unavailable": "Підтримка мікрофона WebRTC недоступна", "VOICE UNAVAILABLE": "ГОЛОС НЕДОСТУПНИЙ", "VOICE ACTIVE": "ГОЛОС АКТИВНИЙ", "Voice session could not be started.": "Не вдалося запустити голосову сесію.", + "MINI": "МІНІ", "Next session: {pendingId} — this session stays on {modelId}": "Наступна сесія: {pendingId} — поточна залишається на {modelId}", - "Voice model: {pendingId} — click to switch to {target}; applies next session": "Голосова модель: {pendingId} — натисніть, щоб перейти на {target}; набуде чинності з наступної сесії", + "Voice model: {pendingId} — click to switch to {target}; applies next session": "Голосова модель: {pendingId} — натисніть, щоб перейти на {target}; застосовується з наступної сесії", + "standard": "стандартну", + "mini": "міні", + "COST UNKNOWN": "ВАРТІСТЬ НЕВІДОМА", + "ChatGPT OAuth session: {responses} response(s), {input} input and {output} output tokens, {captions} caption transcription(s) reported.": "Сесія ChatGPT OAuth: відповідей — {responses}, вхідних токенів — {input}, вихідних токенів — {output}, транскрипцій субтитрів — {captions}.", + "USD cost and the API spend cap are unavailable for this auth mode.": "Вартість у USD і ліміт витрат API недоступні в цьому режимі авторизації.", + "Usage is incomplete because a response was still in flight when the session ended.": "Дані про використання неповні: на момент завершення сесії одну з відповідей ще не було отримано.", "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Орієнтовна вартість сесії на {modelId} — відповідей: {responses}. Попереджає при {warn}, завершує сесію при {cap}.", - "{tier} applies next session": "{tier} набуде чинності з наступної сесії", + "Estimate is incomplete — a response was still in flight when the session ended, so its usage was never reported.": "Оцінка неповна: на момент завершення сесії одну з відповідей ще не було отримано, тому її використання не враховано.", + "STANDARD": "СТАНДАРТ", + "{tier} applies next session": "{tier} застосовується з наступної сесії", "Session ended — cost cap {cost}": "Сесію завершено — ліміт витрат {cost}", + "MIC": "МІК", "Radio did not start": "Радіо не запустилося", + "{n} aircraft": { + "one": "{n} літак", + "few": "{n} літаки", + "many": "{n} літаків", + "other": "{n} літака" + }, + "{n} military aircraft": { + "one": "{n} військовий літак", + "few": "{n} військові літаки", + "many": "{n} військових літаків", + "other": "{n} військового літака" + }, + "{n} ships": { + "one": "{n} судно", + "few": "{n} судна", + "many": "{n} суден", + "other": "{n} судна" + }, + "{n} satellites": { + "one": "{n} супутник", + "few": "{n} супутники", + "many": "{n} супутників", + "other": "{n} супутника" + }, + "{n} launches": { + "one": "{n} запуск", + "few": "{n} запуски", + "many": "{n} запусків", + "other": "{n} запуску" + }, + "{n} earthquakes": { + "one": "{n} землетрус", + "few": "{n} землетруси", + "many": "{n} землетрусів", + "other": "{n} землетрусу" + }, + "{n} fires": { + "one": "{n} пожежа", + "few": "{n} пожежі", + "many": "{n} пожеж", + "other": "{n} пожежі" + }, + "{n} fire perimeters": { + "one": "{n} контур пожежі", + "few": "{n} контури пожеж", + "many": "{n} контурів пожеж", + "other": "{n} контуру пожеж" + }, + "{n} cyclones": { + "one": "{n} циклон", + "few": "{n} циклони", + "many": "{n} циклонів", + "other": "{n} циклону" + }, + "{n} buses": { + "one": "{n} автобус", + "few": "{n} автобуси", + "many": "{n} автобусів", + "other": "{n} автобуса" + }, + "{n} bike share": { + "one": "{n} станція прокату велосипедів", + "few": "{n} станції прокату велосипедів", + "many": "{n} станцій прокату велосипедів", + "other": "{n} станції прокату велосипедів" + }, + "{n} flock cameras": { + "one": "{n} камера ALPR", + "few": "{n} камери ALPR", + "many": "{n} камер ALPR", + "other": "{n} камери ALPR" + }, + "{n} military bases": { + "one": "{n} військова база", + "few": "{n} військові бази", + "many": "{n} військових баз", + "other": "{n} військової бази" + }, + "{n} datacenters": { + "one": "{n} дата-центр", + "few": "{n} дата-центри", + "many": "{n} дата-центрів", + "other": "{n} дата-центру" + }, + "{n} dams": { + "one": "{n} гребля", + "few": "{n} греблі", + "many": "{n} гребель", + "other": "{n} греблі" + }, + "{n} air quality": { + "one": "{n} станція якості повітря", + "few": "{n} станції якості повітря", + "many": "{n} станцій якості повітря", + "other": "{n} станції якості повітря" + }, + "{n} results": { + "one": "{n} результат", + "few": "{n} результати", + "many": "{n} результатів", + "other": "{n} результату" + }, + "anywhere in the loaded data": "в усіх завантажених даних", + "in view": "у кадрі", + "within {radius} of the view centre": "у радіусі {radius} від центру вигляду", + "within {radius} of {place} (Contacts window)": "у радіусі {radius} — {place} (вікно «Контактів»)", + "within {radius} of {place}": "у радіусі {radius} — {place}", + "within {radius}": "у радіусі {radius}", + "over {region}": "у регіоні {region}", + "At least {items}": "{items} або більше", + "{items} {scope}": "{items} {scope}", + "last 24 h": "за останні 24 год", + "past 30 d and upcoming": "за останні 30 дн і майбутні", + "the flights layer loads by viewport": "шар рейсів завантажується за областю вигляду", + "distance is ground distance, not overhead": "відстань — поверхнею землі до підсупутникової точки, а не до самого апарата", + "the count is a lower bound because at least one layer reached its retained limit.": "це нижня межа: принаймні один шар досяг ліміту збережених записів.", + "{label} off": "{label}: вимк.", + "{label} loading": "{label}: завантаження", + "{label} error": "{label}: помилка", + "counted the first {returned} loaded records": "враховано лише перші завантажені записи: {returned}", + "counted {returned} of {total} loaded records": "враховано завантажених записів: {returned} з {total}", + "{layers} just turned on — still loading, counts will rise": "{layers}: щойно ввімкнено — дані ще завантажуються, значення зростуть", + "Contacts panel snapshot at {time} — the same retained cohort supplies the card, speech, and follow-up memory": "Знімок панелі «Контакти» ({time}) — та сама збережена вибірка використовується для картки, мовлення й памʼяті уточнювальних запитань", + "Contacts panel snapshot — the same retained cohort supplies the card, speech, and follow-up memory": "Знімок панелі «Контакти» — та сама збережена вибірка використовується для картки, мовлення й памʼяті уточнювальних запитань", + "Fly below {km} km to a covered region": "Опустіться нижче {km} км над регіоном із покриттям", + "No feed here yet · {n} regions available": { + "one": "Тут поки немає потоку даних · доступний {n} регіон", + "few": "Тут поки немає потоку даних · доступні {n} регіони", + "many": "Тут поки немає потоку даних · доступно {n} регіонів", + "other": "Тут поки немає потоку даних · доступно {n} регіону" + }, + "degraded": "з перебоями", + "stale": "застарів", + "partial": "частково", + "fallback": "резерв", + "unavailable": "недоступний", + "Not answered: {layers}": "Немає відповіді: {layers}", + "Toggle voice control": "Увімкнути або вимкнути голосове керування", + "Activate to toggle voice": "Активуйте, щоб увімкнути або вимкнути голос", + "Voice active": "Голос активний", + "Voice could not be started.": "Не вдалося запустити голос.", + "the active voice session": "активна голосова сесія", + "{value} feet": "{value} фт", + "Fire · FRP {frp} MW": "Пожежа · FRP {frp} МВт", + "The flights layer is not enabled": "Шар рейсів не ввімкнено", + "The military layer is not enabled": "Шар військових рейсів не ввімкнено", + "The satellites layer is not enabled": "Шар супутників не ввімкнено", + "The ais-live-vessels layer is not enabled": "Шар суден AIS не ввімкнено", + "Could not enable the requested layer": "Не вдалося ввімкнути запитаний шар", + "Could not disable the requested layer": "Не вдалося вимкнути запитаний шар", + "Radio layer unavailable": "Шар радіо недоступний", + "Camera navigation is unavailable in the current view": "Керування камерою недоступне в поточному вигляді", + "Camera navigation policy unavailable": "Правила навігації камери недоступні", + "Nearest-aircraft selection supports Flights or Military Flights only": "Вибір найближчого літака працює лише для рейсів і військових рейсів", + "Nearest-aircraft selection needs a preset, place name, or latitude and longitude": "Для вибору найближчого літака потрібен пресет, назва місця або широта й довгота", + "Could not arrive at the requested place": "Не вдалося долетіти до запитаного місця", + "The nearest airborne aircraft could not be selected": "Не вдалося вибрати найближчий літак у повітрі", + "No flights within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає рейсів", + "No military within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає військових рейсів", + "No satellites within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає супутників", + "No vessels within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає суден", + "{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "{layer}: увімкнено (потік {source}), але у вигляді «{place}» ще не завантажено жодного літака в повітрі", + "{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "{layer}: увімкнено, але у вигляді «{place}» ще не завантажено жодного літака в повітрі", + "{layer} is enabled, but its aircraft feed is unavailable": "{layer}: увімкнено, але потік даних про літаки недоступний", + "{layer} is enabled, but its destination refresh did not complete": "{layer}: увімкнено, але оновлення в точці призначення не завершилося", + "{layer} is enabled, but {source} is unavailable": "{layer}: увімкнено, але джерело {source} недоступне", + "Could not arrive at {place}": "Не вдалося долетіти: {place}", + "{name} is no longer loaded": "{name}: обʼєкт більше не завантажено", + "Unknown target layer: {target}": "Невідомий шар цілі: {target}", + "nominal": "у нормі", + "{label} on": "{label}: увімк.", + "Frame aircraft": "Показати літаки в кадрі", + "Frame military aircraft": "Показати військові літаки в кадрі", + "Frame ships": "Показати судна в кадрі", + "Frame satellites": "Показати супутники в кадрі", + "Frame contacts": "Показати контакти в кадрі", + "{count} aircraft in frame": { + "one": "{count} літак у кадрі", + "few": "{count} літаки в кадрі", + "many": "{count} літаків у кадрі", + "other": "{count} літака в кадрі" + }, + "{count} military aircraft in frame": { + "one": "{count} військовий літак у кадрі", + "few": "{count} військові літаки в кадрі", + "many": "{count} військових літаків у кадрі", + "other": "{count} військового літака в кадрі" + }, + "{count} ships in frame": { + "one": "{count} судно в кадрі", + "few": "{count} судна в кадрі", + "many": "{count} суден у кадрі", + "other": "{count} судна в кадрі" + }, + "{count} satellites in frame": { + "one": "{count} супутник у кадрі", + "few": "{count} супутники в кадрі", + "many": "{count} супутників у кадрі", + "other": "{count} супутника в кадрі" + }, + "{count} contacts in frame": { + "one": "{count} контакт у кадрі", + "few": "{count} контакти в кадрі", + "many": "{count} контактів у кадрі", + "other": "{count} контакту в кадрі" + }, + "Nearest military aircraft": "Найближчі військові літаки", + "Nearest ships": "Найближчі судна", + "Nearest satellites": "Найближчі супутники", + "Nearest aircraft": "Найближчі літаки", + "{first} and {second}": "{first} і {second}", + "Layer": "Шар", + "there": "там", + "Camera range {range}": "Дальність камери: {range}", + "Within {radius} of the view": "У радіусі {radius} від вигляду", + "Labels on": "Підписи ввімкнено", + "Framing uses the nearest 80 loaded contacts": "У кадр потрапляють 80 найближчих завантажених контактів", + "{distance} from {location}": "{location}: {distance}", + "Altitude {altitude}": "Висота {altitude}", + "{origin} to {destination}": "{origin} → {destination}", + "from {origin}": "звідки: {origin}", + "to {destination}": "куди: {destination}", + "Registration {registration}": "Реєстраційний номер: {registration}", + "View state": "Стан вигляду", + "Marked {count} places": { + "one": "Позначено {count} місце", + "few": "Позначено {count} місця", + "many": "Позначено {count} місць", + "other": "Позначено {count} місця" + }, + "Nothing marked": "Нічого не позначено", + "Not found: {places}": "Не знайдено: {places}", + "Tracing outlines": "Побудова контурів", + "Frame flights": "Показати літаки в кадрі", + "Frame military": "Показати військові літаки в кадрі", + "Frame vessels": "Показати судна в кадрі", + "Frame {target}": "Показати в кадрі: {target}", + "Zoom out to globe": "Віддалити до глобуса", + "Open data layers": "Відкрити шари даних", + "Open or close a panel": "Відкрити або закрити панель", + "Change context mode": "Змінити режим контексту", + "Control cockpit": "Керувати кабіною", + "Change visual style": "Змінити візуальний стиль", + "Adjust HUD": "Налаштувати HUD", + "Adjust cyber sonar": "Налаштувати кібер-сонар", + "Adjust detection overlay": "Налаштувати накладку виявлення", + "Change map stack": "Змінити набір карт", + "Adjust post-processing": "Налаштувати постобробку", + "Control scene": "Керувати сценою", + "Control CCTV": "Керувати камерами CCTV", + "Control radio": "Керувати радіо", + "Track contact": "Стежити за контактом", + "Stop tracking": "Припинити стеження", + "Clear marks": "Прибрати позначки", + "Move camera": "Перемістити камеру", + "Fly route": "Пролетіти маршрутом", + "Analyst query": "Аналітичний запит", + "Next ISS pass": "Наступний проліт МКС", + "Next satellite pass": "Наступний проліт супутника", + "Mark the map": "Позначити на карті", + "Mark {targets} +{more}": "Позначити {targets} +{more}", + "Mark {targets}": "Позначити {targets}", + "Fly to {place}": "Переліт: {place}", + "Fly to Location": "Переліт до місця", + "Nearest aircraft to {place}": "Найближчий літак: {place}", + "Nearest aircraft to Here": "Найближчий літак тут", + "Layer on": "Шар: увімк.", + "Layer off": "Шар: вимк.", + "Zoom out": "Віддалити", + "Zoom in": "Наблизити", + "Read the view": "Оглянути видиму область", + "Check view state": "Перевірити стан вигляду", + "Action": "Дія", + "Finding places": "Пошук місць", + "Tracing outline": "Побудова контуру", + "Looking up place": "Пошук місця", + "Flying": "Переліт", + "Turning on layer": "Увімкнення шару", + "Loading aircraft": "Завантаження літаків", + "Picking nearest": "Вибір найближчих", + "Working": "Виконується", + "in progress": "виконується", + "done": "готово", + "failed": "помилка", + "cancelled": "скасовано", + "Outline traced": "Контур побудовано", + "Outline unavailable": "Контур недоступний", + "Source: {label}": "Джерело: {label}", + "WORKING": "У РОБОТІ", + "DONE": "ГОТОВО", + "Recent speech": "Нещодавнє мовлення", + "HERE": "ТУТ", "Aircraft cockpit view": "Вигляд кабіни повітряного судна", "LEVEL": "РІВЕНЬ", "Estimated destination direction": "Орієнтовний напрямок до пункту призначення", - "DEST ---°": "DEST ---°", + "DEST ---°": "ПРИЗН. ---°", "OPTICAL PLANE · 01": "ОПТИЧНА ПЛОЩИНА · 01", "VISOR LOCK · ACTIVE": "ФІКСАЦІЯ ВІЗОРА · АКТИВНА", - "GROUND SPEED · KTS": "ШВИДКІСТЬ · KTS", - "ALTITUDE · FT": "ВИСОТА · FT", + "GROUND SPEED · KTS": "ШЛЯХОВА ШВИДКІСТЬ · ВУЗ", + "ALTITUDE · FT": "ВИСОТА · ФТ", "FIRST PERSON": "ВІД ПЕРШОЇ ОСОБИ", - "LIVE TRACK · COURSE ALIGNED": "ТРЕК У РЕАЛЬНОМУ ЧАСІ · КУРС ВИРІВНЯНО", + "LIVE TRACK · COURSE ALIGNED": "ТРЕК ОНЛАЙН · КУРС ВИРІВНЯНО", "Cockpit vision style": "Стиль бачення кабіни", "Previous cockpit vision style": "Попередній стиль бачення кабіни", "Previous vision style": "Попередній стиль бачення", - "Current cockpit vision style: NORMAL. Activate for next style.": "Поточний стиль бачення кабіни: NORMAL. Активуйте для наступного стилю.", - "Current style: NORMAL — click for next": "Поточний стиль: NORMAL — клацніть для наступного", + "Current cockpit vision style: NORMAL. Activate for next style.": "Поточний стиль бачення кабіни: ЗВИЧАЙНИЙ. Активуйте для наступного стилю.", + "Current style: NORMAL — click for next": "Поточний стиль: ЗВИЧАЙНИЙ — клацніть для наступного", "CURRENT": "ПОТОЧНИЙ", "Next cockpit vision style": "Наступний стиль бачення кабіни", "Next vision style": "Наступний стиль бачення", "Current aircraft heading": "Поточний курс повітряного судна", - "GROUND SPEED": "ШВИДКІСТЬ", + "GROUND SPEED": "ШЛЯХОВА ШВИДКІСТЬ", + "KTS": "ВУЗ", "ALTITUDE": "ВИСОТА", - "Contact cockpit summary": "Зведення контакта в кабіні", + "FT": "ФТ", + "Contact cockpit summary": "Зведення контакту в кабіні", "CONTACT": "КОНТАКТ", - "CONTACTS · 250 KM": "КОНТАКТИ · 250 KM", + "CONTACTS · 250 KM": "КОНТАКТИ · 250 КМ", "Contact navigation": "Навігація контактами", "CONTEXT ONLY": "ЛИШЕ КОНТЕКСТ", "Nearby cohort counts": "Кількість найближчих груп", - "NEAREST OBSERVED / MAPPED": "НАЙБЛИЖЧІ СПОСТЕРЕЖЕНІ / КАРТОГРАФОВАНІ", + "FLT": "РЕЙСИ", + "MIL": "ВІЙСЬК.", + "SITE": "ОБʼЄКТИ", + "NEAREST OBSERVED / MAPPED": "НАЙБЛИЖЧІ СПОСТЕРЕЖЕНІ / НАНЕСЕНІ", "AVAILABLE INPUTS ONLY · NOT AN ALL-CLEAR": "ЛИШЕ ДОСТУПНІ ВХІДНІ ДАНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "WX": "ПОГОДА", "Cockpit briefing carousel": "Карусель брифінгу кабіни", "Estimated flight plan": "Орієнтовний план польоту", "ESTIMATED FLIGHT PLAN": "ОРІЄНТОВНИЙ ПЛАН ПОЛЬОТУ", - "FROM": "ВІД", - "TO": "ДО", + "FROM": "ЗВІДКИ", + "TO": "КУДИ", "Cockpit briefing controls": "Керування брифінгом кабіни", "Previous briefing page": "Попередня сторінка брифінгу", "Next briefing page": "Наступна сторінка брифінгу", "Live signals": "Сигнали в реальному часі", "Latest regional news": "Останні регіональні новини", "Location-based information": "Інформація за розташуванням", - "TEMP": "ТЕМП", + "TEMP": "ТЕМП.", "WIND": "ВІТЕР", "SKY": "НЕБО", "PRECIP": "ОПАДИ", + "MM": "ММ", + "Weather data by Open-Meteo.com": "Дані про погоду: Open-Meteo.com", + "Cockpit briefing pages": "Сторінки брифінгу кабіни", + "SIG": "СИГН.", "Show Live Signals": "Показати сигнали в реальному часі", "NEWS": "НОВИНИ", "Show Regional News": "Показати регіональні новини", - "Show Local Info": "Показати локальну інформацію", + "LOCAL": "МІСЦ.", + "Show Local Info": "Показати місцеву інформацію", "Cockpit display and Radio controls": "Керування дисплеєм і радіо кабіни", "DISPLAY": "ДИСПЛЕЙ", "Cockpit display options": "Параметри дисплея кабіни", @@ -711,6 +2830,8 @@ "Next filtered radio station": "Наступна відфільтрована радіостанція", "VOLUME": "ГУЧНІСТЬ", "Cockpit Radio volume": "Гучність радіо кабіни", + "ESC EXIT": "ESC ВИХІД", + "C TOGGLE": "C ПЕРЕМК.", "View switcher": "Перемикач вигляду", "Exit cockpit and return to full globe view": "Вийти з кабіни та повернутися до вигляду всього глобуса", "RESET": "СКИНУТИ", @@ -738,6 +2859,9 @@ "Search location by name or coordinates": "Шукати розташування за назвою або координатами", "Search any location...": "Шукати будь-яке розташування...", "WEATHER": "ПОГОДА", + "Active weather products": "Активні погодні продукти", + "RECENT IMAGERY": "СВІЖІ ЗНІМКИ", + "Imagery days in the box": "Дні зі знімками в області", "CONTEXT": "КОНТЕКСТ", "Compact Radio controls": "Компактне керування радіо", "Open detailed Radio controls": "Відкрити докладне керування радіо", @@ -747,25 +2871,27 @@ "Expand panel": "Розгорнути панель", "Context mode": "Режим контексту", "CONTACTS": "КОНТАКТИ", - "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Гортає найближчі контакти обраного вами типу — літаки, судна, об’єкти. Супутники відстежуються окремо.", + "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Гортає найближчі контакти обраного вами типу — літаки, судна, обʼєкти. Супутники відстежуються окремо.", "SPACE MISSIONS": "КОСМІЧНІ МІСІЇ", "SELECT CONTEXT": "ОБЕРІТЬ КОНТЕКСТ", "Contact Context actions": "Дії контексту контактів", "COCKPIT": "КАБІНА", - "SEARCH NEARBY SITES": "ПОШУК НАЙБЛИЖЧИХ ОБ’ЄКТІВ", + "SEARCH NEARBY SITES": "ПОШУК НАЙБЛИЖЧИХ ОБʼЄКТІВ", "Reclassify tracked contact as TR-3B": "Перекласифікувати відстежуваний контакт як TR-3B", "CONTACTS CONTEXT OFF": "КОНТЕКСТ КОНТАКТІВ ВИМКНЕНО", - "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "ОБЕРІТЬ КОНТАКТИ, ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНУ / КАРТОГРАФОВАНУ БЛИЗЬКІСТЬ", + "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "ВИБЕРІТЬ КОНТАКТИ, ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНЕ / НАНЕСЕНЕ ПОБЛИЗУ", "Available Space Missions": "Доступні космічні місії", "AVAILABLE MISSIONS": "ДОСТУПНІ МІСІЇ", "SELECT A MISSION TO INSPECT": "ОБЕРІТЬ МІСІЮ ДЛЯ ПЕРЕГЛЯДУ", "LOADING 30-DAY MISSION INDEX": "ЗАВАНТАЖЕННЯ ІНДЕКСУ МІСІЙ ЗА 30 ДНІВ", "TAB PREVIEWS · ENTER / SPACE SELECTS": "TAB — ОГЛЯД · ENTER / SPACE — ВИБІР", + "Internet radio and local SDR": "Інтернет-радіо та локальний SDR", "STATION TAG": "ТЕГ СТАНЦІЇ", "Filter stations by station tag": "Фільтрувати станції за тегом", "All": "Усі", - "Enable Radio, then choose a globe marker or use next.": "Увімкніть радіо, потім виберіть маркер на глобусі або натисніть «наступна».", + "Enable Radio, then choose a globe marker or use next.": "Увімкніть радіо, потім виберіть маркер на глобусі або перейдіть до наступної станції.", "DRAG TO TUNE": "ТЯГНІТЬ ДЛЯ НАЛАШТУВАННЯ", + "Tune available internet radio stations": "Налаштування на доступні інтернет-радіостанції", "ALL · DRAG THE NEEDLE": "УСІ · ПОТЯГНІТЬ СТРІЛКУ", "SNAPS TO AVAILABLE STATIONS": "ПРИЛИПАЄ ДО ДОСТУПНИХ СТАНЦІЙ", "Radio playback": "Відтворення радіо", @@ -776,13 +2902,48 @@ "Stop radio playback": "Зупинити відтворення радіо", "Radio volume": "Гучність радіо", "STATION SITE": "САЙТ СТАНЦІЇ", - "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "Після натискання відтворення аудіо з’єднується напряму з мовником. Мовник бачить вашу IP-адресу.", + "DIRECTORY: RADIO BROWSER": "КАТАЛОГ: RADIO BROWSER", + "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "Після натискання відтворення аудіо зʼєднується напряму з мовником. Мовник бачить вашу IP-адресу.", + "Local RTL-SDR receiver": "Локальний приймач RTL-SDR", + "LOCAL RTL-SDR": "ЛОКАЛЬНИЙ RTL-SDR", + "Chrome/Edge · WebUSB · one local tuner shared by FM and the Local ADS-B layer.": "Chrome/Edge · WebUSB · один локальний тюнер для FM і шару «Локальний ADS-B».", + "Use your location for faster ADS-B position decoding": "Використовувати ваше місцезнаходження для швидшого декодування позицій ADS-B", + "CHANGE DEVICE": "ЗМІНИТИ", + "Choose a different RTL-SDR or receiver channel": "Вибрати інший RTL-SDR або канал приймача", + "RTL-SDR receiver mode": "Режим приймача RTL-SDR", + "GAIN": "ПІДСИЛЕННЯ", + "RTL-SDR tuner gain for the current mode": "Підсилення тюнера RTL-SDR для поточного режиму", + "AUTO": "АВТО", + "MSG/S": "ПОВІД./С", + "HEARD": "ЧУТНО", + "POSITIONED": "З КООРД.", + "FM MHZ": "FM МГЦ", + "TUNE": "НАЛАШТУВАТИ", + "Seek broadcast FM stations": "Пошук FM-радіостанцій", + "◀ SEEK": "◀ ПОШУК", + "SEEK ▶": "ПОШУК ▶", + "SDR VOL": "ГУЧН. SDR", + "Local SDR volume": "Гучність локального SDR", "Intelligence HUD (H)": "Розвідувальний HUD (H)", "Layout": "Компонування", "HUD layout": "Компонування HUD", "Tactical": "Тактичне", "Operator": "Операторське", "Minimal": "Мінімальне", + "Cyber": "Кібер", + "Sonar": "Сонар", + "Cyber sonar contact scanner": "Кібер-сонар: сканер контактів", + "Rings": "Кільця", + "Sonar ring count": "Кількість кілець сонара", + "Range": "Дальність", + "Sonar ring range": "Дальність кілець сонара", + "Power": "Потужність", + "Sonar intensity": "Інтенсивність сонара", + "Opacity": "Непрозорість", + "Cyber contact and label opacity": "Непрозорість контактів і підписів у режимі «Кібер»", + "Minimum opacity for map dots, icons, models, brackets, and labels between sonar passes": "Мінімальна непрозорість точок, значків, моделей, рамок і підписів на карті між проходами сонара", + "Sector": "Сектор", + "Sonar sector width": "Ширина сектора сонара", "Detection Overlay (D)": "Накладка виявлення (D)", "Detection overlay": "Накладка виявлення", "Detection label density": "Щільність підписів виявлення", @@ -799,13 +2960,33 @@ "PARAMETERS": "ПАРАМЕТРИ", "3D aircraft — flat icons zoomed out, 3D models up close": "3D літаки — плоскі іконки здалеку, 3D-моделі зблизька", "Models": "Моделі", - "3D model coverage": "Зона огляду 3D-моделей", + "3D model coverage": "Охоплення 3D-моделей", "Proximity": "Поблизу", "Scope — the circular viewport mask": "Приціл — кругла маска вікна перегляду", "Scope": "Приціл", "Feather": "Розмиття", "Scope edge feather": "Розмиття краю приціла", "Scope edge feather as a percentage of the keyhole radius": "Розмиття краю приціла у відсотках радіуса ілюмінатора", + "Draw on the world — click vertices, double-click or Enter to finish, Esc to cancel": "Малювати на карті світу — клацайте вершини, подвійне клацання або Enter — завершити, Esc — скасувати", + "Shape": "Фігура", + "Shape to draw": "Фігура для малювання", + "Area": "Зона", + "Line": "Лінія", + "Pin": "Мітка", + "Label (optional)": "Підпис (необовʼязково)", + "Label for the drawn shape": "Підпис намальованої фігури", + "Colour of the drawn shape": "Колір намальованої фігури", + "Primary": "Основний", + "Amber": "Бурштиновий", + "Cyan": "Блакитний", + "Green": "Зелений", + "Red": "Червоний", + "Clear": "Очистити", + "Remove every mark from the board": "Прибрати всі позначки з дошки", + "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.": "Показати на глобусі власні файли GeoJSON, KML, KMZ або GPX (чи перетягнути їх на глобус). Вміст файлів залишається на цьому пристрої; накладки можуть потрапити в знімки карти, які передаються голосовому асистентові.", + "Import": "Імпорт", + "Choose GeoJSON, KML, KMZ or GPX files": "Виберіть файли GeoJSON, KML, KMZ або GPX", + "Imported files": "Імпортовані файли", "Celestial": "Небесне", "Hide UI chrome": "Сховати оформлення інтерфейсу", "Clean UI": "Чистий інтерфейс", @@ -818,6 +2999,7 @@ "Return UI controls": "Повернути елементи керування", "Initializing photorealistic world...": "Ініціалізація фотореалістичного світу...", "DATA LAYERS": "ШАРИ ДАНИХ", + "ACQUIRING FRAME": "ОТРИМАННЯ КАДРУ", "NEAREST": "НАЙБЛИЖЧА", "CCTV camera": "Камера CCTV", "CALIBRATION": "КАЛІБРУВАННЯ", @@ -833,6 +3015,26 @@ "SAVE CAL": "ЗБЕРЕГТИ КАЛ.", "RESET CAL": "СКИНУТИ КАЛ.", "SCENE SUMMARY": "ЗВЕДЕННЯ СЦЕНИ", + "STREET LEVEL": "ВУЛИЧНІ ЗНІМКИ", + "Turn Street Level on or off": "Увімкнути або вимкнути «Вуличні знімки»", + "Show the street-level view full screen (Esc shrinks it)": "Показати вуличний знімок на весь екран (Esc згортає)", + "Image fit": "Масштаб знімка", + "FIT": "ВПИСАТИ", + "Fit: show the whole photo, with dark bars where its shape differs from the frame": "Вписати: показати знімок повністю, з темними смугами там, де його форма не збігається з рамкою", + "FILL": "ЗАПОВНИТИ", + "Fill: fill the frame edge to edge, cropping the photo": "Заповнити: заповнити рамку повністю, обрізавши краї знімка", + "Close the image and deselect it on the map": "Закрити знімок і зняти виділення на карті", + "Close the street-level image": "Закрити вуличний знімок", + "Street-level viewer": "Перегляд вуличних знімків", + "Open this image on the provider's site": "Відкрити знімок на сайті джерела", + "Imagery providers": "Джерела знімків", + "PROVIDERS": "ДЖЕРЕЛА", + "Imagery filters": "Фільтри знімків", + "IMAGERY": "ЗНІМКИ", + "Panorama filter": "Фільтр панорам", + "ALL": "УСІ", + "FLAT": "ПЛОСКІ", + "SINCE": "З ДАТИ", "SCENES": "СЦЕНИ", "Scene recipe": "Рецепт сцени", "NEW": "НОВА", @@ -846,24 +3048,27 @@ "GROUND STATION · PROVIDER SETTINGS": "НАЗЕМНА СТАНЦІЯ · НАЛАШТУВАННЯ ПОСТАЧАЛЬНИКІВ", "Close key setup": "Закрити налаштування ключів", "Power up the globe": "Запустіть глобус", - "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.": "Глобус уже літає без ключів. Кожен ключ нижче вмикає ще один справжній канал даних — вставте його, і він збережеться в локальну конфігурацію застосунку, після чого сервер перезапуститься самостійно. Серверні ключі залишаються на цій машині; Google Maps і Cesium ion працюють у браузері, тож їхні ключі треба обмежити на боці постачальника. Ключі, налаштовані деінде, показуються, але ніколи не змінюються.", + "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.": "Глобус уже літає без ключів. Кожен ключ нижче вмикає ще один справжній потік даних — вставте його, і він збережеться в локальну конфігурацію застосунку, після чого сервер сам перезапуститься. Серверні ключі залишаються на цьому компʼютері; Google Maps і Cesium ion працюють у браузері, тож їхні ключі треба обмежити на боці постачальника. Ключі, налаштовані деінде, показано, але їх ніколи не змінюють.", "SAVE KEYS": "ЗБЕРЕГТИ КЛЮЧІ", "ESC to close": "ESC — закрити", "The Google Maps key buys the photorealistic planet — everything else stacks on top.": "Ключ Google Maps відкриває фотореалістичну планету — усе інше нашаровується зверху.", - "NO PLACE LEFT BEHIND": "НІКОГО НЕ ЗАЛИШАЄМО ПОЗАДУ", + "NO PLACE LEFT BEHIND": "ЖОДНЕ МІСЦЕ НЕ ЗАЛИШИТЬСЯ ПОЗА УВАГОЮ", "ACTIVE STYLE": "АКТИВНИЙ СТИЛЬ", "Globe actions": "Дії з глобусом", "Turn off all selected data layers": "Вимкнути всі вибрані шари даних", "Copy share link": "Копіювати посилання для поширення", + "Toggle straight-down and tilted map views": "Перемкнути вигляд карти: згори або з нахилом", + "Reset map to north up": "Повернути карту північчю вгору", + "Reset map bearing to north": "Скинути азимут карти на північ", "Reset camera and return to full globe view": "Скинути камеру та повернутися до загального вигляду глобуса", "MISSION CONTROL · FIRST LAUNCH": "ЦЕНТР КЕРУВАННЯ · ПЕРШИЙ ЗАПУСК", "Choose your first view": "Оберіть свій перший вигляд", - "LIVE CONTACTS": "КОНТАКТИ В РЕАЛЬНОМУ ЧАСІ", + "LIVE CONTACTS": "КОНТАКТИ ОНЛАЙН", "Aircraft, vessels and nearby intelligence": "Літаки, судна та розвідка поблизу", "Launches, spacecraft and orbital context": "Запуски, космічні апарати та орбітальний контекст", "EXPLORE MANUALLY": "ДОСЛІДИТИ ВРУЧНУ", "Begin with a clean globe": "Почніть із чистого глобуса", "Don't show this again": "Більше не показувати", "ESC to dismiss": "ESC — приховати", - "Tip: the GEV MIC button in the dock lets you talk to the map.": "Порада: кнопка GEV MIC у доку дає змогу говорити з картою." + "Tip: the GEV MIC button in the dock lets you talk to the map.": "Порада: кнопка МІК у доку дає змогу говорити з картою." } diff --git a/src/i18n/same-as-english.json b/src/i18n/same-as-english.json index 83c8897d8..21f2ce2fa 100644 --- a/src/i18n/same-as-english.json +++ b/src/i18n/same-as-english.json @@ -142,6 +142,19 @@ "VS", "WHOT/BHOT" ], + "uk": [ + "AIS: --", + "AIS: {name}", + "CCTV", + "CRT", + "FLIR", + "Ironbow", + "Landsat 8/9", + "NVG", + "REC", + "S2 GhostMaps", + "WHOT/BHOT" + ], "zh-CN": [ "1090 MHz", "978 MHz UAT", diff --git a/src/ui/localePicker.test.mjs b/src/ui/localePicker.test.mjs index 057642827..7bdbc7ce4 100644 --- a/src/ui/localePicker.test.mjs +++ b/src/ui/localePicker.test.mjs @@ -40,7 +40,7 @@ test('the current language comes first, the rest by their own names', () => { nativeNames: LOCALE_NAMES, }), ), - ['ru', 'en', 'es', 'zh-CN', 'zh-Hant'], + ['ru', 'uk', 'en', 'es', 'zh-CN', 'zh-Hant'], ); assert.deepEqual( codes( @@ -50,7 +50,7 @@ test('the current language comes first, the rest by their own names', () => { nativeNames: LOCALE_NAMES, }), ), - ['es', 'en', 'ru', 'zh-CN', 'zh-Hant'], + ['es', 'en', 'ru', 'uk', 'zh-CN', 'zh-Hant'], ); assert.deepEqual( codes( @@ -60,7 +60,7 @@ test('the current language comes first, the rest by their own names', () => { nativeNames: LOCALE_NAMES, }), ), - ['en', 'es', 'ru', 'zh-CN', 'zh-Hant'], + ['en', 'es', 'ru', 'uk', 'zh-CN', 'zh-Hant'], ); const rows = buildLocaleOptions({ locales: MANY, @@ -261,7 +261,8 @@ test('keyboard model: open on the current language, move, choose, close', () => model.openList(); assert.equal(model.activeOption.code, 'ru'); assert.deepEqual(model.keydown({ key: 'ArrowDown' }), { handled: true }); - assert.equal(model.activeOption.code, 'en'); + // Russian collation puts the other Cyrillic name next. + assert.equal(model.activeOption.code, 'uk'); model.keydown({ key: 'End' }); assert.equal(model.activeOption.code, 'zh-Hant'); model.keydown({ key: 'Home' }); @@ -275,7 +276,7 @@ test('keyboard model: open on the current language, move, choose, close', () => model.keydown({ key: 'ArrowDown' }); assert.deepEqual(model.keydown({ key: ' ' }), { handled: true, - choose: 'en', + choose: 'uk', }); assert.deepEqual(model.keydown({ key: 'Escape' }), { handled: true, From 9de9106883d87f038d41286d2acec24d966e62c0 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 15:03:34 +0400 Subject: [PATCH 06/20] i18n(it): shorten labels that wrapped or clipped on screen From the screenshot review: the Recent Imagery buttons (SELEZIONA, USA VISTA, VS MAPPA BASE) no longer clip or wrap, the layer state chip reads AVVIO / ARRESTO so a layer name keeps two lines, the cockpit contact header fits two lines (ARIA/MARE, SITI), and the Bhote Koshi play buttons fit on one line (AVVIA). The post-event year follows the label, as the reference one does. Co-Authored-By: Claude Opus 5.5 --- src/i18n/locales/it.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index bf4df8736..8618f52a2 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -108,7 +108,7 @@ "DOWNSTREAM CONSEQUENCE": "CONSEGUENZA A VALLE", "EVIDENCE": "PROVE", "{year} HISTORICAL REFERENCE": "RIFERIMENTO STORICO {year}", - "{year} POST-EVENT": "{year} DOPO L'EVENTO", + "{year} POST-EVENT": "DOPO L'EVENTO {year}", "{count} GEOLOCATED SOURCE-MAP PLACEMENTS": { "one": "{count} POSIZIONAMENTO GEOLOCALIZZATO SULLA MAPPA DELLE FONTI", "many": "{count} DI POSIZIONAMENTI GEOLOCALIZZATI SULLA MAPPA DELLE FONTI", @@ -121,7 +121,7 @@ "{publisher} / OPEN": "{publisher} / APRI", "Bhote Koshi flood reconstruction controls": "Controlli della ricostruzione dell'alluvione del Bhote Koshi", "EVENT RECONSTRUCTION · 26 AUG 2026": "RICOSTRUZIONE DELL'EVENTO · 26 AGO 2026", - "BHOTE KOSHI OUTBURST FLOOD": "ALLUVIONE DA SVUOTAMENTO DEL BHOTE KOSHI", + "BHOTE KOSHI OUTBURST FLOOD": "PIENA IMPROVVISA DEL BHOTE KOSHI", "Close event layer": "Chiudi il livello evento", "OBSERVED IMAGERY": "IMMAGINI OSSERVATE", "SCHEMATIC CORRIDOR": "CORRIDOIO SCHEMATICO", @@ -134,9 +134,9 @@ "CAUSE": "CAUSA", "CAPTURE TIME UNVERIFIED": "ORA DI ACQUISIZIONE NON VERIFICATA", "Next story beat": "Tappa successiva del racconto", - "▶ PLAY": "▶ RIPRODUCI", + "▶ PLAY": "▶ AVVIA", "Play the next shot and continue through this scene": "Riproduci lo scatto successivo e prosegui con questa scena", - "▶ PLAY SCENE": "▶ RIPRODUCI SCENA", + "▶ PLAY SCENE": "▶ AVVIA SCENA", "◉ CINEMATIC": "◉ CINEMATICA", "↺ FULL STORY": "↺ STORIA COMPLETA", "↗ OPEN ORIGINAL": "↗ APRI L'ORIGINALE", @@ -152,12 +152,12 @@ "■ RELEASE CAMERA": "■ RILASCIA LA CAMERA", "Seek Nepal scene clock": "Scorri l'orologio della scena in Nepal", "NEPAL SCENE CLOCK": "OROLOGIO SCENA NEPAL", - "… PLAYING SHOT": "… SCATTO IN RIPRODUZIONE", - "▶ PLAY SHOT": "▶ RIPRODUCI SCATTO", + "… PLAYING SHOT": "… SCATTO IN CORSO", + "▶ PLAY SHOT": "▶ AVVIA SCATTO", "Ⅱ PAUSE": "Ⅱ PAUSA", "↺ REPLAY CINEMATIC": "↺ RIVEDI CINEMATICA", "↺ REPLAY": "↺ RIVEDI", - "… PLAYING SCENE": "… SCENA IN RIPRODUZIONE", + "… PLAYING SCENE": "… SCENA IN CORSO", "Continue {scene} from next shot": "Continua {scene} dallo scatto successivo", "current scene": "scena attuale", "Replay the full reconstruction": "Rivedi l'intera ricostruzione", @@ -1655,8 +1655,8 @@ "CLOUD UNKNOWN": "NUVOLE SCONOSCIUTE", "{source} · LOCATION QUERY": "{source} · QUERY PER POSIZIONE", "REGIONAL NEWS": "NOTIZIE REGIONALI", - "{label} · {radius} AIR/SEA WINDOW": "{label} · FINESTRA ARIA/MARE {radius}", - "{scope} · INSTALLATIONS {coverage}": "{scope} · INSTALLAZIONI {coverage}", + "{label} · {radius} AIR/SEA WINDOW": "{label} · ARIA/MARE {radius}", + "{scope} · INSTALLATIONS {coverage}": "{scope} · SITI {coverage}", "CONTEXT STANDBY": "CONTESTO IN ATTESA", "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "ATTIVA IL CONTESTO GLOBALE PER I PING DI PROSSIMITÀ", "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "CONTATTO PERSO · ULTIMA LETTURA NOTA · NON È UN VIA LIBERA", @@ -1794,7 +1794,7 @@ "{requirement}, or {offer}": "{requirement}, oppure {offer}", "Live Flights": "Voli live", "Military Flights": "Voli militari", - "Earthquakes (24h)": "Terremoti (24h)", + "Earthquakes (24h)": "Terremoti (24 h)", "Satellites": "Satelliti", "Space Missions (30d)": "Missioni spaziali (30 g)", "Street Traffic": "Traffico stradale", @@ -1834,8 +1834,8 @@ "NASA FIRMS · LIVE": "NASA FIRMS · LIVE", "OSM routing": "Percorsi OSM", "data source|Local": "Dati locali", - "ENABLING": "ATTIVAZIONE", - "DISABLING": "DISATTIVAZIONE", + "ENABLING": "AVVIO", + "DISABLING": "ARRESTO", "Movement": "Movimento", "Infrastructure": "Infrastrutture", "Events": "Eventi", @@ -2020,7 +2020,7 @@ "{owner} is using the pointer — close it first": "{owner} sta usando il puntatore: chiudilo prima", "Box is {size} wide · limit {limit}": "Il riquadro è largo {size} · limite {limit}", "View is {size} wide · limit {limit}": "La vista è larga {size} · limite {limit}", - "VS BASEMAP": "VS MAPPA DI BASE", + "VS BASEMAP": "VS MAPPA BASE", "A / B": "A / B", "Newest low-cloud day for this box · scene cloud, not box cloud": "Giorno più recente con poche nuvole per questo riquadro · nuvole della scena, non del riquadro", "Newest day covering this box · cloudier than 20%": "Giorno più recente che copre questo riquadro · nuvole oltre il 20%", @@ -2062,9 +2062,9 @@ "Imagery opacity": "Opacità delle immagini", "SWAP": "SCAMBIA", "Trade the two sides of the divider": "Inverti i due lati del divisore", - "SELECT BOX": "SELEZIONA RIQUADRO", + "SELECT BOX": "SELEZIONA", "Drag a box on the map (Esc cancels)": "Trascina un riquadro sulla mappa (Esc annulla)", - "USE VIEW": "USA LA VISTA", + "USE VIEW": "USA VISTA", "Use the current view as the box": "Usa la vista attuale come riquadro", "Forget the box and its images": "Dimentica il riquadro e le sue immagini", "START HERE": "INIZIA DA QUI", From cdd90dac4bda4809a0e3d74936617cd55ee720f3 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 16:21:13 +0400 Subject: [PATCH 07/20] i18n(uk): fixes from the screenshot review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Layer rows read «не оновлювалося» for a feed that never updated, not «ніколи». - The dock voice toggle label fits on one line (ПЕРЕМК.), the cockpit briefing title (НОВИНИ РЕГІОНУ) no longer truncates, Celestial is «Небо». - No-break spaces keep «24 год», «30 дн» and coordinate abbreviations (пн. ш., зх. д.) on one line. Co-Authored-By: Claude Opus 5.5 --- src/i18n/locales/uk.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 8a543e929..bc98109cf 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -186,7 +186,7 @@ "NEPAL · 26 AUG 2026": "НЕПАЛ · 26 СЕРП. 2026", "USGS INITIAL REPORT": "ПЕРВИННЕ ПОВІДОМЛЕННЯ USGS", "26 AUG 2026 · 08:37 NPT": "26 СЕРП. 2026 · 08:37 NPT", - "28.2710° N · 85.5150° E": "28,2710° ПН. Ш. · 85,5150° СХ. Д.", + "28.2710° N · 85.5150° E": "28,2710° ПН. Ш. · 85,5150° СХ. Д.", "INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "СПОЧАТКУ M4,4 · ПЕРЕКЛАСИФІКОВАНО: ЗСУВ M5,2", "USGS EVENT us7000tbwb · OPEN SOURCE": "ПОДІЯ USGS us7000tbwb · ВІДКРИТИ ДЖЕРЕЛО", "Open the USGS initial report for the 26 August 2026 Nepal landslide": "Відкрити первинне повідомлення USGS про зсув у Непалі 26 серпня 2026 року", @@ -725,10 +725,10 @@ "FIRES": "ПОЖЕЖІ", "max {value} MW": "макс. {value} МВт", "new {value}": "нова {value}", - "{value}°N": "{value}° пн. ш.", - "{value}°S": "{value}° пд. ш.", - "{value}°E": "{value}° сх. д.", - "{value}°W": "{value}° зх. д.", + "{value}°N": "{value}° пн. ш.", + "{value}°S": "{value}° пд. ш.", + "{value}°E": "{value}° сх. д.", + "{value}°W": "{value}° зх. д.", "just now": "щойно", "<1m ago": "<1 хв тому", "{count}m ago": "{count} хв тому", @@ -1226,7 +1226,7 @@ "Contiguous US · gaps ≠ no rain": "Континентальні США · прогалини ≠ немає дощу", "Americas + Pacific · not individual strikes": "Америка + Тихий океан · не окремі розряди", "Color: strikes/km²/min ×10³": "Колір: розрядів/км²/хв ×10³", - "60°S–60°N · typically 2–3 h delayed": "60° пд. ш.–60° пн. ш. · зазвичай затримка 2–3 год", + "60°S–60°N · typically 2–3 h delayed": "60° пд. ш.–60° пн. ш. · зазвичай затримка 2–3 год", "North America · infrared imagery": "Північна Америка · ІЧ-знімки", "Reduced motion · history playback unavailable": "Зменшення руху · відтворення історії недоступне", "Reduced motion · manual history available": "Зменшення руху · історію можна гортати вручну", @@ -1234,7 +1234,7 @@ "Lightning density · 15 min": "Щільність блискавок · 15 хв", "Satellite clouds": "Супутникова хмарність", "Americas + Pacific": "Америка + Тихий океан", - "Global · 60°S–60°N": "Глобально · 60° пд. ш.–60° пн. ш.", + "Global · 60°S–60°N": "Глобально · 60° пд. ш.–60° пн. ш.", "North America": "Північна Америка", "Source observations delayed": "Спостереження джерела затримуються", "Stale source": "Джерело застаріло", @@ -1259,7 +1259,7 @@ "{value} dBZ radar reflectivity": "Радіолокаційна відбивність: {value} dBZ", "STALE · cached source metadata": "ЗАСТАРІЛО · метадані джерела з кешу", "Map center is outside source coverage": "Центр карти поза зоною покриття джерела", - "NOAA/NWS 15-minute lightning density derived from Vaisala NLDN/GLD360. Coverage 110°E across the Pacific/Americas to 0°, 25°S–80°N. Not a live strike count, global coverage or a safety warning.": "15-хвилинна щільність блискавок NOAA/NWS на основі Vaisala NLDN/GLD360. Покриття — від 110° сх. д. через Тихий океан і Америку до 0°, 25° пд. ш.–80° пн. ш. Це не підрахунок розрядів у реальному часі, не глобальне покриття й не попередження про небезпеку.", + "NOAA/NWS 15-minute lightning density derived from Vaisala NLDN/GLD360. Coverage 110°E across the Pacific/Americas to 0°, 25°S–80°N. Not a live strike count, global coverage or a safety warning.": "15-хвилинна щільність блискавок NOAA/NWS на основі Vaisala NLDN/GLD360. Покриття — від 110° сх. д. через Тихий океан і Америку до 0°, 25° пд. ш.–80° пн. ш. Це не підрахунок розрядів у реальному часі, не глобальне покриття й не попередження про небезпеку.", "NOAA MRMS radar echoes indicate precipitation patterns, not rain rate, a storm warning or a future forecast. Native source approximately 1 km; display is limited to level 6. Frames use exact advertised observation times.": "Радіолокаційні відлуння NOAA MRMS показують картину опадів, а не їхню інтенсивність, штормове попередження чи прогноз. Вихідна роздільність близько 1 км; показ обмежено рівнем 6. Для кадрів використано точний заявлений час спостережень.", "GOES-19/18 longwave infrared Band 14 regional; NESDIS global longwave mosaic. Clouds only dims everything but bright, cold cloud tops; a brightness filter, not a cloud mask. Coverage and freshness differ by region.": "Регіональний довгохвильовий ІЧ-канал 14 GOES-19/18; глобальна довгохвильова мозаїка NESDIS. Режим «Лише хмари» затемнює все, крім яскравих холодних вершин хмар; це фільтр яскравості, а не маска хмарності. Покриття й актуальність різняться за регіонами.", "REGION": "РЕГІОН", @@ -1676,7 +1676,7 @@ "CLOUD {pct}%": "ХМАРНІСТЬ {pct}%", "CLOUD UNKNOWN": "ХМАРНІСТЬ НЕВІДОМА", "{source} · LOCATION QUERY": "{source} · ЗАПИТ ЗА РОЗТАШУВАННЯМ", - "REGIONAL NEWS": "РЕГІОНАЛЬНІ НОВИНИ", + "REGIONAL NEWS": "НОВИНИ РЕГІОНУ", "{label} · {radius} AIR/SEA WINDOW": "{label} · ВІКНО ПОВІТРЯ/МОРЕ {radius}", "{scope} · INSTALLATIONS {coverage}": "{scope} · ОБʼЄКТИ: {coverage}", "CONTEXT STANDBY": "КОНТЕКСТ: ОЧІКУВАННЯ", @@ -1823,9 +1823,9 @@ "{requirement}, or {offer}": "{requirement} або {offer}", "Live Flights": "Рейси онлайн", "Military Flights": "Військові рейси", - "Earthquakes (24h)": "Землетруси (24 год)", + "Earthquakes (24h)": "Землетруси (24 год)", "Satellites": "Супутники", - "Space Missions (30d)": "Космічні місії (30 дн)", + "Space Missions (30d)": "Космічні місії (30 дн)", "Street Traffic": "Вуличний рух", "CCTV": "CCTV", "Radio": "Радіо", @@ -1875,7 +1875,7 @@ "UNCERTAIN · {source} · lifecycle state requires reconciliation": "НЕВИЗНАЧЕНО · {source} · стан життєвого циклу потребує звірки", "{state} · {source} · {detail} · retry {seconds}s": "{state} · {source} · {detail} · повтор через {seconds} с", "{state} · {source} · {detail}": "{state} · {source} · {detail}", - "never": "ніколи", + "never": "не оновлювалося", "{source} · {loadingLabel}": "{source} · {loadingLabel}", "{accepted} of {raw} records accepted": "прийнято записів: {accepted} з {raw}", "incomplete snapshot": "неповний знімок", @@ -2367,7 +2367,7 @@ "STD": "СТД", "Estimated session cost": "Орієнтовна вартість сесії", "Voice control — activate to toggle voice; hold Space to speak": "Голосове керування — активуйте, щоб увімкнути або вимкнути голос; утримуйте Space, щоб говорити", - "ON/OFF": "УВІМК/ВИМК", + "ON/OFF": "ПЕРЕМК.", "VOICE STANDBY": "ГОЛОС ОЧІКУЄ", "VOICE CONTROL": "ГОЛОСОВЕ КЕРУВАННЯ", "Hold Space to speak · tap Space to activate focused controls": "Утримуйте Space, щоб говорити · натисніть Space, щоб активувати елемент у фокусі", @@ -2987,7 +2987,7 @@ "Import": "Імпорт", "Choose GeoJSON, KML, KMZ or GPX files": "Виберіть файли GeoJSON, KML, KMZ або GPX", "Imported files": "Імпортовані файли", - "Celestial": "Небесне", + "Celestial": "Небо", "Hide UI chrome": "Сховати оформлення інтерфейсу", "Clean UI": "Чистий інтерфейс", "Bloom / Glow": "Світіння / Ореол", From 5e47a2afbdb5a66a86929cc1e0252555d8d2d2d5 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 17:02:55 +0400 Subject: [PATCH 08/20] i18n(it): apply review round 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three-model review (astra, sol, fable): 53 findings accepted, 14 rejected or deferred. Fixes the meaning of "Downed aircraft", "Compilation", the satellite ground-distance caveat and the browser-key restriction note; agreement for Full, Provider Settings and Space Missions; fork directions that compose with every modifier; a radio aria label that reads as a phrase; imperative tooltips. Shortens the labels that clipped: ESP. A/B, search placeholder, QUOTA · FT, PREC, Esri imagery note. Co-Authored-By: Claude Opus 5.5 --- docs/translations/it.md | 12 +++- src/i18n/locales/it.json | 120 +++++++++++++++++----------------- src/i18n/same-as-english.json | 1 + 3 files changed, 70 insertions(+), 63 deletions(-) diff --git a/docs/translations/it.md b/docs/translations/it.md index 155c0e563..3b7bd2ec7 100644 --- a/docs/translations/it.md +++ b/docs/translations/it.md @@ -10,12 +10,13 @@ Translation source: abiyeenzo (#912). - Sentence case, not Title Case: "Live Flights" → «Voli live», "Space Missions" → «Missioni spaziali». UPPERCASE English stays UPPERCASE: «LIVE», «NON DISPONIBILE». - Quotes inside Italian text are straight double quotes: «Eliminare lo scatto "{shot}"?». Use the accented capitals (È, À) in UPPERCASE text: «VELOCITÀ», «CITTÀ». - Errors read as a statement, not a past participle on its own: "Search failed" → «Ricerca non riuscita»; "Could not …" → «Impossibile …». A dash that joins a cause and a hint becomes a colon: «Chiave API rifiutata: controlla AISSTREAM_API_KEY». -- Short labels, chips and HUD readouts stay short. A standard abbreviation with a period beats a wrapped line: REGOLAZ., RILEV., INCL., ALT., VEL., STIM.; PREC / SUCC for PREV / NEXT. -- The HUD codes HDG, BRG, CRS, FOV and DEST stay in English, as in cockpit avionics. RANGE is «PORTATA». Words used in a sentence are translated: heading → «prua» (aircraft) or «direzione» (camera), course → «rotta». +- Short labels, chips and HUD readouts stay short. A standard abbreviation with a period beats a wrapped line: REGOLAZ., RILEV., INCL., ALT., VEL., STIM., PROIEZ., ESP.; PREC / SUCC for PREV / NEXT and PREVIOUS / NEXT. +- The HUD codes HDG, BRG, CRS, FOV and DEST stay in English, as in cockpit avionics. RANGE is «PORTATA». Words used in a sentence are translated: heading → «prua» (aircraft, ships) or «direzione» (camera, buses, trams, trains), course → «rotta». - Keyboard keys stay in English: Space, Enter, Esc, Tab, Shift, Backspace, H, 1–9 («Tieni premuto Space per parlare», «Premi Enter per riprovare»). - Decimal comma in numbers written in the text: «28,2710° N». Numbers formatted by the code follow `Intl` and need nothing. - Units: km, m, km/h, m/s, kn (knots), ft (feet), h, min, s; in UPPERCASE text KM, KM/S, KT, FT, MIN, H. "m" is always metres, so minutes are «min» («5 min fa»). MW stays MW. `°` and `%` stay. - "ago" goes after the time: «{count} min fa». When a placeholder already holds a localized "ago" text (`{age}`, `{ago}`), do not add «fa» again. +- A feature name used as a sentence subject gets a head noun so the verb agrees: «La modalità Missioni spaziali isola…», «Il pannello Impostazioni provider è disattivato…». - English loanwords that Italian UIs use as they are stay in English: feed, live, cockpit, briefing, preset, overlay, layout, snapshot, tile, provider, timeout, payload, bloom, scope. ## Plurals @@ -36,7 +37,7 @@ The `many` form is the `other` text with «di» after the number when a noun fol | --------------------------------------------- | ------------------------------------------------------------ | | layer / data layer | livello / livello dati | | feed / source / data source | feed / fonte / fonte dati | -| LIVE (status) / live data | LIVE / dati live | +| LIVE (status) / live data / live (feed state) | LIVE / dati live / live | | SIMULATED | SIMULATO | | stale / degraded / unavailable | obsoleto / degradato / non disponibile | | retry / retrying | riprova / nuovo tentativo | @@ -78,6 +79,11 @@ The `many` form is the `other` text with «di» after the number when a noun fol | Recent Imagery | Immagini recenti | | Global Context / Context (panel) | Contesto globale / Contesto | | heading, course / altitude / ground speed | prua, rotta / altitudine / velocità al suolo (VEL. AL SUOLO) | +| altitude in short HUD captions / Alt unknown | QUOTA (QUOTA · FT) / Quota sconosciuta | +| fallback (FALLBACK, Street View fallback) | riserva / di riserva (SUPERFICIE DI RISERVA) | +| forecast track / advisory center (cyclones) | traccia prevista / centro del ciclone da bollettino | +| witness source / authored (scene) | fonte testimoniale / predefinito, definito dall'autore | +| explore manually | esplora manualmente | | HDG / BRG / CRS / FOV / DEST | HDG / BRG / CRS / FOV / DEST (unchanged) | | RANGE / PITCH / HGT (CCTV calibration) | PORTATA / INCL. / ALT. | | PREV / NEXT | PREC / SUCC | diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 8618f52a2..7afaa6335 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -26,7 +26,7 @@ "Loading the keyless globe...": "Caricamento del globo senza chiave...", "Google 3D Tiles unavailable ({detail}). Loading the keyless globe...": "Google 3D Tiles non disponibile ({detail}). Caricamento del globo senza chiave...", "Initializing systems...": "Inizializzazione dei sistemi...", - "Space Missions isolates replay data. Exit the mode to enable {layer}.": "Missioni spaziali isola i dati del replay. Esci dalla modalità per attivare {layer}.", + "Space Missions isolates replay data. Exit the mode to enable {layer}.": "La modalità Missioni spaziali isola i dati del replay. Esci dalla modalità per attivare {layer}.", "Data attribution": "Attribuzione dei dati", "Data provided by:": "Dati forniti da:", "Close data attribution": "Chiudi le attribuzioni dei dati", @@ -43,13 +43,13 @@ "General emergency": "Emergenza generale", "Unlawful interference": "Interferenza illecita", "Radio failure": "Avaria radio", - "Downed aircraft": "Aeromobile abbattuto", + "Downed aircraft": "Aereo precipitato", "Minimum fuel": "Carburante minimo", "Lifeguard (medical priority)": "Lifeguard (priorità medica)", "Rasuwagadhi witness video": "Video del testimone a Rasuwagadhi", "Bhote Koshi valley footage": "Riprese della valle del Bhote Koshi", "Flood footage": "Riprese dell'alluvione", - "Compilation and casualty claims": "Compilazione e dichiarazioni sulle vittime", + "Compilation and casualty claims": "Raccolta di video e dichiarazioni sulle vittime", "SOURCE GEOCONFIRMED · WORLD-PINNED": "FONTE GEOCONFERMATA · ANCORATA AL MONDO", "SOURCE CREDITED · LOCATION UNRESOLVED": "FONTE CITATA · POSIZIONE NON RISOLTA", "REFERENCE ONLY · CLAIMS UNVERIFIED": "SOLO RIFERIMENTO · DICHIARAZIONI NON VERIFICATE", @@ -91,8 +91,8 @@ "Facebook embed unavailable": "Incorporamento di Facebook non disponibile", "AUTOPLAY BLOCKED · USE PROVIDER CONTROLS": "AUTOPLAY BLOCCATO · USA I CONTROLLI DEL PROVIDER", "Embedded {provider} media for {source}": "Contenuto {provider} incorporato per {source}", - "witness source": "fonte testimone", - "Witness source": "Fonte testimone", + "witness source": "fonte testimoniale", + "Witness source": "Fonte testimoniale", "{provider} · EMBEDDED SOURCE": "{provider} · FONTE INCORPORATA", "OPEN ORIGINAL ↗": "APRI L'ORIGINALE ↗", "{provider} media: {source}": "Contenuto {provider}: {source}", @@ -169,7 +169,7 @@ "other": "{count} FONTI" }, "OUTSIDE IMAGERY SWIPE": "FUORI DAL CONFRONTO IMMAGINI", - "{scene} / AUTHORED SHOT": "{scene} / SCATTO D'AUTORE", + "{scene} / AUTHORED SHOT": "{scene} / SCATTO PREDEFINITO", "NEPAL FLOOD INCIDENT": "ALLUVIONE IN NEPAL", "Play {shot}": "Riproduci {shot}", "current scene shot": "scatto della scena attuale", @@ -194,7 +194,7 @@ "PLACES": "LUOGHI", "Introduce the reconstruction scene key places from trigger to downstream": "Presenta i luoghi chiave della scena ricostruita, dall'innesco fino a valle", "PATH": "PERCORSO", - "Animate the sourced cyan river-centerline route to Trishuli Bazaar": "Anima il percorso ciano lungo l'asse del fiume, da fonti, fino a Trishuli Bazaar", + "Animate the sourced cyan river-centerline route to Trishuli Bazaar": "Anima il percorso ciano documentato dalle fonti lungo l'asse del fiume fino a Trishuli Bazaar", "OVERVIEW": "PANORAMICA", "Keep the completed flood path and location labels visible": "Mantieni visibili il percorso completo dell'alluvione e le etichette dei luoghi", "RECORD": "REGISTRO", @@ -308,7 +308,7 @@ "Live earthquakes and active fires, from USGS and NASA": "Terremoti e incendi attivi in tempo reale, da USGS e NASA", "It feels like a forbidden cockpit—then you realize the sources are public and the data is real.": "Sembra un cockpit proibito, poi capisci che le fonti sono pubbliche e i dati sono reali.", "Working…": "Operazione in corso…", - "Could not open that mission{detail}. Retry or explore manually.": "Impossibile aprire quella missione{detail}. Riprova o esplora a mano.", + "Could not open that mission{detail}. Retry or explore manually.": "Impossibile aprire quella missione{detail}. Riprova o esplora manualmente.", "This browser is blocking storage, so that could not be saved.": "Questo browser blocca l'archiviazione, quindi non è stato possibile salvare.", "NORMAL": "NORMALE", "CRT": "CRT", @@ -318,7 +318,7 @@ "NOIR": "NOIR", "SNOW": "NEVE", "ARCTIC": "ARTICO", - "ANTARCTIC": "ANTARTIDE", + "ANTARCTIC": "ANTARTICO", "NORTH AMERICA": "NORD AMERICA", "SOUTH AMERICA": "SUD AMERICA", "EUROPE": "EUROPA", @@ -343,7 +343,7 @@ "REC": "REC", "AIS: --": "AIS: --", "N/A": "N/D", - "{mode} {band} {locality} | {region} | ALT {alt} | WINDOW {window} | SUN {sun}° | ONA {ona}° | {zone}": " {mode} {band} {locality} | {region} | ALT {alt} | FINESTRA {window} | SOLE {sun}° | ONA {ona}° | {zone}", + "{mode} {band} {locality} | {region} | ALT {alt} | WINDOW {window} | SUN {sun}° | ONA {ona}° | {zone}": "{mode} {band} {locality} | {region} | ALT {alt} | FINESTRA {window} | SOLE {sun}° | ONA {ona}° | {zone}", "NEAR {poi} ({city}) {distance}": "VICINO A {poi} ({city}) {distance}", "SECTOR {lat} {lon}": "SETTORE {lat} {lon}", "hemisphere|N": "N", @@ -356,11 +356,11 @@ "other": "ACCENDI · {count} CHIAVI IN ATTESA" }, "POWERED UP": "ACCESO", - "Provider Settings does not answer proxied requests": "Impostazioni provider non risponde alle richieste tramite proxy", - "Provider Settings is disabled while sharing is enabled": "Impostazioni provider è disattivato mentre la condivisione è attiva", - "Provider Settings answers only the machine running the server": "Impostazioni provider risponde solo alla macchina su cui gira il server", - "Provider Settings answers only local hostnames": "Impostazioni provider risponde solo a nomi host locali", - "Provider Settings requires an exact local Origin": "Impostazioni provider richiede un'Origin locale esatta", + "Provider Settings does not answer proxied requests": "Il pannello Impostazioni provider non risponde alle richieste tramite proxy", + "Provider Settings is disabled while sharing is enabled": "Il pannello Impostazioni provider è disattivato mentre la condivisione è attiva", + "Provider Settings answers only the machine running the server": "Il pannello Impostazioni provider risponde solo alla macchina su cui gira il server", + "Provider Settings answers only local hostnames": "Il pannello Impostazioni provider risponde solo a nomi host locali", + "Provider Settings requires an exact local Origin": "Il pannello Impostazioni provider richiede un'Origin locale esatta", "Unrecognized Origin refused": "Origin non riconosciuta rifiutata", "Cross-origin requests are refused": "Le richieste cross-origin sono rifiutate", "Content-Type must be application/json": "Content-Type deve essere application/json", @@ -423,7 +423,7 @@ "Remove this key from your saved configuration?": "Rimuovere questa chiave dalla configurazione salvata?", "Removed from {store}. Restarting — this page reloads itself.": "Rimosso ({store}). Riavvio in corso: questa pagina si ricarica da sola.", "The photorealistic 3D planet, place search + Street View": "Il pianeta 3D fotorealistico, ricerca luoghi + Street View", - "Places context + Street View fallback; optional separate key": "Contesto luoghi + fallback Street View; chiave separata opzionale", + "Places context + Street View fallback; optional separate key": "Contesto luoghi + Street View di riserva; chiave separata opzionale", "Voice control — API key or ChatGPT OAuth": "Controllo vocale: chiave API o ChatGPT OAuth", "Gemini Live voice control": "Controllo vocale Gemini Live", "Live ships, worldwide": "Navi live, in tutto il mondo", @@ -494,7 +494,7 @@ "Focus {label}": "Focus su {label}", "Global Context navigation": "Navigazione Contesto globale", "Previous — prior visited contact in the 250 km window": "Precedente — contatto visitato in precedenza nella finestra di 250 km", - "PREVIOUS": "PRECEDENTE", + "PREVIOUS": "PREC", "FOCUS": "FOCUS", "Next — nearest unvisited contact in the 250 km window": "Successivo — contatto non visitato più vicino nella finestra di 250 km", "NEXT": "SUCC", @@ -534,8 +534,8 @@ "COVERAGE {value}km²": "COPERTURA {value}km²", "OVERLAP {count} cams": "SOVRAPP. {count} cam", "ISOLATED VIEW": "VISTA ISOLATA", - "PROJ MONITOR": "PROIEZ MONITOR", - "PROJ OFF": "PROIEZ OFF", + "PROJ MONITOR": "PROIEZ. MONITOR", + "PROJ OFF": "PROIEZ. OFF", "VIEWSHED": "VIEWSHED", "CAL {value}": "CAL {value}", "SRC {value}": "FONTE {value}", @@ -572,7 +572,7 @@ "Official advisory ↗": "Bollettino ufficiale ↗", "Active NHC and CPHC cyclone advisories": "Bollettini attivi sui cicloni di NHC e CPHC", "Wind unavailable": "Vento non disponibile", - "Advisory center / forecast track": "Centro del bollettino / traccia prevista", + "Advisory center / forecast track": "Centro del ciclone da bollettino / traccia prevista", "Center-track uncertainty cone": "Cono di incertezza della traccia del centro", "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Seleziona una tempesta sulla mappa, o scegline una nell'elenco per selezionarla e spostare la camera. Fai clic su un punto vuoto della mappa per annullare la selezione. Contesto dai bollettini NOAA NHC/CPHC. Il cono descrive l'incertezza prevista sulla traccia del centro, non le dimensioni della tempesta né l'intera area di pericolo. Le etichette dei punti di previsione sono le ore di anticipo della fonte, non orari calcolati dall'emissione del bollettino. La geometria segue la superficie; l'altezza non è la quota meteorologica. Consulta il bollettino ufficiale.", "DRIVE": "AUTO", @@ -597,8 +597,8 @@ "direction|sharply right": "nettamente a destra", "direction|straight": "dritto", "direction|around": "in senso opposto", - "fork direction|left": "la sinistra", - "fork direction|right": "la destra", + "fork direction|left": "a sinistra", + "fork direction|right": "a destra", "fork direction|slightly left": "leggermente a sinistra", "fork direction|slightly right": "leggermente a destra", "fork direction|sharply left": "nettamente a sinistra", @@ -634,8 +634,8 @@ "At the end of the road, turn {direction}": "Alla fine della strada, svolta {direction}", "At the end of the road, continue onto {road}": "Alla fine della strada, prosegui su {road}", "At the end of the road, continue": "Alla fine della strada, prosegui", - "Keep {direction} at the fork onto {road}": "Al bivio, tieni {direction} verso {road}", - "Keep {direction} at the fork": "Al bivio, tieni {direction}", + "Keep {direction} at the fork onto {road}": "Al bivio, prosegui {direction} verso {road}", + "Keep {direction} at the fork": "Al bivio, prosegui {direction}", "Continue at the fork onto {road}": "Al bivio, prosegui verso {road}", "Continue at the fork": "Al bivio, prosegui", "Merge {direction} onto {road}": "Immettiti {direction} su {road}", @@ -773,7 +773,7 @@ "Retrying automatically at {time} UTC": "Nuovo tentativo automatico alle {time} UTC", "Retrying automatically after provider cooldown": "Nuovo tentativo automatico dopo la pausa del provider", "Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Si aggiorna automaticamente dopo uno spostamento o uno zoom e una volta al minuto. Il feed pubblico copre un cerchio di 250 miglia nautiche attorno al centro della vista; allontanare lo zoom non lo rende un'istantanea mondiale. Le celle vuote sono fuori dalla copertura campionata o hanno osservazioni insufficienti.", - "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Indice di bassa precisione = 100 × max(0, anomali − 1) / totale: un aereo viene scontato, quindi non è la quota grezza. Le celle richiedono {aircraft} aerei in {minutes} minuti. Le anomalie di integrità della navigazione non indicano un rilevamento di jamming o spoofing.", + "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Indice di bassa precisione = 100 × max(0, anomali − 1) / totale: dal conteggio degli aerei anomali si sottrae un aereo, quindi non è la percentuale grezza. Le celle richiedono {aircraft} aerei in {minutes} minuti. Le anomalie di integrità della navigazione non costituiscono un rilevamento di jamming o spoofing.", "GNSS snapshot needs a view anchor": "Lo snapshot GNSS richiede un punto di riferimento della vista", "GNSS feed rate limited (HTTP 429)": "Limite di richieste del feed GNSS raggiunto (HTTP 429)", "Malformed GNSS integrity snapshot": "Snapshot di integrità GNSS non valido", @@ -939,8 +939,8 @@ "Unnamed incident": "Incidente senza nome", "Open {title} on InciWeb": "Apri {title} su InciWeb", "Perimeter source unavailable": "Fonte dei perimetri non disponibile", - "Not contained or unknown": "Non contenuto o sconosciuto", - "Under 50% contained": "Contenuto meno del 50%", + "Not contained or unknown": "Non contenuto o dato non disponibile", + "Under 50% contained": "Contenuto sotto il 50%", "50–99% contained": "Contenuto al 50–99%", "Fully contained": "Completamente contenuto", "Colour shows reported containment. Perimeters are simplified to about 100 m.": "Il colore indica il contenimento riportato. I perimetri sono semplificati a circa 100 m.", @@ -950,7 +950,7 @@ "Talk": "Talk", "Weather / Emergency": "Meteo / Emergenza", "Public Safety": "Sicurezza pubblica", - "Aviation / Marine": "Aviazione / Marina", + "Aviation / Marine": "Aviazione / Nautica", "Traffic / Transit": "Traffico / Trasporti", "Music": "Musica", "Other": "Altro", @@ -1038,7 +1038,7 @@ "No street-level imagery within {radius} m of the view centre": "Nessuna immagine a livello stradale entro {radius} m dal centro della vista", "Zoom in to see street-level coverage": "Ingrandisci per vedere la copertura a livello stradale", "Point the camera at the ground for street-level coverage": "Punta la camera verso il suolo per la copertura a livello stradale", - "Coverage tile failed": "Tile di copertura non riuscito", + "Coverage tile failed": "Caricamento del tile di copertura non riuscito", "The photo could not be loaded": "Impossibile caricare la foto", "{name} photo. ← and → step along the sequence. On a 360° photo, drag or use Shift+← →, ↑ ↓ to look around, and + − to zoom": "Foto {name}. ← e → scorrono la sequenza. Su una foto a 360°, trascina o usa Shift+← →, ↑ ↓ per guardarti intorno, e + − per lo zoom", "{name} street-level photo": "Foto a livello stradale {name}", @@ -1139,7 +1139,7 @@ "Waiting for update": "In attesa di aggiornamento", "Moving": "In movimento", "reported {speed} km/h": "{speed} km/h riportati", - "reported hdg {heading}°": "prua {heading}° riportata", + "reported hdg {heading}°": "direzione {heading}° riportata", "Last report: stopped at stop {stop}": "Ultimo rapporto: fermo alla fermata {stop}", "Last report: arriving at stop {stop}": "Ultimo rapporto: in arrivo alla fermata {stop}", "Last report: next stop {stop}": "Ultimo rapporto: prossima fermata {stop}", @@ -1232,7 +1232,7 @@ "GOES regional clouds; approximately 5-minute updates": "Nuvole regionali GOES; aggiornamenti circa ogni 5 minuti", "Clouds only": "Solo nuvole", "Apply the full cloud brightness key; 100% filter strength": "Applica l'intera scala di luminosità delle nuvole; intensità del filtro 100%", - "Full": "Completo", + "Full": "Completa", "Show the complete infrared image; 0% filter strength": "Mostra l'intera immagine all'infrarosso; intensità del filtro 0%", "Soft": "Tenue", "Vivid": "Vivido", @@ -1280,7 +1280,7 @@ "Reduced motion": "Movimento ridotto", "Resume": "Riprendi", "Pause": "Pausa", - "Pause visual flow; forecast time does not advance with animation": "Mette in pausa il flusso visivo; l'ora della previsione non avanza con l'animazione", + "Pause visual flow; forecast time does not advance with animation": "Metti in pausa il flusso visivo; l'ora della previsione non avanza con l'animazione", "None": "Nessuno", "Speed": "Velocità", "Pressure": "Pressione", @@ -1480,7 +1480,7 @@ "Apply details": "Applica i dettagli", "Select a scene first": "Seleziona prima una scena", "Share selected scene": "Condividi la scena selezionata", - "Scene JSON preserves authored settings and attribution. It does not include asset files. Bundles include only pack files you choose here or previously imported bundle files.": "Il JSON della scena conserva le impostazioni d'autore e l'attribuzione. Non include i file delle risorse. I pacchetti includono solo i file dei pacchetti dati scelti qui o i file di pacchetti importati in precedenza.", + "Scene JSON preserves authored settings and attribution. It does not include asset files. Bundles include only pack files you choose here or previously imported bundle files.": "Il JSON della scena conserva le impostazioni definite dall'autore e l'attribuzione. Non include i file delle risorse. I pacchetti includono solo i file dei pacchetti dati scelti qui o i file di pacchetti importati in precedenza.", "Download scene JSON": "Scarica il JSON della scena", "Choose data-pack files": "Scegli i file del pacchetto dati", "Or choose a data-pack folder": "Oppure scegli una cartella del pacchetto dati", @@ -1515,7 +1515,7 @@ "FM signal found at {mhz} MHz": "Segnale FM trovato a {mhz} MHz", "No FM signal found": "Nessun segnale FM trovato", "Browser location is unavailable": "La posizione del browser non è disponibile", - "Receiver location was not granted": "Posizione del ricevitore non concessa", + "Receiver location was not granted": "Accesso alla posizione del ricevitore non concesso", "RTL-SDR disconnected": "RTL-SDR disconnesso", "Upstream response too large": "Risposta del servizio upstream troppo grande", "Vector tile request timed out": "La richiesta dei tile vettoriali è andata in timeout", @@ -1622,7 +1622,7 @@ "many": "{count} di telecamere caricate · attiva CCTV per attivarle", "other": "{count} telecamere caricate · attiva CCTV per attivarle" }, - "Enable CCTV to load camera intersections": "Attiva CCTV per caricare gli incroci delle telecamere", + "Enable CCTV to load camera intersections": "Attiva CCTV per caricare le telecamere agli incroci", "Enable CCTV to start camera-linked intelligence summaries.": "Attiva CCTV per avviare i riepiloghi intelligence collegati alle telecamere.", "No summary available.": "Nessun riepilogo disponibile.", "loading frames": "caricamento fotogrammi", @@ -1643,7 +1643,7 @@ "CYCLE ON": "CICLO ON", "CYCLE OFF": "CICLO OFF", "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Ferma lo scorrimento automatico delle pagine. Precedente, Successiva e le schede SIG/NOTIZIE/LOCALE restano disponibili.", - "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.": "Scorre automaticamente le pagine del briefing ogni 9 secondi (Segnali → Notizie → Locale). Si mette in pausa quando passi sul pannello o lo selezioni. I dati dei segnali live si aggiornano comunque di continuo.", + "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.": "Scorri automaticamente le pagine del briefing ogni 9 secondi (Segnali → Notizie → Locale). Lo scorrimento si interrompe quando passi sul pannello o lo selezioni. I dati dei segnali live si aggiornano comunque di continuo.", "ACQUIRING REGIONAL NEWS": "ACQUISIZIONE NOTIZIE REGIONALI", "REGIONAL NEWS UNAVAILABLE": "NOTIZIE REGIONALI NON DISPONIBILI", "RESOLVING REGION": "RISOLUZIONE REGIONE", @@ -1652,7 +1652,7 @@ "{domain} · {age}": "{domain} · {age}", "{value} KM/H": "{value} KM/H", "CLOUD {pct}%": "NUVOLE {pct}%", - "CLOUD UNKNOWN": "NUVOLE SCONOSCIUTE", + "CLOUD UNKNOWN": "NUVOLE N/D", "{source} · LOCATION QUERY": "{source} · QUERY PER POSIZIONE", "REGIONAL NEWS": "NOTIZIE REGIONALI", "{label} · {radius} AIR/SEA WINDOW": "{label} · ARIA/MARE {radius}", @@ -1680,7 +1680,7 @@ "ADS-B EMERGENCY · {status}": "EMERGENZA ADS-B · {status}", "AIRCRAFT": "AEREO", "ACQUIRING SURFACE": "ACQUISIZIONE SUPERFICIE", - "SURFACE FALLBACK": "FALLBACK SUPERFICIE", + "SURFACE FALLBACK": "SUPERFICIE DI RISERVA", "STALE FEED": "FEED OBSOLETO", "LIVE TRACK": "TRACCIA LIVE", "COMMERCIAL": "COMMERCIALE", @@ -1698,7 +1698,7 @@ "Anime": "Anime", "Noir": "Noir", "Snow": "Neve", - "Current cockpit vision style: {style}. Activate for next style.": "Stile di visione del cockpit attuale: {style}. Attiva per lo stile successivo.", + "Current cockpit vision style: {style}. Activate for next style.": "Stile di visione attuale del cockpit: {style}. Attiva per lo stile successivo.", "Current style: {style} — click for next": "Stile attuale: {style} — clic per il successivo", "Collapse Contact panel": "Comprimi il pannello Contatto", "Expand Contact panel": "Espandi il pannello Contatto", @@ -1804,7 +1804,7 @@ "Live AIS Vessels": "Navi AIS live", "Mapped Installations": "Installazioni mappate", "Global Context": "Contesto globale", - "Datacenters": "Data Center", + "Datacenters": "Data center", "Dams": "Dighe", "Submarine Cables": "Cavi sottomarini", "FIRMS Active Fires": "Incendi attivi FIRMS", @@ -1869,7 +1869,7 @@ "running": "in esecuzione", "suspended": "sospeso", "closed": "chiuso", - "feed status|live": "in diretta", + "feed status|live": "live", "feed status|stale": "obsoleto", "feed status|unreachable": "irraggiungibile", "feed status|invalid": "non valido", @@ -1980,7 +1980,7 @@ "PLAY": "PLAY", "selected": "selezionata", "nearest": "più vicina", - "{action} {target} radio station": "{action} stazione radio {target}", + "{action} {target} radio station": "{action}: stazione radio {target}", "RADIO STATE UNCERTAIN": "STATO RADIO INCERTO", "SYNCING DIRECTORY": "SINCRONIZZAZIONE ELENCO", "RADIO READY": "RADIO PRONTA", @@ -2013,7 +2013,7 @@ "Latest": "Più recente", "Newest frame per product": "Fotogramma più recente per prodotto", "Replay observed history": "Rivedi lo storico osservato", - "Imagery on Esri · Google 3D returns when cleared": "Immagini su Esri · Google 3D torna dopo la cancellazione", + "Imagery on Esri · Google 3D returns when cleared": "Immagini su Esri · Google 3D torna con CANCELLA", "Point the camera at the ground to use the view": "Punta la camera verso il suolo per usare la vista", "That point cannot anchor a box": "Quel punto non può ancorare un riquadro", "Imagery stops at ±{limit}° latitude": "Le immagini si fermano a ±{limit}° di latitudine", @@ -2088,7 +2088,7 @@ "Source off": "Fonte disattivata", "Unpin {slot}": "Sblocca {slot}", "Unpin the image": "Sblocca l'immagine", - "EXPORT {slot}": "ESPORTA {slot}", + "EXPORT {slot}": "ESP. {slot}", "EXPORT": "ESPORTA", "Download {slot} as a PNG": "Scarica {slot} come PNG", "Download the image as a PNG": "Scarica l'immagine come PNG", @@ -2261,7 +2261,7 @@ "Open {names} at the centre of the view": "Apri {names} al centro della vista", "Zoom in to a street to open {names} here": "Ingrandisci su una strada per aprire {names} qui", "Switch Street Level on to draw its coverage.": "Attiva Vista stradale per disegnarne la copertura.", - "Every provider is switched off: light a chip to draw its coverage.": "Tutti i provider sono disattivati: accendi un chip per disegnarne la copertura.", + "Every provider is switched off: light a chip to draw its coverage.": "Tutti i provider sono disattivati: attivane uno per visualizzarne la copertura.", "Loading this sequence…": "Caricamento di questa sequenza…", "{n} images in this sequence · Esc clears": { "one": "{n} immagine in questa sequenza · Esc cancella", @@ -2521,7 +2521,7 @@ "last 24 h": "ultime 24 h", "past 30 d and upcoming": "ultimi 30 g e prossimi", "the flights layer loads by viewport": "il livello voli si carica per vista", - "distance is ground distance, not overhead": "la distanza è al suolo, non in linea d'aria", + "distance is ground distance, not overhead": "la distanza è misurata al suolo fino al punto subsatellitare, non fino al satellite", "the count is a lower bound because at least one layer reached its retained limit.": "il conteggio è un limite inferiore perché almeno un livello ha raggiunto il suo limite di conservazione.", "{label} off": "{label} disattivato", "{label} loading": "{label} in caricamento", @@ -2570,7 +2570,7 @@ "{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "{layer} è attivo sul feed {source}, ma nessun aereo in volo è ancora caricato nella vista di {place}", "{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "{layer} è attivo, ma nessun aereo in volo è ancora caricato nella vista di {place}", "{layer} is enabled, but its aircraft feed is unavailable": "{layer} è attivo, ma il suo feed di aerei non è disponibile", - "{layer} is enabled, but its destination refresh did not complete": "{layer} è attivo, ma l'aggiornamento delle destinazioni non è stato completato", + "{layer} is enabled, but its destination refresh did not complete": "{layer} è attivo, ma l'aggiornamento nel luogo di destinazione non è stato completato", "{layer} is enabled, but {source} is unavailable": "{layer} è attivo, ma {source} non è disponibile", "Could not arrive at {place}": "Impossibile arrivare a {place}", "{name} is no longer loaded": "{name} non è più caricato", @@ -2623,7 +2623,7 @@ "{origin} to {destination}": "Da {origin} a {destination}", "from {origin}": "da {origin}", "to {destination}": "a {destination}", - "Registration {registration}": "Immatricolazione {registration}", + "Registration {registration}": "Matricola {registration}", "View state": "Stato della vista", "Marked {count} places": { "one": "Segnato {count} luogo", @@ -2634,7 +2634,7 @@ "Not found: {places}": "Non trovati: {places}", "Tracing outlines": "Tracciamento dei contorni", "Frame flights": "Inquadra i voli", - "Frame military": "Inquadra i militari", + "Frame military": "Inquadra i voli militari", "Frame vessels": "Inquadra le navi", "Frame {target}": "Inquadra {target}", "Zoom out to globe": "Allontana fino al globo", @@ -2665,7 +2665,7 @@ "Fly to {place}": "Vola su {place}", "Fly to Location": "Vola sul luogo", "Nearest aircraft to {place}": "Aereo più vicino a {place}", - "Nearest aircraft to Here": "Aereo più vicino a qui", + "Nearest aircraft to Here": "Aereo più vicino a questo punto", "Layer on": "Livello attivato", "Layer off": "Livello disattivato", "Zoom out": "Allontana", @@ -2693,22 +2693,22 @@ "Recent speech": "Parlato recente", "HERE": "QUI", "Aircraft cockpit view": "Vista cockpit dell'aereo", - "LEVEL": "LIVELLO", + "LEVEL": "ORIZZONTE", "Estimated destination direction": "Direzione stimata della destinazione", "DEST ---°": "DEST ---°", "OPTICAL PLANE · 01": "PIANO OTTICO · 01", "VISOR LOCK · ACTIVE": "BLOCCO VISIERA · ATTIVO", "GROUND SPEED · KTS": "VEL. AL SUOLO · KTS", - "ALTITUDE · FT": "ALTITUDINE · FT", + "ALTITUDE · FT": "QUOTA · FT", "FIRST PERSON": "PRIMA PERSONA", "LIVE TRACK · COURSE ALIGNED": "TRACCIA LIVE · ROTTA ALLINEATA", "Cockpit vision style": "Stile di visione del cockpit", - "Previous cockpit vision style": "Stile di visione del cockpit precedente", + "Previous cockpit vision style": "Stile di visione precedente del cockpit", "Previous vision style": "Stile di visione precedente", - "Current cockpit vision style: NORMAL. Activate for next style.": "Stile di visione del cockpit attuale: NORMALE. Attiva per lo stile successivo.", + "Current cockpit vision style: NORMAL. Activate for next style.": "Stile di visione attuale del cockpit: NORMALE. Attiva per lo stile successivo.", "Current style: NORMAL — click for next": "Stile attuale: NORMALE — clic per il successivo", "CURRENT": "ATTUALE", - "Next cockpit vision style": "Stile di visione del cockpit successivo", + "Next cockpit vision style": "Stile di visione successivo del cockpit", "Next vision style": "Stile di visione successivo", "Current aircraft heading": "Prua attuale dell'aereo", "GROUND SPEED": "VEL. AL SUOLO", @@ -2778,7 +2778,7 @@ "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Simula il contrasto termico in stile FLIR. Alza Ironbow per il colore.", "Apply bright cel-shaded color and illustrated outlines.": "Applica colori vivaci cel-shaded e contorni illustrati.", "Apply high-contrast monochrome film-noir grading.": "Applica un color grading noir monocromatico ad alto contrasto.", - "Add a cold, snowy whiteout treatment to the scene.": "Aggiunge alla scena un effetto freddo di nevicata e whiteout.", + "Add a cold, snowy whiteout treatment to the scene.": "Aggiungi alla scena un effetto freddo di nevicata e whiteout.", "MAP SOURCE": "FONTE MAPPA", "Map source": "Fonte mappa", "Style": "Stile", @@ -2786,9 +2786,9 @@ "Collapse panel": "Comprimi pannello", "Pin location tray": "Fissa il pannello posizione", "Keep location tray open": "Mantieni aperto il pannello posizione", - "Search any location": "Cerca un luogo qualsiasi", + "Search any location": "Cerca un luogo", "Search location by name or coordinates": "Cerca un luogo per nome o coordinate", - "Search any location...": "Cerca un luogo qualsiasi...", + "Search any location...": "Cerca un luogo...", "WEATHER": "METEO", "Active weather products": "Prodotti meteo attivi", "RECENT IMAGERY": "IMMAGINI RECENTI", @@ -2979,7 +2979,7 @@ "GROUND STATION · PROVIDER SETTINGS": "STAZIONE A TERRA · IMPOSTAZIONI PROVIDER", "Close key setup": "Chiudi la configurazione delle chiavi", "Power up the globe": "Accendi il globo", - "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.": "Il globo funziona già senza chiavi. Ogni chiave qui sotto attiva un altro feed reale: incollane una e verrà salvata nella configurazione locale di questa app, poi il server si riavvia da solo. Le chiavi lato server restano su questa macchina; Google Maps e Cesium ion funzionano nel browser e vanno limitate al provider. Le chiavi configurate altrove vengono mostrate ma mai modificate.", + "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.": "Il globo funziona già senza chiavi. Ogni chiave qui sotto attiva un altro feed reale: incollane una e verrà salvata nella configurazione locale di questa app, poi il server si riavvia da solo. Le chiavi lato server restano su questa macchina; le chiavi di Google Maps e Cesium ion vengono usate nel browser e richiedono restrizioni configurate presso il provider. Le chiavi configurate altrove vengono mostrate ma mai modificate.", "SAVE KEYS": "SALVA CHIAVI", "ESC to close": "ESC per chiudere", "The Google Maps key buys the photorealistic planet — everything else stacks on top.": "La chiave Google Maps sblocca il pianeta fotorealistico: tutto il resto si aggiunge sopra.", @@ -2997,7 +2997,7 @@ "LIVE CONTACTS": "CONTATTI LIVE", "Aircraft, vessels and nearby intelligence": "Aerei, navi e intelligence nelle vicinanze", "Launches, spacecraft and orbital context": "Lanci, veicoli spaziali e contesto orbitale", - "EXPLORE MANUALLY": "ESPLORA A MANO", + "EXPLORE MANUALLY": "ESPLORA MANUALMENTE", "Begin with a clean globe": "Inizia con un globo pulito", "Don't show this again": "Non mostrare più", "ESC to dismiss": "ESC per chiudere", diff --git a/src/i18n/same-as-english.json b/src/i18n/same-as-english.json index be8a06f0c..81a6d1cc2 100644 --- a/src/i18n/same-as-english.json +++ b/src/i18n/same-as-english.json @@ -260,6 +260,7 @@ "World", "audio {state}", "dB", + "feed status|live", "ft", "hPa", "installation class|BASE", From 7a18e0093b78127eb5afe7c82c98baa30e843697 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 17:08:36 +0400 Subject: [PATCH 09/20] i18n(uk): apply review round 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix meaning errors flagged by the three-model review: downed aircraft (Аварія літака), fast jet, the straight-ahead lane, road traffic, pilot vessel, nearby contact counts, the low-accuracy score. - Terms: CRS/TRK → ШК (шляховий кут), ascent → виведення, booster flight → ПОЛІТ, session → сеанс, sequence → послідовність, place search → пошук місця, CCTV pitch → нахил, mapped sites → нанесені обʼєкти everywhere; glossary updated. - Grammar: case agreement in the radio aria label and the key-store message, «прицілу», у/в euphony, payload count after a colon, FIRES as ПОЖ. so any count reads correctly. - The cockpit current-style button widens to fit ЗВИЧАЙНИЙ; other languages keep the 58px minimum. Co-Authored-By: Claude Opus 5.5 --- docs/translations/uk.md | 95 ++++++++++-------- src/i18n/locales/uk.json | 204 +++++++++++++++++++------------------- src/ui/styles/cockpit.css | 3 +- 3 files changed, 155 insertions(+), 147 deletions(-) diff --git a/docs/translations/uk.md b/docs/translations/uk.md index cd90b7b01..765be0233 100644 --- a/docs/translations/uk.md +++ b/docs/translations/uk.md @@ -30,47 +30,54 @@ A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: ## Glossary -| English | Українська | -| ------------------------------------------ | ---------------------------------------------------- | -| layer / data layer | шар / шар даних | -| feed | потік даних (short: потік) | -| source / data source | джерело / джерело даних | -| LIVE (status) / live data | ОНЛАЙН / у реальному часі | -| SIMULATED / SYNTHETIC | ІМІТАЦІЯ | -| stale / degraded / unavailable | застарів / з перебоями (chip: ПЕРЕБОЇ) / недоступний | -| retry | повтор | -| key (API key) / POWER UP | ключ / ЗАПУСК | -| Provider Settings / provider | Налаштування постачальників / постачальник | -| globe / map / map source / basemap | глобус / карта / джерело карти / підкладка | -| aircraft / flight / military flights | літак (short HUD: борт) / рейс / військові рейси | -| vessel, ship / vessels | судно / судна (gen. pl. суден) | -| satellite | супутник | -| launch (rocket) / space mission | запуск / космічна місія | -| contact / tracking | контакт / стеження | -| installation, site / mapped | обʼєкт / нанесений на карту | -| camera / CCTV camera | камера / камера CCTV | -| earthquake / active fire / fire perimeter | землетрус / активна пожежа / контур пожежі | -| advisory (NHC/CPHC cyclone) | зведення | -| scene / shot / scene recipe | сцена / кадр / рецепт сцени | -| briefing / panel / dock | брифінг / панель / док | -| preset / visual preset | пресет / візуальний пресет | -| Scope (circular viewport mask) | приціл | -| overlay (detection overlay) | накладка | -| heading / altitude / ground speed | курс / висота / шляхова швидкість | -| HDG / BRG / CRS / FOV / DEST / SPD / RANGE | КУРС / ПЕЛ. / ШЛЯХ / ОГЛЯД / ПРИЗН. / ШВИД / ДАЛЬН. | -| Street View (Google) | Перегляд вулиць (as in Ukrainian Google Maps) | -| Street Level (layer) | Вуличні знімки | -| imagery / recent imagery | знімки / свіжі знімки | -| radar reflectivity / lightning density | радіолокаційна відбивність / щільність блискавок | -| infrared | інфрачервоний (short: ІЧ) | -| receiver / gain / decoder | приймач / підсилення / декодер | -| broadcaster | мовник | -| CONUS, WHOT/BHOT, Ironbow, CRT, NVG, FLIR | без перекладу | -| PREV / NEXT (HUD) / Previous / Next | ПОПЕР. / ДАЛІ / Попередній / Наступний | -| anchor / data pack / bundle (scene) | якір / пакет даних / архів | -| box (Recent Imagery area) | область | -| camera move | переліт | -| SIG / NEWS / LOCAL (briefing tabs) | СИГН. / НОВИНИ / МІСЦ. | -| compass points (N, NNE, NE, …) | Пн, ПнПнСх, ПнСх, … | -| L / R (relative bearing) | Л / П | -| click / tap | клацнути / натиснути | +| English | Українська | +| ----------------------------------------------- | ---------------------------------------------------------------- | +| layer / data layer | шар / шар даних | +| feed | потік даних (short: потік) | +| source / data source | джерело / джерело даних | +| LIVE (status) / live data | ОНЛАЙН / у реальному часі | +| SIMULATED / SYNTHETIC | ІМІТАЦІЯ | +| stale / degraded / unavailable | застарів / з перебоями (chip: ПЕРЕБОЇ) / недоступний | +| retry | повтор | +| key (API key) / POWER UP | ключ / ЗАПУСК | +| Provider Settings / provider | Налаштування постачальників / постачальник | +| globe / map / map source / basemap | глобус / карта / джерело карти / підкладка | +| aircraft / flight / military flights | літак (short HUD: борт) / рейс / військові рейси | +| vessel, ship / vessels | судно / судна (gen. pl. суден) | +| satellite | супутник | +| launch (rocket) / space mission | запуск / космічна місія | +| ascent (rocket) / booster FLIGHT {n} | виведення / ПОЛІТ {n} (not рейс) | +| contact / tracking | контакт / стеження | +| installation, site / mapped | обʼєкт / нанесений на карту | +| camera / CCTV camera | камера / камера CCTV | +| earthquake / active fire / fire perimeter | землетрус / активна пожежа / контур пожежі | +| advisory (NHC/CPHC cyclone) | зведення | +| scene / shot / scene recipe | сцена / кадр / рецепт сцени | +| briefing / panel / dock | брифінг / панель / док | +| preset / visual preset | пресет / візуальний пресет | +| Scope (circular viewport mask) | приціл | +| overlay (detection overlay) | накладка | +| heading / altitude / ground speed | курс / висота / шляхова швидкість | +| HDG / BRG / CRS, TRK / FOV / DEST / SPD / RANGE | КУРС / ПЕЛ. / ШК (шляховий кут) / ОГЛЯД / ПРИЗН. / ШВИД / ДАЛЬН. | +| Street View (Google) | Перегляд вулиць (as in Ukrainian Google Maps) | +| Street Level (layer) | Вуличні знімки | +| imagery / recent imagery | знімки / свіжі знімки | +| radar reflectivity / lightning density | радіолокаційна відбивність / щільність блискавок | +| infrared | інфрачервоний (short: ІЧ) | +| receiver / gain / decoder | приймач / підсилення / декодер | +| broadcaster | мовник | +| CONUS, WHOT/BHOT, Ironbow, CRT, NVG, FLIR | без перекладу | +| PREV / NEXT (HUD) / Previous / Next | ПОПЕР. / ДАЛІ / Попередній / Наступний | +| anchor / data pack / bundle (scene) | якір / пакет даних / архів | +| box (Recent Imagery area) | область | +| camera move | переліт | +| SIG / NEWS / LOCAL (briefing tabs) | СИГН. / НОВИНИ / МІСЦ. | +| compass points (N, NNE, NE, …) | Пн, ПнПнСх, ПнСх, … | +| L / R (relative bearing) | Л / П | +| click / tap | клацнути / натиснути | +| session (voice, OAuth) | сеанс | +| sequence (street-level photos) | послідовність | +| search (place search) | пошук місця | +| pitch (CCTV camera pose) | нахил | +| traffic (road traffic layer) | дорожній рух | +| phosphor (CRT) | люмінофор | diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index bc98109cf..6467d0996 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -38,13 +38,13 @@ "Widebody": "Широкофюзеляжний літак", "Four-engine jet": "Чотиримоторний реактивний літак", "Helicopter": "Гелікоптер", - "Fast jet": "Високоманеврений літак", + "Fast jet": "Швидкісний реактивний літак", "Business jet": "Бізнес-джет", "Drone": "Безпілотник", "General emergency": "Загальна аварійна ситуація", "Unlawful interference": "Незаконне втручання", "Radio failure": "Відмова радіозвʼязку", - "Downed aircraft": "Вимушена посадка", + "Downed aircraft": "Аварія літака", "Minimum fuel": "Мінімальний залишок пального", "Lifeguard (medical priority)": "Санітарний рейс (медичний пріоритет)", "Rasuwagadhi witness video": "Відео очевидця в Rasuwagadhi", @@ -255,7 +255,7 @@ "Mapped sites loaded": "Нанесені обʼєкти завантажено", "Military airfield": "Військовий аеродром", "Naval base": "Військово-морська база", - "Firing range": "Стрільбище", + "Firing range": "Полігон", "Military land": "Військова територія", "Mapped installation": "Обʼєкт на карті", "Military area": "Військова зона", @@ -270,7 +270,7 @@ "Directions": "Маршрути", "Recent imagery": "Свіжі знімки", "STATION": "СТАНЦІЇ", - "Crewed stations and their visiting vehicles": "Пілотовані станції та кораблі відвідування", + "Crewed stations and their visiting vehicles": "Пілотовані станції та кораблі, що їх відвідують", "NAV": "НАВ", "GNSS navigation — GPS, GLONASS, Galileo": "Навігація GNSS — GPS, GLONASS, Galileo", "GEO": "ГЕО", @@ -286,7 +286,7 @@ "MILITARY": "ВІЙСЬКОВЕ", "SAILING": "ВІТРИЛЬНЕ", "PLEASURE": "ПРОГУЛКОВЕ", - "PILOT": "ЛОЦМАН", + "PILOT": "ЛОЦМАНСЬКЕ", "SAR": "РЯТУВАЛЬНЕ", "TUG": "БУКСИР", "PORT TENDER": "ПОРТОВИЙ КАТЕР", @@ -391,8 +391,8 @@ "VOICE AUTH · API KEY": "ГОЛОС: КЛЮЧ API", "USE API KEY": "ВИКОРИСТАТИ КЛЮЧ API", "USE CHATGPT OAUTH": "ВИКОРИСТАТИ CHATGPT OAUTH", - "Use OPENAI_API_KEY for the next cloud voice session": "Використати OPENAI_API_KEY для наступної хмарної голосової сесії", - "Use the signed-in local ChatGPT/Codex OAuth session for the next cloud voice session": "Використати локальну OAuth-сесію ChatGPT/Codex, у яку виконано вхід, для наступної хмарної голосової сесії", + "Use OPENAI_API_KEY for the next cloud voice session": "Використати OPENAI_API_KEY для наступного хмарного голосового сеансу", + "Use the signed-in local ChatGPT/Codex OAuth session for the next cloud voice session": "Використати локальний OAuth-сеанс ChatGPT/Codex, у який виконано вхід, для наступного хмарного голосового сеансу", "Metered — a billing-enabled account": "Платний — потрібен обліковий запис з увімкненою оплатою", "Optional paid token — public access works without one": "Необовʼязковий платний токен — публічний доступ працює без нього", "Free key — register, paste, done": "Безкоштовний ключ — зареєструйтеся, вставте, готово", @@ -413,8 +413,8 @@ "Saving…": "Збереження…", "Save failed: {detail}": "Не вдалося зберегти: {detail}", "Paste at least one key first.": "Спочатку вставте принаймні один ключ.", - "Saved to {store}. Restarting — this page reloads itself.": "Збережено в {store}. Перезапуск — сторінка перезавантажиться сама.", - "Cloud voice will use OPENAI_API_KEY on the next session.": "Наступна хмарна голосова сесія використовуватиме OPENAI_API_KEY.", + "Saved to {store}. Restarting — this page reloads itself.": "Збережено до {store}. Перезапуск — сторінка перезавантажиться сама.", + "Cloud voice will use OPENAI_API_KEY on the next session.": "Наступний хмарний голосовий сеанс використовуватиме OPENAI_API_KEY.", "Checking local ChatGPT OAuth sign-in…": "Перевірка локального входу в ChatGPT через OAuth…", "Could not check ChatGPT sign-in.": "Не вдалося перевірити вхід у ChatGPT.", "ChatGPT OAuth selected for cloud voice. Your API key stays saved and available.": "Для хмарного голосу вибрано ChatGPT OAuth. Ваш ключ API залишається збереженим і доступним.", @@ -423,7 +423,7 @@ "Could not start ChatGPT sign-in on this machine.": "Не вдалося почати вхід у ChatGPT на цьому компʼютері.", "Finish ChatGPT sign-in in the browser. Waiting for it to complete…": "Завершіть вхід у ChatGPT у браузері. Очікування завершення…", "ChatGPT sign-in timed out. Click {button} to try again.": "Час на вхід у ChatGPT минув. Натисніть «{button}», щоб спробувати ще раз.", - "ChatGPT sign-in complete. OAuth will be used for the next cloud voice session.": "Вхід у ChatGPT виконано. У наступній хмарній голосовій сесії використовуватиметься OAuth.", + "ChatGPT sign-in complete. OAuth will be used for the next cloud voice session.": "Вхід у ChatGPT виконано. У наступному хмарному голосовому сеансі використовуватиметься OAuth.", "Remove this key from your saved configuration?": "Видалити цей ключ із вашої збереженої конфігурації?", "Removed from {store}. Restarting — this page reloads itself.": "Видалено з {store}. Перезапуск — сторінка перезавантажиться сама.", "The photorealistic 3D planet, place search + Street View": "Фотореалістична 3D-планета, пошук місць + Перегляд вулиць", @@ -432,7 +432,7 @@ "Gemini Live voice control": "Голосове керування через Gemini Live", "Live ships, worldwide": "Судна в реальному часі по всьому світу", "Live active-fire detections": "Виявлення активних пожеж у реальному часі", - "Real live traffic (keyless runs a simulation)": "Справжні затори в реальному часі (без ключа — імітація)", + "Real live traffic (keyless runs a simulation)": "Дорожній рух у реальному часі (без ключа — імітація)", "Bing imagery map stacks + world terrain": "Знімки Bing + рельєф світу", "More flight-polling credits (anonymous works without)": "Вищий ліміт запитів рейсів (анонімно працює й без ключа)", "Street-level imagery and coverage in the Street Level layer. Free: register an app in the Mapillary developer dashboard and paste its Client Token": "Вуличні знімки й покриття в шарі «Вуличні знімки». Безкоштовно: зареєструйте застосунок у панелі розробника Mapillary і вставте його клієнтський токен (Client Token)", @@ -515,7 +515,7 @@ "HDG {value}°": "КУРС {value}°", "BRG {value}°": "ПЕЛ. {value}°", "BRG —": "ПЕЛ. —", - "CRS {value}°": "ШЛЯХ {value}°", + "CRS {value}°": "ШК {value}°", "CURRENT VIEWPORT ONLY": "ЛИШЕ ПОТОЧНА ОБЛАСТЬ ОГЛЯДУ", "WITHIN {km} KM": "У РАДІУСІ {km} КМ", "Flights": "Рейси", @@ -559,7 +559,7 @@ "Subtropical storm": "Субтропічний шторм", "Subtropical depression": "Субтропічна депресія", "Track and cone match this advisory": "Трек і конус відповідають цьому зведенню", - "Track/cone awaiting advisory {number}": "Трек і конус зʼявляться зі зведенням № {number}", + "Track/cone awaiting advisory {number}": "Очікуються трек і конус для зведення № {number}", "Track/cone unavailable": "Трек/конус недоступні", "Cached advisory · stale source": "Зведення з кешу · джерело застаріло", "Loading advisories…": "Завантаження зведень…", @@ -582,7 +582,7 @@ "Wind unavailable": "Вітер: немає даних", "Advisory center / forecast track": "Центр циклону за зведенням / прогнозний трек", "Center-track uncertainty cone": "Конус невизначеності треку центру", - "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Виберіть шторм на карті або в списку, щоб виділити його й перемістити до нього камеру. Клацніть на порожньому місці карти, щоб зняти виділення. Контекст зведень NOAA NHC/CPHC. Конус описує невизначеність прогнозного треку центру, а не розмір шторму чи всю зону небезпеки. Підписи прогнозних точок — завчасність джерела в годинах, а не час, розрахований від випуску зведення. Геометрія повторює поверхню; висота не відображає висоту погодних явищ. Звіряйтеся з офіційним зведенням.", + "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Виберіть шторм на карті або в списку, щоб виділити його й перемістити до нього камеру. Клацніть на порожньому місці карти, щоб зняти виділення. Контекст зведень NOAA NHC/CPHC. Конус описує невизначеність прогнозного треку центру, а не розмір шторму чи всю зону небезпеки. Підписи прогнозних точок показують завчасність прогнозу в годинах за даними джерела, а не час, розрахований від випуску зведення. Геометрія повторює поверхню; висота не відображає висоту погодних явищ. Звіряйтеся з офіційним зведенням.", "DRIVE": "АВТО", "Drive": "Автомобілем", "WALK": "ПІШКИ", @@ -618,7 +618,7 @@ "lane direction|slightly right": "праву", "lane direction|sharply left": "крайню ліву", "lane direction|sharply right": "крайню праву", - "lane direction|straight": "середню", + "lane direction|straight": "призначену для руху прямо", "ordinal|{number}st": "{number}-й", "ordinal|{number}nd": "{number}-й", "ordinal|{number}rd": "{number}-й", @@ -710,7 +710,7 @@ "Then: {instruction}": "Потім: {instruction}", "No route found between A and B": "Маршрут між A і B не знайдено", "Routing failed: {error}": "Не вдалося побудувати маршрут: {error}", - "Routing timed out": "Минув час побудови маршруту", + "Routing timed out": "Минув час очікування маршруту", "Routing unavailable — no response from the routing service": "Побудова маршруту недоступна — сервіс маршрутизації не відповідає", "Earthquake source unavailable": "Джерело даних про землетруси недоступне", "Focus fire detection {title}, {details}": "Фокус на виявленні пожежі {title}, {details}", @@ -722,9 +722,9 @@ "NIGHT": "НІЧ", "▲ {frp} MW": "▲ {frp} МВт", "FIRE": "ПОЖЕЖА", - "FIRES": "ПОЖЕЖІ", + "FIRES": "ПОЖ.", "max {value} MW": "макс. {value} МВт", - "new {value}": "нова {value}", + "new {value}": "останнє: {value} тому", "{value}°N": "{value}° пн. ш.", "{value}°S": "{value}° пд. ш.", "{value}°E": "{value}° сх. д.", @@ -746,11 +746,11 @@ "LIVE · updated {age}": "ОНЛАЙН · оновлено {age}", "Source snapshot time unavailable": "Час знімка джерела невідомий", "Live data unavailable": "Дані в реальному часі недоступні", - "Intel Picture": "Розвідкартина", - "Kinetic 30d": "Бойові 30 дн", + "Intel Picture": "Розвідувальна обстановка", + "Kinetic 30d": "Бойові дії, 30 дн", "Border Crisis": "Криза на кордоні", - "Iran Picture": "Іран: картина", - "Iran Kinetic": "Іран: бойові", + "Iran Picture": "Іран: обстановка", + "Iran Kinetic": "Іран: бойові дії", "Yemen FLOT": "Ємен: лінія фронту", "Latest Drop": "Новий випуск", "GhostMaps file could not be read": "Не вдалося прочитати файл GhostMaps", @@ -775,15 +775,15 @@ }, "S2 Underground publishes these KMZ products to GitHub. New uploads are detected within seconds and replace the previous edition automatically. Click a marker for its report.": "S2 Underground публікує ці продукти KMZ на GitHub. Нові файли виявляються за лічені секунди й автоматично замінюють попередній випуск. Клацніть мітку, щоб відкрити її зведення.", "Malformed GhostMaps catalog": "Пошкоджений каталог GhostMaps", - "Low-accuracy score < 2%": "Частка неточних < 2%", - "Low-accuracy score 2–10%": "Частка неточних 2–10%", - "Low-accuracy score > 10%": "Частка неточних > 10%", + "Low-accuracy score < 2%": "Показник неточності < 2%", + "Low-accuracy score 2–10%": "Показник неточності 2–10%", + "Low-accuracy score > 10%": "Показник неточності > 10%", "GNSS integrity source unavailable": "Джерело цілісності GNSS недоступне", - "Regional sample · 250 nm radius · cells from visited views over 30 min": "Регіональна вибірка · радіус 250 мор. миль · комірки з переглянутих видів за 30 хв", + "Regional sample · 250 nm radius · cells from visited views over 30 min": "Регіональна вибірка · радіус 250 мор. миль · комірки з переглянутих ділянок карти за 30 хв", "Retrying automatically at {time} UTC": "Автоматичний повтор о {time} UTC", "Retrying automatically after provider cooldown": "Автоматичний повтор після паузи постачальника", "Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Оновлюється автоматично після зсуву чи масштабування карти та раз на хвилину. Публічний потік даних охоплює коло радіусом 250 морських миль навколо центру вигляду; у разі віддалення карта не стає знімком усього світу. Порожні комірки — поза охопленням вибірки або з недостатньою кількістю спостережень.", - "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Частка неточних = 100 × max(0, неточні − 1) / усього: один літак не враховується, тож це не пряма частка. Для комірки потрібно літаків: {aircraft} за {minutes} хв. Аномалії цілісності навігації — не виявлення глушіння чи підміни сигналу.", + "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Показник неточності = 100 × max(0, неточні − 1) / усього: один літак не враховується, тож це не пряма частка неточних літаків. Для комірки потрібно літаків: {aircraft} за {minutes} хв. Аномалії цілісності навігації не означають виявлення глушіння чи підміни сигналу.", "GNSS snapshot needs a view anchor": "Для знімка GNSS потрібна опорна точка вигляду", "GNSS feed rate limited (HTTP 429)": "Потік GNSS: перевищено ліміт запитів (HTTP 429)", "Malformed GNSS integrity snapshot": "Некоректний знімок цілісності GNSS", @@ -821,17 +821,17 @@ "T−{time} · {mission}": "T−{time} · {mission}", "LAUNCH STANDBY": "ГОТОВНІСТЬ ДО ЗАПУСКУ", "LIFTOFF · {mission}": "СТАРТ · {mission}", - "ASCENT REPLAY · {mission}": "ПОВТОР ЗЛЬОТУ · {mission}", - "ASCENT ESTIMATE · {mission}": "РОЗРАХУНКОВИЙ ЗЛІТ · {mission}", + "ASCENT REPLAY · {mission}": "ПОВТОР ВИВЕДЕННЯ · {mission}", + "ASCENT ESTIMATE · {mission}": "РОЗРАХУНКОВЕ ВИВЕДЕННЯ · {mission}", "STAGE RE-ENTRY / RECOVERY · {mission}": "ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ · {mission}", "ORBIT REPLAY · {mission}": "ПОВТОР ОРБІТИ · {mission}", "PAUSED · {title}": "ПАУЗА · {title}", "UNSPECIFIED": "НЕ ВКАЗАНО", - "+{count} additional payload records": "+{count} додаткових записів корисного навантаження", + "+{count} additional payload records": "Додаткові записи корисного навантаження: +{count}", "PAYLOAD DATA UNAVAILABLE": "ДАНІ КОРИСНОГО НАВАНТАЖЕННЯ НЕДОСТУПНІ", "{value} KM DOWNRANGE": "{value} КМ УЗДОВЖ ТРАСИ", "POSITION UNAVAILABLE": "ПОЗИЦІЯ НЕДОСТУПНА", - "FLIGHT {count}": "РЕЙС {count}", + "FLIGHT {count}": "ПОЛІТ {count}", "REUSED": "ПОВТОРНО ВИКОРИСТАНИЙ", "NO STAGE RE-ENTRY / RECOVERY DATA": "НЕМАЄ ДАНИХ ПРО ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ", "{count} / 30D": "{count} / 30 ДН", @@ -863,7 +863,7 @@ "FINAL POSITION": "КІНЦЕВА ПОЗИЦІЯ", "REPLAY SPEED": "ШВИДКІСТЬ ПОВТОРУ", "Replay speed multiplier": "Множник швидкості повтору", - "REPLAY ASCENT": "ПОВТОР ЗЛЬОТУ", + "REPLAY ASCENT": "ПОВТОР ВИВЕДЕННЯ", "Previous mission": "Попередня місія", "PREV": "ПОПЕР.", "Next mission": "Наступна місія", @@ -874,12 +874,12 @@ "PLANNED · ": "ПЛАН · ", "SUPPLIED TRAJECTORY POINTS": "НАДАНІ ТОЧКИ ТРАЄКТОРІЇ", "RECONSTRUCTED ESTIMATE": "ВІДТВОРЕНА ОЦІНКА", - "Replay the estimated ascent with a following camera": "Відтворити розрахунковий зліт із камерою-супроводом", + "Replay the estimated ascent with a following camera": "Відтворити розрахункове виведення з камерою супроводу", "Resume replay": "Продовжити повтор", "T minus {seconds}": "T мінус {seconds}", "Preparing launch site": "Підготовка місця запуску", "Liftoff": "Старт", - "Ascent replay": "Повтор зльоту", + "Ascent replay": "Повтор виведення", "Orbit replay": "Повтор орбіти", ", paused": ", пауза", "Malformed launch snapshot": "Некоректний знімок запусків", @@ -892,7 +892,7 @@ "Your decoder feed": "Ваш потік декодера", "Your RTL-SDR receiver": "Ваш приймач RTL-SDR", "NO CALLSIGN": "БЕЗ ПОЗИВНОГО", - "ALT {altitude} FT · GS {speed} KT · TRK {track}": "ВИС. {altitude} ФТ · ШЛЯХ. ШВ. {speed} ВУЗ · ШЛЯХ {track}", + "ALT {altitude} FT · GS {speed} KT · TRK {track}": "ВИС. {altitude} ФТ · ШЛЯХ. ШВ. {speed} ВУЗ · ШК {track}", "V/S {rate}": "ВЕРТ. ШВ. {rate}", "V/S {rate} FPM": "ВЕРТ. ШВ. {rate} ФТ/ХВ", "POSITION {age}": "ПОЗИЦІЯ {age}", @@ -959,7 +959,7 @@ "50–99% contained": "Локалізовано на 50–99%", "Fully contained": "Повністю локалізовано", "Colour shows reported containment. Perimeters are simplified to about 100 m.": "Колір показує заявлений ступінь локалізації. Контури спрощено приблизно до 100 м.", - "Malformed perimeter snapshot": "Некоректний знімок периметрів", + "Malformed perimeter snapshot": "Некоректний знімок контурів пожеж", "radio tag|All": "Усі", "News": "Новини", "Talk": "Розмовні", @@ -982,7 +982,7 @@ "radio|MUSIC": "МУЗИКА", "radio|OTHER": "ІНШЕ", "Broadcaster stream is unavailable or blocked by the browser.": "Потік мовника недоступний або заблокований браузером.", - "Playback requires a direct click or tap.": "Щоб почати відтворення, натисніть кнопку відтворення.", + "Playback requires a direct click or tap.": "Для відтворення потрібне безпосереднє натискання.", "Broadcaster stream could not be started.": "Не вдалося запустити потік мовника.", "Alternative": "Альтернатива", "Ambient": "Ембієнт", @@ -1055,10 +1055,10 @@ "Point the camera at the ground for street-level coverage": "Спрямуйте камеру на землю, щоб побачити покриття вуличних знімків", "Coverage tile failed": "Не вдалося завантажити тайл покриття", "The photo could not be loaded": "Не вдалося завантажити фото", - "{name} photo. ← and → step along the sequence. On a 360° photo, drag or use Shift+← →, ↑ ↓ to look around, and + − to zoom": "Фото {name}. ← і → гортають зйомку. На 360°-фото перетягуйте або використовуйте Shift+← →, ↑ ↓ для огляду, + − для масштабу", + "{name} photo. ← and → step along the sequence. On a 360° photo, drag or use Shift+← →, ↑ ↓ to look around, and + − to zoom": "Фото {name}. ← і → гортають послідовність. На 360°-фото перетягуйте або використовуйте Shift+← →, ↑ ↓ для огляду, + − для масштабу", "{name} street-level photo": "Вуличне фото {name}", - "Previous photo in this sequence (←)": "Попереднє фото зйомки (←)", - "Next photo in this sequence (→)": "Наступне фото зйомки (→)", + "Previous photo in this sequence (←)": "Попереднє фото послідовності (←)", + "Next photo in this sequence (→)": "Наступне фото послідовності (→)", "Aim the middle of the view at a street to look for imagery there": "Наведіть центр вигляду на вулицю, щоб пошукати там знімки", "KEY REJECTED": "КЛЮЧ ВІДХИЛЕНО", "GOOGLE_MAPS_API_KEY is not set": "GOOGLE_MAPS_API_KEY не задано", @@ -1279,7 +1279,7 @@ "{source} HTTP {status}": "{source}: HTTP {status}", "Wind": "Вітер", "Wind source unavailable": "Джерело вітру недоступне", - "Forecast · does not follow history": "Прогноз · не йде за історією", + "Forecast · does not follow history": "Прогноз · не синхронізується з історією", "Wind motion": "Рух вітру", "Wind speed": "Швидкість вітру", "Sea-level pressure": "Тиск на рівні моря", @@ -1303,9 +1303,9 @@ "Wind trails with no field shading": "Сліди вітру без заливки поля", "How hard the surface wind is blowing": "Наскільки сильно дме приземний вітер", "Sea-level air pressure: broad highs and lows": "Тиск на рівні моря: великі області високого й низького тиску", - "Air temperature two meters above the surface": "Температура повітря за два метри над поверхнею", + "Air temperature two meters above the surface": "Температура повітря на висоті двох метрів над поверхнею", "Wind speed units": "Одиниці швидкості вітру", - "Read wind at map center": "Дізнатися вітер у центрі карти", + "Read wind at map center": "Показати вітер у центрі карти", "Read the forecast at the center of the map without changing selection": "Отримати прогноз у центрі карти, не змінюючи вибору", "{model} forecast · {field} ({unit})": "Прогноз {model} · {field} ({unit})", "Valid: {time}": "Чинний на: {time}", @@ -1426,14 +1426,14 @@ "Select a feature or use Tab and Enter to choose an action.": "Виберіть обʼєкт на карті або скористайтеся Tab і Enter, щоб вибрати дію.", "Selected feature: {feature}. Choose an action.": "Вибрано обʼєкт: {feature}. Виберіть дію.", "Running {index}/{total}: {scene} / {shot}": "Виконання {index}/{total}: {scene} / {shot}", - "Scene run complete": "Запуск сцени завершено", + "Scene run complete": "Відтворення сцени завершено", "Bhote Koshi Evidence Sequence": "Послідовність свідчень: Bhote Koshi", "Nepal Flood Incident": "Паводок у Непалі", "Global Flights Radar": "Глобальний радар польотів", "Orbital Watch": "Орбітальний нагляд", "Thermal Threat Board": "Панель теплових загроз", "City Overload": "Міське перевантаження", - "Omniscience Pullback": "Всевидючий відʼїзд", + "Omniscience Pullback": "Всевидющий відʼїзд", "Global Incident Context": "Глобальний контекст події", "Nepal-Focused Globe Rotation": "Поворот глобуса до Непалу", "Bhote Koshi Regional Approach": "Підліт до регіону Bhote Koshi", @@ -1578,7 +1578,7 @@ "North up": "Північ угорі", "CCTV calibration saved": "Калібрування CCTV збережено", "HDG": "КУРС", - "PITCH": "ТАНГАЖ", + "PITCH": "НАХИЛ", "FOV": "ОГЛЯД", "RANGE": "ДАЛЬН.", "HGT": "ВИС.", @@ -1609,7 +1609,7 @@ "No source configured": "Джерело не налаштовано", "Configured source": "Налаштоване джерело", "Configured Source": "Налаштоване джерело", - "Synthetic fallback": "Синтетичний резерв", + "Synthetic fallback": "Резервна імітація", "Upstream HTTP {status}": "Джерело: HTTP {status}", "Unexpected media type {type}": "Неочікуваний тип медіа: {type}", "SOURCE · UNKNOWN": "ДЖЕРЕЛО · НЕВІДОМЕ", @@ -1644,7 +1644,7 @@ "many": "{count} камер завантажено · увімкніть CCTV, щоб активувати", "other": "{count} камери завантажено · увімкніть CCTV, щоб активувати" }, - "Enable CCTV to load camera intersections": "Увімкніть CCTV, щоб завантажити перехрестя камер", + "Enable CCTV to load camera intersections": "Увімкніть CCTV, щоб завантажити камери на перехрестях", "Enable CCTV to start camera-linked intelligence summaries.": "Увімкніть CCTV, щоб почати зведення розвідки за камерами.", "No summary available.": "Зведення недоступне.", "loading frames": "завантаження кадрів", @@ -1659,7 +1659,7 @@ "DRIZZLE": "МЖИЧКА", "RAIN": "ДОЩ", "RAIN SHOWERS": "ЗЛИВИ", - "SNOW SHOWERS": "СНІЖНІ ЗЛИВИ", + "SNOW SHOWERS": "ЗЛИВОВИЙ СНІГ", "THUNDERSTORM": "ГРОЗА", "MIXED CONDITIONS": "ЗМІШАНІ УМОВИ", "CYCLE ON": "ЦИКЛ УВІМКНЕНО", @@ -1683,7 +1683,7 @@ "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "УВІМКНІТЬ ГЛОБАЛЬНИЙ КОНТЕКСТ ДЛЯ ПІНГІВ БЛИЗЬКОСТІ", "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "КОНТАКТ ВТРАЧЕНО · ОСТАННІ ВІДОМІ ПОКАЗНИКИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "CONTACT LOST · {subject}": "КОНТАКТ ВТРАЧЕНО · {subject}", - "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "ОБʼЄКТ ЗНИК ІЗ ПОТОКУ · ПОКАЗНИКИ ОСТАННІ ВІДОМІ", + "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "ОБʼЄКТ ЗНИК ІЗ ПОТОКУ · ПОКАЗАНО ОСТАННІ ВІДОМІ ДАНІ", "{cohort} · {contact}": "{cohort} · {contact}", "NO AVAILABLE EXAMPLE": "НЕМАЄ ДОСТУПНОГО ПРИКЛАДУ", "{cohort}, Unavailable": "{cohort}, недоступно", @@ -1735,7 +1735,7 @@ "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "ПОДІЇ ПІДТВЕРДЖЕНІ ДЖЕРЕЛАМИ · БЕЗ ШТУЧНИХ НОВИН", "LATEST LOCATION-MATCHED REPORTING": "ОСТАННІ ПУБЛІКАЦІЇ ЗА РОЗТАШУВАННЯМ", "{source} · LOCATION QUERY · RECENT": "{source} · ЗАПИТ ЗА МІСЦЕМ · НЕЩОДАВНІ", - "LOCAL INFO": "МІСЦЕВА ІНФОРМАЦІЯ", + "LOCAL INFO": "МІСЦЕВІ ДАНІ", "PLACE / CONDITIONS / POSITION": "МІСЦЕ / УМОВИ / ПОЗИЦІЯ", "TIME UNKNOWN": "ЧАС НЕВІДОМИЙ", "{count}M AGO": "{count} ХВ ТОМУ", @@ -1826,10 +1826,10 @@ "Earthquakes (24h)": "Землетруси (24 год)", "Satellites": "Супутники", "Space Missions (30d)": "Космічні місії (30 дн)", - "Street Traffic": "Вуличний рух", + "Street Traffic": "Дорожній рух", "CCTV": "CCTV", "Radio": "Радіо", - "Bikeshare": "Велопрокат", + "Bikeshare": "Прокат велосипедів", "Live AIS Vessels": "Судна AIS онлайн", "Mapped Installations": "Нанесені обʼєкти", "Global Context": "Глобальний контекст", @@ -1940,8 +1940,8 @@ "📍 Location: --": "📍 Розташування: --", "Landmark: --": "Орієнтир: --", "Searched location": "Знайдене розташування", - "ORBIT": "ОРБІТА", - "Location not found": "Розташування не знайдено", + "ORBIT": "ОБЛІТ", + "Location not found": "Місце не знайдено", "Check the spelling and press Enter to search again.": "Перевірте написання й натисніть Enter, щоб повторити пошук.", "Search failed": "Пошук не вдався", "Press Enter to try again.": "Натисніть Enter, щоб спробувати знову.", @@ -2000,7 +2000,7 @@ "Enable Radio": "Увімкнути радіо", "{category} ({count})": "{category} ({count})", "DIRECTORY BAND": "ДІАПАЗОН КАТАЛОГУ", - "{category} BAND": "{category} ДІАПАЗОН", + "{category} BAND": "ДІАПАЗОН: {category}", "NO STATION SELECTED": "СТАНЦІЮ НЕ ВИБРАНО", "Directory metadata only": "Лише метадані каталогу", "Loading station directory…": "Завантаження каталогу станцій…", @@ -2010,9 +2010,9 @@ "PAUSE": "ПАУЗА", "RESUME": "ПРОДОВЖ.", "PLAY": "ВІДТВОРИТИ", - "selected": "вибрану", - "nearest": "найближчу", - "{action} {target} radio station": "{action} {target} радіостанцію", + "selected": "вибрана", + "nearest": "найближча", + "{action} {target} radio station": "{action}: {target} радіостанція", "RADIO STATE UNCERTAIN": "СТАН РАДІО НЕВИЗНАЧЕНИЙ", "SYNCING DIRECTORY": "СИНХРОНІЗАЦІЯ КАТАЛОГУ", "RADIO READY": "РАДІО ГОТОВЕ", @@ -2030,8 +2030,8 @@ "Playing {station}": "Відтворюється: {station}", "Paused {station}": "Пауза: {station}", "Broadcaster stream unavailable": "Потік мовника недоступний", - " · muted during voice interaction": " · приглушено під час голосової сесії", - " · restoring volume after voice": " · відновлення гучності після голосової сесії", + " · muted during voice interaction": " · приглушено під час голосового сеансу", + " · restoring volume after voice": " · відновлення гучності після голосового сеансу", " · static indicates no broadcaster audio": " · шум означає відсутність аудіо мовника", " · tuning static until broadcaster starts": " · шум налаштування, доки не почнеться мовлення", "Station unavailable after directory refresh — choose another channel": "Станція недоступна після оновлення каталогу — виберіть інший канал", @@ -2039,9 +2039,9 @@ "Radio is disabling…": "Радіо вимикається…", "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "Стан радіо невизначений — звірте через «Увімкнути» або «Вимкнути»", "Clear reading": "Очистити покази", - "Earlier observation": "Раніше спостереження", + "Earlier observation": "Попереднє спостереження", "Observed history": "Історія спостережень", - "Later observation": "Пізніше спостереження", + "Later observation": "Наступне спостереження", "Latest": "Останні", "Newest frame per product": "Найсвіжіший кадр кожного продукту", "Replay observed history": "Відтворити історію спостережень", @@ -2192,10 +2192,10 @@ "LOAD COMPLETE": "ЗАВАНТАЖЕННЯ ЗАВЕРШЕНО", "LOAD CANCELLED": "ЗАВАНТАЖЕННЯ СКАСОВАНО", "LOAD FAILED": "ПОМИЛКА ЗАВАНТАЖЕННЯ", - "LIVE DATA OFF": "ДАНІ У РЕАЛЬНОМУ ЧАСІ ВИМКНЕНО", - "MAPPED SITES LOADED": "МІСЦЯ НА КАРТІ ЗАВАНТАЖЕНО", - "RETRYING MAPPED SITES": "ПОВТОРНЕ ЗАВАНТАЖЕННЯ МІСЦЬ НА КАРТІ", - "FETCHING MAPPED SITES": "ЗАВАНТАЖЕННЯ МІСЦЬ НА КАРТІ", + "LIVE DATA OFF": "ДАНІ В РЕАЛЬНОМУ ЧАСІ ВИМКНЕНО", + "MAPPED SITES LOADED": "НАНЕСЕНІ ОБʼЄКТИ ЗАВАНТАЖЕНО", + "RETRYING MAPPED SITES": "ПОВТОРНЕ ЗАВАНТАЖЕННЯ НАНЕСЕНИХ ОБʼЄКТІВ", + "FETCHING MAPPED SITES": "ЗАВАНТАЖЕННЯ НАНЕСЕНИХ ОБʼЄКТІВ", "RETRYING ALPR CAMERAS": "ПОВТОРНЕ ЗАВАНТАЖЕННЯ КАМЕР ALPR", "FETCHING ALPR CAMERAS": "ЗАВАНТАЖЕННЯ КАМЕР ALPR", "OVERPASS TEMPORARILY UNAVAILABLE": "OVERPASS ТИМЧАСОВО НЕДОСТУПНИЙ", @@ -2319,10 +2319,10 @@ "other": "{n} вулиці в кадрі · клацніть лінію, щоб відкрити найближче фото" }, "{n} sequences in view · click a line for its nearest photo": { - "one": "{n} зйомка в кадрі · клацніть лінію, щоб відкрити найближче фото", - "few": "{n} зйомки в кадрі · клацніть лінію, щоб відкрити найближче фото", - "many": "{n} зйомок у кадрі · клацніть лінію, щоб відкрити найближче фото", - "other": "{n} зйомки в кадрі · клацніть лінію, щоб відкрити найближче фото" + "one": "{n} послідовність у кадрі · клацніть лінію, щоб відкрити найближче фото", + "few": "{n} послідовності в кадрі · клацніть лінію, щоб відкрити найближче фото", + "many": "{n} послідовностей у кадрі · клацніть лінію, щоб відкрити найближче фото", + "other": "{n} послідовності в кадрі · клацніть лінію, щоб відкрити найближче фото" }, "{n} sequences in view · click a line for its photos": { "one": "{n} послідовність у кадрі · клацніть лінію, щоб відкрити знімки", @@ -2344,7 +2344,7 @@ "s": "с", "dB": "дБ", "Celestial ring — reveal the full globe": "Небесне кільце — показати весь глобус", - "Celestial ring — available in Normal style": "Небесне кільце — доступне у стилі «Звичайний»", + "Celestial ring — available in Normal style": "Небесне кільце — доступне в стилі «Звичайний»", "Detection overlay: {mode}": "Накладка виявлення: {mode}", "Detection overlay: off": "Накладка виявлення: вимк.", "DETECT": "ВИЯВЛЕННЯ", @@ -2352,7 +2352,7 @@ "Active weather": "Активні погодні шари", "LATEST · newest per product": "ОСТАННІ · найсвіжіші для кожного продукту", "Forecast · valid {valid} · issued {issued}": "Прогноз · чинний на {valid} · випущено {issued}", - "{detail} · Does not follow history": "{detail} · не йде за історією", + "{detail} · Does not follow history": "{detail} · не синхронізується з історією", "Forecast · valid {valid}": "Прогноз · чинний на {valid}", "voice|OFF": "ВИМК.", "voice|CONNECTING": "ЗʼЄДНАННЯ", @@ -2363,9 +2363,9 @@ "Changing provider reconnects voice if it is on.": "Зміна постачальника перепідключає голосовий режим, якщо його ввімкнено.", "Voice Settings": "Налаштування голосу", "AI AGENT": "ШІ-АГЕНТ", - "Voice model tier — applies next session": "Рівень голосової моделі — застосовується з наступної сесії", + "Voice model tier — applies next session": "Рівень голосової моделі — застосовується з наступного сеансу", "STD": "СТД", - "Estimated session cost": "Орієнтовна вартість сесії", + "Estimated session cost": "Орієнтовна вартість сеансу", "Voice control — activate to toggle voice; hold Space to speak": "Голосове керування — активуйте, щоб увімкнути або вимкнути голос; утримуйте Space, щоб говорити", "ON/OFF": "ПЕРЕМК.", "VOICE STANDBY": "ГОЛОС ОЧІКУЄ", @@ -2452,21 +2452,21 @@ "WebRTC microphone support unavailable": "Підтримка мікрофона WebRTC недоступна", "VOICE UNAVAILABLE": "ГОЛОС НЕДОСТУПНИЙ", "VOICE ACTIVE": "ГОЛОС АКТИВНИЙ", - "Voice session could not be started.": "Не вдалося запустити голосову сесію.", + "Voice session could not be started.": "Не вдалося запустити голосовий сеанс.", "MINI": "МІНІ", - "Next session: {pendingId} — this session stays on {modelId}": "Наступна сесія: {pendingId} — поточна залишається на {modelId}", - "Voice model: {pendingId} — click to switch to {target}; applies next session": "Голосова модель: {pendingId} — натисніть, щоб перейти на {target}; застосовується з наступної сесії", + "Next session: {pendingId} — this session stays on {modelId}": "Наступний сеанс: {pendingId} — поточний залишається на {modelId}", + "Voice model: {pendingId} — click to switch to {target}; applies next session": "Голосова модель: {pendingId} — натисніть, щоб перейти на {target}; застосовується з наступного сеансу", "standard": "стандартну", "mini": "міні", "COST UNKNOWN": "ВАРТІСТЬ НЕВІДОМА", - "ChatGPT OAuth session: {responses} response(s), {input} input and {output} output tokens, {captions} caption transcription(s) reported.": "Сесія ChatGPT OAuth: відповідей — {responses}, вхідних токенів — {input}, вихідних токенів — {output}, транскрипцій субтитрів — {captions}.", + "ChatGPT OAuth session: {responses} response(s), {input} input and {output} output tokens, {captions} caption transcription(s) reported.": "Сеанс ChatGPT OAuth: відповідей — {responses}, вхідних токенів — {input}, вихідних токенів — {output}, транскрипцій субтитрів — {captions}.", "USD cost and the API spend cap are unavailable for this auth mode.": "Вартість у USD і ліміт витрат API недоступні в цьому режимі авторизації.", - "Usage is incomplete because a response was still in flight when the session ended.": "Дані про використання неповні: на момент завершення сесії одну з відповідей ще не було отримано.", - "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Орієнтовна вартість сесії на {modelId} — відповідей: {responses}. Попереджає при {warn}, завершує сесію при {cap}.", - "Estimate is incomplete — a response was still in flight when the session ended, so its usage was never reported.": "Оцінка неповна: на момент завершення сесії одну з відповідей ще не було отримано, тому її використання не враховано.", + "Usage is incomplete because a response was still in flight when the session ended.": "Дані про використання неповні: на момент завершення сеансу одну з відповідей ще не було отримано.", + "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Орієнтовна вартість сеансу на {modelId} — відповідей: {responses}. Попереджає при {warn}, завершує сеанс при {cap}.", + "Estimate is incomplete — a response was still in flight when the session ended, so its usage was never reported.": "Оцінка неповна: на момент завершення сеансу одну з відповідей ще не було отримано, тому її використання не враховано.", "STANDARD": "СТАНДАРТ", - "{tier} applies next session": "{tier} застосовується з наступної сесії", - "Session ended — cost cap {cost}": "Сесію завершено — ліміт витрат {cost}", + "{tier} applies next session": "{tier} застосовується з наступного сеансу", + "Session ended — cost cap {cost}": "Сеанс завершено — ліміт витрат {cost}", "MIC": "МІК", "Radio did not start": "Радіо не запустилося", "{n} aircraft": { @@ -2610,7 +2610,7 @@ "Activate to toggle voice": "Активуйте, щоб увімкнути або вимкнути голос", "Voice active": "Голос активний", "Voice could not be started.": "Не вдалося запустити голос.", - "the active voice session": "активна голосова сесія", + "the active voice session": "активний голосовий сеанс", "{value} feet": "{value} фт", "Fire · FRP {frp} MW": "Пожежа · FRP {frp} МВт", "The flights layer is not enabled": "Шар рейсів не ввімкнено", @@ -2762,7 +2762,7 @@ "Recent speech": "Нещодавнє мовлення", "HERE": "ТУТ", "Aircraft cockpit view": "Вигляд кабіни повітряного судна", - "LEVEL": "РІВЕНЬ", + "LEVEL": "ГОРИЗОНТ", "Estimated destination direction": "Орієнтовний напрямок до пункту призначення", "DEST ---°": "ПРИЗН. ---°", "OPTICAL PLANE · 01": "ОПТИЧНА ПЛОЩИНА · 01", @@ -2789,7 +2789,7 @@ "CONTACTS · 250 KM": "КОНТАКТИ · 250 КМ", "Contact navigation": "Навігація контактами", "CONTEXT ONLY": "ЛИШЕ КОНТЕКСТ", - "Nearby cohort counts": "Кількість найближчих груп", + "Nearby cohort counts": "Кількість контактів поблизу за типами", "FLT": "РЕЙСИ", "MIL": "ВІЙСЬК.", "SITE": "ОБʼЄКТИ", @@ -2819,7 +2819,7 @@ "NEWS": "НОВИНИ", "Show Regional News": "Показати регіональні новини", "LOCAL": "МІСЦ.", - "Show Local Info": "Показати місцеву інформацію", + "Show Local Info": "Показати місцеві дані", "Cockpit display and Radio controls": "Керування дисплеєм і радіо кабіни", "DISPLAY": "ДИСПЛЕЙ", "Cockpit display options": "Параметри дисплея кабіни", @@ -2842,12 +2842,12 @@ "Pin visual presets": "Закріпити візуальні пресети", "Keep visual presets open": "Тримати візуальні пресети відкритими", "Show the globe without a visual filter.": "Показує глобус без візуального фільтра.", - "Emulate a green phosphor CRT with scanlines and screen curvature.": "Імітує CRT-монітор із зеленим фосфором, рядками розгортки та вигнутим екраном.", + "Emulate a green phosphor CRT with scanlines and screen curvature.": "Імітує CRT-монітор із зеленим люмінофором, рядками розгортки та вигнутим екраном.", "Simulate night-vision goggles with green intensification and a tube vignette.": "Імітує прилад нічного бачення з зеленим підсиленням та віньєткою туби.", "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Імітує термальний контраст у стилі FLIR. Для кольору збільште Ironbow.", "Apply bright cel-shaded color and illustrated outlines.": "Застосовує яскраву мультяшну заливку та ілюстровані контури.", "Apply high-contrast monochrome film-noir grading.": "Застосовує висококонтрастну чорно-білу обробку в стилі нуар.", - "Add a cold, snowy whiteout treatment to the scene.": "Додає до сцени холодний засніжений білий ефект.", + "Add a cold, snowy whiteout treatment to the scene.": "Додає до сцени холодний ефект снігової імли.", "MAP SOURCE": "ДЖЕРЕЛО КАРТИ", "Map source": "Джерело карти", "Style": "Стиль", @@ -2855,9 +2855,9 @@ "Collapse panel": "Згорнути панель", "Pin location tray": "Закріпити панель розташування", "Keep location tray open": "Тримати панель розташування відкритою", - "Search any location": "Шукати будь-яке розташування", - "Search location by name or coordinates": "Шукати розташування за назвою або координатами", - "Search any location...": "Шукати будь-яке розташування...", + "Search any location": "Пошук місця", + "Search location by name or coordinates": "Пошук місця за назвою або координатами", + "Search any location...": "Пошук місця...", "WEATHER": "ПОГОДА", "Active weather products": "Активні погодні продукти", "RECENT IMAGERY": "СВІЖІ ЗНІМКИ", @@ -2903,7 +2903,7 @@ "Radio volume": "Гучність радіо", "STATION SITE": "САЙТ СТАНЦІЇ", "DIRECTORY: RADIO BROWSER": "КАТАЛОГ: RADIO BROWSER", - "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "Після натискання відтворення аудіо зʼєднується напряму з мовником. Мовник бачить вашу IP-адресу.", + "Audio connects directly to the broadcaster after you press play. Your IP is visible to that broadcaster.": "Після натискання «Відтворити» звук надходить безпосередньо від мовника. Мовник бачить вашу IP-адресу.", "Local RTL-SDR receiver": "Локальний приймач RTL-SDR", "LOCAL RTL-SDR": "ЛОКАЛЬНИЙ RTL-SDR", "Chrome/Edge · WebUSB · one local tuner shared by FM and the Local ADS-B layer.": "Chrome/Edge · WebUSB · один локальний тюнер для FM і шару «Локальний ADS-B».", @@ -2949,7 +2949,7 @@ "Detection label density": "Щільність підписів виявлення", "Allocation": "Розподіл", "Detection label allocation": "Розподіл підписів виявлення", - "Elastic": "Пружний", + "Elastic": "Гнучкий", "Weighted": "Зважений", "Fade": "Згасання", "Detection fade distance": "Відстань згасання виявлення", @@ -2965,8 +2965,8 @@ "Scope — the circular viewport mask": "Приціл — кругла маска вікна перегляду", "Scope": "Приціл", "Feather": "Розмиття", - "Scope edge feather": "Розмиття краю приціла", - "Scope edge feather as a percentage of the keyhole radius": "Розмиття краю приціла у відсотках радіуса ілюмінатора", + "Scope edge feather": "Розмиття краю прицілу", + "Scope edge feather as a percentage of the keyhole radius": "Розмиття краю прицілу у відсотках від радіуса ілюмінатора", "Draw on the world — click vertices, double-click or Enter to finish, Esc to cancel": "Малювати на карті світу — клацайте вершини, подвійне клацання або Enter — завершити, Esc — скасувати", "Shape": "Фігура", "Shape to draw": "Фігура для малювання", @@ -2988,7 +2988,7 @@ "Choose GeoJSON, KML, KMZ or GPX files": "Виберіть файли GeoJSON, KML, KMZ або GPX", "Imported files": "Імпортовані файли", "Celestial": "Небо", - "Hide UI chrome": "Сховати оформлення інтерфейсу", + "Hide UI chrome": "Сховати елементи інтерфейсу", "Clean UI": "Чистий інтерфейс", "Bloom / Glow": "Світіння / Ореол", "Bloom intensity": "Інтенсивність світіння", @@ -3003,17 +3003,17 @@ "NEAREST": "НАЙБЛИЖЧА", "CCTV camera": "Камера CCTV", "CALIBRATION": "КАЛІБРУВАННЯ", - "Drag the camera in the world: rings rotate, arrows move, handles set range/FOV": "Перетягніть камеру у сцені: кільця обертаються, стрілки переміщуються, маркери задають дальність/FOV", + "Drag the camera in the world: rings rotate, arrows move, handles set range/FOV": "Перетягніть камеру в сцені: кільця — обертання, стрілки — переміщення, маркери — дальність/FOV", "Camera pose — click a value to type": "Позиція камери — клацніть значення, щоб увести", "Heading (compass °) — click to type": "Курс (° за компасом) — клацніть, щоб увести", - "Pitch (° up/down) — click to type": "Тангаж (° вгору/вниз) — клацніть, щоб увести", + "Pitch (° up/down) — click to type": "Нахил (° вгору/вниз) — клацніть, щоб увести", "Horizontal FOV (°) — click to type": "Горизонтальний FOV (°) — клацніть, щоб увести", "Range / monitor-plane distance (m) — click to type": "Дальність / відстань до площини монітора (м) — клацніть, щоб увести", "Mount height above ground (m) — click to type": "Висота кріплення над землею (м) — клацніть, щоб увести", "North offset from catalog position (m) — click to type": "Зміщення на північ від позиції каталогу (м) — клацніть, щоб увести", "East offset from catalog position (m) — click to type": "Зміщення на схід від позиції каталогу (м) — клацніть, щоб увести", - "SAVE CAL": "ЗБЕРЕГТИ КАЛ.", - "RESET CAL": "СКИНУТИ КАЛ.", + "SAVE CAL": "ЗБЕРЕГТИ КАЛІБР.", + "RESET CAL": "СКИНУТИ КАЛІБР.", "SCENE SUMMARY": "ЗВЕДЕННЯ СЦЕНИ", "STREET LEVEL": "ВУЛИЧНІ ЗНІМКИ", "Turn Street Level on or off": "Увімкнути або вимкнути «Вуличні знімки»", diff --git a/src/ui/styles/cockpit.css b/src/ui/styles/cockpit.css index d54e09f8d..8116380b3 100644 --- a/src/ui/styles/cockpit.css +++ b/src/ui/styles/cockpit.css @@ -730,7 +730,8 @@ html:not([lang='en']) .cockpit-roll-token.is-separator { } .cockpit-vision-controls { display: grid; - grid-template-columns: 48px 58px 48px; + /* The current style grows for a long translated name (ЗВИЧАЙНИЙ). */ + grid-template-columns: 48px minmax(58px, max-content) 48px; align-items: stretch; gap: 2px; margin-top: 2px; From b96c1dee151b59e443c45e38697f443fecf750b8 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 17:41:29 +0400 Subject: [PATCH 10/20] i18n(it): apply review round 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three-model review (astra, sol, fable): 42 findings accepted, 3 deferred (unmarked cyclone errors and the Chinese locale descriptors need new keys in every catalog). The USGS callout now reads as an action (APRI LA FONTE) because it opens the report. Layer, tool and card-title sentences agree with any feature name («Il livello {layer} è attivo», «Lo strumento {name}», «{label}: attivato»). The store write error is grammatical for both values. RADO/BILANCIATO agree with DENSO. Also fixes the meaning of viewpoint, fire incident, trigger record, transit report, FIRMS cell age, drizzle, widebody and fast-jet classes; Dissolvenza and CH replace the odd abbreviations; cause/hint dashes become colons. Fixes the Nepal scene showing shots 01-08 in English in every locale: displayShotTitle() now also trusts the bootstrap keyframes of the append recipe that upgrades a built-in scene (src/scenes/recipes.js, with a test). Co-Authored-By: Claude Opus 5.5 --- docs/translations/it.md | 11 ++- src/i18n/locales/it.json | 128 +++++++++++++------------- src/i18n/same-as-english.json | 1 + src/scenes/recipes.js | 12 ++- src/scenes/sceneTitleDisplay.test.mjs | 26 ++++++ 5 files changed, 111 insertions(+), 67 deletions(-) diff --git a/docs/translations/it.md b/docs/translations/it.md index 3b7bd2ec7..610d85b01 100644 --- a/docs/translations/it.md +++ b/docs/translations/it.md @@ -14,9 +14,10 @@ Translation source: abiyeenzo (#912). - The HUD codes HDG, BRG, CRS, FOV and DEST stay in English, as in cockpit avionics. RANGE is «PORTATA». Words used in a sentence are translated: heading → «prua» (aircraft, ships) or «direzione» (camera, buses, trams, trains), course → «rotta». - Keyboard keys stay in English: Space, Enter, Esc, Tab, Shift, Backspace, H, 1–9 («Tieni premuto Space per parlare», «Premi Enter per riprovare»). - Decimal comma in numbers written in the text: «28,2710° N». Numbers formatted by the code follow `Intl` and need nothing. +- Amounts: thousands, millions and billions are written out or abbreviated in Italian, not with K/M/B: «{amount} mila $», «{amount} mln $», «{amount} mld $». - Units: km, m, km/h, m/s, kn (knots), ft (feet), h, min, s; in UPPERCASE text KM, KM/S, KT, FT, MIN, H. "m" is always metres, so minutes are «min» («5 min fa»). MW stays MW. `°` and `%` stay. - "ago" goes after the time: «{count} min fa». When a placeholder already holds a localized "ago" text (`{age}`, `{ago}`), do not add «fa» again. -- A feature name used as a sentence subject gets a head noun so the verb agrees: «La modalità Missioni spaziali isola…», «Il pannello Impostazioni provider è disattivato…». +- A feature name used as a sentence subject gets a head noun so the verb agrees: «La modalità Missioni spaziali isola…», «Il pannello Impostazioni provider è disattivato…», «Il livello {layer} è attivo…», «Lo strumento {name} è attivo…». A short card title with a placeholder name puts the state after a colon: «{label}: attivato». - English loanwords that Italian UIs use as they are stay in English: feed, live, cockpit, briefing, preset, overlay, layout, snapshot, tile, provider, timeout, payload, bloom, scope. ## Plurals @@ -51,6 +52,9 @@ The `many` form is the `other` text with «di» after the number when a noun fol | aircraft, plane / flight / military flights | aereo / volo / voli militari | | vessel, ship | nave | | satellite / shell (Starlink) / DENSE | satellite / shell / DENSO | +| SPARSE / BALANCED / DENSE (detection modes) | RADO / BILANCIATO / DENSO (agree with «overlay») | +| broadband (Starlink shell) | a banda larga | +| VISUAL (CelesTrak group) | VISIBILI | | launch (rocket) / launch site / space mission | lancio / sito di lancio / missione spaziale | | ascent / replay / payload / stage | salita / replay / payload / stadio | | contact / tracking | contatto / tracciamento | @@ -58,10 +62,14 @@ The `many` form is the `other` text with «di» after the number when a noun fol | mapped / observed | mappato / osservato | | camera (view) / camera, CCTV camera | camera / telecamera, telecamera CCTV | | earthquake / active fire / fire perimeter | terremoto / incendio attivo / perimetro dell'incendio | +| incident (wildfire, Type N) / scene incident | evento (Evento di tipo N, Incendio senza nome) / evento | +| trigger record (USGS card) / OPEN SOURCE link | scheda / APRI LA FONTE | | advisory (NHC/CPHC cyclone) / cone | bollettino / cono di incertezza | | radio station / broadcaster | stazione radio / emittente | +| CH (radio channel readout) | CH (unchanged) | | road / flow (traffic) | strada / flusso | | transit / bike share | trasporto pubblico / bike sharing | +| last report (vehicle position) | ultima segnalazione | | scene / shot / scene recipe | scena / scatto / ricetta della scena | | anchor / data pack / bundle (scene) | ancora / pacchetto dati / pacchetto | | story beat | tappa del racconto | @@ -88,6 +96,7 @@ The `many` form is the `other` text with «di» after the number when a noun fol | RANGE / PITCH / HGT (CCTV calibration) | PORTATA / INCL. / ALT. | | PREV / NEXT | PREC / SUCC | | Previous / Next (button text) | Precedente / Successivo | +| Focus {target} (action, aria label) | Inquadra {target} (the FOCUS button stays FOCUS) | | L / R (relative bearing) | S / D | | SIG / NEWS / LOCAL (briefing tabs) | SIG / NOTIZIE / LOCALE | | compass points (N, NNE, …, W, NW) | N, NNE, …, O, NO (west is «O», ovest) | diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 7afaa6335..ce5f7da1d 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -17,7 +17,7 @@ "That shape could not be placed.": "Impossibile posizionare quella forma.", "Could not place the shape: {error}": "Impossibile posizionare la forma: {error}", "Board cleared.": "Lavagna cancellata.", - "{owner} is using the pointer — close it first.": "{owner} sta usando il puntatore: chiudilo prima.", + "{owner} is using the pointer — close it first.": "Lo strumento {owner} sta usando il puntatore: chiudilo prima.", "{label} · Detailed outline unavailable": "{label} · Contorno dettagliato non disponibile", "Flying to Austin, TX...": "Volo verso Austin, TX...", "Restoring shared view...": "Ripristino della vista condivisa...", @@ -34,10 +34,10 @@ "Glider": "Aliante", "Turboprop": "Turboelica", "Airliner": "Aereo di linea", - "Widebody": "Fusoliera larga", + "Widebody": "Aereo a fusoliera larga", "Four-engine jet": "Quadrigetto", "Helicopter": "Elicottero", - "Fast jet": "Jet veloce", + "Fast jet": "Jet ad alte prestazioni", "Business jet": "Business jet", "Drone": "Drone", "General emergency": "Emergenza generale", @@ -51,12 +51,12 @@ "Flood footage": "Riprese dell'alluvione", "Compilation and casualty claims": "Raccolta di video e dichiarazioni sulle vittime", "SOURCE GEOCONFIRMED · WORLD-PINNED": "FONTE GEOCONFERMATA · ANCORATA AL MONDO", - "SOURCE CREDITED · LOCATION UNRESOLVED": "FONTE CITATA · POSIZIONE NON RISOLTA", + "SOURCE CREDITED · LOCATION UNRESOLVED": "FONTE CITATA · POSIZIONE NON DETERMINATA", "REFERENCE ONLY · CLAIMS UNVERIFIED": "SOLO RIFERIMENTO · DICHIARAZIONI NON VERIFICATE", "SOURCE GEOCONFIRMED": "FONTE GEOCONFERMATA", - "2021 historical reference versus 2026 post-event imagery; changes are cumulative and include the July 2025 Rasuwagadhi flood. Schematic downstream progression, not modeled arrival time; not an official hazard model.": "Riferimento storico 2021 contro immagini 2026 successive all'evento; i cambiamenti sono cumulativi e includono l'alluvione di Rasuwagadhi del luglio 2025. Progressione schematica a valle, non un tempo di arrivo modellato; non è un modello ufficiale di pericolosità.", - "Immediate collapse viewpoint": "Punto di vista sul crollo immediato", - "Collapse viewpoint": "Punto di vista sul crollo", + "2021 historical reference versus 2026 post-event imagery; changes are cumulative and include the July 2025 Rasuwagadhi flood. Schematic downstream progression, not modeled arrival time; not an official hazard model.": "Confronto tra il riferimento storico del 2021 e le immagini del 2026 successive all'evento; i cambiamenti sono cumulativi e includono l'alluvione di Rasuwagadhi del luglio 2025. Progressione schematica a valle, senza modellazione dei tempi di arrivo; non è un modello ufficiale di pericolosità.", + "Immediate collapse viewpoint": "Punto di osservazione ravvicinato sul crollo", + "Collapse viewpoint": "Punto di osservazione sul crollo", "Debris-dammed lake": "Lago di sbarramento da detriti", "Dammed lake": "Lago di sbarramento", "Second landslide": "Seconda frana", @@ -144,7 +144,7 @@ "FIELD REPORTS · {count}": "RAPPORTI DAL CAMPO · {count}", "GEOLOCATIONS · {credit}": "GEOLOCALIZZAZIONI · {credit}", "↗ OPEN PUBLIC MAP": "↗ APRI LA MAPPA PUBBLICA", - " Clouds are preserved from the source imagery.": " Le nuvole sono conservate dalle immagini di origine.", + " Clouds are preserved from the source imagery.": " Le nuvole presenti nelle immagini di origine non sono state rimosse.", "Rasuwagadhi witness": "Testimone a Rasuwagadhi", "Open original source for {source}; capture time unverified": "Apri la fonte originale per {source}; ora di acquisizione non verificata", "Historical reference and post-event image divider": "Divisore tra immagine storica di riferimento e immagine successiva all'evento", @@ -185,7 +185,7 @@ "26 AUG 2026 · 08:37 NPT": "26 AGO 2026 · 08:37 NPT", "28.2710° N · 85.5150° E": "28,2710° N · 85,5150° E", "INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "INIZIALE M4.4 · RICLASSIFICATO FRANA M5.2", - "USGS EVENT us7000tbwb · OPEN SOURCE": "EVENTO USGS us7000tbwb · FONTE APERTA", + "USGS EVENT us7000tbwb · OPEN SOURCE": "EVENTO USGS us7000tbwb · APRI LA FONTE", "Open the USGS initial report for the 26 August 2026 Nepal landslide": "Apri il rapporto iniziale USGS sulla frana del 26 agosto 2026 in Nepal", "Show the Nepal context callout without a border or country fill": "Mostra il riquadro di contesto sul Nepal senza confine né riempimento del paese", "Introduce Nepal, draw its border, then reveal the Bhote Koshi incident": "Presenta il Nepal, traccia il suo confine, poi mostra l'evento del Bhote Koshi", @@ -197,8 +197,8 @@ "Animate the sourced cyan river-centerline route to Trishuli Bazaar": "Anima il percorso ciano documentato dalle fonti lungo l'asse del fiume fino a Trishuli Bazaar", "OVERVIEW": "PANORAMICA", "Keep the completed flood path and location labels visible": "Mantieni visibili il percorso completo dell'alluvione e le etichette dei luoghi", - "RECORD": "REGISTRO", - "Reveal the trigger record while making a slow camera approach": "Mostra il registro dell'innesco con un lento avvicinamento della camera", + "RECORD": "SCHEDA", + "Reveal the trigger record while making a slow camera approach": "Mostra la scheda dell'innesco con un lento avvicinamento della camera", "{speed} kn": "{speed} kn", "That file is not valid JSON.": "Quel file non è un JSON valido.", "That JSON file is not GeoJSON.": "Quel file JSON non è GeoJSON.", @@ -272,10 +272,10 @@ "GNSS navigation — GPS, GLONASS, Galileo": "Navigazione GNSS — GPS, GLONASS, Galileo", "GEO": "GEO", "Geostationary belt — comms and weather, fixed over the equator": "Fascia geostazionaria — comunicazioni e meteo, fissi sopra l'equatore", - "VISUAL": "VISIVO", + "VISUAL": "VISIBILI", "Brightest naked-eye objects — CelesTrak visual group": "Oggetti più luminosi a occhio nudo — gruppo visual di CelesTrak", "COMMS": "TLC", - "Broadband constellation shell — shown only in DENSE mode": "Shell della costellazione broadband — mostrato solo in modalità DENSO", + "Broadband constellation shell — shown only in DENSE mode": "Shell della costellazione a banda larga — mostrato solo in modalità DENSO", "FISHING": "PESCA", "TOWING": "RIMORCHIO", "DREDGER": "DRAGA", @@ -379,7 +379,7 @@ "{name} is configured outside Provider Settings and can only be changed where it was set": "{name} è configurata fuori da Impostazioni provider e si può cambiare solo dove è stata impostata", "The key was not saved: could not restrict the credential file to your account; nothing was saved": "La chiave non è stata salvata: impossibile limitare il file delle credenziali al tuo account; non è stato salvato nulla", "The key was not saved: the existing configuration could not be read, so nothing was changed": "La chiave non è stata salvata: impossibile leggere la configurazione esistente, quindi non è cambiato nulla", - "Could not write the {store} store": "Impossibile scrivere nell'archivio {store}", + "Could not write the {store} store": "Impossibile salvare: {store} non è scrivibile", "Save failed ({status}).": "Salvataggio non riuscito ({status}).", "OAuth check failed: {detail}": "Verifica OAuth non riuscita: {detail}", "Could not check ChatGPT sign-in. Try again.": "Impossibile verificare l'accesso a ChatGPT. Riprova.", @@ -418,7 +418,7 @@ "Opening ChatGPT sign-in in your browser…": "Apertura dell'accesso a ChatGPT nel browser…", "Could not start ChatGPT sign-in on this machine.": "Impossibile avviare l'accesso a ChatGPT su questa macchina.", "Finish ChatGPT sign-in in the browser. Waiting for it to complete…": "Completa l'accesso a ChatGPT nel browser. In attesa del completamento…", - "ChatGPT sign-in timed out. Click {button} to try again.": "Accesso a ChatGPT scaduto. Fai clic su {button} per riprovare.", + "ChatGPT sign-in timed out. Click {button} to try again.": "Tempo scaduto per l'accesso a ChatGPT. Fai clic su {button} per riprovare.", "ChatGPT sign-in complete. OAuth will be used for the next cloud voice session.": "Accesso a ChatGPT completato. OAuth verrà usato per la prossima sessione vocale cloud.", "Remove this key from your saved configuration?": "Rimuovere questa chiave dalla configurazione salvata?", "Removed from {store}. Restarting — this page reloads itself.": "Rimosso ({store}). Riavvio in corso: questa pagina si ricarica da sola.", @@ -491,7 +491,7 @@ "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "SELEZIONA UN VOLO, UNA NAVE O UN'INSTALLAZIONE MAPPATA", "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "ATTIVA PER CARICARE LA PROSSIMITÀ OSSERVATA / MAPPATA", "Unavailable": "Non disponibile", - "Focus {label}": "Focus su {label}", + "Focus {label}": "Inquadra {label}", "Global Context navigation": "Navigazione Contesto globale", "Previous — prior visited contact in the 250 km window": "Precedente — contatto visitato in precedenza nella finestra di 250 km", "PREVIOUS": "PREC", @@ -561,7 +561,7 @@ "many": "{count} di tempeste attive", "other": "{count} tempeste attive" }, - "Position as of {time}": "Posizione alle {time}", + "Position as of {time}": "Posizione aggiornata al {time}", "Maximum sustained wind: {wind} · Pressure: {pressure}": "Vento massimo sostenuto: {wind} · Pressione: {pressure}", "{name} · {classification} · Advisory {number} · issued {time}": "{name} · {classification} · Bollettino {number} · emesso {time}", "No active NHC/CPHC systems": "Nessun sistema NHC/CPHC attivo", @@ -610,7 +610,7 @@ "lane direction|slightly right": "di destra", "lane direction|sharply left": "all'estrema sinistra", "lane direction|sharply right": "all'estrema destra", - "lane direction|straight": "centrale", + "lane direction|straight": "per proseguire dritto", "ordinal|{number}st": "{number}ª", "ordinal|{number}nd": "{number}ª", "ordinal|{number}rd": "{number}ª", @@ -685,8 +685,8 @@ "action|CLEAR": "CANCELLA", "Remove the route and both markers": "Rimuovi il percorso ed entrambi i marcatori", "press Escape twice to leave Draw": "premi Esc due volte per uscire da Disegno", - "{name} is active — turn {name} off, then set {endpoint}": "{name} è attivo: disattiva {name}, poi imposta {endpoint}", - "{name} is active — {leave}, then set {endpoint}": "{name} è attivo: {leave}, poi imposta {endpoint}", + "{name} is active — turn {name} off, then set {endpoint}": "Lo strumento {name} è attivo: disattiva {name}, poi imposta {endpoint}", + "{name} is active — {leave}, then set {endpoint}": "Lo strumento {name} è attivo: {leave}, poi imposta {endpoint}", "Only the first {count} turns of this route are shown": "Sono mostrate solo le prime {count} svolte di questo percorso", "Turn-by-turn directions": "Indicazioni passo passo", "Another map tool is using clicks — close it, then SET A again": "Un altro strumento della mappa sta usando i clic: chiudilo, poi IMPOSTA A di nuovo", @@ -705,7 +705,7 @@ "Routing timed out": "Il calcolo del percorso è andato in timeout", "Routing unavailable — no response from the routing service": "Calcolo del percorso non disponibile: nessuna risposta dal servizio", "Earthquake source unavailable": "Fonte dei terremoti non disponibile", - "Focus fire detection {title}, {details}": "Focus sul rilevamento incendio {title}, {details}", + "Focus fire detection {title}, {details}": "Inquadra il rilevamento d'incendio {title}, {details}", "live feed unavailable": "feed live non disponibile", "{value} conf": "{value} conf", "{value} ago": "{value} fa", @@ -716,7 +716,7 @@ "FIRE": "INCENDIO", "FIRES": "INCENDI", "max {value} MW": "max {value} MW", - "new {value}": "nuovo {value}", + "new {value}": "ultimo: {value} fa", "{value}°N": "{value}°N", "{value}°S": "{value}°S", "{value}°E": "{value}°E", @@ -903,7 +903,7 @@ "Type unknown": "Tipo sconosciuto", "Reg unknown": "Matricola sconosciuta", "Operator unknown": "Operatore sconosciuto", - "${amount}K": "{amount}K $", + "${amount}K": "{amount} mila $", "${amount}M": "{amount} mln $", "${amount}B": "{amount} mld $", "fire cause|Human": "Umana", @@ -914,7 +914,7 @@ "fire behavior|Moderate": "Moderato", "fire behavior|Active": "Attivo", "fire behavior|Extreme": "Estremo", - "Type {level} Incident": "Incidente di tipo {level}", + "Type {level} Incident": "Evento di tipo {level}", "age|{count}m": "{count} min", "{acres} ac": { "one": "{acres} acro", @@ -936,7 +936,7 @@ "part of {complex}": "parte di {complex}", "InciWeb ↗ · click card to open": "InciWeb ↗ · clic sulla scheda per aprirlo", "FIRE · {name}": "INCENDIO · {name}", - "Unnamed incident": "Incidente senza nome", + "Unnamed incident": "Incendio senza nome", "Open {title} on InciWeb": "Apri {title} su InciWeb", "Perimeter source unavailable": "Fonte dei perimetri non disponibile", "Not contained or unknown": "Non contenuto o dato non disponibile", @@ -1020,11 +1020,11 @@ "Longitudes must be within ±180°": "Le longitudini devono essere entro ±180°", "Select one side of the dateline": "Seleziona un solo lato della linea del cambio di data", "Box must enclose an area": "Il riquadro deve racchiudere un'area", - "Add the full Starlink broadband shell (thousands of extra points)": "Aggiungi l'intero shell broadband Starlink (migliaia di punti in più)", + "Add the full Starlink broadband shell (thousands of extra points)": "Aggiungi l'intero shell Starlink a banda larga (migliaia di punti in più)", "Loading the Starlink shell…": "Caricamento dello shell Starlink…", - "Starlink {detail} — click to retry": "Starlink {detail} — clic per riprovare", + "Starlink {detail} — click to retry": "Starlink {detail}: clic per riprovare", "load failed": "caricamento non riuscito", - "Showing the full Starlink shell — click for the core catalog only": "Mostra l'intero shell Starlink — clic per il solo catalogo principale", + "Showing the full Starlink shell — click for the core catalog only": "Shell Starlink completo visualizzato: clic per mostrare solo il catalogo principale", "DENSE ···": "DENSO ···", "DENSE ✕": "DENSO ✕", "DENSE": "DENSO", @@ -1131,7 +1131,7 @@ "occupancy|crushed standing room only": "solo posti in piedi, affollato", "occupancy|full": "pieno", "occupancy|not accepting passengers": "non accetta passeggeri", - "occupancy|not boardable": "non accessibile", + "occupancy|not boardable": "non è possibile salire", "Route {route}": "Linea {route}", "Vehicle {vehicle}": "Veicolo {vehicle}", "vehicle motion|Stopped": "Fermo", @@ -1140,9 +1140,9 @@ "Moving": "In movimento", "reported {speed} km/h": "{speed} km/h riportati", "reported hdg {heading}°": "direzione {heading}° riportata", - "Last report: stopped at stop {stop}": "Ultimo rapporto: fermo alla fermata {stop}", - "Last report: arriving at stop {stop}": "Ultimo rapporto: in arrivo alla fermata {stop}", - "Last report: next stop {stop}": "Ultimo rapporto: prossima fermata {stop}", + "Last report: stopped at stop {stop}": "Ultima segnalazione: fermo alla fermata {stop}", + "Last report: arriving at stop {stop}": "Ultima segnalazione: in arrivo alla fermata {stop}", + "Last report: next stop {stop}": "Ultima segnalazione: prossima fermata {stop}", "Shown at street level · depth not in the feed": "Mostrato a livello stradale · profondità non presente nel feed", "Reported {seconds} s ago": "Riportato {seconds} s fa", "Reported {minutes} min ago": "Riportato {minutes} min fa", @@ -1176,11 +1176,11 @@ "API key rejected — check AISSTREAM_API_KEY": "Chiave API rifiutata: controlla AISSTREAM_API_KEY", "feed silent {seconds}s — no AIS data": "feed silenzioso da {seconds}s: nessun dato AIS", "feed silent — no AIS data": "feed silenzioso: nessun dato AIS", - "feed down — retrying slowly (attempt {attempt})": "feed fermo: nuovi tentativi lenti (tentativo {attempt})", + "feed down — retrying slowly (attempt {attempt})": "feed inattivo: nuovi tentativi lenti (tentativo {attempt})", "reconnecting to feed… (attempt {attempt})": "riconnessione al feed… (tentativo {attempt})", - "feed down — retrying slowly": "feed fermo: nuovi tentativi lenti", + "feed down — retrying slowly": "feed inattivo: nuovi tentativi lenti", "reconnecting to feed…": "riconnessione al feed…", - "Focus vessel {name}, MMSI {mmsi}": "Focus sulla nave {name}, MMSI {mmsi}", + "Focus vessel {name}, MMSI {mmsi}": "Inquadra la nave {name}, MMSI {mmsi}", "Hidden by this map source · choose a globe map": "Nascosto da questa fonte mappa · scegli una mappa del globo", "Weather image HTTP {status}": "Immagine meteo HTTP {status}", "Weather HTTP {status}": "Meteo HTTP {status}", @@ -1188,8 +1188,8 @@ "Weather imagery unavailable": "Immagini meteo non disponibili", "Weather source unavailable; previous observation retained": "Fonte meteo non disponibile; mantenuta l'osservazione precedente", "Weather unavailable": "Meteo non disponibile", - "No frame within {gap} min of {time}": "Nessun fotogramma entro {gap} min dalle {time}", - "No frame within {gap} h of {time}": "Nessun fotogramma entro {gap} h dalle {time}", + "No frame within {gap} min of {time}": "Nessun fotogramma entro {gap} min da {time}", + "No frame within {gap} h of {time}": "Nessun fotogramma entro {gap} h da {time}", "{hours}h {minutes}m ago": "{hours} h {minutes} min fa", "{minutes}m ago": "{minutes} min fa", "{state} · {time} · {lag}": "{state} · {time} · {lag}", @@ -1462,7 +1462,7 @@ "Review scene import": "Rivedi l'importazione della scena", "Nothing is loaded or changed until you apply this file.": "Nulla viene caricato o modificato finché non applichi questo file.", "Ready to import": "Pronto per l'importazione", - "Apply replaces the current project. Export your current project first if you want to keep both.": "Applica sostituisce il progetto attuale. Esporta prima il progetto attuale se vuoi conservarli entrambi.", + "Apply replaces the current project. Export your current project first if you want to keep both.": "L'importazione sostituirà il progetto attuale. Esporta prima il progetto attuale se vuoi conservarli entrambi.", "Apply import": "Applica importazione", "Import was not applied. The current project may have changed.": "L'importazione non è stata applicata. Il progetto attuale potrebbe essere cambiato.", "Select a scene and shot first": "Seleziona prima una scena e uno scatto", @@ -1539,7 +1539,7 @@ "Ironbow": "Ironbow", "unsaved CCTV calibration": "calibrazione CCTV non salvata", "the open cockpit": "il cockpit aperto", - "Switching language reloads the page. This will be lost: {items}. Switch anyway?": "Cambiare lingua ricarica la pagina. Andrà perso: {items}. Cambiare comunque?", + "Switching language reloads the page. This will be lost: {items}. Switch anyway?": "Cambiare lingua ricarica la pagina. Perderai: {items}. Cambiare comunque?", "VISUAL PRESETS": "PRESET VISIVI", "LOCATION": "POSIZIONE", "CONTACTS — nearest planes · vessels · sites": "CONTATTI — aerei · navi · siti più vicini", @@ -1634,7 +1634,7 @@ "PARTLY CLOUDY": "POCO NUVOLOSO", "OVERCAST": "COPERTO", "FOG": "NEBBIA", - "DRIZZLE": "PIOGGERELLA", + "DRIZZLE": "PIOVIGGINE", "RAIN": "PIOGGIA", "RAIN SHOWERS": "ROVESCI DI PIOGGIA", "SNOW SHOWERS": "ROVESCI DI NEVE", @@ -1931,7 +1931,7 @@ "Collapse Radio": "Comprimi Radio", "Expand Radio section": "Espandi la sezione Radio", "Collapse Radio section": "Comprimi la sezione Radio", - "Panel layout updated — positions reset to new defaults": "Layout dei pannelli aggiornato — posizioni ripristinate ai nuovi valori predefiniti", + "Panel layout updated — positions reset to new defaults": "Layout dei pannelli aggiornato: posizioni ripristinate ai nuovi valori predefiniti", "Austin": "Austin", "San Francisco": "San Francisco", "New York": "New York", @@ -1946,7 +1946,7 @@ "Expand Cockpit display options": "Espandi le opzioni display del cockpit", "Collapse Cockpit Radio controls": "Comprimi i controlli Radio del cockpit", "Expand Cockpit Radio controls": "Espandi i controlli Radio del cockpit", - "CH {index} / {total}": "CAN {index} / {total}", + "CH {index} / {total}": "CH {index} / {total}", "NO STATIONS": "NESSUNA STAZIONE", "NO STATION AVAILABLE": "NESSUNA STAZIONE DISPONIBILE", "{name}, station {index} of {total}": "{name}, stazione {index} di {total}", @@ -1991,7 +1991,7 @@ " · degraded directory": " · elenco degradato", " · stale directory": " · elenco obsoleto", " · outside current filter": " · fuori dal filtro attuale", - "Ready — playback starts only from your action": "Pronta — la riproduzione parte solo su tua azione", + "Ready — playback starts only from your action": "Pronta: premi PLAY per avviare la riproduzione", "Radio off": "Radio spenta", "Connecting directly to broadcaster…": "Connessione diretta all'emittente…", "Buffering broadcaster stream…": "Buffering del flusso dell'emittente…", @@ -2002,10 +2002,10 @@ " · restoring volume after voice": " · ripristino del volume dopo la voce", " · static indicates no broadcaster audio": " · il rumore indica assenza di audio dall'emittente", " · tuning static until broadcaster starts": " · rumore di sintonia fino all'avvio dell'emittente", - "Station unavailable after directory refresh — choose another channel": "Stazione non disponibile dopo l'aggiornamento dell'elenco — scegli un altro canale", + "Station unavailable after directory refresh — choose another channel": "Stazione non disponibile dopo l'aggiornamento dell'elenco: scegli un altro canale", "Radio is enabling…": "Attivazione della Radio…", "Radio is disabling…": "Disattivazione della Radio…", - "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "Il ciclo di vita della Radio è incerto — usa Attiva o Disattiva per riconciliare", + "Radio lifecycle is uncertain — use Enable or Disable to reconcile": "Il ciclo di vita della Radio è incerto: usa Attiva o Disattiva per riconciliare", "Clear reading": "Cancella la lettura", "Earlier observation": "Osservazione precedente", "Observed history": "Storico osservato", @@ -2017,7 +2017,7 @@ "Point the camera at the ground to use the view": "Punta la camera verso il suolo per usare la vista", "That point cannot anchor a box": "Quel punto non può ancorare un riquadro", "Imagery stops at ±{limit}° latitude": "Le immagini si fermano a ±{limit}° di latitudine", - "{owner} is using the pointer — close it first": "{owner} sta usando il puntatore: chiudilo prima", + "{owner} is using the pointer — close it first": "Lo strumento {owner} sta usando il puntatore: chiudilo prima", "Box is {size} wide · limit {limit}": "Il riquadro è largo {size} · limite {limit}", "View is {size} wide · limit {limit}": "La vista è larga {size} · limite {limit}", "VS BASEMAP": "VS MAPPA BASE", @@ -2080,10 +2080,10 @@ "start here": "inizia da qui", "No box": "Nessun riquadro", "Searching": "Ricerca", - "Every day is empty here": "Ogni giorno è vuoto qui", + "Every day is empty here": "Qui tutti i giorni sono vuoti", "Sources off": "Fonti disattivate", "VS": "VS", - "Not set": "Non impostato", + "Not set": "Nessuna immagine", "Basemap": "Mappa di base", "Source off": "Fonte disattivata", "Unpin {slot}": "Sblocca {slot}", @@ -2116,8 +2116,8 @@ "Delete scene \"{scene}\" and all shots?": "Eliminare la scena \"{scene}\" e tutti i suoi scatti?", "Delete shot \"{shot}\"?": "Eliminare lo scatto \"{shot}\"?", "Stopped (Esc)": "Fermato (Esc)", - "SPARSE": "RADA", - "BALANCED": "BILANCIATA", + "SPARSE": "RADO", + "BALANCED": "BILANCIATO", "No shots yet. Use CAPTURE SHOT to save current look.": "Ancora nessuno scatto. Usa CATTURA SCATTO per salvare l'aspetto attuale.", "Double-click to rename": "Doppio clic per rinominare", "Shot name": "Nome dello scatto", @@ -2145,7 +2145,7 @@ "Shared satellite is unavailable": "Il satellite condiviso non è disponibile", "entity": "elemento", "Shared {subject} follow expired": "Il tracciamento condiviso di {subject} è scaduto", - "Shared {subject} could not be restored — feed unavailable": "Impossibile ripristinare la condivisione di {subject} — feed non disponibile", + "Shared {subject} could not be restored — feed unavailable": "Impossibile ripristinare la condivisione di {subject}: feed non disponibile", "Shared {subject} is unavailable": "La condivisione di {subject} non è disponibile", "{id} isn't reporting now — showing where it was last seen": "{id} non sta trasmettendo ora: viene mostrata l'ultima posizione nota", "{id} isn't reporting now — showing where it was at {time}": "{id} non sta trasmettendo ora: viene mostrata la posizione alle {time}", @@ -2230,7 +2230,7 @@ "other": "{count} feed live" }, "{feed} {count} ({seconds}s old)": "{feed} {count} ({seconds}s fa)", - "Street Level toggle failed": "Attivazione di Vista stradale non riuscita", + "Street Level toggle failed": "Impossibile attivare o disattivare il livello Vista stradale", "Street Level could not start": "Impossibile avviare Vista stradale", "SHRINK": "RIDUCI", "EXPAND": "ESPANDI", @@ -2377,7 +2377,7 @@ "Requesting microphone": "Richiesta microfono", "Gemini could not submit this input. Start voice again.": "Gemini non ha potuto inviare questo input. Riavvia la voce.", "Connecting to Gemini": "Connessione a Gemini", - "Ask or command": "Chiedi o comanda", + "Ask or command": "Chiedi o dai un comando", "Gemini returned an oversized message": "Gemini ha restituito un messaggio troppo grande", "Gemini Live connection failed. Check network access, then start voice again.": "Connessione a Gemini Live non riuscita. Controlla l'accesso alla rete, poi riavvia la voce.", "Gemini Live connection ended. Start voice again for a new conversation.": "Connessione a Gemini Live terminata. Riavvia la voce per una nuova conversazione.", @@ -2520,10 +2520,10 @@ "{items} {scope}": "{items} {scope}", "last 24 h": "ultime 24 h", "past 30 d and upcoming": "ultimi 30 g e prossimi", - "the flights layer loads by viewport": "il livello voli si carica per vista", + "the flights layer loads by viewport": "il livello voli si carica in base alla vista", "distance is ground distance, not overhead": "la distanza è misurata al suolo fino al punto subsatellitare, non fino al satellite", "the count is a lower bound because at least one layer reached its retained limit.": "il conteggio è un limite inferiore perché almeno un livello ha raggiunto il suo limite di conservazione.", - "{label} off": "{label} disattivato", + "{label} off": "{label}: disattivato", "{label} loading": "{label} in caricamento", "{label} error": "{label} in errore", "counted the first {returned} loaded records": "contati i primi {returned} record caricati", @@ -2564,19 +2564,19 @@ "Could not arrive at the requested place": "Impossibile arrivare al luogo richiesto", "The nearest airborne aircraft could not be selected": "Impossibile selezionare l'aereo in volo più vicino", "No flights within {radius} of the current view": "Nessun volo entro {radius} dalla vista attuale", - "No military within {radius} of the current view": "Nessun mezzo militare entro {radius} dalla vista attuale", + "No military within {radius} of the current view": "Nessun aereo militare entro {radius} dalla vista attuale", "No satellites within {radius} of the current view": "Nessun satellite entro {radius} dalla vista attuale", "No vessels within {radius} of the current view": "Nessuna nave entro {radius} dalla vista attuale", - "{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "{layer} è attivo sul feed {source}, ma nessun aereo in volo è ancora caricato nella vista di {place}", - "{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "{layer} è attivo, ma nessun aereo in volo è ancora caricato nella vista di {place}", - "{layer} is enabled, but its aircraft feed is unavailable": "{layer} è attivo, ma il suo feed di aerei non è disponibile", - "{layer} is enabled, but its destination refresh did not complete": "{layer} è attivo, ma l'aggiornamento nel luogo di destinazione non è stato completato", - "{layer} is enabled, but {source} is unavailable": "{layer} è attivo, ma {source} non è disponibile", + "{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "Il livello {layer} è attivo sul feed {source}, ma nessun aereo in volo è ancora caricato nella vista di {place}", + "{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "Il livello {layer} è attivo, ma nessun aereo in volo è ancora caricato nella vista di {place}", + "{layer} is enabled, but its aircraft feed is unavailable": "Il livello {layer} è attivo, ma il suo feed di aerei non è disponibile", + "{layer} is enabled, but its destination refresh did not complete": "Il livello {layer} è attivo, ma l'aggiornamento nel luogo di destinazione non è stato completato", + "{layer} is enabled, but {source} is unavailable": "Il livello {layer} è attivo, ma {source} non è disponibile", "Could not arrive at {place}": "Impossibile arrivare a {place}", "{name} is no longer loaded": "{name} non è più caricato", "Unknown target layer: {target}": "Livello obiettivo sconosciuto: {target}", "nominal": "nominale", - "{label} on": "{label} attivato", + "{label} on": "{label}: attivato", "Frame aircraft": "Inquadra gli aerei", "Frame military aircraft": "Inquadra gli aerei militari", "Frame ships": "Inquadra le navi", @@ -2649,7 +2649,7 @@ "Change map stack": "Cambia lo stack mappa", "Adjust post-processing": "Regola la post-elaborazione", "Control scene": "Controlla la scena", - "Control CCTV": "Controlla le CCTV", + "Control CCTV": "Controlla le telecamere CCTV", "Control radio": "Controlla la radio", "Track contact": "Traccia il contatto", "Stop tracking": "Interrompi il tracciamento", @@ -2882,7 +2882,7 @@ "Detection label allocation": "Allocazione delle etichette di rilevamento", "Elastic": "Elastica", "Weighted": "Ponderata", - "Fade": "Dissolv.", + "Fade": "Dissolvenza", "Detection fade distance": "Distanza di dissolvenza del rilevamento", "World-overlay fade distance outside the keyhole as a percentage of its radius": "Distanza di dissolvenza dell'overlay fuori dal foro, come percentuale del suo raggio", "Outside": "Esterno", diff --git a/src/i18n/same-as-english.json b/src/i18n/same-as-english.json index 81a6d1cc2..6b0b9eb4d 100644 --- a/src/i18n/same-as-english.json +++ b/src/i18n/same-as-english.json @@ -152,6 +152,7 @@ "CCTV", "CCTV OFF", "CCTV ON", + "CH {index} / {total}", "COCKPIT", "CRS {value}°", "CRT", diff --git a/src/scenes/recipes.js b/src/scenes/recipes.js index ba3940a57..1a886c541 100644 --- a/src/scenes/recipes.js +++ b/src/scenes/recipes.js @@ -1079,7 +1079,15 @@ export function displayShotTitle(title, shot = undefined, scene = undefined) { /** Whether the built-in recipe behind a scene declares a shot with this title. */ function recipeDeclaresShotTitle(sceneId, title) { const recipe = sceneId ? getSceneRecipeById(sceneId) : null; - return Boolean( - recipe?.cameraPath?.some((keyframe) => keyframe?.title === title), + if (!recipe) return false; + const declares = (path) => + Array.isArray(path) && path.some((keyframe) => keyframe?.title === title); + if (declares(recipe.cameraPath)) return true; + // A bootstrap recipe seeds legacy "Shot N" keyframes; the upgrade replaces + // them with the append recipe's bootstrap shots, which carry no source pack. + return SCENE_APPEND_RECIPES.some( + (append) => + append.legacySceneBootstrap?.targetSceneTitle === recipe.title && + declares(append.legacySceneBootstrap.cameraPath), ); } diff --git a/src/scenes/sceneTitleDisplay.test.mjs b/src/scenes/sceneTitleDisplay.test.mjs index 604e01c49..758800137 100644 --- a/src/scenes/sceneTitleDisplay.test.mjs +++ b/src/scenes/sceneTitleDisplay.test.mjs @@ -4,6 +4,7 @@ import test from 'node:test'; import assert from 'node:assert/strict'; import { + SCENE_APPEND_RECIPES, SCENE_RECIPES, displaySceneTitle, displayShotTitle, @@ -141,3 +142,28 @@ test('the scene context of a shot carries its display title by provenance', asyn title, ); }); + +test('bootstrap shots of a built-in scene localize without a source pack', () => { + setLocale('ru'); + const append = SCENE_APPEND_RECIPES.find( + (recipe) => recipe.legacySceneBootstrap?.cameraPath?.length, + ); + if (!append) return; + const bootstrap = append.legacySceneBootstrap; + const scene = SCENE_RECIPES.find( + (recipe) => recipe.title === bootstrap.targetSceneTitle, + ); + if (!scene) return; + for (const { title } of bootstrap.cameraPath) { + // The upgrade copies these keyframes into the scene without sourcePackId. + assert.equal( + displayShotTitle(title, { id: 'shot-old', title }, { id: scene.id }), + displayShotTitle(title), + ); + // The same title in an operator's own scene stays as typed. + assert.equal( + displayShotTitle(title, { id: 'shot-user', title }, { id: 'scene-user' }), + title, + ); + } +}); From 6cf47c6ca84484b50c44d31a9b39495b3945b643 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 22:35:44 +0400 Subject: [PATCH 11/20] i18n(it): apply review round 3 Co-Authored-By: Claude Opus 5.5 --- docs/translations/it.md | 6 +- src/i18n/locales/it.json | 126 +++++++++++++++++++-------------------- 2 files changed, 67 insertions(+), 65 deletions(-) diff --git a/docs/translations/it.md b/docs/translations/it.md index 610d85b01..58d7bb427 100644 --- a/docs/translations/it.md +++ b/docs/translations/it.md @@ -13,11 +13,11 @@ Translation source: abiyeenzo (#912). - Short labels, chips and HUD readouts stay short. A standard abbreviation with a period beats a wrapped line: REGOLAZ., RILEV., INCL., ALT., VEL., STIM., PROIEZ., ESP.; PREC / SUCC for PREV / NEXT and PREVIOUS / NEXT. - The HUD codes HDG, BRG, CRS, FOV and DEST stay in English, as in cockpit avionics. RANGE is «PORTATA». Words used in a sentence are translated: heading → «prua» (aircraft, ships) or «direzione» (camera, buses, trams, trains), course → «rotta». - Keyboard keys stay in English: Space, Enter, Esc, Tab, Shift, Backspace, H, 1–9 («Tieni premuto Space per parlare», «Premi Enter per riprovare»). -- Decimal comma in numbers written in the text: «28,2710° N». Numbers formatted by the code follow `Intl` and need nothing. +- Decimal comma in numbers written in the text, magnitudes included: «28,2710° N», «M5,2». Numbers formatted by the code follow `Intl` and need nothing. - Amounts: thousands, millions and billions are written out or abbreviated in Italian, not with K/M/B: «{amount} mila $», «{amount} mln $», «{amount} mld $». - Units: km, m, km/h, m/s, kn (knots), ft (feet), h, min, s; in UPPERCASE text KM, KM/S, KT, FT, MIN, H. "m" is always metres, so minutes are «min» («5 min fa»). MW stays MW. `°` and `%` stay. - "ago" goes after the time: «{count} min fa». When a placeholder already holds a localized "ago" text (`{age}`, `{ago}`), do not add «fa» again. -- A feature name used as a sentence subject gets a head noun so the verb agrees: «La modalità Missioni spaziali isola…», «Il pannello Impostazioni provider è disattivato…», «Il livello {layer} è attivo…», «Lo strumento {name} è attivo…». A short card title with a placeholder name puts the state after a colon: «{label}: attivato». +- A feature name used as a sentence subject gets a head noun so the verb agrees: «La modalità Missioni spaziali isola…», «Il pannello Impostazioni provider è disattivato…», «Il livello {layer} è attivo…», «Lo strumento {name} è attivo…». A short card title with a placeholder name puts the state after a colon: «{label}: attivato». The same goes for a placeholder list of names: «Attivazione recente: {layers}». A count in a plain `t()` entry (no plural forms) that can be 1 goes after a label, so nothing has to agree with it: «Record accettati: {accepted} su {raw}». - English loanwords that Italian UIs use as they are stay in English: feed, live, cockpit, briefing, preset, overlay, layout, snapshot, tile, provider, timeout, payload, bloom, scope. ## Plurals @@ -62,9 +62,11 @@ The `many` form is the `other` text with «di» after the number when a noun fol | mapped / observed | mappato / osservato | | camera (view) / camera, CCTV camera | camera / telecamera, telecamera CCTV | | earthquake / active fire / fire perimeter | terremoto / incendio attivo / perimetro dell'incendio | +| lightning strike / cloud (cover, %) | fulmine / nuvole («non singoli fulmini», «20% di nuvole») | | incident (wildfire, Type N) / scene incident | evento (Evento di tipo N, Incendio senza nome) / evento | | trigger record (USGS card) / OPEN SOURCE link | scheda / APRI LA FONTE | | advisory (NHC/CPHC cyclone) / cone | bollettino / cono di incertezza | +| forecast lead hours (cyclone points) | scadenze di previsione in ore | | radio station / broadcaster | stazione radio / emittente | | CH (radio channel readout) | CH (unchanged) | | road / flow (traffic) | strada / flusso | diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index ce5f7da1d..cdfd7ae98 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -148,7 +148,7 @@ "Rasuwagadhi witness": "Testimone a Rasuwagadhi", "Open original source for {source}; capture time unverified": "Apri la fonte originale per {source}; ora di acquisizione non verificata", "Historical reference and post-event image divider": "Divisore tra immagine storica di riferimento e immagine successiva all'evento", - "A historical reference {before} percent, B post-event {after} percent": "A riferimento storico {before} percento, B dopo l'evento {after} percento", + "A historical reference {before} percent, B post-event {after} percent": "A riferimento storico {before} per cento, B dopo l'evento {after} per cento", "■ RELEASE CAMERA": "■ RILASCIA LA CAMERA", "Seek Nepal scene clock": "Scorri l'orologio della scena in Nepal", "NEPAL SCENE CLOCK": "OROLOGIO SCENA NEPAL", @@ -176,7 +176,7 @@ "Play reconstruction": "Riproduci la ricostruzione", "Load previous scene shot": "Carica lo scatto precedente della scena", "Load next scene shot": "Carica lo scatto successivo della scena", - "SCHEMATIC CORRIDOR, NOT MODELED ARRIVAL TIME.": "CORRIDOIO SCHEMATICO, NON UN TEMPO DI ARRIVO MODELLATO.", + "SCHEMATIC CORRIDOR, NOT MODELED ARRIVAL TIME.": "CORRIDOIO SCHEMATICO: TEMPI DI ARRIVO NON MODELLATI.", "Rasuwa · 26 Aug 2026": "Rasuwa · 26 ago 2026", "Event reconstruction": "Ricostruzione dell'evento", "BHOTE KOSHI FLOOD INCIDENT": "ALLUVIONE DEL BHOTE KOSHI", @@ -184,7 +184,7 @@ "USGS INITIAL REPORT": "RAPPORTO INIZIALE USGS", "26 AUG 2026 · 08:37 NPT": "26 AGO 2026 · 08:37 NPT", "28.2710° N · 85.5150° E": "28,2710° N · 85,5150° E", - "INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "INIZIALE M4.4 · RICLASSIFICATO FRANA M5.2", + "INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "INIZIALE M4,4 · RICLASSIFICATO COME FRANA M5,2", "USGS EVENT us7000tbwb · OPEN SOURCE": "EVENTO USGS us7000tbwb · APRI LA FONTE", "Open the USGS initial report for the 26 August 2026 Nepal landslide": "Apri il rapporto iniziale USGS sulla frana del 26 agosto 2026 in Nepal", "Show the Nepal context callout without a border or country fill": "Mostra il riquadro di contesto sul Nepal senza confine né riempimento del paese", @@ -235,7 +235,7 @@ "That {format} file could not be read.": "Impossibile leggere quel file {format}.", "That file has {count} map objects; the limit is {limit}.": "Quel file ha {count} oggetti sulla mappa; il limite è {limit}.", "Ground heights could not be read. Try that file again.": "Impossibile leggere le quote del terreno. Riprova con quel file.", - "That file has invalid point graphics.": "Quel file ha grafiche dei punti non valide.", + "That file has invalid point graphics.": "Quel file ha simboli dei punti non validi.", "Overpass rate-limited": "Overpass ha limitato le richieste", "Overpass timed out": "Overpass è andato in timeout", "Overpass could not complete the query": "Overpass non ha potuto completare la query", @@ -244,8 +244,8 @@ "Overpass temporarily unavailable": "Overpass temporaneamente non disponibile", "Retrying mapped sites…": "Nuovo tentativo sui siti mappati…", "Fetching mapped sites…": "Ricerca dei siti mappati…", - "{reason} — retrying in {seconds}s": "{reason} — nuovo tentativo tra {seconds}s", - "{reason} — retry pending": "{reason} — nuovo tentativo in sospeso", + "{reason} — retrying in {seconds}s": "{reason}: nuovo tentativo tra {seconds}s", + "{reason} — retry pending": "{reason}: nuovo tentativo in sospeso", "Zoom in to search mapped installations": "Ingrandisci per cercare le installazioni mappate", "Showing cached mapped sites": "Siti mappati in cache", "Mapped sites not loaded": "Siti mappati non caricati", @@ -271,7 +271,7 @@ "NAV": "NAV", "GNSS navigation — GPS, GLONASS, Galileo": "Navigazione GNSS — GPS, GLONASS, Galileo", "GEO": "GEO", - "Geostationary belt — comms and weather, fixed over the equator": "Fascia geostazionaria — comunicazioni e meteo, fissi sopra l'equatore", + "Geostationary belt — comms and weather, fixed over the equator": "Fascia geostazionaria — satelliti per comunicazioni e meteo, fissi sopra l'equatore", "VISUAL": "VISIBILI", "Brightest naked-eye objects — CelesTrak visual group": "Oggetti più luminosi a occhio nudo — gruppo visual di CelesTrak", "COMMS": "TLC", @@ -286,9 +286,9 @@ "PILOT": "PILOTINA", "SAR": "SAR", "TUG": "RIMORCHIATORE", - "PORT TENDER": "TENDER PORTO", + "PORT TENDER": "TENDER PORTUALE", "ANTI-POLLUTION": "ANTINQUINAMENTO", - "LAW ENFORCE": "FORZE ORDINE", + "LAW ENFORCE": "FORZE DELL'ORDINE", "MEDICAL": "MEDICA", "HIGH-SPEED": "ALTA VELOCITÀ", "PASSENGER": "PASSEGGERI", @@ -361,7 +361,7 @@ "Provider Settings answers only the machine running the server": "Il pannello Impostazioni provider risponde solo alla macchina su cui gira il server", "Provider Settings answers only local hostnames": "Il pannello Impostazioni provider risponde solo a nomi host locali", "Provider Settings requires an exact local Origin": "Il pannello Impostazioni provider richiede un'Origin locale esatta", - "Unrecognized Origin refused": "Origin non riconosciuta rifiutata", + "Unrecognized Origin refused": "Origin non riconosciuta: richiesta rifiutata", "Cross-origin requests are refused": "Le richieste cross-origin sono rifiutate", "Content-Type must be application/json": "Content-Type deve essere application/json", "Method not allowed": "Metodo non consentito", @@ -393,7 +393,7 @@ "Optional paid token — public access works without one": "Token a pagamento opzionale: l'accesso pubblico funziona anche senza", "Free key — register, paste, done": "Chiave gratuita: registrati, incolla, fatto", "browser-side": "lato browser", - "This key runs in the browser by design — restrict it at the provider (see SECURITY.md)": "Questa chiave gira nel browser per progettazione: limitala presso il provider (vedi SECURITY.md)", + "This key runs in the browser by design — restrict it at the provider (see SECURITY.md)": "Questa chiave viene usata nel browser per scelta progettuale: imposta le restrizioni presso il provider (vedi SECURITY.md)", "configured externally": "configurata esternamente", "Supplied by your environment, Keychain, or launcher — change it where it was set": "Fornita dal tuo ambiente, dal Portachiavi o dal launcher: cambiala dove è stata impostata", "MANAGE ↗": "GESTISCI ↗", @@ -473,8 +473,8 @@ "many": "{count} vicine", "other": "{count} vicine" }, - "retrying mapped ALPR cameras": "nuovo tentativo telecamere ALPR mappate", - "loading mapped ALPR cameras": "caricamento telecamere ALPR mappate", + "retrying mapped ALPR cameras": "nuovo tentativo sulle telecamere ALPR mappate", + "loading mapped ALPR cameras": "caricamento delle telecamere ALPR mappate", "No ALPR data for this area — US and Canada only": "Nessun dato ALPR per quest'area: solo USA e Canada", "Zoom in to load mapped cameras": "Ingrandisci per caricare le telecamere mappate", "Showing cached locations": "Posizioni in cache", @@ -489,7 +489,7 @@ "CONTEXT READY": "CONTESTO PRONTO", "GLOBAL CONTEXT OFF": "CONTESTO GLOBALE OFF", "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "SELEZIONA UN VOLO, UNA NAVE O UN'INSTALLAZIONE MAPPATA", - "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "ATTIVA PER CARICARE LA PROSSIMITÀ OSSERVATA / MAPPATA", + "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "ATTIVA PER CARICARE I DATI OSSERVATI / MAPPATI NELLE VICINANZE", "Unavailable": "Non disponibile", "Focus {label}": "Inquadra {label}", "Global Context navigation": "Navigazione Contesto globale", @@ -525,7 +525,7 @@ "⚠️ Not renting": "⚠️ Noleggio non attivo", "⚠️ Not returning": "⚠️ Restituzione non attiva", "HDG {value}° (ESTIMATED)": "HDG {value}° (STIMATO)", - "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} TELECAMERE IN ATTESA · NESSUNA TELECAMERA SELEZIONATA · CLIC SU UNA TELECAMERA PER ATTIVARLA", + "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "TELECAMERE IN ATTESA: {count} · NESSUNA TELECAMERA SELEZIONATA · CLIC SU UNA TELECAMERA PER ATTIVARLA", "No cameras available in catalog.": "Nessuna telecamera disponibile nel catalogo.", "{city} CCTV": "CCTV {city}", "FOV {value}° (DATASHEET)": "FOV {value}° (SCHEDA TECNICA)", @@ -568,13 +568,13 @@ "Advisories unavailable": "Bollettini non disponibili", "Cyclones · NHC / CPHC": "Cicloni · NHC / CPHC", "Atlantic · E/C Pacific": "Atlantico · Pacifico E/C", - "{storms} · {name} selected": "{storms} · {name} selezionata", + "{storms} · {name} selected": "{storms} · selezione: {name}", "Official advisory ↗": "Bollettino ufficiale ↗", "Active NHC and CPHC cyclone advisories": "Bollettini attivi sui cicloni di NHC e CPHC", "Wind unavailable": "Vento non disponibile", "Advisory center / forecast track": "Centro del ciclone da bollettino / traccia prevista", "Center-track uncertainty cone": "Cono di incertezza della traccia del centro", - "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Seleziona una tempesta sulla mappa, o scegline una nell'elenco per selezionarla e spostare la camera. Fai clic su un punto vuoto della mappa per annullare la selezione. Contesto dai bollettini NOAA NHC/CPHC. Il cono descrive l'incertezza prevista sulla traccia del centro, non le dimensioni della tempesta né l'intera area di pericolo. Le etichette dei punti di previsione sono le ore di anticipo della fonte, non orari calcolati dall'emissione del bollettino. La geometria segue la superficie; l'altezza non è la quota meteorologica. Consulta il bollettino ufficiale.", + "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Seleziona una tempesta sulla mappa, o scegline una nell'elenco per selezionarla e spostare la camera. Fai clic su un punto vuoto della mappa per annullare la selezione. Contesto dai bollettini NOAA NHC/CPHC. Il cono descrive l'incertezza prevista sulla traccia del centro, non le dimensioni della tempesta né l'intera area di pericolo. Le etichette dei punti di previsione indicano le scadenze di previsione in ore fornite dalla fonte, non orari calcolati dall'emissione del bollettino. La geometria segue la superficie; l'altezza non è la quota meteorologica. Consulta il bollettino ufficiale.", "DRIVE": "AUTO", "Drive": "In auto", "WALK": "A PIEDI", @@ -815,7 +815,7 @@ "ORBIT REPLAY · {mission}": "REPLAY ORBITA · {mission}", "PAUSED · {title}": "IN PAUSA · {title}", "UNSPECIFIED": "NON SPECIFICATO", - "+{count} additional payload records": "+{count} record payload aggiuntivi", + "+{count} additional payload records": "Record payload aggiuntivi: +{count}", "PAYLOAD DATA UNAVAILABLE": "DATI PAYLOAD NON DISPONIBILI", "{value} KM DOWNRANGE": "{value} KM DOWNRANGE", "POSITION UNAVAILABLE": "POSIZIONE NON DISPONIBILE", @@ -859,7 +859,7 @@ "Pause replay": "Metti in pausa il replay", "Cancel replay": "Annulla il replay", "EST. DOWNRANGE": "DOWNRANGE STIM.", - "PLANNED · ": "PIANIFICATO · ", + "PLANNED · ": "PREVISTA · ", "SUPPLIED TRAJECTORY POINTS": "PUNTI DI TRAIETTORIA FORNITI", "RECONSTRUCTED ESTIMATE": "STIMA RICOSTRUITA", "Replay the estimated ascent with a following camera": "Rivedi la salita stimata con una camera che segue il razzo", @@ -906,10 +906,10 @@ "${amount}K": "{amount} mila $", "${amount}M": "{amount} mln $", "${amount}B": "{amount} mld $", - "fire cause|Human": "Umana", - "fire cause|Natural": "Naturale", - "fire cause|Undetermined": "Indeterminata", - "fire cause|Unknown": "Sconosciuta", + "fire cause|Human": "umana", + "fire cause|Natural": "naturale", + "fire cause|Undetermined": "indeterminata", + "fire cause|Unknown": "sconosciuta", "fire behavior|Minimal": "Minimo", "fire behavior|Moderate": "Moderato", "fire behavior|Active": "Attivo", @@ -940,7 +940,7 @@ "Open {title} on InciWeb": "Apri {title} su InciWeb", "Perimeter source unavailable": "Fonte dei perimetri non disponibile", "Not contained or unknown": "Non contenuto o dato non disponibile", - "Under 50% contained": "Contenuto sotto il 50%", + "Under 50% contained": "Contenuto a meno del 50%", "50–99% contained": "Contenuto al 50–99%", "Fully contained": "Completamente contenuto", "Colour shows reported containment. Perimeters are simplified to about 100 m.": "Il colore indica il contenimento riportato. I perimetri sono semplificati a circa 100 m.", @@ -996,8 +996,8 @@ "World": "World", "overview": "panoramica", "cloud unknown": "nuvolosità sconosciuta", - "{percent}% scene cloud": "{percent}% di nubi nella scena", - "{min}–{max}% scene cloud": "{min}–{max}% di nubi nella scena", + "{percent}% scene cloud": "{percent}% di nuvole nella scena", + "{min}–{max}% scene cloud": "{min}–{max}% di nuvole nella scena", "Comparison in use by another scene": "Confronto in uso da un'altra scena", "Esri map unavailable · no swipe": "Mappa Esri non disponibile · niente confronto", "Swipe needs a globe map": "Il confronto richiede una mappa del globo", @@ -1016,7 +1016,7 @@ "Landsat 8/9": "Landsat 8/9", "Landsat 8/9 via HLS": "Landsat 8/9 tramite HLS", "Daily overview": "Panoramica giornaliera", - "Box edges must be finite": "I bordi del riquadro devono essere finiti", + "Box edges must be finite": "Le coordinate dei bordi del riquadro devono essere numeri finiti", "Longitudes must be within ±180°": "Le longitudini devono essere entro ±180°", "Select one side of the dateline": "Seleziona un solo lato della linea del cambio di data", "Box must enclose an area": "Il riquadro deve racchiudere un'area", @@ -1092,9 +1092,9 @@ "UNAVAILABLE · {source} · Roads unavailable": "NON DISPONIBILE · {source} · Strade non disponibili", "Roads: {source}": "Strade: {source}", "TomTom roads unavailable while the traffic service is unreachable": "Strade TomTom non disponibili mentre il servizio traffico è irraggiungibile", - "Hybrid unavailable while the traffic service is unreachable": "Ibrido non disponibile mentre il servizio traffico è irraggiungibile", + "Hybrid unavailable while the traffic service is unreachable": "Modalità Ibrido non disponibile mentre il servizio traffico è irraggiungibile", "TomTom roads need a TomTom key": "Le strade TomTom richiedono una chiave TomTom", - "Hybrid needs a TomTom key": "Ibrido richiede una chiave TomTom", + "Hybrid needs a TomTom key": "La modalità Ibrido richiede una chiave TomTom", "Local surface still loading": "Superficie locale ancora in caricamento", "Partial coverage": "Copertura parziale", "Detailed roads unavailable": "Strade dettagliate non disponibili", @@ -1109,18 +1109,18 @@ "TomTom daily budget reached": "Budget giornaliero TomTom esaurito", "TomTom upstream unreachable": "Servizio TomTom irraggiungibile", "TomTom flow unavailable": "Flusso TomTom non disponibile", - "SIMULATED — {reason}": "SIMULATO — {reason}", + "SIMULATED — {reason}": "SIMULATO: {reason}", "Syncing flow · Roads: {source}": "Sincronizzazione flusso · Strade: {source}", "LIVE · Roads: {source} · Roads without flow hidden": "LIVE · Strade: {source} · Strade senza flusso nascoste", "LIVE · Roads: {source} · No flow roads in view": "LIVE · Strade: {source} · Nessuna strada con flusso in vista", "LIVE · Roads: {source} · Flow {percent}%": "LIVE · Strade: {source} · Flusso {percent}%", "SIMULATED · Roads: {source} · Flow {percent}%": "SIMULATO · Strade: {source} · Flusso {percent}%", "Syncing flow · Roads: OpenStreetMap · Flow: TomTom · Unmatched: simulated": "Sincronizzazione flusso · Strade: OpenStreetMap · Flusso: TomTom · Non abbinate: simulate", - "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov · Unmatched: simulated": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop · Non abbinate: simulate", - "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop", + "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov · Unmatched: simulated": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop. · Non abbinate: simulate", + "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop.", "SIMULATED · Roads: OpenStreetMap · Flow: TomTom (no matches)": "SIMULATO · Strade: OpenStreetMap · Flusso: TomTom (nessuna corrispondenza)", - "SIMULATED — traffic service unreachable": "SIMULATO — servizio traffico irraggiungibile", - "SIMULATED — add TomTom key for live": "SIMULATO — aggiungi la chiave TomTom per il live", + "SIMULATED — traffic service unreachable": "SIMULATO: servizio traffico irraggiungibile", + "SIMULATED — add TomTom key for live": "SIMULATO: aggiungi la chiave TomTom per il live", "OpenFreeMap tiles rate-limited": "Tile OpenFreeMap con limite di richieste", "OpenFreeMap tiles timed out": "Tile OpenFreeMap in timeout", "OpenFreeMap tiles unavailable": "Tile OpenFreeMap non disponibili", @@ -1209,7 +1209,7 @@ "loading": "caricamento", "Observation: unavailable": "Osservazione: non disponibile", "Contiguous US · gaps ≠ no rain": "USA contigui · lacune ≠ assenza di pioggia", - "Americas + Pacific · not individual strikes": "Americhe + Pacifico · non singole fulminazioni", + "Americas + Pacific · not individual strikes": "Americhe + Pacifico · non singoli fulmini", "Color: strikes/km²/min ×10³": "Colore: fulmini/km²/min ×10³", "60°S–60°N · typically 2–3 h delayed": "60°S–60°N · di solito 2–3 h di ritardo", "North America · infrared imagery": "Nord America · immagini all'infrarosso", @@ -1231,11 +1231,11 @@ "Hourly global mosaic; usually 2–3 hours delayed": "Mosaico globale orario; di solito 2–3 ore di ritardo", "GOES regional clouds; approximately 5-minute updates": "Nuvole regionali GOES; aggiornamenti circa ogni 5 minuti", "Clouds only": "Solo nuvole", - "Apply the full cloud brightness key; 100% filter strength": "Applica l'intera scala di luminosità delle nuvole; intensità del filtro 100%", + "Apply the full cloud brightness key; 100% filter strength": "Applica al massimo il filtro basato sulla luminosità delle nuvole; intensità del filtro 100%", "Full": "Completa", "Show the complete infrared image; 0% filter strength": "Mostra l'intera immagine all'infrarosso; intensità del filtro 0%", "Soft": "Tenue", - "Vivid": "Vivido", + "Vivid": "Vivida", "Image opacity; does not alter the observed values": "Opacità dell'immagine; non altera i valori osservati", "View US radar": "Vedi il radar USA", "View Americas & Pacific": "Vedi Americhe e Pacifico", @@ -1244,7 +1244,7 @@ "{value} dBZ radar reflectivity": "{value} dBZ di riflettività radar", "STALE · cached source metadata": "OBSOLETO · metadati della fonte in cache", "Map center is outside source coverage": "Il centro della mappa è fuori dalla copertura della fonte", - "NOAA/NWS 15-minute lightning density derived from Vaisala NLDN/GLD360. Coverage 110°E across the Pacific/Americas to 0°, 25°S–80°N. Not a live strike count, global coverage or a safety warning.": "Densità di fulmini a 15 minuti NOAA/NWS derivata da Vaisala NLDN/GLD360. Copertura da 110°E attraverso il Pacifico e le Americhe fino a 0°, 25°S–80°N. Non è un conteggio live delle fulminazioni, né una copertura globale né un avviso di sicurezza.", + "NOAA/NWS 15-minute lightning density derived from Vaisala NLDN/GLD360. Coverage 110°E across the Pacific/Americas to 0°, 25°S–80°N. Not a live strike count, global coverage or a safety warning.": "Densità di fulmini a 15 minuti NOAA/NWS derivata da Vaisala NLDN/GLD360. Copertura da 110°E attraverso il Pacifico e le Americhe fino a 0°, 25°S–80°N. Non è un conteggio live dei fulmini, né una copertura globale né un avviso di sicurezza.", "NOAA MRMS radar echoes indicate precipitation patterns, not rain rate, a storm warning or a future forecast. Native source approximately 1 km; display is limited to level 6. Frames use exact advertised observation times.": "Gli echi radar NOAA MRMS indicano la distribuzione delle precipitazioni, non l'intensità della pioggia, un avviso di tempesta o una previsione. Risoluzione nativa della fonte circa 1 km; la visualizzazione è limitata al livello 6. I fotogrammi usano gli orari esatti di osservazione dichiarati.", "GOES-19/18 longwave infrared Band 14 regional; NESDIS global longwave mosaic. Clouds only dims everything but bright, cold cloud tops; a brightness filter, not a cloud mask. Coverage and freshness differ by region.": "Infrarosso a onda lunga GOES-19/18 Banda 14 regionale; mosaico globale a onda lunga NESDIS. Solo nuvole attenua tutto tranne le sommità nuvolose fredde e luminose; è un filtro di luminosità, non una maschera delle nuvole. Copertura e aggiornamento variano per regione.", "REGION": "REGIONE", @@ -1457,7 +1457,7 @@ }, "{scene} / {pack}: {status}. File: {path}. {attribution} · {license}": "{scene} / {pack}: {status}. File: {path}. {attribution} · {license}", "Unavailable layers: {layers}": "Livelli non disponibili: {layers}", - "Uses registered content or linked media. Those external files are not included in a scene bundle. Their original notices still apply.": "Usa contenuti registrati o media collegati. Quei file esterni non sono inclusi nel pacchetto della scena. Valgono ancora le loro note originali.", + "Uses registered content or linked media. Those external files are not included in a scene bundle. Their original notices still apply.": "La scena usa contenuti registrati o media collegati. Quei file esterni non sono inclusi nel pacchetto della scena. Restano valide le loro note legali originali.", "{bytes} bundled bytes verified. Files stay in memory for this session. Reimport the bundle after reloading the app.": "{bytes} byte nel pacchetto verificati. I file restano in memoria per questa sessione. Reimporta il pacchetto dopo aver ricaricato l'app.", "Review scene import": "Rivedi l'importazione della scena", "Nothing is loaded or changed until you apply this file.": "Nulla viene caricato o modificato finché non applichi questo file.", @@ -1471,9 +1471,9 @@ "Anchors and data packs": "Ancore e pacchetti dati", "Shot camera, timing, packs and actions": "Camera, tempi, pacchetti e azioni dello scatto", "New anchor ID": "ID nuova ancora", - "Capture camera as anchor": "Cattura la camera come ancora", + "Capture camera as anchor": "Salva la posizione della camera come ancora", "Anchor added to draft": "Ancora aggiunta alla bozza", - "Set move start to current camera": "Imposta l'inizio del movimento sulla camera attuale", + "Set move start to current camera": "Usa la vista attuale come inizio del movimento", "Move added to draft; destination remains the shot camera": "Movimento aggiunto alla bozza; la destinazione resta la camera dello scatto", "Use ordinary flight": "Usa il volo normale", "Invalid shot JSON": "JSON dello scatto non valido", @@ -1646,7 +1646,7 @@ "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.": "Scorri automaticamente le pagine del briefing ogni 9 secondi (Segnali → Notizie → Locale). Lo scorrimento si interrompe quando passi sul pannello o lo selezioni. I dati dei segnali live si aggiornano comunque di continuo.", "ACQUIRING REGIONAL NEWS": "ACQUISIZIONE NOTIZIE REGIONALI", "REGIONAL NEWS UNAVAILABLE": "NOTIZIE REGIONALI NON DISPONIBILI", - "RESOLVING REGION": "RISOLUZIONE REGIONE", + "RESOLVING REGION": "IDENTIFICAZIONE REGIONE", "REGION UNAVAILABLE": "REGIONE NON DISPONIBILE", "NO RECENT LOCATION MATCHES": "NESSUNA CORRISPONDENZA RECENTE PER POSIZIONE", "{domain} · {age}": "{domain} · {age}", @@ -1661,7 +1661,7 @@ "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "ATTIVA IL CONTESTO GLOBALE PER I PING DI PROSSIMITÀ", "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "CONTATTO PERSO · ULTIMA LETTURA NOTA · NON È UN VIA LIBERA", "CONTACT LOST · {subject}": "CONTATTO PERSO · {subject}", - "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "IL SOGGETTO HA LASCIATO IL FEED · LETTURA ALL'ULTIMO VALORE NOTO", + "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "IL SOGGETTO NON È PIÙ NEL FEED · LETTURA FERMA ALL'ULTIMO VALORE NOTO", "{cohort} · {contact}": "{cohort} · {contact}", "NO AVAILABLE EXAMPLE": "NESSUN ESEMPIO DISPONIBILE", "{cohort}, Unavailable": "{cohort}, non disponibile", @@ -1699,7 +1699,7 @@ "Noir": "Noir", "Snow": "Neve", "Current cockpit vision style: {style}. Activate for next style.": "Stile di visione attuale del cockpit: {style}. Attiva per lo stile successivo.", - "Current style: {style} — click for next": "Stile attuale: {style} — clic per il successivo", + "Current style: {style} — click for next": "Stile attuale: {style}. Clic per il successivo", "Collapse Contact panel": "Comprimi il pannello Contatto", "Expand Contact panel": "Espandi il pannello Contatto", "Collapse contact panel": "Comprimi pannello contatto", @@ -1848,7 +1848,7 @@ "{state} · {source} · {detail}": "{state} · {source} · {detail}", "never": "mai", "{source} · {loadingLabel}": "{source} · {loadingLabel}", - "{accepted} of {raw} records accepted": "{accepted} record accettati su {raw}", + "{accepted} of {raw} records accepted": "Record accettati: {accepted} su {raw}", "incomplete snapshot": "snapshot incompleto", "{state} · {source} · {detail} · {ago}": "{state} · {source} · {detail} · {ago}", "{state} · {source} · {ago} · retrying in {seconds}s": "{state} · {source} · {ago} · nuovo tentativo tra {seconds}s", @@ -1963,7 +1963,7 @@ "RECONCILE": "RICONCILIA", "DISABLE": "DISATTIVA", "ENABLE": "ATTIVA", - "Reconcile Radio — lifecycle uncertain": "Riconcilia la Radio — ciclo di vita incerto", + "Reconcile Radio — lifecycle uncertain": "Riconcilia la Radio: ciclo di vita incerto", "Disable Radio": "Disattiva la Radio", "Enable Radio": "Attiva la Radio", "{category} ({count})": "{category} ({count})", @@ -2036,8 +2036,8 @@ "coverage|partial": "parziale", "unknown": "sconosciuta", "no imagery": "nessuna immagine", - "{percent}% cloud": "{percent}% di nubi", - "{min}–{max}% cloud": "{min}–{max}% di nubi", + "{percent}% cloud": "{percent}% di nuvole", + "{min}–{max}% cloud": "{min}–{max}% di nuvole", "NO BOX": "NESSUN RIQUADRO", "SEARCHING": "RICERCA", "{count} DAYS": { @@ -2066,7 +2066,7 @@ "Drag a box on the map (Esc cancels)": "Trascina un riquadro sulla mappa (Esc annulla)", "USE VIEW": "USA VISTA", "Use the current view as the box": "Usa la vista attuale come riquadro", - "Forget the box and its images": "Dimentica il riquadro e le sue immagini", + "Forget the box and its images": "Cancella il riquadro e le sue immagini", "START HERE": "INIZIA DA QUI", "Checking": "Verifica", "PREVIEW": "ANTEPRIMA", @@ -2109,7 +2109,7 @@ "basemap": "mappa di base", "Recent imagery against the basemap divider": "Divisore tra immagini recenti e mappa di base", "Recent imagery A and B divider": "Divisore tra immagini recenti A e B", - "{before} {left} percent, {after} {right} percent": "{before} {left} percento, {after} {right} percento", + "{before} {left} percent, {after} {right} percent": "{before} {left} per cento, {after} {right} per cento", "Export failed · {error}": "Esportazione non riuscita · {error}", "Scene action failed": "Azione sulla scena non riuscita", "New scene name": "Nome della nuova scena", @@ -2148,7 +2148,7 @@ "Shared {subject} could not be restored — feed unavailable": "Impossibile ripristinare la condivisione di {subject}: feed non disponibile", "Shared {subject} is unavailable": "La condivisione di {subject} non è disponibile", "{id} isn't reporting now — showing where it was last seen": "{id} non sta trasmettendo ora: viene mostrata l'ultima posizione nota", - "{id} isn't reporting now — showing where it was at {time}": "{id} non sta trasmettendo ora: viene mostrata la posizione alle {time}", + "{id} isn't reporting now — showing where it was at {time}": "{id} non sta trasmettendo ora: viene mostrata l'ultima posizione nota ({time})", "This share link can't be opened": "Impossibile aprire questo link di condivisione", "Shared vessel is unavailable": "La nave condivisa non è disponibile", "ACQUIRING": "ACQUISIZIONE", @@ -2414,10 +2414,10 @@ "standard": "standard", "mini": "mini", "COST UNKNOWN": "COSTO SCONOSCIUTO", - "ChatGPT OAuth session: {responses} response(s), {input} input and {output} output tokens, {captions} caption transcription(s) reported.": "Sessione ChatGPT OAuth: {responses} risposta/e, {input} token di input e {output} di output, {captions} trascrizione/i di sottotitoli riportate.", + "ChatGPT OAuth session: {responses} response(s), {input} input and {output} output tokens, {captions} caption transcription(s) reported.": "Sessione ChatGPT OAuth. Risposte: {responses}; token di input: {input}; token di output: {output}; trascrizioni dei sottotitoli riportate: {captions}.", "USD cost and the API spend cap are unavailable for this auth mode.": "Il costo in USD e il limite di spesa API non sono disponibili per questa modalità di autenticazione.", "Usage is incomplete because a response was still in flight when the session ended.": "L'utilizzo è incompleto perché una risposta era ancora in corso quando la sessione è terminata.", - "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Costo stimato della sessione su {modelId}: {responses} risposta/e. Avviso a {warn}, la sessione termina a {cap}.", + "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Costo stimato della sessione su {modelId}. Risposte: {responses}. Avviso a {warn}; la sessione termina a {cap}.", "Estimate is incomplete — a response was still in flight when the session ended, so its usage was never reported.": "Stima incompleta: una risposta era ancora in corso quando la sessione è terminata, quindi il suo utilizzo non è mai stato riportato.", "STANDARD": "STANDARD", "{tier} applies next session": "{tier} si applica alla prossima sessione", @@ -2519,16 +2519,16 @@ "At least {items}": "Almeno {items}", "{items} {scope}": "{items} {scope}", "last 24 h": "ultime 24 h", - "past 30 d and upcoming": "ultimi 30 g e prossimi", + "past 30 d and upcoming": "ultimi 30 g e in programma", "the flights layer loads by viewport": "il livello voli si carica in base alla vista", "distance is ground distance, not overhead": "la distanza è misurata al suolo fino al punto subsatellitare, non fino al satellite", "the count is a lower bound because at least one layer reached its retained limit.": "il conteggio è un limite inferiore perché almeno un livello ha raggiunto il suo limite di conservazione.", "{label} off": "{label}: disattivato", - "{label} loading": "{label} in caricamento", - "{label} error": "{label} in errore", - "counted the first {returned} loaded records": "contati i primi {returned} record caricati", - "counted {returned} of {total} loaded records": "contati {returned} di {total} record caricati", - "{layers} just turned on — still loading, counts will rise": "{layers} appena attivati: ancora in caricamento, i conteggi aumenteranno", + "{label} loading": "{label}: in caricamento", + "{label} error": "{label}: errore", + "counted the first {returned} loaded records": "conteggio limitato ai primi record caricati: {returned}", + "counted {returned} of {total} loaded records": "record conteggiati: {returned} su {total} caricati", + "{layers} just turned on — still loading, counts will rise": "Attivazione recente: {layers}. Caricamento ancora in corso: i conteggi aumenteranno", "Contacts panel snapshot at {time} — the same retained cohort supplies the card, speech, and follow-up memory": "Snapshot del pannello Contatti alle {time}: lo stesso gruppo conservato fornisce la scheda, il parlato e la memoria per le domande successive", "Contacts panel snapshot — the same retained cohort supplies the card, speech, and follow-up memory": "Snapshot del pannello Contatti: lo stesso gruppo conservato fornisce la scheda, il parlato e la memoria per le domande successive", "Fly below {km} km to a covered region": "Scendi sotto {km} km su una regione coperta", @@ -2630,7 +2630,7 @@ "many": "Segnati {count} di luoghi", "other": "Segnati {count} luoghi" }, - "Nothing marked": "Nulla di segnato", + "Nothing marked": "Nessun luogo segnato", "Not found: {places}": "Non trovati: {places}", "Tracing outlines": "Tracciamento dei contorni", "Frame flights": "Inquadra i voli", @@ -2706,7 +2706,7 @@ "Previous cockpit vision style": "Stile di visione precedente del cockpit", "Previous vision style": "Stile di visione precedente", "Current cockpit vision style: NORMAL. Activate for next style.": "Stile di visione attuale del cockpit: NORMALE. Attiva per lo stile successivo.", - "Current style: NORMAL — click for next": "Stile attuale: NORMALE — clic per il successivo", + "Current style: NORMAL — click for next": "Stile attuale: NORMALE. Clic per il successivo", "CURRENT": "ATTUALE", "Next cockpit vision style": "Stile di visione successivo del cockpit", "Next vision style": "Stile di visione successivo", @@ -2798,7 +2798,7 @@ "Open detailed Radio controls": "Apri i controlli Radio dettagliati", "Previous station": "Stazione precedente", "Next station": "Stazione successiva", - "Compact Radio volume": "Volume Radio compatto", + "Compact Radio volume": "Volume Radio (controlli compatti)", "Expand panel": "Espandi pannello", "Context mode": "Modalità contesto", "CONTACTS": "CONTATTI", @@ -2810,7 +2810,7 @@ "SEARCH NEARBY SITES": "CERCA SITI VICINI", "Reclassify tracked contact as TR-3B": "Riclassifica il contatto tracciato come TR-3B", "CONTACTS CONTEXT OFF": "CONTESTO CONTATTI DISATTIVATO", - "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "SELEZIONA CONTATTI PER CARICARE LA PROSSIMITÀ OSSERVATA / MAPPATA", + "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "SELEZIONA CONTATTI PER CARICARE I DATI OSSERVATI / MAPPATI NELLE VICINANZE", "Available Space Missions": "Missioni spaziali disponibili", "AVAILABLE MISSIONS": "MISSIONI DISPONIBILI", "SELECT A MISSION TO INSPECT": "SELEZIONA UNA MISSIONE DA ESAMINARE", From beacb6d9d3a5114256e3ff663a7323f39fe54beb Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 22:38:32 +0400 Subject: [PATCH 12/20] i18n(uk): apply review round 2 Co-Authored-By: Claude Opus 5.5 --- docs/translations/uk.md | 16 ++- src/i18n/locales/uk.json | 240 +++++++++++++++++++-------------------- 2 files changed, 133 insertions(+), 123 deletions(-) diff --git a/docs/translations/uk.md b/docs/translations/uk.md index 765be0233..fcd086f98 100644 --- a/docs/translations/uk.md +++ b/docs/translations/uk.md @@ -8,7 +8,7 @@ Translation source: meirm (#312). - Address the user with polite imperatives: «Натисніть», «Увімкніть», «Спробуйте ще раз». - Sentence case, not Title Case: "Live Flights" → «Рейси онлайн». -- Ukrainian norms, not Russian calques: «у радіусі», «за посиланням», «надто довгий», «потім», «вигляд» (view), «стеження» (tracking); prepositions alternate у/в and і/й by euphony. +- Ukrainian norms, not Russian calques: «у радіусі», «за посиланням», «надто довгий», «потім», «вигляд» (a camera view: «вигляд згори»), «стеження» (tracking); prepositions alternate у/в and і/й by euphony. - The apostrophe is always ʼ (U+02BC): обʼєкт, звʼязок, памʼять. Not ' or ’. - Quotes inside Ukrainian text are «ялинки»; a button or layer name inside a sentence goes in them: Увімкніть «Вуличні знімки». - In short labels, a standard abbreviation with a period beats a wrapped line: ПОПЕР., ДАЛЬН., КАЛІБР. @@ -35,7 +35,7 @@ A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: | layer / data layer | шар / шар даних | | feed | потік даних (short: потік) | | source / data source | джерело / джерело даних | -| LIVE (status) / live data | ОНЛАЙН / у реальному часі | +| LIVE (status) / live data | ОНЛАЙН / у реальному часі (status chip: ДАНІ ОНЛАЙН) | | SIMULATED / SYNTHETIC | ІМІТАЦІЯ | | stale / degraded / unavailable | застарів / з перебоями (chip: ПЕРЕБОЇ) / недоступний | | retry | повтор | @@ -48,7 +48,7 @@ A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: | launch (rocket) / space mission | запуск / космічна місія | | ascent (rocket) / booster FLIGHT {n} | виведення / ПОЛІТ {n} (not рейс) | | contact / tracking | контакт / стеження | -| installation, site / mapped | обʼєкт / нанесений на карту | +| installation, site / mapped | обʼєкт / нанесений (обʼєкт, контакт) | | camera / CCTV camera | камера / камера CCTV | | earthquake / active fire / fire perimeter | землетрус / активна пожежа / контур пожежі | | advisory (NHC/CPHC cyclone) | зведення | @@ -81,3 +81,13 @@ A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: | pitch (CCTV camera pose) | нахил | | traffic (road traffic layer) | дорожній рух | | phosphor (CRT) | люмінофор | +| view (map extent) / view centre / in view | видима область (карти) / центр карти / у кадрі | +| select (verb) / selected | вибрати / вибраний (not обрати) | +| ping (cockpit proximity contacts) | контакт | +| merge (turn-by-turn) / on ramp | влитися в потік / вʼїзд (off ramp: зʼїзд) | +| watch (Earth/Orbital Watch) | спостереження | +| timeout | тайм-аут | +| icon | значок (not іконка) | +| run (scene playback) / RUN LOG | відтворення / ЖУРНАЛ ВІДТВОРЕННЯ (запуск is a rocket launch) | +| Preview (voice panel replies) | відповіді | +| Marine (radio tag) / pleasure craft | море (not флот) / прогулянкове судно | diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 6467d0996..62a46aa89 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -57,7 +57,7 @@ "SOURCE GEOCONFIRMED": "МІСЦЕ ЗЙОМКИ ПІДТВЕРДЖЕНО", "2021 historical reference versus 2026 post-event imagery; changes are cumulative and include the July 2025 Rasuwagadhi flood. Schematic downstream progression, not modeled arrival time; not an official hazard model.": "Історичний знімок 2021 року порівняно зі знімками 2026 року після події; зміни показано сумарно за весь період, вони охоплюють і паводок у Rasuwagadhi в липні 2025 року. Схематичне просування вниз за течією, а не змодельований час добігання паводка; не офіційна модель небезпеки.", "Immediate collapse viewpoint": "Точка огляду біля місця обвалу", - "Collapse viewpoint": "Вигляд на обвал", + "Collapse viewpoint": "Точка огляду обвалу", "Debris-dammed lake": "Озеро, загачене уламками", "Dammed lake": "Загачене озеро", "Second landslide": "Другий зсув", @@ -78,7 +78,7 @@ "X embed could not load.": "Не вдалося завантажити вбудовування X.", "X embed timed out.": "Минув час очікування вбудовування X.", "UNAVAILABLE": "НЕДОСТУПНО", - "TIMEOUT": "ТАЙМАУТ", + "TIMEOUT": "ТАЙМ-АУТ", "BLOCKED": "ЗАБЛОКОВАНО", "SOURCE": "ДЖЕРЕЛО", "Facebook embed unavailable. The post may be private, removed, region-restricted, or blocked.": "Вбудовування Facebook недоступне. Допис може бути приватним, видаленим, обмеженим за регіоном або заблокованим.", @@ -101,15 +101,15 @@ "YOUTUBE {state} · OPEN ORIGINAL": "YOUTUBE {state} · ВІДКРИТИ ОРИГІНАЛ", "INITIATION": "ЗАРОДЖЕННЯ", "DAMMING": "ЗАГАТА", - "SECONDARY FAILURE": "ВТОРИННИЙ ПРОРИВ", + "SECONDARY FAILURE": "ПОВТОРНИЙ ЗСУВ", "BORDER ARRIVAL": "ДОСЯГНЕННЯ КОРДОНУ", "PROPAGATION": "ПОШИРЕННЯ", "DOWNSTREAM PASSAGE": "ПРОХОДЖЕННЯ ВНИЗ ЗА ТЕЧІЄЮ", "CONSEQUENCE": "НАСЛІДКИ", "DOWNSTREAM CONSEQUENCE": "НАСЛІДКИ НИЖЧЕ ЗА ТЕЧІЄЮ", "EVIDENCE": "СВІДЧЕННЯ", - "{year} HISTORICAL REFERENCE": "{year} ІСТОРИЧНИЙ ЗНІМОК", - "{year} POST-EVENT": "{year} ПІСЛЯ ПОДІЇ", + "{year} HISTORICAL REFERENCE": "ІСТОРИЧНИЙ ЗНІМОК {year}", + "{year} POST-EVENT": "ПІСЛЯ ПОДІЇ {year}", "{count} GEOLOCATED SOURCE-MAP PLACEMENTS": { "one": "{count} ГЕОПРИВʼЯЗАНА МІТКА НА КАРТІ ДЖЕРЕЛ", "few": "{count} ГЕОПРИВʼЯЗАНІ МІТКИ НА КАРТІ ДЖЕРЕЛ", @@ -127,7 +127,7 @@ "Close event layer": "Закрити шар події", "OBSERVED IMAGERY": "ФАКТИЧНІ ЗНІМКИ", "SCHEMATIC CORRIDOR": "СХЕМАТИЧНИЙ КОРИДОР", - "2021 HISTORICAL REFERENCE / 2026 POST-EVENT": "2021 ІСТОРИЧНИЙ ЗНІМОК / 2026 ПІСЛЯ ПОДІЇ", + "2021 HISTORICAL REFERENCE / 2026 POST-EVENT": "ІСТОРИЧНИЙ ЗНІМОК 2021 / ПІСЛЯ ПОДІЇ 2026", "Historical reference and post-event image split": "Порівняння історичного знімка та знімка після події", "RECONSTRUCTION CLOCK": "ЧАС РЕКОНСТРУКЦІЇ", "Schematic downstream progression": "Схематичне просування вниз за течією", @@ -257,14 +257,14 @@ "Naval base": "Військово-морська база", "Firing range": "Полігон", "Military land": "Військова територія", - "Mapped installation": "Обʼєкт на карті", + "Mapped installation": "Нанесений обʼєкт", "Military area": "Військова зона", "flight": "рейс", "military flight": "військовий рейс", "satellite": "супутник", "feed unavailable": "потік даних недоступний", "feed stale": "потік даних застарів", - "observed or mapped nearby context": "спостережений або нанесений контекст поблизу", + "observed or mapped nearby context": "дані про спостережені або нанесені обʼєкти поблизу", "no observed or mapped objects in current feeds": "немає спостережених або нанесених обʼєктів у поточних потоках даних", "Draw": "Малювання", "Directions": "Маршрути", @@ -280,12 +280,12 @@ "COMMS": "ЗВʼЯЗОК", "Broadband constellation shell — shown only in DENSE mode": "Оболонка широкосмугового угруповання — лише в режимі ЩІЛЬНО", "FISHING": "РИБАЛЬСЬКЕ", - "TOWING": "БУКСИРУВАННЯ", + "TOWING": "БУКСИРУВАЛЬНЕ", "DREDGER": "ЗЕМСНАРЯД", "DIVE OPS": "ВОДОЛАЗНЕ", "MILITARY": "ВІЙСЬКОВЕ", "SAILING": "ВІТРИЛЬНЕ", - "PLEASURE": "ПРОГУЛКОВЕ", + "PLEASURE": "ПРОГУЛЯНКОВЕ", "PILOT": "ЛОЦМАНСЬКЕ", "SAR": "РЯТУВАЛЬНЕ", "TUG": "БУКСИР", @@ -303,13 +303,13 @@ "Source configured; file checked when loaded": "Джерело налаштовано; файл буде перевірено під час завантаження", "Source unavailable": "Джерело недоступне", "ENVIRONMENTAL": "ДОВКІЛЛЯ", - "EARTH WATCH": "НАГЛЯД ЗА ЗЕМЛЕЮ", + "EARTH WATCH": "СПОСТЕРЕЖЕННЯ ЗА ЗЕМЛЕЮ", "ACTIVE EVENTS": "АКТИВНІ ПОДІЇ", "Starting live contacts…": "Запуск контактів у реальному часі…", "Opening space missions…": "Відкриття космічних місій…", "Scanning active events…": "Сканування активних подій…", "Live earthquakes and active fires, from USGS and NASA": "Землетруси в реальному часі й активні пожежі від USGS та NASA", - "It feels like a forbidden cockpit—then you realize the sources are public and the data is real.": "Немов заборонена кабіна — а потім ви усвідомлюєте: джерела публічні, а дані — справжні.", + "It feels like a forbidden cockpit—then you realize the sources are public and the data is real.": "Наче ви потрапили до секретної кабіни — а потім розумієте: джерела відкриті, а дані — справжні.", "Working…": "Працюємо…", "Could not open that mission{detail}. Retry or explore manually.": "Не вдалося відкрити цю місію{detail}. Повторіть спробу або дослідіть вручну.", "This browser is blocking storage, so that could not be saved.": "Цей браузер блокує сховище, тож зберегти не вдалося.", @@ -381,7 +381,7 @@ "{name} may only contain printable characters with no spaces": "{name}: допустимі лише друковані символи без пробілів", "{name} contains a character that is not valid in a key (#, quotes, $, \\, or backtick)": "{name}: недопустимий для ключа символ (#, лапки, $, \\ або зворотний апостроф)", "{name} is configured outside Provider Settings and can only be changed where it was set": "{name}: задано поза «Налаштуваннями постачальників», змінити його можна лише там, де його задали", - "The key was not saved: could not restrict the credential file to your account; nothing was saved": "Ключ не збережено: не вдалося закрити файл облікових даних від усіх, крім вашого облікового запису; нічого не збережено", + "The key was not saved: could not restrict the credential file to your account; nothing was saved": "Ключ не збережено: не вдалося обмежити доступ до файлу облікових даних лише вашим обліковим записом; нічого не збережено", "The key was not saved: the existing configuration could not be read, so nothing was changed": "Ключ не збережено: не вдалося прочитати поточну конфігурацію, тому нічого не змінено", "Could not write the {store} store": "Не вдалося записати сховище {store}", "Save failed ({status}).": "Не вдалося зберегти ({status}).", @@ -446,7 +446,7 @@ "many": "{count} станцій передають дані", "other": "{count} станції передають дані" }, - "Highest air-quality readings in view": "Найвищі показники якості повітря в полі зору", + "Highest air-quality readings in view": "Найвищі значення індексу якості повітря в кадрі", "Low": "Низький", "Low health risk": "Низький ризик для здоровʼя", "Moderate": "Помірний", @@ -496,14 +496,14 @@ "CONTEXT READY": "КОНТЕКСТ ГОТОВИЙ", "GLOBAL CONTEXT OFF": "ГЛОБАЛЬНИЙ КОНТЕКСТ ВИМК.", "SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "ВИБЕРІТЬ ЛІТАК, СУДНО ЧИ НАНЕСЕНИЙ ОБʼЄКТ", - "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "УВІМКНІТЬ, ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНЕ / НАНЕСЕНЕ ПОБЛИЗУ", + "ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "УВІМКНІТЬ, ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНІ / НАНЕСЕНІ ОБʼЄКТИ ПОБЛИЗУ", "Unavailable": "Недоступно", "Focus {label}": "Фокус: {label}", "Global Context navigation": "Навігація глобального контексту", - "Previous — prior visited contact in the 250 km window": "Назад — попередній відвіданий контакт у вікні 250 км", + "Previous — prior visited contact in the 250 km window": "Назад — попередній переглянутий контакт у радіусі 250 км", "PREVIOUS": "НАЗАД", "FOCUS": "ФОКУС", - "Next — nearest unvisited contact in the 250 km window": "Далі — найближчий невідвіданий контакт у вікні 250 км", + "Next — nearest unvisited contact in the 250 km window": "Далі — найближчий ще не переглянутий контакт у радіусі 250 км", "NEXT": "ДАЛІ", "Named areas ({n})": "Іменовані зони ({n})", "{distance} FLIGHT / VESSEL WINDOW": "РАДІУС РЕЙСІВ / СУДЕН {distance}", @@ -516,7 +516,7 @@ "BRG {value}°": "ПЕЛ. {value}°", "BRG —": "ПЕЛ. —", "CRS {value}°": "ШК {value}°", - "CURRENT VIEWPORT ONLY": "ЛИШЕ ПОТОЧНА ОБЛАСТЬ ОГЛЯДУ", + "CURRENT VIEWPORT ONLY": "ЛИШЕ ВИДИМА ОБЛАСТЬ", "WITHIN {km} KM": "У РАДІУСІ {km} КМ", "Flights": "Рейси", "Military flights": "Військові рейси", @@ -546,7 +546,7 @@ "VIEWSHED": "ЗОНА ВИДИМОСТІ", "CAL {value}": "КАЛІБР. {value}", "SRC {value}": "ДЖЕР. {value}", - "{value} CONTEXT": "{value} КОНТЕКСТ", + "{value} CONTEXT": "КОНТЕКСТ: {value}", "{spec} · SPECS: CCTV-DATABASE.COM": "{spec} · ХАРАКТЕРИСТИКИ: CCTV-DATABASE.COM", "Atlantic and eastern/central North Pacific; not worldwide cyclone coverage.": "Атлантика та східна/центральна частина північного Тихого океану; покриття циклонів не глобальне.", "Cyclone advisories unavailable": "Зведення про циклони недоступні", @@ -570,7 +570,7 @@ "other": "{count} активного шторму" }, "Position as of {time}": "Положення на {time}", - "Maximum sustained wind: {wind} · Pressure: {pressure}": "Макс. стійкий вітер: {wind} · Тиск: {pressure}", + "Maximum sustained wind: {wind} · Pressure: {pressure}": "Макс. стала швидкість вітру: {wind} · Тиск: {pressure}", "{name} · {classification} · Advisory {number} · issued {time}": "{name} · {classification} · Зведення № {number} · випущено {time}", "No active NHC/CPHC systems": "Немає активних систем NHC/CPHC", "Advisories unavailable": "Зведення недоступні", @@ -590,7 +590,7 @@ "BIKE": "ВЕЛО", "Bike": "Велосипедом", "rate limited": "перевищено ліміт запитів", - "routing service is rate limited": "сервіс маршрутизації перевищив ліміт запитів", + "routing service is rate limited": "перевищено ліміт запитів до сервісу маршрутизації", "route leg too long": "ділянка маршруту надто довга", "route too long": "маршрут надто довгий", "{error} — try again in a moment": "{error} — спробуйте ще раз трохи згодом", @@ -611,7 +611,7 @@ "fork direction|slightly right": "трохи правіше", "fork direction|sharply left": "лівіше", "fork direction|sharply right": "правіше", - "fork direction|straight": "прямо", + "fork direction|straight": "прямого напрямку", "lane direction|left": "ліву", "lane direction|right": "праву", "lane direction|slightly left": "ліву", @@ -646,16 +646,16 @@ "Keep {direction} at the fork": "На розвилці тримайтеся {direction}", "Continue at the fork onto {road}": "На розвилці продовжуйте рух на {road}", "Continue at the fork": "На розвилці продовжуйте рух", - "Merge {direction} onto {road}": "Перешикуйтеся {direction} на {road}", - "Merge {direction}": "Перешикуйтеся {direction}", + "Merge {direction} onto {road}": "Влийтеся в потік {direction} на {road}", + "Merge {direction}": "Влийтеся в потік {direction}", "Merge onto {road}": "Виїжджайте на {road}", - "maneuver|Merge": "Перешикуйтеся", - "Take the ramp on the {direction} onto {road}": "Зʼїжджайте {direction} на {road}", - "Take the ramp on the {direction}": "Зʼїжджайте {direction}", - "Take the ramp {direction} onto {road}": "Зʼїжджайте {direction} на {road}", - "Take the ramp {direction}": "Зʼїжджайте {direction}", - "Take the ramp onto {road}": "Скористайтеся зʼїздом на {road}", - "Take the ramp": "Скористайтеся зʼїздом", + "maneuver|Merge": "Влийтеся в потік", + "Take the ramp on the {direction} onto {road}": "Вʼїжджайте {direction} на {road}", + "Take the ramp on the {direction}": "Вʼїжджайте {direction}", + "Take the ramp {direction} onto {road}": "Вʼїжджайте {direction} на {road}", + "Take the ramp {direction}": "Вʼїжджайте {direction}", + "Take the ramp onto {road}": "Скористайтеся вʼїздом на {road}", + "Take the ramp": "Скористайтеся вʼїздом", "Take the exit on the {direction} onto {road}": "Поверніть на зʼїзд {direction} на {road}", "Take the exit on the {direction}": "Поверніть на зʼїзд {direction}", "Take the exit {direction} onto {road}": "Поверніть на зʼїзд {direction} на {road}", @@ -782,9 +782,9 @@ "Regional sample · 250 nm radius · cells from visited views over 30 min": "Регіональна вибірка · радіус 250 мор. миль · комірки з переглянутих ділянок карти за 30 хв", "Retrying automatically at {time} UTC": "Автоматичний повтор о {time} UTC", "Retrying automatically after provider cooldown": "Автоматичний повтор після паузи постачальника", - "Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Оновлюється автоматично після зсуву чи масштабування карти та раз на хвилину. Публічний потік даних охоплює коло радіусом 250 морських миль навколо центру вигляду; у разі віддалення карта не стає знімком усього світу. Порожні комірки — поза охопленням вибірки або з недостатньою кількістю спостережень.", + "Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Оновлюється автоматично після зсуву чи масштабування карти та раз на хвилину. Публічний потік даних охоплює коло радіусом 250 морських миль навколо центру карти; у разі віддалення карта не стає знімком усього світу. Порожні комірки — поза охопленням вибірки або з недостатньою кількістю спостережень.", "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Показник неточності = 100 × max(0, неточні − 1) / усього: один літак не враховується, тож це не пряма частка неточних літаків. Для комірки потрібно літаків: {aircraft} за {minutes} хв. Аномалії цілісності навігації не означають виявлення глушіння чи підміни сигналу.", - "GNSS snapshot needs a view anchor": "Для знімка GNSS потрібна опорна точка вигляду", + "GNSS snapshot needs a view anchor": "Для знімка GNSS потрібна опорна точка на карті", "GNSS feed rate limited (HTTP 429)": "Потік GNSS: перевищено ліміт запитів (HTTP 429)", "Malformed GNSS integrity snapshot": "Некоректний знімок цілісності GNSS", "GNSS integrity snapshot has no observation time": "У знімку цілісності GNSS немає часу спостереження", @@ -965,7 +965,7 @@ "Talk": "Розмовні", "Weather / Emergency": "Погода / Надзвичайні події", "Public Safety": "Громадська безпека", - "Aviation / Marine": "Авіація / Флот", + "Aviation / Marine": "Авіація / Море", "Traffic / Transit": "Рух / Транспорт", "Music": "Музика", "Other": "Інше", @@ -977,7 +977,7 @@ "radio|TALK": "РОЗМОВНІ", "radio|WEATHER": "ПОГОДА", "radio|SAFETY": "БЕЗПЕКА", - "radio|AIR / SEA": "АВІА / ФЛОТ", + "radio|AIR / SEA": "АВІА / МОРЕ", "radio|TRANSIT": "ТРАНСПОРТ", "radio|MUSIC": "МУЗИКА", "radio|OTHER": "ІНШЕ", @@ -1050,7 +1050,7 @@ "zoom in to a street to open {name}": "наблизьтеся до вулиці, щоб відкрити {name}", "loading coverage...": "завантаження покриття...", "No street-level imagery within {radius} m of that point": "У радіусі {radius} м від цієї точки вуличних знімків немає", - "No street-level imagery within {radius} m of the view centre": "У радіусі {radius} м від центру вигляду вуличних знімків немає", + "No street-level imagery within {radius} m of the view centre": "У радіусі {radius} м від центру карти вуличних знімків немає", "Zoom in to see street-level coverage": "Наблизьтеся, щоб побачити покриття вуличних знімків", "Point the camera at the ground for street-level coverage": "Спрямуйте камеру на землю, щоб побачити покриття вуличних знімків", "Coverage tile failed": "Не вдалося завантажити тайл покриття", @@ -1059,7 +1059,7 @@ "{name} street-level photo": "Вуличне фото {name}", "Previous photo in this sequence (←)": "Попереднє фото послідовності (←)", "Next photo in this sequence (→)": "Наступне фото послідовності (→)", - "Aim the middle of the view at a street to look for imagery there": "Наведіть центр вигляду на вулицю, щоб пошукати там знімки", + "Aim the middle of the view at a street to look for imagery there": "Розмістіть вулицю в центрі карти, щоб пошукати там знімки", "KEY REJECTED": "КЛЮЧ ВІДХИЛЕНО", "GOOGLE_MAPS_API_KEY is not set": "GOOGLE_MAPS_API_KEY не задано", "The Google Maps JavaScript API could not load": "Не вдалося завантажити Google Maps JavaScript API", @@ -1072,7 +1072,7 @@ "KartaView has no position for this photo": "KartaView не має координат цього фото", "The KartaView photo could not be loaded": "Не вдалося завантажити фото KartaView", "zoom in to see KartaView coverage": "наблизьтеся, щоб побачити покриття KartaView", - "no KartaView photos in view": "фото KartaView у полі зору немає", + "no KartaView photos in view": "фото KartaView у кадрі немає", "KartaView is rate-limiting requests — they resume on their own": "KartaView обмежує частоту запитів — вони відновляться самі", "KartaView’s photos here are archived and cannot be shown": "Фото KartaView тут в архіві, показати їх не можна", "KartaView did not filter this area in time — move the map to ask again": "KartaView не встиг відфільтрувати цю область — зсуньте карту, щоб запитати знову", @@ -1088,7 +1088,7 @@ "Coverage requests are being rate-limited — they resume on their own": "Запити покриття обмежено за частотою — вони відновляться самі", "The Panoramax photo could not be loaded": "Не вдалося завантажити фото Panoramax", "Panoramax is busy — coverage resumes on its own": "Panoramax перевантажений — покриття завантажиться само", - "no Panoramax photos in view": "фото Panoramax у полі зору немає", + "no Panoramax photos in view": "фото Panoramax у кадрі немає", "no Panoramax photos here match the filters": "тут немає фото Panoramax, що відповідають фільтрам", "Panoramax sent a map tile that could not be read": "Panoramax надіслав тайл карти, який не вдалося прочитати", "This Panoramax photo is no longer available": "Це фото Panoramax більше недоступне", @@ -1223,7 +1223,7 @@ "frame {index}/{total}": "кадр {index}/{total}", "loading": "завантаження", "Observation: unavailable": "Спостереження: недоступне", - "Contiguous US · gaps ≠ no rain": "Континентальні США · прогалини ≠ немає дощу", + "Contiguous US · gaps ≠ no rain": "48 суміжних штатів США · прогалини ≠ немає дощу", "Americas + Pacific · not individual strikes": "Америка + Тихий океан · не окремі розряди", "Color: strikes/km²/min ×10³": "Колір: розрядів/км²/хв ×10³", "60°S–60°N · typically 2–3 h delayed": "60° пд. ш.–60° пн. ш. · зазвичай затримка 2–3 год", @@ -1340,7 +1340,7 @@ "A location reading needs a loaded forecast and the Earth at the center of the view.": "Щоб отримати дані в точці, завантажте прогноз і розмістіть Землю в центрі екрана.", "Interpolated model forecast on an approximately 1° grid. Broad weather patterns, not a street-level measurement.": "Інтерпольований модельний прогноз на сітці близько 1°. Загальна погодна картина, а не вимірювання на рівні вулиці.", " · calm": " · штиль", - " from {direction}": " з {direction}", + " from {direction}": " із {direction}", "WIND AT {coordinates}": "ВІТЕР У ТОЧЦІ {coordinates}", "{model} · valid {time}": "{model} · на {time}", "Wind speed field unavailable": "Поле швидкості вітру недоступне", @@ -1361,7 +1361,7 @@ "Exit cockpit to fly to a camera": "Вийдіть із кабіни, щоб перелетіти до камери", "Exit cockpit to fly to a location": "Вийдіть із кабіни, щоб перелетіти до місця", "Exit cockpit to fly to a photo": "Вийдіть із кабіни, щоб перелетіти до фото", - "Exit cockpit to fly to a shared view": "Вийдіть із кабіни, щоб перелетіти до вигляду за посиланням", + "Exit cockpit to fly to a shared view": "Вийдіть із кабіни, щоб перелетіти до місця за посиланням", "Exit cockpit to fly to a target": "Вийдіть із кабіни, щоб перелетіти до цілі", "Exit cockpit to fly to a vessel": "Вийдіть із кабіни, щоб перелетіти до судна", "Exit cockpit to fly to a fire": "Вийдіть із кабіни, щоб перелетіти до пожежі", @@ -1402,7 +1402,7 @@ }, "Cannot capture shot: camera not ready": "Не вдалося зняти кадр: камера не готова", "Captured: {scene} / {shot}": "Знято: {scene} / {shot}", - "Select a shot first": "Спочатку оберіть кадр", + "Select a shot first": "Спочатку виберіть кадр", "Updated: {scene} / {shot}": "Оновлено: {scene} / {shot}", "Could not leave scene: {scene}": "Не вдалося вийти зі сцени: {scene}", "Seeked: {scene} / {shot}": "Перемотано: {scene} / {shot}", @@ -1430,7 +1430,7 @@ "Bhote Koshi Evidence Sequence": "Послідовність свідчень: Bhote Koshi", "Nepal Flood Incident": "Паводок у Непалі", "Global Flights Radar": "Глобальний радар польотів", - "Orbital Watch": "Орбітальний нагляд", + "Orbital Watch": "Орбітальне спостереження", "Thermal Threat Board": "Панель теплових загроз", "City Overload": "Міське перевантаження", "Omniscience Pullback": "Всевидющий відʼїзд", @@ -1559,13 +1559,13 @@ "Ironbow": "Ironbow", "unsaved CCTV calibration": "незбережене калібрування CCTV", "the open cockpit": "відкрита кабіна", - "Switching language reloads the page. This will be lost: {items}. Switch anyway?": "Зміна мови перезавантажить сторінку. Буде втрачено: {items}. Однаково змінити мову?", + "Switching language reloads the page. This will be lost: {items}. Switch anyway?": "Зміна мови перезавантажить сторінку. Буде втрачено: {items}. Усе одно змінити мову?", "VISUAL PRESETS": "ВІЗУАЛЬНІ ПРЕСЕТИ", "LOCATION": "РОЗТАШУВАННЯ", "CONTACTS — nearest planes · vessels · sites": "КОНТАКТИ — найближчі літаки · судна · обʼєкти", "SPACE MISSIONS — launches & orbital assets": "КОСМІЧНІ МІСІЇ — запуски та орбітальні апарати", "LIVE SIGNALS": "СИГНАЛИ ОНЛАЙН", - "Contacts could not complete the requested transition; try again": "Контакти не змогли завершити запитаний перехід; спробуйте ще раз", + "Contacts could not complete the requested transition; try again": "Режим «Контакти» не зміг завершити запитаний перехід; спробуйте ще раз", "CCTV layer unavailable": "Шар CCTV недоступний", "Link shared": "Посилання надіслано", "Link copied!": "Посилання скопійовано!", @@ -1645,11 +1645,11 @@ "other": "{count} камери завантажено · увімкніть CCTV, щоб активувати" }, "Enable CCTV to load camera intersections": "Увімкніть CCTV, щоб завантажити камери на перехрестях", - "Enable CCTV to start camera-linked intelligence summaries.": "Увімкніть CCTV, щоб почати зведення розвідки за камерами.", + "Enable CCTV to start camera-linked intelligence summaries.": "Увімкніть CCTV, щоб отримувати розвідувальні зведення за даними камер.", "No summary available.": "Зведення недоступне.", "loading frames": "завантаження кадрів", "camera grid ready": "сітка камер готова", - "Clearing selected data layers": "Очищення обраних шарів даних", + "Clearing selected data layers": "Очищення вибраних шарів даних", "Clear selected data layers": "Очистити вибрані шари даних", "CONDITIONS UNKNOWN": "УМОВИ НЕВІДОМІ", "CLEAR": "ЯСНО", @@ -1665,7 +1665,7 @@ "CYCLE ON": "ЦИКЛ УВІМКНЕНО", "CYCLE OFF": "ЦИКЛ ВИМКНЕНО", "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Зупинити автоматичне гортання сторінок. Кнопки ПОПЕР./ДАЛІ та вкладки СИГН./НОВИНИ/МІСЦ. залишаються доступними.", - "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.": "Автоматично гортає сторінки брифінгу кожні 9 секунд (Сигнали → Новини → Місцеве). Пауза, доки ви наводите вказівник на панель або вона у фокусі. Дані сигналів у реальному часі однаково оновлюються безперервно.", + "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.": "Автоматично гортає сторінки брифінгу кожні 9 секунд (Сигнали → Новини → Місцеві дані). Пауза, доки ви наводите вказівник на панель або вона у фокусі. Дані сигналів у реальному часі однаково оновлюються безперервно.", "ACQUIRING REGIONAL NEWS": "ОТРИМАННЯ РЕГІОНАЛЬНИХ НОВИН", "REGIONAL NEWS UNAVAILABLE": "РЕГІОНАЛЬНІ НОВИНИ НЕДОСТУПНІ", "RESOLVING REGION": "ВИЗНАЧЕННЯ РЕГІОНУ", @@ -1677,10 +1677,10 @@ "CLOUD UNKNOWN": "ХМАРНІСТЬ НЕВІДОМА", "{source} · LOCATION QUERY": "{source} · ЗАПИТ ЗА РОЗТАШУВАННЯМ", "REGIONAL NEWS": "НОВИНИ РЕГІОНУ", - "{label} · {radius} AIR/SEA WINDOW": "{label} · ВІКНО ПОВІТРЯ/МОРЕ {radius}", + "{label} · {radius} AIR/SEA WINDOW": "{label} · ПОВІТРЯ/МОРЕ · РАДІУС {radius}", "{scope} · INSTALLATIONS {coverage}": "{scope} · ОБʼЄКТИ: {coverage}", "CONTEXT STANDBY": "КОНТЕКСТ: ОЧІКУВАННЯ", - "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "УВІМКНІТЬ ГЛОБАЛЬНИЙ КОНТЕКСТ ДЛЯ ПІНГІВ БЛИЗЬКОСТІ", + "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "УВІМКНІТЬ ГЛОБАЛЬНИЙ КОНТЕКСТ, ЩОБ БАЧИТИ КОНТАКТИ ПОБЛИЗУ", "CONTACT LOST · LAST KNOWN READOUT · NOT AN ALL-CLEAR": "КОНТАКТ ВТРАЧЕНО · ОСТАННІ ВІДОМІ ПОКАЗНИКИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "CONTACT LOST · {subject}": "КОНТАКТ ВТРАЧЕНО · {subject}", "SUBJECT LEFT ITS FEED · READOUT HOLDING LAST KNOWN": "ОБʼЄКТ ЗНИК ІЗ ПОТОКУ · ПОКАЗАНО ОСТАННІ ВІДОМІ ДАНІ", @@ -1702,13 +1702,13 @@ "ADS-B PRIORITY · {status}": "ADS-B ПРІОРИТЕТ · {status}", "ADS-B EMERGENCY · {status}": "ADS-B АВАРІЯ · {status}", "AIRCRAFT": "БОРТ", - "ACQUIRING SURFACE": "ОТРИМАННЯ НАЗЕМНИХ ДАНИХ", - "SURFACE FALLBACK": "РЕЗЕРВ НАЗЕМНИХ ДАНИХ", + "ACQUIRING SURFACE": "ЗАВАНТАЖЕННЯ ПОВЕРХНІ", + "SURFACE FALLBACK": "РЕЗЕРВНА ПОВЕРХНЯ", "STALE FEED": "ЗАСТАРІЛИЙ ПОТІК", "LIVE TRACK": "ТРЕК ОНЛАЙН", "COMMERCIAL": "КОМЕРЦІЙНИЙ", "{aircraftClass} · {emergency} · {feedState}": "{aircraftClass} · {emergency} · {feedState}", - "{aircraftClass} · {feedState} · COURSE ALIGNED": "{aircraftClass} · {feedState} · КУРС ВИРІВНЯНО", + "{aircraftClass} · {feedState} · COURSE ALIGNED": "{aircraftClass} · {feedState} · КАМЕРА ЗА КУРСОМ", "ARROW · ESTIMATED DIRECTION": "СТРІЛКА · ОРІЄНТОВНИЙ НАПРЯМОК", "ROUTE DATA UNAVAILABLE": "ДАНІ МАРШРУТУ НЕДОСТУПНІ", "DEST {bearing}": "ПРИЗН. {bearing}", @@ -1721,7 +1721,7 @@ "Anime": "Аніме", "Noir": "Нуар", "Snow": "Сніг", - "Current cockpit vision style: {style}. Activate for next style.": "Поточний стиль бачення кабіни: {style}. Активуйте для наступного стилю.", + "Current cockpit vision style: {style}. Activate for next style.": "Поточний візуальний стиль у кабіні: {style}. Активуйте, щоб перейти до наступного.", "Current style: {style} — click for next": "Поточний стиль: {style} — клацніть для наступного", "Collapse Contact panel": "Згорнути панель контактів", "Expand Contact panel": "Розгорнути панель контактів", @@ -1731,10 +1731,10 @@ "Expand cockpit briefing panel": "Розгорнути панель брифінгу кабіни", "Collapse briefing panel": "Згорнути панель брифінгу", "Expand briefing panel": "Розгорнути панель брифінгу", - "OBSERVED / MAPPED PINGS": "СПОСТЕРЕЖЕНІ / НАНЕСЕНІ ПІНГИ", - "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "ПОДІЇ ПІДТВЕРДЖЕНІ ДЖЕРЕЛАМИ · БЕЗ ШТУЧНИХ НОВИН", + "OBSERVED / MAPPED PINGS": "СПОСТЕРЕЖЕНІ / НАНЕСЕНІ КОНТАКТИ", + "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "ПОДІЇ ПІДТВЕРДЖЕНІ ДЖЕРЕЛАМИ · БЕЗ ІМІТОВАНИХ НОВИН", "LATEST LOCATION-MATCHED REPORTING": "ОСТАННІ ПУБЛІКАЦІЇ ЗА РОЗТАШУВАННЯМ", - "{source} · LOCATION QUERY · RECENT": "{source} · ЗАПИТ ЗА МІСЦЕМ · НЕЩОДАВНІ", + "{source} · LOCATION QUERY · RECENT": "{source} · ЗАПИТ ЗА РОЗТАШУВАННЯМ · НЕЩОДАВНІ", "LOCAL INFO": "МІСЦЕВІ ДАНІ", "PLACE / CONDITIONS / POSITION": "МІСЦЕ / УМОВИ / ПОЗИЦІЯ", "TIME UNKNOWN": "ЧАС НЕВІДОМИЙ", @@ -1765,19 +1765,19 @@ "one": "Не вдалося очистити {count} шар даних", "few": "Не вдалося очистити {count} шари даних", "many": "Не вдалося очистити {count} шарів даних", - "other": "Не вдалося очистити {count} шара даних" + "other": "Не вдалося очистити {count} шару даних" }, "Cleared {count} data layers": { "one": "Очищено {count} шар даних", "few": "Очищено {count} шари даних", "many": "Очищено {count} шарів даних", - "other": "Очищено {count} шара даних" + "other": "Очищено {count} шару даних" }, - "Selected data layers could not be cleared": "Не вдалося очистити обрані шари даних", - "Space Missions could not complete the requested transition; try again": "Космічні місії не змогли завершити запитаний перехід; спробуйте ще раз", + "Selected data layers could not be cleared": "Не вдалося очистити вибрані шари даних", + "Space Missions could not complete the requested transition; try again": "Режим «Космічні місії» не зміг завершити запитаний перехід; спробуйте ще раз", "Nearby installations refreshed": "Найближчі обʼєкти оновлено", "Nearby installations could not be refreshed; try again": "Не вдалося оновити найближчі обʼєкти; спробуйте ще раз", - "Space Missions cancellation could not restore the previous layer state": "Скасування Космічних місій не змогло відновити попередній стан шарів", + "Space Missions cancellation could not restore the previous layer state": "Скасування режиму «Космічні місії» не відновило попередній стан шарів", "That layer is unavailable in the current Context mode": "Цей шар недоступний у поточному режимі контексту", "{layerId} could not {action} cleanly": "{layerId}: не вдалося коректно {action}", "start": "запустити", @@ -1819,7 +1819,7 @@ "Drag to size the box": "Потягніть, щоб задати розмір області", "light {source} to use your {name} key": "увімкніть {source}, щоб використати свій ключ {name}", "light {source}": "увімкніть {source}", - ", or ": " або ", + ", or ": ", або ", "{requirement}, or {offer}": "{requirement} або {offer}", "Live Flights": "Рейси онлайн", "Military Flights": "Військові рейси", @@ -1929,7 +1929,7 @@ "CONNECT": "ПІДКЛЮЧИТИ", "LOCATING…": "ВИЗНАЧЕННЯ…", "LOCATED": "ВИЗНАЧЕНО", - "LOCATE": "ГЕОПОЗИЦІЯ", + "LOCATE": "МОЄ МІСЦЕ", " · read while Local ADS-B is on": " · зчитуються, коли ввімкнено шар «Локальний ADS-B»", "Decoder feeds: {feeds}": "Потоки декодера: {feeds}", "Language: {language}": "Мова: {language}", @@ -2046,22 +2046,22 @@ "Newest frame per product": "Найсвіжіший кадр кожного продукту", "Replay observed history": "Відтворити історію спостережень", "Imagery on Esri · Google 3D returns when cleared": "Підкладка: Esri · скидання поверне Google 3D", - "Point the camera at the ground to use the view": "Наведіть камеру на землю, щоб використати вигляд", + "Point the camera at the ground to use the view": "Для видимої області наведіть камеру на землю", "That point cannot anchor a box": "Від цієї точки не можна побудувати область", "Imagery stops at ±{limit}° latitude": "Знімки є лише до ±{limit}° широти", "{owner} is using the pointer — close it first": "Вказівник зайнятий: «{owner}». Спершу закрийте його", "Box is {size} wide · limit {limit}": "Область завширшки {size} · межа {limit}", - "View is {size} wide · limit {limit}": "Вигляд завширшки {size} · межа {limit}", + "View is {size} wide · limit {limit}": "Видима ширина {size} · межа {limit}", "VS BASEMAP": "З ПІДКЛАДКОЮ", "A / B": "A / B", - "Newest low-cloud day for this box · scene cloud, not box cloud": "Найсвіжіший малохмарний день для цієї області · хмарність усієї сцени, а не області", - "Newest day covering this box · cloudier than 20%": "Найсвіжіший день із покриттям цієї області · хмарність понад 20%", - "Newest day with imagery for this box · partial coverage": "Найсвіжіший день зі знімками цієї області · часткове покриття", - "Newest daily overview for this box": "Найсвіжіший щоденний огляд для цієї області", - "newest clear day": "найсвіжіший ясний день", - "newest day (cloudy)": "найсвіжіший день (хмарно)", - "newest day (partial coverage)": "найсвіжіший день (часткове покриття)", - "newest overview": "найсвіжіший огляд", + "Newest low-cloud day for this box · scene cloud, not box cloud": "Останній малохмарний день для цієї області · хмарність усієї сцени, а не області", + "Newest day covering this box · cloudier than 20%": "Останній день із покриттям цієї області · хмарність понад 20%", + "Newest day with imagery for this box · partial coverage": "Останній день зі знімками цієї області · часткове покриття", + "Newest daily overview for this box": "Останній щоденний огляд для цієї області", + "newest clear day": "останній ясний день", + "newest day (cloudy)": "останній день (хмарно)", + "newest day (partial coverage)": "останній день (часткове покриття)", + "newest overview": "останній огляд", "No imagery": "Немає знімків", "Loading": "Завантаження", "coverage|full": "повне", @@ -2079,7 +2079,7 @@ "other": "{count} ДНЯ" }, "Zoom in or draw a smaller box": "Наблизьте карту або виділіть меншу область", - "Select a box or use the view": "Виділіть область або використайте поточний вигляд", + "Select a box or use the view": "Виділіть область або натисніть «З екрана»", "Searching the last 30 days": "Пошук за останні 30 днів", "No days to show for this box": "Для цієї області немає чого показати", "Drag the divider · SWAP trades sides": "Тягніть роздільник · «ПОМІНЯТИ» — зміна сторін", @@ -2088,7 +2088,7 @@ "S on another day replaces it · × unpins": "S на іншому дні замінює його · × відкріплює", "← → preview · S shows the focused day": "← → перегляд · S показує вибраний день", "ZOOM IN": "НАБЛИЗИТИ", - "Fly in until the view fits the 1,000 km limit": "Наближайтеся, доки вигляд не вміститься в межу 1000 км", + "Fly in until the view fits the 1,000 km limit": "Наблизьте карту, щоб видима область вмістилася в межу 1000 км", "Imagery days, newest first · arrows move, S or A and B pin": "Дні зі знімками, спершу нові · стрілки — переміщення, S або A і B — закріпити", "On the map": "На карті", "Mode": "Режим", @@ -2097,13 +2097,13 @@ "Trade the two sides of the divider": "Поміняти місцями сторони роздільника", "SELECT BOX": "ВИДІЛИТИ", "Drag a box on the map (Esc cancels)": "Виділіть область на карті (Esc — скасування)", - "USE VIEW": "ЗА ВИГЛЯДОМ", - "Use the current view as the box": "Використати поточний вигляд як область", + "USE VIEW": "З ЕКРАНА", + "Use the current view as the box": "Вибрати видиму область карти", "Forget the box and its images": "Скинути область і її знімки", "START HERE": "ПОЧНІТЬ ТУТ", "Checking": "Перевірка", "PREVIEW": "ПЕРЕГЛЯД", - "Newest day with imagery for this box": "Найсвіжіший день зі знімками цієї області", + "Newest day with imagery for this box": "Останній день зі знімками цієї області", "SHOW": "ПОКАЗАТИ", "Pin {day} as {slot}": "Закріпити {day} як {slot}", "Show {day}": "Показати {day}", @@ -2188,11 +2188,11 @@ "ACQUIRING": "ОТРИМАННЯ", "SHARED {subject}": "ЗА ПОСИЛАННЯМ: {subject}", "subject": "обʼєкт", - "LOADING LIVE DATA": "ЗАВАНТАЖЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", + "LOADING LIVE DATA": "ЗАВАНТАЖЕННЯ ДАНИХ ОНЛАЙН", "LOAD COMPLETE": "ЗАВАНТАЖЕННЯ ЗАВЕРШЕНО", "LOAD CANCELLED": "ЗАВАНТАЖЕННЯ СКАСОВАНО", "LOAD FAILED": "ПОМИЛКА ЗАВАНТАЖЕННЯ", - "LIVE DATA OFF": "ДАНІ В РЕАЛЬНОМУ ЧАСІ ВИМКНЕНО", + "LIVE DATA OFF": "ДАНІ ОНЛАЙН ВИМКНЕНО", "MAPPED SITES LOADED": "НАНЕСЕНІ ОБʼЄКТИ ЗАВАНТАЖЕНО", "RETRYING MAPPED SITES": "ПОВТОРНЕ ЗАВАНТАЖЕННЯ НАНЕСЕНИХ ОБʼЄКТІВ", "FETCHING MAPPED SITES": "ЗАВАНТАЖЕННЯ НАНЕСЕНИХ ОБʼЄКТІВ", @@ -2204,8 +2204,8 @@ "OVERPASS COULD NOT COMPLETE THE QUERY": "OVERPASS: НЕ ВДАЛОСЯ ЗАВЕРШИТИ ЗАПИТ", "MAP TILES TEMPORARILY UNAVAILABLE": "ТАЙЛИ КАРТИ ТИМЧАСОВО НЕДОСТУПНІ", "MAPPED NAMES TEMPORARILY UNAVAILABLE": "НАЗВИ ОБʼЄКТІВ ТИМЧАСОВО НЕДОСТУПНІ", - "TURNING OFF LIVE DATA": "ВИМКНЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", - "REFRESHING LIVE DATA": "ОНОВЛЕННЯ ДАНИХ У РЕАЛЬНОМУ ЧАСІ", + "TURNING OFF LIVE DATA": "ВИМКНЕННЯ ДАНИХ ОНЛАЙН", + "REFRESHING LIVE DATA": "ОНОВЛЕННЯ ДАНИХ ОНЛАЙН", "syncing road network": "синхронізація дорожньої мережі", "retry pending": "очікується повтор", "retrying in {seconds}s": "повтор через {seconds} с", @@ -2299,7 +2299,7 @@ "Image by {creator}": "Автор знімка: {creator}", " or ": " або ", "OPEN {labels}": "ВІДКРИТИ {labels}", - "Open {names} at the centre of the view": "Відкрити {names} у центрі вигляду", + "Open {names} at the centre of the view": "Відкрити {names} у центрі карти", "Zoom in to a street to open {names} here": "Наблизьтеся до вулиці, щоб відкрити тут {names}", "Switch Street Level on to draw its coverage.": "Увімкніть «Вуличні знімки», щоб показати покриття.", "Every provider is switched off: light a chip to draw its coverage.": "Усі джерела вимкнено: увімкніть одне, щоб показати його покриття.", @@ -2372,7 +2372,7 @@ "VOICE CONTROL": "ГОЛОСОВЕ КЕРУВАННЯ", "Hold Space to speak · tap Space to activate focused controls": "Утримуйте Space, щоб говорити · натисніть Space, щоб активувати елемент у фокусі", "VOICE": "ГОЛОС", - "Preview": "Попередній перегляд", + "Preview": "Відповіді", "Settings": "Налаштування", "Close voice panel": "Закрити голосову панель", "Voice replies appear here.": "Тут зʼявляються голосові відповіді.", @@ -2383,9 +2383,9 @@ "Plan": "План", "Referenced items": "Згадані обʼєкти", "NOTES & SOURCES": "НОТАТКИ Й ДЖЕРЕЛА", - "Show Voice Preview": "Показувати попередній перегляд голосу", + "Show Voice Preview": "Показувати відповіді асистента", "Voice inactivity timeout": "Тайм-аут бездіяльності голосу", - "Minutes": "Хвилини", + "Minutes": "хв", "Custom": "Інше", "These preferences stay in this browser.": "Ці налаштування зберігаються в цьому браузері.", "VOICE SYSTEM ERROR": "ПОМИЛКА ГОЛОСОВОЇ СИСТЕМИ", @@ -2433,7 +2433,7 @@ "Gemini connection timed out. Try again.": "Минув час очікування підключення до Gemini. Спробуйте ще раз.", "Gemini voice could not start": "Не вдалося запустити голосовий режим Gemini", "Gemini did not finish the interrupted reply. Start voice again.": "Gemini не завершив перервану відповідь. Запустіть голосовий режим знову.", - "Gemini session expiring; finishing the current reply": "Сеанс Gemini спливає; завершується поточна відповідь", + "Gemini session expiring; finishing the current reply": "Термін дії сеансу Gemini спливає; завершується поточна відповідь", "Gemini rejected the voice session. Start voice again to request a fresh session.": "Gemini відхилив голосовий сеанс. Запустіть голосовий режим знову, щоб запитати новий сеанс.", "Start voice again for a fresh session credential. If it repeats, check Gemini model and API access.": "Запустіть голосовий режим знову, щоб отримати нові облікові дані. Якщо помилка повториться, перевірте модель Gemini і доступ до API.", "Gemini action history is full. Start voice again for a fresh session.": "Історія дій Gemini заповнена. Запустіть голосовий режим знову для нового сеансу.", @@ -2442,12 +2442,12 @@ "Voice text command is too long": "Текст голосової команди задовгий", "Gemini voice is not connected": "Голосовий режим Gemini не підключено", "Gemini interrupted input exceeded its buffer or wait limit. Start voice again.": "Перерване введення Gemini перевищило ліміт буфера або очікування. Запустіть голосовий режим знову.", - "Gemini Live connection is expiring. Start voice again for a new conversation.": "Зʼєднання з Gemini Live спливає. Запустіть голосовий режим знову для нової розмови.", + "Gemini Live connection is expiring. Start voice again for a new conversation.": "Термін дії зʼєднання з Gemini Live спливає. Запустіть голосовий режим знову для нової розмови.", "Voice off": "Голос вимкнено", - "Gemini voice sessions have a time limit. When a session expires, start voice again for a new conversation.": "Час голосових сеансів Gemini обмежений. Коли сеанс спливе, запустіть голосовий режим знову для нової розмови.", + "Gemini voice sessions have a time limit. When a session expires, start voice again for a new conversation.": "Тривалість голосових сеансів Gemini обмежена. Коли сеанс завершиться, запустіть голосовий режим знову для нової розмови.", "Stopped by voice": "Зупинено голосовою командою", "Automatic stop is unavailable for this voice connection.": "Автоматична зупинка недоступна для цього голосового підключення.", - "Preview is off.": "Попередній перегляд вимкнено.", + "Preview is off.": "Показ відповідей вимкнено.", "Your choice applies now, but could not be saved.": "Ваш вибір застосовано, але зберегти його не вдалося.", "WebRTC microphone support unavailable": "Підтримка мікрофона WebRTC недоступна", "VOICE UNAVAILABLE": "ГОЛОС НЕДОСТУПНИЙ", @@ -2573,8 +2573,8 @@ }, "anywhere in the loaded data": "в усіх завантажених даних", "in view": "у кадрі", - "within {radius} of the view centre": "у радіусі {radius} від центру вигляду", - "within {radius} of {place} (Contacts window)": "у радіусі {radius} — {place} (вікно «Контактів»)", + "within {radius} of the view centre": "у радіусі {radius} від центру карти", + "within {radius} of {place} (Contacts window)": "у радіусі {radius} — {place} (режим «Контакти»)", "within {radius} of {place}": "у радіусі {radius} — {place}", "within {radius}": "у радіусі {radius}", "over {region}": "у регіоні {region}", @@ -2582,7 +2582,7 @@ "{items} {scope}": "{items} {scope}", "last 24 h": "за останні 24 год", "past 30 d and upcoming": "за останні 30 дн і майбутні", - "the flights layer loads by viewport": "шар рейсів завантажується за областю вигляду", + "the flights layer loads by viewport": "шар рейсів завантажується для видимої області карти", "distance is ground distance, not overhead": "відстань — поверхнею землі до підсупутникової точки, а не до самого апарата", "the count is a lower bound because at least one layer reached its retained limit.": "це нижня межа: принаймні один шар досяг ліміту збережених записів.", "{label} off": "{label}: вимк.", @@ -2626,12 +2626,12 @@ "Nearest-aircraft selection needs a preset, place name, or latitude and longitude": "Для вибору найближчого літака потрібен пресет, назва місця або широта й довгота", "Could not arrive at the requested place": "Не вдалося долетіти до запитаного місця", "The nearest airborne aircraft could not be selected": "Не вдалося вибрати найближчий літак у повітрі", - "No flights within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає рейсів", - "No military within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає військових рейсів", - "No satellites within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає супутників", - "No vessels within {radius} of the current view": "У радіусі {radius} від поточного вигляду немає суден", - "{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "{layer}: увімкнено (потік {source}), але у вигляді «{place}» ще не завантажено жодного літака в повітрі", - "{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "{layer}: увімкнено, але у вигляді «{place}» ще не завантажено жодного літака в повітрі", + "No flights within {radius} of the current view": "У радіусі {radius} від центру карти немає рейсів", + "No military within {radius} of the current view": "У радіусі {radius} від центру карти немає військових рейсів", + "No satellites within {radius} of the current view": "У радіусі {radius} від центру карти немає супутників", + "No vessels within {radius} of the current view": "У радіусі {radius} від центру карти немає суден", + "{layer} is enabled on the {source} feed, but no airborne aircraft is loaded in the {place} view yet": "{layer}: увімкнено (потік {source}), але у видимій області ({place}) ще не завантажено жодного літака в повітрі", + "{layer} is enabled, but no airborne aircraft is loaded in the {place} view yet": "{layer}: увімкнено, але у видимій області ({place}) ще не завантажено жодного літака в повітрі", "{layer} is enabled, but its aircraft feed is unavailable": "{layer}: увімкнено, але потік даних про літаки недоступний", "{layer} is enabled, but its destination refresh did not complete": "{layer}: увімкнено, але оновлення в точці призначення не завершилося", "{layer} is enabled, but {source} is unavailable": "{layer}: увімкнено, але джерело {source} недоступне", @@ -2683,7 +2683,7 @@ "Layer": "Шар", "there": "там", "Camera range {range}": "Дальність камери: {range}", - "Within {radius} of the view": "У радіусі {radius} від вигляду", + "Within {radius} of the view": "У радіусі {radius} від центру карти", "Labels on": "Підписи ввімкнено", "Framing uses the nearest 80 loaded contacts": "У кадр потрапляють 80 найближчих завантажених контактів", "{distance} from {location}": "{location}: {distance}", @@ -2770,15 +2770,15 @@ "GROUND SPEED · KTS": "ШЛЯХОВА ШВИДКІСТЬ · ВУЗ", "ALTITUDE · FT": "ВИСОТА · ФТ", "FIRST PERSON": "ВІД ПЕРШОЇ ОСОБИ", - "LIVE TRACK · COURSE ALIGNED": "ТРЕК ОНЛАЙН · КУРС ВИРІВНЯНО", - "Cockpit vision style": "Стиль бачення кабіни", - "Previous cockpit vision style": "Попередній стиль бачення кабіни", - "Previous vision style": "Попередній стиль бачення", - "Current cockpit vision style: NORMAL. Activate for next style.": "Поточний стиль бачення кабіни: ЗВИЧАЙНИЙ. Активуйте для наступного стилю.", + "LIVE TRACK · COURSE ALIGNED": "ТРЕК ОНЛАЙН · КАМЕРА ЗА КУРСОМ", + "Cockpit vision style": "Візуальний стиль у кабіні", + "Previous cockpit vision style": "Попередній візуальний стиль у кабіні", + "Previous vision style": "Попередній візуальний стиль", + "Current cockpit vision style: NORMAL. Activate for next style.": "Поточний візуальний стиль у кабіні: ЗВИЧАЙНИЙ. Активуйте, щоб перейти до наступного.", "Current style: NORMAL — click for next": "Поточний стиль: ЗВИЧАЙНИЙ — клацніть для наступного", "CURRENT": "ПОТОЧНИЙ", - "Next cockpit vision style": "Наступний стиль бачення кабіни", - "Next vision style": "Наступний стиль бачення", + "Next cockpit vision style": "Наступний візуальний стиль у кабіні", + "Next vision style": "Наступний візуальний стиль", "Current aircraft heading": "Поточний курс повітряного судна", "GROUND SPEED": "ШЛЯХОВА ШВИДКІСТЬ", "KTS": "ВУЗ", @@ -2826,7 +2826,7 @@ "RADIO": "РАДІО", "Cockpit compact Radio controls": "Компактне керування радіо кабіни", "Previous filtered radio station": "Попередня відфільтрована радіостанція", - "Play selected radio station": "Відтворити обрану радіостанцію", + "Play selected radio station": "Відтворити вибрану радіостанцію", "Next filtered radio station": "Наступна відфільтрована радіостанція", "VOLUME": "ГУЧНІСТЬ", "Cockpit Radio volume": "Гучність радіо кабіни", @@ -2843,7 +2843,7 @@ "Keep visual presets open": "Тримати візуальні пресети відкритими", "Show the globe without a visual filter.": "Показує глобус без візуального фільтра.", "Emulate a green phosphor CRT with scanlines and screen curvature.": "Імітує CRT-монітор із зеленим люмінофором, рядками розгортки та вигнутим екраном.", - "Simulate night-vision goggles with green intensification and a tube vignette.": "Імітує прилад нічного бачення з зеленим підсиленням та віньєткою туби.", + "Simulate night-vision goggles with green intensification and a tube vignette.": "Імітує прилад нічного бачення: підсилене зелене зображення й затемнення по краях поля зору.", "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Імітує термальний контраст у стилі FLIR. Для кольору збільште Ironbow.", "Apply bright cel-shaded color and illustrated outlines.": "Застосовує яскраву мультяшну заливку та ілюстровані контури.", "Apply high-contrast monochrome film-noir grading.": "Застосовує висококонтрастну чорно-білу обробку в стилі нуар.", @@ -2871,18 +2871,18 @@ "Expand panel": "Розгорнути панель", "Context mode": "Режим контексту", "CONTACTS": "КОНТАКТИ", - "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Гортає найближчі контакти обраного вами типу — літаки, судна, обʼєкти. Супутники відстежуються окремо.", + "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Гортає найближчі контакти вибраного вами типу — літаки, судна, обʼєкти. Супутники відстежуються окремо.", "SPACE MISSIONS": "КОСМІЧНІ МІСІЇ", - "SELECT CONTEXT": "ОБЕРІТЬ КОНТЕКСТ", + "SELECT CONTEXT": "ВИБЕРІТЬ КОНТЕКСТ", "Contact Context actions": "Дії контексту контактів", "COCKPIT": "КАБІНА", "SEARCH NEARBY SITES": "ПОШУК НАЙБЛИЖЧИХ ОБʼЄКТІВ", "Reclassify tracked contact as TR-3B": "Перекласифікувати відстежуваний контакт як TR-3B", "CONTACTS CONTEXT OFF": "КОНТЕКСТ КОНТАКТІВ ВИМКНЕНО", - "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "ВИБЕРІТЬ КОНТАКТИ, ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНЕ / НАНЕСЕНЕ ПОБЛИЗУ", + "SELECT CONTACTS TO LOAD OBSERVED / MAPPED PROXIMITY": "ВИБЕРІТЬ «КОНТАКТИ», ЩОБ ЗАВАНТАЖИТИ СПОСТЕРЕЖЕНІ / НАНЕСЕНІ ОБʼЄКТИ ПОБЛИЗУ", "Available Space Missions": "Доступні космічні місії", "AVAILABLE MISSIONS": "ДОСТУПНІ МІСІЇ", - "SELECT A MISSION TO INSPECT": "ОБЕРІТЬ МІСІЮ ДЛЯ ПЕРЕГЛЯДУ", + "SELECT A MISSION TO INSPECT": "ВИБЕРІТЬ МІСІЮ ДЛЯ ПЕРЕГЛЯДУ", "LOADING 30-DAY MISSION INDEX": "ЗАВАНТАЖЕННЯ ІНДЕКСУ МІСІЙ ЗА 30 ДНІВ", "TAB PREVIEWS · ENTER / SPACE SELECTS": "TAB — ОГЛЯД · ENTER / SPACE — ВИБІР", "Internet radio and local SDR": "Інтернет-радіо та локальний SDR", @@ -2893,7 +2893,7 @@ "DRAG TO TUNE": "ТЯГНІТЬ ДЛЯ НАЛАШТУВАННЯ", "Tune available internet radio stations": "Налаштування на доступні інтернет-радіостанції", "ALL · DRAG THE NEEDLE": "УСІ · ПОТЯГНІТЬ СТРІЛКУ", - "SNAPS TO AVAILABLE STATIONS": "ПРИЛИПАЄ ДО ДОСТУПНИХ СТАНЦІЙ", + "SNAPS TO AVAILABLE STATIONS": "ФІКСУЄТЬСЯ НА ДОСТУПНИХ СТАНЦІЯХ", "Radio playback": "Відтворення радіо", "Previous filtered station": "Попередня станція у фільтрі", "Play selected station": "Відтворити вибрану станцію", @@ -2958,7 +2958,7 @@ "Detection opacity outside the keyhole": "Непрозорість виявлення за межами ілюмінатора", "World-overlay label and card opacity beyond the fade distance": "Непрозорість підписів і карток накладки світу за межею згасання", "PARAMETERS": "ПАРАМЕТРИ", - "3D aircraft — flat icons zoomed out, 3D models up close": "3D літаки — плоскі іконки здалеку, 3D-моделі зблизька", + "3D aircraft — flat icons zoomed out, 3D models up close": "3D літаки — плоскі значки здалеку, 3D-моделі зблизька", "Models": "Моделі", "3D model coverage": "Охоплення 3D-моделей", "Proximity": "Поблизу", @@ -3043,7 +3043,7 @@ "START": "СТАРТ", "EXPORT PRESETS": "ЕКСПОРТУВАТИ ПРЕСЕТИ", "IMPORT": "ІМПОРТУВАТИ", - "RUN LOG": "ЖУРНАЛ ЗАПУСКІВ", + "RUN LOG": "ЖУРНАЛ ВІДТВОРЕННЯ", "POWER UP": "ЗАПУСК", "GROUND STATION · PROVIDER SETTINGS": "НАЗЕМНА СТАНЦІЯ · НАЛАШТУВАННЯ ПОСТАЧАЛЬНИКІВ", "Close key setup": "Закрити налаштування ключів", @@ -3062,9 +3062,9 @@ "Reset map bearing to north": "Скинути азимут карти на північ", "Reset camera and return to full globe view": "Скинути камеру та повернутися до загального вигляду глобуса", "MISSION CONTROL · FIRST LAUNCH": "ЦЕНТР КЕРУВАННЯ · ПЕРШИЙ ЗАПУСК", - "Choose your first view": "Оберіть свій перший вигляд", + "Choose your first view": "Виберіть, із чого почати", "LIVE CONTACTS": "КОНТАКТИ ОНЛАЙН", - "Aircraft, vessels and nearby intelligence": "Літаки, судна та розвідка поблизу", + "Aircraft, vessels and nearby intelligence": "Літаки, судна й розвіддані поблизу", "Launches, spacecraft and orbital context": "Запуски, космічні апарати та орбітальний контекст", "EXPLORE MANUALLY": "ДОСЛІДИТИ ВРУЧНУ", "Begin with a clean globe": "Почніть із чистого глобуса", From 226600a67a929b63dc661cc9501bdc63953c6687 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 23:13:44 +0400 Subject: [PATCH 13/20] i18n(uk): apply review round 3 Co-Authored-By: Claude Opus 5.5 --- docs/translations/uk.md | 10 ++++-- src/i18n/locales/uk.json | 76 ++++++++++++++++++++-------------------- 2 files changed, 46 insertions(+), 40 deletions(-) diff --git a/docs/translations/uk.md b/docs/translations/uk.md index fcd086f98..b960ab3a9 100644 --- a/docs/translations/uk.md +++ b/docs/translations/uk.md @@ -55,9 +55,10 @@ A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: | scene / shot / scene recipe | сцена / кадр / рецепт сцени | | briefing / panel / dock | брифінг / панель / док | | preset / visual preset | пресет / візуальний пресет | -| Scope (circular viewport mask) | приціл | -| overlay (detection overlay) | накладка | +| Scope, keyhole (circular viewport mask) | приціл | +| overlay (detection overlay) / world overlay | накладка / накладка на глобусі | | heading / altitude / ground speed | курс / висота / шляхова швидкість | +| map bearing, map heading | азимут карти | | HDG / BRG / CRS, TRK / FOV / DEST / SPD / RANGE | КУРС / ПЕЛ. / ШК (шляховий кут) / ОГЛЯД / ПРИЗН. / ШВИД / ДАЛЬН. | | Street View (Google) | Перегляд вулиць (as in Ukrainian Google Maps) | | Street Level (layer) | Вуличні знімки | @@ -91,3 +92,8 @@ A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: | run (scene playback) / RUN LOG | відтворення / ЖУРНАЛ ВІДТВОРЕННЯ (запуск is a rocket launch) | | Preview (voice panel replies) | відповіді | | Marine (radio tag) / pleasure craft | море (not флот) / прогулянкове судно | +| emergency (ADS-B) / Emergency (radio tag) | аварійний стан / надзвичайні ситуації | +| confidence (FIRMS fire detection) | достовірність (short: достов.) | +| thermal (FLIR-style imaging) | тепловий (not термальний) | +| map stack | набір карт | +| stage (rocket) re-entry / recovery | вхід ступеня в атмосферу / повернення | diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 62a46aa89..a7a5f2634 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -13,7 +13,7 @@ " · {max}-point limit reached": " · досягнуто ліміту точок: {max}", "{measure} · double-click or Enter to finish, Backspace undoes, Esc cancels.{full}": "{measure} · подвійне клацання або Enter — завершити, Backspace — скасувати точку, Esc — скасувати.{full}", "drawings on the map": "малюнки на карті", - "That shape already has {count} points — finish it or press Backspace.": "У цій фігурі вже точок: {count} — завершіть її або натисніть Backspace.", + "That shape already has {count} points — finish it or press Backspace.": "Фігура вже має максимальну кількість точок ({count}) — завершіть її або натисніть Backspace.", "That point is off the globe — click on the world.": "Ця точка поза глобусом — клацніть на Землі.", "That shape could not be placed.": "Не вдалося розмістити фігуру.", "Could not place the shape: {error}": "Не вдалося розмістити фігуру: {error}", @@ -434,7 +434,7 @@ "Live active-fire detections": "Виявлення активних пожеж у реальному часі", "Real live traffic (keyless runs a simulation)": "Дорожній рух у реальному часі (без ключа — імітація)", "Bing imagery map stacks + world terrain": "Знімки Bing + рельєф світу", - "More flight-polling credits (anonymous works without)": "Вищий ліміт запитів рейсів (анонімно працює й без ключа)", + "More flight-polling credits (anonymous works without)": "Вищий ліміт запитів даних про рейси (анонімно працює й без ключа)", "Street-level imagery and coverage in the Street Level layer. Free: register an app in the Mapillary developer dashboard and paste its Client Token": "Вуличні знімки й покриття в шарі «Вуличні знімки». Безкоштовно: зареєструйте застосунок у панелі розробника Mapillary і вставте його клієнтський токен (Client Token)", "Public space-missions access needs no key. Leave blank for standard use; paid tokens only raise request limits.": "Загальнодоступні дані космічних місій не потребують ключа. Для звичайного використання залиште поле порожнім; платні токени лише підвищують ліміти запитів.", "Air quality request failed": "Не вдалося запитати дані про якість повітря", @@ -506,8 +506,8 @@ "Next — nearest unvisited contact in the 250 km window": "Далі — найближчий ще не переглянутий контакт у радіусі 250 км", "NEXT": "ДАЛІ", "Named areas ({n})": "Іменовані зони ({n})", - "{distance} FLIGHT / VESSEL WINDOW": "РАДІУС РЕЙСІВ / СУДЕН {distance}", - "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Контекст із відкритих джерел (нанесений/спостережений). Відсутність трансляцій, незавантажені ділянки карти або ненанесені обʼєкти не є доказом відсутності.", + "{distance} FLIGHT / VESSEL WINDOW": "РЕЙСИ / СУДНА · РАДІУС {distance}", + "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Контекст із відкритих джерел (нанесений/спостережений). Відсутність сигналів, незавантажені ділянки карти або ненанесені обʼєкти не є доказом відсутності.", "mapped matches within {km} km of the subject": "збіги на карті в радіусі {km} км від обʼєкта", "none mapped within {km} km; not a complete 250 km survey": "на карті немає в радіусі {km} км; це не повний огляд на 250 км", "mapped matches from the loaded viewport": "збіги на карті в завантаженій області", @@ -523,7 +523,7 @@ "AIS vessels": "Судна AIS", "Mapped installations": "Нанесені обʼєкти", "syncing {count} city feeds...": "синхронізація міських потоків: {count}...", - "scanning nearby systems...": "пошук ближніх систем...", + "scanning nearby systems...": "пошук систем поблизу...", "GBFS fetch error": "помилка завантаження GBFS", "Station {id}": "Станція {id}", "Station": "Станція", @@ -540,7 +540,7 @@ "SPEC FOV {span}° (CAPABILITY)": "ОГЛЯД ЗА ПАСПОРТОМ {span}° (МОЖЛИВОСТІ)", "COVERAGE {value}km²": "ОХОПЛЕННЯ {value} КМ²", "OVERLAP {count} cams": "ПЕРЕКРИТТЯ {count} КАМ.", - "ISOLATED VIEW": "ОКРЕМИЙ ВИГЛЯД", + "ISOLATED VIEW": "БЕЗ ПЕРЕКРИТТЯ", "PROJ MONITOR": "ПРОЄКЦ. МОНІТОР", "PROJ OFF": "ПРОЄКЦ. ВИМК.", "VIEWSHED": "ЗОНА ВИДИМОСТІ", @@ -570,7 +570,7 @@ "other": "{count} активного шторму" }, "Position as of {time}": "Положення на {time}", - "Maximum sustained wind: {wind} · Pressure: {pressure}": "Макс. стала швидкість вітру: {wind} · Тиск: {pressure}", + "Maximum sustained wind: {wind} · Pressure: {pressure}": "Макс. середня швидкість вітру: {wind} · Тиск: {pressure}", "{name} · {classification} · Advisory {number} · issued {time}": "{name} · {classification} · Зведення № {number} · випущено {time}", "No active NHC/CPHC systems": "Немає активних систем NHC/CPHC", "Advisories unavailable": "Зведення недоступні", @@ -609,8 +609,8 @@ "fork direction|right": "правіше", "fork direction|slightly left": "трохи лівіше", "fork direction|slightly right": "трохи правіше", - "fork direction|sharply left": "лівіше", - "fork direction|sharply right": "правіше", + "fork direction|sharply left": "якомога лівіше", + "fork direction|sharply right": "якомога правіше", "fork direction|straight": "прямого напрямку", "lane direction|left": "ліву", "lane direction|right": "праву", @@ -715,7 +715,7 @@ "Earthquake source unavailable": "Джерело даних про землетруси недоступне", "Focus fire detection {title}, {details}": "Фокус на виявленні пожежі {title}, {details}", "live feed unavailable": "потік даних у реальному часі недоступний", - "{value} conf": "впевн.: {value}", + "{value} conf": "достов.: {value}", "{value} ago": "{value} тому", "sensor n/a": "датчик н/д", "FIRE · {frp} MW": "ПОЖЕЖА · {frp} МВт", @@ -783,7 +783,7 @@ "Retrying automatically at {time} UTC": "Автоматичний повтор о {time} UTC", "Retrying automatically after provider cooldown": "Автоматичний повтор після паузи постачальника", "Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Оновлюється автоматично після зсуву чи масштабування карти та раз на хвилину. Публічний потік даних охоплює коло радіусом 250 морських миль навколо центру карти; у разі віддалення карта не стає знімком усього світу. Порожні комірки — поза охопленням вибірки або з недостатньою кількістю спостережень.", - "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Показник неточності = 100 × max(0, неточні − 1) / усього: один літак не враховується, тож це не пряма частка неточних літаків. Для комірки потрібно літаків: {aircraft} за {minutes} хв. Аномалії цілісності навігації не означають виявлення глушіння чи підміни сигналу.", + "Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Показник неточності = 100 × max(0, неточні − 1) / усього: один літак не враховується, тож це не пряма частка літаків із неточними навігаційними даними. Мінімальна кількість літаків у комірці за {minutes} хв: {aircraft}. Аномалії цілісності навігації не означають виявлення глушіння чи підміни сигналу.", "GNSS snapshot needs a view anchor": "Для знімка GNSS потрібна опорна точка на карті", "GNSS feed rate limited (HTTP 429)": "Потік GNSS: перевищено ліміт запитів (HTTP 429)", "Malformed GNSS integrity snapshot": "Некоректний знімок цілісності GNSS", @@ -823,7 +823,7 @@ "LIFTOFF · {mission}": "СТАРТ · {mission}", "ASCENT REPLAY · {mission}": "ПОВТОР ВИВЕДЕННЯ · {mission}", "ASCENT ESTIMATE · {mission}": "РОЗРАХУНКОВЕ ВИВЕДЕННЯ · {mission}", - "STAGE RE-ENTRY / RECOVERY · {mission}": "ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ · {mission}", + "STAGE RE-ENTRY / RECOVERY · {mission}": "ВХІД СТУПЕНЯ В АТМОСФЕРУ / ПОВЕРНЕННЯ · {mission}", "ORBIT REPLAY · {mission}": "ПОВТОР ОРБІТИ · {mission}", "PAUSED · {title}": "ПАУЗА · {title}", "UNSPECIFIED": "НЕ ВКАЗАНО", @@ -833,7 +833,7 @@ "POSITION UNAVAILABLE": "ПОЗИЦІЯ НЕДОСТУПНА", "FLIGHT {count}": "ПОЛІТ {count}", "REUSED": "ПОВТОРНО ВИКОРИСТАНИЙ", - "NO STAGE RE-ENTRY / RECOVERY DATA": "НЕМАЄ ДАНИХ ПРО ВХІД В АТМОСФЕРУ / ПОВЕРНЕННЯ", + "NO STAGE RE-ENTRY / RECOVERY DATA": "НЕМАЄ ДАНИХ ПРО ВХІД СТУПЕНЯ В АТМОСФЕРУ / ПОВЕРНЕННЯ", "{count} / 30D": "{count} / 30 ДН", "NO MISSIONS AVAILABLE IN THE CURRENT 30-DAY WINDOW": "НЕМАЄ МІСІЙ У ПОТОЧНОМУ 30-ДЕННОМУ ВІКНІ", "DATE UNAVAILABLE": "ДАТА НЕДОСТУПНА", @@ -873,7 +873,7 @@ "EST. DOWNRANGE": "РОЗРАХ. ДАЛЬНІСТЬ", "PLANNED · ": "ПЛАН · ", "SUPPLIED TRAJECTORY POINTS": "НАДАНІ ТОЧКИ ТРАЄКТОРІЇ", - "RECONSTRUCTED ESTIMATE": "ВІДТВОРЕНА ОЦІНКА", + "RECONSTRUCTED ESTIMATE": "РЕКОНСТРУЙОВАНА ОЦІНКА", "Replay the estimated ascent with a following camera": "Відтворити розрахункове виведення з камерою супроводу", "Resume replay": "Продовжити повтор", "T minus {seconds}": "T мінус {seconds}", @@ -963,7 +963,7 @@ "radio tag|All": "Усі", "News": "Новини", "Talk": "Розмовні", - "Weather / Emergency": "Погода / Надзвичайні події", + "Weather / Emergency": "Погода / Надзвичайні ситуації", "Public Safety": "Громадська безпека", "Aviation / Marine": "Авіація / Море", "Traffic / Transit": "Рух / Транспорт", @@ -1170,7 +1170,7 @@ "Subway": "Метро", "Train": "Поїзд", "Ferry": "Пором", - "Transit vehicle": "Громадський транспорт", + "Transit vehicle": "Транспортний засіб", "AIS: {name}": "AIS: {name}", "{type} SPD: {speed} HDG: {heading}": "{type} ШВИД: {speed} КУРС: {heading}", "VESSEL": "СУДНО", @@ -1354,7 +1354,7 @@ "Error: {message}": "Помилка: {message}", "Needs {envVars} — add it in Provider Settings": "Потрібен {envVars} — додайте його в «Налаштуваннях постачальників»", "{label} is unavailable": "{label} — недоступно", - "This map stack": "Цей стек карт", + "This map stack": "Цей набір карт", "{label} unavailable: {hint}": "{label} — недоступно: {hint}", "Google 3D tiles unavailable — check the key's API restrictions, quota, or network": "Тайли Google 3D недоступні — перевірте обмеження API ключа, квоту або мережу", "Needs {envVars} — add it in Provider Settings — or a Cesium ion token for the ion-hosted route": "Потрібен {envVars} — додайте його в «Налаштуваннях постачальників» — або токен Cesium ion для варіанта через ion", @@ -1408,7 +1408,7 @@ "Seeked: {scene} / {shot}": "Перемотано: {scene} / {shot}", "Seeking scene clock": "Перемотування сцени", "Camera unavailable — exit cockpit first": "Камера недоступна — спершу вийдіть із кабіни", - "No shots to run": "Немає кадрів для запуску", + "No shots to run": "Немає кадрів для відтворення", "Scene transition limit reached — load a shot to reset": "Досягнуто ліміту переходів сцени — завантажте кадр, щоб скинути лічильник", "Export failed: {error}": "Помилка експорту: {error}", "Project exported": "Проєкт експортовано", @@ -1425,7 +1425,7 @@ "Scene actions": "Дії сцени", "Select a feature or use Tab and Enter to choose an action.": "Виберіть обʼєкт на карті або скористайтеся Tab і Enter, щоб вибрати дію.", "Selected feature: {feature}. Choose an action.": "Вибрано обʼєкт: {feature}. Виберіть дію.", - "Running {index}/{total}: {scene} / {shot}": "Виконання {index}/{total}: {scene} / {shot}", + "Running {index}/{total}: {scene} / {shot}": "Відтворення {index}/{total}: {scene} / {shot}", "Scene run complete": "Відтворення сцени завершено", "Bhote Koshi Evidence Sequence": "Послідовність свідчень: Bhote Koshi", "Nepal Flood Incident": "Паводок у Непалі", @@ -1572,7 +1572,7 @@ "Copy failed": "Не вдалося скопіювати", "Return map to straight-down view": "Повернути карту до вигляду згори", "Tilt map to oblique view": "Нахилити карту в перспективний вигляд", - "Reset map to north up. Current heading {heading} degrees": "Повернути карту північчю вгору. Поточний курс: {heading}°", + "Reset map to north up. Current heading {heading} degrees": "Повернути карту північчю вгору. Поточний азимут: {heading}°", "Tilted view": "Вигляд із нахилом", "Straight-down view": "Вигляд згори", "North up": "Північ угорі", @@ -1676,7 +1676,7 @@ "CLOUD {pct}%": "ХМАРНІСТЬ {pct}%", "CLOUD UNKNOWN": "ХМАРНІСТЬ НЕВІДОМА", "{source} · LOCATION QUERY": "{source} · ЗАПИТ ЗА РОЗТАШУВАННЯМ", - "REGIONAL NEWS": "НОВИНИ РЕГІОНУ", + "REGIONAL NEWS": "РЕГІОНАЛЬНІ НОВИНИ", "{label} · {radius} AIR/SEA WINDOW": "{label} · ПОВІТРЯ/МОРЕ · РАДІУС {radius}", "{scope} · INSTALLATIONS {coverage}": "{scope} · ОБʼЄКТИ: {coverage}", "CONTEXT STANDBY": "КОНТЕКСТ: ОЧІКУВАННЯ", @@ -1692,15 +1692,15 @@ "L": "Л", "R": "П", "{count} INPUTS UNKNOWN · NOT AN ALL-CLEAR": { - "one": "{count} НЕВІДОМИЙ ПАРАМЕТР · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", - "few": "{count} НЕВІДОМІ ПАРАМЕТРИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", - "many": "{count} НЕВІДОМИХ ПАРАМЕТРІВ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", - "other": "{count} НЕВІДОМОГО ПАРАМЕТРА · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»" + "one": "{count} ПОТІК БЕЗ ДАНИХ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "few": "{count} ПОТОКИ БЕЗ ДАНИХ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "many": "{count} ПОТОКІВ БЕЗ ДАНИХ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "other": "{count} ПОТОКУ БЕЗ ДАНИХ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»" }, "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "ДОСТУПНІ ВХІДНІ ДАНІ АКТУАЛЬНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "SQUAWK {code} · {status}": "СКВОК {code} · {status}", "ADS-B PRIORITY · {status}": "ADS-B ПРІОРИТЕТ · {status}", - "ADS-B EMERGENCY · {status}": "ADS-B АВАРІЯ · {status}", + "ADS-B EMERGENCY · {status}": "ADS-B АВАРІЙНИЙ СТАН · {status}", "AIRCRAFT": "БОРТ", "ACQUIRING SURFACE": "ЗАВАНТАЖЕННЯ ПОВЕРХНІ", "SURFACE FALLBACK": "РЕЗЕРВНА ПОВЕРХНЯ", @@ -1749,10 +1749,10 @@ "{aircraftClass} · {distance}": "{aircraftClass} · {distance}", "DISTANCE UNKNOWN": "ВІДСТАНЬ НЕВІДОМА", "{count} INPUTS UNKNOWN": { - "one": "{count} НЕВІДОМИЙ ПАРАМЕТР", - "few": "{count} НЕВІДОМІ ПАРАМЕТРИ", - "many": "{count} НЕВІДОМИХ ПАРАМЕТРІВ", - "other": "{count} НЕВІДОМОГО ПАРАМЕТРА" + "one": "{count} ПОТІК БЕЗ ДАНИХ", + "few": "{count} ПОТОКИ БЕЗ ДАНИХ", + "many": "{count} ПОТОКІВ БЕЗ ДАНИХ", + "other": "{count} ПОТОКУ БЕЗ ДАНИХ" }, "SOURCE STATUS UNAVAILABLE": "СТАТУС ДЖЕРЕЛА НЕДОСТУПНИЙ", "Restore real aircraft": "Повернути справжній літак", @@ -2462,7 +2462,7 @@ "ChatGPT OAuth session: {responses} response(s), {input} input and {output} output tokens, {captions} caption transcription(s) reported.": "Сеанс ChatGPT OAuth: відповідей — {responses}, вхідних токенів — {input}, вихідних токенів — {output}, транскрипцій субтитрів — {captions}.", "USD cost and the API spend cap are unavailable for this auth mode.": "Вартість у USD і ліміт витрат API недоступні в цьому режимі авторизації.", "Usage is incomplete because a response was still in flight when the session ended.": "Дані про використання неповні: на момент завершення сеансу одну з відповідей ще не було отримано.", - "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Орієнтовна вартість сеансу на {modelId} — відповідей: {responses}. Попереджає при {warn}, завершує сеанс при {cap}.", + "Estimated session cost on {modelId} — {responses} response(s). Warns at {warn}, ends the session at {cap}.": "Орієнтовна вартість сеансу на {modelId} — відповідей: {responses}. Попередження на {warn}, завершення сеансу на {cap}.", "Estimate is incomplete — a response was still in flight when the session ended, so its usage was never reported.": "Оцінка неповна: на момент завершення сеансу одну з відповідей ще не було отримано, тому її використання не враховано.", "STANDARD": "СТАНДАРТ", "{tier} applies next session": "{tier} застосовується з наступного сеансу", @@ -2844,7 +2844,7 @@ "Show the globe without a visual filter.": "Показує глобус без візуального фільтра.", "Emulate a green phosphor CRT with scanlines and screen curvature.": "Імітує CRT-монітор із зеленим люмінофором, рядками розгортки та вигнутим екраном.", "Simulate night-vision goggles with green intensification and a tube vignette.": "Імітує прилад нічного бачення: підсилене зелене зображення й затемнення по краях поля зору.", - "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Імітує термальний контраст у стилі FLIR. Для кольору збільште Ironbow.", + "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Імітує тепловий контраст у стилі FLIR. Для кольору збільште Ironbow.", "Apply bright cel-shaded color and illustrated outlines.": "Застосовує яскраву мультяшну заливку та ілюстровані контури.", "Apply high-contrast monochrome film-noir grading.": "Застосовує висококонтрастну чорно-білу обробку в стилі нуар.", "Add a cold, snowy whiteout treatment to the scene.": "Додає до сцени холодний ефект снігової імли.", @@ -2952,11 +2952,11 @@ "Elastic": "Гнучкий", "Weighted": "Зважений", "Fade": "Згасання", - "Detection fade distance": "Відстань згасання виявлення", - "World-overlay fade distance outside the keyhole as a percentage of its radius": "Відстань згасання накладки світу за межами ілюмінатора у відсотках його радіуса", + "Detection fade distance": "Відстань згасання накладки виявлення", + "World-overlay fade distance outside the keyhole as a percentage of its radius": "Відстань згасання накладки на глобусі за межами прицілу у відсотках від його радіуса", "Outside": "Ззовні", - "Detection opacity outside the keyhole": "Непрозорість виявлення за межами ілюмінатора", - "World-overlay label and card opacity beyond the fade distance": "Непрозорість підписів і карток накладки світу за межею згасання", + "Detection opacity outside the keyhole": "Непрозорість накладки виявлення за межами прицілу", + "World-overlay label and card opacity beyond the fade distance": "Непрозорість підписів і карток накладки на глобусі за межею згасання", "PARAMETERS": "ПАРАМЕТРИ", "3D aircraft — flat icons zoomed out, 3D models up close": "3D літаки — плоскі значки здалеку, 3D-моделі зблизька", "Models": "Моделі", @@ -2966,7 +2966,7 @@ "Scope": "Приціл", "Feather": "Розмиття", "Scope edge feather": "Розмиття краю прицілу", - "Scope edge feather as a percentage of the keyhole radius": "Розмиття краю прицілу у відсотках від радіуса ілюмінатора", + "Scope edge feather as a percentage of the keyhole radius": "Розмиття краю прицілу у відсотках від його радіуса", "Draw on the world — click vertices, double-click or Enter to finish, Esc to cancel": "Малювати на карті світу — клацайте вершини, подвійне клацання або Enter — завершити, Esc — скасувати", "Shape": "Фігура", "Shape to draw": "Фігура для малювання", @@ -3004,7 +3004,7 @@ "CCTV camera": "Камера CCTV", "CALIBRATION": "КАЛІБРУВАННЯ", "Drag the camera in the world: rings rotate, arrows move, handles set range/FOV": "Перетягніть камеру в сцені: кільця — обертання, стрілки — переміщення, маркери — дальність/FOV", - "Camera pose — click a value to type": "Позиція камери — клацніть значення, щоб увести", + "Camera pose — click a value to type": "Положення й орієнтація камери — клацніть значення, щоб увести нове", "Heading (compass °) — click to type": "Курс (° за компасом) — клацніть, щоб увести", "Pitch (° up/down) — click to type": "Нахил (° вгору/вниз) — клацніть, щоб увести", "Horizontal FOV (°) — click to type": "Горизонтальний FOV (°) — клацніть, щоб увести", From 4c80c38e2c7ae7617722447283bd489036210dd2 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 23:43:22 +0400 Subject: [PATCH 14/20] i18n(it): apply review round 4 Co-Authored-By: Claude Opus 5.5 --- docs/translations/it.md | 3 ++- src/i18n/locales/it.json | 44 ++++++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/docs/translations/it.md b/docs/translations/it.md index 58d7bb427..81854d6fe 100644 --- a/docs/translations/it.md +++ b/docs/translations/it.md @@ -9,7 +9,7 @@ Translation source: abiyeenzo (#912). - Standard Italian as in Italian software UIs. Address the user with informal "tu" imperatives: «Aggiungi», «Attiva», «Scegli», «Incolla», «Riprova». Tooltips that name an action use the same imperative: «Espandi il pannello», «Ripristina la camera». - Sentence case, not Title Case: "Live Flights" → «Voli live», "Space Missions" → «Missioni spaziali». UPPERCASE English stays UPPERCASE: «LIVE», «NON DISPONIBILE». - Quotes inside Italian text are straight double quotes: «Eliminare lo scatto "{shot}"?». Use the accented capitals (È, À) in UPPERCASE text: «VELOCITÀ», «CITTÀ». -- Errors read as a statement, not a past participle on its own: "Search failed" → «Ricerca non riuscita»; "Could not …" → «Impossibile …». A dash that joins a cause and a hint becomes a colon: «Chiave API rifiutata: controlla AISSTREAM_API_KEY». +- Errors read as a statement, not a past participle on its own: "Search failed" → «Ricerca non riuscita»; "Could not …" → «Impossibile …». A dash that joins a cause and a hint becomes a colon: «Chiave API rifiutata: controlla AISSTREAM_API_KEY». The same goes for a label and its hint in a tooltip: «Direzione (bussola °): clic per digitare». - Short labels, chips and HUD readouts stay short. A standard abbreviation with a period beats a wrapped line: REGOLAZ., RILEV., INCL., ALT., VEL., STIM., PROIEZ., ESP.; PREC / SUCC for PREV / NEXT and PREVIOUS / NEXT. - The HUD codes HDG, BRG, CRS, FOV and DEST stay in English, as in cockpit avionics. RANGE is «PORTATA». Words used in a sentence are translated: heading → «prua» (aircraft, ships) or «direzione» (camera, buses, trams, trains), course → «rotta». - Keyboard keys stay in English: Space, Enter, Esc, Tab, Shift, Backspace, H, 1–9 («Tieni premuto Space per parlare», «Premi Enter per riprovare»). @@ -67,6 +67,7 @@ The `many` form is the `other` text with «di» after the number when a noun fol | trigger record (USGS card) / OPEN SOURCE link | scheda / APRI LA FONTE | | advisory (NHC/CPHC cyclone) / cone | bollettino / cono di incertezza | | forecast lead hours (cyclone points) | scadenze di previsione in ore | +| AIR / SEA (radio category) / ground station | ARIA / MARE / stazione di terra | | radio station / broadcaster | stazione radio / emittente | | CH (radio channel readout) | CH (unchanged) | | road / flow (traffic) | strada / flusso | diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index cdfd7ae98..269100030 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -574,7 +574,7 @@ "Wind unavailable": "Vento non disponibile", "Advisory center / forecast track": "Centro del ciclone da bollettino / traccia prevista", "Center-track uncertainty cone": "Cono di incertezza della traccia del centro", - "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Seleziona una tempesta sulla mappa, o scegline una nell'elenco per selezionarla e spostare la camera. Fai clic su un punto vuoto della mappa per annullare la selezione. Contesto dai bollettini NOAA NHC/CPHC. Il cono descrive l'incertezza prevista sulla traccia del centro, non le dimensioni della tempesta né l'intera area di pericolo. Le etichette dei punti di previsione indicano le scadenze di previsione in ore fornite dalla fonte, non orari calcolati dall'emissione del bollettino. La geometria segue la superficie; l'altezza non è la quota meteorologica. Consulta il bollettino ufficiale.", + "Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Seleziona una tempesta sulla mappa, o scegline una nell'elenco per selezionarla e spostare la camera. Fai clic su un punto vuoto della mappa per annullare la selezione. Contesto dai bollettini NOAA NHC/CPHC. Il cono descrive l'incertezza sulla traccia prevista del centro, non le dimensioni della tempesta né l'intera area di pericolo. Le etichette dei punti di previsione indicano le scadenze di previsione in ore fornite dalla fonte, non orari calcolati dall'emissione del bollettino. La geometria segue la superficie; l'altezza non è la quota meteorologica. Consulta il bollettino ufficiale.", "DRIVE": "AUTO", "Drive": "In auto", "WALK": "A PIEDI", @@ -962,7 +962,7 @@ "radio|TALK": "TALK", "radio|WEATHER": "METEO", "radio|SAFETY": "SICUREZZA", - "radio|AIR / SEA": "AERO / MARE", + "radio|AIR / SEA": "ARIA / MARE", "radio|TRANSIT": "TRASPORTI", "radio|MUSIC": "MUSICA", "radio|OTHER": "ALTRO", @@ -1010,7 +1010,7 @@ "MORE DETAIL · 30 m": "PIÙ DETTAGLIO · 30 m", "Sentinel-2 and Landsat via HLS, 30 m, every 2–6 days": "Sentinel-2 e Landsat tramite HLS, 30 m, ogni 2–6 giorni", "DAILY OVERVIEW · 250 m": "PANORAMICA GIORNALIERA · 250 m", - "VIIRS daily mosaic, 250 m, follows broad changes; little detail under 25 km": "Mosaico giornaliero VIIRS, 250 m, segue i cambiamenti ampi; pochi dettagli sotto i 25 km", + "VIIRS daily mosaic, 250 m, follows broad changes; little detail under 25 km": "Mosaico giornaliero VIIRS, 250 m, mostra i cambiamenti su vasta scala; pochi dettagli sotto i 25 km", "Sentinel-2": "Sentinel-2", "Sentinel-2 via HLS": "Sentinel-2 tramite HLS", "Landsat 8/9": "Landsat 8/9", @@ -1120,7 +1120,7 @@ "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop.", "SIMULATED · Roads: OpenStreetMap · Flow: TomTom (no matches)": "SIMULATO · Strade: OpenStreetMap · Flusso: TomTom (nessuna corrispondenza)", "SIMULATED — traffic service unreachable": "SIMULATO: servizio traffico irraggiungibile", - "SIMULATED — add TomTom key for live": "SIMULATO: aggiungi la chiave TomTom per il live", + "SIMULATED — add TomTom key for live": "SIMULATO: aggiungi la chiave TomTom per i dati live", "OpenFreeMap tiles rate-limited": "Tile OpenFreeMap con limite di richieste", "OpenFreeMap tiles timed out": "Tile OpenFreeMap in timeout", "OpenFreeMap tiles unavailable": "Tile OpenFreeMap non disponibili", @@ -1702,12 +1702,12 @@ "Current style: {style} — click for next": "Stile attuale: {style}. Clic per il successivo", "Collapse Contact panel": "Comprimi il pannello Contatto", "Expand Contact panel": "Espandi il pannello Contatto", - "Collapse contact panel": "Comprimi pannello contatto", - "Expand contact panel": "Espandi pannello contatto", + "Collapse contact panel": "Comprimi il pannello contatto", + "Expand contact panel": "Espandi il pannello contatto", "Collapse cockpit briefing panel": "Comprimi il pannello briefing del cockpit", "Expand cockpit briefing panel": "Espandi il pannello briefing del cockpit", - "Collapse briefing panel": "Comprimi pannello briefing", - "Expand briefing panel": "Espandi pannello briefing", + "Collapse briefing panel": "Comprimi il pannello briefing", + "Expand briefing panel": "Espandi il pannello briefing", "OBSERVED / MAPPED PINGS": "PING OSSERVATI / MAPPATI", "SOURCE-BACKED EVENTS · NO SYNTHETIC NEWS": "EVENTI DA FONTI · NESSUNA NOTIZIA SINTETICA", "LATEST LOCATION-MATCHED REPORTING": "ULTIME NOTIZIE PER POSIZIONE", @@ -2198,7 +2198,7 @@ "{source} rate limited (anonymous)": "{source}: limite di richieste (anonimo)", "{source} rate limited": "{source}: limite di richieste", "{source} network error": "{source}: errore di rete", - "Malformed {source} aircraft rows": "Righe aereo di {source} non valide", + "Malformed {source} aircraft rows": "Righe degli aerei di {source} non valide", "Malformed {source} response": "Risposta di {source} non valida", "entry {n}": "voce {n}", "feeds {names} stale": { @@ -2783,7 +2783,7 @@ "Map source": "Fonte mappa", "Style": "Stile", "Expand LOCATION": "Espandi POSIZIONE", - "Collapse panel": "Comprimi pannello", + "Collapse panel": "Comprimi il pannello", "Pin location tray": "Fissa il pannello posizione", "Keep location tray open": "Mantieni aperto il pannello posizione", "Search any location": "Cerca un luogo", @@ -2799,7 +2799,7 @@ "Previous station": "Stazione precedente", "Next station": "Stazione successiva", "Compact Radio volume": "Volume Radio (controlli compatti)", - "Expand panel": "Espandi pannello", + "Expand panel": "Espandi il pannello", "Context mode": "Modalità contesto", "CONTACTS": "CONTATTI", "Cycles the nearest contacts of whatever type you select — planes, vessels, installations. Satellites track independently.": "Scorre i contatti più vicini del tipo selezionato: aerei, navi, installazioni. I satelliti vengono tracciati in modo indipendente.", @@ -2926,7 +2926,7 @@ "Sharpening": "Nitidezza", "Sharpen": "Nitidezza", "Sharpen intensity": "Intensità della nitidezza", - "EXIT CLEAN VIEW": "ESCI DA VISTA PULITA", + "EXIT CLEAN VIEW": "ESCI DALLA VISTA PULITA", "Return UI controls": "Ripristina i controlli UI", "Initializing photorealistic world...": "Inizializzazione del mondo fotorealistico...", "DATA LAYERS": "LIVELLI DATI", @@ -2935,14 +2935,14 @@ "CCTV camera": "Telecamera CCTV", "CALIBRATION": "CALIBRAZIONE", "Drag the camera in the world: rings rotate, arrows move, handles set range/FOV": "Trascina la telecamera nel mondo: gli anelli ruotano, le frecce spostano, i punti di controllo impostano portata/FOV", - "Camera pose — click a value to type": "Posa della telecamera — clic su un valore per digitare", - "Heading (compass °) — click to type": "Direzione (bussola °) — clic per digitare", - "Pitch (° up/down) — click to type": "Inclinazione (° su/giù) — clic per digitare", - "Horizontal FOV (°) — click to type": "FOV orizzontale (°) — clic per digitare", - "Range / monitor-plane distance (m) — click to type": "Portata / distanza del piano monitor (m) — clic per digitare", - "Mount height above ground (m) — click to type": "Altezza di montaggio dal suolo (m) — clic per digitare", - "North offset from catalog position (m) — click to type": "Scostamento a nord dalla posizione a catalogo (m) — clic per digitare", - "East offset from catalog position (m) — click to type": "Scostamento a est dalla posizione a catalogo (m) — clic per digitare", + "Camera pose — click a value to type": "Posa della telecamera: clic su un valore per digitare", + "Heading (compass °) — click to type": "Direzione (bussola °): clic per digitare", + "Pitch (° up/down) — click to type": "Inclinazione (° su/giù): clic per digitare", + "Horizontal FOV (°) — click to type": "FOV orizzontale (°): clic per digitare", + "Range / monitor-plane distance (m) — click to type": "Portata / distanza del piano monitor (m): clic per digitare", + "Mount height above ground (m) — click to type": "Altezza di montaggio dal suolo (m): clic per digitare", + "North offset from catalog position (m) — click to type": "Scostamento a nord dalla posizione a catalogo (m): clic per digitare", + "East offset from catalog position (m) — click to type": "Scostamento a est dalla posizione a catalogo (m): clic per digitare", "SAVE CAL": "SALVA CAL", "RESET CAL": "RESET CAL", "SCENE SUMMARY": "RIEPILOGO SCENA", @@ -2953,7 +2953,7 @@ "FIT": "ADATTA", "Fit: show the whole photo, with dark bars where its shape differs from the frame": "Adatta: mostra l'intera foto, con bande scure dove la sua forma differisce dal riquadro", "FILL": "RIEMPI", - "Fill: fill the frame edge to edge, cropping the photo": "Riempi: riempie il riquadro da bordo a bordo, ritagliando la foto", + "Fill: fill the frame edge to edge, cropping the photo": "Riempi: copri il riquadro da bordo a bordo, ritagliando la foto", "Close the image and deselect it on the map": "Chiudi l'immagine e deselezionala sulla mappa", "Close the street-level image": "Chiudi l'immagine a livello stradale", "Street-level viewer": "Visualizzatore a livello stradale", @@ -2976,7 +2976,7 @@ "IMPORT": "IMPORTA", "RUN LOG": "LOG ESECUZIONE", "POWER UP": "ACCENDI", - "GROUND STATION · PROVIDER SETTINGS": "STAZIONE A TERRA · IMPOSTAZIONI PROVIDER", + "GROUND STATION · PROVIDER SETTINGS": "STAZIONE DI TERRA · IMPOSTAZIONI PROVIDER", "Close key setup": "Chiudi la configurazione delle chiavi", "Power up the globe": "Accendi il globo", "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.": "Il globo funziona già senza chiavi. Ogni chiave qui sotto attiva un altro feed reale: incollane una e verrà salvata nella configurazione locale di questa app, poi il server si riavvia da solo. Le chiavi lato server restano su questa macchina; le chiavi di Google Maps e Cesium ion vengono usate nel browser e richiedono restrizioni configurate presso il provider. Le chiavi configurate altrove vengono mostrate ma mai modificate.", From d243177d11f9f0cc161ad57f09da5cc3c1a3aa6a Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Wed, 28 Oct 2026 23:55:16 +0400 Subject: [PATCH 15/20] i18n(uk): apply review round 4 Co-Authored-By: Claude Opus 5.5 --- docs/translations/uk.md | 7 +++++++ src/i18n/locales/uk.json | 44 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/docs/translations/uk.md b/docs/translations/uk.md index b960ab3a9..673748f42 100644 --- a/docs/translations/uk.md +++ b/docs/translations/uk.md @@ -97,3 +97,10 @@ A `tn()` entry needs four forms. `Intl.PluralRules('uk')` picks: | thermal (FLIR-style imaging) | тепловий (not термальний) | | map stack | набір карт | | stage (rocket) re-entry / recovery | вхід ступеня в атмосферу / повернення | +| ON / OFF (toggle chips) | УВІМК. / ВИМК. | +| Clean UI / EXIT CLEAN VIEW | чистий інтерфейс / ПОВЕРНУТИ ІНТЕРФЕЙС | +| full globe view | вигляд всього глобуса | +| inputs (cockpit context chip) | потоки (not вхідні дані) | +| downrange (rocket stage) | дальність | +| resolution (spatial) | роздільна здатність (not роздільність) | +| shared follow expired | посилання на стеження застаріло | diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index a7a5f2634..530a91267 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -99,7 +99,7 @@ "{provider} media: {source}": "Медіа {provider}: {source}", "{provider} · PROVIDER CONTROLS": "{provider} · ВБУДОВАНИЙ ПЛЕЄР", "YOUTUBE {state} · OPEN ORIGINAL": "YOUTUBE {state} · ВІДКРИТИ ОРИГІНАЛ", - "INITIATION": "ЗАРОДЖЕННЯ", + "INITIATION": "ПОЧАТОК", "DAMMING": "ЗАГАТА", "SECONDARY FAILURE": "ПОВТОРНИЙ ЗСУВ", "BORDER ARRIVAL": "ДОСЯГНЕННЯ КОРДОНУ", @@ -778,7 +778,7 @@ "Low-accuracy score < 2%": "Показник неточності < 2%", "Low-accuracy score 2–10%": "Показник неточності 2–10%", "Low-accuracy score > 10%": "Показник неточності > 10%", - "GNSS integrity source unavailable": "Джерело цілісності GNSS недоступне", + "GNSS integrity source unavailable": "Джерело даних про цілісність GNSS недоступне", "Regional sample · 250 nm radius · cells from visited views over 30 min": "Регіональна вибірка · радіус 250 мор. миль · комірки з переглянутих ділянок карти за 30 хв", "Retrying automatically at {time} UTC": "Автоматичний повтор о {time} UTC", "Retrying automatically after provider cooldown": "Автоматичний повтор після паузи постачальника", @@ -829,7 +829,7 @@ "UNSPECIFIED": "НЕ ВКАЗАНО", "+{count} additional payload records": "Додаткові записи корисного навантаження: +{count}", "PAYLOAD DATA UNAVAILABLE": "ДАНІ КОРИСНОГО НАВАНТАЖЕННЯ НЕДОСТУПНІ", - "{value} KM DOWNRANGE": "{value} КМ УЗДОВЖ ТРАСИ", + "{value} KM DOWNRANGE": "ДАЛЬНІСТЬ {value} КМ", "POSITION UNAVAILABLE": "ПОЗИЦІЯ НЕДОСТУПНА", "FLIGHT {count}": "ПОЛІТ {count}", "REUSED": "ПОВТОРНО ВИКОРИСТАНИЙ", @@ -1135,7 +1135,7 @@ "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "ОНЛАЙН · Дороги: OpenStreetMap · Потік: TomTom · охоплення {percent}%", "SIMULATED · Roads: OpenStreetMap · Flow: TomTom (no matches)": "ІМІТАЦІЯ · Дороги: OpenStreetMap · Потік: TomTom (немає збігів)", "SIMULATED — traffic service unreachable": "ІМІТАЦІЯ — сервіс руху недоступний", - "SIMULATED — add TomTom key for live": "ІМІТАЦІЯ — додайте ключ TomTom для реального часу", + "SIMULATED — add TomTom key for live": "ІМІТАЦІЯ — додайте ключ TomTom для даних у реальному часі", "OpenFreeMap tiles rate-limited": "Тайли OpenFreeMap: перевищено ліміт запитів", "OpenFreeMap tiles timed out": "Тайли OpenFreeMap: минув час очікування", "OpenFreeMap tiles unavailable": "Тайли OpenFreeMap недоступні", @@ -1260,7 +1260,7 @@ "STALE · cached source metadata": "ЗАСТАРІЛО · метадані джерела з кешу", "Map center is outside source coverage": "Центр карти поза зоною покриття джерела", "NOAA/NWS 15-minute lightning density derived from Vaisala NLDN/GLD360. Coverage 110°E across the Pacific/Americas to 0°, 25°S–80°N. Not a live strike count, global coverage or a safety warning.": "15-хвилинна щільність блискавок NOAA/NWS на основі Vaisala NLDN/GLD360. Покриття — від 110° сх. д. через Тихий океан і Америку до 0°, 25° пд. ш.–80° пн. ш. Це не підрахунок розрядів у реальному часі, не глобальне покриття й не попередження про небезпеку.", - "NOAA MRMS radar echoes indicate precipitation patterns, not rain rate, a storm warning or a future forecast. Native source approximately 1 km; display is limited to level 6. Frames use exact advertised observation times.": "Радіолокаційні відлуння NOAA MRMS показують картину опадів, а не їхню інтенсивність, штормове попередження чи прогноз. Вихідна роздільність близько 1 км; показ обмежено рівнем 6. Для кадрів використано точний заявлений час спостережень.", + "NOAA MRMS radar echoes indicate precipitation patterns, not rain rate, a storm warning or a future forecast. Native source approximately 1 km; display is limited to level 6. Frames use exact advertised observation times.": "Радіолокаційні відлуння NOAA MRMS показують картину опадів, а не їхню інтенсивність, штормове попередження чи прогноз. Вихідна роздільна здатність близько 1 км; показ обмежено рівнем 6. Для кадрів використано точний заявлений час спостережень.", "GOES-19/18 longwave infrared Band 14 regional; NESDIS global longwave mosaic. Clouds only dims everything but bright, cold cloud tops; a brightness filter, not a cloud mask. Coverage and freshness differ by region.": "Регіональний довгохвильовий ІЧ-канал 14 GOES-19/18; глобальна довгохвильова мозаїка NESDIS. Режим «Лише хмари» затемнює все, крім яскравих холодних вершин хмар; це фільтр яскравості, а не маска хмарності. Покриття й актуальність різняться за регіонами.", "REGION": "РЕГІОН", "IMAGE": "ЗНІМОК", @@ -1313,7 +1313,7 @@ "Issued: {time}": "Випущено: {time}", "Selected field unavailable · wind remains visible": "Вибране поле недоступне · вітер залишається видимим", "{error} · wind remains visible": "{error} · вітер залишається видимим", - "Surface wind at 10 m. Approximately 1° global grid. Curves follow the 10 m wind field, lifted 12 km for visibility; display height is not weather altitude. View lighting is for readability. Animation shows flow through one fixed forecast; it does not advance time. Color fields drape the globe basemap or the active photorealistic 3D Tiles.": "Приземний вітер на висоті 10 м. Глобальна сітка близько 1°. Лінії повторюють поле вітру на 10 м і підняті на 12 км для наочності; висота показу не є висотою погодних явищ. Освітлення вигляду — для зручності читання. Анімація показує потік в одному фіксованому прогнозі й не зсуває час. Кольорові поля накладаються на підкладку глобуса або на активні фотореалістичні 3D Tiles.", + "Surface wind at 10 m. Approximately 1° global grid. Curves follow the 10 m wind field, lifted 12 km for visibility; display height is not weather altitude. View lighting is for readability. Animation shows flow through one fixed forecast; it does not advance time. Color fields drape the globe basemap or the active photorealistic 3D Tiles.": "Приземний вітер на висоті 10 м. Глобальна сітка близько 1°. Лінії повторюють поле вітру на 10 м і підняті на 12 км для наочності; висота показу не є висотою погодних явищ. Освітлення сцени підібрано для зручності читання. Анімація показує потік в одному фіксованому прогнозі й не зсуває час. Кольорові поля накладаються на підкладку глобуса або на активні фотореалістичні 3D Tiles.", "MODEL": "МОДЕЛЬ", "FIELD": "ПОЛЕ", "UNITS": "ОДИНИЦІ", @@ -1487,7 +1487,7 @@ "Import was not applied. The current project may have changed.": "Імпорт не застосовано. Можливо, поточний проєкт змінився.", "Select a scene and shot first": "Спершу виберіть сцену й кадр", "Edit scene details": "Змінити параметри сцени", - "Camera positions use degrees and meters above the ellipsoid. Drafts are validated before they replace your saved scene.": "Положення камери задаються в градусах і метрах над еліпсоїдом. Перш ніж замінити збережену сцену, чернетку перевіряють.", + "Camera positions use degrees and meters above the ellipsoid. Drafts are validated before they replace your saved scene.": "Положення камери задаються в градусах і метрах над еліпсоїдом. Перш ніж замінити збережену сцену, чернетка проходить перевірку.", "Anchors and data packs": "Якорі й пакети даних", "Shot camera, timing, packs and actions": "Камера кадру, таймінг, пакети й дії", "New anchor ID": "ID нового якоря", @@ -1662,8 +1662,8 @@ "SNOW SHOWERS": "ЗЛИВОВИЙ СНІГ", "THUNDERSTORM": "ГРОЗА", "MIXED CONDITIONS": "ЗМІШАНІ УМОВИ", - "CYCLE ON": "ЦИКЛ УВІМКНЕНО", - "CYCLE OFF": "ЦИКЛ ВИМКНЕНО", + "CYCLE ON": "ЦИКЛ УВІМК.", + "CYCLE OFF": "ЦИКЛ ВИМК.", "Stop automatic page cycling. Previous, Next, and the SIG/NEWS/LOCAL tabs stay available.": "Зупинити автоматичне гортання сторінок. Кнопки ПОПЕР./ДАЛІ та вкладки СИГН./НОВИНИ/МІСЦ. залишаються доступними.", "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.": "Автоматично гортає сторінки брифінгу кожні 9 секунд (Сигнали → Новини → Місцеві дані). Пауза, доки ви наводите вказівник на панель або вона у фокусі. Дані сигналів у реальному часі однаково оновлюються безперервно.", "ACQUIRING REGIONAL NEWS": "ОТРИМАННЯ РЕГІОНАЛЬНИХ НОВИН", @@ -1677,7 +1677,7 @@ "CLOUD UNKNOWN": "ХМАРНІСТЬ НЕВІДОМА", "{source} · LOCATION QUERY": "{source} · ЗАПИТ ЗА РОЗТАШУВАННЯМ", "REGIONAL NEWS": "РЕГІОНАЛЬНІ НОВИНИ", - "{label} · {radius} AIR/SEA WINDOW": "{label} · ПОВІТРЯ/МОРЕ · РАДІУС {radius}", + "{label} · {radius} AIR/SEA WINDOW": "{label} · РЕЙСИ / СУДНА · РАДІУС {radius}", "{scope} · INSTALLATIONS {coverage}": "{scope} · ОБʼЄКТИ: {coverage}", "CONTEXT STANDBY": "КОНТЕКСТ: ОЧІКУВАННЯ", "ENABLE GLOBAL CONTEXT FOR PROXIMITY PINGS": "УВІМКНІТЬ ГЛОБАЛЬНИЙ КОНТЕКСТ, ЩОБ БАЧИТИ КОНТАКТИ ПОБЛИЗУ", @@ -1697,7 +1697,7 @@ "many": "{count} ПОТОКІВ БЕЗ ДАНИХ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "other": "{count} ПОТОКУ БЕЗ ДАНИХ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»" }, - "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "ДОСТУПНІ ВХІДНІ ДАНІ АКТУАЛЬНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "AVAILABLE INPUTS CURRENT · NOT AN ALL-CLEAR": "ДОСТУПНІ ПОТОКИ АКТУАЛЬНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "SQUAWK {code} · {status}": "СКВОК {code} · {status}", "ADS-B PRIORITY · {status}": "ADS-B ПРІОРИТЕТ · {status}", "ADS-B EMERGENCY · {status}": "ADS-B АВАРІЙНИЙ СТАН · {status}", @@ -1947,7 +1947,7 @@ "Press Enter to try again.": "Натисніть Enter, щоб спробувати знову.", "Detailed outline unavailable": "Докладний контур недоступний", "Fly to a POI first": "Спершу полетіть до орієнтира", - "Reset to full globe view": "Скинути до загального вигляду глобуса", + "Reset to full globe view": "Скинути до вигляду всього глобуса", "Reset cockpit to full globe view": "Скинути кабіну до вигляду всього глобуса", "Resetting to full globe view": "Скидання до вигляду всього глобуса", "Resetting cockpit to full globe view": "Скидання кабіни до вигляду всього глобуса", @@ -2023,7 +2023,7 @@ " · degraded directory": " · каталог з перебоями", " · stale directory": " · каталог застарів", " · outside current filter": " · поза поточним фільтром", - "Ready — playback starts only from your action": "Готово — відтворення починається лише за вашою дією", + "Ready — playback starts only from your action": "Готово — відтворення почнеться лише після вашої дії", "Radio off": "Радіо вимкнено", "Connecting directly to broadcaster…": "Пряме зʼєднання з мовником…", "Buffering broadcaster stream…": "Буферизація потоку мовника…", @@ -2046,7 +2046,7 @@ "Newest frame per product": "Найсвіжіший кадр кожного продукту", "Replay observed history": "Відтворити історію спостережень", "Imagery on Esri · Google 3D returns when cleared": "Підкладка: Esri · скидання поверне Google 3D", - "Point the camera at the ground to use the view": "Для видимої області наведіть камеру на землю", + "Point the camera at the ground to use the view": "Наведіть камеру на землю, щоб вибрати видиму область", "That point cannot anchor a box": "Від цієї точки не можна побудувати область", "Imagery stops at ±{limit}° latitude": "Знімки є лише до ±{limit}° широти", "{owner} is using the pointer — close it first": "Вказівник зайнятий: «{owner}». Спершу закрийте його", @@ -2168,9 +2168,9 @@ "Cancel": "Скасувати", "EDIT DETAILS": "ЗМІНИТИ ПАРАМЕТРИ", "SHARE SCENE": "ПОДІЛИТИСЯ СЦЕНОЮ", - "Shared flight follow expired": "Термін стеження за рейсом за посиланням минув", - "Shared military flight follow expired": "Термін стеження за військовим рейсом за посиланням минув", - "Shared satellite follow expired": "Термін стеження за супутником за посиланням минув", + "Shared flight follow expired": "Посилання на стеження за рейсом застаріло", + "Shared military flight follow expired": "Посилання на стеження за військовим рейсом застаріло", + "Shared satellite follow expired": "Посилання на стеження за супутником застаріло", "Shared flight could not be restored — feed unavailable": "Не вдалося відновити рейс за посиланням — потік даних недоступний", "Shared military flight could not be restored — feed unavailable": "Не вдалося відновити військовий рейс за посиланням — потік даних недоступний", "Shared satellite could not be restored — feed unavailable": "Не вдалося відновити супутник за посиланням — потік даних недоступний", @@ -2178,7 +2178,7 @@ "Shared military flight is unavailable": "Військовий рейс за посиланням недоступний", "Shared satellite is unavailable": "Супутник за посиланням недоступний", "entity": "обʼєкт", - "Shared {subject} follow expired": "Стеження за посиланням завершено: {subject}", + "Shared {subject} follow expired": "Посилання на стеження застаріло: {subject}", "Shared {subject} could not be restored — feed unavailable": "Не вдалося відновити за посиланням: {subject} — потік даних недоступний", "Shared {subject} is unavailable": "Недоступно за посиланням: {subject}", "{id} isn't reporting now — showing where it was last seen": "{id} зараз не передає даних — показано останнє відоме місце", @@ -2384,7 +2384,7 @@ "Referenced items": "Згадані обʼєкти", "NOTES & SOURCES": "НОТАТКИ Й ДЖЕРЕЛА", "Show Voice Preview": "Показувати відповіді асистента", - "Voice inactivity timeout": "Тайм-аут бездіяльності голосу", + "Voice inactivity timeout": "Тайм-аут бездіяльності голосового режиму", "Minutes": "хв", "Custom": "Інше", "These preferences stay in this browser.": "Ці налаштування зберігаються в цьому браузері.", @@ -2794,7 +2794,7 @@ "MIL": "ВІЙСЬК.", "SITE": "ОБʼЄКТИ", "NEAREST OBSERVED / MAPPED": "НАЙБЛИЖЧІ СПОСТЕРЕЖЕНІ / НАНЕСЕНІ", - "AVAILABLE INPUTS ONLY · NOT AN ALL-CLEAR": "ЛИШЕ ДОСТУПНІ ВХІДНІ ДАНІ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", + "AVAILABLE INPUTS ONLY · NOT AN ALL-CLEAR": "ЛИШЕ ДОСТУПНІ ПОТОКИ · НЕ ОЗНАЧАЄ «УСЕ ЧИСТО»", "WX": "ПОГОДА", "Cockpit briefing carousel": "Карусель брифінгу кабіни", "Estimated flight plan": "Орієнтовний план польоту", @@ -2995,7 +2995,7 @@ "Sharpening": "Підвищення різкості", "Sharpen": "Різкість", "Sharpen intensity": "Інтенсивність різкості", - "EXIT CLEAN VIEW": "ВИЙТИ З ЧИСТОГО ВИГЛЯДУ", + "EXIT CLEAN VIEW": "ПОВЕРНУТИ ІНТЕРФЕЙС", "Return UI controls": "Повернути елементи керування", "Initializing photorealistic world...": "Ініціалізація фотореалістичного світу...", "DATA LAYERS": "ШАРИ ДАНИХ", @@ -3060,7 +3060,7 @@ "Toggle straight-down and tilted map views": "Перемкнути вигляд карти: згори або з нахилом", "Reset map to north up": "Повернути карту північчю вгору", "Reset map bearing to north": "Скинути азимут карти на північ", - "Reset camera and return to full globe view": "Скинути камеру та повернутися до загального вигляду глобуса", + "Reset camera and return to full globe view": "Скинути камеру та повернутися до вигляду всього глобуса", "MISSION CONTROL · FIRST LAUNCH": "ЦЕНТР КЕРУВАННЯ · ПЕРШИЙ ЗАПУСК", "Choose your first view": "Виберіть, із чого почати", "LIVE CONTACTS": "КОНТАКТИ ОНЛАЙН", From eb76d5265b6946a17fcc838137259d59d49ba0b2 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Thu, 29 Oct 2026 14:19:24 +0400 Subject: [PATCH 16/20] i18n(uk): translate strings new in main Co-Authored-By: Claude Opus 5.5 --- src/i18n/locales/uk.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 530a91267..fe0f3ccac 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -593,6 +593,8 @@ "routing service is rate limited": "перевищено ліміт запитів до сервісу маршрутизації", "route leg too long": "ділянка маршруту надто довга", "route too long": "маршрут надто довгий", + "routing busy — too many routes at once": "сервіс маршрутизації перевантажений — забагато маршрутів одночасно", + "route proxy error": "помилка проксі маршрутизації", "{error} — try again in a moment": "{error} — спробуйте ще раз трохи згодом", "Routing is rate limited — try again in a moment": "Побудова маршруту: перевищено ліміт запитів — спробуйте ще раз трохи згодом", "Routing unavailable (HTTP {status})": "Побудова маршруту недоступна (HTTP {status})", @@ -1130,6 +1132,7 @@ "LIVE · Roads: {source} · No flow roads in view": "ОНЛАЙН · Дороги: {source} · У кадрі немає доріг із потоком", "LIVE · Roads: {source} · Flow {percent}%": "ОНЛАЙН · Дороги: {source} · Потік {percent}%", "SIMULATED · Roads: {source} · Flow {percent}%": "ІМІТАЦІЯ · Дороги: {source} · Потік {percent}%", + "STALE · Roads: {source} · Flow: cached TomTom tiles": "ЗАСТАРІЛО · Дороги: {source} · Потік: тайли TomTom із кешу", "Syncing flow · Roads: OpenStreetMap · Flow: TomTom · Unmatched: simulated": "Синхронізація потоку · Дороги: OpenStreetMap · Потік: TomTom · Без збігів: імітація", "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov · Unmatched: simulated": "ОНЛАЙН · Дороги: OpenStreetMap · Потік: TomTom · охоплення {percent}% · Без збігів: імітація", "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "ОНЛАЙН · Дороги: OpenStreetMap · Потік: TomTom · охоплення {percent}%", From d383f25bb38619985c0f536ca29f250e50ef2f60 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Thu, 29 Oct 2026 14:31:34 +0400 Subject: [PATCH 17/20] i18n(it): translate strings new in main Co-Authored-By: Claude Opus 5.5 --- src/i18n/locales/it.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 269100030..86adc85d4 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -583,6 +583,8 @@ "Bike": "In bici", "rate limited": "limite di richieste raggiunto", "routing service is rate limited": "il servizio di percorsi ha raggiunto il limite di richieste", + "routing busy — too many routes at once": "servizio di percorsi occupato: troppi percorsi contemporaneamente", + "route proxy error": "errore del proxy dei percorsi", "route leg too long": "tratta del percorso troppo lunga", "route too long": "percorso troppo lungo", "{error} — try again in a moment": "{error}: riprova tra un momento", @@ -1115,6 +1117,7 @@ "LIVE · Roads: {source} · No flow roads in view": "LIVE · Strade: {source} · Nessuna strada con flusso in vista", "LIVE · Roads: {source} · Flow {percent}%": "LIVE · Strade: {source} · Flusso {percent}%", "SIMULATED · Roads: {source} · Flow {percent}%": "SIMULATO · Strade: {source} · Flusso {percent}%", + "STALE · Roads: {source} · Flow: cached TomTom tiles": "OBSOLETO · Strade: {source} · Flusso: tile TomTom in cache", "Syncing flow · Roads: OpenStreetMap · Flow: TomTom · Unmatched: simulated": "Sincronizzazione flusso · Strade: OpenStreetMap · Flusso: TomTom · Non abbinate: simulate", "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov · Unmatched: simulated": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop. · Non abbinate: simulate", "LIVE · Roads: OpenStreetMap · Flow: TomTom · {percent}% cov": "LIVE · Strade: OpenStreetMap · Flusso: TomTom · {percent}% cop.", From f8e96e1484afe1bce4644b008a3f319c3f27b6ef Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Thu, 29 Oct 2026 14:54:44 +0400 Subject: [PATCH 18/20] i18n(it): address code review findings Localize a bootstrap shot title without a source pack only when the Nepal pack marker binds that title to the shot's id, so an operator shot renamed to a bootstrap title in the built-in scene stays as typed. Co-Authored-By: Claude Opus 5.5 --- src/scenes/bootstrapTitleProvenance.test.mjs | 20 +++++++++++++++ src/scenes/director.test.mjs | 4 +++ src/scenes/recipes.js | 27 ++++++++++++++------ src/scenes/sceneTitleDisplay.test.mjs | 16 ++++++++++-- 4 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 src/scenes/bootstrapTitleProvenance.test.mjs diff --git a/src/scenes/bootstrapTitleProvenance.test.mjs b/src/scenes/bootstrapTitleProvenance.test.mjs new file mode 100644 index 000000000..0d402dbbd --- /dev/null +++ b/src/scenes/bootstrapTitleProvenance.test.mjs @@ -0,0 +1,20 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { SCENE_RECIPES, displayShotTitle } from './recipes.js'; +import { setLocale } from '../i18n/index.js'; + +test('an operator-typed title in the built-in Nepal scene stays as typed', () => { + const scene = SCENE_RECIPES.find((r) => r.id === 'bhote-koshi-nepal-scene'); + assert.ok(scene, 'built-in bootstrap scene exists'); + for (const locale of ['ru', 'es', 'it', 'zh-CN', 'zh-Hant']) { + setLocale(locale); + const title = 'Global Incident Context'; + // A shot captured by the operator: no sourcePackId, renamed to this title. + const shown = displayShotTitle( + title, + { id: 'shot-user', title }, + { id: scene.id }, + ); + assert.equal(shown, title, `${locale}: got ${shown}`); + } +}); diff --git a/src/scenes/director.test.mjs b/src/scenes/director.test.mjs index fd8db6149..7b59507be 100644 --- a/src/scenes/director.test.mjs +++ b/src/scenes/director.test.mjs @@ -712,6 +712,10 @@ test('a legacy three-shot Nepal browser project bootstraps to the current 25-sho assert.deepEqual(scene.shots.slice(0, 3).map(({ camera }) => camera), originalCameras); assert.equal(scene.appliedShotPacks[0].id, 'bhote-koshi-nepal-evidence-pack'); assert.equal(scene.appliedShotPacks[0].version, 18); + // displayShotTitle trusts these bindings to localize the bootstrap shots. + for (const shot of scene.shots.slice(0, 8)) { + assert.equal(scene.appliedShotPacks[0].shotBindings[shot.title], shot.id); + } assert.equal(director._selectedSceneId, scene.id); assert.equal(director._selectedShotId, scene.shots[0].id); } finally { diff --git a/src/scenes/recipes.js b/src/scenes/recipes.js index 1a886c541..37eed431b 100644 --- a/src/scenes/recipes.js +++ b/src/scenes/recipes.js @@ -1061,33 +1061,44 @@ export function displaySceneTitle(scene) { * (`sourcePackId`), so a typed title that matches a built-in one stays as * typed. Without `shot`, the title alone decides. * @param {string} title - * @param {{sourcePackId?: string}} [shot] - * @param {{id?: string}} [scene] The shot's scene, for projects saved before - * shots recorded their source pack. + * @param {{id?: string, sourcePackId?: string}} [shot] + * @param {{id?: string, appliedShotPacks?: Array<{id?: string, shotBindings?: Object}>}} [scene] + * The shot's scene, for projects saved before shots recorded their source + * pack. * @returns {string} */ export function displayShotTitle(title, shot = undefined, scene = undefined) { const text = typeof title === 'string' ? title : ''; const fromRecipe = shot - ? Boolean(shot.sourcePackId) || recipeDeclaresShotTitle(scene?.id, text) + ? Boolean(shot.sourcePackId) || recipeDeclaresShotTitle(scene, shot, text) : true; if (fromRecipe && BUILTIN_SHOT_TITLES.has(text)) return t(text); const numbered = /^Shot ([1-9]\d*)$/.exec(text); return numbered ? t('Shot {n}', { n: numbered[1] }) : text; } -/** Whether the built-in recipe behind a scene declares a shot with this title. */ -function recipeDeclaresShotTitle(sceneId, title) { - const recipe = sceneId ? getSceneRecipeById(sceneId) : null; +/** Whether the built-in recipe behind a scene declares this shot's title. */ +function recipeDeclaresShotTitle(scene, shot, title) { + const recipe = scene?.id ? getSceneRecipeById(scene.id) : null; if (!recipe) return false; const declares = (path) => Array.isArray(path) && path.some((keyframe) => keyframe?.title === title); if (declares(recipe.cameraPath)) return true; // A bootstrap recipe seeds legacy "Shot N" keyframes; the upgrade replaces // them with the append recipe's bootstrap shots, which carry no source pack. + // The pack marker binds each of those titles to its shot id, so a shot the + // operator later gave the same title stays as typed. return SCENE_APPEND_RECIPES.some( (append) => append.legacySceneBootstrap?.targetSceneTitle === recipe.title && - declares(append.legacySceneBootstrap.cameraPath), + declares(append.legacySceneBootstrap.cameraPath) && + Boolean(shot?.id) && + (Array.isArray(scene.appliedShotPacks) + ? scene.appliedShotPacks + : [] + ).some( + (marker) => + marker?.id === append.id && marker.shotBindings?.[title] === shot.id, + ), ); } diff --git a/src/scenes/sceneTitleDisplay.test.mjs b/src/scenes/sceneTitleDisplay.test.mjs index 758800137..c476a2000 100644 --- a/src/scenes/sceneTitleDisplay.test.mjs +++ b/src/scenes/sceneTitleDisplay.test.mjs @@ -155,11 +155,23 @@ test('bootstrap shots of a built-in scene localize without a source pack', () => ); if (!scene) return; for (const { title } of bootstrap.cameraPath) { - // The upgrade copies these keyframes into the scene without sourcePackId. + // The upgrade copies these keyframes into the scene without sourcePackId + // and binds each title to its shot in the pack marker. + const upgraded = { + id: scene.id, + appliedShotPacks: [ + { id: append.id, version: 1, shotBindings: { [title]: 'shot-old' } }, + ], + }; assert.equal( - displayShotTitle(title, { id: 'shot-old', title }, { id: scene.id }), + displayShotTitle(title, { id: 'shot-old', title }, upgraded), displayShotTitle(title), ); + // Another shot the operator gave the same title stays as typed. + assert.equal( + displayShotTitle(title, { id: 'shot-user', title }, upgraded), + title, + ); // The same title in an operator's own scene stays as typed. assert.equal( displayShotTitle(title, { id: 'shot-user', title }, { id: 'scene-user' }), From 1abe8cbb516a7a3518248b436bd20724a831538d Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Thu, 29 Oct 2026 15:22:15 +0400 Subject: [PATCH 19/20] changelog: Ukrainian (#1470) Co-Authored-By: Claude Opus 5.5 --- changelog.d/1470-ukrainian.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog.d/1470-ukrainian.md diff --git a/changelog.d/1470-ukrainian.md b/changelog.d/1470-ukrainian.md new file mode 100644 index 000000000..9f64e3081 --- /dev/null +++ b/changelog.d/1470-ukrainian.md @@ -0,0 +1,3 @@ +- Add Ukrainian (uk) to the language picker: the whole interface in Ukrainian, + with its four plural forms and Cyrillic HUD units. Based on the Ukrainian + translation by @meirm (#312) (German, @gekh, #1470). From cf1ef368d02aec3be9dbdaba2055c49425ad7895 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Thu, 29 Oct 2026 17:06:00 +0400 Subject: [PATCH 20/20] changelog: Italian (#1473) Co-Authored-By: Claude Opus 5.5 --- changelog.d/1473-italian.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog.d/1473-italian.md diff --git a/changelog.d/1473-italian.md b/changelog.d/1473-italian.md new file mode 100644 index 000000000..c1af8f021 --- /dev/null +++ b/changelog.d/1473-italian.md @@ -0,0 +1,3 @@ +- Add Italian (it) to the language picker: the whole interface in Italian, + with Italian plural forms and labels shortened to fit the panels. Based on + the translation by @abiyeenzo (#912) (German, @gekh, #1473).