Add the Data Library: live regional datasets, tiles and packs

DATA LAYERS keeps its curated core layers; regional and niche sources
live in the Data Library, opened from Browse data library at the foot
of the panel. Each entry is a JSON manifest in src/library/entries/
pointing at a live upstream (query API, provider-hosted file or tile
endpoint), so nothing is bundled and a self-hosted instance hosts no
data. Sources without CORS go through one allowlisted /api/library
route. Kinds: dataset (GeoJSON, CSV, JSON records, ArcGIS, partitioned
GeoParquet), tiles (XYZ, WMS/ArcGIS bbox export, terrarium relief) and
pack. Selections persist and travel in share links as lib=, separate
from the core layer tokens. Library rows get Zoom and Remove icon
chips that work while the layer is off, rendered through RailChips.
Strings are translated in every locale.
This commit is contained in:
Said Turksever committed 2026-11-12 12:26:45 +00:00
1 parent 10a788db78
commit db80d82b8d
182 files changed
+15805 -44

No files matched your search

+104 -1
View File
@@ -3587,5 +3587,108 @@
"{source} imagery could not be opened": "Impossibile aprire le immagini di {source}",
"{place} has no position to look for imagery at": "{place} non ha una posizione in cui cercare immagini",
"No {source} imagery near {place}": "Nessuna immagine di {source} vicino a {place}",
"{reason} (filters on: {filters})": "{reason} (filtri attivi: {filters})"
"{reason} (filters on: {filters})": "{reason} (filtri attivi: {filters})",
"tiles unavailable": "tile non disponibili",
"zoom in to load this layer": "avvicinati per caricare questo livello",
"Zoom to layer": "Zoom sul livello",
"Zoom to layer · fly to where this layer has data": "Zoom sul livello · vola dove questo livello ha dati",
"Remove from Data Layers": "Rimuovi da Livelli dati",
"Remove from Data Layers · add it again from the library": "Rimuovi da Livelli dati · aggiungilo di nuovo dalla libreria",
"Coverage outline": "Contorno di copertura",
"DRAPED": "DRAPPEGGIATO",
"Below 250 m": "Sotto i 250 m",
"250–500 m": "250–500 m",
"500–1,000 m": "500–1.000 m",
"1,000–2,000 m": "1.000–2.000 m",
"2,000–3,000 m": "2.000–3.000 m",
"3,000 m and above": "3.000 m e oltre",
"Exit cockpit to fly to a layer": "Esci dalla cabina di pilotaggio per volare a un livello",
"Library": "Libreria",
"Environment": "Ambiente",
"Imagery": "Immagini",
"Demographics": "Demografia",
"DATASET": "DATASET",
"TILES": "TILE",
"PACK": "PACCHETTO",
"INCUBATING": "IN INCUBAZIONE",
"COMMUNITY": "COMUNITÀ",
"VERIFIED": "VERIFICATO",
"ARCHIVED": "ARCHIVIATO",
"Datasets": "Dataset",
"{datasets} · {tiles} · {packs}": "{datasets} · {tiles} · {packs}",
"{count} datasets": {
"one": "{count} dataset",
"many": "{count} di dataset",
"other": "{count} dataset"
},
"{count} tile layers": {
"one": "{count} livello di tile",
"many": "{count} di livelli di tile",
"other": "{count} livelli di tile"
},
"{count} packs": {
"one": "{count} pacchetto",
"many": "{count} di pacchetti",
"other": "{count} pacchetti"
},
"Themes": "Temi",
"Added": "Aggiunti",
"{count} on the map": {
"one": "{count} sulla mappa",
"many": "{count} sulla mappa",
"other": "{count} sulla mappa"
},
"none yet": "ancora nessuno",
"Map features": "Elementi della mappa",
"from {count} datasets": {
"one": "da {count} dataset",
"many": "da {count} di dataset",
"other": "da {count} dataset"
},
"switch on a dataset to load features": "attiva un dataset per caricare gli elementi",
"Switched on by this instance · part of the CCTV layer": "Attivato da questa istanza · parte del livello CCTV",
"Operator opt-in: set {env}=1 on the server": "Attivazione dell'operatore: imposta {env}=1 sul server",
"Operator opt-in: add {id} to GEV_LIBRARY_ENABLE on the server": "Attivazione dell'operatore: aggiungi {id} a GEV_LIBRARY_ENABLE sul server",
"Turned off by this instance's operator": "Disattivato dall'operatore di questa istanza",
"Needs a provider key on the server": "Richiede una chiave del fornitore sul server",
"Needs this app's server · not available in a static build": "Richiede il server di questa app · non disponibile in una build statica",
"Checking what this instance serves…": "Verifica di ciò che offre questa istanza…",
"Regional": "Regionale",
"Orthophoto": "Ortofoto",
"Satellite mosaic": "Mosaico satellitare",
"Oblique": "Obliqua",
"Historic imagery": "Immagini storiche",
"True orthophoto": "Ortofoto vera",
"Type": "Tipo",
"Resolution": "Risoluzione",
"Flown": "Volo",
"Updates": "Aggiornamenti",
"Ortho quality": "Qualità ortofoto",
"DATA LIBRARY": "LIBRERIA DATI",
"Close data library": "Chiudi la libreria dati",
"Data Library at a glance": "La libreria dati in sintesi",
"Live sources beyond the core layers. Each one is fetched from its provider while it is on; nothing is stored in this app. Add one and it appears in Data Layers under Library.": "Fonti in tempo reale oltre ai livelli principali. Ognuna viene caricata dal suo fornitore finché è attiva; questa app non memorizza nulla. Aggiungine una e comparirà in Livelli dati, sotto Libreria.",
"Name, provider or country": "Nome, fornitore o paese",
"Theme": "Tema",
"All themes": "Tutti i temi",
"Only what this instance serves": "Solo ciò che offre questa istanza",
"OPT-IN": "SU ATTIVAZIONE",
"KEY": "CHIAVE",
"KEYLESS": "SENZA CHIAVE",
"ZOOM": "ZOOM",
"Zoom to {name}": "Zoom su {name}",
"WORKING…": "IN CORSO…",
"ADD": "AGGIUNGI",
"Remove {name} from Data Layers": "Rimuovi {name} da Livelli dati",
"Add {name} to Data Layers": "Aggiungi {name} a Livelli dati",
"CONFIRM · REMOVE ALL {count}": {
"one": "CONFERMA · RIMUOVI {count}",
"many": "CONFERMA · RIMUOVI TUTTI I {count}",
"other": "CONFERMA · RIMUOVI TUTTI I {count}"
},
"REMOVE ALL": "RIMUOVI TUTTO",
"Confirm: remove every added entry from Data Layers": "Conferma: rimuovi da Livelli dati tutte le voci aggiunte",
"Remove every added entry from Data Layers": "Rimuovi da Livelli dati tutte le voci aggiunte",
"Showing {shown} of {total}": "{shown} di {total} mostrati",
"BROWSE DATA LIBRARY": "ESPLORA LIBRERIA DATI"
}