add roadtrip warning areas and tidy driving settings

This commit is contained in:
Maurice
2026-09-12 11:23:09 +02:00
parent ec281e5974
commit af45b0ca74
47 changed files with 652 additions and 45 deletions
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'عرض مناطق الخطر',
'roadtrip.hazards.current': 'التحذيرات الحالية',
'roadtrip.hazards.note': 'التحذيرات لا تعني إغلاق الطرق. يبقى المسار دون تغيير.',
'roadtrip.hazards.point': 'الموقع فقط؛ المنطقة المتأثرة غير معروفة.',
'roadtrip.hazards.loading': 'جارٍ تحميل التحذيرات…',
'roadtrip.hazards.unavailable': 'غير متاح',
'roadtrip.hazards.offline': 'دون اتصال: التحذيرات الحالية غير متاحة',
'roadtrip.hazards.partial': 'تغطية محدودة',
'roadtrip.stops.section': 'توقفات الخدمة',
'roadtrip.stops.inDays': 'إظهارها في الأيام أيضًا',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Mostrar áreas de risco',
'roadtrip.hazards.current': 'Alertas atuais',
'roadtrip.hazards.note': 'Alertas não são interdições de vias. A rota não muda.',
'roadtrip.hazards.point': 'Apenas localização; área afetada desconhecida.',
'roadtrip.hazards.loading': 'Carregando alertas…',
'roadtrip.hazards.unavailable': 'Indisponível',
'roadtrip.hazards.offline': 'Offline: alertas indisponíveis',
'roadtrip.hazards.partial': 'Cobertura limitada',
'roadtrip.stops.section': 'Paradas de serviço',
'roadtrip.stops.inDays': 'Mostrar também em Dias',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Mostra zones de perill',
'roadtrip.hazards.current': 'Avisos actuals',
'roadtrip.hazards.note': 'Els avisos no són talls de carretera. La ruta no canvia.',
'roadtrip.hazards.point': 'Només ubicació; àrea afectada desconeguda.',
'roadtrip.hazards.loading': 'S’estan carregant els avisos…',
'roadtrip.hazards.unavailable': 'No disponible',
'roadtrip.hazards.offline': 'Sense connexió: avisos no disponibles',
'roadtrip.hazards.partial': 'Cobertura limitada',
'roadtrip.stops.section': 'Parades de servei',
'roadtrip.stops.inDays': 'Mostra també a Dies',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Zobrazit nebezpečné oblasti',
'roadtrip.hazards.current': 'Aktuální výstrahy',
'roadtrip.hazards.note': 'Výstrahy nejsou uzavírky silnic. Trasa se nemění.',
'roadtrip.hazards.point': 'Pouze místo; zasažená oblast není známa.',
'roadtrip.hazards.loading': 'Načítání výstrah…',
'roadtrip.hazards.unavailable': 'Nedostupné',
'roadtrip.hazards.offline': 'Offline: aktuální výstrahy nejsou dostupné',
'roadtrip.hazards.partial': 'Omezené pokrytí',
'roadtrip.stops.section': 'Servisní zastávky',
'roadtrip.stops.inDays': 'Zobrazit také ve Dnech',
'roadtrip.stops.daysHint':
+18 -14
View File
@@ -1,10 +1,17 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Gefahrengebiete anzeigen',
'roadtrip.hazards.current': 'Aktuelle Warnungen',
'roadtrip.hazards.note': 'Warnungen sind keine Straßensperrungen. Die Route bleibt unverändert.',
'roadtrip.hazards.point': 'Nur Ereignisort, betroffene Fläche unbekannt.',
'roadtrip.hazards.loading': 'Warnungen werden geladen…',
'roadtrip.hazards.unavailable': 'Nicht verfügbar',
'roadtrip.hazards.offline': 'Offline: aktuelle Warnungen nicht verfügbar',
'roadtrip.hazards.partial': 'Eingeschränkte Abdeckung',
'roadtrip.stops.section': 'Service Stops',
'roadtrip.stops.inDays': 'Auch in Days anzeigen',
'roadtrip.stops.daysHint':
'Gilt für alle Service Stops dieser Reise. Ausgeschaltet bleiben sie ausschließlich im Roadtrip-Plan; beim Einschalten erscheinen sie wieder in Days.',
'roadtrip.stops.daysHint': 'Aus: Alle Service Stops bleiben nur im Roadtrip.',
'roadtrip.window.dragHint':
'Online kannst du ein Tagesende entlang der Route oder auf einen Ort ziehen; ein Rechtsklick stellt das automatische Ende wieder her.',
'roadtrip.window.resetBoundaries': 'Automatische Tagesenden wiederherstellen',
@@ -14,16 +21,15 @@ const roadtrip: TranslationStrings = {
'roadtrip.window.endAt': 'Tagesende planen',
'roadtrip.window.onRoute': 'Auf der Strecke',
'roadtrip.window.atStop': 'Am letzten Ort',
'roadtrip.window.routeHint': 'Zur Endzeit an der erreichten Stelle auf der Strecke pausieren.',
'roadtrip.window.stopHint': 'Am letzten Ort bleiben, wenn der nächste vor Tagesende nicht mehr erreichbar ist.',
'roadtrip.window.routeHint': 'Zur Endzeit auf der Strecke pausieren.',
'roadtrip.window.stopHint': 'Stoppen, wenn der nächste Ort zu spät erreicht würde.',
'roadtrip.window.legTooLong':
'Eine Fahrt ist länger als das tägliche Zeitfenster. Ergänze einen Ort unterwegs oder wähle die Pause auf der Strecke.',
'roadtrip.window.pointLabel': 'Tagesende von Tag {day} um {time} Uhr',
'roadtrip.window.title': 'Tägliche Reisezeiten',
'roadtrip.window.start': 'Tagesbeginn',
'roadtrip.window.end': 'Tagesende',
'roadtrip.window.hint':
'Beide Zeiten setzen, um tägliche Pausen zu planen. Ein leeres Feld schaltet dies aus. Manuelle Zeiten haben Vorrang. Tage werden automatisch verbunden.',
'roadtrip.window.hint': 'Beide Zeiten aktivieren. Manuelle Zeiten gehen vor.',
'roadtrip.window.invalid': 'Das Tagesende muss nach dem Tagesbeginn liegen.',
'roadtrip.window.stop': 'Tagesende',
'roadtrip.window.resume': 'Weiterfahrt',
@@ -75,8 +81,8 @@ const roadtrip: TranslationStrings = {
'roadtrip.limit.fullNote': 'Ein Stopp macht wieder voll',
'roadtrip.limit.rangeEmpty': 'Keine Reichweite',
'roadtrip.limit.rangeEmptyHint': 'Trag eine Reichweite ein oder fülle die Felder aus, dann rechnet TREK sie aus.',
'roadtrip.limit.specHint': 'Ausgefüllt bestimmen diese Werte die Reichweite oben.',
'roadtrip.limit.vehicleHint': 'Sag, was du fährst, dann kannst du statt der Reichweite die Fahrzeugdaten angeben.',
'roadtrip.limit.specHint': 'Fahrzeugdaten bestimmen die Reichweite.',
'roadtrip.limit.vehicleHint': 'Fahrzeug wählen und Reichweite berechnen.',
'roadtrip.limit.minutes': 'Min',
'roadtrip.limit.off': 'aus',
'roadtrip.limit.blockNote': 'Ein Block = {distance}',
@@ -85,7 +91,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.limit.echoDry': '{count} Abschnitte ohne erreichbaren Stopp.',
'roadtrip.limit.echoEmpty': 'Öffne einen Roadtrip, um zu sehen, was das bewirkt.',
'roadtrip.limit.specToggle': 'Aus den Fahrzeugdaten rechnen',
'roadtrip.limit.hint': 'Zählt nur Fahrzeit. Standzeiten und Übernachtungen sind nicht enthalten.',
'roadtrip.limit.hint': 'Nur Fahrzeit, ohne Aufenthalte und Nachtetappen.',
'roadtrip.limit.legOver': '{time} über deiner längsten Fahrt',
'roadtrip.limit.dayOver': '{time} drüber',
'roadtrip.limit.range': '{distance} seit dem letzten Tanken',
@@ -93,15 +99,13 @@ const roadtrip: TranslationStrings = {
'roadtrip.line.section': 'Routenlinie',
'roadtrip.line.connect': 'Tage verbinden',
'roadtrip.line.dayColors': 'Farbe je Tag',
'roadtrip.line.hint': 'Routet auch die Strecke zwischen zwei Tagen und zählt sie zum Ankunftstag.',
'roadtrip.line.hint': 'Verbindungsfahrten zählen zum Ankunftstag.',
'roadtrip.avoid.section': 'Möglichst meiden',
'roadtrip.avoid.toll': 'Mautstraßen',
'roadtrip.avoid.motorway': 'Autobahnen',
'roadtrip.avoid.ferry': 'Fähren',
'roadtrip.avoid.hint':
'Das wird nur schwächer gewichtet, nicht verboten. Wo eine Fahrt keinen Weg drumherum hat, nutzt sie es trotzdem, und der Tag sagt es.',
'roadtrip.avoid.unavailable':
'Nicht verfügbar: diese Instanz routet über ihre eigene Maschine, die keine Straßenklasse auslassen kann.',
'roadtrip.avoid.hint': 'Meidet nach Möglichkeit und markiert Ausnahmen.',
'roadtrip.avoid.unavailable': 'Der Routing-Anbieter unterstützt kein Meiden.',
'roadtrip.avoid.badge': '{count} gemieden',
'roadtrip.avoid.missed': '{classes} unvermeidbar',
'roadtrip.avoid.missedHint':
+18 -14
View File
@@ -1,10 +1,17 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Show hazard areas',
'roadtrip.hazards.current': 'Current warnings',
'roadtrip.hazards.note': 'Warnings are not road closures. Routes stay unchanged.',
'roadtrip.hazards.point': 'Location only; affected area unknown.',
'roadtrip.hazards.loading': 'Loading warnings…',
'roadtrip.hazards.unavailable': 'Unavailable',
'roadtrip.hazards.offline': 'Offline: live warnings unavailable',
'roadtrip.hazards.partial': 'Limited coverage',
'roadtrip.stops.section': 'Service stops',
'roadtrip.stops.inDays': 'Show in Days too',
'roadtrip.stops.daysHint':
'Applies to all service stops in this trip. When off, they stay exclusively in the Roadtrip plan. Turn on to show them in Days again.',
'roadtrip.stops.daysHint': 'Off keeps all service stops in Roadtrip only.',
'roadtrip.window.dragHint':
'While online, drag a day ending along the route or onto a place; right-click it to restore the automatic ending.',
'roadtrip.window.resetBoundaries': 'Restore automatic day endings',
@@ -14,16 +21,15 @@ const roadtrip: TranslationStrings = {
'roadtrip.window.endAt': 'End the day',
'roadtrip.window.onRoute': 'Along the route',
'roadtrip.window.atStop': 'At the last place',
'roadtrip.window.routeHint': 'Pause along the route when the end time is reached.',
'roadtrip.window.stopHint': 'Stay at the last place if the next one cannot be reached before the end time.',
'roadtrip.window.routeHint': 'Pause on the route at the end time.',
'roadtrip.window.stopHint': 'Stop before the next place would exceed the end time.',
'roadtrip.window.legTooLong':
'A drive exceeds the daily travel window. Add a place along the way or choose to pause along the route.',
'roadtrip.window.pointLabel': 'End of day {day} at {time}',
'roadtrip.window.title': 'Daily travel times',
'roadtrip.window.start': 'Day start time',
'roadtrip.window.end': 'Day end time',
'roadtrip.window.hint':
'Set both times to plan daily breaks. Clear either to turn this off. Manual times take priority. Days are connected automatically.',
'roadtrip.window.hint': 'Set both times to enable. Manual times take priority.',
'roadtrip.window.invalid': 'The end time must be later than the start time.',
'roadtrip.window.stop': 'End of day',
'roadtrip.window.resume': 'Continue journey',
@@ -74,8 +80,8 @@ const roadtrip: TranslationStrings = {
'roadtrip.limit.fullNote': 'A stop fills right up',
'roadtrip.limit.rangeEmpty': 'No range set',
'roadtrip.limit.rangeEmptyHint': 'Type a range, or fill in the figures below and TREK works it out.',
'roadtrip.limit.specHint': 'Filled in, these decide the range above.',
'roadtrip.limit.vehicleHint': 'Name the kind of car and you can state its figures instead of a range.',
'roadtrip.limit.specHint': 'Vehicle details determine the range.',
'roadtrip.limit.vehicleHint': 'Choose a vehicle to calculate its range.',
'roadtrip.limit.minutes': 'min',
'roadtrip.limit.off': 'off',
'roadtrip.limit.blockNote': 'One block = {distance}',
@@ -84,7 +90,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.limit.echoDry': '{count} stretches with no reachable stop.',
'roadtrip.limit.echoEmpty': 'Open a road trip to see what these do to it.',
'roadtrip.limit.specToggle': 'Work it out from the car',
'roadtrip.limit.hint': 'Counts driving time only. Time spent at stops and overnight legs are not included.',
'roadtrip.limit.hint': 'Driving only, excluding stays and overnight legs.',
'roadtrip.limit.legOver': '{time} over your longest drive',
'roadtrip.limit.dayOver': '{time} over',
'roadtrip.limit.range': '{distance} since the last fill-up',
@@ -92,15 +98,13 @@ const roadtrip: TranslationStrings = {
'roadtrip.line.section': 'Route line',
'roadtrip.line.connect': 'Connect the days',
'roadtrip.line.dayColors': 'A colour per day',
'roadtrip.line.hint': 'Also routes the gap between two days, and counts it on the day it arrives.',
'roadtrip.line.hint': 'Connecting drives count toward the arrival day.',
'roadtrip.avoid.section': 'Avoid where possible',
'roadtrip.avoid.toll': 'Toll roads',
'roadtrip.avoid.motorway': 'Motorways',
'roadtrip.avoid.ferry': 'Ferries',
'roadtrip.avoid.hint':
'These are weighted down, not banned. Where a drive has no way around one, it still uses it and the day says so.',
'roadtrip.avoid.unavailable':
'Not available: this instance routes through its own engine, which cannot leave a road class out.',
'roadtrip.avoid.hint': 'Avoids where possible; exceptions are flagged.',
'roadtrip.avoid.unavailable': 'Your routing provider does not support avoidance.',
'roadtrip.avoid.badge': '{count} avoided',
'roadtrip.avoid.missed': '{classes} unavoidable',
'roadtrip.avoid.missedHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Mostrar zonas de peligro',
'roadtrip.hazards.current': 'Alertas actuales',
'roadtrip.hazards.note': 'Las alertas no son cierres de carreteras. La ruta no cambia.',
'roadtrip.hazards.point': 'Solo ubicación; área afectada desconocida.',
'roadtrip.hazards.loading': 'Cargando alertas…',
'roadtrip.hazards.unavailable': 'No disponible',
'roadtrip.hazards.offline': 'Sin conexión: alertas no disponibles',
'roadtrip.hazards.partial': 'Cobertura limitada',
'roadtrip.stops.section': 'Paradas de servicio',
'roadtrip.stops.inDays': 'Mostrar también en Días',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Afficher les zones à risque',
'roadtrip.hazards.current': 'Alertes actuelles',
'roadtrip.hazards.note': 'Les alertes ne sont pas des fermetures de routes. Le trajet reste inchangé.',
'roadtrip.hazards.point': 'Lieu uniquement, zone touchée inconnue.',
'roadtrip.hazards.loading': 'Chargement des alertes…',
'roadtrip.hazards.unavailable': 'Indisponible',
'roadtrip.hazards.offline': 'Hors ligne : alertes indisponibles',
'roadtrip.hazards.partial': 'Couverture limitée',
'roadtrip.stops.section': 'Arrêts de service',
'roadtrip.stops.inDays': 'Afficher aussi dans Jours',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Εμφάνιση επικίνδυνων περιοχών',
'roadtrip.hazards.current': 'Τρέχουσες προειδοποιήσεις',
'roadtrip.hazards.note': 'Οι προειδοποιήσεις δεν σημαίνουν κλειστούς δρόμους. Η διαδρομή δεν αλλάζει.',
'roadtrip.hazards.point': 'Μόνο τοποθεσία· άγνωστη πληγείσα περιοχή.',
'roadtrip.hazards.loading': 'Φόρτωση προειδοποιήσεων…',
'roadtrip.hazards.unavailable': 'Μη διαθέσιμο',
'roadtrip.hazards.offline': 'Εκτός σύνδεσης: μη διαθέσιμες προειδοποιήσεις',
'roadtrip.hazards.partial': 'Περιορισμένη κάλυψη',
'roadtrip.stops.section': 'Στάσεις εξυπηρέτησης',
'roadtrip.stops.inDays': 'Εμφάνιση και στις Ημέρες',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Veszélyes területek megjelenítése',
'roadtrip.hazards.current': 'Aktuális figyelmeztetések',
'roadtrip.hazards.note': 'A figyelmeztetések nem útlezárások. Az útvonal változatlan marad.',
'roadtrip.hazards.point': 'Csak helyszín; az érintett terület ismeretlen.',
'roadtrip.hazards.loading': 'Figyelmeztetések betöltése…',
'roadtrip.hazards.unavailable': 'Nem érhető el',
'roadtrip.hazards.offline': 'Offline: aktuális figyelmeztetések nem érhetők el',
'roadtrip.hazards.partial': 'Korlátozott lefedettség',
'roadtrip.stops.section': 'Szervizmegállók',
'roadtrip.stops.inDays': 'Megjelenítés a Napok nézetben is',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Tampilkan area bahaya',
'roadtrip.hazards.current': 'Peringatan terkini',
'roadtrip.hazards.note': 'Peringatan bukan penutupan jalan. Rute tidak berubah.',
'roadtrip.hazards.point': 'Hanya lokasi; area terdampak tidak diketahui.',
'roadtrip.hazards.loading': 'Memuat peringatan…',
'roadtrip.hazards.unavailable': 'Tidak tersedia',
'roadtrip.hazards.offline': 'Luring: peringatan terkini tidak tersedia',
'roadtrip.hazards.partial': 'Cakupan terbatas',
'roadtrip.stops.section': 'Perhentian layanan',
'roadtrip.stops.inDays': 'Tampilkan juga di Hari',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Mostra zone di pericolo',
'roadtrip.hazards.current': 'Avvisi attuali',
'roadtrip.hazards.note': 'Gli avvisi non indicano strade chiuse. Il percorso non cambia.',
'roadtrip.hazards.point': 'Solo posizione; area interessata sconosciuta.',
'roadtrip.hazards.loading': 'Caricamento avvisi…',
'roadtrip.hazards.unavailable': 'Non disponibile',
'roadtrip.hazards.offline': 'Offline: avvisi non disponibili',
'roadtrip.hazards.partial': 'Copertura limitata',
'roadtrip.stops.section': 'Soste di servizio',
'roadtrip.stops.inDays': 'Mostra anche in Giorni',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': '危険地域を表示',
'roadtrip.hazards.current': '現在の警報',
'roadtrip.hazards.note': '警報は通行止めを意味しません。ルートは変更されません。',
'roadtrip.hazards.point': '発生地点のみ。影響範囲は不明です。',
'roadtrip.hazards.loading': '警報を読み込み中…',
'roadtrip.hazards.unavailable': '利用できません',
'roadtrip.hazards.offline': 'オフライン:最新の警報は利用できません',
'roadtrip.hazards.partial': '対象範囲は限定的',
'roadtrip.stops.section': 'サービス施設での停車',
'roadtrip.stops.inDays': '日別にも表示',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': '위험 지역 표시',
'roadtrip.hazards.current': '현재 경보',
'roadtrip.hazards.note': '경보는 도로 폐쇄를 의미하지 않습니다. 경로는 변경되지 않습니다.',
'roadtrip.hazards.point': '발생 위치만 표시하며 영향 지역은 알 수 없습니다.',
'roadtrip.hazards.loading': '경보 불러오는 중…',
'roadtrip.hazards.unavailable': '사용 불가',
'roadtrip.hazards.offline': '오프라인: 현재 경보를 사용할 수 없습니다',
'roadtrip.hazards.partial': '제한된 범위',
'roadtrip.stops.section': '편의시설 경유지',
'roadtrip.stops.inDays': '일별 보기에도 표시',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Gevarengebieden tonen',
'roadtrip.hazards.current': 'Actuele waarschuwingen',
'roadtrip.hazards.note': 'Waarschuwingen zijn geen wegafsluitingen. De route blijft ongewijzigd.',
'roadtrip.hazards.point': 'Alleen locatie; getroffen gebied onbekend.',
'roadtrip.hazards.loading': 'Waarschuwingen laden…',
'roadtrip.hazards.unavailable': 'Niet beschikbaar',
'roadtrip.hazards.offline': 'Offline: actuele waarschuwingen niet beschikbaar',
'roadtrip.hazards.partial': 'Beperkte dekking',
'roadtrip.stops.section': 'Servicestops',
'roadtrip.stops.inDays': 'Ook in Dagen tonen',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Pokaż obszary zagrożeń',
'roadtrip.hazards.current': 'Aktualne ostrzeżenia',
'roadtrip.hazards.note': 'Ostrzeżenia nie oznaczają zamknięcia dróg. Trasa pozostaje bez zmian.',
'roadtrip.hazards.point': 'Tylko lokalizacja; obszar zagrożenia nieznany.',
'roadtrip.hazards.loading': 'Ładowanie ostrzeżeń…',
'roadtrip.hazards.unavailable': 'Niedostępne',
'roadtrip.hazards.offline': 'Offline: aktualne ostrzeżenia niedostępne',
'roadtrip.hazards.partial': 'Ograniczony zasięg',
'roadtrip.stops.section': 'Postoje serwisowe',
'roadtrip.stops.inDays': 'Pokaż także w Dniach',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Показывать опасные зоны',
'roadtrip.hazards.current': 'Текущие предупреждения',
'roadtrip.hazards.note': 'Предупреждения не означают закрытие дорог. Маршрут не меняется.',
'roadtrip.hazards.point': 'Только место события; затронутая зона неизвестна.',
'roadtrip.hazards.loading': 'Загрузка предупреждений…',
'roadtrip.hazards.unavailable': 'Недоступно',
'roadtrip.hazards.offline': 'Нет сети: текущие предупреждения недоступны',
'roadtrip.hazards.partial': 'Ограниченный охват',
'roadtrip.stops.section': 'Сервисные остановки',
'roadtrip.stops.inDays': 'Показывать также в разделе «Дни»',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Visa riskområden',
'roadtrip.hazards.current': 'Aktuella varningar',
'roadtrip.hazards.note': 'Varningar är inte vägavstängningar. Rutten ändras inte.',
'roadtrip.hazards.point': 'Endast plats; berört område okänt.',
'roadtrip.hazards.loading': 'Läser in varningar…',
'roadtrip.hazards.unavailable': 'Inte tillgängligt',
'roadtrip.hazards.offline': 'Offline: aktuella varningar saknas',
'roadtrip.hazards.partial': 'Begränsad täckning',
'roadtrip.stops.section': 'Servicestopp',
'roadtrip.stops.inDays': 'Visa även i Dagar',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Tehlike bölgelerini göster',
'roadtrip.hazards.current': 'Güncel uyarılar',
'roadtrip.hazards.note': 'Uyarılar yol kapatmaları değildir. Rota değişmez.',
'roadtrip.hazards.point': 'Yalnızca konum; etkilenen alan bilinmiyor.',
'roadtrip.hazards.loading': 'Uyarılar yükleniyor…',
'roadtrip.hazards.unavailable': 'Kullanılamıyor',
'roadtrip.hazards.offline': 'Çevrimdışı: güncel uyarılar kullanılamıyor',
'roadtrip.hazards.partial': 'Sınırlı kapsam',
'roadtrip.stops.section': 'Hizmet durakları',
'roadtrip.stops.inDays': 'Günler içinde de göster',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Показувати небезпечні зони',
'roadtrip.hazards.current': 'Поточні попередження',
'roadtrip.hazards.note': 'Попередження не означають закриття доріг. Маршрут не змінюється.',
'roadtrip.hazards.point': 'Лише місце події; уражена зона невідома.',
'roadtrip.hazards.loading': 'Завантаження попереджень…',
'roadtrip.hazards.unavailable': 'Недоступно',
'roadtrip.hazards.offline': 'Офлайн: поточні попередження недоступні',
'roadtrip.hazards.partial': 'Обмежене охоплення',
'roadtrip.stops.section': 'Сервісні зупинки',
'roadtrip.stops.inDays': 'Показувати також у розділі «Дні»',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': 'Hiển thị vùng nguy hiểm',
'roadtrip.hazards.current': 'Cảnh báo hiện tại',
'roadtrip.hazards.note': 'Cảnh báo không có nghĩa là đường bị đóng. Tuyến đường không thay đổi.',
'roadtrip.hazards.point': 'Chỉ có vị trí; chưa rõ vùng bị ảnh hưởng.',
'roadtrip.hazards.loading': 'Đang tải cảnh báo…',
'roadtrip.hazards.unavailable': 'Không khả dụng',
'roadtrip.hazards.offline': 'Ngoại tuyến: không có cảnh báo hiện tại',
'roadtrip.hazards.partial': 'Phạm vi hạn chế',
'roadtrip.stops.section': 'Điểm dừng dịch vụ',
'roadtrip.stops.inDays': 'Hiển thị cả trong Ngày',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': '顯示危險區域',
'roadtrip.hazards.current': '目前警報',
'roadtrip.hazards.note': '警報不代表道路封閉。路線保持不變。',
'roadtrip.hazards.point': '僅有事件位置,受影響區域未知。',
'roadtrip.hazards.loading': '正在載入警報…',
'roadtrip.hazards.unavailable': '無法使用',
'roadtrip.hazards.offline': '離線:無法取得目前警報',
'roadtrip.hazards.partial': '涵蓋範圍有限',
'roadtrip.stops.section': '服務停靠點',
'roadtrip.stops.inDays': '也顯示於每日行程',
'roadtrip.stops.daysHint':
+8
View File
@@ -1,6 +1,14 @@
import type { TranslationStrings } from '../types';
const roadtrip: TranslationStrings = {
'roadtrip.hazards.show': '显示危险区域',
'roadtrip.hazards.current': '当前警报',
'roadtrip.hazards.note': '警报不代表道路封闭。路线保持不变。',
'roadtrip.hazards.point': '仅有事件位置,受影响区域未知。',
'roadtrip.hazards.loading': '正在加载警报…',
'roadtrip.hazards.unavailable': '不可用',
'roadtrip.hazards.offline': '离线:无法获取当前警报',
'roadtrip.hazards.partial': '覆盖有限',
'roadtrip.stops.section': '服务停靠点',
'roadtrip.stops.inDays': '也显示于每日行程',
'roadtrip.stops.daysHint':
+1
View File
@@ -77,4 +77,5 @@ export * from './plugin-permissions';
// Plugin settings contracts: the settings-field descriptor + admin instance-config wire shapes.
export * from './plugins/plugins.schema';
export * from './roadtrip/preferences.schema';
export * from './roadtrip/hazards.schema';
export * from './roadtrip/planning.schema';
@@ -0,0 +1,8 @@
import { hazardGeometrySchema } from './hazards.schema';
import { expect, it } from 'vitest';
it('rejects coordinates outside the map and incomplete polygon rings', () => {
expect(hazardGeometrySchema.safeParse({ type: 'Point', coordinates: [181, 50] }).success).toBe(false);
expect(hazardGeometrySchema.safeParse({ type: 'Polygon', coordinates: [[[10, 50]]] }).success).toBe(false);
});
+26
View File
@@ -0,0 +1,26 @@
import { z } from 'zod';
const position = z.tuple([z.number().min(-180).max(180), z.number().min(-90).max(90)]);
const ring = z.array(position).min(4).max(50000);
export const hazardGeometrySchema = z.discriminatedUnion('type', [
z.object({ type: z.literal('Point'), coordinates: position }),
z.object({ type: z.literal('Polygon'), coordinates: z.array(ring).min(1).max(500) }),
z.object({ type: z.literal('MultiPolygon'), coordinates: z.array(z.array(ring).min(1).max(500)).max(500) }),
]);
export const roadtripHazardSchema = z.object({
id: z.string(),
source: z.enum(['DWD', 'GDACS']),
title: z.string().max(2000),
description: z.string().max(20000),
updatedAt: z.string().datetime(),
validUntil: z.string().datetime().nullable(),
url: z.string().url(),
geometry: hazardGeometrySchema,
});
export const roadtripHazardsSchema = z.object({
fetchedAt: z.string().datetime(),
hazards: z.array(roadtripHazardSchema).max(1000),
sources: z.array(z.object({ source: z.enum(['DWD', 'GDACS']), status: z.enum(['ok', 'partial', 'unavailable']) })),
});
export type RoadtripHazard = z.infer<typeof roadtripHazardSchema>;
export type RoadtripHazards = z.infer<typeof roadtripHazardsSchema>;
@@ -21,6 +21,7 @@ export const roadtripPreferencesSchema = z
roadtrip_connect_days: z.boolean().optional(),
roadtrip_service_stops_in_days: z.boolean().optional(),
roadtrip_day_colors: z.boolean().optional(),
roadtrip_show_hazards: z.boolean().optional(),
roadtrip_avoid: z
.string()
.max(32)