mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-22 06:56:35 +00:00
feat(tours): plan rides on horseback from signposted horse routes
A tour can now be a ride (HOR-01). The planner offers "Horse ride" as a tour type with its own horseshoe, and a Horse routes card beside the waypoints looks, when asked, for the route=horse relations OpenStreetMap knows in the map view. A route opens in a dialog that shows it on a map in the sections it is made of, split at forks, gaps and crossings, so nothing is ever joined across a gap. The rider picks a section and its direction, sees what the horse=* tags along it say (open, limited, closed, or unknown where untagged) and whether it is signposted the other way, and takes it as one undoable step. A section that does not start where the ride ends is only joined by a straight manual stretch once the rider switched that on. Nothing of a ride is routed: every leg follows a section or is drawn by hand, and the waypoint list and the map say which (a section as a solid line with its route, a manual stretch dashed and marked unchecked). A point at a section stays where the route has it, a ride works out no riding time, and distance, heights, day assignment, GPX import and export, the 3D view and the reversed ride keep working with each leg's origin saved and opened again. A failed lookup leaves the ride and the routes already found as they were. The server reads the routes through the shared Overpass client (GET /api/trips/:tripId/tours/horse-routes, Tours addon, trip access), keeps an answer twelve hours per grid-aligned view, and the tour contract refuses a routed leg, a via ferrata or a riding time on a ride and a horse route section on any other type. A migration enables the horse tour type.
This commit is contained in:
@@ -1038,5 +1038,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.status.unrouted.two': 'مقاطع غير مخطّطة: {count}',
|
||||
'tours.paddle.status.unrouted.few': 'مقاطع غير مخطّطة: {count}',
|
||||
'tours.paddle.status.unrouted.many': 'مقاطع غير مخطّطة: {count}',
|
||||
'tourTypes.horse': 'جولة على ظهر الخيل',
|
||||
'tours.planner.tourTypeHint.horse': 'على ظهر الخيل، عبر مسارات فروسية معلّمة',
|
||||
'tours.planner.namePlaceholder.horse': 'جولة على الخيل بلا عنوان',
|
||||
'tours.horse.time': 'وقت الركوب',
|
||||
'tours.horse.timeInfoLabel': 'لماذا لا يوجد وقت ركوب',
|
||||
'tours.horse.timeInfo':
|
||||
'لا يحسب TREK وقت الركوب: الإيقاع يحدده الحصان والفارس. أدخل بنفسك إجمالي الوقت المخطط إن أردت.',
|
||||
'tours.horse.routes.title': 'مسارات الفروسية',
|
||||
'tours.horse.routes.infoLabel': 'عن مسارات الفروسية',
|
||||
'tours.horse.routes.info':
|
||||
'مسارات فروسية معلّمة من OpenStreetMap، في مقاطع تُؤخذ كاملة. كون الطريق جزءًا من مسار لا يعني الإذن بركوب الخيل فيه.',
|
||||
'tours.horse.routes.search': 'ابحث في عرض الخريطة',
|
||||
'tours.horse.routes.searchAgain': 'ابحث في هذا العرض',
|
||||
'tours.horse.routes.loading': 'جارٍ البحث عن مسارات الفروسية…',
|
||||
'tours.horse.routes.zoomIn': 'كبّر الخريطة أكثر للبحث عن مسارات الفروسية.',
|
||||
'tours.horse.routes.offline': 'تحتاج مسارات الفروسية إلى اتصال.',
|
||||
'tours.horse.routes.failed': 'تعذرت قراءة مسارات الفروسية. جولتك لم تتغير.',
|
||||
'tours.horse.routes.none': 'لا توجد مسارات فروسية معلّمة في هذا العرض.',
|
||||
'tours.horse.routes.truncated': 'توجد هنا مسارات أكثر مما يعرضه بحث واحد. كبّر الخريطة لرؤيتها كلها.',
|
||||
'tours.horse.routes.unnamed': 'مسار فروسية بلا اسم',
|
||||
'tours.horse.routes.sections': 'المقاطع',
|
||||
'tours.horse.routes.continues': 'يستمر خارج العرض',
|
||||
'tours.horse.dialog.eyebrow': 'مسار فروسية',
|
||||
'tours.horse.dialog.osm': 'افتح في OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'المقطع {number}',
|
||||
'tours.horse.dialog.direction': 'الاتجاه',
|
||||
'tours.horse.dialog.asMapped': 'كما رُسم على الخريطة',
|
||||
'tours.horse.dialog.reversed': 'معكوس',
|
||||
'tours.horse.dialog.signedWith': 'معلّم في هذا الاتجاه',
|
||||
'tours.horse.dialog.signedAgainst': 'هذا المقطع معلّم في الاتجاه المعاكس.',
|
||||
'tours.horse.dialog.connection': 'الاتصال بجولتك',
|
||||
'tours.horse.dialog.firstSection': 'يبدأ جولتك',
|
||||
'tours.horse.dialog.joins': 'يتصل بنهاية جولتك',
|
||||
'tours.horse.dialog.gap': 'بين نهاية جولتك وهذا المقطع {distance} خارج أي مسار فروسية.',
|
||||
'tours.horse.dialog.joinGap': 'صِل بمقطع يدوي',
|
||||
'tours.horse.dialog.joinGapHint': 'مرسوم مستقيمًا وغير مُتحقق منه',
|
||||
'tours.horse.dialog.adopt': 'خذ المقطع',
|
||||
'tours.horse.access.title': 'وصول الخيل',
|
||||
'tours.horse.access.note':
|
||||
'ما يسجله OpenStreetMap على أنه horse=* على طول الطرق. قد تنقص البيانات أو تكون قديمة؛ العبرة باللافتات في المكان.',
|
||||
'tours.horse.access.closedNotice': 'جزء من هذا المقطع مسجل على أنه مغلق أو خاص أمام الخيل.',
|
||||
'tours.horse.access.value.designated': 'مخصص للفرسان',
|
||||
'tours.horse.access.value.yes': 'مسموح',
|
||||
'tours.horse.access.value.permissive': 'يتسامح به المالك',
|
||||
'tours.horse.access.value.destination': 'للوصول فقط',
|
||||
'tours.horse.access.value.discouraged': 'غير مستحسن',
|
||||
'tours.horse.access.value.private': 'خاص',
|
||||
'tours.horse.access.value.no': 'ممنوع',
|
||||
'tours.horse.access.value.other': 'قاعدة أخرى',
|
||||
'tours.horse.access.value.unknown': 'غير موجود في البيانات',
|
||||
'tours.horse.access.summary.open': 'مفتوح للفرسان حسب البيانات',
|
||||
'tours.horse.access.summary.limited': 'مقيّد جزئيًا',
|
||||
'tours.horse.access.summary.closed': 'مغلق جزئيًا',
|
||||
'tours.horse.access.summary.unknown': 'الوصول غير موجود في البيانات',
|
||||
'tours.horse.leg.info': 'مقطع من مسار فروسية معلّم من OpenStreetMap. وصول الخيل: {access}',
|
||||
'tours.horse.leg.manual': 'يدوي، غير مُتحقق منه',
|
||||
'tours.horse.leg.manualInfo': 'مرسوم باليد، مستقيم. لم يتحقق منه أي مسار فروسية ولا أي مخطط مسارات.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1003,5 +1003,63 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Göllər sahilə yaxın planlaşdırılıb.',
|
||||
'tours.paddle.status.unrouted': '{count} hissə planlaşdırılmayıb',
|
||||
'tours.paddle.status.unrouted.one': '{count} hissə planlaşdırılmayıb',
|
||||
'tourTypes.horse': 'At gəzintisi',
|
||||
'tours.planner.tourTypeHint.horse': 'At belində, nişanlanmış atçılıq marşrutları ilə',
|
||||
'tours.planner.namePlaceholder.horse': 'Adsız at gəzintisi',
|
||||
'tours.horse.time': 'Sürmə vaxtı',
|
||||
'tours.horse.timeInfoLabel': 'Niyə sürmə vaxtı yoxdur',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK sürmə vaxtını hesablamır: tempi at və süvari müəyyən edir. İstəsən, planlaşdırılan ümumi vaxtı özün daxil et.',
|
||||
'tours.horse.routes.title': 'Atçılıq marşrutları',
|
||||
'tours.horse.routes.infoLabel': 'Atçılıq marşrutları haqqında',
|
||||
'tours.horse.routes.info':
|
||||
'OpenStreetMap-dən nişanlanmış atçılıq marşrutları, tam götürülən hissələrlə. Yolun marşruta aid olması orada at sürməyə icazə vermir.',
|
||||
'tours.horse.routes.search': 'Xəritə görünüşündə axtar',
|
||||
'tours.horse.routes.searchAgain': 'Bu görünüşdə axtar',
|
||||
'tours.horse.routes.loading': 'Atçılıq marşrutları axtarılır…',
|
||||
'tours.horse.routes.zoomIn': 'Atçılıq marşrutları axtarmaq üçün daha çox yaxınlaşdır.',
|
||||
'tours.horse.routes.offline': 'Atçılıq marşrutları üçün bağlantı lazımdır.',
|
||||
'tours.horse.routes.failed': 'Atçılıq marşrutları oxunmadı. Gəzintin dəyişmədi.',
|
||||
'tours.horse.routes.none': 'Bu görünüşdə nişanlanmış atçılıq marşrutu yoxdur.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Burada bir axtarışın göstərdiyindən çox marşrut var. Hamısını görmək üçün yaxınlaşdır.',
|
||||
'tours.horse.routes.unnamed': 'Adsız atçılıq marşrutu',
|
||||
'tours.horse.routes.sections': 'Hissələr',
|
||||
'tours.horse.routes.continues': 'Görünüşdən kənarda davam edir',
|
||||
'tours.horse.dialog.eyebrow': 'Atçılıq marşrutu',
|
||||
'tours.horse.dialog.osm': 'OpenStreetMap-də aç',
|
||||
'tours.horse.dialog.section': 'Hissə {number}',
|
||||
'tours.horse.dialog.direction': 'İstiqamət',
|
||||
'tours.horse.dialog.asMapped': 'Xəritədəki kimi',
|
||||
'tours.horse.dialog.reversed': 'Əks',
|
||||
'tours.horse.dialog.signedWith': 'Bu istiqamətdə nişanlanıb',
|
||||
'tours.horse.dialog.signedAgainst': 'Bu hissə əks istiqamətdə nişanlanıb.',
|
||||
'tours.horse.dialog.connection': 'Gəzintiyə qoşulma',
|
||||
'tours.horse.dialog.firstSection': 'Gəzintini başladır',
|
||||
'tours.horse.dialog.joins': 'Gəzintinin sonuna qoşulur',
|
||||
'tours.horse.dialog.gap': 'Gəzintinin sonu ilə bu hissə arasında atçılıq marşrutu olmayan {distance} var.',
|
||||
'tours.horse.dialog.joinGap': 'Əl ilə çəkilmiş hissə ilə birləşdir',
|
||||
'tours.horse.dialog.joinGapHint': 'Düz çəkilib və yoxlanılmayıb',
|
||||
'tours.horse.dialog.adopt': 'Hissəni götür',
|
||||
'tours.horse.access.title': 'At üçün giriş',
|
||||
'tours.horse.access.note':
|
||||
'OpenStreetMap-in yollar boyunca horse=* kimi qeyd etdikləri. Məlumatlar çatışmaya və ya köhnə ola bilər; yerdəki lövhələr əsasdır.',
|
||||
'tours.horse.access.closedNotice': 'Bu hissənin bir qismi atlar üçün bağlı və ya şəxsi kimi qeyd olunub.',
|
||||
'tours.horse.access.value.designated': 'Süvarilər üçün ayrılıb',
|
||||
'tours.horse.access.value.yes': 'İcazəlidir',
|
||||
'tours.horse.access.value.permissive': 'Sahibi tərəfindən dözülür',
|
||||
'tours.horse.access.value.destination': 'Yalnız təyinat üçün',
|
||||
'tours.horse.access.value.discouraged': 'Tövsiyə olunmur',
|
||||
'tours.horse.access.value.private': 'Şəxsi',
|
||||
'tours.horse.access.value.no': 'Qadağandır',
|
||||
'tours.horse.access.value.other': 'Başqa qayda',
|
||||
'tours.horse.access.value.unknown': 'Məlumatlarda yoxdur',
|
||||
'tours.horse.access.summary.open': 'Məlumatlara görə süvarilərə açıqdır',
|
||||
'tours.horse.access.summary.limited': 'Qismən məhdud',
|
||||
'tours.horse.access.summary.closed': 'Qismən bağlı',
|
||||
'tours.horse.access.summary.unknown': 'Giriş məlumatlarda yoxdur',
|
||||
'tours.horse.leg.info': 'OpenStreetMap-dən nişanlanmış atçılıq marşrutunun hissəsi. At üçün giriş: {access}',
|
||||
'tours.horse.leg.manual': 'Əl ilə, yoxlanılmayıb',
|
||||
'tours.horse.leg.manualInfo': 'Əl ilə, düz çəkilib. Nə atçılıq marşrutu, nə də marşrut planlayıcısı yoxlayıb.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1014,5 +1014,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Os lagos estão planejados perto da margem.',
|
||||
'tours.paddle.status.unrouted': '{count} trechos não planejados',
|
||||
'tours.paddle.status.unrouted.one': '{count} trecho não planejado',
|
||||
'tourTypes.horse': 'Passeio a cavalo',
|
||||
'tours.planner.tourTypeHint.horse': 'A cavalo, por rotas equestres sinalizadas',
|
||||
'tours.planner.namePlaceholder.horse': 'Passeio a cavalo sem título',
|
||||
'tours.horse.time': 'Tempo a cavalo',
|
||||
'tours.horse.timeInfoLabel': 'Por que não há tempo a cavalo',
|
||||
'tours.horse.timeInfo':
|
||||
'O TREK não calcula tempo a cavalo: o ritmo é do cavalo e de quem monta. Se quiser, informe você mesmo um total planejado.',
|
||||
'tours.horse.routes.title': 'Rotas equestres',
|
||||
'tours.horse.routes.infoLabel': 'Sobre as rotas equestres',
|
||||
'tours.horse.routes.info':
|
||||
'Rotas equestres sinalizadas do OpenStreetMap, em trechos que você adota inteiros. Fazer parte de uma rota não dá permissão para percorrê-la a cavalo.',
|
||||
'tours.horse.routes.search': 'Buscar na área do mapa',
|
||||
'tours.horse.routes.searchAgain': 'Buscar nesta área',
|
||||
'tours.horse.routes.loading': 'Procurando rotas equestres…',
|
||||
'tours.horse.routes.zoomIn': 'Aproxime mais o mapa para procurar rotas equestres.',
|
||||
'tours.horse.routes.offline': 'As rotas equestres precisam de conexão.',
|
||||
'tours.horse.routes.failed': 'Não foi possível ler as rotas equestres. Seu passeio não mudou.',
|
||||
'tours.horse.routes.none': 'Nenhuma rota equestre sinalizada nesta área.',
|
||||
'tours.horse.routes.truncated': 'Há mais rotas aqui do que uma busca mostra. Aproxime o mapa para ver todas.',
|
||||
'tours.horse.routes.unnamed': 'Rota equestre sem nome',
|
||||
'tours.horse.routes.sections': 'Trechos',
|
||||
'tours.horse.routes.continues': 'Continua além da área',
|
||||
'tours.horse.dialog.eyebrow': 'Rota equestre',
|
||||
'tours.horse.dialog.osm': 'Abrir no OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Trecho {number}',
|
||||
'tours.horse.dialog.direction': 'Sentido',
|
||||
'tours.horse.dialog.asMapped': 'Como mapeado',
|
||||
'tours.horse.dialog.reversed': 'Invertido',
|
||||
'tours.horse.dialog.signedWith': 'Sinalizado neste sentido',
|
||||
'tours.horse.dialog.signedAgainst': 'Este trecho é sinalizado no sentido contrário.',
|
||||
'tours.horse.dialog.connection': 'Ligação com seu passeio',
|
||||
'tours.horse.dialog.firstSection': 'Começa seu passeio',
|
||||
'tours.horse.dialog.joins': 'Liga-se ao fim do seu passeio',
|
||||
'tours.horse.dialog.gap': 'Entre o fim do seu passeio e este trecho há {distance} sem rota equestre.',
|
||||
'tours.horse.dialog.joinGap': 'Ligar com um trecho manual',
|
||||
'tours.horse.dialog.joinGapHint': 'Traçado reto e não verificado',
|
||||
'tours.horse.dialog.adopt': 'Adotar trecho',
|
||||
'tours.horse.access.title': 'Acesso a cavalo',
|
||||
'tours.horse.access.note':
|
||||
'O que o OpenStreetMap registra como horse=* ao longo das vias. Os dados podem faltar ou estar desatualizados; valem as placas no local.',
|
||||
'tours.horse.access.closedNotice': 'Parte deste trecho está registrada como proibida ou particular para cavalos.',
|
||||
'tours.horse.access.value.designated': 'Destinado a cavaleiros',
|
||||
'tours.horse.access.value.yes': 'Permitido',
|
||||
'tours.horse.access.value.permissive': 'Tolerado pelo proprietário',
|
||||
'tours.horse.access.value.destination': 'Somente acesso local',
|
||||
'tours.horse.access.value.discouraged': 'Desaconselhado',
|
||||
'tours.horse.access.value.private': 'Particular',
|
||||
'tours.horse.access.value.no': 'Proibido',
|
||||
'tours.horse.access.value.other': 'Outra regra',
|
||||
'tours.horse.access.value.unknown': 'Fora dos dados',
|
||||
'tours.horse.access.summary.open': 'Aberto a cavaleiros segundo os dados',
|
||||
'tours.horse.access.summary.limited': 'Restrito em parte',
|
||||
'tours.horse.access.summary.closed': 'Proibido em parte',
|
||||
'tours.horse.access.summary.unknown': 'Acesso fora dos dados',
|
||||
'tours.horse.leg.info': 'Trecho de uma rota equestre sinalizada do OpenStreetMap. Acesso a cavalo: {access}',
|
||||
'tours.horse.leg.manual': 'Manual, não verificado',
|
||||
'tours.horse.leg.manualInfo': 'Traçado à mão, em linha reta. Nenhuma rota equestre e nenhum roteador o verificou.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1015,5 +1015,64 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Els llacs estan planificats a prop de la riba.',
|
||||
'tours.paddle.status.unrouted': '{count} trams sense planificar',
|
||||
'tours.paddle.status.unrouted.one': '{count} tram sense planificar',
|
||||
'tourTypes.horse': 'Ruta a cavall',
|
||||
'tours.planner.tourTypeHint.horse': 'A cavall, per rutes eqüestres senyalitzades',
|
||||
'tours.planner.namePlaceholder.horse': 'Ruta a cavall sense títol',
|
||||
'tours.horse.time': 'Temps a cavall',
|
||||
'tours.horse.timeInfoLabel': 'Per què no hi ha temps a cavall',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK no calcula cap temps a cavall: el ritme el marquen el cavall i el genet. Si vols, introdueix tu mateix un total previst.',
|
||||
'tours.horse.routes.title': 'Rutes eqüestres',
|
||||
'tours.horse.routes.infoLabel': 'Sobre les rutes eqüestres',
|
||||
'tours.horse.routes.info':
|
||||
"Rutes eqüestres senyalitzades d'OpenStreetMap, en trams que s'agafen sencers. Formar part d'una ruta no dona permís per fer-la a cavall.",
|
||||
'tours.horse.routes.search': 'Cerca a la vista',
|
||||
'tours.horse.routes.searchAgain': 'Cerca en aquesta vista',
|
||||
'tours.horse.routes.loading': "S'estan cercant rutes eqüestres…",
|
||||
'tours.horse.routes.zoomIn': 'Apropa més el mapa per cercar rutes eqüestres.',
|
||||
'tours.horse.routes.offline': 'Les rutes eqüestres necessiten connexió.',
|
||||
'tours.horse.routes.failed': "No s'han pogut llegir les rutes eqüestres. La teva ruta no ha canviat.",
|
||||
'tours.horse.routes.none': 'No hi ha rutes eqüestres senyalitzades en aquesta vista.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Aquí hi ha més rutes de les que mostra una cerca. Apropa el mapa per veure-les totes.',
|
||||
'tours.horse.routes.unnamed': 'Ruta eqüestre sense nom',
|
||||
'tours.horse.routes.sections': 'Trams',
|
||||
'tours.horse.routes.continues': 'Continua fora de la vista',
|
||||
'tours.horse.dialog.eyebrow': 'Ruta eqüestre',
|
||||
'tours.horse.dialog.osm': 'Obre a OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Tram {number}',
|
||||
'tours.horse.dialog.direction': 'Sentit',
|
||||
'tours.horse.dialog.asMapped': 'Tal com està cartografiat',
|
||||
'tours.horse.dialog.reversed': 'Invertit',
|
||||
'tours.horse.dialog.signedWith': 'Senyalitzat en aquest sentit',
|
||||
'tours.horse.dialog.signedAgainst': 'Aquest tram està senyalitzat en sentit contrari.',
|
||||
'tours.horse.dialog.connection': 'Enllaç amb la teva ruta',
|
||||
'tours.horse.dialog.firstSection': 'Comença la teva ruta',
|
||||
'tours.horse.dialog.joins': 'Enllaça amb el final de la teva ruta',
|
||||
'tours.horse.dialog.gap': 'Entre el final de la teva ruta i aquest tram hi ha {distance} sense ruta eqüestre.',
|
||||
'tours.horse.dialog.joinGap': 'Uneix amb un tram manual',
|
||||
'tours.horse.dialog.joinGapHint': 'Traçat recte i sense comprovar',
|
||||
'tours.horse.dialog.adopt': 'Agafa el tram',
|
||||
'tours.horse.access.title': 'Accés a cavall',
|
||||
'tours.horse.access.note':
|
||||
'El que OpenStreetMap indica com a horse=* al llarg dels camins. Les dades poden faltar o estar desfasades; valen els senyals sobre el terreny.',
|
||||
'tours.horse.access.closedNotice': 'Part d’aquest tram consta com a prohibida o privada per als cavalls.',
|
||||
'tours.horse.access.value.designated': 'Reservat als genets',
|
||||
'tours.horse.access.value.yes': 'Permès',
|
||||
'tours.horse.access.value.permissive': 'Tolerat pel propietari',
|
||||
'tours.horse.access.value.destination': 'Només accés a destinació',
|
||||
'tours.horse.access.value.discouraged': 'Desaconsellat',
|
||||
'tours.horse.access.value.private': 'Privat',
|
||||
'tours.horse.access.value.no': 'Prohibit',
|
||||
'tours.horse.access.value.other': 'Una altra regla',
|
||||
'tours.horse.access.value.unknown': 'Sense dades',
|
||||
'tours.horse.access.summary.open': 'Obert als genets segons les dades',
|
||||
'tours.horse.access.summary.limited': 'Restringit en part',
|
||||
'tours.horse.access.summary.closed': 'Prohibit en part',
|
||||
'tours.horse.access.summary.unknown': 'Accés sense dades',
|
||||
'tours.horse.leg.info': "Tram d'una ruta eqüestre senyalitzada d'OpenStreetMap. Accés a cavall: {access}",
|
||||
'tours.horse.leg.manual': 'Manual, sense comprovar',
|
||||
'tours.horse.leg.manualInfo':
|
||||
"Traçat a mà, en línia recta. Ni una ruta eqüestre ni un planificador no l'ha comprovat.",
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1003,5 +1003,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.status.unrouted': '{count} úseků nenaplánováno',
|
||||
'tours.paddle.status.unrouted.one': '{count} úsek nenaplánován',
|
||||
'tours.paddle.status.unrouted.few': '{count} úseky nenaplánovány',
|
||||
'tourTypes.horse': 'Vyjížďka na koni',
|
||||
'tours.planner.tourTypeHint.horse': 'Na koni, po značených jezdeckých trasách',
|
||||
'tours.planner.namePlaceholder.horse': 'Vyjížďka bez názvu',
|
||||
'tours.horse.time': 'Doba jízdy',
|
||||
'tours.horse.timeInfoLabel': 'Proč tu není doba jízdy',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK dobu jízdy nepočítá: tempo určuje kůň a jezdec. Pokud chceš, zadej plánovaný celkový čas sám.',
|
||||
'tours.horse.routes.title': 'Jezdecké trasy',
|
||||
'tours.horse.routes.infoLabel': 'O jezdeckých trasách',
|
||||
'tours.horse.routes.info':
|
||||
'Značené jezdecké trasy z OpenStreetMap, po úsecích, které převezmeš celé. To, že cesta patří k trase, neznamená, že po ní smíš jet na koni.',
|
||||
'tours.horse.routes.search': 'Hledat ve výřezu mapy',
|
||||
'tours.horse.routes.searchAgain': 'Prohledat tento výřez',
|
||||
'tours.horse.routes.loading': 'Hledají se jezdecké trasy…',
|
||||
'tours.horse.routes.zoomIn': 'Přibliž mapu ještě víc a hledej jezdecké trasy.',
|
||||
'tours.horse.routes.offline': 'Jezdecké trasy potřebují připojení.',
|
||||
'tours.horse.routes.failed': 'Jezdecké trasy se nepodařilo načíst. Tvoje vyjížďka zůstává beze změny.',
|
||||
'tours.horse.routes.none': 'V tomto výřezu nejsou žádné značené jezdecké trasy.',
|
||||
'tours.horse.routes.truncated': 'Je tu víc tras, než ukáže jedno hledání. Přibliž mapu, abys viděl všechny.',
|
||||
'tours.horse.routes.unnamed': 'Jezdecká trasa bez názvu',
|
||||
'tours.horse.routes.sections': 'Úseky',
|
||||
'tours.horse.routes.continues': 'Pokračuje mimo výřez',
|
||||
'tours.horse.dialog.eyebrow': 'Jezdecká trasa',
|
||||
'tours.horse.dialog.osm': 'Otevřít v OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Úsek {number}',
|
||||
'tours.horse.dialog.direction': 'Směr',
|
||||
'tours.horse.dialog.asMapped': 'Jak je zmapováno',
|
||||
'tours.horse.dialog.reversed': 'Obráceně',
|
||||
'tours.horse.dialog.signedWith': 'Značeno tímto směrem',
|
||||
'tours.horse.dialog.signedAgainst': 'Tento úsek je značen opačným směrem.',
|
||||
'tours.horse.dialog.connection': 'Napojení na vyjížďku',
|
||||
'tours.horse.dialog.firstSection': 'Začíná tvou vyjížďku',
|
||||
'tours.horse.dialog.joins': 'Navazuje na konec tvé vyjížďky',
|
||||
'tours.horse.dialog.gap': 'Mezi koncem tvé vyjížďky a tímto úsekem je {distance} bez jezdecké trasy.',
|
||||
'tours.horse.dialog.joinGap': 'Propojit ručním úsekem',
|
||||
'tours.horse.dialog.joinGapHint': 'Nakresleno rovně a neověřeno',
|
||||
'tours.horse.dialog.adopt': 'Převzít úsek',
|
||||
'tours.horse.access.title': 'Přístup pro koně',
|
||||
'tours.horse.access.note':
|
||||
'Co OpenStreetMap podél cest uvádí jako horse=*. Údaje mohou chybět nebo být zastaralé; platí značení na místě.',
|
||||
'tours.horse.access.closedNotice': 'Část tohoto úseku je pro koně uvedena jako zakázaná nebo soukromá.',
|
||||
'tours.horse.access.value.designated': 'Vyhrazeno pro jezdce',
|
||||
'tours.horse.access.value.yes': 'Povoleno',
|
||||
'tours.horse.access.value.permissive': 'Trpěno vlastníkem',
|
||||
'tours.horse.access.value.destination': 'Jen pro dopravní obsluhu',
|
||||
'tours.horse.access.value.discouraged': 'Nedoporučeno',
|
||||
'tours.horse.access.value.private': 'Soukromé',
|
||||
'tours.horse.access.value.no': 'Zakázáno',
|
||||
'tours.horse.access.value.other': 'Jiné pravidlo',
|
||||
'tours.horse.access.value.unknown': 'V datech chybí',
|
||||
'tours.horse.access.summary.open': 'Podle dat otevřeno pro jezdce',
|
||||
'tours.horse.access.summary.limited': 'Částečně omezeno',
|
||||
'tours.horse.access.summary.closed': 'Částečně zakázáno',
|
||||
'tours.horse.access.summary.unknown': 'Přístup v datech chybí',
|
||||
'tours.horse.leg.info': 'Úsek značené jezdecké trasy z OpenStreetMap. Přístup pro koně: {access}',
|
||||
'tours.horse.leg.manual': 'Ručně, neověřeno',
|
||||
'tours.horse.leg.manualInfo': 'Nakresleno ručně, rovně. Neověřila ho žádná jezdecká trasa ani plánovač.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1020,6 +1020,63 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Die Seen sind ufernah geplant.',
|
||||
'tours.paddle.status.unrouted': '{count} Abschnitte nicht geplant',
|
||||
'tours.paddle.status.unrouted.one': '{count} Abschnitt nicht geplant',
|
||||
'tourTypes.horse': 'Ausritt',
|
||||
'tours.planner.tourTypeHint.horse': 'Zu Pferd, auf ausgeschilderten Reitrouten',
|
||||
'tours.planner.namePlaceholder.horse': 'Unbenannter Ausritt',
|
||||
'tours.horse.time': 'Reitzeit',
|
||||
'tours.horse.timeInfoLabel': 'Warum es keine Reitzeit gibt',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK berechnet keine Reitzeit: Das Tempo bestimmen Pferd und Reiter. Trag bei Bedarf selbst eine geplante Gesamtzeit ein.',
|
||||
'tours.horse.routes.title': 'Reitrouten',
|
||||
'tours.horse.routes.infoLabel': 'Über Reitrouten',
|
||||
'tours.horse.routes.info':
|
||||
'Ausgeschilderte Reitrouten aus OpenStreetMap, in Abschnitten, die du ganz übernimmst. Dass ein Weg zu einer Route gehört, erlaubt nicht, ihn zu reiten.',
|
||||
'tours.horse.routes.search': 'Im Kartenausschnitt suchen',
|
||||
'tours.horse.routes.searchAgain': 'Diesen Ausschnitt durchsuchen',
|
||||
'tours.horse.routes.loading': 'Suche Reitrouten…',
|
||||
'tours.horse.routes.zoomIn': 'Zoome weiter hinein, um nach Reitrouten zu suchen.',
|
||||
'tours.horse.routes.offline': 'Reitrouten brauchen eine Verbindung.',
|
||||
'tours.horse.routes.failed': 'Reitrouten konnten nicht gelesen werden. Dein Ausritt bleibt unverändert.',
|
||||
'tours.horse.routes.none': 'Keine ausgeschilderten Reitrouten in diesem Ausschnitt.',
|
||||
'tours.horse.routes.truncated': 'Hier gibt es mehr Routen, als eine Suche zeigt. Zoome hinein, um alle zu sehen.',
|
||||
'tours.horse.routes.unnamed': 'Reitroute ohne Namen',
|
||||
'tours.horse.routes.sections': 'Abschnitte',
|
||||
'tours.horse.routes.continues': 'Geht über den Ausschnitt hinaus',
|
||||
'tours.horse.dialog.eyebrow': 'Reitroute',
|
||||
'tours.horse.dialog.osm': 'In OpenStreetMap öffnen',
|
||||
'tours.horse.dialog.section': 'Abschnitt {number}',
|
||||
'tours.horse.dialog.direction': 'Richtung',
|
||||
'tours.horse.dialog.asMapped': 'Wie erfasst',
|
||||
'tours.horse.dialog.reversed': 'Umgekehrt',
|
||||
'tours.horse.dialog.signedWith': 'In dieser Richtung ausgeschildert',
|
||||
'tours.horse.dialog.signedAgainst': 'Dieser Abschnitt ist in der Gegenrichtung ausgeschildert.',
|
||||
'tours.horse.dialog.connection': 'Anschluss an deinen Ausritt',
|
||||
'tours.horse.dialog.firstSection': 'Beginnt deinen Ausritt',
|
||||
'tours.horse.dialog.joins': 'Schließt ans Ende deines Ausritts an',
|
||||
'tours.horse.dialog.gap': 'Zwischen dem Ende deines Ausritts und diesem Abschnitt liegen {distance} ohne Reitroute.',
|
||||
'tours.horse.dialog.joinGap': 'Mit manuellem Abschnitt verbinden',
|
||||
'tours.horse.dialog.joinGapHint': 'Gerade gezogen und ungeprüft',
|
||||
'tours.horse.dialog.adopt': 'Abschnitt übernehmen',
|
||||
'tours.horse.access.title': 'Reitzugang',
|
||||
'tours.horse.access.note':
|
||||
'Was OpenStreetMap entlang der Wege als horse=* erfasst. Angaben können fehlen oder veraltet sein; vor Ort gelten die Schilder.',
|
||||
'tours.horse.access.closedNotice': 'Ein Teil dieses Abschnitts ist für Pferde als gesperrt oder privat erfasst.',
|
||||
'tours.horse.access.value.designated': 'Als Reitweg ausgewiesen',
|
||||
'tours.horse.access.value.yes': 'Erlaubt',
|
||||
'tours.horse.access.value.permissive': 'Vom Eigentümer geduldet',
|
||||
'tours.horse.access.value.destination': 'Nur Anlieger',
|
||||
'tours.horse.access.value.discouraged': 'Nicht empfohlen',
|
||||
'tours.horse.access.value.private': 'Privat',
|
||||
'tours.horse.access.value.no': 'Verboten',
|
||||
'tours.horse.access.value.other': 'Andere Regel',
|
||||
'tours.horse.access.value.unknown': 'Nicht in den Daten',
|
||||
'tours.horse.access.summary.open': 'Laut Daten offen für Reiter',
|
||||
'tours.horse.access.summary.limited': 'Teils eingeschränkt',
|
||||
'tours.horse.access.summary.closed': 'Teils gesperrt',
|
||||
'tours.horse.access.summary.unknown': 'Zugang nicht in den Daten',
|
||||
'tours.horse.leg.info': 'Abschnitt einer ausgeschilderten Reitroute aus OpenStreetMap. Reitzugang: {access}',
|
||||
'tours.horse.leg.manual': 'Manuell, ungeprüft',
|
||||
'tours.horse.leg.manualInfo': 'Von Hand gezogen, gerade. Weder eine Reitroute noch ein Router hat ihn geprüft.',
|
||||
};
|
||||
|
||||
export default tours;
|
||||
|
||||
@@ -991,5 +991,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'The lakes are planned near the shore.',
|
||||
'tours.paddle.status.unrouted': '{count} legs not planned',
|
||||
'tours.paddle.status.unrouted.one': '{count} leg not planned',
|
||||
'tourTypes.horse': 'Horse ride',
|
||||
'tours.planner.tourTypeHint.horse': 'On horseback, along signposted horse routes',
|
||||
'tours.planner.namePlaceholder.horse': 'Untitled ride',
|
||||
'tours.horse.time': 'Riding time',
|
||||
'tours.horse.timeInfoLabel': 'Why there is no riding time',
|
||||
'tours.horse.timeInfo':
|
||||
"TREK works out no riding time: the pace is the horse's and the rider's. Enter a planned total yourself if you want one.",
|
||||
'tours.horse.routes.title': 'Horse routes',
|
||||
'tours.horse.routes.infoLabel': 'About horse routes',
|
||||
'tours.horse.routes.info':
|
||||
'Signposted horse routes from OpenStreetMap, in sections you take whole. Being on a route is no permission to ride it.',
|
||||
'tours.horse.routes.search': 'Find in map view',
|
||||
'tours.horse.routes.searchAgain': 'Search this view',
|
||||
'tours.horse.routes.loading': 'Looking for horse routes…',
|
||||
'tours.horse.routes.zoomIn': 'Zoom in further to look for horse routes.',
|
||||
'tours.horse.routes.offline': 'Horse routes need a connection.',
|
||||
'tours.horse.routes.failed': 'Horse routes could not be read. Your ride is unchanged.',
|
||||
'tours.horse.routes.none': 'No signposted horse routes in this view.',
|
||||
'tours.horse.routes.truncated': 'There are more routes here than one search shows. Zoom in to see them all.',
|
||||
'tours.horse.routes.unnamed': 'Unnamed horse route',
|
||||
'tours.horse.routes.sections': 'Sections',
|
||||
'tours.horse.routes.continues': 'Goes on beyond the view',
|
||||
'tours.horse.dialog.eyebrow': 'Horse route',
|
||||
'tours.horse.dialog.osm': 'Open in OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Section {number}',
|
||||
'tours.horse.dialog.direction': 'Direction',
|
||||
'tours.horse.dialog.asMapped': 'As mapped',
|
||||
'tours.horse.dialog.reversed': 'Reversed',
|
||||
'tours.horse.dialog.signedWith': 'Signposted this way',
|
||||
'tours.horse.dialog.signedAgainst': 'This section is signposted the other way.',
|
||||
'tours.horse.dialog.connection': 'Joining your ride',
|
||||
'tours.horse.dialog.firstSection': 'Starts your ride',
|
||||
'tours.horse.dialog.joins': 'Joins the end of your ride',
|
||||
'tours.horse.dialog.gap': '{distance} lie between the end of your ride and this section, on no horse route.',
|
||||
'tours.horse.dialog.joinGap': 'Join with a manual section',
|
||||
'tours.horse.dialog.joinGapHint': 'Drawn straight and unchecked',
|
||||
'tours.horse.dialog.adopt': 'Take section',
|
||||
'tours.horse.access.title': 'Riding access',
|
||||
'tours.horse.access.note':
|
||||
'What OpenStreetMap tags as horse=* along the ways. Tags can be missing or out of date; the signs on site count.',
|
||||
'tours.horse.access.closedNotice': 'Part of this section is tagged as closed or private for horses.',
|
||||
'tours.horse.access.value.designated': 'Designated for riders',
|
||||
'tours.horse.access.value.yes': 'Allowed',
|
||||
'tours.horse.access.value.permissive': 'Permitted by the owner',
|
||||
'tours.horse.access.value.destination': 'Access only',
|
||||
'tours.horse.access.value.discouraged': 'Discouraged',
|
||||
'tours.horse.access.value.private': 'Private',
|
||||
'tours.horse.access.value.no': 'Not allowed',
|
||||
'tours.horse.access.value.other': 'Other rule',
|
||||
'tours.horse.access.value.unknown': 'Not in the data',
|
||||
'tours.horse.access.summary.open': 'Open to riders as tagged',
|
||||
'tours.horse.access.summary.limited': 'Restricted in part',
|
||||
'tours.horse.access.summary.closed': 'Closed in part',
|
||||
'tours.horse.access.summary.unknown': 'Access not in the data',
|
||||
'tours.horse.leg.info': 'A section of a signposted horse route from OpenStreetMap. Riding access: {access}',
|
||||
'tours.horse.leg.manual': 'Manual, unchecked',
|
||||
'tours.horse.leg.manualInfo': 'Drawn by hand, straight. No horse route and no router checked it.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1011,5 +1011,63 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Los lagos están planificados cerca de la orilla.',
|
||||
'tours.paddle.status.unrouted': '{count} tramos sin planificar',
|
||||
'tours.paddle.status.unrouted.one': '{count} tramo sin planificar',
|
||||
'tourTypes.horse': 'Ruta a caballo',
|
||||
'tours.planner.tourTypeHint.horse': 'A caballo, por rutas ecuestres señalizadas',
|
||||
'tours.planner.namePlaceholder.horse': 'Ruta a caballo sin título',
|
||||
'tours.horse.time': 'Tiempo a caballo',
|
||||
'tours.horse.timeInfoLabel': 'Por qué no hay tiempo a caballo',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK no calcula ningún tiempo a caballo: el ritmo lo marcan el caballo y el jinete. Si quieres, introduce tú mismo un total previsto.',
|
||||
'tours.horse.routes.title': 'Rutas ecuestres',
|
||||
'tours.horse.routes.infoLabel': 'Sobre las rutas ecuestres',
|
||||
'tours.horse.routes.info':
|
||||
'Rutas ecuestres señalizadas de OpenStreetMap, en tramos que se toman enteros. Formar parte de una ruta no da permiso para recorrerla a caballo.',
|
||||
'tours.horse.routes.search': 'Buscar en la vista',
|
||||
'tours.horse.routes.searchAgain': 'Buscar en esta vista',
|
||||
'tours.horse.routes.loading': 'Buscando rutas ecuestres…',
|
||||
'tours.horse.routes.zoomIn': 'Acerca más el mapa para buscar rutas ecuestres.',
|
||||
'tours.horse.routes.offline': 'Las rutas ecuestres necesitan conexión.',
|
||||
'tours.horse.routes.failed': 'No se pudieron leer las rutas ecuestres. Tu ruta no ha cambiado.',
|
||||
'tours.horse.routes.none': 'No hay rutas ecuestres señalizadas en esta vista.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Aquí hay más rutas de las que muestra una búsqueda. Acerca el mapa para verlas todas.',
|
||||
'tours.horse.routes.unnamed': 'Ruta ecuestre sin nombre',
|
||||
'tours.horse.routes.sections': 'Tramos',
|
||||
'tours.horse.routes.continues': 'Continúa fuera de la vista',
|
||||
'tours.horse.dialog.eyebrow': 'Ruta ecuestre',
|
||||
'tours.horse.dialog.osm': 'Abrir en OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Tramo {number}',
|
||||
'tours.horse.dialog.direction': 'Sentido',
|
||||
'tours.horse.dialog.asMapped': 'Como está cartografiado',
|
||||
'tours.horse.dialog.reversed': 'Invertido',
|
||||
'tours.horse.dialog.signedWith': 'Señalizado en este sentido',
|
||||
'tours.horse.dialog.signedAgainst': 'Este tramo está señalizado en el sentido contrario.',
|
||||
'tours.horse.dialog.connection': 'Conexión con tu ruta',
|
||||
'tours.horse.dialog.firstSection': 'Comienza tu ruta',
|
||||
'tours.horse.dialog.joins': 'Enlaza con el final de tu ruta',
|
||||
'tours.horse.dialog.gap': 'Entre el final de tu ruta y este tramo hay {distance} sin ruta ecuestre.',
|
||||
'tours.horse.dialog.joinGap': 'Unir con un tramo manual',
|
||||
'tours.horse.dialog.joinGapHint': 'Trazado recto y sin comprobar',
|
||||
'tours.horse.dialog.adopt': 'Tomar tramo',
|
||||
'tours.horse.access.title': 'Acceso a caballo',
|
||||
'tours.horse.access.note':
|
||||
'Lo que OpenStreetMap indica como horse=* a lo largo de las vías. Los datos pueden faltar o estar desfasados; valen las señales sobre el terreno.',
|
||||
'tours.horse.access.closedNotice': 'Parte de este tramo figura como prohibida o privada para caballos.',
|
||||
'tours.horse.access.value.designated': 'Reservado a jinetes',
|
||||
'tours.horse.access.value.yes': 'Permitido',
|
||||
'tours.horse.access.value.permissive': 'Tolerado por el propietario',
|
||||
'tours.horse.access.value.destination': 'Solo acceso a destino',
|
||||
'tours.horse.access.value.discouraged': 'Desaconsejado',
|
||||
'tours.horse.access.value.private': 'Privado',
|
||||
'tours.horse.access.value.no': 'Prohibido',
|
||||
'tours.horse.access.value.other': 'Otra regla',
|
||||
'tours.horse.access.value.unknown': 'Sin datos',
|
||||
'tours.horse.access.summary.open': 'Abierto a jinetes según los datos',
|
||||
'tours.horse.access.summary.limited': 'Restringido en parte',
|
||||
'tours.horse.access.summary.closed': 'Prohibido en parte',
|
||||
'tours.horse.access.summary.unknown': 'Acceso sin datos',
|
||||
'tours.horse.leg.info': 'Tramo de una ruta ecuestre señalizada de OpenStreetMap. Acceso a caballo: {access}',
|
||||
'tours.horse.leg.manual': 'Manual, sin comprobar',
|
||||
'tours.horse.leg.manualInfo': 'Trazado a mano, en línea recta. Ni una ruta ecuestre ni un planificador lo comprobó.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -998,5 +998,63 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Järved on planeeritud kalda lähedale.',
|
||||
'tours.paddle.status.unrouted': '{count} lõiku planeerimata',
|
||||
'tours.paddle.status.unrouted.one': '{count} lõik planeerimata',
|
||||
'tourTypes.horse': 'Ratsamatk',
|
||||
'tours.planner.tourTypeHint.horse': 'Hobusel, märgistatud ratsaradadel',
|
||||
'tours.planner.namePlaceholder.horse': 'Nimetu ratsamatk',
|
||||
'tours.horse.time': 'Ratsutamisaeg',
|
||||
'tours.horse.timeInfoLabel': 'Miks ratsutamisaega pole',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK ratsutamisaega ei arvuta: tempo sõltub hobusest ja ratsanikust. Soovi korral sisesta kavandatud koguaeg ise.',
|
||||
'tours.horse.routes.title': 'Ratsarajad',
|
||||
'tours.horse.routes.infoLabel': 'Ratsaradadest',
|
||||
'tours.horse.routes.info':
|
||||
'Märgistatud ratsarajad OpenStreetMapist, lõikudena, mille võtad tervikuna üle. Rajale kuulumine ei anna luba seal ratsutada.',
|
||||
'tours.horse.routes.search': 'Otsi kaardivaatest',
|
||||
'tours.horse.routes.searchAgain': 'Otsi sellest vaatest',
|
||||
'tours.horse.routes.loading': 'Otsin ratsaradu…',
|
||||
'tours.horse.routes.zoomIn': 'Suumi rohkem sisse, et ratsaradu otsida.',
|
||||
'tours.horse.routes.offline': 'Ratsarajad vajavad ühendust.',
|
||||
'tours.horse.routes.failed': 'Ratsaradu ei õnnestunud lugeda. Sinu matk ei muutunud.',
|
||||
'tours.horse.routes.none': 'Selles vaates pole märgistatud ratsaradu.',
|
||||
'tours.horse.routes.truncated': 'Siin on rohkem radu, kui üks otsing näitab. Suumi sisse, et kõiki näha.',
|
||||
'tours.horse.routes.unnamed': 'Nimetu ratsarada',
|
||||
'tours.horse.routes.sections': 'Lõigud',
|
||||
'tours.horse.routes.continues': 'Jätkub väljaspool vaadet',
|
||||
'tours.horse.dialog.eyebrow': 'Ratsarada',
|
||||
'tours.horse.dialog.osm': 'Ava OpenStreetMapis',
|
||||
'tours.horse.dialog.section': 'Lõik {number}',
|
||||
'tours.horse.dialog.direction': 'Suund',
|
||||
'tours.horse.dialog.asMapped': 'Nagu kaardistatud',
|
||||
'tours.horse.dialog.reversed': 'Vastupidi',
|
||||
'tours.horse.dialog.signedWith': 'Selles suunas märgistatud',
|
||||
'tours.horse.dialog.signedAgainst': 'See lõik on märgistatud vastassuunas.',
|
||||
'tours.horse.dialog.connection': 'Ühendus matkaga',
|
||||
'tours.horse.dialog.firstSection': 'Alustab matka',
|
||||
'tours.horse.dialog.joins': 'Liitub matka lõpuga',
|
||||
'tours.horse.dialog.gap': 'Matka lõpu ja selle lõigu vahel on {distance} ilma ratsarajata.',
|
||||
'tours.horse.dialog.joinGap': 'Ühenda käsitsi lõiguga',
|
||||
'tours.horse.dialog.joinGapHint': 'Sirgelt joonistatud, kontrollimata',
|
||||
'tours.horse.dialog.adopt': 'Võta lõik üle',
|
||||
'tours.horse.access.title': 'Ligipääs hobusega',
|
||||
'tours.horse.access.note':
|
||||
'Mida OpenStreetMap teede ääres märgib kui horse=*. Andmed võivad puududa või olla aegunud; kohapeal kehtivad sildid.',
|
||||
'tours.horse.access.closedNotice': 'Osa sellest lõigust on hobustele märgitud suletuks või eravaldusse kuuluvaks.',
|
||||
'tours.horse.access.value.designated': 'Määratud ratsanikele',
|
||||
'tours.horse.access.value.yes': 'Lubatud',
|
||||
'tours.horse.access.value.permissive': 'Omaniku loal',
|
||||
'tours.horse.access.value.destination': 'Ainult sihtkohta',
|
||||
'tours.horse.access.value.discouraged': 'Ei soovitata',
|
||||
'tours.horse.access.value.private': 'Eravaldus',
|
||||
'tours.horse.access.value.no': 'Keelatud',
|
||||
'tours.horse.access.value.other': 'Muu reegel',
|
||||
'tours.horse.access.value.unknown': 'Andmetes puudub',
|
||||
'tours.horse.access.summary.open': 'Andmete järgi ratsanikele avatud',
|
||||
'tours.horse.access.summary.limited': 'Osaliselt piiratud',
|
||||
'tours.horse.access.summary.closed': 'Osaliselt suletud',
|
||||
'tours.horse.access.summary.unknown': 'Ligipääs andmetes puudub',
|
||||
'tours.horse.leg.info': 'Märgistatud ratsaraja lõik OpenStreetMapist. Ligipääs hobusega: {access}',
|
||||
'tours.horse.leg.manual': 'Käsitsi, kontrollimata',
|
||||
'tours.horse.leg.manualInfo':
|
||||
'Käsitsi joonistatud, sirge. Seda ei kontrollinud ükski ratsarada ega marsruudiplaneerija.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1029,5 +1029,66 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Les lacs sont planifiés près de la rive.',
|
||||
'tours.paddle.status.unrouted': '{count} tronçons non planifiés',
|
||||
'tours.paddle.status.unrouted.one': '{count} tronçon non planifié',
|
||||
'tourTypes.horse': 'Randonnée équestre',
|
||||
'tours.planner.tourTypeHint.horse': 'À cheval, sur des itinéraires équestres balisés',
|
||||
'tours.planner.namePlaceholder.horse': 'Randonnée équestre sans titre',
|
||||
'tours.horse.time': 'Temps à cheval',
|
||||
'tours.horse.timeInfoLabel': "Pourquoi il n'y a pas de temps à cheval",
|
||||
'tours.horse.timeInfo':
|
||||
"TREK ne calcule aucun temps à cheval : l'allure dépend du cheval et du cavalier. Saisissez vous-même une durée totale prévue si besoin.",
|
||||
'tours.horse.routes.title': 'Itinéraires équestres',
|
||||
'tours.horse.routes.infoLabel': 'À propos des itinéraires équestres',
|
||||
'tours.horse.routes.info':
|
||||
"Itinéraires équestres balisés d'OpenStreetMap, en tronçons repris en entier. Faire partie d'un itinéraire n'autorise pas à y monter à cheval.",
|
||||
'tours.horse.routes.search': 'Chercher dans la vue',
|
||||
'tours.horse.routes.searchAgain': 'Chercher dans cette vue',
|
||||
'tours.horse.routes.loading': 'Recherche des itinéraires équestres…',
|
||||
'tours.horse.routes.zoomIn': 'Zoomez davantage pour chercher des itinéraires équestres.',
|
||||
'tours.horse.routes.offline': 'Les itinéraires équestres demandent une connexion.',
|
||||
'tours.horse.routes.failed': "Impossible de lire les itinéraires équestres. Votre randonnée n'a pas changé.",
|
||||
'tours.horse.routes.none': 'Aucun itinéraire équestre balisé dans cette vue.',
|
||||
'tours.horse.routes.truncated':
|
||||
"Il y a plus d'itinéraires ici qu'une recherche n'en montre. Zoomez pour tous les voir.",
|
||||
'tours.horse.routes.unnamed': 'Itinéraire équestre sans nom',
|
||||
'tours.horse.routes.sections': 'Tronçons',
|
||||
'tours.horse.routes.continues': 'Continue au-delà de la vue',
|
||||
'tours.horse.dialog.eyebrow': 'Itinéraire équestre',
|
||||
'tours.horse.dialog.osm': 'Ouvrir dans OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Tronçon {number}',
|
||||
'tours.horse.dialog.direction': 'Sens',
|
||||
'tours.horse.dialog.asMapped': 'Comme cartographié',
|
||||
'tours.horse.dialog.reversed': 'Inversé',
|
||||
'tours.horse.dialog.signedWith': 'Balisé dans ce sens',
|
||||
'tours.horse.dialog.signedAgainst': "Ce tronçon est balisé dans l'autre sens.",
|
||||
'tours.horse.dialog.connection': 'Raccord à votre randonnée',
|
||||
'tours.horse.dialog.firstSection': 'Commence votre randonnée',
|
||||
'tours.horse.dialog.joins': 'Se raccorde à la fin de votre randonnée',
|
||||
'tours.horse.dialog.gap':
|
||||
'{distance} séparent la fin de votre randonnée de ce tronçon, hors de tout itinéraire équestre.',
|
||||
'tours.horse.dialog.joinGap': 'Relier par un tronçon manuel',
|
||||
'tours.horse.dialog.joinGapHint': 'Tracé en ligne droite, non vérifié',
|
||||
'tours.horse.dialog.adopt': 'Reprendre le tronçon',
|
||||
'tours.horse.access.title': 'Accès à cheval',
|
||||
'tours.horse.access.note':
|
||||
"Ce qu'OpenStreetMap indique en horse=* le long des voies. Les données peuvent manquer ou dater ; les panneaux sur place font foi.",
|
||||
'tours.horse.access.closedNotice':
|
||||
'Une partie de ce tronçon est indiquée comme interdite ou privée pour les chevaux.',
|
||||
'tours.horse.access.value.designated': 'Réservé aux cavaliers',
|
||||
'tours.horse.access.value.yes': 'Autorisé',
|
||||
'tours.horse.access.value.permissive': 'Toléré par le propriétaire',
|
||||
'tours.horse.access.value.destination': 'Riverains uniquement',
|
||||
'tours.horse.access.value.discouraged': 'Déconseillé',
|
||||
'tours.horse.access.value.private': 'Privé',
|
||||
'tours.horse.access.value.no': 'Interdit',
|
||||
'tours.horse.access.value.other': 'Autre règle',
|
||||
'tours.horse.access.value.unknown': 'Absent des données',
|
||||
'tours.horse.access.summary.open': 'Ouvert aux cavaliers selon les données',
|
||||
'tours.horse.access.summary.limited': 'En partie restreint',
|
||||
'tours.horse.access.summary.closed': 'En partie interdit',
|
||||
'tours.horse.access.summary.unknown': 'Accès absent des données',
|
||||
'tours.horse.leg.info': "Tronçon d'un itinéraire équestre balisé d'OpenStreetMap. Accès à cheval : {access}",
|
||||
'tours.horse.leg.manual': 'Manuel, non vérifié',
|
||||
'tours.horse.leg.manualInfo':
|
||||
"Tracé à la main, en ligne droite. Ni un itinéraire équestre ni un calculateur d'itinéraire ne l'a vérifié.",
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1030,5 +1030,64 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Οι λίμνες σχεδιάζονται κοντά στην όχθη.',
|
||||
'tours.paddle.status.unrouted': '{count} τμήματα χωρίς σχεδιασμό',
|
||||
'tours.paddle.status.unrouted.one': '{count} τμήμα χωρίς σχεδιασμό',
|
||||
'tourTypes.horse': 'Ιππική βόλτα',
|
||||
'tours.planner.tourTypeHint.horse': 'Με άλογο, σε σηματοδοτημένες ιππικές διαδρομές',
|
||||
'tours.planner.namePlaceholder.horse': 'Ιππική βόλτα χωρίς τίτλο',
|
||||
'tours.horse.time': 'Χρόνος ιππασίας',
|
||||
'tours.horse.timeInfoLabel': 'Γιατί δεν υπάρχει χρόνος ιππασίας',
|
||||
'tours.horse.timeInfo':
|
||||
'Το TREK δεν υπολογίζει χρόνο ιππασίας: τον ρυθμό τον ορίζουν το άλογο και ο αναβάτης. Αν θέλεις, δώσε μόνος σου έναν προγραμματισμένο συνολικό χρόνο.',
|
||||
'tours.horse.routes.title': 'Ιππικές διαδρομές',
|
||||
'tours.horse.routes.infoLabel': 'Σχετικά με τις ιππικές διαδρομές',
|
||||
'tours.horse.routes.info':
|
||||
'Σηματοδοτημένες ιππικές διαδρομές από το OpenStreetMap, σε τμήματα που παίρνεις ολόκληρα. Το ότι ένας δρόμος ανήκει σε διαδρομή δεν δίνει άδεια ιππασίας.',
|
||||
'tours.horse.routes.search': 'Αναζήτηση στην προβολή χάρτη',
|
||||
'tours.horse.routes.searchAgain': 'Αναζήτηση σε αυτή την προβολή',
|
||||
'tours.horse.routes.loading': 'Αναζήτηση ιππικών διαδρομών…',
|
||||
'tours.horse.routes.zoomIn': 'Μεγέθυνε κι άλλο για να αναζητήσεις ιππικές διαδρομές.',
|
||||
'tours.horse.routes.offline': 'Οι ιππικές διαδρομές χρειάζονται σύνδεση.',
|
||||
'tours.horse.routes.failed': 'Δεν διαβάστηκαν οι ιππικές διαδρομές. Η βόλτα σου δεν άλλαξε.',
|
||||
'tours.horse.routes.none': 'Καμία σηματοδοτημένη ιππική διαδρομή σε αυτή την προβολή.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Εδώ υπάρχουν περισσότερες διαδρομές από όσες δείχνει μία αναζήτηση. Μεγέθυνε για να τις δεις όλες.',
|
||||
'tours.horse.routes.unnamed': 'Ιππική διαδρομή χωρίς όνομα',
|
||||
'tours.horse.routes.sections': 'Τμήματα',
|
||||
'tours.horse.routes.continues': 'Συνεχίζει έξω από την προβολή',
|
||||
'tours.horse.dialog.eyebrow': 'Ιππική διαδρομή',
|
||||
'tours.horse.dialog.osm': 'Άνοιγμα στο OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Τμήμα {number}',
|
||||
'tours.horse.dialog.direction': 'Κατεύθυνση',
|
||||
'tours.horse.dialog.asMapped': 'Όπως χαρτογραφήθηκε',
|
||||
'tours.horse.dialog.reversed': 'Αντίστροφα',
|
||||
'tours.horse.dialog.signedWith': 'Σηματοδοτημένο προς αυτή την κατεύθυνση',
|
||||
'tours.horse.dialog.signedAgainst': 'Αυτό το τμήμα είναι σηματοδοτημένο προς την αντίθετη κατεύθυνση.',
|
||||
'tours.horse.dialog.connection': 'Σύνδεση με τη βόλτα σου',
|
||||
'tours.horse.dialog.firstSection': 'Ξεκινά τη βόλτα σου',
|
||||
'tours.horse.dialog.joins': 'Συνδέεται με το τέλος της βόλτας σου',
|
||||
'tours.horse.dialog.gap':
|
||||
'Ανάμεσα στο τέλος της βόλτας σου και σε αυτό το τμήμα υπάρχουν {distance} χωρίς ιππική διαδρομή.',
|
||||
'tours.horse.dialog.joinGap': 'Σύνδεση με χειροκίνητο τμήμα',
|
||||
'tours.horse.dialog.joinGapHint': 'Ευθεία γραμμή, χωρίς έλεγχο',
|
||||
'tours.horse.dialog.adopt': 'Λήψη τμήματος',
|
||||
'tours.horse.access.title': 'Πρόσβαση με άλογο',
|
||||
'tours.horse.access.note':
|
||||
'Ό,τι καταγράφει το OpenStreetMap ως horse=* κατά μήκος των δρόμων. Τα στοιχεία μπορεί να λείπουν ή να είναι παλιά· ισχύουν οι πινακίδες επί τόπου.',
|
||||
'tours.horse.access.closedNotice': 'Μέρος αυτού του τμήματος καταγράφεται ως κλειστό ή ιδιωτικό για άλογα.',
|
||||
'tours.horse.access.value.designated': 'Προορίζεται για αναβάτες',
|
||||
'tours.horse.access.value.yes': 'Επιτρέπεται',
|
||||
'tours.horse.access.value.permissive': 'Ανεκτό από τον ιδιοκτήτη',
|
||||
'tours.horse.access.value.destination': 'Μόνο για πρόσβαση',
|
||||
'tours.horse.access.value.discouraged': 'Δεν συνιστάται',
|
||||
'tours.horse.access.value.private': 'Ιδιωτικό',
|
||||
'tours.horse.access.value.no': 'Απαγορεύεται',
|
||||
'tours.horse.access.value.other': 'Άλλος κανόνας',
|
||||
'tours.horse.access.value.unknown': 'Δεν υπάρχει στα δεδομένα',
|
||||
'tours.horse.access.summary.open': 'Ανοιχτό σε αναβάτες κατά τα δεδομένα',
|
||||
'tours.horse.access.summary.limited': 'Εν μέρει περιορισμένο',
|
||||
'tours.horse.access.summary.closed': 'Εν μέρει κλειστό',
|
||||
'tours.horse.access.summary.unknown': 'Η πρόσβαση δεν υπάρχει στα δεδομένα',
|
||||
'tours.horse.leg.info': 'Τμήμα σηματοδοτημένης ιππικής διαδρομής από το OpenStreetMap. Πρόσβαση με άλογο: {access}',
|
||||
'tours.horse.leg.manual': 'Χειροκίνητο, χωρίς έλεγχο',
|
||||
'tours.horse.leg.manualInfo': 'Σχεδιασμένο με το χέρι, ευθύ. Ούτε ιππική διαδρομή ούτε δρομολογητής το έλεγξε.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1014,5 +1014,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'A tavak a part mentén vannak megtervezve.',
|
||||
'tours.paddle.status.unrouted': '{count} szakasz nincs megtervezve',
|
||||
'tours.paddle.status.unrouted.one': '{count} szakasz nincs megtervezve',
|
||||
'tourTypes.horse': 'Lovastúra',
|
||||
'tours.planner.tourTypeHint.horse': 'Lóháton, jelzett lovas útvonalakon',
|
||||
'tours.planner.namePlaceholder.horse': 'Névtelen lovastúra',
|
||||
'tours.horse.time': 'Lovaglási idő',
|
||||
'tours.horse.timeInfoLabel': 'Miért nincs lovaglási idő',
|
||||
'tours.horse.timeInfo':
|
||||
'A TREK nem számol lovaglási időt: a tempót a ló és a lovas adja. Ha szeretnéd, add meg magad a tervezett teljes időt.',
|
||||
'tours.horse.routes.title': 'Lovas útvonalak',
|
||||
'tours.horse.routes.infoLabel': 'A lovas útvonalakról',
|
||||
'tours.horse.routes.info':
|
||||
'Jelzett lovas útvonalak az OpenStreetMapből, egészben átvehető szakaszokban. Az, hogy egy út egy útvonalhoz tartozik, nem jelent engedélyt a lovaglásra.',
|
||||
'tours.horse.routes.search': 'Keresés a térképnézetben',
|
||||
'tours.horse.routes.searchAgain': 'Keresés ebben a nézetben',
|
||||
'tours.horse.routes.loading': 'Lovas útvonalak keresése…',
|
||||
'tours.horse.routes.zoomIn': 'Nagyíts tovább, hogy lovas útvonalakat keress.',
|
||||
'tours.horse.routes.offline': 'A lovas útvonalakhoz kapcsolat kell.',
|
||||
'tours.horse.routes.failed': 'A lovas útvonalakat nem sikerült beolvasni. A lovastúrád nem változott.',
|
||||
'tours.horse.routes.none': 'Ebben a nézetben nincs jelzett lovas útvonal.',
|
||||
'tours.horse.routes.truncated': 'Itt több útvonal van, mint amennyit egy keresés mutat. Nagyíts, hogy mindet lásd.',
|
||||
'tours.horse.routes.unnamed': 'Névtelen lovas útvonal',
|
||||
'tours.horse.routes.sections': 'Szakaszok',
|
||||
'tours.horse.routes.continues': 'A nézeten túl folytatódik',
|
||||
'tours.horse.dialog.eyebrow': 'Lovas útvonal',
|
||||
'tours.horse.dialog.osm': 'Megnyitás az OpenStreetMapben',
|
||||
'tours.horse.dialog.section': '{number}. szakasz',
|
||||
'tours.horse.dialog.direction': 'Irány',
|
||||
'tours.horse.dialog.asMapped': 'Ahogy fel van térképezve',
|
||||
'tours.horse.dialog.reversed': 'Fordítva',
|
||||
'tours.horse.dialog.signedWith': 'Ebben az irányban jelzett',
|
||||
'tours.horse.dialog.signedAgainst': 'Ez a szakasz az ellenkező irányban van jelezve.',
|
||||
'tours.horse.dialog.connection': 'Csatlakozás a túrához',
|
||||
'tours.horse.dialog.firstSection': 'Elindítja a túrát',
|
||||
'tours.horse.dialog.joins': 'A túra végéhez csatlakozik',
|
||||
'tours.horse.dialog.gap': 'A túra vége és e szakasz között {distance} van lovas útvonal nélkül.',
|
||||
'tours.horse.dialog.joinGap': 'Összekötés kézi szakasszal',
|
||||
'tours.horse.dialog.joinGapHint': 'Egyenesen húzva, ellenőrizetlen',
|
||||
'tours.horse.dialog.adopt': 'Szakasz átvétele',
|
||||
'tours.horse.access.title': 'Lovas hozzáférés',
|
||||
'tours.horse.access.note':
|
||||
'Amit az OpenStreetMap az utak mentén horse=* címkével rögzít. Az adatok hiányozhatnak vagy elavultak lehetnek; a helyszíni táblák a mérvadók.',
|
||||
'tours.horse.access.closedNotice': 'A szakasz egy része lovak számára lezártként vagy magánútként szerepel.',
|
||||
'tours.horse.access.value.designated': 'Lovasoknak kijelölt',
|
||||
'tours.horse.access.value.yes': 'Engedélyezett',
|
||||
'tours.horse.access.value.permissive': 'A tulajdonos eltűri',
|
||||
'tours.horse.access.value.destination': 'Csak célforgalom',
|
||||
'tours.horse.access.value.discouraged': 'Nem ajánlott',
|
||||
'tours.horse.access.value.private': 'Magán',
|
||||
'tours.horse.access.value.no': 'Tilos',
|
||||
'tours.horse.access.value.other': 'Más szabály',
|
||||
'tours.horse.access.value.unknown': 'Nincs az adatokban',
|
||||
'tours.horse.access.summary.open': 'Az adatok szerint nyitott a lovasoknak',
|
||||
'tours.horse.access.summary.limited': 'Részben korlátozott',
|
||||
'tours.horse.access.summary.closed': 'Részben lezárt',
|
||||
'tours.horse.access.summary.unknown': 'A hozzáférés nincs az adatokban',
|
||||
'tours.horse.leg.info': 'Jelzett lovas útvonal szakasza az OpenStreetMapből. Lovas hozzáférés: {access}',
|
||||
'tours.horse.leg.manual': 'Kézi, ellenőrizetlen',
|
||||
'tours.horse.leg.manualInfo': 'Kézzel, egyenesen húzva. Sem lovas útvonal, sem útvonaltervező nem ellenőrizte.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -994,5 +994,64 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreAdopt': 'Rencanakan dekat tepi',
|
||||
'tours.paddle.wind.shoreTaken': 'Danau direncanakan dekat tepi.',
|
||||
'tours.paddle.status.unrouted': '{count} bagian belum direncanakan',
|
||||
'tourTypes.horse': 'Tur berkuda',
|
||||
'tours.planner.tourTypeHint.horse': 'Menunggang kuda, menyusuri rute berkuda bertanda',
|
||||
'tours.planner.namePlaceholder.horse': 'Tur berkuda tanpa judul',
|
||||
'tours.horse.time': 'Waktu berkuda',
|
||||
'tours.horse.timeInfoLabel': 'Mengapa tidak ada waktu berkuda',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK tidak menghitung waktu berkuda: lajunya ditentukan kuda dan penunggangnya. Jika mau, isi sendiri total waktu yang direncanakan.',
|
||||
'tours.horse.routes.title': 'Rute berkuda',
|
||||
'tours.horse.routes.infoLabel': 'Tentang rute berkuda',
|
||||
'tours.horse.routes.info':
|
||||
'Rute berkuda bertanda dari OpenStreetMap, dalam bagian yang diambil utuh. Menjadi bagian sebuah rute bukan berarti boleh dilalui dengan kuda.',
|
||||
'tours.horse.routes.search': 'Cari di tampilan peta',
|
||||
'tours.horse.routes.searchAgain': 'Cari di tampilan ini',
|
||||
'tours.horse.routes.loading': 'Mencari rute berkuda…',
|
||||
'tours.horse.routes.zoomIn': 'Perbesar peta lagi untuk mencari rute berkuda.',
|
||||
'tours.horse.routes.offline': 'Rute berkuda memerlukan koneksi.',
|
||||
'tours.horse.routes.failed': 'Rute berkuda tidak dapat dibaca. Tur Anda tidak berubah.',
|
||||
'tours.horse.routes.none': 'Tidak ada rute berkuda bertanda di tampilan ini.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Ada lebih banyak rute di sini daripada yang ditampilkan satu pencarian. Perbesar untuk melihat semuanya.',
|
||||
'tours.horse.routes.unnamed': 'Rute berkuda tanpa nama',
|
||||
'tours.horse.routes.sections': 'Bagian',
|
||||
'tours.horse.routes.continues': 'Berlanjut di luar tampilan',
|
||||
'tours.horse.dialog.eyebrow': 'Rute berkuda',
|
||||
'tours.horse.dialog.osm': 'Buka di OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Bagian {number}',
|
||||
'tours.horse.dialog.direction': 'Arah',
|
||||
'tours.horse.dialog.asMapped': 'Sesuai peta',
|
||||
'tours.horse.dialog.reversed': 'Terbalik',
|
||||
'tours.horse.dialog.signedWith': 'Bertanda ke arah ini',
|
||||
'tours.horse.dialog.signedAgainst': 'Bagian ini bertanda ke arah sebaliknya.',
|
||||
'tours.horse.dialog.connection': 'Sambungan ke tur Anda',
|
||||
'tours.horse.dialog.firstSection': 'Memulai tur Anda',
|
||||
'tours.horse.dialog.joins': 'Tersambung ke akhir tur Anda',
|
||||
'tours.horse.dialog.gap': 'Antara akhir tur Anda dan bagian ini ada {distance} tanpa rute berkuda.',
|
||||
'tours.horse.dialog.joinGap': 'Sambungkan dengan bagian manual',
|
||||
'tours.horse.dialog.joinGapHint': 'Ditarik lurus dan belum diperiksa',
|
||||
'tours.horse.dialog.adopt': 'Ambil bagian',
|
||||
'tours.horse.access.title': 'Akses berkuda',
|
||||
'tours.horse.access.note':
|
||||
'Yang dicatat OpenStreetMap sebagai horse=* di sepanjang jalan. Data bisa kurang atau usang; rambu di lokasi yang berlaku.',
|
||||
'tours.horse.access.closedNotice': 'Sebagian bagian ini tercatat tertutup atau pribadi untuk kuda.',
|
||||
'tours.horse.access.value.designated': 'Khusus penunggang kuda',
|
||||
'tours.horse.access.value.yes': 'Diizinkan',
|
||||
'tours.horse.access.value.permissive': 'Diizinkan oleh pemilik',
|
||||
'tours.horse.access.value.destination': 'Hanya untuk tujuan',
|
||||
'tours.horse.access.value.discouraged': 'Tidak dianjurkan',
|
||||
'tours.horse.access.value.private': 'Pribadi',
|
||||
'tours.horse.access.value.no': 'Dilarang',
|
||||
'tours.horse.access.value.other': 'Aturan lain',
|
||||
'tours.horse.access.value.unknown': 'Tidak ada di data',
|
||||
'tours.horse.access.summary.open': 'Terbuka bagi penunggang kuda menurut data',
|
||||
'tours.horse.access.summary.limited': 'Sebagian dibatasi',
|
||||
'tours.horse.access.summary.closed': 'Sebagian ditutup',
|
||||
'tours.horse.access.summary.unknown': 'Akses tidak ada di data',
|
||||
'tours.horse.leg.info': 'Bagian dari rute berkuda bertanda dari OpenStreetMap. Akses berkuda: {access}',
|
||||
'tours.horse.leg.manual': 'Manual, belum diperiksa',
|
||||
'tours.horse.leg.manualInfo':
|
||||
'Digambar tangan, lurus. Tidak ada rute berkuda maupun perencana rute yang memeriksanya.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1019,5 +1019,65 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'I laghi sono pianificati vicino alla riva.',
|
||||
'tours.paddle.status.unrouted': '{count} tratti non pianificati',
|
||||
'tours.paddle.status.unrouted.one': '{count} tratto non pianificato',
|
||||
'tourTypes.horse': 'Escursione a cavallo',
|
||||
'tours.planner.tourTypeHint.horse': 'A cavallo, lungo itinerari equestri segnalati',
|
||||
'tours.planner.namePlaceholder.horse': 'Escursione a cavallo senza titolo',
|
||||
'tours.horse.time': 'Tempo a cavallo',
|
||||
'tours.horse.timeInfoLabel': 'Perché non c’è un tempo a cavallo',
|
||||
'tours.horse.timeInfo':
|
||||
"TREK non calcola alcun tempo a cavallo: l'andatura dipende dal cavallo e da chi lo monta. Se vuoi, inserisci tu un totale previsto.",
|
||||
'tours.horse.routes.title': 'Itinerari equestri',
|
||||
'tours.horse.routes.infoLabel': 'Sugli itinerari equestri',
|
||||
'tours.horse.routes.info':
|
||||
'Itinerari equestri segnalati da OpenStreetMap, in tratti da prendere interi. Far parte di un itinerario non dà il permesso di percorrerlo a cavallo.',
|
||||
'tours.horse.routes.search': 'Cerca nella vista',
|
||||
'tours.horse.routes.searchAgain': 'Cerca in questa vista',
|
||||
'tours.horse.routes.loading': 'Ricerca degli itinerari equestri…',
|
||||
'tours.horse.routes.zoomIn': 'Ingrandisci ancora per cercare itinerari equestri.',
|
||||
'tours.horse.routes.offline': 'Gli itinerari equestri richiedono una connessione.',
|
||||
'tours.horse.routes.failed': 'Impossibile leggere gli itinerari equestri. La tua escursione non è cambiata.',
|
||||
'tours.horse.routes.none': 'Nessun itinerario equestre segnalato in questa vista.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Qui ci sono più itinerari di quanti ne mostri una ricerca. Ingrandisci per vederli tutti.',
|
||||
'tours.horse.routes.unnamed': 'Itinerario equestre senza nome',
|
||||
'tours.horse.routes.sections': 'Tratti',
|
||||
'tours.horse.routes.continues': 'Prosegue oltre la vista',
|
||||
'tours.horse.dialog.eyebrow': 'Itinerario equestre',
|
||||
'tours.horse.dialog.osm': 'Apri in OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Tratto {number}',
|
||||
'tours.horse.dialog.direction': 'Senso',
|
||||
'tours.horse.dialog.asMapped': 'Come mappato',
|
||||
'tours.horse.dialog.reversed': 'Invertito',
|
||||
'tours.horse.dialog.signedWith': 'Segnalato in questo senso',
|
||||
'tours.horse.dialog.signedAgainst': 'Questo tratto è segnalato nel senso opposto.',
|
||||
'tours.horse.dialog.connection': 'Collegamento alla tua escursione',
|
||||
'tours.horse.dialog.firstSection': 'Inizia la tua escursione',
|
||||
'tours.horse.dialog.joins': 'Si collega alla fine della tua escursione',
|
||||
'tours.horse.dialog.gap':
|
||||
'Tra la fine della tua escursione e questo tratto ci sono {distance} senza itinerario equestre.',
|
||||
'tours.horse.dialog.joinGap': 'Collega con un tratto manuale',
|
||||
'tours.horse.dialog.joinGapHint': 'Tracciato dritto e non verificato',
|
||||
'tours.horse.dialog.adopt': 'Prendi il tratto',
|
||||
'tours.horse.access.title': 'Accesso a cavallo',
|
||||
'tours.horse.access.note':
|
||||
'Ciò che OpenStreetMap indica come horse=* lungo le strade. I dati possono mancare o essere superati; valgono i cartelli sul posto.',
|
||||
'tours.horse.access.closedNotice': 'Parte di questo tratto risulta vietata o privata per i cavalli.',
|
||||
'tours.horse.access.value.designated': 'Riservato ai cavalieri',
|
||||
'tours.horse.access.value.yes': 'Consentito',
|
||||
'tours.horse.access.value.permissive': 'Tollerato dal proprietario',
|
||||
'tours.horse.access.value.destination': 'Solo per i frontisti',
|
||||
'tours.horse.access.value.discouraged': 'Sconsigliato',
|
||||
'tours.horse.access.value.private': 'Privato',
|
||||
'tours.horse.access.value.no': 'Vietato',
|
||||
'tours.horse.access.value.other': 'Altra regola',
|
||||
'tours.horse.access.value.unknown': 'Non nei dati',
|
||||
'tours.horse.access.summary.open': 'Aperto ai cavalieri secondo i dati',
|
||||
'tours.horse.access.summary.limited': 'In parte limitato',
|
||||
'tours.horse.access.summary.closed': 'In parte vietato',
|
||||
'tours.horse.access.summary.unknown': 'Accesso non nei dati',
|
||||
'tours.horse.leg.info': 'Tratto di un itinerario equestre segnalato da OpenStreetMap. Accesso a cavallo: {access}',
|
||||
'tours.horse.leg.manual': 'Manuale, non verificato',
|
||||
'tours.horse.leg.manualInfo':
|
||||
'Tracciato a mano, dritto. Né un itinerario equestre né un pianificatore lo ha verificato.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -970,5 +970,59 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreAdopt': '岸沿いで計画',
|
||||
'tours.paddle.wind.shoreTaken': '湖は岸沿いで計画されています。',
|
||||
'tours.paddle.status.unrouted': '未計画の区間 {count} 件',
|
||||
'tourTypes.horse': '乗馬ツアー',
|
||||
'tours.planner.tourTypeHint.horse': '馬に乗って、標識のある乗馬ルートを進む',
|
||||
'tours.planner.namePlaceholder.horse': '名前のない乗馬ツアー',
|
||||
'tours.horse.time': '乗馬時間',
|
||||
'tours.horse.timeInfoLabel': '乗馬時間がない理由',
|
||||
'tours.horse.timeInfo': 'TREK は乗馬時間を計算しません。ペースは馬と乗り手しだいです。必要なら予定の合計時間をご自身で入力してください。',
|
||||
'tours.horse.routes.title': '乗馬ルート',
|
||||
'tours.horse.routes.infoLabel': '乗馬ルートについて',
|
||||
'tours.horse.routes.info': 'OpenStreetMap の標識付き乗馬ルートを、まるごと取り込む区間ごとに表示します。ルートに含まれていても、乗馬が許可されているとは限りません。',
|
||||
'tours.horse.routes.search': '地図の表示範囲で探す',
|
||||
'tours.horse.routes.searchAgain': 'この範囲を検索',
|
||||
'tours.horse.routes.loading': '乗馬ルートを検索中…',
|
||||
'tours.horse.routes.zoomIn': '乗馬ルートを探すにはさらに拡大してください。',
|
||||
'tours.horse.routes.offline': '乗馬ルートには接続が必要です。',
|
||||
'tours.horse.routes.failed': '乗馬ルートを読み込めませんでした。ツアーは変わっていません。',
|
||||
'tours.horse.routes.none': 'この範囲に標識付きの乗馬ルートはありません。',
|
||||
'tours.horse.routes.truncated': 'ここには1回の検索で表示できる以上のルートがあります。拡大するとすべて表示されます。',
|
||||
'tours.horse.routes.unnamed': '名前のない乗馬ルート',
|
||||
'tours.horse.routes.sections': '区間',
|
||||
'tours.horse.routes.continues': '表示範囲の外へ続く',
|
||||
'tours.horse.dialog.eyebrow': '乗馬ルート',
|
||||
'tours.horse.dialog.osm': 'OpenStreetMap で開く',
|
||||
'tours.horse.dialog.section': '区間 {number}',
|
||||
'tours.horse.dialog.direction': '方向',
|
||||
'tours.horse.dialog.asMapped': '地図どおり',
|
||||
'tours.horse.dialog.reversed': '逆方向',
|
||||
'tours.horse.dialog.signedWith': 'この方向に標識あり',
|
||||
'tours.horse.dialog.signedAgainst': 'この区間は逆方向に標識があります。',
|
||||
'tours.horse.dialog.connection': 'ツアーとのつながり',
|
||||
'tours.horse.dialog.firstSection': 'ツアーの始まり',
|
||||
'tours.horse.dialog.joins': 'ツアーの終点につながる',
|
||||
'tours.horse.dialog.gap': 'ツアーの終点とこの区間の間に、乗馬ルートのない {distance} があります。',
|
||||
'tours.horse.dialog.joinGap': '手動の区間でつなぐ',
|
||||
'tours.horse.dialog.joinGapHint': '直線で引かれ、未確認',
|
||||
'tours.horse.dialog.adopt': '区間を取り込む',
|
||||
'tours.horse.access.title': '乗馬でのアクセス',
|
||||
'tours.horse.access.note': 'OpenStreetMap が道沿いに horse=* として記録している情報です。データが欠けていたり古かったりすることがあり、現地の標識が優先されます。',
|
||||
'tours.horse.access.closedNotice': 'この区間の一部は、馬について通行禁止または私有地として記録されています。',
|
||||
'tours.horse.access.value.designated': '乗馬専用',
|
||||
'tours.horse.access.value.yes': '許可',
|
||||
'tours.horse.access.value.permissive': '所有者が黙認',
|
||||
'tours.horse.access.value.destination': '目的地への通行のみ',
|
||||
'tours.horse.access.value.discouraged': '非推奨',
|
||||
'tours.horse.access.value.private': '私有',
|
||||
'tours.horse.access.value.no': '禁止',
|
||||
'tours.horse.access.value.other': 'その他の規則',
|
||||
'tours.horse.access.value.unknown': 'データになし',
|
||||
'tours.horse.access.summary.open': 'データ上は乗り手に開放',
|
||||
'tours.horse.access.summary.limited': '一部制限あり',
|
||||
'tours.horse.access.summary.closed': '一部通行禁止',
|
||||
'tours.horse.access.summary.unknown': 'アクセスはデータになし',
|
||||
'tours.horse.leg.info': 'OpenStreetMap の標識付き乗馬ルートの区間です。乗馬でのアクセス: {access}',
|
||||
'tours.horse.leg.manual': '手動、未確認',
|
||||
'tours.horse.leg.manualInfo': '手で直線に引いた区間です。乗馬ルートもルーターも確認していません。',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -967,5 +967,59 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreAdopt': '물가 가까이 계획',
|
||||
'tours.paddle.wind.shoreTaken': '호수는 물가 가까이 계획되어 있습니다.',
|
||||
'tours.paddle.status.unrouted': '계획되지 않은 구간 {count}개',
|
||||
'tourTypes.horse': '승마 투어',
|
||||
'tours.planner.tourTypeHint.horse': '말을 타고, 표지가 있는 승마 루트를 따라',
|
||||
'tours.planner.namePlaceholder.horse': '이름 없는 승마 투어',
|
||||
'tours.horse.time': '승마 시간',
|
||||
'tours.horse.timeInfoLabel': '승마 시간이 없는 이유',
|
||||
'tours.horse.timeInfo': 'TREK은 승마 시간을 계산하지 않습니다. 속도는 말과 기수에 달려 있습니다. 원하면 예정 총 시간을 직접 입력하세요.',
|
||||
'tours.horse.routes.title': '승마 루트',
|
||||
'tours.horse.routes.infoLabel': '승마 루트 안내',
|
||||
'tours.horse.routes.info': 'OpenStreetMap의 표지가 있는 승마 루트를 통째로 가져오는 구간 단위로 보여 줍니다. 루트에 속한다고 해서 말을 타도 된다는 뜻은 아닙니다.',
|
||||
'tours.horse.routes.search': '지도 화면에서 찾기',
|
||||
'tours.horse.routes.searchAgain': '이 화면 검색',
|
||||
'tours.horse.routes.loading': '승마 루트를 찾는 중…',
|
||||
'tours.horse.routes.zoomIn': '승마 루트를 찾으려면 더 확대하세요.',
|
||||
'tours.horse.routes.offline': '승마 루트에는 연결이 필요합니다.',
|
||||
'tours.horse.routes.failed': '승마 루트를 읽지 못했습니다. 투어는 그대로입니다.',
|
||||
'tours.horse.routes.none': '이 화면에는 표지가 있는 승마 루트가 없습니다.',
|
||||
'tours.horse.routes.truncated': '이곳에는 한 번의 검색으로 보이는 것보다 많은 루트가 있습니다. 모두 보려면 확대하세요.',
|
||||
'tours.horse.routes.unnamed': '이름 없는 승마 루트',
|
||||
'tours.horse.routes.sections': '구간',
|
||||
'tours.horse.routes.continues': '화면 밖으로 이어짐',
|
||||
'tours.horse.dialog.eyebrow': '승마 루트',
|
||||
'tours.horse.dialog.osm': 'OpenStreetMap에서 열기',
|
||||
'tours.horse.dialog.section': '구간 {number}',
|
||||
'tours.horse.dialog.direction': '방향',
|
||||
'tours.horse.dialog.asMapped': '지도에 그려진 대로',
|
||||
'tours.horse.dialog.reversed': '반대로',
|
||||
'tours.horse.dialog.signedWith': '이 방향으로 표지 있음',
|
||||
'tours.horse.dialog.signedAgainst': '이 구간은 반대 방향으로 표지가 있습니다.',
|
||||
'tours.horse.dialog.connection': '투어와의 연결',
|
||||
'tours.horse.dialog.firstSection': '투어의 시작',
|
||||
'tours.horse.dialog.joins': '투어의 끝에 이어짐',
|
||||
'tours.horse.dialog.gap': '투어의 끝과 이 구간 사이에 승마 루트가 없는 {distance}가 있습니다.',
|
||||
'tours.horse.dialog.joinGap': '수동 구간으로 연결',
|
||||
'tours.horse.dialog.joinGapHint': '직선으로 그었고 확인되지 않음',
|
||||
'tours.horse.dialog.adopt': '구간 가져오기',
|
||||
'tours.horse.access.title': '말 통행',
|
||||
'tours.horse.access.note': 'OpenStreetMap이 길을 따라 horse=*로 기록한 내용입니다. 데이터가 없거나 오래되었을 수 있으니 현장 표지판을 따르세요.',
|
||||
'tours.horse.access.closedNotice': '이 구간의 일부는 말에게 통행 금지 또는 사유지로 기록되어 있습니다.',
|
||||
'tours.horse.access.value.designated': '승마 전용',
|
||||
'tours.horse.access.value.yes': '허용',
|
||||
'tours.horse.access.value.permissive': '소유자가 묵인',
|
||||
'tours.horse.access.value.destination': '목적지 통행만',
|
||||
'tours.horse.access.value.discouraged': '권장하지 않음',
|
||||
'tours.horse.access.value.private': '사유지',
|
||||
'tours.horse.access.value.no': '금지',
|
||||
'tours.horse.access.value.other': '기타 규칙',
|
||||
'tours.horse.access.value.unknown': '데이터에 없음',
|
||||
'tours.horse.access.summary.open': '데이터상 기수에게 개방',
|
||||
'tours.horse.access.summary.limited': '일부 제한',
|
||||
'tours.horse.access.summary.closed': '일부 금지',
|
||||
'tours.horse.access.summary.unknown': '통행 정보가 데이터에 없음',
|
||||
'tours.horse.leg.info': 'OpenStreetMap의 표지가 있는 승마 루트의 구간입니다. 말 통행: {access}',
|
||||
'tours.horse.leg.manual': '수동, 확인되지 않음',
|
||||
'tours.horse.leg.manualInfo': '손으로 그은 직선 구간입니다. 승마 루트도 경로 계산기도 확인하지 않았습니다.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1015,5 +1015,64 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'De meren zijn dicht bij de oever gepland.',
|
||||
'tours.paddle.status.unrouted': '{count} delen niet gepland',
|
||||
'tours.paddle.status.unrouted.one': '{count} deel niet gepland',
|
||||
'tourTypes.horse': 'Rit te paard',
|
||||
'tours.planner.tourTypeHint.horse': 'Te paard, langs bewegwijzerde ruiterroutes',
|
||||
'tours.planner.namePlaceholder.horse': 'Naamloze rit',
|
||||
'tours.horse.time': 'Rijtijd',
|
||||
'tours.horse.timeInfoLabel': 'Waarom er geen rijtijd is',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK berekent geen rijtijd: het tempo bepalen paard en ruiter. Vul zelf een geplande totale tijd in als je die wilt.',
|
||||
'tours.horse.routes.title': 'Ruiterroutes',
|
||||
'tours.horse.routes.infoLabel': 'Over ruiterroutes',
|
||||
'tours.horse.routes.info':
|
||||
'Bewegwijzerde ruiterroutes uit OpenStreetMap, in trajecten die je in hun geheel overneemt. Dat een weg bij een route hoort, betekent niet dat je er mag rijden.',
|
||||
'tours.horse.routes.search': 'Zoeken in kaartbeeld',
|
||||
'tours.horse.routes.searchAgain': 'Dit kaartbeeld doorzoeken',
|
||||
'tours.horse.routes.loading': 'Ruiterroutes zoeken…',
|
||||
'tours.horse.routes.zoomIn': 'Zoom verder in om naar ruiterroutes te zoeken.',
|
||||
'tours.horse.routes.offline': 'Ruiterroutes hebben een verbinding nodig.',
|
||||
'tours.horse.routes.failed': 'Ruiterroutes konden niet worden gelezen. Je rit is niet veranderd.',
|
||||
'tours.horse.routes.none': 'Geen bewegwijzerde ruiterroutes in dit kaartbeeld.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Er zijn hier meer routes dan één zoekopdracht toont. Zoom in om ze allemaal te zien.',
|
||||
'tours.horse.routes.unnamed': 'Ruiterroute zonder naam',
|
||||
'tours.horse.routes.sections': 'Trajecten',
|
||||
'tours.horse.routes.continues': 'Loopt door buiten het kaartbeeld',
|
||||
'tours.horse.dialog.eyebrow': 'Ruiterroute',
|
||||
'tours.horse.dialog.osm': 'Openen in OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Traject {number}',
|
||||
'tours.horse.dialog.direction': 'Richting',
|
||||
'tours.horse.dialog.asMapped': 'Zoals gekarteerd',
|
||||
'tours.horse.dialog.reversed': 'Omgekeerd',
|
||||
'tours.horse.dialog.signedWith': 'In deze richting bewegwijzerd',
|
||||
'tours.horse.dialog.signedAgainst': 'Dit traject is in de andere richting bewegwijzerd.',
|
||||
'tours.horse.dialog.connection': 'Aansluiting op je rit',
|
||||
'tours.horse.dialog.firstSection': 'Begint je rit',
|
||||
'tours.horse.dialog.joins': 'Sluit aan op het einde van je rit',
|
||||
'tours.horse.dialog.gap': 'Tussen het einde van je rit en dit traject ligt {distance} zonder ruiterroute.',
|
||||
'tours.horse.dialog.joinGap': 'Verbinden met een handmatig traject',
|
||||
'tours.horse.dialog.joinGapHint': 'Recht getrokken en niet gecontroleerd',
|
||||
'tours.horse.dialog.adopt': 'Traject overnemen',
|
||||
'tours.horse.access.title': 'Toegang te paard',
|
||||
'tours.horse.access.note':
|
||||
'Wat OpenStreetMap langs de wegen als horse=* vastlegt. Gegevens kunnen ontbreken of verouderd zijn; ter plekke gelden de borden.',
|
||||
'tours.horse.access.closedNotice': 'Een deel van dit traject staat als verboden of privé voor paarden vermeld.',
|
||||
'tours.horse.access.value.designated': 'Aangewezen voor ruiters',
|
||||
'tours.horse.access.value.yes': 'Toegestaan',
|
||||
'tours.horse.access.value.permissive': 'Gedoogd door de eigenaar',
|
||||
'tours.horse.access.value.destination': 'Alleen bestemmingsverkeer',
|
||||
'tours.horse.access.value.discouraged': 'Afgeraden',
|
||||
'tours.horse.access.value.private': 'Privé',
|
||||
'tours.horse.access.value.no': 'Verboden',
|
||||
'tours.horse.access.value.other': 'Andere regel',
|
||||
'tours.horse.access.value.unknown': 'Niet in de gegevens',
|
||||
'tours.horse.access.summary.open': 'Volgens de gegevens open voor ruiters',
|
||||
'tours.horse.access.summary.limited': 'Deels beperkt',
|
||||
'tours.horse.access.summary.closed': 'Deels verboden',
|
||||
'tours.horse.access.summary.unknown': 'Toegang niet in de gegevens',
|
||||
'tours.horse.leg.info': 'Traject van een bewegwijzerde ruiterroute uit OpenStreetMap. Toegang te paard: {access}',
|
||||
'tours.horse.leg.manual': 'Handmatig, niet gecontroleerd',
|
||||
'tours.horse.leg.manualInfo':
|
||||
'Met de hand getrokken, recht. Geen ruiterroute en geen routeplanner heeft het gecontroleerd.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1042,5 +1042,63 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.status.unrouted.one': '{count} odcinek bez planu',
|
||||
'tours.paddle.status.unrouted.few': '{count} odcinki bez planu',
|
||||
'tours.paddle.status.unrouted.many': '{count} odcinków bez planu',
|
||||
'tourTypes.horse': 'Przejażdżka konna',
|
||||
'tours.planner.tourTypeHint.horse': 'Konno, oznakowanymi szlakami konnymi',
|
||||
'tours.planner.namePlaceholder.horse': 'Przejażdżka bez nazwy',
|
||||
'tours.horse.time': 'Czas jazdy',
|
||||
'tours.horse.timeInfoLabel': 'Dlaczego nie ma czasu jazdy',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK nie wylicza czasu jazdy: tempo zależy od konia i jeźdźca. Jeśli chcesz, wpisz sam planowany czas łączny.',
|
||||
'tours.horse.routes.title': 'Szlaki konne',
|
||||
'tours.horse.routes.infoLabel': 'O szlakach konnych',
|
||||
'tours.horse.routes.info':
|
||||
'Oznakowane szlaki konne z OpenStreetMap, w odcinkach przejmowanych w całości. To, że droga należy do szlaku, nie oznacza pozwolenia na jazdę konną.',
|
||||
'tours.horse.routes.search': 'Szukaj w widoku mapy',
|
||||
'tours.horse.routes.searchAgain': 'Przeszukaj ten widok',
|
||||
'tours.horse.routes.loading': 'Szukanie szlaków konnych…',
|
||||
'tours.horse.routes.zoomIn': 'Przybliż mapę bardziej, aby szukać szlaków konnych.',
|
||||
'tours.horse.routes.offline': 'Szlaki konne wymagają połączenia.',
|
||||
'tours.horse.routes.failed': 'Nie udało się odczytać szlaków konnych. Twoja przejażdżka się nie zmieniła.',
|
||||
'tours.horse.routes.none': 'Brak oznakowanych szlaków konnych w tym widoku.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Jest tu więcej szlaków, niż pokazuje jedno wyszukiwanie. Przybliż mapę, aby zobaczyć wszystkie.',
|
||||
'tours.horse.routes.unnamed': 'Szlak konny bez nazwy',
|
||||
'tours.horse.routes.sections': 'Odcinki',
|
||||
'tours.horse.routes.continues': 'Biegnie dalej poza widok',
|
||||
'tours.horse.dialog.eyebrow': 'Szlak konny',
|
||||
'tours.horse.dialog.osm': 'Otwórz w OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Odcinek {number}',
|
||||
'tours.horse.dialog.direction': 'Kierunek',
|
||||
'tours.horse.dialog.asMapped': 'Jak na mapie',
|
||||
'tours.horse.dialog.reversed': 'Odwrotnie',
|
||||
'tours.horse.dialog.signedWith': 'Oznakowany w tym kierunku',
|
||||
'tours.horse.dialog.signedAgainst': 'Ten odcinek jest oznakowany w przeciwnym kierunku.',
|
||||
'tours.horse.dialog.connection': 'Połączenie z przejażdżką',
|
||||
'tours.horse.dialog.firstSection': 'Rozpoczyna przejażdżkę',
|
||||
'tours.horse.dialog.joins': 'Łączy się z końcem przejażdżki',
|
||||
'tours.horse.dialog.gap': 'Między końcem przejażdżki a tym odcinkiem jest {distance} bez szlaku konnego.',
|
||||
'tours.horse.dialog.joinGap': 'Połącz odcinkiem ręcznym',
|
||||
'tours.horse.dialog.joinGapHint': 'Narysowany prosto, niesprawdzony',
|
||||
'tours.horse.dialog.adopt': 'Przejmij odcinek',
|
||||
'tours.horse.access.title': 'Dostęp dla koni',
|
||||
'tours.horse.access.note':
|
||||
'To, co OpenStreetMap zapisuje wzdłuż dróg jako horse=*. Danych może brakować lub mogą być nieaktualne; obowiązują znaki na miejscu.',
|
||||
'tours.horse.access.closedNotice': 'Część tego odcinka jest zapisana jako zamknięta lub prywatna dla koni.',
|
||||
'tours.horse.access.value.designated': 'Przeznaczony dla jeźdźców',
|
||||
'tours.horse.access.value.yes': 'Dozwolony',
|
||||
'tours.horse.access.value.permissive': 'Tolerowany przez właściciela',
|
||||
'tours.horse.access.value.destination': 'Tylko dojazd',
|
||||
'tours.horse.access.value.discouraged': 'Niezalecany',
|
||||
'tours.horse.access.value.private': 'Prywatny',
|
||||
'tours.horse.access.value.no': 'Zakazany',
|
||||
'tours.horse.access.value.other': 'Inna zasada',
|
||||
'tours.horse.access.value.unknown': 'Brak w danych',
|
||||
'tours.horse.access.summary.open': 'Według danych otwarty dla jeźdźców',
|
||||
'tours.horse.access.summary.limited': 'Częściowo ograniczony',
|
||||
'tours.horse.access.summary.closed': 'Częściowo zamknięty',
|
||||
'tours.horse.access.summary.unknown': 'Dostęp nieznany w danych',
|
||||
'tours.horse.leg.info': 'Odcinek oznakowanego szlaku konnego z OpenStreetMap. Dostęp dla koni: {access}',
|
||||
'tours.horse.leg.manual': 'Ręczny, niesprawdzony',
|
||||
'tours.horse.leg.manualInfo': 'Narysowany ręcznie, prosto. Nie sprawdził go żaden szlak konny ani planer tras.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1046,5 +1046,63 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.status.unrouted.one': '{count} участок не проложен',
|
||||
'tours.paddle.status.unrouted.few': '{count} участка не проложены',
|
||||
'tours.paddle.status.unrouted.many': '{count} участков не проложено',
|
||||
'tourTypes.horse': 'Конная прогулка',
|
||||
'tours.planner.tourTypeHint.horse': 'Верхом, по маркированным конным маршрутам',
|
||||
'tours.planner.namePlaceholder.horse': 'Конная прогулка без названия',
|
||||
'tours.horse.time': 'Время в седле',
|
||||
'tours.horse.timeInfoLabel': 'Почему нет времени в седле',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK не рассчитывает время в седле: темп зависит от лошади и всадника. При желании укажите общее время сами.',
|
||||
'tours.horse.routes.title': 'Конные маршруты',
|
||||
'tours.horse.routes.infoLabel': 'О конных маршрутах',
|
||||
'tours.horse.routes.info':
|
||||
'Маркированные конные маршруты из OpenStreetMap, участками, которые берутся целиком. Принадлежность к маршруту не даёт права ездить по нему верхом.',
|
||||
'tours.horse.routes.search': 'Искать в видимой области',
|
||||
'tours.horse.routes.searchAgain': 'Искать в этой области',
|
||||
'tours.horse.routes.loading': 'Ищем конные маршруты…',
|
||||
'tours.horse.routes.zoomIn': 'Приблизьте карту, чтобы искать конные маршруты.',
|
||||
'tours.horse.routes.offline': 'Для конных маршрутов нужно подключение.',
|
||||
'tours.horse.routes.failed': 'Не удалось прочитать конные маршруты. Ваша прогулка не изменилась.',
|
||||
'tours.horse.routes.none': 'В этой области нет маркированных конных маршрутов.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Здесь больше маршрутов, чем показывает один поиск. Приблизьте карту, чтобы увидеть все.',
|
||||
'tours.horse.routes.unnamed': 'Конный маршрут без названия',
|
||||
'tours.horse.routes.sections': 'Участки',
|
||||
'tours.horse.routes.continues': 'Продолжается за пределами области',
|
||||
'tours.horse.dialog.eyebrow': 'Конный маршрут',
|
||||
'tours.horse.dialog.osm': 'Открыть в OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Участок {number}',
|
||||
'tours.horse.dialog.direction': 'Направление',
|
||||
'tours.horse.dialog.asMapped': 'Как на карте',
|
||||
'tours.horse.dialog.reversed': 'В обратную сторону',
|
||||
'tours.horse.dialog.signedWith': 'Маркирован в этом направлении',
|
||||
'tours.horse.dialog.signedAgainst': 'Этот участок маркирован в обратном направлении.',
|
||||
'tours.horse.dialog.connection': 'Связь с прогулкой',
|
||||
'tours.horse.dialog.firstSection': 'Начинает прогулку',
|
||||
'tours.horse.dialog.joins': 'Продолжает конец прогулки',
|
||||
'tours.horse.dialog.gap': 'Между концом прогулки и этим участком {distance} без конного маршрута.',
|
||||
'tours.horse.dialog.joinGap': 'Соединить участком вручную',
|
||||
'tours.horse.dialog.joinGapHint': 'Прямая линия, не проверена',
|
||||
'tours.horse.dialog.adopt': 'Взять участок',
|
||||
'tours.horse.access.title': 'Доступ для лошадей',
|
||||
'tours.horse.access.note':
|
||||
'То, что OpenStreetMap отмечает вдоль дорог как horse=*. Данных может не быть или они устарели; на месте действуют знаки.',
|
||||
'tours.horse.access.closedNotice': 'Часть этого участка отмечена как закрытая или частная для лошадей.',
|
||||
'tours.horse.access.value.designated': 'Предназначен для всадников',
|
||||
'tours.horse.access.value.yes': 'Разрешено',
|
||||
'tours.horse.access.value.permissive': 'Допускается владельцем',
|
||||
'tours.horse.access.value.destination': 'Только для местного проезда',
|
||||
'tours.horse.access.value.discouraged': 'Не рекомендуется',
|
||||
'tours.horse.access.value.private': 'Частный',
|
||||
'tours.horse.access.value.no': 'Запрещено',
|
||||
'tours.horse.access.value.other': 'Другое правило',
|
||||
'tours.horse.access.value.unknown': 'Нет в данных',
|
||||
'tours.horse.access.summary.open': 'По данным открыто для всадников',
|
||||
'tours.horse.access.summary.limited': 'Частично ограничено',
|
||||
'tours.horse.access.summary.closed': 'Частично закрыто',
|
||||
'tours.horse.access.summary.unknown': 'Доступ не указан в данных',
|
||||
'tours.horse.leg.info': 'Участок маркированного конного маршрута из OpenStreetMap. Доступ для лошадей: {access}',
|
||||
'tours.horse.leg.manual': 'Вручную, не проверено',
|
||||
'tours.horse.leg.manualInfo': 'Нарисован вручную, по прямой. Ни конный маршрут, ни маршрутизатор его не проверяли.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1006,5 +1006,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.status.unrouted': '{count} úsekov nenaplánovaných',
|
||||
'tours.paddle.status.unrouted.one': '{count} úsek nenaplánovaný',
|
||||
'tours.paddle.status.unrouted.few': '{count} úseky nenaplánované',
|
||||
'tourTypes.horse': 'Vychádzka na koni',
|
||||
'tours.planner.tourTypeHint.horse': 'Na koni, po značených jazdeckých trasách',
|
||||
'tours.planner.namePlaceholder.horse': 'Vychádzka bez názvu',
|
||||
'tours.horse.time': 'Čas jazdy',
|
||||
'tours.horse.timeInfoLabel': 'Prečo tu nie je čas jazdy',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK čas jazdy nepočíta: tempo určuje kôň a jazdec. Ak chceš, zadaj plánovaný celkový čas sám.',
|
||||
'tours.horse.routes.title': 'Jazdecké trasy',
|
||||
'tours.horse.routes.infoLabel': 'O jazdeckých trasách',
|
||||
'tours.horse.routes.info':
|
||||
'Značené jazdecké trasy z OpenStreetMap, po úsekoch, ktoré prevezmeš celé. To, že cesta patrí k trase, neznamená, že po nej smieš jazdiť na koni.',
|
||||
'tours.horse.routes.search': 'Hľadať vo výreze mapy',
|
||||
'tours.horse.routes.searchAgain': 'Prehľadať tento výrez',
|
||||
'tours.horse.routes.loading': 'Hľadajú sa jazdecké trasy…',
|
||||
'tours.horse.routes.zoomIn': 'Priblíž mapu ešte viac a hľadaj jazdecké trasy.',
|
||||
'tours.horse.routes.offline': 'Jazdecké trasy potrebujú pripojenie.',
|
||||
'tours.horse.routes.failed': 'Jazdecké trasy sa nepodarilo načítať. Tvoja vychádzka zostáva bez zmeny.',
|
||||
'tours.horse.routes.none': 'V tomto výreze nie sú žiadne značené jazdecké trasy.',
|
||||
'tours.horse.routes.truncated': 'Je tu viac trás, než ukáže jedno hľadanie. Priblíž mapu, aby si videl všetky.',
|
||||
'tours.horse.routes.unnamed': 'Jazdecká trasa bez názvu',
|
||||
'tours.horse.routes.sections': 'Úseky',
|
||||
'tours.horse.routes.continues': 'Pokračuje mimo výrez',
|
||||
'tours.horse.dialog.eyebrow': 'Jazdecká trasa',
|
||||
'tours.horse.dialog.osm': 'Otvoriť v OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Úsek {number}',
|
||||
'tours.horse.dialog.direction': 'Smer',
|
||||
'tours.horse.dialog.asMapped': 'Ako je zmapované',
|
||||
'tours.horse.dialog.reversed': 'Opačne',
|
||||
'tours.horse.dialog.signedWith': 'Značené týmto smerom',
|
||||
'tours.horse.dialog.signedAgainst': 'Tento úsek je značený opačným smerom.',
|
||||
'tours.horse.dialog.connection': 'Napojenie na vychádzku',
|
||||
'tours.horse.dialog.firstSection': 'Začína tvoju vychádzku',
|
||||
'tours.horse.dialog.joins': 'Nadväzuje na koniec tvojej vychádzky',
|
||||
'tours.horse.dialog.gap': 'Medzi koncom tvojej vychádzky a týmto úsekom je {distance} bez jazdeckej trasy.',
|
||||
'tours.horse.dialog.joinGap': 'Prepojiť ručným úsekom',
|
||||
'tours.horse.dialog.joinGapHint': 'Nakreslené rovno a neoverené',
|
||||
'tours.horse.dialog.adopt': 'Prevziať úsek',
|
||||
'tours.horse.access.title': 'Prístup pre kone',
|
||||
'tours.horse.access.note':
|
||||
'Čo OpenStreetMap pozdĺž ciest uvádza ako horse=*. Údaje môžu chýbať alebo byť zastarané; platí značenie na mieste.',
|
||||
'tours.horse.access.closedNotice': 'Časť tohto úseku je pre kone uvedená ako zakázaná alebo súkromná.',
|
||||
'tours.horse.access.value.designated': 'Vyhradené pre jazdcov',
|
||||
'tours.horse.access.value.yes': 'Povolené',
|
||||
'tours.horse.access.value.permissive': 'Tolerované vlastníkom',
|
||||
'tours.horse.access.value.destination': 'Len pre dopravnú obsluhu',
|
||||
'tours.horse.access.value.discouraged': 'Neodporúčané',
|
||||
'tours.horse.access.value.private': 'Súkromné',
|
||||
'tours.horse.access.value.no': 'Zakázané',
|
||||
'tours.horse.access.value.other': 'Iné pravidlo',
|
||||
'tours.horse.access.value.unknown': 'V dátach chýba',
|
||||
'tours.horse.access.summary.open': 'Podľa dát otvorené pre jazdcov',
|
||||
'tours.horse.access.summary.limited': 'Čiastočne obmedzené',
|
||||
'tours.horse.access.summary.closed': 'Čiastočne zakázané',
|
||||
'tours.horse.access.summary.unknown': 'Prístup v dátach chýba',
|
||||
'tours.horse.leg.info': 'Úsek značenej jazdeckej trasy z OpenStreetMap. Prístup pre kone: {access}',
|
||||
'tours.horse.leg.manual': 'Ručne, neoverené',
|
||||
'tours.horse.leg.manualInfo': 'Nakreslené ručne, rovno. Neoverila ho žiadna jazdecká trasa ani plánovač.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -995,5 +995,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Sjöarna planeras nära stranden.',
|
||||
'tours.paddle.status.unrouted': '{count} etapper inte planerade',
|
||||
'tours.paddle.status.unrouted.one': '{count} etapp inte planerad',
|
||||
'tourTypes.horse': 'Ridtur',
|
||||
'tours.planner.tourTypeHint.horse': 'Till häst, längs skyltade ridleder',
|
||||
'tours.planner.namePlaceholder.horse': 'Namnlös ridtur',
|
||||
'tours.horse.time': 'Ridtid',
|
||||
'tours.horse.timeInfoLabel': 'Varför det inte finns någon ridtid',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK räknar inte ut någon ridtid: tempot bestäms av häst och ryttare. Ange själv en planerad total tid om du vill.',
|
||||
'tours.horse.routes.title': 'Ridleder',
|
||||
'tours.horse.routes.infoLabel': 'Om ridleder',
|
||||
'tours.horse.routes.info':
|
||||
'Skyltade ridleder från OpenStreetMap, i delsträckor som du tar hela. Att en väg hör till en led ger inte lov att rida där.',
|
||||
'tours.horse.routes.search': 'Sök i kartvyn',
|
||||
'tours.horse.routes.searchAgain': 'Sök i den här vyn',
|
||||
'tours.horse.routes.loading': 'Söker ridleder…',
|
||||
'tours.horse.routes.zoomIn': 'Zooma in mer för att söka efter ridleder.',
|
||||
'tours.horse.routes.offline': 'Ridleder kräver anslutning.',
|
||||
'tours.horse.routes.failed': 'Ridlederna kunde inte läsas. Din ridtur är oförändrad.',
|
||||
'tours.horse.routes.none': 'Inga skyltade ridleder i den här vyn.',
|
||||
'tours.horse.routes.truncated': 'Här finns fler leder än en sökning visar. Zooma in för att se alla.',
|
||||
'tours.horse.routes.unnamed': 'Namnlös ridled',
|
||||
'tours.horse.routes.sections': 'Delsträckor',
|
||||
'tours.horse.routes.continues': 'Fortsätter utanför vyn',
|
||||
'tours.horse.dialog.eyebrow': 'Ridled',
|
||||
'tours.horse.dialog.osm': 'Öppna i OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Delsträcka {number}',
|
||||
'tours.horse.dialog.direction': 'Riktning',
|
||||
'tours.horse.dialog.asMapped': 'Som kartlagt',
|
||||
'tours.horse.dialog.reversed': 'Omvänt',
|
||||
'tours.horse.dialog.signedWith': 'Skyltad i den här riktningen',
|
||||
'tours.horse.dialog.signedAgainst': 'Den här delsträckan är skyltad i motsatt riktning.',
|
||||
'tours.horse.dialog.connection': 'Anslutning till din ridtur',
|
||||
'tours.horse.dialog.firstSection': 'Börjar din ridtur',
|
||||
'tours.horse.dialog.joins': 'Ansluter till slutet av din ridtur',
|
||||
'tours.horse.dialog.gap': 'Mellan slutet av din ridtur och den här delsträckan ligger {distance} utan ridled.',
|
||||
'tours.horse.dialog.joinGap': 'Förbind med en manuell delsträcka',
|
||||
'tours.horse.dialog.joinGapHint': 'Rakt dragen och okontrollerad',
|
||||
'tours.horse.dialog.adopt': 'Ta delsträcka',
|
||||
'tours.horse.access.title': 'Tillträde för häst',
|
||||
'tours.horse.access.note':
|
||||
'Det OpenStreetMap anger som horse=* längs vägarna. Uppgifter kan saknas eller vara inaktuella; skyltarna på plats gäller.',
|
||||
'tours.horse.access.closedNotice': 'En del av den här delsträckan är angiven som stängd eller privat för hästar.',
|
||||
'tours.horse.access.value.designated': 'Avsedd för ryttare',
|
||||
'tours.horse.access.value.yes': 'Tillåtet',
|
||||
'tours.horse.access.value.permissive': 'Tolereras av ägaren',
|
||||
'tours.horse.access.value.destination': 'Endast behörig trafik',
|
||||
'tours.horse.access.value.discouraged': 'Avrådes',
|
||||
'tours.horse.access.value.private': 'Privat',
|
||||
'tours.horse.access.value.no': 'Förbjudet',
|
||||
'tours.horse.access.value.other': 'Annan regel',
|
||||
'tours.horse.access.value.unknown': 'Saknas i datan',
|
||||
'tours.horse.access.summary.open': 'Öppet för ryttare enligt datan',
|
||||
'tours.horse.access.summary.limited': 'Delvis begränsat',
|
||||
'tours.horse.access.summary.closed': 'Delvis stängt',
|
||||
'tours.horse.access.summary.unknown': 'Tillträde saknas i datan',
|
||||
'tours.horse.leg.info': 'Delsträcka av en skyltad ridled från OpenStreetMap. Tillträde för häst: {access}',
|
||||
'tours.horse.leg.manual': 'Manuell, okontrollerad',
|
||||
'tours.horse.leg.manualInfo': 'Dragen för hand, rakt. Ingen ridled och ingen ruttplanerare har kontrollerat den.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -951,5 +951,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreAdopt': 'วางแผนใกล้ฝั่ง',
|
||||
'tours.paddle.wind.shoreTaken': 'ทะเลสาบถูกวางแผนให้อยู่ใกล้ฝั่ง',
|
||||
'tours.paddle.status.unrouted': 'ยังไม่ได้วางแผน {count} ช่วง',
|
||||
'tourTypes.horse': 'ทริปขี่ม้า',
|
||||
'tours.planner.tourTypeHint.horse': 'บนหลังม้า ตามเส้นทางขี่ม้าที่มีป้ายบอก',
|
||||
'tours.planner.namePlaceholder.horse': 'ทริปขี่ม้าที่ไม่มีชื่อ',
|
||||
'tours.horse.time': 'เวลาขี่ม้า',
|
||||
'tours.horse.timeInfoLabel': 'ทำไมจึงไม่มีเวลาขี่ม้า',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK ไม่คำนวณเวลาขี่ม้า เพราะจังหวะขึ้นอยู่กับม้าและผู้ขี่ หากต้องการ ให้กรอกเวลารวมที่วางแผนไว้เอง',
|
||||
'tours.horse.routes.title': 'เส้นทางขี่ม้า',
|
||||
'tours.horse.routes.infoLabel': 'เกี่ยวกับเส้นทางขี่ม้า',
|
||||
'tours.horse.routes.info':
|
||||
'เส้นทางขี่ม้าที่มีป้ายบอกจาก OpenStreetMap แบ่งเป็นช่วงที่นำมาใช้ทั้งช่วง การอยู่บนเส้นทางไม่ได้หมายความว่าได้รับอนุญาตให้ขี่ม้า',
|
||||
'tours.horse.routes.search': 'ค้นหาในมุมมองแผนที่',
|
||||
'tours.horse.routes.searchAgain': 'ค้นหาในมุมมองนี้',
|
||||
'tours.horse.routes.loading': 'กำลังค้นหาเส้นทางขี่ม้า…',
|
||||
'tours.horse.routes.zoomIn': 'ซูมเข้าอีกเพื่อค้นหาเส้นทางขี่ม้า',
|
||||
'tours.horse.routes.offline': 'เส้นทางขี่ม้าต้องใช้การเชื่อมต่อ',
|
||||
'tours.horse.routes.failed': 'อ่านเส้นทางขี่ม้าไม่ได้ ทริปของคุณไม่เปลี่ยนแปลง',
|
||||
'tours.horse.routes.none': 'ไม่มีเส้นทางขี่ม้าที่มีป้ายบอกในมุมมองนี้',
|
||||
'tours.horse.routes.truncated': 'ที่นี่มีเส้นทางมากกว่าที่การค้นหาครั้งเดียวแสดงได้ ซูมเข้าเพื่อดูทั้งหมด',
|
||||
'tours.horse.routes.unnamed': 'เส้นทางขี่ม้าที่ไม่มีชื่อ',
|
||||
'tours.horse.routes.sections': 'ช่วงเส้นทาง',
|
||||
'tours.horse.routes.continues': 'ต่อเนื่องออกไปนอกมุมมอง',
|
||||
'tours.horse.dialog.eyebrow': 'เส้นทางขี่ม้า',
|
||||
'tours.horse.dialog.osm': 'เปิดใน OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'ช่วงที่ {number}',
|
||||
'tours.horse.dialog.direction': 'ทิศทาง',
|
||||
'tours.horse.dialog.asMapped': 'ตามที่ทำแผนที่ไว้',
|
||||
'tours.horse.dialog.reversed': 'กลับทิศ',
|
||||
'tours.horse.dialog.signedWith': 'มีป้ายบอกในทิศทางนี้',
|
||||
'tours.horse.dialog.signedAgainst': 'ช่วงนี้มีป้ายบอกในทิศทางตรงข้าม',
|
||||
'tours.horse.dialog.connection': 'การต่อกับทริปของคุณ',
|
||||
'tours.horse.dialog.firstSection': 'เริ่มทริปของคุณ',
|
||||
'tours.horse.dialog.joins': 'ต่อจากจุดสิ้นสุดทริปของคุณ',
|
||||
'tours.horse.dialog.gap': 'ระหว่างจุดสิ้นสุดทริปของคุณกับช่วงนี้มีระยะ {distance} ที่ไม่อยู่บนเส้นทางขี่ม้า',
|
||||
'tours.horse.dialog.joinGap': 'เชื่อมด้วยช่วงที่วาดเอง',
|
||||
'tours.horse.dialog.joinGapHint': 'ลากเป็นเส้นตรงและยังไม่ตรวจสอบ',
|
||||
'tours.horse.dialog.adopt': 'นำช่วงนี้มาใช้',
|
||||
'tours.horse.access.title': 'การเข้าถึงสำหรับม้า',
|
||||
'tours.horse.access.note':
|
||||
'ข้อมูลที่ OpenStreetMap บันทึกเป็น horse=* ตามเส้นทาง ข้อมูลอาจขาดหรือเก่า ให้ถือป้ายในพื้นที่เป็นหลัก',
|
||||
'tours.horse.access.closedNotice': 'บางส่วนของช่วงนี้ถูกบันทึกว่าปิดหรือเป็นทางส่วนบุคคลสำหรับม้า',
|
||||
'tours.horse.access.value.designated': 'กำหนดให้ผู้ขี่ม้า',
|
||||
'tours.horse.access.value.yes': 'อนุญาต',
|
||||
'tours.horse.access.value.permissive': 'เจ้าของยินยอม',
|
||||
'tours.horse.access.value.destination': 'เฉพาะไปยังจุดหมาย',
|
||||
'tours.horse.access.value.discouraged': 'ไม่แนะนำ',
|
||||
'tours.horse.access.value.private': 'ส่วนบุคคล',
|
||||
'tours.horse.access.value.no': 'ห้าม',
|
||||
'tours.horse.access.value.other': 'กฎอื่น',
|
||||
'tours.horse.access.value.unknown': 'ไม่มีในข้อมูล',
|
||||
'tours.horse.access.summary.open': 'เปิดให้ผู้ขี่ม้าตามข้อมูล',
|
||||
'tours.horse.access.summary.limited': 'จำกัดบางส่วน',
|
||||
'tours.horse.access.summary.closed': 'ปิดบางส่วน',
|
||||
'tours.horse.access.summary.unknown': 'ไม่มีข้อมูลการเข้าถึง',
|
||||
'tours.horse.leg.info': 'ช่วงหนึ่งของเส้นทางขี่ม้าที่มีป้ายบอกจาก OpenStreetMap การเข้าถึงสำหรับม้า: {access}',
|
||||
'tours.horse.leg.manual': 'วาดเอง ยังไม่ตรวจสอบ',
|
||||
'tours.horse.leg.manualInfo': 'วาดด้วยมือเป็นเส้นตรง ไม่มีเส้นทางขี่ม้าหรือตัววางเส้นทางใดตรวจสอบ',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -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 = 898;
|
||||
const GENERAL_KEY_COUNT = 952;
|
||||
|
||||
function literalKeys(source: string): string[] {
|
||||
const tree = ts.createSourceFile('locale.ts', source, ts.ScriptTarget.Latest, true);
|
||||
|
||||
@@ -1002,5 +1002,63 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreTaken': 'Göller kıyıya yakın planlandı.',
|
||||
'tours.paddle.status.unrouted': '{count} bölüm planlanmadı',
|
||||
'tours.paddle.status.unrouted.one': '{count} bölüm planlanmadı',
|
||||
'tourTypes.horse': 'At gezisi',
|
||||
'tours.planner.tourTypeHint.horse': 'At sırtında, işaretli binicilik rotalarında',
|
||||
'tours.planner.namePlaceholder.horse': 'Adsız at gezisi',
|
||||
'tours.horse.time': 'Sürüş süresi',
|
||||
'tours.horse.timeInfoLabel': 'Neden sürüş süresi yok',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK sürüş süresi hesaplamaz: tempoyu at ve binici belirler. İstersen planlanan toplam süreyi kendin gir.',
|
||||
'tours.horse.routes.title': 'Binicilik rotaları',
|
||||
'tours.horse.routes.infoLabel': 'Binicilik rotaları hakkında',
|
||||
'tours.horse.routes.info':
|
||||
'OpenStreetMap kaynaklı işaretli binicilik rotaları, bütün olarak alınan bölümler hâlinde. Bir yolun rotaya ait olması orada ata binme izni vermez.',
|
||||
'tours.horse.routes.search': 'Harita görünümünde ara',
|
||||
'tours.horse.routes.searchAgain': 'Bu görünümde ara',
|
||||
'tours.horse.routes.loading': 'Binicilik rotaları aranıyor…',
|
||||
'tours.horse.routes.zoomIn': 'Binicilik rotası aramak için daha fazla yakınlaştır.',
|
||||
'tours.horse.routes.offline': 'Binicilik rotaları için bağlantı gerekir.',
|
||||
'tours.horse.routes.failed': 'Binicilik rotaları okunamadı. Gezin değişmedi.',
|
||||
'tours.horse.routes.none': 'Bu görünümde işaretli binicilik rotası yok.',
|
||||
'tours.horse.routes.truncated':
|
||||
'Burada bir aramanın gösterdiğinden daha fazla rota var. Hepsini görmek için yakınlaştır.',
|
||||
'tours.horse.routes.unnamed': 'Adsız binicilik rotası',
|
||||
'tours.horse.routes.sections': 'Bölümler',
|
||||
'tours.horse.routes.continues': 'Görünümün ötesinde devam ediyor',
|
||||
'tours.horse.dialog.eyebrow': 'Binicilik rotası',
|
||||
'tours.horse.dialog.osm': "OpenStreetMap'te aç",
|
||||
'tours.horse.dialog.section': 'Bölüm {number}',
|
||||
'tours.horse.dialog.direction': 'Yön',
|
||||
'tours.horse.dialog.asMapped': 'Haritadaki gibi',
|
||||
'tours.horse.dialog.reversed': 'Ters',
|
||||
'tours.horse.dialog.signedWith': 'Bu yönde işaretli',
|
||||
'tours.horse.dialog.signedAgainst': 'Bu bölüm ters yönde işaretlenmiş.',
|
||||
'tours.horse.dialog.connection': 'Geziye bağlantı',
|
||||
'tours.horse.dialog.firstSection': 'Gezini başlatır',
|
||||
'tours.horse.dialog.joins': 'Gezinin sonuna bağlanır',
|
||||
'tours.horse.dialog.gap': 'Gezinin sonu ile bu bölüm arasında binicilik rotası olmayan {distance} var.',
|
||||
'tours.horse.dialog.joinGap': 'Elle çizilen bir bölümle bağla',
|
||||
'tours.horse.dialog.joinGapHint': 'Düz çizilmiş ve denetlenmemiş',
|
||||
'tours.horse.dialog.adopt': 'Bölümü al',
|
||||
'tours.horse.access.title': 'At erişimi',
|
||||
'tours.horse.access.note':
|
||||
"OpenStreetMap'in yollar boyunca horse=* olarak kaydettiği bilgiler. Veriler eksik ya da güncel olmayabilir; yerindeki tabelalar geçerlidir.",
|
||||
'tours.horse.access.closedNotice': 'Bu bölümün bir kısmı atlar için kapalı ya da özel olarak kayıtlı.',
|
||||
'tours.horse.access.value.designated': 'Binicilere ayrılmış',
|
||||
'tours.horse.access.value.yes': 'İzinli',
|
||||
'tours.horse.access.value.permissive': 'Sahibi tarafından hoş görülür',
|
||||
'tours.horse.access.value.destination': 'Yalnızca varış için',
|
||||
'tours.horse.access.value.discouraged': 'Önerilmez',
|
||||
'tours.horse.access.value.private': 'Özel',
|
||||
'tours.horse.access.value.no': 'Yasak',
|
||||
'tours.horse.access.value.other': 'Başka kural',
|
||||
'tours.horse.access.value.unknown': 'Verilerde yok',
|
||||
'tours.horse.access.summary.open': 'Verilere göre binicilere açık',
|
||||
'tours.horse.access.summary.limited': 'Kısmen kısıtlı',
|
||||
'tours.horse.access.summary.closed': 'Kısmen kapalı',
|
||||
'tours.horse.access.summary.unknown': 'Erişim verilerde yok',
|
||||
'tours.horse.leg.info': "OpenStreetMap'teki işaretli bir binicilik rotasının bölümü. At erişimi: {access}",
|
||||
'tours.horse.leg.manual': 'Elle, denetlenmemiş',
|
||||
'tours.horse.leg.manualInfo': 'Elle, düz çizildi. Ne bir binicilik rotası ne de bir rota planlayıcı denetledi.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -1036,5 +1036,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.status.unrouted.one': '{count} ділянку не прокладено',
|
||||
'tours.paddle.status.unrouted.few': '{count} ділянки не прокладено',
|
||||
'tours.paddle.status.unrouted.many': '{count} ділянок не прокладено',
|
||||
'tourTypes.horse': 'Кінна прогулянка',
|
||||
'tours.planner.tourTypeHint.horse': 'Верхи, маркованими кінними маршрутами',
|
||||
'tours.planner.namePlaceholder.horse': 'Кінна прогулянка без назви',
|
||||
'tours.horse.time': 'Час у сідлі',
|
||||
'tours.horse.timeInfoLabel': 'Чому немає часу в сідлі',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK не розраховує час у сідлі: темп залежить від коня і вершника. За бажання вкажіть загальний час самі.',
|
||||
'tours.horse.routes.title': 'Кінні маршрути',
|
||||
'tours.horse.routes.infoLabel': 'Про кінні маршрути',
|
||||
'tours.horse.routes.info':
|
||||
'Марковані кінні маршрути з OpenStreetMap, ділянками, які беруться цілком. Належність до маршруту не дає права їздити ним верхи.',
|
||||
'tours.horse.routes.search': 'Шукати у видимій області',
|
||||
'tours.horse.routes.searchAgain': 'Шукати в цій області',
|
||||
'tours.horse.routes.loading': 'Шукаємо кінні маршрути…',
|
||||
'tours.horse.routes.zoomIn': 'Наблизьте карту, щоб шукати кінні маршрути.',
|
||||
'tours.horse.routes.offline': "Для кінних маршрутів потрібне з'єднання.",
|
||||
'tours.horse.routes.failed': 'Не вдалося прочитати кінні маршрути. Ваша прогулянка не змінилася.',
|
||||
'tours.horse.routes.none': 'У цій області немає маркованих кінних маршрутів.',
|
||||
'tours.horse.routes.truncated': 'Тут більше маршрутів, ніж показує один пошук. Наблизьте карту, щоб побачити всі.',
|
||||
'tours.horse.routes.unnamed': 'Кінний маршрут без назви',
|
||||
'tours.horse.routes.sections': 'Ділянки',
|
||||
'tours.horse.routes.continues': 'Продовжується за межами області',
|
||||
'tours.horse.dialog.eyebrow': 'Кінний маршрут',
|
||||
'tours.horse.dialog.osm': 'Відкрити в OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Ділянка {number}',
|
||||
'tours.horse.dialog.direction': 'Напрямок',
|
||||
'tours.horse.dialog.asMapped': 'Як на карті',
|
||||
'tours.horse.dialog.reversed': 'У зворотний бік',
|
||||
'tours.horse.dialog.signedWith': 'Маркований у цьому напрямку',
|
||||
'tours.horse.dialog.signedAgainst': 'Цю ділянку марковано у зворотному напрямку.',
|
||||
'tours.horse.dialog.connection': "Зв'язок із прогулянкою",
|
||||
'tours.horse.dialog.firstSection': 'Починає прогулянку',
|
||||
'tours.horse.dialog.joins': 'Продовжує кінець прогулянки',
|
||||
'tours.horse.dialog.gap': 'Між кінцем прогулянки та цією ділянкою {distance} без кінного маршруту.',
|
||||
'tours.horse.dialog.joinGap': 'Зʼєднати ділянкою вручну',
|
||||
'tours.horse.dialog.joinGapHint': 'Пряма лінія, не перевірено',
|
||||
'tours.horse.dialog.adopt': 'Взяти ділянку',
|
||||
'tours.horse.access.title': 'Доступ для коней',
|
||||
'tours.horse.access.note':
|
||||
'Те, що OpenStreetMap позначає вздовж доріг як horse=*. Даних може бракувати або вони застарілі; на місці діють знаки.',
|
||||
'tours.horse.access.closedNotice': 'Частину цієї ділянки позначено як закриту або приватну для коней.',
|
||||
'tours.horse.access.value.designated': 'Призначено для вершників',
|
||||
'tours.horse.access.value.yes': 'Дозволено',
|
||||
'tours.horse.access.value.permissive': 'Допускається власником',
|
||||
'tours.horse.access.value.destination': 'Лише для місцевого проїзду',
|
||||
'tours.horse.access.value.discouraged': 'Не рекомендовано',
|
||||
'tours.horse.access.value.private': 'Приватна',
|
||||
'tours.horse.access.value.no': 'Заборонено',
|
||||
'tours.horse.access.value.other': 'Інше правило',
|
||||
'tours.horse.access.value.unknown': 'Немає в даних',
|
||||
'tours.horse.access.summary.open': 'За даними відкрито для вершників',
|
||||
'tours.horse.access.summary.limited': 'Частково обмежено',
|
||||
'tours.horse.access.summary.closed': 'Частково закрито',
|
||||
'tours.horse.access.summary.unknown': 'Доступ не вказано в даних',
|
||||
'tours.horse.leg.info': 'Ділянка маркованого кінного маршруту з OpenStreetMap. Доступ для коней: {access}',
|
||||
'tours.horse.leg.manual': 'Вручну, не перевірено',
|
||||
'tours.horse.leg.manualInfo': 'Намальовано вручну, по прямій. Ні кінний маршрут, ні маршрутизатор її не перевіряли.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -987,5 +987,62 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreAdopt': 'Lập gần bờ',
|
||||
'tours.paddle.wind.shoreTaken': 'Các hồ được lập gần bờ.',
|
||||
'tours.paddle.status.unrouted': '{count} chặng chưa được lập',
|
||||
'tourTypes.horse': 'Chuyến cưỡi ngựa',
|
||||
'tours.planner.tourTypeHint.horse': 'Trên lưng ngựa, theo các tuyến cưỡi ngựa có biển chỉ dẫn',
|
||||
'tours.planner.namePlaceholder.horse': 'Chuyến cưỡi ngựa chưa đặt tên',
|
||||
'tours.horse.time': 'Thời gian cưỡi ngựa',
|
||||
'tours.horse.timeInfoLabel': 'Vì sao không có thời gian cưỡi ngựa',
|
||||
'tours.horse.timeInfo':
|
||||
'TREK không tính thời gian cưỡi ngựa: tốc độ do ngựa và người cưỡi quyết định. Nếu muốn, hãy tự nhập tổng thời gian dự kiến.',
|
||||
'tours.horse.routes.title': 'Tuyến cưỡi ngựa',
|
||||
'tours.horse.routes.infoLabel': 'Về tuyến cưỡi ngựa',
|
||||
'tours.horse.routes.info':
|
||||
'Các tuyến cưỡi ngựa có biển chỉ dẫn từ OpenStreetMap, theo từng đoạn được lấy nguyên. Thuộc một tuyến không có nghĩa là được phép cưỡi ngựa ở đó.',
|
||||
'tours.horse.routes.search': 'Tìm trong khung bản đồ',
|
||||
'tours.horse.routes.searchAgain': 'Tìm trong khung này',
|
||||
'tours.horse.routes.loading': 'Đang tìm tuyến cưỡi ngựa…',
|
||||
'tours.horse.routes.zoomIn': 'Phóng to thêm để tìm tuyến cưỡi ngựa.',
|
||||
'tours.horse.routes.offline': 'Tuyến cưỡi ngựa cần có kết nối.',
|
||||
'tours.horse.routes.failed': 'Không đọc được tuyến cưỡi ngựa. Chuyến đi của bạn không thay đổi.',
|
||||
'tours.horse.routes.none': 'Không có tuyến cưỡi ngựa có biển chỉ dẫn trong khung này.',
|
||||
'tours.horse.routes.truncated': 'Ở đây có nhiều tuyến hơn một lần tìm hiển thị. Phóng to để xem tất cả.',
|
||||
'tours.horse.routes.unnamed': 'Tuyến cưỡi ngựa không tên',
|
||||
'tours.horse.routes.sections': 'Các đoạn',
|
||||
'tours.horse.routes.continues': 'Tiếp tục ra ngoài khung',
|
||||
'tours.horse.dialog.eyebrow': 'Tuyến cưỡi ngựa',
|
||||
'tours.horse.dialog.osm': 'Mở trong OpenStreetMap',
|
||||
'tours.horse.dialog.section': 'Đoạn {number}',
|
||||
'tours.horse.dialog.direction': 'Hướng',
|
||||
'tours.horse.dialog.asMapped': 'Như trên bản đồ',
|
||||
'tours.horse.dialog.reversed': 'Đảo ngược',
|
||||
'tours.horse.dialog.signedWith': 'Có biển chỉ theo hướng này',
|
||||
'tours.horse.dialog.signedAgainst': 'Đoạn này có biển chỉ theo hướng ngược lại.',
|
||||
'tours.horse.dialog.connection': 'Nối vào chuyến đi',
|
||||
'tours.horse.dialog.firstSection': 'Bắt đầu chuyến đi',
|
||||
'tours.horse.dialog.joins': 'Nối vào cuối chuyến đi',
|
||||
'tours.horse.dialog.gap': 'Giữa cuối chuyến đi và đoạn này có {distance} không thuộc tuyến cưỡi ngựa nào.',
|
||||
'tours.horse.dialog.joinGap': 'Nối bằng một đoạn thủ công',
|
||||
'tours.horse.dialog.joinGapHint': 'Vẽ thẳng và chưa kiểm tra',
|
||||
'tours.horse.dialog.adopt': 'Lấy đoạn',
|
||||
'tours.horse.access.title': 'Quyền đi ngựa',
|
||||
'tours.horse.access.note':
|
||||
'Những gì OpenStreetMap ghi là horse=* dọc các con đường. Dữ liệu có thể thiếu hoặc cũ; biển báo tại chỗ mới là căn cứ.',
|
||||
'tours.horse.access.closedNotice': 'Một phần đoạn này được ghi là cấm hoặc riêng tư đối với ngựa.',
|
||||
'tours.horse.access.value.designated': 'Dành cho người cưỡi ngựa',
|
||||
'tours.horse.access.value.yes': 'Được phép',
|
||||
'tours.horse.access.value.permissive': 'Chủ sở hữu cho phép',
|
||||
'tours.horse.access.value.destination': 'Chỉ để đến nơi',
|
||||
'tours.horse.access.value.discouraged': 'Không khuyến khích',
|
||||
'tours.horse.access.value.private': 'Riêng tư',
|
||||
'tours.horse.access.value.no': 'Bị cấm',
|
||||
'tours.horse.access.value.other': 'Quy định khác',
|
||||
'tours.horse.access.value.unknown': 'Không có trong dữ liệu',
|
||||
'tours.horse.access.summary.open': 'Mở cho người cưỡi ngựa theo dữ liệu',
|
||||
'tours.horse.access.summary.limited': 'Hạn chế một phần',
|
||||
'tours.horse.access.summary.closed': 'Cấm một phần',
|
||||
'tours.horse.access.summary.unknown': 'Quyền đi không có trong dữ liệu',
|
||||
'tours.horse.leg.info': 'Một đoạn của tuyến cưỡi ngựa có biển chỉ dẫn từ OpenStreetMap. Quyền đi ngựa: {access}',
|
||||
'tours.horse.leg.manual': 'Thủ công, chưa kiểm tra',
|
||||
'tours.horse.leg.manualInfo': 'Vẽ tay, đường thẳng. Không tuyến cưỡi ngựa hay công cụ dẫn đường nào kiểm tra.',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -916,5 +916,59 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreAdopt': '沿岸規劃',
|
||||
'tours.paddle.wind.shoreTaken': '湖泊已依沿岸規劃。',
|
||||
'tours.paddle.status.unrouted': '{count} 段未規劃',
|
||||
'tourTypes.horse': '騎馬遊',
|
||||
'tours.planner.tourTypeHint.horse': '騎馬,沿著有標示的騎馬路線',
|
||||
'tours.planner.namePlaceholder.horse': '未命名的騎馬遊',
|
||||
'tours.horse.time': '騎乘時間',
|
||||
'tours.horse.timeInfoLabel': '為什麼沒有騎乘時間',
|
||||
'tours.horse.timeInfo': 'TREK 不計算騎乘時間:節奏取決於馬和騎士。如有需要,請自行填寫計畫總時長。',
|
||||
'tours.horse.routes.title': '騎馬路線',
|
||||
'tours.horse.routes.infoLabel': '關於騎馬路線',
|
||||
'tours.horse.routes.info': '來自 OpenStreetMap 的有標示騎馬路線,按可整段採用的路段顯示。屬於某條路線並不代表允許在那裡騎馬。',
|
||||
'tours.horse.routes.search': '在地圖畫面中尋找',
|
||||
'tours.horse.routes.searchAgain': '搜尋此畫面',
|
||||
'tours.horse.routes.loading': '正在尋找騎馬路線…',
|
||||
'tours.horse.routes.zoomIn': '請再放大以尋找騎馬路線。',
|
||||
'tours.horse.routes.offline': '騎馬路線需要連線。',
|
||||
'tours.horse.routes.failed': '無法讀取騎馬路線。你的騎馬遊沒有改變。',
|
||||
'tours.horse.routes.none': '此畫面中沒有有標示的騎馬路線。',
|
||||
'tours.horse.routes.truncated': '這裡的路線比一次搜尋能顯示的更多。放大即可看到全部。',
|
||||
'tours.horse.routes.unnamed': '未命名的騎馬路線',
|
||||
'tours.horse.routes.sections': '路段',
|
||||
'tours.horse.routes.continues': '延伸到畫面之外',
|
||||
'tours.horse.dialog.eyebrow': '騎馬路線',
|
||||
'tours.horse.dialog.osm': '在 OpenStreetMap 中開啟',
|
||||
'tours.horse.dialog.section': '路段 {number}',
|
||||
'tours.horse.dialog.direction': '方向',
|
||||
'tours.horse.dialog.asMapped': '依地圖方向',
|
||||
'tours.horse.dialog.reversed': '反向',
|
||||
'tours.horse.dialog.signedWith': '此方向有標示',
|
||||
'tours.horse.dialog.signedAgainst': '此路段的標示為反方向。',
|
||||
'tours.horse.dialog.connection': '與騎馬遊的銜接',
|
||||
'tours.horse.dialog.firstSection': '作為騎馬遊的起點',
|
||||
'tours.horse.dialog.joins': '接在騎馬遊終點之後',
|
||||
'tours.horse.dialog.gap': '騎馬遊終點與此路段之間有 {distance} 不在任何騎馬路線上。',
|
||||
'tours.horse.dialog.joinGap': '用手動路段連接',
|
||||
'tours.horse.dialog.joinGapHint': '直線繪製,未經檢查',
|
||||
'tours.horse.dialog.adopt': '採用路段',
|
||||
'tours.horse.access.title': '馬匹通行',
|
||||
'tours.horse.access.note': 'OpenStreetMap 沿道路記錄的 horse=* 資訊。資料可能缺漏或過時;以現場標誌為準。',
|
||||
'tours.horse.access.closedNotice': '此路段的一部分被記錄為禁止馬匹通行或私人道路。',
|
||||
'tours.horse.access.value.designated': '騎馬專用',
|
||||
'tours.horse.access.value.yes': '允許',
|
||||
'tours.horse.access.value.permissive': '所有者默許',
|
||||
'tours.horse.access.value.destination': '僅限前往目的地',
|
||||
'tours.horse.access.value.discouraged': '不建議',
|
||||
'tours.horse.access.value.private': '私人',
|
||||
'tours.horse.access.value.no': '禁止',
|
||||
'tours.horse.access.value.other': '其他規定',
|
||||
'tours.horse.access.value.unknown': '資料中沒有',
|
||||
'tours.horse.access.summary.open': '依資料對騎士開放',
|
||||
'tours.horse.access.summary.limited': '部分受限',
|
||||
'tours.horse.access.summary.closed': '部分禁止',
|
||||
'tours.horse.access.summary.unknown': '通行資訊不在資料中',
|
||||
'tours.horse.leg.info': '來自 OpenStreetMap 有標示騎馬路線的一段。馬匹通行:{access}',
|
||||
'tours.horse.leg.manual': '手動,未經檢查',
|
||||
'tours.horse.leg.manualInfo': '手動繪製的直線。沒有任何騎馬路線或路線規劃器檢查過它。',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -917,5 +917,59 @@ const tours: TranslationStrings = {
|
||||
'tours.paddle.wind.shoreAdopt': '沿岸规划',
|
||||
'tours.paddle.wind.shoreTaken': '湖泊已按沿岸规划。',
|
||||
'tours.paddle.status.unrouted': '{count} 段未规划',
|
||||
'tourTypes.horse': '骑马游',
|
||||
'tours.planner.tourTypeHint.horse': '骑马,沿着有标识的骑马路线',
|
||||
'tours.planner.namePlaceholder.horse': '未命名的骑马游',
|
||||
'tours.horse.time': '骑行时间',
|
||||
'tours.horse.timeInfoLabel': '为什么没有骑行时间',
|
||||
'tours.horse.timeInfo': 'TREK 不计算骑行时间:节奏取决于马和骑手。如有需要,请自行填写计划总时长。',
|
||||
'tours.horse.routes.title': '骑马路线',
|
||||
'tours.horse.routes.infoLabel': '关于骑马路线',
|
||||
'tours.horse.routes.info': '来自 OpenStreetMap 的有标识骑马路线,按可整段采用的路段显示。属于某条路线并不等于允许在那里骑马。',
|
||||
'tours.horse.routes.search': '在地图视图中查找',
|
||||
'tours.horse.routes.searchAgain': '搜索此视图',
|
||||
'tours.horse.routes.loading': '正在查找骑马路线…',
|
||||
'tours.horse.routes.zoomIn': '请继续放大以查找骑马路线。',
|
||||
'tours.horse.routes.offline': '骑马路线需要联网。',
|
||||
'tours.horse.routes.failed': '无法读取骑马路线。你的骑马游没有改变。',
|
||||
'tours.horse.routes.none': '此视图中没有有标识的骑马路线。',
|
||||
'tours.horse.routes.truncated': '这里的路线比一次搜索能显示的更多。放大即可看到全部。',
|
||||
'tours.horse.routes.unnamed': '未命名的骑马路线',
|
||||
'tours.horse.routes.sections': '路段',
|
||||
'tours.horse.routes.continues': '延伸到视图之外',
|
||||
'tours.horse.dialog.eyebrow': '骑马路线',
|
||||
'tours.horse.dialog.osm': '在 OpenStreetMap 中打开',
|
||||
'tours.horse.dialog.section': '路段 {number}',
|
||||
'tours.horse.dialog.direction': '方向',
|
||||
'tours.horse.dialog.asMapped': '按地图方向',
|
||||
'tours.horse.dialog.reversed': '反向',
|
||||
'tours.horse.dialog.signedWith': '此方向有标识',
|
||||
'tours.horse.dialog.signedAgainst': '此路段的标识为反方向。',
|
||||
'tours.horse.dialog.connection': '与骑马游的衔接',
|
||||
'tours.horse.dialog.firstSection': '作为骑马游的起点',
|
||||
'tours.horse.dialog.joins': '接在骑马游终点之后',
|
||||
'tours.horse.dialog.gap': '骑马游终点与此路段之间有 {distance} 不在任何骑马路线上。',
|
||||
'tours.horse.dialog.joinGap': '用手动路段连接',
|
||||
'tours.horse.dialog.joinGapHint': '直线绘制,未经检查',
|
||||
'tours.horse.dialog.adopt': '采用路段',
|
||||
'tours.horse.access.title': '马匹通行',
|
||||
'tours.horse.access.note': 'OpenStreetMap 沿道路记录的 horse=* 信息。数据可能缺失或过时;以现场标志为准。',
|
||||
'tours.horse.access.closedNotice': '此路段的一部分被记录为禁止马匹通行或私人道路。',
|
||||
'tours.horse.access.value.designated': '骑马专用',
|
||||
'tours.horse.access.value.yes': '允许',
|
||||
'tours.horse.access.value.permissive': '所有者默许',
|
||||
'tours.horse.access.value.destination': '仅限前往目的地',
|
||||
'tours.horse.access.value.discouraged': '不建议',
|
||||
'tours.horse.access.value.private': '私人',
|
||||
'tours.horse.access.value.no': '禁止',
|
||||
'tours.horse.access.value.other': '其他规定',
|
||||
'tours.horse.access.value.unknown': '数据中没有',
|
||||
'tours.horse.access.summary.open': '按数据对骑手开放',
|
||||
'tours.horse.access.summary.limited': '部分受限',
|
||||
'tours.horse.access.summary.closed': '部分禁止',
|
||||
'tours.horse.access.summary.unknown': '通行信息不在数据中',
|
||||
'tours.horse.leg.info': '来自 OpenStreetMap 有标识骑马路线的一段。马匹通行:{access}',
|
||||
'tours.horse.leg.manual': '手动,未经检查',
|
||||
'tours.horse.leg.manualInfo': '手动绘制的直线。没有任何骑马路线或路线规划器检查过它。',
|
||||
};
|
||||
export default tours;
|
||||
|
||||
@@ -73,6 +73,7 @@ export * from './tours/paddle-check.schema';
|
||||
export * from './tours/paddle-check-basis';
|
||||
export * from './tours/paddle-check';
|
||||
export * from './tours/route-corridor';
|
||||
export * from './tours/horse-route.schema';
|
||||
export * from './wanderer/wanderer.schema';
|
||||
export * from './geo/haversine';
|
||||
export * from './collection/collection.schema';
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
import {
|
||||
HORSE_ACCESS_VALUES,
|
||||
HORSE_ROUTES_ATTRIBUTION,
|
||||
horseAccessTone,
|
||||
horseRoutesQuerySchema,
|
||||
horseRoutesResponseSchema,
|
||||
turnedSignposted,
|
||||
} from './horse-route.schema';
|
||||
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
const section = {
|
||||
number: 1,
|
||||
geometry: [
|
||||
[47.1, 11.2],
|
||||
[47.11, 11.21],
|
||||
],
|
||||
length_m: 1350,
|
||||
access: [
|
||||
{ value: 'designated', length_m: 900 },
|
||||
{ value: 'unknown', length_m: 450 },
|
||||
],
|
||||
signposted: null,
|
||||
};
|
||||
const route = {
|
||||
id: 'relation/42',
|
||||
name: 'Reitweg Isartal',
|
||||
ref: 'R1',
|
||||
osmUrl: 'https://www.openstreetmap.org/relation/42',
|
||||
continues: false,
|
||||
sections: [section],
|
||||
};
|
||||
const answer = { routes: [route], truncated: false, source: 'openstreetmap', attribution: HORSE_ROUTES_ATTRIBUTION };
|
||||
|
||||
describe('horse routes contract (HOR-01)', () => {
|
||||
it('HORSE-SCHEMA-001: reads a map view box as the via ferrata layer does', () => {
|
||||
expect(horseRoutesQuerySchema.parse({ bbox: '47.1,11.2,47.4,11.6' }).bbox).toEqual({
|
||||
south: 47.1,
|
||||
west: 11.2,
|
||||
north: 47.4,
|
||||
east: 11.6,
|
||||
});
|
||||
expect(horseRoutesQuerySchema.safeParse({ bbox: '46,11,47,11.4' }).success).toBe(false);
|
||||
});
|
||||
|
||||
it('HORSE-SCHEMA-002: takes a route with its sections, their access and signposting', () => {
|
||||
expect(horseRoutesResponseSchema.parse(answer)).toEqual(answer);
|
||||
const oneWay = { ...section, signposted: 'with' };
|
||||
expect(horseRoutesResponseSchema.safeParse({ ...answer, routes: [{ ...route, sections: [oneWay] }] }).success).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
it('HORSE-SCHEMA-003: refuses a route of another element, without sections, or a section of one point', () => {
|
||||
const refused = [
|
||||
{ ...route, id: 'way/42' },
|
||||
{ ...route, sections: [] },
|
||||
{ ...route, sections: [{ ...section, geometry: [[47.1, 11.2]] }] },
|
||||
{ ...route, sections: [{ ...section, number: 0 }] },
|
||||
{ ...route, sections: [{ ...section, access: [{ value: 'maybe', length_m: 1 }] }] },
|
||||
{ ...route, sections: [{ ...section, signposted: 'forward' }] },
|
||||
];
|
||||
for (const item of refused) {
|
||||
expect(horseRoutesResponseSchema.safeParse({ ...answer, routes: [item] }).success).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
it('HORSE-SCHEMA-004: sorts every horse=* value into one of four steps, the untagged as unknown', () => {
|
||||
expect(Object.fromEntries(HORSE_ACCESS_VALUES.map((value) => [value, horseAccessTone(value)]))).toEqual({
|
||||
designated: 'open',
|
||||
yes: 'open',
|
||||
permissive: 'open',
|
||||
destination: 'limited',
|
||||
discouraged: 'limited',
|
||||
other: 'limited',
|
||||
private: 'closed',
|
||||
no: 'closed',
|
||||
unknown: 'unknown',
|
||||
});
|
||||
});
|
||||
|
||||
it('HORSE-SCHEMA-005: turns the signposted direction round, and leaves the unsaid unsaid', () => {
|
||||
expect(turnedSignposted('with')).toBe('against');
|
||||
expect(turnedSignposted('against')).toBe('with');
|
||||
expect(turnedSignposted(null)).toBeNull();
|
||||
expect(turnedSignposted(undefined)).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,141 @@
|
||||
import { FERRATAS_ATTRIBUTION, ferratasQuerySchema } from '../ferratas/ferratas.schema';
|
||||
|
||||
import { z } from 'zod';
|
||||
|
||||
/**
|
||||
* HOR-01: the signposted horse routes around a trip, read from OpenStreetMap
|
||||
* (relations tagged `route=horse`) through Overpass
|
||||
* (GET /api/trips/:tripId/tours/horse-routes?bbox=south,west,north,east), and
|
||||
* what a horse tour keeps of a stretch it takes from one.
|
||||
*
|
||||
* A route comes in sections: the stretches of its ways that run on without a
|
||||
* fork, a gap or a crossing of the route with itself. A section is taken whole
|
||||
* and in the direction the rider picks; nothing here joins two sections or
|
||||
* fills a gap between them. Being part of a route says nothing about whether a
|
||||
* way may be ridden: the `horse=*` tags of its ways are given apart, and a way
|
||||
* without one stays unknown.
|
||||
*/
|
||||
|
||||
/** The same box the via ferrata layer asks with: one map view, at most half a degree a side. */
|
||||
export const horseRoutesQuerySchema = ferratasQuerySchema;
|
||||
export type HorseRoutesQuery = z.output<typeof horseRoutesQuerySchema>;
|
||||
|
||||
/** The most routes one answer carries; past it the answer says `truncated`. */
|
||||
export const HORSE_ROUTES_RESULT_CAP = 60;
|
||||
/** The most sections one route carries; a route cut there says `truncated` too. */
|
||||
export const HORSE_ROUTE_SECTIONS_CAP = 200;
|
||||
/**
|
||||
* The most points a section carries: the most a fixed leg of a tour takes, so
|
||||
* a section always goes onto the tour as it came. A longer stretch is cut
|
||||
* into sections of this length that meet end to end.
|
||||
*/
|
||||
export const HORSE_ROUTE_SECTION_MAX_POINTS = 5000;
|
||||
|
||||
/** ODbL asks for this next to anything drawn from the data. */
|
||||
export const HORSE_ROUTES_ATTRIBUTION = FERRATAS_ATTRIBUTION;
|
||||
|
||||
/** The `code` beside `error` when no Overpass mirror answered, so the client can say "try again later". */
|
||||
export const HORSE_ROUTES_UNAVAILABLE_CODE = 'horse_routes_unavailable';
|
||||
|
||||
/**
|
||||
* `horse=*` as OpenStreetMap tags a way. The common values are kept as they
|
||||
* are; any other tagged value is `other`, and a way without the tag `unknown`.
|
||||
*/
|
||||
export const HORSE_ACCESS_VALUES = [
|
||||
'designated',
|
||||
'yes',
|
||||
'permissive',
|
||||
'destination',
|
||||
'discouraged',
|
||||
'private',
|
||||
'no',
|
||||
'other',
|
||||
'unknown',
|
||||
] as const;
|
||||
export const horseAccessSchema = z.enum(HORSE_ACCESS_VALUES);
|
||||
export type HorseAccess = z.infer<typeof horseAccessSchema>;
|
||||
|
||||
/**
|
||||
* What a value says for a rider, in four steps: open (designated, yes,
|
||||
* permissive), limited (destination, discouraged, any other value), closed
|
||||
* (private, no) and unknown (not tagged). A step sorts what is tagged; it is
|
||||
* no permission, and the ground may say otherwise.
|
||||
*/
|
||||
export type HorseAccessTone = 'open' | 'limited' | 'closed' | 'unknown';
|
||||
const ACCESS_TONES: Readonly<Record<HorseAccess, HorseAccessTone>> = {
|
||||
designated: 'open',
|
||||
yes: 'open',
|
||||
permissive: 'open',
|
||||
destination: 'limited',
|
||||
discouraged: 'limited',
|
||||
other: 'limited',
|
||||
private: 'closed',
|
||||
no: 'closed',
|
||||
unknown: 'unknown',
|
||||
};
|
||||
export function horseAccessTone(value: HorseAccess): HorseAccessTone {
|
||||
return ACCESS_TONES[value];
|
||||
}
|
||||
|
||||
/** How much of a line carries one `horse=*` value, in metres. */
|
||||
export const horseAccessShareSchema = z.object({
|
||||
value: horseAccessSchema,
|
||||
length_m: z.number().finite().nonnegative(),
|
||||
});
|
||||
export type HorseAccessShare = z.infer<typeof horseAccessShareSchema>;
|
||||
|
||||
/** The values along a line, each once, with the metres it covers. */
|
||||
export const horseAccessSharesSchema = z.array(horseAccessShareSchema).max(HORSE_ACCESS_VALUES.length);
|
||||
|
||||
/**
|
||||
* Whether a line runs the way its route is signposted (`with`) or the other
|
||||
* way (`against`), where the route is signposted one way only along all of
|
||||
* it. Null where it is signposted both ways, or the data does not say.
|
||||
*/
|
||||
export const horseSignpostedSchema = z.enum(['with', 'against']);
|
||||
export type HorseSignposted = z.infer<typeof horseSignpostedSchema>;
|
||||
|
||||
/** The other direction: a section or a leg turned round. */
|
||||
export function turnedSignposted(value: HorseSignposted | null | undefined): HorseSignposted | null {
|
||||
if (value == null) return null;
|
||||
return value === 'with' ? 'against' : 'with';
|
||||
}
|
||||
|
||||
const latitude = z.number().min(-90).max(90);
|
||||
const longitude = z.number().min(-180).max(180);
|
||||
|
||||
export const horseRouteSectionSchema = z.object({
|
||||
/** Its place among the route's sections, from 1, in the order the route lists its ways. */
|
||||
number: z.number().int().positive(),
|
||||
/** The line as [lat, lng] pairs, in the order the route's ways run. */
|
||||
geometry: z
|
||||
.array(z.tuple([latitude, longitude]))
|
||||
.min(2)
|
||||
.max(HORSE_ROUTE_SECTION_MAX_POINTS),
|
||||
length_m: z.number().finite().nonnegative(),
|
||||
access: horseAccessSharesSchema,
|
||||
/** Along `geometry`, as the route's member roles say. */
|
||||
signposted: horseSignpostedSchema.nullable(),
|
||||
});
|
||||
export type HorseRouteSection = z.infer<typeof horseRouteSectionSchema>;
|
||||
|
||||
export const horseRouteSchema = z.object({
|
||||
/** The OSM relation, as `relation/<id>`. */
|
||||
id: z.string().regex(/^relation\/\d+$/),
|
||||
name: z.string().max(255).nullable(),
|
||||
ref: z.string().max(64).nullable(),
|
||||
osmUrl: z.string().url(),
|
||||
/** The route has ways beyond the box asked for: it goes on past what the sections show. */
|
||||
continues: z.boolean(),
|
||||
sections: z.array(horseRouteSectionSchema).min(1).max(HORSE_ROUTE_SECTIONS_CAP),
|
||||
});
|
||||
export type HorseRoute = z.infer<typeof horseRouteSchema>;
|
||||
|
||||
export const horseRoutesResponseSchema = z.object({
|
||||
routes: z.array(horseRouteSchema).max(HORSE_ROUTES_RESULT_CAP),
|
||||
/** True when the box held more than the caps allow and the rest was left out. */
|
||||
truncated: z.boolean(),
|
||||
source: z.literal('openstreetmap'),
|
||||
attribution: z.literal(HORSE_ROUTES_ATTRIBUTION),
|
||||
});
|
||||
export type HorseRoutesResponse = z.infer<typeof horseRoutesResponseSchema>;
|
||||
@@ -27,6 +27,8 @@ export const TOUR_POI_CATEGORIES_BY_TYPE: Record<PlannableTourType, readonly Tou
|
||||
kayak: ['slipway', 'boat_rental', 'drinking_water', 'food', 'toilets', 'picnic', 'campsite', 'shelter'],
|
||||
walk: ['sights', 'museum', 'park', 'viewpoint', 'cafe', 'restaurant', 'market', 'toilets', 'drinking_water'],
|
||||
run: ['drinking_water', 'toilets', 'park', 'viewpoint', 'cafe', 'food', 'shelter', 'sights'],
|
||||
// HOR-01: water for horse and rider first; a ride stops where a walk would.
|
||||
horse: ['drinking_water', 'shelter', 'viewpoint', 'food', 'picnic', 'toilets', 'campsite', 'sights'],
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -683,3 +683,64 @@ describe('runs (RUN-01)', () => {
|
||||
expect(tourListItemSchema.parse(listed).run_profile).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('horse tours (HOR-01)', () => {
|
||||
const line = [
|
||||
[48, 11],
|
||||
[48.005, 11.01],
|
||||
[48.01, 11.02],
|
||||
];
|
||||
const section = {
|
||||
kind: 'horse_route' as const,
|
||||
ref: 'relation/42',
|
||||
name: 'Reitweg Isartal',
|
||||
geometry: line,
|
||||
signposted: 'with' as const,
|
||||
access: [{ value: 'designated' as const, length_m: 1200 }],
|
||||
};
|
||||
const drawn = { kind: 'free' as const, geometry: [line[0], line[2]] };
|
||||
const ride = (leg: object | null, extra: object = {}) => ({
|
||||
...baseRequest,
|
||||
tour_type: 'horse' as const,
|
||||
waypoints: [{ ...baseRequest.waypoints[0], ...(leg ? { fixed_leg: leg } : {}) }, baseRequest.waypoints[1]],
|
||||
...extra,
|
||||
});
|
||||
|
||||
it('saves a ride of horse route sections and stretches drawn by hand, with no hiking limit', () => {
|
||||
expect(tourCreateRequestSchema.parse(ride(section))).toMatchObject({
|
||||
tour_type: 'horse',
|
||||
max_hiking_difficulty: null,
|
||||
waypoints: [{ fixed_leg: section }, {}],
|
||||
});
|
||||
expect(tourCreateRequestSchema.safeParse(ride(drawn)).success).toBe(true);
|
||||
expect(tourCreateRequestSchema.safeParse(ride({ ...section, signposted: null, access: undefined })).success).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
it('refuses a routed leg on a ride, a via ferrata, a hiking limit or a riding time worked out', () => {
|
||||
expect(() => tourCreateRequestSchema.parse(ride(null))).toThrow(/follows a horse route or is drawn by hand/);
|
||||
const ferrata = { kind: 'ferrata', ref: 'way/1', name: null, geometry: [line[0], line[2]] };
|
||||
expect(() => tourCreateRequestSchema.parse(ride(ferrata))).toThrow(/horse tour has no via ferrata/);
|
||||
expect(() => tourCreateRequestSchema.parse(ride(section, { max_hiking_difficulty: 2 }))).toThrow(
|
||||
/hiking difficulty/,
|
||||
);
|
||||
expect(() => tourCreateRequestSchema.parse(ride(section, { duration_seconds: 3600 }))).toThrow(/riding time/);
|
||||
expect(tourCreateRequestSchema.safeParse(ride(section, { planned_duration_minutes: 240 })).success).toBe(true);
|
||||
});
|
||||
|
||||
it('keeps a horse route section to a horse tour, and to a relation of OpenStreetMap', () => {
|
||||
const hike = {
|
||||
...baseRequest,
|
||||
waypoints: [{ ...baseRequest.waypoints[0], fixed_leg: section }, baseRequest.waypoints[1]],
|
||||
};
|
||||
expect(() => tourCreateRequestSchema.parse(hike)).toThrow(/belongs to a horse tour/);
|
||||
expect(tourCreateRequestSchema.safeParse(ride({ ...section, ref: 'way/42' })).success).toBe(false);
|
||||
expect(tourCreateRequestSchema.safeParse(ride({ ...section, signposted: 'forward' })).success).toBe(false);
|
||||
});
|
||||
|
||||
it('imports a GPX file as a ride, with nothing of another type', () => {
|
||||
expect(tourGpxImportFieldsSchema.parse({ tour_type: 'horse' })).toEqual({ tour_type: 'horse' });
|
||||
expect(tourGpxImportFieldsSchema.safeParse({ tour_type: 'horse', bike_profile: 'road' }).success).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { horseAccessSharesSchema, horseSignpostedSchema } from './horse-route.schema';
|
||||
import { paddleCheckSchema, tourObstacleCheckSchema } from './paddle-check.schema';
|
||||
import {
|
||||
paddleLockSchema,
|
||||
@@ -24,7 +25,7 @@ import { z } from 'zod';
|
||||
* single-day, Road-Trip = motorized + multi-day.
|
||||
*/
|
||||
|
||||
export const tourTypeKeySchema = z.enum(['hike', 'bike', 'run', 'ski', 'kayak', 'walk', 'food']);
|
||||
export const tourTypeKeySchema = z.enum(['hike', 'bike', 'run', 'ski', 'kayak', 'walk', 'food', 'horse']);
|
||||
export type TourTypeKey = z.infer<typeof tourTypeKeySchema>;
|
||||
|
||||
/**
|
||||
@@ -33,9 +34,11 @@ export type TourTypeKey = z.infer<typeof tourTypeKeySchema>;
|
||||
* the start; the app calls it a paddle tour, and the boat is a field of its
|
||||
* own. A bike tour (BIK-01) names its profile the same way. `walk` is the city
|
||||
* walk (CW-01): stations joined on foot, without a hiking limit. `run` is a
|
||||
* run (RUN-01), planned on foot with the runner's own pace.
|
||||
* run (RUN-01), planned on foot with the runner's own pace. `horse` is a
|
||||
* ride (HOR-01): sections of signposted horse routes and stretches the rider
|
||||
* draws by hand, never routed.
|
||||
*/
|
||||
export const plannableTourTypeSchema = z.enum(['hike', 'walk', 'run', 'bike', 'kayak']);
|
||||
export const plannableTourTypeSchema = z.enum(['hike', 'walk', 'run', 'bike', 'kayak', 'horse']);
|
||||
export type PlannableTourType = z.infer<typeof plannableTourTypeSchema>;
|
||||
|
||||
/**
|
||||
@@ -43,7 +46,7 @@ export type PlannableTourType = z.infer<typeof plannableTourTypeSchema>;
|
||||
* and ski (SKI-02), which TREK does not route. A ski track comes in as it was
|
||||
* recorded and stays so; the planner never opens it as a draft.
|
||||
*/
|
||||
export const importableTourTypeSchema = z.enum(['hike', 'walk', 'run', 'bike', 'kayak', 'ski']);
|
||||
export const importableTourTypeSchema = z.enum(['hike', 'walk', 'run', 'bike', 'kayak', 'horse', 'ski']);
|
||||
export type ImportableTourType = z.infer<typeof importableTourTypeSchema>;
|
||||
|
||||
/**
|
||||
@@ -319,7 +322,10 @@ const fixedLegGeometrySchema = z
|
||||
* the next: off the path network, across a lake, wherever no router goes.
|
||||
* Nothing about a free leg was checked by a router. A portage (PAD-03) is a
|
||||
* free leg on land: the boat is carried along it, so it counts as land and
|
||||
* not as water, with the time getting out and back in takes.
|
||||
* not as water, with the time getting out and back in takes. A horse route
|
||||
* 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.
|
||||
*/
|
||||
export const tourFixedLegSchema = z.discriminatedUnion('kind', [
|
||||
z.object({
|
||||
@@ -339,6 +345,20 @@ export const tourFixedLegSchema = z.discriminatedUnion('kind', [
|
||||
/** Getting out, unloading and back in, on the first leg of a portage; null takes the starting value. */
|
||||
extra_minutes: paddleStopMinutesSchema.nullable().optional(),
|
||||
}),
|
||||
z.object({
|
||||
kind: z.literal('horse_route'),
|
||||
/** The OSM relation the section came from, `relation/<id>` style. */
|
||||
ref: z
|
||||
.string()
|
||||
.max(64)
|
||||
.regex(/^relation\/\d+$/),
|
||||
name: z.string().trim().max(255).nullable(),
|
||||
geometry: fixedLegGeometrySchema,
|
||||
/** Whether the leg runs the way the route is signposted; null both ways or not said. */
|
||||
signposted: horseSignpostedSchema.nullable().optional(),
|
||||
/** The `horse=*` tags along the section when it was taken, in metres per value. */
|
||||
access: horseAccessSharesSchema.optional(),
|
||||
}),
|
||||
]);
|
||||
export type TourFixedLeg = z.infer<typeof tourFixedLegSchema>;
|
||||
export type TourFixedLegKind = TourFixedLeg['kind'];
|
||||
@@ -530,6 +550,7 @@ const TYPE_NAMED: Record<PlannableTourType, string> = {
|
||||
walk: 'a city walk',
|
||||
run: 'a run',
|
||||
hike: 'a hike',
|
||||
horse: 'a horse tour',
|
||||
};
|
||||
|
||||
const PADDLE_FIELDS = [
|
||||
@@ -544,10 +565,12 @@ const PADDLE_FIELDS = [
|
||||
* What belongs to which type: a hike carries a routing limit and no boat; a
|
||||
* bike tour and a run exactly one profile each and nothing of a hike's or a
|
||||
* paddler's, a run also its pace; a paddle tour exactly one boat and its
|
||||
* water, and no hiking limit.
|
||||
* water, and no hiking limit; a horse tour (HOR-01) only legs taken from a
|
||||
* horse route or drawn by hand, and no riding time worked out for it.
|
||||
*/
|
||||
function tourTypeIssues(value: {
|
||||
tour_type: PlannableTourType;
|
||||
duration_seconds?: number | null;
|
||||
max_hiking_difficulty?: number | null;
|
||||
hiking_preferences?: HikingPreferences | null;
|
||||
bike_profile?: BikeProfile | null;
|
||||
@@ -595,14 +618,30 @@ function tourTypeIssues(value: {
|
||||
if (type !== 'bike' && value.bike_profile != null)
|
||||
issues.push({ path: ['bike_profile'], message: 'bike_profile belongs to a bike tour' });
|
||||
issues.push(...runIssues(value));
|
||||
// No router plans a ride, so no time is worked out for it; a planned total the rider enters is theirs.
|
||||
if (type === 'horse' && value.duration_seconds != null)
|
||||
issues.push({ path: ['duration_seconds'], message: 'a horse tour has no riding time worked out' });
|
||||
const points = value.waypoints ?? [];
|
||||
// A portage and a lock are a paddler's; a via ferrata is climbed, never ridden.
|
||||
(value.waypoints ?? []).forEach((point, index) => {
|
||||
if (type !== 'kayak' && point.fixed_leg?.kind === 'portage')
|
||||
points.forEach((point, index) => {
|
||||
const kind = point.fixed_leg?.kind;
|
||||
if (type !== 'kayak' && kind === 'portage')
|
||||
issues.push({ path: ['waypoints', index, 'fixed_leg'], message: 'a portage belongs to a paddle tour' });
|
||||
if (type !== 'kayak' && point.lock != null)
|
||||
issues.push({ path: ['waypoints', index, 'lock'], message: 'a lock belongs to a paddle tour' });
|
||||
if ((type === 'bike' || type === 'walk' || type === 'run') && point.fixed_leg?.kind === 'ferrata')
|
||||
if ((type === 'bike' || type === 'walk' || type === 'run' || type === 'horse') && kind === 'ferrata')
|
||||
issues.push({ path: ['waypoints', index, 'fixed_leg'], message: `${named} has no via ferrata` });
|
||||
if (type !== 'horse' && kind === 'horse_route')
|
||||
issues.push({
|
||||
path: ['waypoints', index, 'fixed_leg'],
|
||||
message: 'a horse route section belongs to a horse tour',
|
||||
});
|
||||
// HOR-01: nothing of a ride is routed, so no leg may pass for one that was.
|
||||
if (type === 'horse' && index < points.length - 1 && kind !== 'horse_route' && kind !== 'free')
|
||||
issues.push({
|
||||
path: ['waypoints', index, 'fixed_leg'],
|
||||
message: 'each leg of a horse tour follows a horse route or is drawn by hand',
|
||||
});
|
||||
// A stay, an importance and a protection are a city walk's stations'.
|
||||
if (type !== 'walk' && (point.stay_minutes != null || point.importance != null || point.protected === true))
|
||||
issues.push({ path: ['waypoints', index], message: 'stations belong to a city walk' });
|
||||
|
||||
Reference in New Issue
Block a user