feat(tours): public transit between two city walks in the day plan, from the first walk's end at the time it ends (CW-08)

"Public transit" on the connector between two city walks in the day plan,
on the desktop and on the phone, now opens the existing search from where
the first walk really ends to where the next one starts, at the
coordinates the day's route draws, named after the first walk's last stop
and the next walk's first stop. A loop ends at its first stop again. A stop
without a name takes the name of the trip place it stands for, and a walk
whose stops cannot be read on this device names that end "End of" or
"Start of" the walk. The search opens on the walks' day and departs when
the first walk ends: its start that day, the time on the day's entry
before the place's own, plus its planned total, a total entered by hand
before walking and stays. The assignment's own end time is not used.

Above the search a note says when the first walk ends, "at the earliest"
where a stay or the walking time is not known yet, and when the next walk
starts. Without a start or a total no time is made up: the time field
stays empty and Search waits until one is chosen. A walk that only ends
after midnight says so, and the time field stays empty as well. On any other day, or for
any other leg, the search opens as before, with 09:00 as its default. A
connection that arrives after the next walk starts says so in its card,
before its legs are opened and before it is taken. Nothing is saved until
"Add to day", which keeps the connection as its own journey in the plan as
before; both walks stay two walks on foot and nothing is moved.

A journey saved before a walk that now arrives after the walk starts says
so on its row in the plan, on the desktop and the phone, while the plan is
looked at. Nothing is rewritten. The desktop no longer draws a connector of
nothing between a stop and a booking at the same spot, as the phone already
did, so a journey saved at the walks' ends adds no walk on either side. A
leg leaving a loop tour no longer departs at the tour's start time.

The leg is told by the walk it leaves, so two walks of a day that end at
one spot, such as two loops from the hotel, each search from their own end
and time, and a stop between two walks keeps the leg an ordinary one. Only
the leg asked for last opens the search, and none opens once the plan is
left while the walks' stops are still being read.

