feat(rail): add a Rail layer with keyless live trains

Live trains from 30 keyless operator feeds: GPS positions from 29 and
Irish Rail's station reports, shown as the operators publish them. 28
work out of the box; Renfe long and medium distance and KTMB appear once
their pack is built, because their vehicles name no route.

Packs are opt-in (scripts/build-rail-paths.mjs): the operator's own
route lines, stop names, next stops and trip-update delays for live
trains. Nothing downloads when the app starts, no train is placed from a
timetable, and no request carries a deployer's key.
This commit is contained in:
Denis Groshev committed 2026-11-11 16:06:22 +01:00
1 parent 14db73f201
commit 830c080803
114 files changed
+26639 -26

No files matched your search

+15
View File
@@ -3533,6 +3533,21 @@
"Play speed": "Velocità di riproduzione",
"Scroll or pinch to zoom, drag to move along · double-click to see it all": "Scorri o pizzica per lo zoom, trascina per spostarti · doppio clic per vedere tutto",
"1 min/s": "1 min/s",
"Rail": "Ferrovie",
"Urban rail": "Urbano",
"Local rail": "Suburbano",
"Regional rail": "Regionale",
"National rail": "Lunga percorrenza",
"International rail": "Internazionale",
"Hide {category}": "Nascondi {category}",
"Show {category}": "Mostra {category}",
"Live GPS": "GPS in tempo reale",
"Estimated from station reports": "Stimata dalle segnalazioni delle stazioni",
"To {headsign}": "Per {headsign}",
"Next {stop} {time} {relative}": "Prossima fermata {stop} {time} {relative}",
"Prev {stop} {time} {relative}": "Fermata precedente {stop} {time} {relative}",
"(+{minutes} min late)": "(+{minutes} min di ritardo)",
"Exit cockpit to fly to a train": "Esci dal cockpit per volare a un treno",
"Photo © {photographer}": "Foto © {photographer}",
"The shared flight isn't reporting now — showing where it was last seen": "Il volo condiviso non sta trasmettendo ora: viene mostrata l'ultima posizione nota",
"The shared flight isn't reporting now — showing where it was at {time}": "Il volo condiviso non sta trasmettendo ora: viene mostrata la posizione alle {time}",