mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 18:34:02 +00:00
i18n(it): apply review round 2
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 <[email protected]>
This commit is contained in:
1 parent
5e47a2afbd
commit
b96c1dee15
5 files changed
+111
-67
No files matched your search
+10
-1
@@ -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) |
|
||||
|
||||
+64
-64
@@ -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",
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
"CCTV",
|
||||
"CCTV OFF",
|
||||
"CCTV ON",
|
||||
"CH {index} / {total}",
|
||||
"COCKPIT",
|
||||
"CRS {value}°",
|
||||
"CRT",
|
||||
|
||||
+10
-2
@@ -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),
|
||||
);
|
||||
}
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user