mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-20 14:06:27 +00:00
feat(planner): public transit routing via Transitous (#1065)
Each day header gets a transit button (replacing the rename pencil, which moved next to the day name in the day detail panel). It opens a route search backed by Transitous/MOTIS — free, open data, no paid provider: from/to stop search with the day's own places as quick picks, depart/arrive time, mode filters (train, subway, tram, bus, ferry, cable car) and ranking by best route, fewer transfers or less walking. Results show local times, duration, transfers, walking time and line badges in their official colors, with a stop-by-stop breakdown per connection. Adding a connection saves it as a regular transport reservation — typed by its dominant leg, timed from the itinerary's wall-clock departure/arrival converted to station-local time (tz-lookup), with the origin, transfer stops and destination as endpoints and the compact legs in metadata.transit. It slots into the day timeline by time and inherits editing, deletion and drag-reordering from the existing transport machinery; the transport detail view renders the full itinerary. Re-saving a transit transport through the edit modal preserves the stored itinerary while the route is unchanged. The server proxies the Transitous API (JWT-guarded, rate-limited, identifying User-Agent, short response cache, strict mode whitelist); TRANSIT_API_URL lets self-hosters use their own MOTIS instance. New i18n keys in every locale, wiki page updated. Discussion #1065
This commit is contained in:
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'الدعوة غير متاحة',
|
||||
'trip.invite.invalid': 'رابط الدعوة هذا غير صالح أو انتهت صلاحيته.',
|
||||
'trip.invite.backToDashboard': 'العودة إلى لوحة التحكم',
|
||||
'transit.title': 'النقل العام',
|
||||
'transit.from': 'من',
|
||||
'transit.to': 'إلى',
|
||||
'transit.searchStop': 'ابحث عن موقف أو محطة…',
|
||||
'transit.swap': 'تبديل',
|
||||
'transit.depart': 'المغادرة',
|
||||
'transit.arrive': 'الوصول',
|
||||
'transit.mode.rail': 'قطار',
|
||||
'transit.mode.subway': 'مترو الأنفاق',
|
||||
'transit.mode.tram': 'ترام',
|
||||
'transit.mode.bus': 'حافلة',
|
||||
'transit.mode.ferry': 'عبّارة',
|
||||
'transit.mode.cable': 'تلفريك',
|
||||
'transit.pref.best': 'أفضل مسار',
|
||||
'transit.pref.transfers': 'تحويلات أقل',
|
||||
'transit.pref.walking': 'مشي أقل',
|
||||
'transit.search': 'بحث',
|
||||
'transit.searching': 'جارٍ البحث…',
|
||||
'transit.searchError': 'فشل البحث عن المسار. يُرجى المحاولة مرة أخرى.',
|
||||
'transit.noResults': 'لم يُعثر على أي رحلات. جرّب وقتًا أو عوامل تصفية مختلفة.',
|
||||
'transit.direct': 'مباشر',
|
||||
'transit.transfers': '{count} تحويلات',
|
||||
'transit.min': '{count} دقيقة',
|
||||
'transit.stops': '{count} محطات',
|
||||
'transit.walkTo': 'امشِ إلى {name}',
|
||||
'transit.platform': 'الرصيف {track}',
|
||||
'transit.adding': 'جارٍ الإضافة…',
|
||||
'transit.addToDay': 'إضافة إلى اليوم',
|
||||
'transit.itinerary': 'خط سير الرحلة',
|
||||
'transit.attribution': 'بيانات المسارات عبر',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Convite indisponível',
|
||||
'trip.invite.invalid': 'Este link de convite é inválido ou expirou.',
|
||||
'trip.invite.backToDashboard': 'Voltar ao painel',
|
||||
'transit.title': 'Transporte público',
|
||||
'transit.from': 'De',
|
||||
'transit.to': 'Para',
|
||||
'transit.searchStop': 'Buscar parada ou estação…',
|
||||
'transit.swap': 'Inverter',
|
||||
'transit.depart': 'Partida',
|
||||
'transit.arrive': 'Chegada',
|
||||
'transit.mode.rail': 'Trem',
|
||||
'transit.mode.subway': 'Metrô',
|
||||
'transit.mode.tram': 'Bonde',
|
||||
'transit.mode.bus': 'Ônibus',
|
||||
'transit.mode.ferry': 'Barca',
|
||||
'transit.mode.cable': 'Teleférico',
|
||||
'transit.pref.best': 'Melhor rota',
|
||||
'transit.pref.transfers': 'Menos baldeações',
|
||||
'transit.pref.walking': 'Menos caminhada',
|
||||
'transit.search': 'Buscar',
|
||||
'transit.searching': 'Buscando…',
|
||||
'transit.searchError': 'Falha na busca de rota. Tente novamente.',
|
||||
'transit.noResults': 'Nenhuma conexão encontrada. Tente outro horário ou filtros.',
|
||||
'transit.direct': 'Direto',
|
||||
'transit.transfers': '{count} baldeações',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} paradas',
|
||||
'transit.walkTo': 'Caminhar até {name}',
|
||||
'transit.platform': 'Plataforma {track}',
|
||||
'transit.adding': 'Adicionando…',
|
||||
'transit.addToDay': 'Adicionar ao dia',
|
||||
'transit.itinerary': 'Itinerário',
|
||||
'transit.attribution': 'Dados de rota via',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Pozvánka není dostupná',
|
||||
'trip.invite.invalid': 'Tento odkaz pro pozvání je neplatný nebo jeho platnost vypršela.',
|
||||
'trip.invite.backToDashboard': 'Zpět na přehled',
|
||||
'transit.title': 'Veřejná doprava',
|
||||
'transit.from': 'Odkud',
|
||||
'transit.to': 'Kam',
|
||||
'transit.searchStop': 'Hledat zastávku nebo stanici…',
|
||||
'transit.swap': 'Prohodit',
|
||||
'transit.depart': 'Odjezd',
|
||||
'transit.arrive': 'Příjezd',
|
||||
'transit.mode.rail': 'Vlak',
|
||||
'transit.mode.subway': 'Metro',
|
||||
'transit.mode.tram': 'Tramvaj',
|
||||
'transit.mode.bus': 'Autobus',
|
||||
'transit.mode.ferry': 'Trajekt',
|
||||
'transit.mode.cable': 'Lanovka',
|
||||
'transit.pref.best': 'Nejlepší spojení',
|
||||
'transit.pref.transfers': 'Méně přestupů',
|
||||
'transit.pref.walking': 'Méně chůze',
|
||||
'transit.search': 'Hledat',
|
||||
'transit.searching': 'Hledání…',
|
||||
'transit.searchError': 'Vyhledání spojení selhalo. Zkuste to prosím znovu.',
|
||||
'transit.noResults': 'Nebyla nalezena žádná spojení. Zkuste jiný čas nebo filtry.',
|
||||
'transit.direct': 'Přímé',
|
||||
'transit.transfers': '{count} přestupů',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} zastávek',
|
||||
'transit.walkTo': 'Pěšky k {name}',
|
||||
'transit.platform': 'Nástupiště {track}',
|
||||
'transit.adding': 'Přidávání…',
|
||||
'transit.addToDay': 'Přidat ke dni',
|
||||
'transit.itinerary': 'Itinerář',
|
||||
'transit.attribution': 'Data o spojení přes',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Einladung nicht verfügbar',
|
||||
'trip.invite.invalid': 'Dieser Einladungslink ist ungültig oder abgelaufen.',
|
||||
'trip.invite.backToDashboard': 'Zurück zum Dashboard',
|
||||
'transit.title': 'Öffentliche Verkehrsmittel',
|
||||
'transit.from': 'Von',
|
||||
'transit.to': 'Nach',
|
||||
'transit.searchStop': 'Haltestelle oder Bahnhof suchen …',
|
||||
'transit.swap': 'Tauschen',
|
||||
'transit.depart': 'Abfahrt',
|
||||
'transit.arrive': 'Ankunft',
|
||||
'transit.mode.rail': 'Zug',
|
||||
'transit.mode.subway': 'U-Bahn',
|
||||
'transit.mode.tram': 'Tram',
|
||||
'transit.mode.bus': 'Bus',
|
||||
'transit.mode.ferry': 'Fähre',
|
||||
'transit.mode.cable': 'Seilbahn',
|
||||
'transit.pref.best': 'Beste Route',
|
||||
'transit.pref.transfers': 'Wenige Umstiege',
|
||||
'transit.pref.walking': 'Wenig Fußweg',
|
||||
'transit.search': 'Suchen',
|
||||
'transit.searching': 'Suche …',
|
||||
'transit.searchError': 'Routensuche fehlgeschlagen. Bitte erneut versuchen.',
|
||||
'transit.noResults': 'Keine Verbindungen gefunden. Andere Zeit oder Filter probieren.',
|
||||
'transit.direct': 'Direkt',
|
||||
'transit.transfers': '{count} Umstiege',
|
||||
'transit.min': '{count} Min.',
|
||||
'transit.stops': '{count} Halte',
|
||||
'transit.walkTo': 'Fußweg zu {name}',
|
||||
'transit.platform': 'Gleis {track}',
|
||||
'transit.adding': 'Wird hinzugefügt …',
|
||||
'transit.addToDay': 'Zum Tag hinzufügen',
|
||||
'transit.itinerary': 'Verbindung',
|
||||
'transit.attribution': 'Routing-Daten via',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Invite unavailable',
|
||||
'trip.invite.invalid': 'This invite link is invalid or has expired.',
|
||||
'trip.invite.backToDashboard': 'Back to dashboard',
|
||||
'transit.title': 'Public transit',
|
||||
'transit.from': 'From',
|
||||
'transit.to': 'To',
|
||||
'transit.searchStop': 'Search stop or station…',
|
||||
'transit.swap': 'Swap',
|
||||
'transit.depart': 'Depart',
|
||||
'transit.arrive': 'Arrive',
|
||||
'transit.mode.rail': 'Train',
|
||||
'transit.mode.subway': 'Subway',
|
||||
'transit.mode.tram': 'Tram',
|
||||
'transit.mode.bus': 'Bus',
|
||||
'transit.mode.ferry': 'Ferry',
|
||||
'transit.mode.cable': 'Cable car',
|
||||
'transit.pref.best': 'Best route',
|
||||
'transit.pref.transfers': 'Fewer transfers',
|
||||
'transit.pref.walking': 'Less walking',
|
||||
'transit.search': 'Search',
|
||||
'transit.searching': 'Searching…',
|
||||
'transit.searchError': 'Route search failed. Please try again.',
|
||||
'transit.noResults': 'No connections found. Try a different time or filters.',
|
||||
'transit.direct': 'Direct',
|
||||
'transit.transfers': '{count} transfers',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} stops',
|
||||
'transit.walkTo': 'Walk to {name}',
|
||||
'transit.platform': 'Platform {track}',
|
||||
'transit.adding': 'Adding…',
|
||||
'transit.addToDay': 'Add to day',
|
||||
'transit.itinerary': 'Itinerary',
|
||||
'transit.attribution': 'Routing data via',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Invitación no disponible',
|
||||
'trip.invite.invalid': 'Este enlace de invitación no es válido o ha caducado.',
|
||||
'trip.invite.backToDashboard': 'Volver al panel',
|
||||
'transit.title': 'Transporte público',
|
||||
'transit.from': 'Origen',
|
||||
'transit.to': 'Destino',
|
||||
'transit.searchStop': 'Buscar parada o estación…',
|
||||
'transit.swap': 'Intercambiar',
|
||||
'transit.depart': 'Salida',
|
||||
'transit.arrive': 'Llegada',
|
||||
'transit.mode.rail': 'Tren',
|
||||
'transit.mode.subway': 'Metro',
|
||||
'transit.mode.tram': 'Tranvía',
|
||||
'transit.mode.bus': 'Autobús',
|
||||
'transit.mode.ferry': 'Ferry',
|
||||
'transit.mode.cable': 'Teleférico',
|
||||
'transit.pref.best': 'Mejor ruta',
|
||||
'transit.pref.transfers': 'Menos transbordos',
|
||||
'transit.pref.walking': 'Menos caminata',
|
||||
'transit.search': 'Buscar',
|
||||
'transit.searching': 'Buscando…',
|
||||
'transit.searchError': 'No se pudo buscar la ruta. Inténtalo de nuevo.',
|
||||
'transit.noResults': 'No se encontraron conexiones. Prueba con otra hora u otros filtros.',
|
||||
'transit.direct': 'Directo',
|
||||
'transit.transfers': '{count} transbordos',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} paradas',
|
||||
'transit.walkTo': 'Camina hasta {name}',
|
||||
'transit.platform': 'Andén {track}',
|
||||
'transit.adding': 'Añadiendo…',
|
||||
'transit.addToDay': 'Añadir al día',
|
||||
'transit.itinerary': 'Itinerario',
|
||||
'transit.attribution': 'Datos de rutas vía',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Invitation indisponible',
|
||||
'trip.invite.invalid': 'Ce lien d\'invitation est invalide ou a expiré.',
|
||||
'trip.invite.backToDashboard': 'Retour au tableau de bord',
|
||||
'transit.title': 'Transports en commun',
|
||||
'transit.from': 'Départ',
|
||||
'transit.to': 'Arrivée',
|
||||
'transit.searchStop': 'Rechercher un arrêt ou une gare…',
|
||||
'transit.swap': 'Inverser',
|
||||
'transit.depart': 'Départ',
|
||||
'transit.arrive': 'Arrivée',
|
||||
'transit.mode.rail': 'Train',
|
||||
'transit.mode.subway': 'Métro',
|
||||
'transit.mode.tram': 'Tramway',
|
||||
'transit.mode.bus': 'Bus',
|
||||
'transit.mode.ferry': 'Ferry',
|
||||
'transit.mode.cable': 'Téléphérique',
|
||||
'transit.pref.best': 'Meilleur itinéraire',
|
||||
'transit.pref.transfers': 'Moins de correspondances',
|
||||
'transit.pref.walking': 'Moins de marche',
|
||||
'transit.search': 'Rechercher',
|
||||
'transit.searching': 'Recherche…',
|
||||
'transit.searchError': 'Échec de la recherche d\'itinéraire. Veuillez réessayer.',
|
||||
'transit.noResults': 'Aucune connexion trouvée. Essayez un autre horaire ou d\'autres filtres.',
|
||||
'transit.direct': 'Direct',
|
||||
'transit.transfers': '{count} correspondances',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} arrêts',
|
||||
'transit.walkTo': 'Marcher jusqu\'à {name}',
|
||||
'transit.platform': 'Voie {track}',
|
||||
'transit.adding': 'Ajout…',
|
||||
'transit.addToDay': 'Ajouter au jour',
|
||||
'transit.itinerary': 'Itinéraire',
|
||||
'transit.attribution': 'Données d\'itinéraire via',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Η πρόσκληση δεν είναι διαθέσιμη',
|
||||
'trip.invite.invalid': 'Αυτός ο σύνδεσμος πρόσκλησης δεν είναι έγκυρος ή έχει λήξει.',
|
||||
'trip.invite.backToDashboard': 'Επιστροφή στα ταξίδια μου',
|
||||
'transit.title': 'Μέσα μαζικής μεταφοράς',
|
||||
'transit.from': 'Από',
|
||||
'transit.to': 'Προς',
|
||||
'transit.searchStop': 'Αναζήτηση στάσης ή σταθμού…',
|
||||
'transit.swap': 'Εναλλαγή',
|
||||
'transit.depart': 'Αναχώρηση',
|
||||
'transit.arrive': 'Άφιξη',
|
||||
'transit.mode.rail': 'Τρένο',
|
||||
'transit.mode.subway': 'Μετρό',
|
||||
'transit.mode.tram': 'Τραμ',
|
||||
'transit.mode.bus': 'Λεωφορείο',
|
||||
'transit.mode.ferry': 'Πλοίο',
|
||||
'transit.mode.cable': 'Τελεφερίκ',
|
||||
'transit.pref.best': 'Καλύτερη διαδρομή',
|
||||
'transit.pref.transfers': 'Λιγότερες μετεπιβιβάσεις',
|
||||
'transit.pref.walking': 'Λιγότερο περπάτημα',
|
||||
'transit.search': 'Αναζήτηση',
|
||||
'transit.searching': 'Αναζήτηση…',
|
||||
'transit.searchError': 'Η αναζήτηση διαδρομής απέτυχε. Δοκιμάστε ξανά.',
|
||||
'transit.noResults': 'Δεν βρέθηκαν συνδέσεις. Δοκιμάστε άλλη ώρα ή φίλτρα.',
|
||||
'transit.direct': 'Απευθείας',
|
||||
'transit.transfers': '{count} μετεπιβιβάσεις',
|
||||
'transit.min': '{count} λεπτά',
|
||||
'transit.stops': '{count} στάσεις',
|
||||
'transit.walkTo': 'Περπάτημα προς {name}',
|
||||
'transit.platform': 'Αποβάθρα {track}',
|
||||
'transit.adding': 'Προσθήκη…',
|
||||
'transit.addToDay': 'Προσθήκη στην ημέρα',
|
||||
'transit.itinerary': 'Δρομολόγιο',
|
||||
'transit.attribution': 'Δεδομένα διαδρομών μέσω',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'A meghívó nem érhető el',
|
||||
'trip.invite.invalid': 'Ez a meghívó link érvénytelen vagy lejárt.',
|
||||
'trip.invite.backToDashboard': 'Vissza az irányítópultra',
|
||||
'transit.title': 'Tömegközlekedés',
|
||||
'transit.from': 'Innen',
|
||||
'transit.to': 'Ide',
|
||||
'transit.searchStop': 'Megálló vagy állomás keresése…',
|
||||
'transit.swap': 'Csere',
|
||||
'transit.depart': 'Indulás',
|
||||
'transit.arrive': 'Érkezés',
|
||||
'transit.mode.rail': 'Vonat',
|
||||
'transit.mode.subway': 'Metró',
|
||||
'transit.mode.tram': 'Villamos',
|
||||
'transit.mode.bus': 'Busz',
|
||||
'transit.mode.ferry': 'Komp',
|
||||
'transit.mode.cable': 'Sikló',
|
||||
'transit.pref.best': 'Legjobb útvonal',
|
||||
'transit.pref.transfers': 'Kevesebb átszállás',
|
||||
'transit.pref.walking': 'Kevesebb gyaloglás',
|
||||
'transit.search': 'Keresés',
|
||||
'transit.searching': 'Keresés…',
|
||||
'transit.searchError': 'Az útvonalkeresés nem sikerült. Kérjük, próbáld újra.',
|
||||
'transit.noResults': 'Nem található kapcsolat. Próbálj másik időpontot vagy szűrőket.',
|
||||
'transit.direct': 'Közvetlen',
|
||||
'transit.transfers': '{count} átszállás',
|
||||
'transit.min': '{count} perc',
|
||||
'transit.stops': '{count} megálló',
|
||||
'transit.walkTo': 'Gyaloglás ide: {name}',
|
||||
'transit.platform': '{track}. vágány',
|
||||
'transit.adding': 'Hozzáadás…',
|
||||
'transit.addToDay': 'Hozzáadás a naphoz',
|
||||
'transit.itinerary': 'Útiterv',
|
||||
'transit.attribution': 'Útvonaladatok innen:',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Undangan tidak tersedia',
|
||||
'trip.invite.invalid': 'Tautan undangan ini tidak valid atau sudah kedaluwarsa.',
|
||||
'trip.invite.backToDashboard': 'Kembali ke dasbor',
|
||||
'transit.title': 'Transportasi umum',
|
||||
'transit.from': 'Dari',
|
||||
'transit.to': 'Ke',
|
||||
'transit.searchStop': 'Cari halte atau stasiun…',
|
||||
'transit.swap': 'Tukar',
|
||||
'transit.depart': 'Berangkat',
|
||||
'transit.arrive': 'Tiba',
|
||||
'transit.mode.rail': 'Kereta',
|
||||
'transit.mode.subway': 'MRT',
|
||||
'transit.mode.tram': 'Trem',
|
||||
'transit.mode.bus': 'Bus',
|
||||
'transit.mode.ferry': 'Feri',
|
||||
'transit.mode.cable': 'Kereta gantung',
|
||||
'transit.pref.best': 'Rute terbaik',
|
||||
'transit.pref.transfers': 'Lebih sedikit transit',
|
||||
'transit.pref.walking': 'Lebih sedikit jalan kaki',
|
||||
'transit.search': 'Cari',
|
||||
'transit.searching': 'Mencari…',
|
||||
'transit.searchError': 'Pencarian rute gagal. Silakan coba lagi.',
|
||||
'transit.noResults': 'Tidak ada koneksi ditemukan. Coba waktu atau filter lain.',
|
||||
'transit.direct': 'Langsung',
|
||||
'transit.transfers': '{count} transit',
|
||||
'transit.min': '{count} mnt',
|
||||
'transit.stops': '{count} halte',
|
||||
'transit.walkTo': 'Jalan kaki ke {name}',
|
||||
'transit.platform': 'Peron {track}',
|
||||
'transit.adding': 'Menambahkan…',
|
||||
'transit.addToDay': 'Tambahkan ke hari',
|
||||
'transit.itinerary': 'Itinerari',
|
||||
'transit.attribution': 'Data rute melalui',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Invito non disponibile',
|
||||
'trip.invite.invalid': 'Questo link di invito non è valido o è scaduto.',
|
||||
'trip.invite.backToDashboard': 'Torna alla dashboard',
|
||||
'transit.title': 'Trasporto pubblico',
|
||||
'transit.from': 'Da',
|
||||
'transit.to': 'A',
|
||||
'transit.searchStop': 'Cerca fermata o stazione…',
|
||||
'transit.swap': 'Inverti',
|
||||
'transit.depart': 'Partenza',
|
||||
'transit.arrive': 'Arrivo',
|
||||
'transit.mode.rail': 'Treno',
|
||||
'transit.mode.subway': 'Metropolitana',
|
||||
'transit.mode.tram': 'Tram',
|
||||
'transit.mode.bus': 'Autobus',
|
||||
'transit.mode.ferry': 'Traghetto',
|
||||
'transit.mode.cable': 'Funivia',
|
||||
'transit.pref.best': 'Percorso migliore',
|
||||
'transit.pref.transfers': 'Meno cambi',
|
||||
'transit.pref.walking': 'Meno spostamenti a piedi',
|
||||
'transit.search': 'Cerca',
|
||||
'transit.searching': 'Ricerca in corso…',
|
||||
'transit.searchError': 'Ricerca del percorso non riuscita. Riprova.',
|
||||
'transit.noResults': 'Nessun collegamento trovato. Prova un altro orario o filtri.',
|
||||
'transit.direct': 'Diretto',
|
||||
'transit.transfers': '{count} cambi',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} fermate',
|
||||
'transit.walkTo': 'A piedi fino a {name}',
|
||||
'transit.platform': 'Binario {track}',
|
||||
'transit.adding': 'Aggiunta in corso…',
|
||||
'transit.addToDay': 'Aggiungi al giorno',
|
||||
'transit.itinerary': 'Itinerario',
|
||||
'transit.attribution': 'Dati di routing tramite',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': '招待は利用できません',
|
||||
'trip.invite.invalid': 'この招待リンクは無効か、有効期限が切れています。',
|
||||
'trip.invite.backToDashboard': 'ダッシュボードに戻る',
|
||||
'transit.title': '公共交通機関',
|
||||
'transit.from': '出発地',
|
||||
'transit.to': '目的地',
|
||||
'transit.searchStop': '停留所・駅を検索…',
|
||||
'transit.swap': '入れ替え',
|
||||
'transit.depart': '出発',
|
||||
'transit.arrive': '到着',
|
||||
'transit.mode.rail': '電車',
|
||||
'transit.mode.subway': '地下鉄',
|
||||
'transit.mode.tram': '路面電車',
|
||||
'transit.mode.bus': 'バス',
|
||||
'transit.mode.ferry': 'フェリー',
|
||||
'transit.mode.cable': 'ケーブルカー',
|
||||
'transit.pref.best': 'おすすめルート',
|
||||
'transit.pref.transfers': '乗り換え少',
|
||||
'transit.pref.walking': '徒歩少',
|
||||
'transit.search': '検索',
|
||||
'transit.searching': '検索中…',
|
||||
'transit.searchError': 'ルート検索に失敗しました。もう一度お試しください。',
|
||||
'transit.noResults': '接続が見つかりませんでした。時間やフィルターを変更してお試しください。',
|
||||
'transit.direct': '直通',
|
||||
'transit.transfers': '乗り換え{count}回',
|
||||
'transit.min': '{count}分',
|
||||
'transit.stops': '{count}駅',
|
||||
'transit.walkTo': '{name}まで徒歩',
|
||||
'transit.platform': '{track}番線',
|
||||
'transit.adding': '追加中…',
|
||||
'transit.addToDay': '日程に追加',
|
||||
'transit.itinerary': '行程',
|
||||
'transit.attribution': 'ルートデータ提供:',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': '초대를 사용할 수 없음',
|
||||
'trip.invite.invalid': '이 초대 링크는 유효하지 않거나 만료되었습니다.',
|
||||
'trip.invite.backToDashboard': '대시보드로 돌아가기',
|
||||
'transit.title': '대중교통',
|
||||
'transit.from': '출발',
|
||||
'transit.to': '도착',
|
||||
'transit.searchStop': '정류장 또는 역 검색…',
|
||||
'transit.swap': '출발지·도착지 교체',
|
||||
'transit.depart': '출발 시각',
|
||||
'transit.arrive': '도착 시각',
|
||||
'transit.mode.rail': '기차',
|
||||
'transit.mode.subway': '지하철',
|
||||
'transit.mode.tram': '트램',
|
||||
'transit.mode.bus': '버스',
|
||||
'transit.mode.ferry': '여객선',
|
||||
'transit.mode.cable': '케이블카',
|
||||
'transit.pref.best': '최적 경로',
|
||||
'transit.pref.transfers': '환승 최소',
|
||||
'transit.pref.walking': '도보 최소',
|
||||
'transit.search': '검색',
|
||||
'transit.searching': '검색 중…',
|
||||
'transit.searchError': '경로 검색에 실패했습니다. 다시 시도해 주세요.',
|
||||
'transit.noResults': '연결편을 찾을 수 없습니다. 시간이나 필터를 변경해 보세요.',
|
||||
'transit.direct': '직행',
|
||||
'transit.transfers': '환승 {count}회',
|
||||
'transit.min': '{count}분',
|
||||
'transit.stops': '{count}개 정류장',
|
||||
'transit.walkTo': '{name}까지 도보',
|
||||
'transit.platform': '{track}번 승강장',
|
||||
'transit.adding': '추가 중…',
|
||||
'transit.addToDay': '일정에 추가',
|
||||
'transit.itinerary': '여정',
|
||||
'transit.attribution': '경로 데이터 제공:',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Uitnodiging niet beschikbaar',
|
||||
'trip.invite.invalid': 'Deze uitnodigingslink is ongeldig of verlopen.',
|
||||
'trip.invite.backToDashboard': 'Terug naar dashboard',
|
||||
'transit.title': 'Openbaar vervoer',
|
||||
'transit.from': 'Van',
|
||||
'transit.to': 'Naar',
|
||||
'transit.searchStop': 'Zoek halte of station…',
|
||||
'transit.swap': 'Wisselen',
|
||||
'transit.depart': 'Vertrek',
|
||||
'transit.arrive': 'Aankomst',
|
||||
'transit.mode.rail': 'Trein',
|
||||
'transit.mode.subway': 'Metro',
|
||||
'transit.mode.tram': 'Tram',
|
||||
'transit.mode.bus': 'Bus',
|
||||
'transit.mode.ferry': 'Veerboot',
|
||||
'transit.mode.cable': 'Kabelbaan',
|
||||
'transit.pref.best': 'Beste route',
|
||||
'transit.pref.transfers': 'Minder overstappen',
|
||||
'transit.pref.walking': 'Minder lopen',
|
||||
'transit.search': 'Zoeken',
|
||||
'transit.searching': 'Zoeken…',
|
||||
'transit.searchError': 'Routezoeken mislukt. Probeer het opnieuw.',
|
||||
'transit.noResults': 'Geen verbindingen gevonden. Probeer een andere tijd of andere filters.',
|
||||
'transit.direct': 'Direct',
|
||||
'transit.transfers': '{count} keer overstappen',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} haltes',
|
||||
'transit.walkTo': 'Loop naar {name}',
|
||||
'transit.platform': 'Perron {track}',
|
||||
'transit.adding': 'Toevoegen…',
|
||||
'transit.addToDay': 'Toevoegen aan dag',
|
||||
'transit.itinerary': 'Reisplan',
|
||||
'transit.attribution': 'Routegegevens via',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Zaproszenie niedostępne',
|
||||
'trip.invite.invalid': 'Ten link zaproszenia jest nieprawidłowy lub wygasł.',
|
||||
'trip.invite.backToDashboard': 'Powrót do panelu',
|
||||
'transit.title': 'Transport publiczny',
|
||||
'transit.from': 'Skąd',
|
||||
'transit.to': 'Dokąd',
|
||||
'transit.searchStop': 'Szukaj przystanku lub stacji…',
|
||||
'transit.swap': 'Zamień',
|
||||
'transit.depart': 'Odjazd',
|
||||
'transit.arrive': 'Przyjazd',
|
||||
'transit.mode.rail': 'Pociąg',
|
||||
'transit.mode.subway': 'Metro',
|
||||
'transit.mode.tram': 'Tramwaj',
|
||||
'transit.mode.bus': 'Autobus',
|
||||
'transit.mode.ferry': 'Prom',
|
||||
'transit.mode.cable': 'Kolej linowa',
|
||||
'transit.pref.best': 'Najlepsza trasa',
|
||||
'transit.pref.transfers': 'Mniej przesiadek',
|
||||
'transit.pref.walking': 'Mniej pieszo',
|
||||
'transit.search': 'Szukaj',
|
||||
'transit.searching': 'Wyszukiwanie…',
|
||||
'transit.searchError': 'Wyszukiwanie trasy nie powiodło się. Spróbuj ponownie.',
|
||||
'transit.noResults': 'Nie znaleziono połączeń. Zmień godzinę lub filtry.',
|
||||
'transit.direct': 'Bezpośrednio',
|
||||
'transit.transfers': 'Przesiadki: {count}',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': 'Przystanki: {count}',
|
||||
'transit.walkTo': 'Idź pieszo do {name}',
|
||||
'transit.platform': 'Peron {track}',
|
||||
'transit.adding': 'Dodawanie…',
|
||||
'transit.addToDay': 'Dodaj do dnia',
|
||||
'transit.itinerary': 'Plan podróży',
|
||||
'transit.attribution': 'Dane tras z',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Приглашение недоступно',
|
||||
'trip.invite.invalid': 'Эта ссылка-приглашение недействительна или срок её действия истёк.',
|
||||
'trip.invite.backToDashboard': 'Вернуться на панель управления',
|
||||
'transit.title': 'Общественный транспорт',
|
||||
'transit.from': 'Откуда',
|
||||
'transit.to': 'Куда',
|
||||
'transit.searchStop': 'Поиск остановки или станции…',
|
||||
'transit.swap': 'Поменять местами',
|
||||
'transit.depart': 'Отправление',
|
||||
'transit.arrive': 'Прибытие',
|
||||
'transit.mode.rail': 'Поезд',
|
||||
'transit.mode.subway': 'Метро',
|
||||
'transit.mode.tram': 'Трамвай',
|
||||
'transit.mode.bus': 'Автобус',
|
||||
'transit.mode.ferry': 'Паром',
|
||||
'transit.mode.cable': 'Канатная дорога',
|
||||
'transit.pref.best': 'Лучший маршрут',
|
||||
'transit.pref.transfers': 'Меньше пересадок',
|
||||
'transit.pref.walking': 'Меньше пешком',
|
||||
'transit.search': 'Поиск',
|
||||
'transit.searching': 'Поиск…',
|
||||
'transit.searchError': 'Не удалось найти маршрут. Попробуйте снова.',
|
||||
'transit.noResults': 'Маршруты не найдены. Измените время или фильтры.',
|
||||
'transit.direct': 'Без пересадок',
|
||||
'transit.transfers': 'Пересадок: {count}',
|
||||
'transit.min': '{count} мин',
|
||||
'transit.stops': 'Остановок: {count}',
|
||||
'transit.walkTo': 'Пешком до {name}',
|
||||
'transit.platform': 'Платформа {track}',
|
||||
'transit.adding': 'Добавление…',
|
||||
'transit.addToDay': 'Добавить в день',
|
||||
'transit.itinerary': 'Маршрут',
|
||||
'transit.attribution': 'Данные о маршрутах через',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Inbjudan inte tillgänglig',
|
||||
'trip.invite.invalid': 'Den här inbjudningslänken är ogiltig eller har gått ut.',
|
||||
'trip.invite.backToDashboard': 'Tillbaka till översikten',
|
||||
'transit.title': 'Kollektivtrafik',
|
||||
'transit.from': 'Från',
|
||||
'transit.to': 'Till',
|
||||
'transit.searchStop': 'Sök hållplats eller station…',
|
||||
'transit.swap': 'Byt plats',
|
||||
'transit.depart': 'Avgång',
|
||||
'transit.arrive': 'Ankomst',
|
||||
'transit.mode.rail': 'Tåg',
|
||||
'transit.mode.subway': 'Tunnelbana',
|
||||
'transit.mode.tram': 'Spårvagn',
|
||||
'transit.mode.bus': 'Buss',
|
||||
'transit.mode.ferry': 'Färja',
|
||||
'transit.mode.cable': 'Linbana',
|
||||
'transit.pref.best': 'Bästa resväg',
|
||||
'transit.pref.transfers': 'Färre byten',
|
||||
'transit.pref.walking': 'Mindre gång',
|
||||
'transit.search': 'Sök',
|
||||
'transit.searching': 'Söker…',
|
||||
'transit.searchError': 'Reseökningen misslyckades. Försök igen.',
|
||||
'transit.noResults': 'Inga förbindelser hittades. Prova en annan tid eller andra filter.',
|
||||
'transit.direct': 'Direkt',
|
||||
'transit.transfers': '{count} byten',
|
||||
'transit.min': '{count} min',
|
||||
'transit.stops': '{count} hållplatser',
|
||||
'transit.walkTo': 'Gå till {name}',
|
||||
'transit.platform': 'Spår {track}',
|
||||
'transit.adding': 'Lägger till…',
|
||||
'transit.addToDay': 'Lägg till dag',
|
||||
'transit.itinerary': 'Reseplan',
|
||||
'transit.attribution': 'Ruttdata via',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Davet kullanılamıyor',
|
||||
'trip.invite.invalid': 'Bu davet bağlantısı geçersiz veya süresi dolmuş.',
|
||||
'trip.invite.backToDashboard': 'Panoya dön',
|
||||
'transit.title': 'Toplu taşıma',
|
||||
'transit.from': 'Nereden',
|
||||
'transit.to': 'Nereye',
|
||||
'transit.searchStop': 'Durak veya istasyon ara…',
|
||||
'transit.swap': 'Değiştir',
|
||||
'transit.depart': 'Kalkış',
|
||||
'transit.arrive': 'Varış',
|
||||
'transit.mode.rail': 'Tren',
|
||||
'transit.mode.subway': 'Metro',
|
||||
'transit.mode.tram': 'Tramvay',
|
||||
'transit.mode.bus': 'Otobüs',
|
||||
'transit.mode.ferry': 'Vapur',
|
||||
'transit.mode.cable': 'Teleferik',
|
||||
'transit.pref.best': 'En iyi rota',
|
||||
'transit.pref.transfers': 'Daha az aktarma',
|
||||
'transit.pref.walking': 'Daha az yürüme',
|
||||
'transit.search': 'Ara',
|
||||
'transit.searching': 'Aranıyor…',
|
||||
'transit.searchError': 'Rota araması başarısız oldu. Lütfen tekrar deneyin.',
|
||||
'transit.noResults': 'Bağlantı bulunamadı. Farklı bir saat veya filtre deneyin.',
|
||||
'transit.direct': 'Aktarmasız',
|
||||
'transit.transfers': '{count} aktarma',
|
||||
'transit.min': '{count} dk',
|
||||
'transit.stops': '{count} durak',
|
||||
'transit.walkTo': '{name} durağına yürü',
|
||||
'transit.platform': 'Peron {track}',
|
||||
'transit.adding': 'Ekleniyor…',
|
||||
'transit.addToDay': 'Güne ekle',
|
||||
'transit.itinerary': 'Güzergah',
|
||||
'transit.attribution': 'Rota verileri:',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Запрошення недоступне',
|
||||
'trip.invite.invalid': 'Це посилання-запрошення недійсне або термін його дії минув.',
|
||||
'trip.invite.backToDashboard': 'Назад до панелі',
|
||||
'transit.title': 'Громадський транспорт',
|
||||
'transit.from': 'Звідки',
|
||||
'transit.to': 'Куди',
|
||||
'transit.searchStop': 'Пошук зупинки або станції…',
|
||||
'transit.swap': 'Поміняти місцями',
|
||||
'transit.depart': 'Відправлення',
|
||||
'transit.arrive': 'Прибуття',
|
||||
'transit.mode.rail': 'Поїзд',
|
||||
'transit.mode.subway': 'Метро',
|
||||
'transit.mode.tram': 'Трамвай',
|
||||
'transit.mode.bus': 'Автобус',
|
||||
'transit.mode.ferry': 'Пором',
|
||||
'transit.mode.cable': 'Канатна дорога',
|
||||
'transit.pref.best': 'Найкращий маршрут',
|
||||
'transit.pref.transfers': 'Менше пересадок',
|
||||
'transit.pref.walking': 'Менше пішки',
|
||||
'transit.search': 'Пошук',
|
||||
'transit.searching': 'Пошук…',
|
||||
'transit.searchError': 'Не вдалося знайти маршрут. Спробуйте ще раз.',
|
||||
'transit.noResults': 'З\'єднань не знайдено. Спробуйте інший час або фільтри.',
|
||||
'transit.direct': 'Прямий',
|
||||
'transit.transfers': 'Пересадок: {count}',
|
||||
'transit.min': '{count} хв',
|
||||
'transit.stops': 'Зупинок: {count}',
|
||||
'transit.walkTo': 'Пішки до {name}',
|
||||
'transit.platform': 'Платформа {track}',
|
||||
'transit.adding': 'Додавання…',
|
||||
'transit.addToDay': 'Додати до дня',
|
||||
'transit.itinerary': 'Маршрут',
|
||||
'transit.attribution': 'Дані маршрутизації через',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': 'Lời mời không khả dụng',
|
||||
'trip.invite.invalid': 'Liên kết mời này không hợp lệ hoặc đã hết hạn.',
|
||||
'trip.invite.backToDashboard': 'Quay lại bảng điều khiển',
|
||||
'transit.title': 'Giao thông công cộng',
|
||||
'transit.from': 'Điểm đi',
|
||||
'transit.to': 'Điểm đến',
|
||||
'transit.searchStop': 'Tìm điểm dừng hoặc ga…',
|
||||
'transit.swap': 'Đổi chiều',
|
||||
'transit.depart': 'Khởi hành',
|
||||
'transit.arrive': 'Đến nơi',
|
||||
'transit.mode.rail': 'Tàu hỏa',
|
||||
'transit.mode.subway': 'Tàu điện ngầm',
|
||||
'transit.mode.tram': 'Tàu điện',
|
||||
'transit.mode.bus': 'Xe buýt',
|
||||
'transit.mode.ferry': 'Phà',
|
||||
'transit.mode.cable': 'Cáp treo',
|
||||
'transit.pref.best': 'Tuyến tốt nhất',
|
||||
'transit.pref.transfers': 'Ít chuyển tuyến hơn',
|
||||
'transit.pref.walking': 'Ít đi bộ hơn',
|
||||
'transit.search': 'Tìm kiếm',
|
||||
'transit.searching': 'Đang tìm…',
|
||||
'transit.searchError': 'Tìm tuyến thất bại. Vui lòng thử lại.',
|
||||
'transit.noResults': 'Không tìm thấy tuyến. Hãy thử thời gian hoặc bộ lọc khác.',
|
||||
'transit.direct': 'Trực tiếp',
|
||||
'transit.transfers': '{count} lần chuyển tuyến',
|
||||
'transit.min': '{count} phút',
|
||||
'transit.stops': '{count} điểm dừng',
|
||||
'transit.walkTo': 'Đi bộ đến {name}',
|
||||
'transit.platform': 'Sân ga {track}',
|
||||
'transit.adding': 'Đang thêm…',
|
||||
'transit.addToDay': 'Thêm vào ngày',
|
||||
'transit.itinerary': 'Lộ trình',
|
||||
'transit.attribution': 'Dữ liệu tìm tuyến từ',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': '邀請無法使用',
|
||||
'trip.invite.invalid': '此邀請連結無效或已過期。',
|
||||
'trip.invite.backToDashboard': '返回儀表板',
|
||||
'transit.title': '大眾運輸',
|
||||
'transit.from': '起點',
|
||||
'transit.to': '終點',
|
||||
'transit.searchStop': '搜尋站點或車站…',
|
||||
'transit.swap': '對調',
|
||||
'transit.depart': '出發',
|
||||
'transit.arrive': '抵達',
|
||||
'transit.mode.rail': '火車',
|
||||
'transit.mode.subway': '捷運',
|
||||
'transit.mode.tram': '路面電車',
|
||||
'transit.mode.bus': '公車',
|
||||
'transit.mode.ferry': '渡輪',
|
||||
'transit.mode.cable': '纜車',
|
||||
'transit.pref.best': '最佳路線',
|
||||
'transit.pref.transfers': '較少轉乘',
|
||||
'transit.pref.walking': '較少步行',
|
||||
'transit.search': '搜尋',
|
||||
'transit.searching': '搜尋中…',
|
||||
'transit.searchError': '路線搜尋失敗,請重試。',
|
||||
'transit.noResults': '找不到路線。請嘗試其他時間或篩選條件。',
|
||||
'transit.direct': '直達',
|
||||
'transit.transfers': '轉乘 {count} 次',
|
||||
'transit.min': '{count} 分鐘',
|
||||
'transit.stops': '{count} 站',
|
||||
'transit.walkTo': '步行至 {name}',
|
||||
'transit.platform': '{track} 月台',
|
||||
'transit.adding': '新增中…',
|
||||
'transit.addToDay': '加入當日行程',
|
||||
'transit.itinerary': '行程',
|
||||
'transit.attribution': '路線資料來自',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
@@ -39,5 +39,35 @@ const trip: TranslationStrings = {
|
||||
'trip.invite.invalidTitle': '邀请不可用',
|
||||
'trip.invite.invalid': '此邀请链接无效或已过期。',
|
||||
'trip.invite.backToDashboard': '返回仪表盘',
|
||||
'transit.title': '公共交通',
|
||||
'transit.from': '出发地',
|
||||
'transit.to': '目的地',
|
||||
'transit.searchStop': '搜索站点或车站…',
|
||||
'transit.swap': '交换',
|
||||
'transit.depart': '出发',
|
||||
'transit.arrive': '到达',
|
||||
'transit.mode.rail': '火车',
|
||||
'transit.mode.subway': '地铁',
|
||||
'transit.mode.tram': '有轨电车',
|
||||
'transit.mode.bus': '公交车',
|
||||
'transit.mode.ferry': '渡轮',
|
||||
'transit.mode.cable': '缆车',
|
||||
'transit.pref.best': '最佳路线',
|
||||
'transit.pref.transfers': '减少换乘',
|
||||
'transit.pref.walking': '减少步行',
|
||||
'transit.search': '搜索',
|
||||
'transit.searching': '搜索中…',
|
||||
'transit.searchError': '路线搜索失败,请重试。',
|
||||
'transit.noResults': '未找到线路,请尝试其他时间或筛选条件。',
|
||||
'transit.direct': '直达',
|
||||
'transit.transfers': '换乘 {count} 次',
|
||||
'transit.min': '{count} 分钟',
|
||||
'transit.stops': '{count} 站',
|
||||
'transit.walkTo': '步行至 {name}',
|
||||
'transit.platform': '{track} 站台',
|
||||
'transit.adding': '添加中…',
|
||||
'transit.addToDay': '添加到当天',
|
||||
'transit.itinerary': '行程',
|
||||
'transit.attribution': '路线数据来自',
|
||||
};
|
||||
export default trip;
|
||||
|
||||
Reference in New Issue
Block a user