feat(transport): add bus, taxi, bicycle, ferry and other transport types (#1105)

Closes #718. Adds five new transport reservation types alongside the
existing flight/train/car/cruise: bus, taxi, bicycle, ferry and a generic
'transport_other' catch-all. The new types are treated as first-class
transports everywhere — the transport modal, day plan, route calculation,
map overlays, file grouping and the PDF export — and are translated across
all 20 locales.

A dedicated 'transport_other' value is used for the catch-all so existing
'other' bookings are not reclassified as transport.
This commit is contained in:
Maurice
2026-06-04 20:39:11 +02:00
committed by GitHub
parent 10bea35a91
commit abe1c549bd
32 changed files with 153 additions and 27 deletions
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'فعالية',
'reservations.type.tour': 'جولة',
'reservations.type.other': 'أخرى',
'reservations.type.bus': 'حافلة',
'reservations.type.ferry': 'عبّارة',
'reservations.type.bicycle': 'دراجة',
'reservations.type.taxi': 'سيارة أجرة',
'reservations.type.transport_other': 'أخرى',
'reservations.confirm.delete': 'هل تريد حذف الحجز "{name}"؟',
'reservations.confirm.deleteTitle': 'حذف الحجز؟',
'reservations.confirm.deleteBody': 'سيتم حذف "{name}" نهائيًا.',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Evento',
'reservations.type.tour': 'Passeio',
'reservations.type.other': 'Outro',
'reservations.type.bus': 'Ônibus',
'reservations.type.ferry': 'Balsa',
'reservations.type.bicycle': 'Bicicleta',
'reservations.type.taxi': 'Táxi',
'reservations.type.transport_other': 'Outro',
'reservations.confirm.delete':
'Tem certeza de que deseja excluir a reserva "{name}"?',
'reservations.confirm.deleteTitle': 'Excluir reserva?',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Událost',
'reservations.type.tour': 'Prohlídka',
'reservations.type.other': 'Jiné',
'reservations.type.bus': 'Autobus',
'reservations.type.ferry': 'Trajekt',
'reservations.type.bicycle': 'Kolo',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Ostatní',
'reservations.confirm.delete': 'Opravdu chcete smazat rezervaci „{name}”?',
'reservations.confirm.deleteTitle': 'Smazat rezervaci?',
'reservations.confirm.deleteBody': '„{name}” bude trvale smazána.',
+5
View File
@@ -55,6 +55,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Veranstaltung',
'reservations.type.tour': 'Tour',
'reservations.type.other': 'Sonstiges',
'reservations.type.bus': 'Bus',
'reservations.type.ferry': 'Fähre',
'reservations.type.bicycle': 'Fahrrad',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Sonstiges',
'reservations.confirm.delete':
'Möchtest du die Reservierung "{name}" wirklich löschen?',
'reservations.confirm.deleteTitle': 'Buchung löschen?',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Event',
'reservations.type.tour': 'Tour',
'reservations.type.other': 'Other',
'reservations.type.bus': 'Bus',
'reservations.type.ferry': 'Ferry',
'reservations.type.bicycle': 'Bicycle',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Other',
'reservations.confirm.delete':
'Are you sure you want to delete the reservation "{name}"?',
'reservations.confirm.deleteTitle': 'Delete booking?',
+5
View File
@@ -32,6 +32,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Evento',
'reservations.type.tour': 'Excursión',
'reservations.type.other': 'Otro',
'reservations.type.bus': 'Autobús',
'reservations.type.ferry': 'Ferry',
'reservations.type.bicycle': 'Bicicleta',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Otro',
'reservations.confirm.delete':
'¿Seguro que quieres eliminar la reserva "{name}"?',
'reservations.confirm.deleteTitle': '¿Eliminar reserva?',
+5
View File
@@ -55,6 +55,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Événement',
'reservations.type.tour': 'Visite',
'reservations.type.other': 'Autre',
'reservations.type.bus': 'Bus',
'reservations.type.ferry': 'Ferry',
'reservations.type.bicycle': 'Vélo',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Autre',
'reservations.confirm.delete':
'Voulez-vous vraiment supprimer la réservation « {name} » ?',
'reservations.confirm.deleteTitle': 'Supprimer la réservation ?',
+5
View File
@@ -55,6 +55,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Εκδήλωση',
'reservations.type.tour': 'Περιήγηση',
'reservations.type.other': 'Άλλο',
'reservations.type.bus': 'Λεωφορείο',
'reservations.type.ferry': 'Φέρι',
'reservations.type.bicycle': 'Ποδήλατο',
'reservations.type.taxi': 'Ταξί',
'reservations.type.transport_other': 'Άλλο',
'reservations.confirm.delete':
'Είστε σίγουροι ότι θέλετε να διαγράψετε την κράτηση "{name}";',
'reservations.confirm.deleteTitle': 'Διαγραφή κράτησης;',
+5
View File
@@ -56,6 +56,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Esemény',
'reservations.type.tour': 'Túra',
'reservations.type.other': 'Egyéb',
'reservations.type.bus': 'Busz',
'reservations.type.ferry': 'Komp',
'reservations.type.bicycle': 'Kerékpár',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Egyéb',
'reservations.confirm.delete':
'Biztosan törölni szeretnéd a(z) "{name}" foglalást?',
'reservations.confirm.deleteTitle': 'Foglalás törlése?',
+5
View File
@@ -55,6 +55,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Acara',
'reservations.type.tour': 'Tur',
'reservations.type.other': 'Lainnya',
'reservations.type.bus': 'Bus',
'reservations.type.ferry': 'Feri',
'reservations.type.bicycle': 'Sepeda',
'reservations.type.taxi': 'Taksi',
'reservations.type.transport_other': 'Lainnya',
'reservations.confirm.delete': 'Yakin ingin menghapus reservasi "{name}"?',
'reservations.confirm.deleteTitle': 'Hapus pemesanan?',
'reservations.confirm.deleteBody': '"{name}" akan dihapus permanen.',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Evento',
'reservations.type.tour': 'Tour',
'reservations.type.other': 'Altro',
'reservations.type.bus': 'Autobus',
'reservations.type.ferry': 'Traghetto',
'reservations.type.bicycle': 'Bicicletta',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Altro',
'reservations.confirm.delete':
'Sei sicuro di voler eliminare la prenotazione "{name}"?',
'reservations.confirm.deleteTitle': 'Eliminare la prenotazione?',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'イベント',
'reservations.type.tour': 'ツアー',
'reservations.type.other': 'その他',
'reservations.type.bus': 'バス',
'reservations.type.ferry': 'フェリー',
'reservations.type.bicycle': '自転車',
'reservations.type.taxi': 'タクシー',
'reservations.type.transport_other': 'その他',
'reservations.confirm.delete': '予約「{name}」を削除しますか?',
'reservations.confirm.deleteTitle': '予約を削除しますか?',
'reservations.confirm.deleteBody': '「{name}」は完全に削除されます。',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': '이벤트',
'reservations.type.tour': '투어',
'reservations.type.other': '기타',
'reservations.type.bus': '버스',
'reservations.type.ferry': '페리',
'reservations.type.bicycle': '자전거',
'reservations.type.taxi': '택시',
'reservations.type.transport_other': '기타',
'reservations.confirm.delete': '예약 "{name}"을(를) 삭제할까요?',
'reservations.confirm.deleteTitle': '예약을 삭제할까요?',
'reservations.confirm.deleteBody': '"{name}"이(가) 영구 삭제됩니다.',
+5
View File
@@ -55,6 +55,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Evenement',
'reservations.type.tour': 'Rondleiding',
'reservations.type.other': 'Overig',
'reservations.type.bus': 'Bus',
'reservations.type.ferry': 'Veerboot',
'reservations.type.bicycle': 'Fiets',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Overig',
'reservations.confirm.delete':
'Weet je zeker dat je de reservering "{name}" wilt verwijderen?',
'reservations.confirm.deleteTitle': 'Boeking verwijderen?',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Wydarzenie',
'reservations.type.tour': 'Wycieczka',
'reservations.type.other': 'Inne',
'reservations.type.bus': 'Autobus',
'reservations.type.ferry': 'Prom',
'reservations.type.bicycle': 'Rower',
'reservations.type.taxi': 'Taksówka',
'reservations.type.transport_other': 'Inne',
'reservations.confirm.delete':
'Czy na pewno chcesz usunąć rezerwację "{name}"?',
'reservations.confirm.deleteTitle': 'Usunąć rezerwację?',
+5
View File
@@ -55,6 +55,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Мероприятие',
'reservations.type.tour': 'Экскурсия',
'reservations.type.other': 'Другое',
'reservations.type.bus': 'Автобус',
'reservations.type.ferry': 'Паром',
'reservations.type.bicycle': 'Велосипед',
'reservations.type.taxi': 'Такси',
'reservations.type.transport_other': 'Другое',
'reservations.confirm.delete':
'Вы уверены, что хотите удалить бронирование «{name}»?',
'reservations.confirm.deleteTitle': 'Удалить бронирование?',
+5
View File
@@ -55,6 +55,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Etkinlik',
'reservations.type.tour': 'Tur',
'reservations.type.other': 'Diğer',
'reservations.type.bus': 'Otobüs',
'reservations.type.ferry': 'Feribot',
'reservations.type.bicycle': 'Bisiklet',
'reservations.type.taxi': 'Taksi',
'reservations.type.transport_other': 'Diğer',
'reservations.confirm.delete':
'"{name}" rezervasyonunu silmek istediğinizden emin misiniz?',
'reservations.confirm.deleteTitle': 'Rezervasyon silinsin mi?',
+5
View File
@@ -54,6 +54,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': 'Заходи',
'reservations.type.tour': 'Екскурсія',
'reservations.type.other': 'Інше',
'reservations.type.bus': 'Автобус',
'reservations.type.ferry': 'Пором',
'reservations.type.bicycle': 'Велосипед',
'reservations.type.taxi': 'Таксі',
'reservations.type.transport_other': 'Інше',
'reservations.confirm.delete':
'Ви впевнені, що хочете видалити бронювання «{name}»?',
'reservations.confirm.deleteTitle': 'Видалити бронювання?',
+5
View File
@@ -53,6 +53,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': '活動',
'reservations.type.tour': '旅遊團',
'reservations.type.other': '其他',
'reservations.type.bus': '公車',
'reservations.type.ferry': '渡輪',
'reservations.type.bicycle': '自行車',
'reservations.type.taxi': '計程車',
'reservations.type.transport_other': '其他',
'reservations.confirm.delete': '確定要刪除預訂「{name}」嗎?',
'reservations.confirm.deleteTitle': '刪除預訂?',
'reservations.confirm.deleteBody': '"{name}" 將被永久刪除。',
+5
View File
@@ -53,6 +53,11 @@ const reservations: TranslationStrings = {
'reservations.type.event': '活动',
'reservations.type.tour': '旅游团',
'reservations.type.other': '其他',
'reservations.type.bus': '公交车',
'reservations.type.ferry': '渡轮',
'reservations.type.bicycle': '自行车',
'reservations.type.taxi': '出租车',
'reservations.type.transport_other': '其他',
'reservations.confirm.delete': '确定要删除预订「{name}」吗?',
'reservations.confirm.deleteTitle': '删除预订?',
'reservations.confirm.deleteBody': '"{name}" 将被永久删除。',