mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-22 06:56:35 +00:00
fix(tours): keep a city walk on foot across the water, mark a crossing by boat apart from the walking time and save it only once taken
This commit is contained in:
@@ -756,6 +756,25 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'محسوب',
|
||||
'tours.walk.stations': 'محطات الجولة',
|
||||
'tours.walk.stationNumbered': 'المحطة {number}',
|
||||
'tours.walk.ferry.gap': 'لا يوجد طريق يربط {from} و{to}، لا سيرًا ولا بالعبّارة.',
|
||||
'tours.walk.ferry.gapHint': 'يبقى المسار المخطط سابقًا على الخريطة باهتًا حتى يُعثر على طريق. انقل إحدى المحطتين.',
|
||||
'tours.walk.ferry.pending': 'لا يوجد طريق سيرًا بين {from} و{to}: يعبر الموجّه الماء هنا بالعبّارة.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'لا يُحتسب العبور وقتَ مشي. للحفظ، اعتمد العبّارة أو انقل محطة كي يربطهما طريق سيرًا.',
|
||||
'tours.walk.ferry.accepted': 'عبّارة من {from} إلى {to}، اعتُمدت عن قصد. يبقى وقتها منفصلًا عن وقت المشي.',
|
||||
'tours.walk.ferry.accept': 'اعتماد العبّارة',
|
||||
'tours.walk.ferry.show': 'إظهار العبور',
|
||||
'tours.walk.ferry.selectStop': 'اختيار المحطة {number}',
|
||||
'tours.walk.ferry.time': '{time} بالقارب',
|
||||
'tours.walk.ferry.timeUnknown': 'وقت القارب غير معروف',
|
||||
'tours.walk.ferry.timeHint': 'كما يعطيه الموجّه للعبور. ليس جزءًا من وقت المشي.',
|
||||
'tours.walk.ferry.field': 'عبّارة',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'عن وقت العبّارة',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'الوقت الذي تستغرقه العبورات بالقارب كما يعطيه الموجّه. يبقى منفصلًا عن وقت المشي وليس ضمن الإجمالي المخطط.',
|
||||
'tours.walk.ferry.leg': 'عبور بالعبّارة',
|
||||
'tours.walk.ferry.legInfo': 'عُبر بالقارب لا سيرًا. وقته ليس ضمن وقت المشي.',
|
||||
'tours.walk.ferry.release': 'التخطيط سيرًا من جديد',
|
||||
'tours.walk.stationsUnread': 'تعذّر تحميل محطات هذه الجولة. افتحها مرة أخرى وأنت متصل بالإنترنت لعرضها وتأشيرها.',
|
||||
'tours.walk.progress': 'تمت زيارة {visited} من {total}',
|
||||
'tours.walk.remaining.pill': 'متبقٍّ {time} سيرًا',
|
||||
|
||||
@@ -755,6 +755,28 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Hesablanmış',
|
||||
'tours.walk.stations': 'Gəzintinin dayanacaqları',
|
||||
'tours.walk.stationNumbered': 'Dayanacaq {number}',
|
||||
'tours.walk.ferry.gap': '{from} ilə {to} arasında nə piyada, nə də bərə ilə yol var.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Əvvəl planlanan marşrut yol tapılana qədər xəritədə solğun qalır. İki dayanacaqdan birini köçür.',
|
||||
'tours.walk.ferry.pending':
|
||||
'{from} ilə {to} arasında piyada yol yoxdur: marşrutlaşdırıcı burada suyu bərə ilə keçir.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Keçid yürüş vaxtı sayılmır. Yadda saxlamaq üçün bərəni qəbul et və ya piyada yol onları birləşdirsin deyə dayanacağı köçür.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'{from}-dan {to}-a bərə, qəsdən qəbul edilib. Onun vaxtı yürüş vaxtından ayrı saxlanılır.',
|
||||
'tours.walk.ferry.accept': 'Bərəni qəbul et',
|
||||
'tours.walk.ferry.show': 'Keçidi göstər',
|
||||
'tours.walk.ferry.selectStop': '{number} nömrəli dayanacağı seç',
|
||||
'tours.walk.ferry.time': 'Qayıqla {time}',
|
||||
'tours.walk.ferry.timeUnknown': 'Qayıq vaxtı bilinmir',
|
||||
'tours.walk.ferry.timeHint': 'Marşrutlaşdırıcının keçid üçün verdiyi kimi. Yürüş vaxtına daxil deyil.',
|
||||
'tours.walk.ferry.field': 'Bərə',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Bərə vaxtı haqqında',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Qayıqla keçidlərin vaxtı, marşrutlaşdırıcının verdiyi kimi. Yürüş vaxtından ayrı saxlanılır və planlanan cəmə daxil deyil.',
|
||||
'tours.walk.ferry.leg': 'Bərə keçidi',
|
||||
'tours.walk.ferry.legInfo': 'Qayıqla keçilib, piyada deyil. Vaxtı yürüş vaxtına daxil deyil.',
|
||||
'tours.walk.ferry.release': 'Yenidən piyada planla',
|
||||
'tours.walk.stationsUnread':
|
||||
'Bu gəzintinin dayanacaqları yüklənə bilmədi. Onları görmək və qeyd etmək üçün gəzintini internet bağlantısı ilə yenidən aç.',
|
||||
'tours.walk.progress': '{total} dayanacaqdan {visited} ziyarət edildi',
|
||||
|
||||
@@ -764,6 +764,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Calculado',
|
||||
'tours.walk.stations': 'Paradas do passeio',
|
||||
'tours.walk.stationNumbered': 'Parada {number}',
|
||||
'tours.walk.ferry.gap': 'Nenhum caminho liga {from} e {to}, nem a pé nem de balsa.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'A rota planejada antes fica no mapa, esmaecida, até que um caminho seja encontrado. Mova uma das duas paradas.',
|
||||
'tours.walk.ferry.pending': 'Não há caminho a pé entre {from} e {to}: aqui o roteador atravessa a água de balsa.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'A travessia não conta como tempo de caminhada. Para salvar, aceite a balsa ou mova uma parada para que um caminho a pé as ligue.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Balsa de {from} a {to}, aceita de propósito. O tempo dela fica separado do tempo de caminhada.',
|
||||
'tours.walk.ferry.accept': 'Aceitar balsa',
|
||||
'tours.walk.ferry.show': 'Mostrar travessia',
|
||||
'tours.walk.ferry.selectStop': 'Selecionar parada {number}',
|
||||
'tours.walk.ferry.time': '{time} de barco',
|
||||
'tours.walk.ferry.timeUnknown': 'Tempo de barco desconhecido',
|
||||
'tours.walk.ferry.timeHint': 'Como o roteador o informa para a travessia. Não faz parte do tempo de caminhada.',
|
||||
'tours.walk.ferry.field': 'Balsa',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Sobre o tempo de balsa',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'O tempo das travessias de barco, como o roteador o informa. Fica separado do tempo de caminhada e não entra no total planejado.',
|
||||
'tours.walk.ferry.leg': 'Travessia de balsa',
|
||||
'tours.walk.ferry.legInfo': 'Atravessado de barco, não a pé. O tempo não está no tempo de caminhada.',
|
||||
'tours.walk.ferry.release': 'Planejar a pé de novo',
|
||||
'tours.walk.stationsUnread':
|
||||
'Não foi possível carregar as paradas deste passeio. Abra-o de novo com conexão para vê-las e marcá-las.',
|
||||
'tours.walk.progress': '{visited} de {total} visitadas',
|
||||
|
||||
@@ -768,6 +768,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Calculat',
|
||||
'tours.walk.stations': 'Parades de la ruta',
|
||||
'tours.walk.stationNumbered': 'Parada {number}',
|
||||
'tours.walk.ferry.gap': 'Cap camí uneix {from} i {to}, ni a peu ni amb ferri.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'La ruta planificada abans es queda al mapa, en gris, fins que es trobi un camí. Mou una de les dues parades.',
|
||||
'tours.walk.ferry.pending': "No hi ha cap camí a peu entre {from} i {to}: aquí el router travessa l'aigua amb ferri.",
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'La travessia no compta com a temps a peu. Per desar, accepta el ferri o mou una parada perquè un camí a peu les uneixi.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Ferri de {from} a {to}, acceptat expressament. El seu temps es manté a part del temps a peu.',
|
||||
'tours.walk.ferry.accept': 'Acceptar el ferri',
|
||||
'tours.walk.ferry.show': 'Mostrar la travessia',
|
||||
'tours.walk.ferry.selectStop': 'Tria la parada {number}',
|
||||
'tours.walk.ferry.time': '{time} en vaixell',
|
||||
'tours.walk.ferry.timeUnknown': 'Temps en vaixell desconegut',
|
||||
'tours.walk.ferry.timeHint': 'Tal com el dona el router per a la travessia. No forma part del temps a peu.',
|
||||
'tours.walk.ferry.field': 'Ferri',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Sobre el temps de ferri',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'El temps de les travessies en vaixell, tal com el dona el router. Es manté a part del temps a peu i no és al total planificat.',
|
||||
'tours.walk.ferry.leg': 'Travessia en ferri',
|
||||
'tours.walk.ferry.legInfo': 'Travessat en vaixell, no a peu. El seu temps no és al temps a peu.',
|
||||
'tours.walk.ferry.release': 'Tornar a planificar a peu',
|
||||
'tours.walk.stationsUnread':
|
||||
"No s'han pogut carregar les parades d'aquesta ruta. Torna a obrir-la amb connexió per veure-les i marcar-les.",
|
||||
'tours.walk.progress': '{visited} de {total} visitades',
|
||||
|
||||
@@ -751,6 +751,26 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Vypočteno',
|
||||
'tours.walk.stations': 'Zastávky procházky',
|
||||
'tours.walk.stationNumbered': 'Zastávka {number}',
|
||||
'tours.walk.ferry.gap': 'Mezi {from} a {to} nevede žádná cesta, pěšky ani trajektem.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Dříve naplánovaná trasa zůstane na mapě zašedlá, dokud se cesta nenajde. Přesuň jednu z obou zastávek.',
|
||||
'tours.walk.ferry.pending': 'Mezi {from} a {to} nevede žádná pěší cesta: plánovač zde přejíždí vodu trajektem.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Přeprava se nepočítá do doby chůze. Pro uložení převezmi trajekt nebo přesuň zastávku, aby je spojila pěší cesta.',
|
||||
'tours.walk.ferry.accepted': 'Trajekt z {from} do {to}, převzatý záměrně. Jeho čas je oddělen od doby chůze.',
|
||||
'tours.walk.ferry.accept': 'Převzít trajekt',
|
||||
'tours.walk.ferry.show': 'Ukázat přepravu',
|
||||
'tours.walk.ferry.selectStop': 'Vybrat zastávku {number}',
|
||||
'tours.walk.ferry.time': '{time} lodí',
|
||||
'tours.walk.ferry.timeUnknown': 'Čas lodí neznámý',
|
||||
'tours.walk.ferry.timeHint': 'Jak ho plánovač udává pro přepravu. Není součástí doby chůze.',
|
||||
'tours.walk.ferry.field': 'Trajekt',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'O čase trajektu',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Čas přeprav lodí, jak ho udává plánovač. Je oddělen od doby chůze a není v plánovaném celku.',
|
||||
'tours.walk.ferry.leg': 'Přeprava trajektem',
|
||||
'tours.walk.ferry.legInfo': 'Přepluto lodí, ne prošlo. Jeho čas není v době chůze.',
|
||||
'tours.walk.ferry.release': 'Znovu naplánovat pěšky',
|
||||
'tours.walk.stationsUnread':
|
||||
'Zastávky této procházky se nepodařilo načíst. Otevři ji znovu s připojením, pak je uvidíš a půjde je odškrtat.',
|
||||
'tours.walk.progress': 'Navštíveno {visited} z {total}',
|
||||
|
||||
@@ -771,6 +771,28 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Berechnet',
|
||||
'tours.walk.stations': 'Stationen',
|
||||
'tours.walk.stationNumbered': 'Station {number}',
|
||||
'tours.walk.ferry.gap': 'Kein Weg verbindet {from} und {to}, weder zu Fuß noch mit einer Fähre.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Die zuvor geplante Route bleibt ausgegraut auf der Karte, bis ein Weg gefunden ist. Verschiebe eine der beiden Stationen.',
|
||||
'tours.walk.ferry.pending':
|
||||
'Zwischen {from} und {to} gibt es keinen Fußweg: Der Router setzt hier mit einer Fähre über.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Die Überfahrt zählt nicht als Gehzeit. Zum Speichern übernimm die Fähre oder verschiebe eine Station, damit ein Fußweg sie verbindet.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Fähre von {from} nach {to}, bewusst übernommen. Ihre Zeit steht getrennt von der Gehzeit.',
|
||||
'tours.walk.ferry.accept': 'Fähre übernehmen',
|
||||
'tours.walk.ferry.show': 'Überfahrt zeigen',
|
||||
'tours.walk.ferry.selectStop': 'Station {number} wählen',
|
||||
'tours.walk.ferry.time': '{time} mit dem Boot',
|
||||
'tours.walk.ferry.timeUnknown': 'Bootszeit unbekannt',
|
||||
'tours.walk.ferry.timeHint': 'So wie der Router sie für die Überfahrt angibt. Sie gehört nicht zur Gehzeit.',
|
||||
'tours.walk.ferry.field': 'Fähre',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Zur Fährzeit',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Die Zeit der Überfahrten mit dem Boot, so wie der Router sie angibt. Sie steht getrennt von der Gehzeit und ist nicht in der geplanten Gesamtzeit.',
|
||||
'tours.walk.ferry.leg': 'Überfahrt mit der Fähre',
|
||||
'tours.walk.ferry.legInfo': 'Mit dem Boot übergesetzt, nicht gegangen. Ihre Zeit ist nicht in der Gehzeit.',
|
||||
'tours.walk.ferry.release': 'Wieder zu Fuß planen',
|
||||
'tours.walk.stationsUnread':
|
||||
'Die Stationen dieses Walks ließen sich nicht laden. Öffne ihn erneut mit Verbindung, um sie zu sehen und abzuhaken.',
|
||||
'tours.walk.progress': '{visited} von {total} besucht',
|
||||
|
||||
@@ -750,6 +750,28 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Computed',
|
||||
'tours.walk.stations': 'Stops of the walk',
|
||||
'tours.walk.stationNumbered': 'Stop {number}',
|
||||
'tours.walk.ferry.gap': 'No way joins {from} and {to}, neither on foot nor by ferry.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'The route planned before stays on the map, greyed, until a way is found. Move one of the two stops.',
|
||||
'tours.walk.ferry.pending':
|
||||
'There is no way on foot between {from} and {to}: the router crosses the water by ferry here.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'The crossing is not counted as walking time. To save, take the ferry or move a stop so a way on foot joins them.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Ferry from {from} to {to}, taken on purpose. Its time is kept apart from the walking time.',
|
||||
'tours.walk.ferry.accept': 'Take ferry',
|
||||
'tours.walk.ferry.show': 'Show crossing',
|
||||
'tours.walk.ferry.selectStop': 'Select stop {number}',
|
||||
'tours.walk.ferry.time': '{time} by boat',
|
||||
'tours.walk.ferry.timeUnknown': 'Boat time unknown',
|
||||
'tours.walk.ferry.timeHint': 'As the router gives it for the crossing. It is not part of the walking time.',
|
||||
'tours.walk.ferry.field': 'Ferry',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'About the ferry time',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'The time the crossings by boat take, as the router gives it. It is kept apart from the walking time and is not in the planned total.',
|
||||
'tours.walk.ferry.leg': 'Ferry crossing',
|
||||
'tours.walk.ferry.legInfo': 'Crossed by boat, not walked. Its time is not in the walking time.',
|
||||
'tours.walk.ferry.release': 'Plan on foot again',
|
||||
'tours.walk.stationsUnread':
|
||||
'The stops of this walk could not be loaded. Open it again while online to see them and check them off.',
|
||||
'tours.walk.progress': '{visited} of {total} visited',
|
||||
|
||||
@@ -765,6 +765,26 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Calculado',
|
||||
'tours.walk.stations': 'Paradas del paseo',
|
||||
'tours.walk.stationNumbered': 'Parada {number}',
|
||||
'tours.walk.ferry.gap': 'Ningún camino une {from} y {to}, ni a pie ni en ferri.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'La ruta planificada antes queda en el mapa, en gris, hasta que se encuentre un camino. Mueve una de las dos paradas.',
|
||||
'tours.walk.ferry.pending': 'No hay camino a pie entre {from} y {to}: aquí el enrutador cruza el agua en ferri.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'La travesía no cuenta como tiempo a pie. Para guardar, acepta el ferri o mueve una parada para que un camino a pie las una.',
|
||||
'tours.walk.ferry.accepted': 'Ferri de {from} a {to}, aceptado a propósito. Su tiempo queda aparte del tiempo a pie.',
|
||||
'tours.walk.ferry.accept': 'Aceptar ferri',
|
||||
'tours.walk.ferry.show': 'Mostrar travesía',
|
||||
'tours.walk.ferry.selectStop': 'Elegir parada {number}',
|
||||
'tours.walk.ferry.time': '{time} en barco',
|
||||
'tours.walk.ferry.timeUnknown': 'Tiempo en barco desconocido',
|
||||
'tours.walk.ferry.timeHint': 'Tal como lo da el enrutador para la travesía. No forma parte del tiempo a pie.',
|
||||
'tours.walk.ferry.field': 'Ferri',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Sobre el tiempo en ferri',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'El tiempo de las travesías en barco, tal como lo da el enrutador. Queda aparte del tiempo a pie y no está en el total planificado.',
|
||||
'tours.walk.ferry.leg': 'Travesía en ferri',
|
||||
'tours.walk.ferry.legInfo': 'Cruzado en barco, no a pie. Su tiempo no está en el tiempo a pie.',
|
||||
'tours.walk.ferry.release': 'Planificar a pie de nuevo',
|
||||
'tours.walk.stationsUnread':
|
||||
'No se pudieron cargar las paradas de este paseo. Vuelve a abrirlo con conexión para verlas y marcarlas.',
|
||||
'tours.walk.progress': '{visited} de {total} visitadas',
|
||||
|
||||
@@ -753,6 +753,26 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Arvutatud',
|
||||
'tours.walk.stations': 'Jalutuse peatused',
|
||||
'tours.walk.stationNumbered': 'Peatus {number}',
|
||||
'tours.walk.ferry.gap': '{from} ja {to} vahel pole teed, ei jalgsi ega praamiga.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Varem planeeritud marsruut jääb kaardile hallina, kuni tee leitakse. Liiguta üht kahest peatusest.',
|
||||
'tours.walk.ferry.pending': '{from} ja {to} vahel pole jalgteed: marsruutija ületab siin vee praamiga.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Ülesõitu ei loeta kõndimisajaks. Salvestamiseks võta praam üle või liiguta peatust, et jalgtee need ühendaks.',
|
||||
'tours.walk.ferry.accepted': 'Praam {from} kuni {to}, meelega üle võetud. Selle aeg on kõndimisajast eraldi.',
|
||||
'tours.walk.ferry.accept': 'Võta praam',
|
||||
'tours.walk.ferry.show': 'Näita ülesõitu',
|
||||
'tours.walk.ferry.selectStop': 'Vali peatus {number}',
|
||||
'tours.walk.ferry.time': '{time} paadiga',
|
||||
'tours.walk.ferry.timeUnknown': 'Paadiaeg teadmata',
|
||||
'tours.walk.ferry.timeHint': 'Nagu marsruutija selle ülesõidu jaoks annab. See pole kõndimisaja osa.',
|
||||
'tours.walk.ferry.field': 'Praam',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Praamiajast',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Paadiga ülesõitude aeg, nagu marsruutija selle annab. See on kõndimisajast eraldi ega kuulu planeeritud koguaega.',
|
||||
'tours.walk.ferry.leg': 'Praamiga ülesõit',
|
||||
'tours.walk.ferry.legInfo': 'Ületatud paadiga, mitte jalgsi. Selle aeg pole kõndimisajas.',
|
||||
'tours.walk.ferry.release': 'Planeeri uuesti jalgsi',
|
||||
'tours.walk.stationsUnread':
|
||||
'Selle jalutuse peatusi ei õnnestunud laadida. Ava jalutus uuesti võrguühendusega, et neid näha ja ära märkida.',
|
||||
'tours.walk.progress': '{visited} / {total} külastatud',
|
||||
|
||||
@@ -778,6 +778,28 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Calculé',
|
||||
'tours.walk.stations': 'Étapes de la balade',
|
||||
'tours.walk.stationNumbered': 'Étape {number}',
|
||||
'tours.walk.ferry.gap': 'Aucun chemin ne relie {from} et {to}, ni à pied ni en ferry.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
"L'itinéraire planifié avant reste sur la carte, grisé, jusqu'à ce qu'un chemin soit trouvé. Déplace l'une des deux étapes.",
|
||||
'tours.walk.ferry.pending':
|
||||
"Il n'y a pas de chemin à pied entre {from} et {to} : ici, le calculateur traverse l'eau en ferry.",
|
||||
'tours.walk.ferry.pendingHint':
|
||||
"La traversée ne compte pas comme temps de marche. Pour enregistrer, prends le ferry ou déplace une étape pour qu'un chemin à pied les relie.",
|
||||
'tours.walk.ferry.accepted': 'Ferry de {from} à {to}, pris exprès. Son temps reste à part du temps de marche.',
|
||||
'tours.walk.ferry.accept': 'Prendre le ferry',
|
||||
'tours.walk.ferry.show': 'Montrer la traversée',
|
||||
'tours.walk.ferry.selectStop': "Choisir l'étape {number}",
|
||||
'tours.walk.ferry.time': '{time} en bateau',
|
||||
'tours.walk.ferry.timeUnknown': 'Temps en bateau inconnu',
|
||||
'tours.walk.ferry.timeHint':
|
||||
'Tel que le calculateur le donne pour la traversée. Il ne fait pas partie du temps de marche.',
|
||||
'tours.walk.ferry.field': 'Ferry', // same-as-en
|
||||
'tours.walk.ferry.fieldInfoLabel': 'À propos du temps de ferry',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
"Le temps des traversées en bateau, tel que le calculateur le donne. Il reste à part du temps de marche et n'entre pas dans le total prévu.",
|
||||
'tours.walk.ferry.leg': 'Traversée en ferry',
|
||||
'tours.walk.ferry.legInfo': "Traversé en bateau, pas à pied. Son temps n'est pas dans le temps de marche.",
|
||||
'tours.walk.ferry.release': 'Replanifier à pied',
|
||||
'tours.walk.stationsUnread':
|
||||
"Les étapes de cette balade n'ont pas pu être chargées. Rouvre-la avec une connexion pour les voir et les cocher.",
|
||||
'tours.walk.progress': '{visited} sur {total} visitées',
|
||||
|
||||
@@ -782,6 +782,28 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Υπολογισμένο',
|
||||
'tours.walk.stations': 'Στάσεις της βόλτας',
|
||||
'tours.walk.stationNumbered': 'Στάση {number}',
|
||||
'tours.walk.ferry.gap': 'Κανένας δρόμος δεν ενώνει {from} και {to}, ούτε με τα πόδια ούτε με φέρι.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Η διαδρομή που σχεδιάστηκε πριν μένει στον χάρτη, γκριζαρισμένη, μέχρι να βρεθεί δρόμος. Μετακίνησε μία από τις δύο στάσεις.',
|
||||
'tours.walk.ferry.pending':
|
||||
'Δεν υπάρχει πεζός δρόμος μεταξύ {from} και {to}: εδώ η δρομολόγηση περνά το νερό με φέρι.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Η διάβαση δεν μετράει ως χρόνος περπατήματος. Για αποθήκευση, κράτησε το φέρι ή μετακίνησε μια στάση ώστε να τις ενώνει πεζός δρόμος.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Φέρι από {from} προς {to}, κρατημένο σκόπιμα. Ο χρόνος του μένει χωριστά από τον χρόνο περπατήματος.',
|
||||
'tours.walk.ferry.accept': 'Κράτηση φέρι',
|
||||
'tours.walk.ferry.show': 'Εμφάνιση διάβασης',
|
||||
'tours.walk.ferry.selectStop': 'Επιλογή στάσης {number}',
|
||||
'tours.walk.ferry.time': '{time} με σκάφος',
|
||||
'tours.walk.ferry.timeUnknown': 'Άγνωστος χρόνος σκάφους',
|
||||
'tours.walk.ferry.timeHint': 'Όπως τον δίνει η δρομολόγηση για τη διάβαση. Δεν είναι μέρος του χρόνου περπατήματος.',
|
||||
'tours.walk.ferry.field': 'Φέρι',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Σχετικά με τον χρόνο φέρι',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Ο χρόνος των διαβάσεων με σκάφος, όπως τον δίνει η δρομολόγηση. Μένει χωριστά από τον χρόνο περπατήματος και δεν μπαίνει στο προγραμματισμένο σύνολο.',
|
||||
'tours.walk.ferry.leg': 'Διάβαση με φέρι',
|
||||
'tours.walk.ferry.legInfo': 'Διασχίστηκε με σκάφος, όχι με τα πόδια. Ο χρόνος του δεν είναι στον χρόνο περπατήματος.',
|
||||
'tours.walk.ferry.release': 'Ξανά σχεδιασμός με τα πόδια',
|
||||
'tours.walk.stationsUnread':
|
||||
'Δεν φορτώθηκαν οι στάσεις αυτής της βόλτας. Άνοιξέ την ξανά με σύνδεση για να τις δεις και να τις τσεκάρεις.',
|
||||
'tours.walk.progress': '{visited} από {total} επισκέψεις',
|
||||
|
||||
@@ -765,6 +765,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Számított',
|
||||
'tours.walk.stations': 'A séta megállói',
|
||||
'tours.walk.stationNumbered': '{number}. megálló',
|
||||
'tours.walk.ferry.gap': 'Nincs út {from} és {to} között, sem gyalog, sem komppal.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'A korábban tervezett útvonal szürkén a térképen marad, amíg nem talál utat. Helyezd át a két megálló egyikét.',
|
||||
'tours.walk.ferry.pending': 'Nincs gyalogos út {from} és {to} között: az útvonaltervező itt komppal kel át a vízen.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Az átkelés nem számít gyaloglási időnek. A mentéshez fogadd el a kompot, vagy helyezz át egy megállót, hogy gyalogos út kösse össze őket.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Komp {from} és {to} között, szándékosan elfogadva. Az ideje külön áll a gyaloglási időtől.',
|
||||
'tours.walk.ferry.accept': 'Komp elfogadása',
|
||||
'tours.walk.ferry.show': 'Átkelés mutatása',
|
||||
'tours.walk.ferry.selectStop': '{number}. megálló kiválasztása',
|
||||
'tours.walk.ferry.time': '{time} hajóval',
|
||||
'tours.walk.ferry.timeUnknown': 'A hajóidő ismeretlen',
|
||||
'tours.walk.ferry.timeHint': 'Ahogy az útvonaltervező megadja az átkeléshez. Nem része a gyaloglási időnek.',
|
||||
'tours.walk.ferry.field': 'Komp',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'A kompidőről',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'A hajós átkelések ideje, ahogy az útvonaltervező megadja. Külön áll a gyaloglási időtől, és nincs benne a tervezett összidőben.',
|
||||
'tours.walk.ferry.leg': 'Kompos átkelés',
|
||||
'tours.walk.ferry.legInfo': 'Hajóval átkelve, nem gyalog. Az ideje nincs a gyaloglási időben.',
|
||||
'tours.walk.ferry.release': 'Újratervezés gyalog',
|
||||
'tours.walk.stationsUnread':
|
||||
'A séta megállóit nem sikerült betölteni. Nyisd meg újra internetkapcsolattal, hogy lásd és kipipálhasd őket.',
|
||||
'tours.walk.progress': '{total} megállóból {visited} meglátogatva',
|
||||
|
||||
@@ -762,6 +762,29 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Dihitung',
|
||||
'tours.walk.stations': 'Titik singgah rute',
|
||||
'tours.walk.stationNumbered': 'Titik {number}',
|
||||
'tours.walk.ferry.gap': 'Tidak ada jalan yang menghubungkan {from} dan {to}, baik jalan kaki maupun feri.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Rute yang direncanakan sebelumnya tetap di peta, dibuat pudar, sampai jalan ditemukan. Pindahkan salah satu dari dua perhentian.',
|
||||
'tours.walk.ferry.pending':
|
||||
'Tidak ada jalan kaki antara {from} dan {to}: di sini perute menyeberangi air dengan feri.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Penyeberangan tidak dihitung sebagai waktu jalan kaki. Untuk menyimpan, ambil ferinya atau pindahkan perhentian agar jalan kaki menghubungkannya.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Feri dari {from} ke {to}, diambil dengan sengaja. Waktunya dipisahkan dari waktu jalan kaki.',
|
||||
'tours.walk.ferry.accept': 'Ambil feri',
|
||||
'tours.walk.ferry.show': 'Tampilkan penyeberangan',
|
||||
'tours.walk.ferry.selectStop': 'Pilih perhentian {number}',
|
||||
'tours.walk.ferry.time': '{time} dengan perahu',
|
||||
'tours.walk.ferry.timeUnknown': 'Waktu perahu tidak diketahui',
|
||||
'tours.walk.ferry.timeHint':
|
||||
'Seperti yang diberikan perute untuk penyeberangan. Ini bukan bagian dari waktu jalan kaki.',
|
||||
'tours.walk.ferry.field': 'Feri',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Tentang waktu feri',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Waktu penyeberangan dengan perahu, seperti yang diberikan perute. Dipisahkan dari waktu jalan kaki dan tidak termasuk total yang direncanakan.',
|
||||
'tours.walk.ferry.leg': 'Penyeberangan feri',
|
||||
'tours.walk.ferry.legInfo': 'Diseberangi dengan perahu, bukan berjalan. Waktunya tidak termasuk waktu jalan kaki.',
|
||||
'tours.walk.ferry.release': 'Rencanakan jalan kaki lagi',
|
||||
'tours.walk.stationsUnread':
|
||||
'Titik singgah rute ini tidak dapat dimuat. Buka lagi saat online untuk melihat dan mencentangnya.',
|
||||
'tours.walk.progress': '{visited} dari {total} dikunjungi',
|
||||
|
||||
@@ -769,6 +769,28 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Calcolato',
|
||||
'tours.walk.stations': 'Tappe del percorso',
|
||||
'tours.walk.stationNumbered': 'Tappa {number}',
|
||||
'tours.walk.ferry.gap': 'Nessun percorso unisce {from} e {to}, né a piedi né in traghetto.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Il percorso pianificato prima resta sulla mappa, in grigio, finché non si trova una via. Sposta una delle due tappe.',
|
||||
'tours.walk.ferry.pending':
|
||||
"Non c'è un percorso a piedi tra {from} e {to}: qui il calcolatore attraversa l'acqua in traghetto.",
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'La traversata non conta come tempo a piedi. Per salvare, accetta il traghetto o sposta una tappa così che un percorso a piedi le unisca.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Traghetto da {from} a {to}, accettato di proposito. Il suo tempo resta separato dal tempo a piedi.',
|
||||
'tours.walk.ferry.accept': 'Accetta traghetto',
|
||||
'tours.walk.ferry.show': 'Mostra traversata',
|
||||
'tours.walk.ferry.selectStop': 'Scegli la tappa {number}',
|
||||
'tours.walk.ferry.time': '{time} in barca',
|
||||
'tours.walk.ferry.timeUnknown': 'Tempo in barca sconosciuto',
|
||||
'tours.walk.ferry.timeHint': 'Come lo indica il calcolatore per la traversata. Non fa parte del tempo a piedi.',
|
||||
'tours.walk.ferry.field': 'Traghetto',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Sul tempo in traghetto',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Il tempo delle traversate in barca, come lo indica il calcolatore. Resta separato dal tempo a piedi e non è nel totale pianificato.',
|
||||
'tours.walk.ferry.leg': 'Traversata in traghetto',
|
||||
'tours.walk.ferry.legInfo': 'Attraversato in barca, non a piedi. Il suo tempo non è nel tempo a piedi.',
|
||||
'tours.walk.ferry.release': 'Ripianifica a piedi',
|
||||
'tours.walk.stationsUnread':
|
||||
'Non è stato possibile caricare le tappe di questo percorso. Riaprilo con una connessione per vederle e spuntarle.',
|
||||
'tours.walk.progress': '{visited} su {total} visitate',
|
||||
|
||||
@@ -742,6 +742,26 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': '計算値',
|
||||
'tours.walk.stations': '立ち寄り先',
|
||||
'tours.walk.stationNumbered': '立ち寄り先 {number}',
|
||||
'tours.walk.ferry.gap': '{from} と {to} を結ぶ道は、徒歩でもフェリーでもありません。',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'以前に計画したルートは、道が見つかるまで地図上に薄く残ります。2つの立ち寄り先のどちらかを動かしてください。',
|
||||
'tours.walk.ferry.pending': '{from} と {to} の間に徒歩の道はありません。ここではルート検索がフェリーで水を渡ります。',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'渡航は歩行時間に数えません。保存するには、フェリーを採用するか、徒歩の道でつながるよう立ち寄り先を動かしてください。',
|
||||
'tours.walk.ferry.accepted': '{from} から {to} へのフェリー、意図して採用済み。その時間は歩行時間とは別です。',
|
||||
'tours.walk.ferry.accept': 'フェリーを採用',
|
||||
'tours.walk.ferry.show': '渡航を表示',
|
||||
'tours.walk.ferry.selectStop': '立ち寄り先 {number} を選択',
|
||||
'tours.walk.ferry.time': '船で {time}',
|
||||
'tours.walk.ferry.timeUnknown': '船の時間は不明',
|
||||
'tours.walk.ferry.timeHint': 'ルート検索が渡航について示す時間です。歩行時間には含まれません。',
|
||||
'tours.walk.ferry.field': 'フェリー',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'フェリーの時間について',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'船での渡航にかかる時間で、ルート検索が示すものです。歩行時間とは別で、予定合計にも含まれません。',
|
||||
'tours.walk.ferry.leg': 'フェリーで渡航',
|
||||
'tours.walk.ferry.legInfo': '歩かずに船で渡ります。その時間は歩行時間に含まれません。',
|
||||
'tours.walk.ferry.release': 'もう一度徒歩で計画',
|
||||
'tours.walk.stationsUnread':
|
||||
'この街歩きの立ち寄り先を読み込めませんでした。オンラインの状態で開き直すと、表示してチェックできます。',
|
||||
'tours.walk.progress': '{total} 件中 {visited} 件訪問済み',
|
||||
|
||||
@@ -736,6 +736,26 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': '계산값',
|
||||
'tours.walk.stations': '산책 정류지',
|
||||
'tours.walk.stationNumbered': '정류지 {number}',
|
||||
'tours.walk.ferry.gap': '{from}와 {to}를 잇는 길이 도보로도 페리로도 없습니다.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'이전에 계획한 경로는 길을 찾을 때까지 지도에 흐리게 남습니다. 두 정류지 중 하나를 옮기세요.',
|
||||
'tours.walk.ferry.pending': '{from}와 {to} 사이에 도보 길이 없습니다: 여기서는 경로 탐색이 페리로 물을 건넙니다.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'횡단은 도보 시간에 포함되지 않습니다. 저장하려면 페리를 채택하거나 도보 길이 이어지도록 정류지를 옮기세요.',
|
||||
'tours.walk.ferry.accepted': '{from}에서 {to}까지의 페리, 의도적으로 채택됨. 그 시간은 도보 시간과 따로 둡니다.',
|
||||
'tours.walk.ferry.accept': '페리 채택',
|
||||
'tours.walk.ferry.show': '횡단 보기',
|
||||
'tours.walk.ferry.selectStop': '정류지 {number} 선택',
|
||||
'tours.walk.ferry.time': '배로 {time}',
|
||||
'tours.walk.ferry.timeUnknown': '배 시간 알 수 없음',
|
||||
'tours.walk.ferry.timeHint': '경로 탐색이 횡단에 대해 알려 준 시간입니다. 도보 시간에 포함되지 않습니다.',
|
||||
'tours.walk.ferry.field': '페리',
|
||||
'tours.walk.ferry.fieldInfoLabel': '페리 시간 안내',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'배로 건너는 데 걸리는 시간으로, 경로 탐색이 알려 준 값입니다. 도보 시간과 따로 두며 계획 총계에도 들어가지 않습니다.',
|
||||
'tours.walk.ferry.leg': '페리 횡단',
|
||||
'tours.walk.ferry.legInfo': '걷지 않고 배로 건넙니다. 그 시간은 도보 시간에 없습니다.',
|
||||
'tours.walk.ferry.release': '다시 도보로 계획',
|
||||
'tours.walk.stationsUnread':
|
||||
'이 산책의 정류지를 불러오지 못했습니다. 온라인 상태에서 다시 열면 정류지를 보고 체크할 수 있습니다.',
|
||||
'tours.walk.progress': '{total}곳 중 {visited}곳 방문',
|
||||
|
||||
@@ -767,6 +767,28 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Berekend',
|
||||
'tours.walk.stations': 'Haltes van de wandeling',
|
||||
'tours.walk.stationNumbered': 'Halte {number}',
|
||||
'tours.walk.ferry.gap': 'Geen weg verbindt {from} en {to}, niet te voet en niet met een veerpont.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'De eerder geplande route blijft grijs op de kaart staan tot er een weg is gevonden. Verplaats een van de twee haltes.',
|
||||
'tours.walk.ferry.pending':
|
||||
'Er is geen looproute tussen {from} en {to}: de routeplanner steekt het water hier over met een veerpont.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'De overtocht telt niet als looptijd. Neem de veerpont over of verplaats een halte zodat een looproute ze verbindt om op te slaan.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Veerpont van {from} naar {to}, bewust overgenomen. De tijd ervan staat los van de looptijd.',
|
||||
'tours.walk.ferry.accept': 'Veerpont overnemen',
|
||||
'tours.walk.ferry.show': 'Overtocht tonen',
|
||||
'tours.walk.ferry.selectStop': 'Halte {number} kiezen',
|
||||
'tours.walk.ferry.time': '{time} per boot',
|
||||
'tours.walk.ferry.timeUnknown': 'Boottijd onbekend',
|
||||
'tours.walk.ferry.timeHint': 'Zoals de routeplanner die voor de overtocht geeft. Hoort niet bij de looptijd.',
|
||||
'tours.walk.ferry.field': 'Veerpont',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Over de veerponttijd',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'De tijd van de overtochten per boot, zoals de routeplanner die geeft. Staat los van de looptijd en zit niet in het geplande totaal.',
|
||||
'tours.walk.ferry.leg': 'Overtocht met veerpont',
|
||||
'tours.walk.ferry.legInfo': 'Per boot overgestoken, niet gelopen. De tijd zit niet in de looptijd.',
|
||||
'tours.walk.ferry.release': 'Opnieuw te voet plannen',
|
||||
'tours.walk.stationsUnread':
|
||||
'De haltes van deze wandeling konden niet worden geladen. Open hem opnieuw met verbinding om ze te zien en af te vinken.',
|
||||
'tours.walk.progress': '{visited} van {total} bezocht',
|
||||
|
||||
@@ -772,6 +772,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Obliczono',
|
||||
'tours.walk.stations': 'Przystanki trasy',
|
||||
'tours.walk.stationNumbered': 'Przystanek {number}',
|
||||
'tours.walk.ferry.gap': 'Żadna droga nie łączy {from} i {to}, ani pieszo, ani promem.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Wcześniej zaplanowana trasa zostaje na mapie, wyszarzona, dopóki nie znajdzie się droga. Przesuń jeden z dwóch przystanków.',
|
||||
'tours.walk.ferry.pending':
|
||||
'Między {from} a {to} nie ma drogi pieszej: wyznaczanie trasy przeprawia się tu promem przez wodę.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Przeprawa nie liczy się jako czas marszu. Aby zapisać, przyjmij prom albo przesuń przystanek, żeby łączyła je droga piesza.',
|
||||
'tours.walk.ferry.accepted': 'Prom z {from} do {to}, przyjęty celowo. Jego czas jest oddzielony od czasu marszu.',
|
||||
'tours.walk.ferry.accept': 'Przyjmij prom',
|
||||
'tours.walk.ferry.show': 'Pokaż przeprawę',
|
||||
'tours.walk.ferry.selectStop': 'Wybierz przystanek {number}',
|
||||
'tours.walk.ferry.time': '{time} łodzią',
|
||||
'tours.walk.ferry.timeUnknown': 'Czas łodzią nieznany',
|
||||
'tours.walk.ferry.timeHint': 'Tak, jak podaje go wyznaczanie trasy dla przeprawy. Nie jest częścią czasu marszu.',
|
||||
'tours.walk.ferry.field': 'Prom',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'O czasie promu',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Czas przepraw łodzią, tak jak podaje go wyznaczanie trasy. Jest oddzielony od czasu marszu i nie wchodzi do planowanej sumy.',
|
||||
'tours.walk.ferry.leg': 'Przeprawa promem',
|
||||
'tours.walk.ferry.legInfo': 'Przepłynięte łodzią, nie przebyte pieszo. Jego czas nie jest w czasie marszu.',
|
||||
'tours.walk.ferry.release': 'Zaplanuj znów pieszo',
|
||||
'tours.walk.stationsUnread':
|
||||
'Nie udało się wczytać przystanków tej trasy. Otwórz ją ponownie z połączeniem, aby je zobaczyć i odhaczyć.',
|
||||
'tours.walk.progress': 'Odwiedzono {visited} z {total}',
|
||||
|
||||
@@ -774,6 +774,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Расчёт',
|
||||
'tours.walk.stations': 'Остановки прогулки',
|
||||
'tours.walk.stationNumbered': 'Остановка {number}',
|
||||
'tours.walk.ferry.gap': 'Ни пешком, ни на пароме нет пути между {from} и {to}.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Ранее построенный маршрут остаётся на карте серым, пока путь не найдётся. Передвиньте одну из двух остановок.',
|
||||
'tours.walk.ferry.pending': 'Между {from} и {to} нет пешего пути: здесь маршрутизатор пересекает воду на пароме.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Переправа не считается временем ходьбы. Чтобы сохранить, примите паром или передвиньте остановку, чтобы их соединял пеший путь.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Паром от {from} до {to}, принят намеренно. Его время учитывается отдельно от времени ходьбы.',
|
||||
'tours.walk.ferry.accept': 'Принять паром',
|
||||
'tours.walk.ferry.show': 'Показать переправу',
|
||||
'tours.walk.ferry.selectStop': 'Выбрать остановку {number}',
|
||||
'tours.walk.ferry.time': '{time} на лодке',
|
||||
'tours.walk.ferry.timeUnknown': 'Время на лодке неизвестно',
|
||||
'tours.walk.ferry.timeHint': 'Как его даёт маршрутизатор для переправы. Не входит во время ходьбы.',
|
||||
'tours.walk.ferry.field': 'Паром',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'О времени на пароме',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Время переправ на лодке, как его даёт маршрутизатор. Учитывается отдельно от времени ходьбы и не входит в плановый итог.',
|
||||
'tours.walk.ferry.leg': 'Переправа на пароме',
|
||||
'tours.walk.ferry.legInfo': 'Пересечено на лодке, не пешком. Его время не входит во время ходьбы.',
|
||||
'tours.walk.ferry.release': 'Снова спланировать пешком',
|
||||
'tours.walk.stationsUnread':
|
||||
'Не удалось загрузить остановки этой прогулки. Открой её снова при подключении к сети, чтобы увидеть и отметить их.',
|
||||
'tours.walk.progress': 'Посещено {visited} из {total}',
|
||||
|
||||
@@ -753,6 +753,26 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Vypočítané',
|
||||
'tours.walk.stations': 'Zastávky prechádzky',
|
||||
'tours.walk.stationNumbered': 'Zastávka {number}',
|
||||
'tours.walk.ferry.gap': 'Medzi {from} a {to} nevedie žiadna cesta, pešo ani trajektom.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Predtým naplánovaná trasa zostane na mape sivá, kým sa nenájde cesta. Presuň jednu z oboch zastávok.',
|
||||
'tours.walk.ferry.pending': 'Medzi {from} a {to} nevedie žiadna pešia cesta: plánovač tu prechádza vodu trajektom.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Prevoz sa nepočíta do času chôdze. Na uloženie prevezmi trajekt alebo presuň zastávku, aby ich spojila pešia cesta.',
|
||||
'tours.walk.ferry.accepted': 'Trajekt z {from} do {to}, prevzatý zámerne. Jeho čas je oddelený od času chôdze.',
|
||||
'tours.walk.ferry.accept': 'Prevziať trajekt',
|
||||
'tours.walk.ferry.show': 'Ukázať prevoz',
|
||||
'tours.walk.ferry.selectStop': 'Vybrať zastávku {number}',
|
||||
'tours.walk.ferry.time': '{time} loďou',
|
||||
'tours.walk.ferry.timeUnknown': 'Čas loďou neznámy',
|
||||
'tours.walk.ferry.timeHint': 'Ako ho plánovač uvádza pre prevoz. Nie je súčasťou času chôdze.',
|
||||
'tours.walk.ferry.field': 'Trajekt',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'O čase trajektu',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Čas prevozov loďou, ako ho uvádza plánovač. Je oddelený od času chôdze a nie je v plánovanom súčte.',
|
||||
'tours.walk.ferry.leg': 'Prevoz trajektom',
|
||||
'tours.walk.ferry.legInfo': 'Preplávané loďou, nie prejdené. Jeho čas nie je v čase chôdze.',
|
||||
'tours.walk.ferry.release': 'Znova naplánovať pešo',
|
||||
'tours.walk.stationsUnread':
|
||||
'Zastávky tejto prechádzky sa nepodarilo načítať. Otvor ju znova s pripojením, potom ich uvidíš a pôjde ich odškrtnúť.',
|
||||
'tours.walk.progress': 'Navštívené {visited} z {total}',
|
||||
|
||||
@@ -750,6 +750,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Beräknad',
|
||||
'tours.walk.stations': 'Promenadens stopp',
|
||||
'tours.walk.stationNumbered': 'Stopp {number}',
|
||||
'tours.walk.ferry.gap': 'Ingen väg förbinder {from} och {to}, varken till fots eller med färja.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Den tidigare planerade rutten ligger kvar gråtonad på kartan tills en väg hittas. Flytta ett av de två stoppen.',
|
||||
'tours.walk.ferry.pending':
|
||||
'Det finns ingen gångväg mellan {from} och {to}: här korsar ruttplaneraren vattnet med färja.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Överfarten räknas inte som gångtid. För att spara, ta färjan eller flytta ett stopp så att en gångväg förbinder dem.',
|
||||
'tours.walk.ferry.accepted': 'Färja från {from} till {to}, tagen med avsikt. Dess tid hålls skild från gångtiden.',
|
||||
'tours.walk.ferry.accept': 'Ta färjan',
|
||||
'tours.walk.ferry.show': 'Visa överfarten',
|
||||
'tours.walk.ferry.selectStop': 'Välj stopp {number}',
|
||||
'tours.walk.ferry.time': '{time} med båt',
|
||||
'tours.walk.ferry.timeUnknown': 'Båttid okänd',
|
||||
'tours.walk.ferry.timeHint': 'Som ruttplaneraren anger den för överfarten. Den ingår inte i gångtiden.',
|
||||
'tours.walk.ferry.field': 'Färja',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Om färjetiden',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Tiden som överfarterna med båt tar, som ruttplaneraren anger den. Den hålls skild från gångtiden och ingår inte i den planerade summan.',
|
||||
'tours.walk.ferry.leg': 'Överfart med färja',
|
||||
'tours.walk.ferry.legInfo': 'Korsat med båt, inte gånget. Tiden ingår inte i gångtiden.',
|
||||
'tours.walk.ferry.release': 'Planera till fots igen',
|
||||
'tours.walk.stationsUnread':
|
||||
'Promenadens stopp kunde inte läsas in. Öppna den igen med uppkoppling för att se dem och bocka av dem.',
|
||||
'tours.walk.progress': '{visited} av {total} besökta',
|
||||
|
||||
@@ -724,6 +724,26 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'ค่าคำนวณ',
|
||||
'tours.walk.stations': 'จุดแวะของทริป',
|
||||
'tours.walk.stationNumbered': 'จุดแวะที่ {number}',
|
||||
'tours.walk.ferry.gap': 'ไม่มีทางเชื่อม {from} กับ {to} ทั้งเดินเท้าและเรือข้ามฟาก',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'เส้นทางที่วางไว้ก่อนหน้ายังอยู่บนแผนที่แบบจาง จนกว่าจะพบทาง ลองย้ายจุดแวะจุดใดจุดหนึ่งในสองจุดนี้',
|
||||
'tours.walk.ferry.pending': 'ไม่มีทางเดินเท้าระหว่าง {from} กับ {to}: ตรงนี้ตัวหาเส้นทางข้ามน้ำด้วยเรือข้ามฟาก',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'การข้ามฟากไม่นับเป็นเวลาเดิน หากจะบันทึก ให้รับเรือข้ามฟากนี้ หรือย้ายจุดแวะให้มีทางเดินเท้าเชื่อมกัน',
|
||||
'tours.walk.ferry.accepted': 'เรือข้ามฟากจาก {from} ไป {to} รับไว้โดยตั้งใจ เวลาของเรือแยกจากเวลาเดิน',
|
||||
'tours.walk.ferry.accept': 'รับเรือข้ามฟาก',
|
||||
'tours.walk.ferry.show': 'แสดงการข้ามฟาก',
|
||||
'tours.walk.ferry.selectStop': 'เลือกจุดแวะ {number}',
|
||||
'tours.walk.ferry.time': 'ทางเรือ {time}',
|
||||
'tours.walk.ferry.timeUnknown': 'ไม่ทราบเวลาทางเรือ',
|
||||
'tours.walk.ferry.timeHint': 'ตามที่ตัวหาเส้นทางให้ไว้สำหรับการข้ามฟาก ไม่ได้เป็นส่วนหนึ่งของเวลาเดิน',
|
||||
'tours.walk.ferry.field': 'เรือข้ามฟาก',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'เกี่ยวกับเวลาเรือข้ามฟาก',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'เวลาที่ใช้ข้ามฟากทางเรือตามที่ตัวหาเส้นทางให้ไว้ แยกจากเวลาเดินและไม่รวมในเวลารวมที่วางแผน',
|
||||
'tours.walk.ferry.leg': 'ข้ามฟากด้วยเรือ',
|
||||
'tours.walk.ferry.legInfo': 'ข้ามด้วยเรือ ไม่ได้เดิน เวลาของมันไม่รวมในเวลาเดิน',
|
||||
'tours.walk.ferry.release': 'วางแผนเดินเท้าอีกครั้ง',
|
||||
'tours.walk.stationsUnread': 'โหลดจุดแวะของทริปนี้ไม่ได้ เปิดทริปอีกครั้งขณะออนไลน์เพื่อดูและติ๊กจุดแวะ',
|
||||
'tours.walk.progress': 'แวะแล้ว {visited} จาก {total}',
|
||||
'tours.walk.remaining.pill': 'เหลือเดินอีก {time}',
|
||||
|
||||
@@ -20,7 +20,7 @@ const toursModules = import.meta.glob<{ default: TranslationStrings }>('./*/tour
|
||||
const TOUR_DOMAINS: { file: string; generalKeyCount: number; modules: DomainModules }[] = [
|
||||
{
|
||||
file: 'tours',
|
||||
generalKeyCount: 1318,
|
||||
generalKeyCount: 1335,
|
||||
modules: toursModules,
|
||||
},
|
||||
{
|
||||
|
||||
@@ -754,6 +754,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Hesaplanan',
|
||||
'tours.walk.stations': 'Yürüyüşün durakları',
|
||||
'tours.walk.stationNumbered': 'Durak {number}',
|
||||
'tours.walk.ferry.gap': '{from} ile {to} arasında ne yürüyerek ne de feribotla bir yol var.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Daha önce planlanan rota, bir yol bulunana kadar haritada soluk kalır. İki duraktan birini taşı.',
|
||||
'tours.walk.ferry.pending': '{from} ile {to} arasında yürüyüş yolu yok: yönlendirici burada suyu feribotla geçiyor.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Geçiş yürüyüş süresi sayılmaz. Kaydetmek için feribotu kabul et ya da bir durağı taşı, böylece bir yürüyüş yolu onları bağlasın.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'{from} noktasından {to} noktasına feribot, bilerek kabul edildi. Süresi yürüyüş süresinden ayrı tutulur.',
|
||||
'tours.walk.ferry.accept': 'Feribotu kabul et',
|
||||
'tours.walk.ferry.show': 'Geçişi göster',
|
||||
'tours.walk.ferry.selectStop': '{number}. durağı seç',
|
||||
'tours.walk.ferry.time': 'Tekneyle {time}',
|
||||
'tours.walk.ferry.timeUnknown': 'Tekne süresi bilinmiyor',
|
||||
'tours.walk.ferry.timeHint': 'Yönlendiricinin geçiş için verdiği gibi. Yürüyüş süresinin parçası değildir.',
|
||||
'tours.walk.ferry.field': 'Feribot',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Feribot süresi hakkında',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Tekneyle geçişlerin süresi, yönlendiricinin verdiği gibi. Yürüyüş süresinden ayrı tutulur ve planlanan toplamda yer almaz.',
|
||||
'tours.walk.ferry.leg': 'Feribotla geçiş',
|
||||
'tours.walk.ferry.legInfo': 'Yürünmedi, tekneyle geçildi. Süresi yürüyüş süresinde yok.',
|
||||
'tours.walk.ferry.release': 'Yeniden yürüyerek planla',
|
||||
'tours.walk.stationsUnread':
|
||||
'Bu yürüyüşün durakları yüklenemedi. Görmek ve işaretlemek için yürüyüşü bağlantı varken yeniden aç.',
|
||||
'tours.walk.progress': '{total} duraktan {visited} ziyaret edildi',
|
||||
|
||||
@@ -768,6 +768,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Розрахунок',
|
||||
'tours.walk.stations': 'Зупинки прогулянки',
|
||||
'tours.walk.stationNumbered': 'Зупинка {number}',
|
||||
'tours.walk.ferry.gap': 'Ні пішки, ні поромом немає шляху між {from} і {to}.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Раніше побудований маршрут лишається на мапі сірим, доки шлях не знайдеться. Пересуньте одну з двох зупинок.',
|
||||
'tours.walk.ferry.pending': 'Між {from} і {to} немає пішого шляху: тут маршрутизатор перетинає воду поромом.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Переправа не рахується як час ходьби. Щоб зберегти, прийміть пором або пересуньте зупинку, щоб їх з’єднував піший шлях.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Пором від {from} до {to}, прийнятий навмисно. Його час рахується окремо від часу ходьби.',
|
||||
'tours.walk.ferry.accept': 'Прийняти пором',
|
||||
'tours.walk.ferry.show': 'Показати переправу',
|
||||
'tours.walk.ferry.selectStop': 'Вибрати зупинку {number}',
|
||||
'tours.walk.ferry.time': '{time} човном',
|
||||
'tours.walk.ferry.timeUnknown': 'Час човном невідомий',
|
||||
'tours.walk.ferry.timeHint': 'Як його дає маршрутизатор для переправи. Не входить у час ходьби.',
|
||||
'tours.walk.ferry.field': 'Пором',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Про час на поромі',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Час переправ човном, як його дає маршрутизатор. Рахується окремо від часу ходьби і не входить до планового підсумку.',
|
||||
'tours.walk.ferry.leg': 'Переправа поромом',
|
||||
'tours.walk.ferry.legInfo': 'Перетнуто човном, не пішки. Його час не входить у час ходьби.',
|
||||
'tours.walk.ferry.release': 'Знову спланувати пішки',
|
||||
'tours.walk.stationsUnread':
|
||||
'Не вдалося завантажити зупинки цієї прогулянки. Відкрий її знову з мережею, щоб побачити й відмітити їх.',
|
||||
'tours.walk.progress': 'Відвідано {visited} з {total}',
|
||||
|
||||
@@ -752,6 +752,27 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': 'Đã tính',
|
||||
'tours.walk.stations': 'Các điểm dừng',
|
||||
'tours.walk.stationNumbered': 'Điểm dừng {number}',
|
||||
'tours.walk.ferry.gap': 'Không có đường nào nối {from} và {to}, cả đi bộ lẫn phà.',
|
||||
'tours.walk.ferry.gapHint':
|
||||
'Lộ trình đã lập trước đó vẫn ở trên bản đồ, được làm mờ, cho đến khi tìm được đường. Hãy dời một trong hai điểm dừng.',
|
||||
'tours.walk.ferry.pending': 'Không có đường đi bộ giữa {from} và {to}: ở đây bộ tìm đường qua nước bằng phà.',
|
||||
'tours.walk.ferry.pendingHint':
|
||||
'Chuyến qua sông không tính là thời gian đi bộ. Để lưu, hãy nhận chuyến phà hoặc dời một điểm dừng để có đường đi bộ nối chúng.',
|
||||
'tours.walk.ferry.accepted':
|
||||
'Phà từ {from} đến {to}, đã nhận có chủ ý. Thời gian của nó được tách khỏi thời gian đi bộ.',
|
||||
'tours.walk.ferry.accept': 'Nhận phà',
|
||||
'tours.walk.ferry.show': 'Hiện chuyến qua',
|
||||
'tours.walk.ferry.selectStop': 'Chọn điểm dừng {number}',
|
||||
'tours.walk.ferry.time': '{time} bằng thuyền',
|
||||
'tours.walk.ferry.timeUnknown': 'Không rõ thời gian thuyền',
|
||||
'tours.walk.ferry.timeHint': 'Như bộ tìm đường đưa ra cho chuyến qua. Không thuộc thời gian đi bộ.',
|
||||
'tours.walk.ferry.field': 'Phà',
|
||||
'tours.walk.ferry.fieldInfoLabel': 'Về thời gian đi phà',
|
||||
'tours.walk.ferry.fieldInfo':
|
||||
'Thời gian các chuyến qua bằng thuyền, như bộ tìm đường đưa ra. Được tách khỏi thời gian đi bộ và không nằm trong tổng đã lập.',
|
||||
'tours.walk.ferry.leg': 'Qua bằng phà',
|
||||
'tours.walk.ferry.legInfo': 'Qua bằng thuyền, không đi bộ. Thời gian không nằm trong thời gian đi bộ.',
|
||||
'tours.walk.ferry.release': 'Lập lại theo đi bộ',
|
||||
'tours.walk.stationsUnread':
|
||||
'Không tải được các điểm dừng của lộ trình này. Hãy mở lại khi có kết nối để xem và đánh dấu chúng.',
|
||||
'tours.walk.progress': 'Đã ghé {visited}/{total}',
|
||||
|
||||
@@ -700,6 +700,23 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': '計算值',
|
||||
'tours.walk.stations': '漫步站點',
|
||||
'tours.walk.stationNumbered': '第 {number} 站',
|
||||
'tours.walk.ferry.gap': '{from} 與 {to} 之間沒有任何路可通,步行和渡輪都不行。',
|
||||
'tours.walk.ferry.gapHint': '之前規劃的路線會以灰色留在地圖上,直到找到路為止。請移動這兩個站點之一。',
|
||||
'tours.walk.ferry.pending': '{from} 與 {to} 之間沒有步行道路:路線規劃在這裡搭渡輪過水。',
|
||||
'tours.walk.ferry.pendingHint': '渡船不計入步行時間。要儲存,請採用渡輪,或移動一個站點,讓步行道路連通它們。',
|
||||
'tours.walk.ferry.accepted': '從 {from} 到 {to} 的渡輪,已有意採用。其時間與步行時間分開。',
|
||||
'tours.walk.ferry.accept': '採用渡輪',
|
||||
'tours.walk.ferry.show': '顯示渡船',
|
||||
'tours.walk.ferry.selectStop': '選擇站點 {number}',
|
||||
'tours.walk.ferry.time': '搭船 {time}',
|
||||
'tours.walk.ferry.timeUnknown': '搭船時間未知',
|
||||
'tours.walk.ferry.timeHint': '為路線規劃給出的渡船時間。不屬於步行時間。',
|
||||
'tours.walk.ferry.field': '渡輪',
|
||||
'tours.walk.ferry.fieldInfoLabel': '關於渡輪時間',
|
||||
'tours.walk.ferry.fieldInfo': '搭船過水所需的時間,由路線規劃給出。與步行時間分開,也不計入計畫總時長。',
|
||||
'tours.walk.ferry.leg': '渡輪過水',
|
||||
'tours.walk.ferry.legInfo': '搭船而過,並非步行。其時間不計入步行時間。',
|
||||
'tours.walk.ferry.release': '重新按步行規劃',
|
||||
'tours.walk.stationsUnread': '無法載入這次漫步的站點。請在連網時重新開啟,即可查看並勾選。',
|
||||
'tours.walk.progress': '已到訪 {visited}/{total}',
|
||||
'tours.walk.remaining.pill': '步行還剩 {time}',
|
||||
|
||||
@@ -701,6 +701,23 @@ const tours: TranslationStrings = {
|
||||
'tours.walk.totalComputed': '计算值',
|
||||
'tours.walk.stations': '漫步站点',
|
||||
'tours.walk.stationNumbered': '第 {number} 站',
|
||||
'tours.walk.ferry.gap': '{from} 与 {to} 之间没有任何路可通,步行和渡轮都不行。',
|
||||
'tours.walk.ferry.gapHint': '之前规划的路线会以灰色留在地图上,直到找到路为止。请移动这两个站点之一。',
|
||||
'tours.walk.ferry.pending': '{from} 与 {to} 之间没有步行道路:路线规划在这里乘渡轮过水。',
|
||||
'tours.walk.ferry.pendingHint': '渡船不计入步行时间。要保存,请采用渡轮,或移动一个站点,让步行道路连通它们。',
|
||||
'tours.walk.ferry.accepted': '从 {from} 到 {to} 的渡轮,已有意采用。其时间与步行时间分开。',
|
||||
'tours.walk.ferry.accept': '采用渡轮',
|
||||
'tours.walk.ferry.show': '显示渡船',
|
||||
'tours.walk.ferry.selectStop': '选择站点 {number}',
|
||||
'tours.walk.ferry.time': '乘船 {time}',
|
||||
'tours.walk.ferry.timeUnknown': '乘船时间未知',
|
||||
'tours.walk.ferry.timeHint': '为路线规划给出的渡船时间。不属于步行时间。',
|
||||
'tours.walk.ferry.field': '渡轮',
|
||||
'tours.walk.ferry.fieldInfoLabel': '关于渡轮时间',
|
||||
'tours.walk.ferry.fieldInfo': '乘船过水所需的时间,由路线规划给出。与步行时间分开,也不计入计划总时长。',
|
||||
'tours.walk.ferry.leg': '渡轮过水',
|
||||
'tours.walk.ferry.legInfo': '乘船而过,并非步行。其时间不计入步行时间。',
|
||||
'tours.walk.ferry.release': '重新按步行规划',
|
||||
'tours.walk.stationsUnread': '无法加载这次漫步的站点。请在联网时重新打开,即可查看并勾选。',
|
||||
'tours.walk.progress': '已到访 {visited}/{total}',
|
||||
'tours.walk.remaining.pill': '步行还剩 {time}',
|
||||
|
||||
@@ -78,6 +78,7 @@ export * from './tours/tour-walk-briefing.schema';
|
||||
export * from './tours/tour-change.schema';
|
||||
export * from './tours/walk-hours';
|
||||
export * from './tours/walk-remaining';
|
||||
export * from './tours/walk-ferry';
|
||||
export * from './tours/tours.metrics';
|
||||
export * from './tours/tour-gpx-import.schema';
|
||||
export * from './tours/paddle-plan.schema';
|
||||
|
||||
@@ -202,6 +202,47 @@ describe('Tours fixed legs', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('Tours ferry legs (CW-12)', () => {
|
||||
const ferry = (crossing: [number, number], minutes: number | null = 7) => ({
|
||||
kind: 'ferry' as const,
|
||||
geometry: [
|
||||
[48, 11],
|
||||
[48.004, 11.008],
|
||||
[48.006, 11.012],
|
||||
[48.01, 11.02],
|
||||
] as [number, number][],
|
||||
crossing,
|
||||
minutes,
|
||||
walk_minutes: 2,
|
||||
});
|
||||
const withLeg = (leg: ReturnType<typeof ferry>, type: 'walk' | 'hike') => ({
|
||||
...baseRequest,
|
||||
tour_type: type,
|
||||
...(type === 'walk' ? { max_hiking_difficulty: null } : {}),
|
||||
waypoints: [
|
||||
{ lat: 48, lng: 11, role: 'start' as const, sequence: 0, fixed_leg: leg },
|
||||
{ lat: 48.01, lng: 11.02, role: 'end' as const, sequence: 1 },
|
||||
],
|
||||
});
|
||||
|
||||
it('takes a crossing by boat on a city walk, with where on its leg the boat runs and its minutes apart', () => {
|
||||
expect(tourCreateRequestSchema.parse(withLeg(ferry([1, 2]), 'walk')).waypoints[0]?.fixed_leg).toEqual(
|
||||
ferry([1, 2]),
|
||||
);
|
||||
expect(tourCreateRequestSchema.parse(withLeg(ferry([1, 2], null), 'walk')).waypoints[0]?.fixed_leg).toMatchObject({
|
||||
minutes: null,
|
||||
});
|
||||
});
|
||||
|
||||
it('refuses a crossing on any other type, or one that does not run forwards between two points of its leg', () => {
|
||||
expect(() => tourCreateRequestSchema.parse(withLeg(ferry([1, 2]), 'hike'))).toThrow(
|
||||
/ferry leg belongs to a city walk/,
|
||||
);
|
||||
expect(() => tourCreateRequestSchema.parse(withLeg(ferry([2, 1]), 'walk'))).toThrow(/crossing runs between/);
|
||||
expect(() => tourCreateRequestSchema.parse(withLeg(ferry([1, 4]), 'walk'))).toThrow(/crossing runs between/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Tours free legs', () => {
|
||||
const free = (from: [number, number], to: [number, number]) => ({ kind: 'free' as const, geometry: [from, to] });
|
||||
|
||||
|
||||
@@ -366,6 +366,9 @@ export const TOUR_FIXED_LEG_END_TOLERANCE_M = 60;
|
||||
*/
|
||||
export const TOUR_WRITE_MAX_BYTES = 2 * 1024 * 1024;
|
||||
|
||||
/** The longest a ferry leg's crossing or its walk may take, a whole day. */
|
||||
const FERRY_LEG_MAX_MINUTES = 24 * 60;
|
||||
|
||||
const fixedLegGeometrySchema = z
|
||||
.array(z.tuple([z.number().finite().min(-90).max(90), z.number().finite().min(-180).max(180)]))
|
||||
.min(2)
|
||||
@@ -383,6 +386,9 @@ const fixedLegGeometrySchema = z
|
||||
* section (HOR-01) is a stretch of a signposted horse route from
|
||||
* OpenStreetMap, taken in the direction the rider chose, with the `horse=*`
|
||||
* tags its ways carried then; being on the route is no permission to ride it.
|
||||
* A ferry leg (CW-12) is a city walk's crossing by boat the travellers took on
|
||||
* purpose: the router's way from the station to the next, with where on it the
|
||||
* boat runs, so the boat's time never counts as walking.
|
||||
*/
|
||||
export const tourFixedLegSchema = z.discriminatedUnion('kind', [
|
||||
z.object({
|
||||
@@ -416,6 +422,16 @@ export const tourFixedLegSchema = z.discriminatedUnion('kind', [
|
||||
/** The `horse=*` tags along the section when it was taken, in metres per value. */
|
||||
access: horseAccessSharesSchema.optional(),
|
||||
}),
|
||||
z.object({
|
||||
kind: z.literal('ferry'),
|
||||
geometry: fixedLegGeometrySchema,
|
||||
/** The points of the line the boat leaves from and lands at, by their index. */
|
||||
crossing: z.tuple([z.number().int().nonnegative(), z.number().int().nonnegative()]),
|
||||
/** The crossing's time as the router gave it; null when it gave none. */
|
||||
minutes: z.number().int().min(0).max(FERRY_LEG_MAX_MINUTES).nullable(),
|
||||
/** The walk to the boat and on from it along this leg, by the router. */
|
||||
walk_minutes: z.number().int().min(0).max(FERRY_LEG_MAX_MINUTES),
|
||||
}),
|
||||
]);
|
||||
export type TourFixedLeg = z.infer<typeof tourFixedLegSchema>;
|
||||
export type TourFixedLegKind = TourFixedLeg['kind'];
|
||||
@@ -589,6 +605,13 @@ export const tourCreateRequestSchema = z
|
||||
message: `Waypoint ${index}'s fixed leg must run from it to the next waypoint`,
|
||||
});
|
||||
}
|
||||
if (leg.kind === 'ferry' && !(leg.crossing[0] < leg.crossing[1] && leg.crossing[1] < leg.geometry.length)) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ['waypoints', index, 'fixed_leg', 'crossing'],
|
||||
message: 'a crossing runs between two points of its leg, the first before the second',
|
||||
});
|
||||
}
|
||||
}
|
||||
const expectedRole: TourWaypointRole =
|
||||
index === 0 ? 'start' : index === value.waypoints.length - 1 ? 'end' : 'via';
|
||||
@@ -731,6 +754,9 @@ function tourTypeIssues(value: {
|
||||
kind === 'ferrata'
|
||||
)
|
||||
issues.push({ path: ['waypoints', index, 'fixed_leg'], message: `${named} has no via ferrata` });
|
||||
// CW-12: a crossing by boat is taken on a city walk only, where the way on foot has none.
|
||||
if (type !== 'walk' && kind === 'ferry')
|
||||
issues.push({ path: ['waypoints', index, 'fixed_leg'], message: 'a ferry leg belongs to a city walk' });
|
||||
if (type !== 'horse' && kind === 'horse_route')
|
||||
issues.push({
|
||||
path: ['waypoints', index, 'fixed_leg'],
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
import { boatSpansOf, ferryCrossingsOf } from './walk-ferry';
|
||||
import { stationShares } from './walk-hours';
|
||||
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
const line: Array<[number, number, number]> = [
|
||||
[45.4296, 12.3264, 2],
|
||||
[45.4291, 12.3266, 1],
|
||||
[45.4275, 12.3282, 1],
|
||||
[45.4268, 12.33, 2],
|
||||
];
|
||||
|
||||
describe('ferry legs of a city walk (CW-12)', () => {
|
||||
it('reads the boat part of each ferry leg, and nothing of any other leg', () => {
|
||||
expect(
|
||||
ferryCrossingsOf([
|
||||
{
|
||||
fixed_leg: {
|
||||
kind: 'free',
|
||||
geometry: [
|
||||
[1, 1],
|
||||
[2, 2],
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
fixed_leg: {
|
||||
kind: 'ferry',
|
||||
geometry: line.map(([lat, lng]): [number, number] => [lat, lng]),
|
||||
crossing: [1, 2],
|
||||
minutes: 7,
|
||||
walk_minutes: 2,
|
||||
},
|
||||
},
|
||||
{},
|
||||
]),
|
||||
).toEqual([
|
||||
[
|
||||
[45.4291, 12.3266],
|
||||
[45.4275, 12.3282],
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
it('finds each crossing on the saved line by its own points, and leaves out one it cannot find', () => {
|
||||
const crossing: Array<[number, number]> = [
|
||||
[45.4291, 12.3266],
|
||||
[45.4275, 12.3282],
|
||||
];
|
||||
expect(boatSpansOf(line, [crossing])).toEqual([[1, 2]]);
|
||||
expect(
|
||||
boatSpansOf(line, [
|
||||
[
|
||||
[1, 1],
|
||||
[2, 2],
|
||||
],
|
||||
]),
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it('counts no distance along a stretch crossed by boat when sharing a walk out', () => {
|
||||
const stops = [
|
||||
{ lat: 45.4296, lng: 12.3264 },
|
||||
{ lat: 45.4275, lng: 12.3282 },
|
||||
];
|
||||
const walked = stationShares(stops, line)?.[1] ?? 0;
|
||||
// The stop where the boat lands is passed after the walk to the pier only.
|
||||
const byBoat = stationShares(stops, line, [[1, 2]])?.[1] ?? 0;
|
||||
expect(byBoat).toBeLessThan(walked);
|
||||
expect(stationShares(stops, line, [])).toEqual(stationShares(stops, line));
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,50 @@
|
||||
import type { TourFixedLeg } from './tours.schema';
|
||||
|
||||
type LinePoint = readonly [number, number, ...number[]];
|
||||
|
||||
/** Closer than this, in degrees, a point of the saved line is the point of a leg it was built from. */
|
||||
const SAME_POINT_DEG = 1e-6;
|
||||
|
||||
/** CW-12: the boat part of each ferry leg of a city walk, in the order of the legs. */
|
||||
export function ferryCrossingsOf(
|
||||
points: ReadonlyArray<{ fixed_leg?: TourFixedLeg | null }>,
|
||||
): Array<Array<[number, number]>> {
|
||||
return points.flatMap((point) => {
|
||||
const leg = point.fixed_leg;
|
||||
if (leg?.kind !== 'ferry') return [];
|
||||
return [leg.geometry.slice(leg.crossing[0], leg.crossing[1] + 1).map(([lat, lng]): [number, number] => [lat, lng])];
|
||||
});
|
||||
}
|
||||
|
||||
function indexOfPoint(line: ReadonlyArray<LinePoint>, point: readonly [number, number], from: number): number {
|
||||
for (let index = from; index < line.length; index += 1) {
|
||||
const at = line[index];
|
||||
if (at && Math.abs(at[0] - point[0]) < SAME_POINT_DEG && Math.abs(at[1] - point[1]) < SAME_POINT_DEG) return index;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Where on a walk's saved line its crossings by boat run, as the indices of the
|
||||
* points the boat leaves from and lands at. The line was put together from the
|
||||
* legs as they are, so each crossing is found by its own points in turn; one
|
||||
* that cannot be found is left out rather than guessed.
|
||||
*/
|
||||
export function boatSpansOf(
|
||||
line: ReadonlyArray<LinePoint>,
|
||||
crossings: ReadonlyArray<ReadonlyArray<readonly [number, number]>>,
|
||||
): Array<[number, number]> {
|
||||
const spans: Array<[number, number]> = [];
|
||||
let from = 0;
|
||||
for (const crossing of crossings) {
|
||||
const first = crossing[0];
|
||||
const last = crossing[crossing.length - 1];
|
||||
if (!first || !last || crossing.length < 2) continue;
|
||||
const start = indexOfPoint(line, first, from);
|
||||
const end = start < 0 ? -1 : indexOfPoint(line, last, start + 1);
|
||||
if (end < 0) continue;
|
||||
spans.push([start, end]);
|
||||
from = end;
|
||||
}
|
||||
return spans;
|
||||
}
|
||||
@@ -325,14 +325,22 @@ function passedAt(stops: readonly WalkStop[], flat: ReadonlyArray<[number, numbe
|
||||
/**
|
||||
* How far along the route each stop is passed, from 0 at its start to 1 at its
|
||||
* end, by distance, the stops matched in their order as `passedAt` does. Null
|
||||
* for a route of fewer than two points.
|
||||
* for a route of fewer than two points. The stretches of `boatSpans` (CW-12,
|
||||
* from the index the boat leaves at to the one it lands at) are crossed by
|
||||
* boat and add no walking distance.
|
||||
*/
|
||||
export function stationShares(stops: readonly WalkStop[], route: readonly RoutePoint[]): number[] | null {
|
||||
export function stationShares(
|
||||
stops: readonly WalkStop[],
|
||||
route: readonly RoutePoint[],
|
||||
boatSpans: ReadonlyArray<readonly [number, number]> = [],
|
||||
): number[] | null {
|
||||
if (route.length < 2) return null;
|
||||
const flat = flatRoute(route);
|
||||
const byBoat = (i: number) => boatSpans.some(([from, to]) => i > from && i <= to);
|
||||
const along = [0];
|
||||
for (let i = 1; i < flat.length; i += 1) {
|
||||
along.push((along[i - 1] ?? 0) + Math.sqrt(flatGap(flat[i] ?? [0, 0], flat[i - 1] ?? [0, 0])));
|
||||
const step = byBoat(i) ? 0 : Math.sqrt(flatGap(flat[i] ?? [0, 0], flat[i - 1] ?? [0, 0]));
|
||||
along.push((along[i - 1] ?? 0) + step);
|
||||
}
|
||||
const total = along[along.length - 1] || 1;
|
||||
const indices = passedAt(stops, flat, Math.cos((route[0]?.[0] ?? 0) * RAD));
|
||||
|
||||
@@ -157,4 +157,16 @@ describe('walkRemainderOf (CW-13)', () => {
|
||||
expect(noTime.open_stations[0]?.walk_minutes_from_reference).toBeNull();
|
||||
expect(noTime.stays.remaining_known_minutes).toBe(20);
|
||||
});
|
||||
|
||||
it('shares no walking time out along a crossing by boat (CW-12)', () => {
|
||||
// The stretch from the Cathedral to the Market is crossed by boat: the walk is the other three stretches.
|
||||
const stations = walk(['visited', 'planned', 'planned', 'planned', 'planned']);
|
||||
const crossings = [[line[1], line[2]] as Array<[number, number]>];
|
||||
const result = walkRemainderSchema.parse(walkRemainderOf({ stations, line, walkingMinutes: 60, crossings }));
|
||||
expect(result.open_stations.map((station) => station.walk_minutes_from_reference)).toEqual([20, 20, 40, 60]);
|
||||
// Without the crossing every stretch counts alike.
|
||||
expect(remainder(stations, 60).open_stations.map((station) => station.walk_minutes_from_reference)).toEqual([
|
||||
15, 30, 45, 60,
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { WalkRemainder, WalkStationRef } from './tour-walk.schema';
|
||||
import type { StationImportance } from './tours.schema';
|
||||
import { boatSpansOf } from './walk-ferry';
|
||||
import { stationShares, type WalkStop } from './walk-hours';
|
||||
|
||||
/** A station of a walk with its status on one day; planned is a station nobody checked off. */
|
||||
@@ -16,6 +17,8 @@ export interface WalkRemainderInput {
|
||||
/** The saved line; empty or null while the walk waits for its way. */
|
||||
line: ReadonlyArray<readonly [number, number, ...number[]]> | null;
|
||||
walkingMinutes: number | null;
|
||||
/** CW-12: the boat part of each ferry leg the walk takes; no walking time is shared out along them. */
|
||||
crossings?: ReadonlyArray<ReadonlyArray<readonly [number, number]>>;
|
||||
}
|
||||
|
||||
function refOf(stations: readonly WalkRemainderStop[], index: number): WalkStationRef {
|
||||
@@ -56,14 +59,15 @@ function gapOf({ stations, line, walkingMinutes }: WalkRemainderInput, ambiguous
|
||||
* are open. A station skipped ahead keeps the line through it, so the time is
|
||||
* an upper bound; a station planned before the last one visited leaves the
|
||||
* progress unclear and the time unknown. Stays are counted apart, an unknown
|
||||
* one listed rather than taken as nothing.
|
||||
* one listed rather than taken as nothing. A crossing by boat (CW-12) is no
|
||||
* walking and takes no share of the walking time.
|
||||
*/
|
||||
export function walkRemainderOf(input: WalkRemainderInput): WalkRemainder {
|
||||
const { stations, line, walkingMinutes } = input;
|
||||
const { last, openBefore } = progressOf(stations);
|
||||
const ambiguous = openBefore.length > 0;
|
||||
const gap = gapOf(input, ambiguous);
|
||||
const shares = gap === null && line ? stationShares(stations, line) : null;
|
||||
const shares = gap === null && line ? stationShares(stations, line, boatSpansOf(line, input.crossings ?? [])) : null;
|
||||
const walking = walkingMinutes ?? 0;
|
||||
const passed = (index: number) => Math.round(walking * (shares?.[index] ?? 0));
|
||||
const fromReference = last < 0 ? 0 : passed(last);
|
||||
|
||||
Reference in New Issue
Block a user