Both views run on one shared hook, the walk's stops are read through one
helper the stop list uses as well, and the walk's start on a day is worked
out in one place for the times shown in the detail and here.
This commit is contained in:
Maurice
2026-10-20 05:14:48 +00:00
parent 7470a2c6d4
commit 9f0caf8539
58 changed files with 1879 additions and 91 deletions
+8
View File
@@ -593,6 +593,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'مكان في الرحلة',
'tours.walk.hours.sourceOsmHint': 'وُجدت مع المحطة على OpenStreetMap؛ قد تكون قديمة.',
'tours.walk.hours.sourcePlaceHint': 'أُدخلت لهذا المكان من الرحلة.',
'tours.walk.transit.endOf': 'نهاية جولة {walk}',
'tours.walk.transit.startOf': 'بداية جولة {walk}',
'tours.walk.transit.ends': 'تنتهي جولة {walk} نحو {time}.',
'tours.walk.transit.endsAtLeast': 'تنتهي جولة {walk} في {time} على أقرب تقدير، فبعض أوقاتها غير معروف بعد.',
'tours.walk.transit.endUnknown': 'موعد انتهاء جولة {walk} غير معروف بعد، لذا اختر وقت المغادرة.',
'tours.walk.transit.endsNextDay': 'تنتهي جولة {walk} بعد منتصف الليل، لذا اختر وقت المغادرة.',
'tours.walk.transit.nextStarts': 'تبدأ جولة {walk} في {time}.',
'tours.walk.transit.late': 'الوصول بعد بدء جولة {walk} في {time}',
'tours.poi.categoriesNone': 'لم تُختر أي فئة',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'نوع الجولة',
+8
View File
@@ -592,6 +592,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Səyahət yeri',
'tours.walk.hours.sourceOsmHint': 'Dayanacaqla birlikdə OpenStreetMap-dən tapılıb; köhnəlmiş ola bilər.',
'tours.walk.hours.sourcePlaceHint': 'Səyahətin bu yeri üçün daxil edilib.',
'tours.walk.transit.endOf': '{walk} sonu',
'tours.walk.transit.startOf': '{walk} başlanğıcı',
'tours.walk.transit.ends': '{walk} təxminən {time} bitir.',
'tours.walk.transit.endsAtLeast': '{walk} ən tez {time} bitir; vaxtların hamısı hələ məlum deyil.',
'tours.walk.transit.endUnknown': '{walk} gəzintisinin bitmə vaxtı hələ məlum deyil, ona görə yola düşmə vaxtını seç.',
'tours.walk.transit.endsNextDay': '{walk} gəzintisi gecə yarısından sonra bitir, ona görə yola düşmə vaxtını seç.',
'tours.walk.transit.nextStarts': '{walk} {time} başlayır.',
'tours.walk.transit.late': '{walk} {time} başlayır, çatma isə daha gec olur',
'tours.poi.categoriesNone': 'Kateqoriya seçilməyib',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tur növü',
+8
View File
@@ -597,6 +597,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Lugar da viagem',
'tours.walk.hours.sourceOsmHint': 'Encontrado com a parada no OpenStreetMap; pode estar desatualizado.',
'tours.walk.hours.sourcePlaceHint': 'Informado para este lugar da viagem.',
'tours.walk.transit.endOf': 'Fim de {walk}',
'tours.walk.transit.startOf': 'Início de {walk}',
'tours.walk.transit.ends': '{walk} termina por volta das {time}.',
'tours.walk.transit.endsAtLeast': '{walk} termina não antes das {time}; alguns horários ainda não são conhecidos.',
'tours.walk.transit.endUnknown': 'Ainda não se sabe quando {walk} termina, então escolha um horário de saída.',
'tours.walk.transit.endsNextDay': '{walk} só termina depois da meia-noite, então escolha um horário de saída.',
'tours.walk.transit.nextStarts': '{walk} começa às {time}.',
'tours.walk.transit.late': 'Chega depois do início de {walk}, às {time}',
'tours.poi.categoriesNone': 'Nenhuma categoria escolhida',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tipo de passeio',
+8
View File
@@ -598,6 +598,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Lloc del viatge',
'tours.walk.hours.sourceOsmHint': 'Trobat amb la parada a OpenStreetMap; pot estar desactualitzat.',
'tours.walk.hours.sourcePlaceHint': 'Introduït per a aquest lloc del viatge.',
'tours.walk.transit.endOf': 'Final de {walk}',
'tours.walk.transit.startOf': 'Inici de {walk}',
'tours.walk.transit.ends': '{walk} acaba cap a les {time}.',
'tours.walk.transit.endsAtLeast': '{walk} acaba com a aviat a les {time}; encara no se saben tots els temps.',
'tours.walk.transit.endUnknown': 'Encara no se sap quan acaba {walk}, així que tria una hora de sortida.',
'tours.walk.transit.endsNextDay': '{walk} acaba després de mitjanit, així que tria una hora de sortida.',
'tours.walk.transit.nextStarts': '{walk} comença a les {time}.',
'tours.walk.transit.late': 'Arriba després que comenci {walk}, a les {time}',
'tours.poi.categoriesNone': 'Cap categoria triada',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tipus de ruta',
+8
View File
@@ -585,6 +585,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Místo výletu',
'tours.walk.hours.sourceOsmHint': 'Nalezeno se zastávkou v OpenStreetMap; může být zastaralé.',
'tours.walk.hours.sourcePlaceHint': 'Zadáno u tohoto místa výletu.',
'tours.walk.transit.endOf': 'Konec procházky {walk}',
'tours.walk.transit.startOf': 'Začátek procházky {walk}',
'tours.walk.transit.ends': 'Procházka {walk} končí zhruba v {time}.',
'tours.walk.transit.endsAtLeast': 'Procházka {walk} končí nejdříve v {time}; zatím nejsou známé všechny časy.',
'tours.walk.transit.endUnknown': 'Kdy procházka {walk} končí, zatím není známo, proto vyber čas odjezdu.',
'tours.walk.transit.endsNextDay': 'Procházka {walk} končí až po půlnoci, proto vyber čas odjezdu.',
'tours.walk.transit.nextStarts': 'Procházka {walk} začíná v {time}.',
'tours.walk.transit.late': 'Příjezd až po začátku procházky {walk} v {time}',
'tours.poi.categoriesNone': 'Žádná kategorie',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Typ túry',
+8
View File
@@ -602,6 +602,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Ort der Reise',
'tours.walk.hours.sourceOsmHint': 'Mit der Station aus OpenStreetMap übernommen; kann veraltet sein.',
'tours.walk.hours.sourcePlaceHint': 'Für diesen Ort der Reise eingetragen.',
'tours.walk.transit.endOf': 'Ende von {walk}',
'tours.walk.transit.startOf': 'Start von {walk}',
'tours.walk.transit.ends': '{walk} endet gegen {time}.',
'tours.walk.transit.endsAtLeast': '{walk} endet frühestens um {time}; noch sind nicht alle Zeiten bekannt.',
'tours.walk.transit.endUnknown': 'Wann {walk} endet, ist noch nicht bekannt. Wähle deshalb eine Abfahrtszeit.',
'tours.walk.transit.endsNextDay': '{walk} endet erst nach Mitternacht. Wähle deshalb eine Abfahrtszeit.',
'tours.walk.transit.nextStarts': '{walk} beginnt um {time}.',
'tours.walk.transit.late': 'Ankunft nach dem Start von {walk} um {time}',
'tours.poi.categoriesNone': 'Keine Kategorie gewählt',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tourtyp',
+8
View File
@@ -586,6 +586,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Trip place',
'tours.walk.hours.sourceOsmHint': 'Found with the stop on OpenStreetMap; it may be out of date.',
'tours.walk.hours.sourcePlaceHint': 'Entered for this place of the trip.',
'tours.walk.transit.endOf': 'End of {walk}',
'tours.walk.transit.startOf': 'Start of {walk}',
'tours.walk.transit.ends': '{walk} ends at about {time}.',
'tours.walk.transit.endsAtLeast': '{walk} ends at {time} at the earliest; not all of its times are known yet.',
'tours.walk.transit.endUnknown': 'When {walk} ends is not known yet, so choose a departure time.',
'tours.walk.transit.endsNextDay': '{walk} only ends after midnight, so choose a departure time.',
'tours.walk.transit.nextStarts': '{walk} starts at {time}.',
'tours.walk.transit.late': 'Arrives after {walk} starts at {time}',
'tours.poi.categoriesNone': 'No category chosen',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tour type',
+8
View File
@@ -597,6 +597,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Lugar del viaje',
'tours.walk.hours.sourceOsmHint': 'Encontrado con la parada en OpenStreetMap; puede estar desactualizado.',
'tours.walk.hours.sourcePlaceHint': 'Introducido para este lugar del viaje.',
'tours.walk.transit.endOf': 'Final de {walk}',
'tours.walk.transit.startOf': 'Inicio de {walk}',
'tours.walk.transit.ends': '{walk} termina hacia las {time}.',
'tours.walk.transit.endsAtLeast': '{walk} termina no antes de las {time}; aún no se conocen todos sus tiempos.',
'tours.walk.transit.endUnknown': 'Aún no se sabe cuándo termina {walk}, así que elige una hora de salida.',
'tours.walk.transit.endsNextDay': '{walk} termina después de medianoche, así que elige una hora de salida.',
'tours.walk.transit.nextStarts': '{walk} empieza a las {time}.',
'tours.walk.transit.late': 'Llega después de que empiece {walk}, a las {time}',
'tours.poi.categoriesNone': 'Ninguna categoría elegida',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tipo de ruta',
+8
View File
@@ -588,6 +588,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Reisi koht',
'tours.walk.hours.sourceOsmHint': 'Leitud koos peatusega OpenStreetMapist; võib olla aegunud.',
'tours.walk.hours.sourcePlaceHint': 'Sisestatud selle reisi koha juurde.',
'tours.walk.transit.endOf': '{walk} lõpp',
'tours.walk.transit.startOf': '{walk} algus',
'tours.walk.transit.ends': '{walk} lõpeb umbes kell {time}.',
'tours.walk.transit.endsAtLeast': '{walk} lõpeb kõige varem kell {time}; kõik ajad pole veel teada.',
'tours.walk.transit.endUnknown': 'Millal {walk} lõpeb, pole veel teada, seega vali väljumisaeg.',
'tours.walk.transit.endsNextDay': '{walk} lõpeb alles pärast keskööd, seega vali väljumisaeg.',
'tours.walk.transit.nextStarts': '{walk} algab kell {time}.',
'tours.walk.transit.late': 'Saabub pärast seda, kui {walk} algab kell {time}',
'tours.poi.categoriesNone': 'Kategooriat pole valitud',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Matka tüüp',
+9
View File
@@ -604,6 +604,15 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Lieu du voyage',
'tours.walk.hours.sourceOsmHint': "Trouvé avec l'étape sur OpenStreetMap ; peut ne plus être à jour.",
'tours.walk.hours.sourcePlaceHint': 'Saisi pour ce lieu du voyage.',
'tours.walk.transit.endOf': 'Fin de {walk}',
'tours.walk.transit.startOf': 'Début de {walk}',
'tours.walk.transit.ends': '{walk} se termine vers {time}.',
'tours.walk.transit.endsAtLeast':
'{walk} se termine au plus tôt à {time} ; certains temps ne sont pas encore connus.',
'tours.walk.transit.endUnknown': 'On ne sait pas encore quand {walk} se termine : choisis une heure de départ.',
'tours.walk.transit.endsNextDay': '{walk} se termine après minuit : choisis une heure de départ.',
'tours.walk.transit.nextStarts': '{walk} commence à {time}.',
'tours.walk.transit.late': 'Arrivée après le début de {walk} à {time}',
'tours.poi.categoriesNone': 'Aucune catégorie choisie',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Type de sortie',
+10
View File
@@ -606,6 +606,16 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Μέρος του ταξιδιού',
'tours.walk.hours.sourceOsmHint': 'Βρέθηκε μαζί με τη στάση στο OpenStreetMap. Μπορεί να μην είναι ενημερωμένο.',
'tours.walk.hours.sourcePlaceHint': 'Καταχωρίστηκε για αυτό το μέρος του ταξιδιού.',
'tours.walk.transit.endOf': 'Τέλος της βόλτας {walk}',
'tours.walk.transit.startOf': 'Αρχή της βόλτας {walk}',
'tours.walk.transit.ends': 'Η βόλτα {walk} τελειώνει γύρω στις {time}.',
'tours.walk.transit.endsAtLeast':
'Η βόλτα {walk} τελειώνει το νωρίτερο στις {time}, αφού δεν είναι ακόμη γνωστοί όλοι οι χρόνοι.',
'tours.walk.transit.endUnknown':
'Δεν είναι ακόμη γνωστό πότε τελειώνει η βόλτα {walk}, οπότε διάλεξε ώρα αναχώρησης.',
'tours.walk.transit.endsNextDay': 'Η βόλτα {walk} τελειώνει μετά τα μεσάνυχτα, οπότε διάλεξε ώρα αναχώρησης.',
'tours.walk.transit.nextStarts': 'Η βόλτα {walk} ξεκινά στις {time}.',
'tours.walk.transit.late': 'Άφιξη μετά την έναρξη της βόλτας {walk} στις {time}',
'tours.poi.categoriesNone': 'Δεν επιλέχθηκε κατηγορία',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Τύπος διαδρομής',
+8
View File
@@ -598,6 +598,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Az utazás helye',
'tours.walk.hours.sourceOsmHint': 'A megállóval együtt az OpenStreetMapből; elavult lehet.',
'tours.walk.hours.sourcePlaceHint': 'Az utazás ezen helyéhez rögzítve.',
'tours.walk.transit.endOf': '{walk} vége',
'tours.walk.transit.startOf': '{walk} kezdete',
'tours.walk.transit.ends': '{walk}: a séta kb. {time} órakor ér véget.',
'tours.walk.transit.endsAtLeast': '{walk}: a séta legkorábban {time} órakor ér véget; még nem ismert minden időpont.',
'tours.walk.transit.endUnknown': '{walk}: a séta vége még nem ismert, ezért válassz indulási időt.',
'tours.walk.transit.endsNextDay': '{walk}: a séta csak éjfél után ér véget, ezért válassz indulási időt.',
'tours.walk.transit.nextStarts': '{walk}: a séta {time} órakor kezdődik.',
'tours.walk.transit.late': 'Érkezés a séta kezdete után: {walk}, {time}',
'tours.poi.categoriesNone': 'Nincs kategória kiválasztva',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Túratípus',
+8
View File
@@ -590,6 +590,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Tempat perjalanan',
'tours.walk.hours.sourceOsmHint': 'Ditemukan bersama titik ini di OpenStreetMap; mungkin sudah usang.',
'tours.walk.hours.sourcePlaceHint': 'Diisi untuk tempat perjalanan ini.',
'tours.walk.transit.endOf': 'Akhir {walk}',
'tours.walk.transit.startOf': 'Awal {walk}',
'tours.walk.transit.ends': '{walk} selesai sekitar pukul {time}.',
'tours.walk.transit.endsAtLeast': '{walk} selesai paling cepat pukul {time}; belum semua waktunya diketahui.',
'tours.walk.transit.endUnknown': 'Belum diketahui kapan {walk} selesai, jadi pilih waktu berangkat.',
'tours.walk.transit.endsNextDay': '{walk} baru selesai setelah tengah malam, jadi pilih waktu berangkat.',
'tours.walk.transit.nextStarts': '{walk} dimulai pukul {time}.',
'tours.walk.transit.late': 'Tiba setelah {walk} dimulai pukul {time}',
'tours.poi.categoriesNone': 'Belum ada kategori',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Jenis tur',
+8
View File
@@ -599,6 +599,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Luogo del viaggio',
'tours.walk.hours.sourceOsmHint': 'Trovato con la tappa su OpenStreetMap; potrebbe non essere aggiornato.',
'tours.walk.hours.sourcePlaceHint': 'Inserito per questo luogo del viaggio.',
'tours.walk.transit.endOf': 'Fine di {walk}',
'tours.walk.transit.startOf': 'Inizio di {walk}',
'tours.walk.transit.ends': '{walk} finisce verso le {time}.',
'tours.walk.transit.endsAtLeast': '{walk} finisce non prima delle {time}; non tutti i tempi sono ancora noti.',
'tours.walk.transit.endUnknown': 'Non si sa ancora quando finisce {walk}, quindi scegli un orario di partenza.',
'tours.walk.transit.endsNextDay': '{walk} finisce dopo mezzanotte, quindi scegli un orario di partenza.',
'tours.walk.transit.nextStarts': '{walk} inizia alle {time}.',
'tours.walk.transit.late': "Arrivo dopo l'inizio di {walk} alle {time}",
'tours.poi.categoriesNone': 'Nessuna categoria scelta',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tipo di tour',
+8
View File
@@ -577,6 +577,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': '旅行の場所',
'tours.walk.hours.sourceOsmHint': '立ち寄り先と一緒に OpenStreetMap から取得。古い可能性があります。',
'tours.walk.hours.sourcePlaceHint': 'この旅行の場所に入力されたものです。',
'tours.walk.transit.endOf': '{walk} の終点',
'tours.walk.transit.startOf': '{walk} の起点',
'tours.walk.transit.ends': '{walk} は {time} ごろに終わります。',
'tours.walk.transit.endsAtLeast': '{walk} の終了は早くても {time} です。まだ分からない時間があります。',
'tours.walk.transit.endUnknown': '{walk} がいつ終わるかはまだ分かりません。出発時刻を選んでください。',
'tours.walk.transit.endsNextDay': '{walk} は深夜0時を過ぎてから終わります。出発時刻を選んでください。',
'tours.walk.transit.nextStarts': '{walk} は {time} に始まります。',
'tours.walk.transit.late': '{walk} の開始({time})より後に到着',
'tours.poi.categoriesNone': 'カテゴリー未選択',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'ツアーの種類',
+8
View File
@@ -575,6 +575,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': '여행 장소',
'tours.walk.hours.sourceOsmHint': '정류지와 함께 OpenStreetMap에서 가져왔습니다. 오래된 정보일 수 있습니다.',
'tours.walk.hours.sourcePlaceHint': '이 여행 장소에 입력된 시간입니다.',
'tours.walk.transit.endOf': '{walk} 종료 지점',
'tours.walk.transit.startOf': '{walk} 시작 지점',
'tours.walk.transit.ends': '{walk}은(는) {time}쯤 끝납니다.',
'tours.walk.transit.endsAtLeast': '{walk}은(는) 빨라야 {time}에 끝납니다. 아직 모르는 시간이 있습니다.',
'tours.walk.transit.endUnknown': '{walk}이(가) 언제 끝나는지 아직 모릅니다. 출발 시간을 선택하세요.',
'tours.walk.transit.endsNextDay': '{walk}은(는) 자정이 지나서 끝납니다. 출발 시간을 선택하세요.',
'tours.walk.transit.nextStarts': '{walk}은(는) {time}에 시작합니다.',
'tours.walk.transit.late': '{walk} 시작({time}) 이후 도착',
'tours.poi.categoriesNone': '선택한 카테고리 없음',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': '투어 유형',
+8
View File
@@ -599,6 +599,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Plek van de reis',
'tours.walk.hours.sourceOsmHint': 'Gevonden met de halte op OpenStreetMap; kan verouderd zijn.',
'tours.walk.hours.sourcePlaceHint': 'Ingevuld voor deze plek van de reis.',
'tours.walk.transit.endOf': 'Einde van {walk}',
'tours.walk.transit.startOf': 'Begin van {walk}',
'tours.walk.transit.ends': '{walk} eindigt rond {time}.',
'tours.walk.transit.endsAtLeast': '{walk} eindigt op zijn vroegst om {time}; nog niet alle tijden zijn bekend.',
'tours.walk.transit.endUnknown': 'Nog niet bekend wanneer {walk} eindigt, dus kies een vertrektijd.',
'tours.walk.transit.endsNextDay': '{walk} eindigt pas na middernacht, dus kies een vertrektijd.',
'tours.walk.transit.nextStarts': '{walk} begint om {time}.',
'tours.walk.transit.late': 'Aankomst na de start van {walk} om {time}',
'tours.poi.categoriesNone': 'Geen categorie gekozen',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Soort tocht',
+9
View File
@@ -606,6 +606,15 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Miejsce podróży',
'tours.walk.hours.sourceOsmHint': 'Znalezione z przystankiem w OpenStreetMap; może być nieaktualne.',
'tours.walk.hours.sourcePlaceHint': 'Wpisane dla tego miejsca podróży.',
'tours.walk.transit.endOf': 'Koniec trasy {walk}',
'tours.walk.transit.startOf': 'Początek trasy {walk}',
'tours.walk.transit.ends': 'Trasa {walk} kończy się około {time}.',
'tours.walk.transit.endsAtLeast':
'Trasa {walk} kończy się najwcześniej o {time}; nie wszystkie czasy są jeszcze znane.',
'tours.walk.transit.endUnknown': 'Nie wiadomo jeszcze, kiedy kończy się trasa {walk}, więc wybierz godzinę odjazdu.',
'tours.walk.transit.endsNextDay': 'Trasa {walk} kończy się dopiero po północy, więc wybierz godzinę odjazdu.',
'tours.walk.transit.nextStarts': 'Trasa {walk} zaczyna się o {time}.',
'tours.walk.transit.late': 'Przyjazd po rozpoczęciu trasy {walk} o {time}',
'tours.poi.categoriesNone': 'Nie wybrano kategorii',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Rodzaj wycieczki',
+10
View File
@@ -608,6 +608,16 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Место поездки',
'tours.walk.hours.sourceOsmHint': 'Найдено вместе с остановкой в OpenStreetMap; может быть устаревшим.',
'tours.walk.hours.sourcePlaceHint': 'Указано для этого места поездки.',
'tours.walk.transit.endOf': 'Конец прогулки {walk}',
'tours.walk.transit.startOf': 'Начало прогулки {walk}',
'tours.walk.transit.ends': 'Прогулка {walk} заканчивается около {time}.',
'tours.walk.transit.endsAtLeast': 'Прогулка {walk} заканчивается не раньше {time}; известно ещё не всё время.',
'tours.walk.transit.endUnknown':
'Пока неизвестно, когда заканчивается прогулка {walk}, поэтому выбери время отправления.',
'tours.walk.transit.endsNextDay':
'Прогулка {walk} заканчивается только после полуночи, поэтому выбери время отправления.',
'tours.walk.transit.nextStarts': 'Прогулка {walk} начинается в {time}.',
'tours.walk.transit.late': 'Прибытие после начала прогулки {walk} в {time}',
'tours.poi.categoriesNone': 'Категория не выбрана',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Тип тура',
+8
View File
@@ -587,6 +587,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Miesto výletu',
'tours.walk.hours.sourceOsmHint': 'Nájdené so zastávkou v OpenStreetMap; môže byť zastarané.',
'tours.walk.hours.sourcePlaceHint': 'Zadané pri tomto mieste výletu.',
'tours.walk.transit.endOf': 'Koniec prechádzky {walk}',
'tours.walk.transit.startOf': 'Začiatok prechádzky {walk}',
'tours.walk.transit.ends': 'Prechádzka {walk} končí približne o {time}.',
'tours.walk.transit.endsAtLeast': 'Prechádzka {walk} končí najskôr o {time}; zatiaľ nie sú známe všetky časy.',
'tours.walk.transit.endUnknown': 'Zatiaľ nie je známe, kedy prechádzka {walk} končí, preto vyber čas odchodu.',
'tours.walk.transit.endsNextDay': 'Prechádzka {walk} končí až po polnoci, preto vyber čas odchodu.',
'tours.walk.transit.nextStarts': 'Prechádzka {walk} začína o {time}.',
'tours.walk.transit.late': 'Príchod po začiatku prechádzky {walk} o {time}',
'tours.poi.categoriesNone': 'Žiadna kategória',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Typ túry',
+8
View File
@@ -586,6 +586,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Plats på resan',
'tours.walk.hours.sourceOsmHint': 'Hittad med stoppet på OpenStreetMap; kan vara inaktuell.',
'tours.walk.hours.sourcePlaceHint': 'Angiven för den här platsen på resan.',
'tours.walk.transit.endOf': 'Slutet av {walk}',
'tours.walk.transit.startOf': 'Början av {walk}',
'tours.walk.transit.ends': '{walk} slutar runt kl. {time}.',
'tours.walk.transit.endsAtLeast': '{walk} slutar tidigast kl. {time}; alla tider är inte kända än.',
'tours.walk.transit.endUnknown': 'Det är ännu inte känt när {walk} slutar, så välj en avgångstid.',
'tours.walk.transit.endsNextDay': '{walk} slutar först efter midnatt, så välj en avgångstid.',
'tours.walk.transit.nextStarts': '{walk} börjar kl. {time}.',
'tours.walk.transit.late': 'Ankomst efter att {walk} börjar kl. {time}',
'tours.poi.categoriesNone': 'Ingen kategori vald',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Turtyp',
+8
View File
@@ -563,6 +563,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'สถานที่ในทริป',
'tours.walk.hours.sourceOsmHint': 'พบพร้อมจุดแวะใน OpenStreetMap ข้อมูลอาจไม่เป็นปัจจุบัน',
'tours.walk.hours.sourcePlaceHint': 'ใส่ไว้สำหรับสถานที่นี้ในทริป',
'tours.walk.transit.endOf': 'จุดสิ้นสุดของ {walk}',
'tours.walk.transit.startOf': 'จุดเริ่มต้นของ {walk}',
'tours.walk.transit.ends': '{walk} จบประมาณ {time}',
'tours.walk.transit.endsAtLeast': '{walk} จบเร็วที่สุด {time} เพราะยังไม่ทราบเวลาบางส่วน',
'tours.walk.transit.endUnknown': 'ยังไม่ทราบว่า {walk} จบเมื่อใด จึงต้องเลือกเวลาออกเดินทางเอง',
'tours.walk.transit.endsNextDay': '{walk} จบหลังเที่ยงคืน จึงต้องเลือกเวลาออกเดินทางเอง',
'tours.walk.transit.nextStarts': '{walk} เริ่ม {time}',
'tours.walk.transit.late': 'ถึงหลังจาก {walk} เริ่มเวลา {time}',
'tours.poi.categoriesNone': 'ยังไม่ได้เลือกหมวดหมู่',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'ประเภททริป',
+1 -1
View File
@@ -20,7 +20,7 @@ const tokens = (value: string) => [...value.matchAll(/\{[^{}]+\}/g)].map((match)
// placeholder spec; here only the general keys are.
const groups = pluralGroups(Object.keys(english));
const generalKeys = (keys: string[]) => keys.filter((key) => !pluralFormOf(key, groups));
const GENERAL_KEY_COUNT = 817;
const GENERAL_KEY_COUNT = 825;
function literalKeys(source: string): string[] {
const tree = ts.createSourceFile('locale.ts', source, ts.ScriptTarget.Latest, true);
+9
View File
@@ -592,6 +592,15 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Seyahat yeri',
'tours.walk.hours.sourceOsmHint': "Durakla birlikte OpenStreetMap'ten bulundu; güncel olmayabilir.",
'tours.walk.hours.sourcePlaceHint': 'Seyahatin bu yeri için girildi.',
'tours.walk.transit.endOf': '{walk} bitişi',
'tours.walk.transit.startOf': '{walk} başlangıcı',
'tours.walk.transit.ends': '{walk} yaklaşık {time} saatinde biter.',
'tours.walk.transit.endsAtLeast': '{walk} en erken {time} saatinde biter; tüm süreler henüz bilinmiyor.',
'tours.walk.transit.endUnknown':
'{walk} yürüyüşünün ne zaman bittiği henüz bilinmiyor, bu yüzden bir kalkış saati seç.',
'tours.walk.transit.endsNextDay': '{walk} yürüyüşü gece yarısından sonra bitiyor, bu yüzden bir kalkış saati seç.',
'tours.walk.transit.nextStarts': '{walk} {time} saatinde başlar.',
'tours.walk.transit.late': 'Varış, {walk} {time} saatinde başladıktan sonra',
'tours.poi.categoriesNone': 'Kategori seçilmedi',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Tur türü',
+8
View File
@@ -603,6 +603,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Місце подорожі',
'tours.walk.hours.sourceOsmHint': 'Знайдено разом із зупинкою в OpenStreetMap; може бути застарілим.',
'tours.walk.hours.sourcePlaceHint': 'Вказано для цього місця подорожі.',
'tours.walk.transit.endOf': 'Кінець прогулянки {walk}',
'tours.walk.transit.startOf': 'Початок прогулянки {walk}',
'tours.walk.transit.ends': 'Прогулянка {walk} закінчується близько {time}.',
'tours.walk.transit.endsAtLeast': 'Прогулянка {walk} закінчується не раніше {time}; ще відомий не весь час.',
'tours.walk.transit.endUnknown': 'Поки невідомо, коли закінчується прогулянка {walk}, тож вибери час відправлення.',
'tours.walk.transit.endsNextDay': 'Прогулянка {walk} закінчується лише після опівночі, тож вибери час відправлення.',
'tours.walk.transit.nextStarts': 'Прогулянка {walk} починається о {time}.',
'tours.walk.transit.late': 'Прибуття після початку прогулянки {walk} о {time}',
'tours.poi.categoriesNone': 'Категорію не вибрано',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Тип туру',
+8
View File
@@ -585,6 +585,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': 'Địa điểm của chuyến đi',
'tours.walk.hours.sourceOsmHint': 'Tìm thấy cùng điểm dừng trên OpenStreetMap; có thể đã cũ.',
'tours.walk.hours.sourcePlaceHint': 'Được nhập cho địa điểm này của chuyến đi.',
'tours.walk.transit.endOf': 'Điểm cuối của {walk}',
'tours.walk.transit.startOf': 'Điểm đầu của {walk}',
'tours.walk.transit.ends': '{walk} kết thúc khoảng {time}.',
'tours.walk.transit.endsAtLeast': '{walk} kết thúc sớm nhất lúc {time}; vẫn chưa biết hết các mốc thời gian.',
'tours.walk.transit.endUnknown': 'Chưa biết khi nào {walk} kết thúc, nên hãy chọn giờ khởi hành.',
'tours.walk.transit.endsNextDay': '{walk} kết thúc sau nửa đêm, nên hãy chọn giờ khởi hành.',
'tours.walk.transit.nextStarts': '{walk} bắt đầu lúc {time}.',
'tours.walk.transit.late': 'Đến sau khi {walk} bắt đầu lúc {time}',
'tours.poi.categoriesNone': 'Chưa chọn danh mục',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': 'Loại chuyến',
+8
View File
@@ -543,6 +543,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': '行程地點',
'tours.walk.hours.sourceOsmHint': '隨站點從 OpenStreetMap 取得,可能已過時。',
'tours.walk.hours.sourcePlaceHint': '為行程中的這個地點填寫。',
'tours.walk.transit.endOf': '{walk} 終點',
'tours.walk.transit.startOf': '{walk} 起點',
'tours.walk.transit.ends': '{walk} 約 {time} 結束。',
'tours.walk.transit.endsAtLeast': '{walk} 最早 {time} 結束;部分時間尚不清楚。',
'tours.walk.transit.endUnknown': '尚不清楚 {walk} 何時結束,請選擇出發時間。',
'tours.walk.transit.endsNextDay': '{walk} 要到午夜之後才結束,請選擇出發時間。',
'tours.walk.transit.nextStarts': '{walk} {time} 開始。',
'tours.walk.transit.late': '抵達晚於 {walk} 的開始時間 {time}',
'tours.poi.categoriesNone': '未選擇類別',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': '路線類型',
+8
View File
@@ -544,6 +544,14 @@ const tours: TranslationStrings = {
'tours.walk.hours.sourcePlace': '行程地点',
'tours.walk.hours.sourceOsmHint': '随站点从 OpenStreetMap 获取,可能已过时。',
'tours.walk.hours.sourcePlaceHint': '为行程中的这个地点填写。',
'tours.walk.transit.endOf': '{walk} 终点',
'tours.walk.transit.startOf': '{walk} 起点',
'tours.walk.transit.ends': '{walk} 约 {time} 结束。',
'tours.walk.transit.endsAtLeast': '{walk} 最早 {time} 结束;部分时间尚不清楚。',
'tours.walk.transit.endUnknown': '尚不清楚 {walk} 何时结束,请选择出发时间。',
'tours.walk.transit.endsNextDay': '{walk} 要到午夜之后才结束,请选择出发时间。',
'tours.walk.transit.nextStarts': '{walk} {time} 开始。',
'tours.walk.transit.late': '到达晚于 {walk} 的开始时间 {time}',
'tours.poi.categoriesNone': '未选择类别',
'tours.poi.categoriesMore': '{first} +{more}',
'tours.planner.tourType': '路线类型',