feat(tours): OpenHikingMap as a hiking base map of the tour planner (MAP-01)

While a hike is planned, the planner's map switch offers "Hiking" beside the
map, topo and satellite: OpenHikingMap, with marked trails over the terrain.
It is a choice of the planner's view alone, like topo: the global map
setting, the tour and its days stay as they are. With no tour open, over an
import viewed as it came in and for a paddle tour it is not offered, and a
choice made earlier falls back to the standard map there.

openmaps.fr's tile usage policy is followed: tiles load only as the map
shows them, with the browser's Referer, from the server's own caching; no
service worker rule keeps them and the 3D flyover's warm-up passes their
source by. Its credit and donation link are on the map; the 3D map, whose
attribution is folded away under the panel, shows them as a line of its own
above its controls.

The service is best effort. A run of failed tiles while it is shown marks
the switch, with a tooltip and a status for screen readers that say it is
not answering and that the tour is untouched; one tile arriving clears it.
The tile health the seamark overlay had is now useTileHealth, shared by both.

The source is free for non-commercial installs up to 500,000 tiles a month.
tours_hiking_map_enabled is an admin switch under Tours (admin tours-hiking-map,
audited), on by default, for an install that is commercial or larger to
switch off until it has an agreement with the operator. /api/addons carries
it as toursHikingMap, true only while Tours is on.

Leaflet, GL and the 3D map read one table of the planner's raster bases
(tourRasterBases), so topo and the hiking map are drawn the same way.
tile.openmaps.fr is on the CSP's connect-src for the GL maps.
This commit is contained in:
Maurice
2026-10-19 13:07:36 +02:00
parent d322363e53
commit 06e6e25b25
90 changed files with 839 additions and 117 deletions
+3
View File
@@ -717,6 +717,9 @@ const admin: TranslationStrings = {
'admin.addons.subOptionsOn.many': 'المُفعّل: {count}',
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle': 'يمكن للمستخدمين ربط خادم wanderer الخاص بهم واستيراد دروبه كجولات',
'admin.toursHikingMap.title': 'خريطة المشي (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'يعرض OpenHikingMap كخريطة أساسية في مخطط الجولات. مجاني للتثبيتات غير التجارية حتى 500,000 مربع شهريًا؛ أما التثبيت التجاري أو الأكبر فيحتاج أولًا إلى اتفاق مع openmaps.fr',
'admin.addons.noAddons': 'لا توجد إضافات متاحة',
'admin.weather.title': 'بيانات الطقس',
'admin.weather.badge': 'منذ 24 مارس 2026',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'إخفاء جميع مسارات الحجوزات',
'map.baseLayer.default': 'خريطة',
'map.baseLayer.satellite': 'قمر صناعي',
'map.baseLayer.hiking': 'المشي',
'map.baseLayer.hikingDown': 'لا يستجيب OpenHikingMap حاليًا. انتقل إلى خريطة أخرى، وتبقى جولتك كما هي.',
'map.baseLayer.switchToSatellite': 'التبديل إلى عرض القمر الصناعي',
'map.baseLayer.switchToDefault': 'التبديل إلى عرض الخريطة',
'map.location.denied':
+3
View File
@@ -750,6 +750,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'İstifadəçilər öz wanderer instansiyalarını qoşa və onun cığırlarını tur kimi idxal edə bilərlər',
'admin.toursHikingMap.title': 'Gəzinti xəritəsi (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'OpenHikingMap-i tur planlayıcısında əsas xəritə kimi təklif edir. Qeyri-kommersiya quraşdırmalar üçün ayda 500.000 plitəyə qədər pulsuzdur; kommersiya və ya daha böyük quraşdırma əvvəlcə openmaps.fr ilə razılaşma tələb edir',
'admin.addons.noAddons': 'Heç bir əlavə mövcud deyil',
'admin.weather.title': 'Hava məlumatları',
'admin.weather.badge': '24 mart 2026-cı ildən',
+2
View File
@@ -21,6 +21,8 @@ const map: TranslationStrings = {
'map.baseLayer.default': 'Xəritə',
'map.baseLayer.satellite': 'Peyk',
'map.baseLayer.hiking': 'Gəzinti',
'map.baseLayer.hikingDown': 'OpenHikingMap hazırda cavab vermir. Başqa xəritəyə keçin; turunuz olduğu kimi qalır.',
'map.baseLayer.switchToSatellite': 'Peyk görünüşünə keç',
'map.baseLayer.switchToDefault': 'Xəritə görünüşünə keç',
+3
View File
@@ -658,6 +658,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Os usuários podem conectar a própria instância do wanderer e importar as trilhas dela como passeios',
'admin.toursHikingMap.title': 'Mapa de trilhas (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Oferece o OpenHikingMap como mapa base no planejador de passeios. Gratuito para instalações não comerciais até 500.000 blocos por mês; uma instalação comercial ou maior precisa antes de um acordo com o openmaps.fr',
'admin.addons.noAddons': 'Nenhum complemento disponível',
'admin.addons.integrationHint': 'Serviços de backend e integrações de API sem página dedicada',
'admin.weather.title': 'Dados meteorológicos',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Ocultar todas as rotas de reservas',
'map.baseLayer.default': 'Mapa',
'map.baseLayer.satellite': 'Satélite',
'map.baseLayer.hiking': 'Trilhas',
'map.baseLayer.hikingDown':
'O OpenHikingMap não está respondendo agora. Mude para outro mapa; seu passeio continua como está.',
'map.baseLayer.switchToSatellite': 'Mudar para vista de satélite',
'map.baseLayer.switchToDefault': 'Mudar para vista de mapa',
'map.location.denied':
+3
View File
@@ -267,6 +267,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Els usuaris poden connectar la seva pròpia instància de wanderer i importar-ne els senders com a excursions',
'admin.toursHikingMap.title': "Mapa d'excursionisme (OpenHikingMap)",
'admin.toursHikingMap.subtitle':
'Ofereix OpenHikingMap com a mapa base al planificador de rutes. Gratuït per a instal·lacions no comercials fins a 500.000 tessel·les al mes; una instal·lació comercial o més gran necessita abans un acord amb openmaps.fr',
'admin.addons.noAddons': 'No hi ha complements disponibles',
'admin.weather.title': 'Dades meteorològiques',
'admin.weather.badge': 'Des del 24 de març de 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Amaga totes les rutes de reserva',
'map.baseLayer.default': 'Mapa',
'map.baseLayer.satellite': 'Satèl·lit',
'map.baseLayer.hiking': 'Excursionisme',
'map.baseLayer.hikingDown':
'OpenHikingMap no respon ara mateix. Canvia a un altre mapa; la teva ruta es queda tal com és.',
'map.baseLayer.switchToSatellite': 'Canvia a vista de satèl·lit',
'map.baseLayer.switchToDefault': 'Canvia a vista de mapa',
'map.location.denied':
+3
View File
@@ -661,6 +661,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Uživatelé mohou připojit vlastní instanci wanderer a importovat z ní trasy jako výlety',
'admin.toursHikingMap.title': 'Turistická mapa (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Nabízí OpenHikingMap jako podkladovou mapu v plánovači túr. Zdarma pro nekomerční instalace do 500 000 dlaždic měsíčně; komerční nebo větší instalace potřebuje nejdřív dohodu s openmaps.fr',
'admin.addons.noAddons': 'Žádné doplňky nejsou k dispozici',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Model Context Protocol pro integraci AI asistentů',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Skrýt všechny trasy rezervací',
'map.baseLayer.default': 'Mapa',
'map.baseLayer.satellite': 'Satelit',
'map.baseLayer.hiking': 'Turistika',
'map.baseLayer.hikingDown': 'OpenHikingMap teď neodpovídá. Přepni na jinou mapu, tvoje túra zůstane beze změny.',
'map.baseLayer.switchToSatellite': 'Přepnout na satelitní zobrazení',
'map.baseLayer.switchToDefault': 'Přepnout na mapové zobrazení',
'map.location.denied':
+3
View File
@@ -666,6 +666,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Nutzer können ihre eigene wanderer-Instanz verbinden und deren Trails als Touren importieren',
'admin.toursHikingMap.title': 'Wanderkarte (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Bietet OpenHikingMap als Grundkarte im Tourplaner an. Kostenlos für nichtkommerzielle Installationen bis 500.000 Kacheln im Monat; eine kommerzielle oder größere Installation braucht vorher eine Vereinbarung mit openmaps.fr',
'admin.addons.noAddons': 'Keine Addons verfügbar',
'admin.weather.title': 'Wetterdaten',
'admin.weather.badge': 'Seit 24. März 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Alle Buchungsrouten ausblenden',
'map.baseLayer.default': 'Karte',
'map.baseLayer.satellite': 'Satellit',
'map.baseLayer.hiking': 'Wandern',
'map.baseLayer.hikingDown':
'OpenHikingMap antwortet gerade nicht. Wechsle auf eine andere Karte, deine Tour bleibt unverändert.',
'map.baseLayer.switchToSatellite': 'Zur Satellitenansicht wechseln',
'map.baseLayer.switchToDefault': 'Zur Kartenansicht wechseln',
'map.location.denied':
+3
View File
@@ -710,6 +710,9 @@ const admin: TranslationStrings = {
'admin.addons.subOptionsOn.one': '{count} on',
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle': 'Users can connect their own wanderer instance and import its trails as tours',
'admin.toursHikingMap.title': 'Hiking map (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Offers OpenHikingMap as a base map in the tour planner. Free for non-commercial installs up to 500,000 tiles a month; a commercial or larger install needs an agreement with openmaps.fr first',
'admin.addons.noAddons': 'No addons available',
'admin.weather.title': 'Weather Data',
'admin.weather.badge': 'Since March 24, 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Hide all booking routes',
'map.baseLayer.default': 'Map',
'map.baseLayer.satellite': 'Satellite',
'map.baseLayer.hiking': 'Hiking',
'map.baseLayer.hikingDown':
'OpenHikingMap is not answering right now. Switch to another map; your tour stays as it is.',
'map.baseLayer.switchToSatellite': 'Switch to satellite view',
'map.baseLayer.switchToDefault': 'Switch to map view',
'map.location.denied':
+3
View File
@@ -649,6 +649,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Los usuarios pueden conectar su propia instancia de wanderer e importar sus senderos como excursiones',
'admin.toursHikingMap.title': 'Mapa de senderismo (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Ofrece OpenHikingMap como mapa base en el planificador de rutas. Gratis para instalaciones no comerciales hasta 500.000 teselas al mes; una instalación comercial o mayor necesita antes un acuerdo con openmaps.fr',
'admin.addons.noAddons': 'No hay complementos disponibles',
'admin.weather.title': 'Datos meteorológicos',
'admin.weather.badge': 'Desde el 24 de marzo de 2026',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Ocultar todas las rutas de reservas',
'map.baseLayer.default': 'Mapa',
'map.baseLayer.satellite': 'Satélite',
'map.baseLayer.hiking': 'Senderismo',
'map.baseLayer.hikingDown': 'OpenHikingMap no responde ahora mismo. Cambia a otro mapa; tu ruta se queda como está.',
'map.baseLayer.switchToSatellite': 'Cambiar a vista de satélite',
'map.baseLayer.switchToDefault': 'Cambiar a vista de mapa',
'map.location.denied':
+3
View File
@@ -730,6 +730,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Kasutajad saavad ühendada oma wanderer-serveri ja importida selle matkarajad retkedena',
'admin.toursHikingMap.title': 'Matkakaart (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Pakub OpenHikingMapi matkaplaneerija aluskaardina. Mitteäriliste paigalduste jaoks tasuta kuni 500 000 paani kuus; äriline või suurem paigaldus vajab enne kokkulepet openmaps.fr-iga',
'admin.addons.noAddons': 'Lisamooduleid pole saadaval',
'admin.weather.title': 'Ilmaandmed',
'admin.weather.badge': 'Alates 24. märtsist 2026',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Peida kõik broneeringute marsruudid',
'map.baseLayer.default': 'Kaart',
'map.baseLayer.satellite': 'Satelliit',
'map.baseLayer.hiking': 'Matkamine',
'map.baseLayer.hikingDown': 'OpenHikingMap ei vasta praegu. Vaheta teisele kaardile, sinu matk jääb samaks.',
'map.baseLayer.switchToSatellite': 'Lülitu satelliidivaatele',
'map.baseLayer.switchToDefault': 'Lülitu kaardivaatele',
'map.location.denied':
+3
View File
@@ -671,6 +671,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Les utilisateurs peuvent connecter leur propre instance wanderer et importer ses sentiers comme sorties',
'admin.toursHikingMap.title': 'Carte de randonnée (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
"Propose OpenHikingMap comme fond de carte dans le planificateur d'itinéraires. Gratuit pour les installations non commerciales jusqu'à 500 000 tuiles par mois ; une installation commerciale ou plus importante nécessite d'abord un accord avec openmaps.fr",
'admin.addons.noAddons': 'Aucune extension disponible',
'admin.weather.title': 'Données météo',
'admin.weather.badge': 'Depuis le 24 mars 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Masquer tous les itinéraires',
'map.baseLayer.default': 'Carte',
'map.baseLayer.satellite': 'Satellite',
'map.baseLayer.hiking': 'Randonnée',
'map.baseLayer.hikingDown':
'OpenHikingMap ne répond pas pour le moment. Passe à une autre carte ; ton itinéraire reste inchangé.',
'map.baseLayer.switchToSatellite': 'Passer à la vue satellite',
'map.baseLayer.switchToDefault': 'Passer à la vue carte',
'map.location.denied':
+3
View File
@@ -734,6 +734,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Οι χρήστες μπορούν να συνδέσουν τη δική τους εγκατάσταση wanderer και να εισαγάγουν τα μονοπάτια της ως εκδρομές',
'admin.toursHikingMap.title': 'Χάρτης πεζοπορίας (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Προσφέρει το OpenHikingMap ως χάρτη βάσης στον σχεδιαστή διαδρομών. Δωρεάν για μη εμπορικές εγκαταστάσεις έως 500.000 πλακίδια τον μήνα· μια εμπορική ή μεγαλύτερη εγκατάσταση χρειάζεται πρώτα συμφωνία με το openmaps.fr',
'admin.addons.noAddons': 'Δεν υπάρχουν διαθέσιμα πρόσθετα',
'admin.weather.title': 'Δεδομένα Καιρού',
'admin.weather.badge': 'Από 24 Μαρτίου 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Απόκρυψη όλων των διαδρομών κρατήσεων',
'map.baseLayer.default': 'Χάρτης',
'map.baseLayer.satellite': 'Δορυφόρος',
'map.baseLayer.hiking': 'Πεζοπορία',
'map.baseLayer.hikingDown':
'Το OpenHikingMap δεν απαντά αυτή τη στιγμή. Άλλαξε σε άλλο χάρτη· η διαδρομή σου μένει ως έχει.',
'map.baseLayer.switchToSatellite': 'Εναλλαγή σε δορυφορική προβολή',
'map.baseLayer.switchToDefault': 'Εναλλαγή σε προβολή χάρτη',
'map.location.denied':
+3
View File
@@ -672,6 +672,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'A felhasználók csatlakoztathatják saját wanderer-példányukat, és túraként importálhatják annak túraútvonalait',
'admin.toursHikingMap.title': 'Túratérkép (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Az OpenHikingMapet alaptérképként kínálja a túratervezőben. Nem kereskedelmi telepítéseknek havi 500 000 csempéig ingyenes; kereskedelmi vagy nagyobb telepítéshez előbb megállapodás kell az openmaps.fr-rel',
'admin.addons.noAddons': 'Nincsenek elérhető bővítmények',
'admin.weather.title': 'Időjárás adatok',
'admin.weather.badge': '2026. március 24. óta',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Összes foglalási útvonal elrejtése',
'map.baseLayer.default': 'Térkép',
'map.baseLayer.satellite': 'Műhold',
'map.baseLayer.hiking': 'Túrázás',
'map.baseLayer.hikingDown': 'Az OpenHikingMap most nem válaszol. Válts másik térképre, a túrád változatlan marad.',
'map.baseLayer.switchToSatellite': 'Váltás műholdas nézetre',
'map.baseLayer.switchToDefault': 'Váltás térkép nézetre',
'map.location.denied':
+3
View File
@@ -710,6 +710,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Pengguna dapat menghubungkan instans wanderer milik sendiri dan mengimpor jalurnya sebagai tur',
'admin.toursHikingMap.title': 'Peta pendakian (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Menawarkan OpenHikingMap sebagai peta dasar di perencana tur. Gratis untuk instalasi nonkomersial hingga 500.000 ubin per bulan; instalasi komersial atau yang lebih besar perlu perjanjian dengan openmaps.fr terlebih dahulu',
'admin.addons.noAddons': 'Tidak ada addon yang tersedia',
'admin.weather.title': 'Data Cuaca',
'admin.weather.badge': 'Sejak 24 Maret 2026',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Sembunyikan semua rute pemesanan',
'map.baseLayer.default': 'Peta',
'map.baseLayer.satellite': 'Satelit',
'map.baseLayer.hiking': 'Pendakian',
'map.baseLayer.hikingDown': 'OpenHikingMap sedang tidak merespons. Beralih ke peta lain; turmu tetap seperti semula.',
'map.baseLayer.switchToSatellite': 'Beralih ke tampilan satelit',
'map.baseLayer.switchToDefault': 'Beralih ke tampilan peta',
'map.location.denied':
+3
View File
@@ -666,6 +666,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Gli utenti possono collegare la propria istanza wanderer e importarne i sentieri come escursioni',
'admin.toursHikingMap.title': 'Mappa escursionistica (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
"Offre OpenHikingMap come mappa di base nel pianificatore di percorsi. Gratuito per installazioni non commerciali fino a 500.000 tile al mese; un'installazione commerciale o più grande richiede prima un accordo con openmaps.fr",
'admin.addons.noAddons': 'Nessun modulo disponibile',
'admin.weather.title': 'Dati meteo',
'admin.weather.badge': 'Dal 24 marzo 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Nascondi tutti i percorsi prenotati',
'map.baseLayer.default': 'Mappa',
'map.baseLayer.satellite': 'Satellite',
'map.baseLayer.hiking': 'Escursionismo',
'map.baseLayer.hikingDown':
"OpenHikingMap al momento non risponde. Passa a un'altra mappa; il tuo percorso resta com'è.",
'map.baseLayer.switchToSatellite': 'Passa alla vista satellitare',
'map.baseLayer.switchToDefault': 'Passa alla vista mappa',
'map.location.denied':
+3
View File
@@ -673,6 +673,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'ユーザーが自分のwandererインスタンスを接続し、そのトレイルをツアーとしてインポートできます',
'admin.toursHikingMap.title': 'ハイキング地図 (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'ツアープランナーのベースマップとして OpenHikingMap を提供します。非商用の環境では月 500,000 タイルまで無料です。商用またはそれ以上の規模の環境では、先に openmaps.fr との合意が必要です',
'admin.addons.noAddons': '利用可能なアドオンはありません',
'admin.weather.title': '天気データ',
'admin.weather.badge': '2026年3月24日以降',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'すべての予約ルートを非表示',
'map.baseLayer.default': '地図',
'map.baseLayer.satellite': '衛星',
'map.baseLayer.hiking': 'ハイキング',
'map.baseLayer.hikingDown':
'OpenHikingMap が現在応答していません。別の地図に切り替えてください。ツアーはそのまま残ります。',
'map.baseLayer.switchToSatellite': '衛星表示に切り替える',
'map.baseLayer.switchToDefault': '地図表示に切り替える',
'map.location.denied':
+3
View File
@@ -671,6 +671,9 @@ const admin: TranslationStrings = {
'admin.addons.subOptionsOn': '{count}개 켜짐',
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle': '사용자가 자신의 wanderer 인스턴스를 연결하고 그 트레일을 투어로 가져올 수 있습니다',
'admin.toursHikingMap.title': '하이킹 지도 (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'투어 플래너에서 OpenHikingMap을 기본 지도로 제공합니다. 비상업적 설치는 월 500,000 타일까지 무료이며, 상업적이거나 더 큰 설치는 먼저 openmaps.fr과의 협의가 필요합니다',
'admin.addons.noAddons': '사용 가능한 애드온이 없습니다',
'admin.weather.title': '날씨 데이터',
'admin.weather.badge': '2026년 3월 24일부터',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': '모든 예약 경로 숨기기',
'map.baseLayer.default': '지도',
'map.baseLayer.satellite': '위성',
'map.baseLayer.hiking': '하이킹',
'map.baseLayer.hikingDown':
'OpenHikingMap이 지금 응답하지 않습니다. 다른 지도로 전환하세요. 투어는 그대로 유지됩니다.',
'map.baseLayer.switchToSatellite': '위성 보기로 전환',
'map.baseLayer.switchToDefault': '지도 보기로 전환',
'map.location.denied':
+3
View File
@@ -665,6 +665,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Gebruikers kunnen hun eigen wanderer-instantie koppelen en de wandelroutes daarvan als tochten importeren',
'admin.toursHikingMap.title': 'Wandelkaart (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Biedt OpenHikingMap aan als basiskaart in de tochtplanner. Gratis voor niet-commerciële installaties tot 500.000 tegels per maand; een commerciële of grotere installatie heeft eerst een afspraak met openmaps.fr nodig',
'admin.addons.noAddons': 'Geen add-ons beschikbaar',
'admin.weather.title': 'Weergegevens',
'admin.weather.badge': 'Sinds 24 maart 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Alle boekingsroutes verbergen',
'map.baseLayer.default': 'Kaart',
'map.baseLayer.satellite': 'Satelliet',
'map.baseLayer.hiking': 'Wandelen',
'map.baseLayer.hikingDown':
'OpenHikingMap reageert op dit moment niet. Schakel over naar een andere kaart; je tocht blijft zoals hij is.',
'map.baseLayer.switchToSatellite': 'Overschakelen naar satellietweergave',
'map.baseLayer.switchToDefault': 'Overschakelen naar kaartweergave',
'map.location.denied':
+3
View File
@@ -685,6 +685,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Użytkownicy mogą połączyć własną instancję wanderer i importować z niej szlaki jako wycieczki',
'admin.toursHikingMap.title': 'Mapa turystyczna (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Udostępnia OpenHikingMap jako mapę bazową w planerze tras. Bezpłatnie dla niekomercyjnych instalacji do 500 000 kafelków miesięcznie; instalacja komercyjna lub większa wymaga najpierw porozumienia z openmaps.fr',
'admin.addons.noAddons': 'Brak dostępnych dodatków',
'admin.weather.title': 'Dane pogodowe',
'admin.weather.badge': 'Od 24 marca 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Ukryj wszystkie trasy rezerwacji',
'map.baseLayer.default': 'Mapa',
'map.baseLayer.satellite': 'Satelita',
'map.baseLayer.hiking': 'Turystyka',
'map.baseLayer.hikingDown':
'OpenHikingMap w tej chwili nie odpowiada. Przełącz na inną mapę; twoja trasa pozostaje bez zmian.',
'map.baseLayer.switchToSatellite': 'Przełącz na widok satelitarny',
'map.baseLayer.switchToDefault': 'Przełącz na widok mapy',
'map.location.denied':
+3
View File
@@ -690,6 +690,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Пользователи могут подключить свой экземпляр wanderer и импортировать его маршруты как туры',
'admin.toursHikingMap.title': 'Туристическая карта (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Предлагает OpenHikingMap как базовую карту в планировщике маршрутов. Бесплатно для некоммерческих установок до 500 000 тайлов в месяц; коммерческой или более крупной установке сначала нужно соглашение с openmaps.fr',
'admin.addons.noAddons': 'Нет доступных дополнений',
'admin.weather.title': 'Данные о погоде',
'admin.weather.badge': 'С 24 марта 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Скрыть все маршруты бронирований',
'map.baseLayer.default': 'Карта',
'map.baseLayer.satellite': 'Спутник',
'map.baseLayer.hiking': 'Походы',
'map.baseLayer.hikingDown':
'OpenHikingMap сейчас не отвечает. Переключитесь на другую карту, ваш маршрут останется без изменений.',
'map.baseLayer.switchToSatellite': 'Переключить на спутниковый вид',
'map.baseLayer.switchToDefault': 'Переключить на вид карты',
'map.location.denied':
+3
View File
@@ -737,6 +737,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Používatelia môžu pripojiť vlastnú inštanciu wanderer a importovať z nej trasy ako túry',
'admin.toursHikingMap.title': 'Turistická mapa (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Ponúka OpenHikingMap ako podkladovú mapu v plánovači túr. Zadarmo pre nekomerčné inštalácie do 500 000 dlaždíc mesačne; komerčná alebo väčšia inštalácia potrebuje najprv dohodu s openmaps.fr',
'admin.addons.noAddons': 'Žiadne doplnky nie sú dostupné',
'admin.weather.title': 'Dáta o počasí',
'admin.weather.badge': 'Od 24. marca 2026',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Skryť všetky trasy rezervácií',
'map.baseLayer.default': 'Mapa',
'map.baseLayer.satellite': 'Satelit',
'map.baseLayer.hiking': 'Turistika',
'map.baseLayer.hikingDown': 'OpenHikingMap teraz neodpovedá. Prepni na inú mapu, tvoja túra zostane bez zmeny.',
'map.baseLayer.switchToSatellite': 'Prepnúť na satelitné zobrazenie',
'map.baseLayer.switchToDefault': 'Prepnúť na mapové zobrazenie',
'map.location.denied':
+3
View File
@@ -732,6 +732,9 @@ const admin: TranslationStrings = {
'admin.addons.subOptionsOn.one': '{count} aktiv',
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle': 'Användare kan ansluta sin egen wanderer-instans och importera dess leder som turer',
'admin.toursHikingMap.title': 'Vandringskarta (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Erbjuder OpenHikingMap som baskarta i turplaneraren. Gratis för icke-kommersiella installationer upp till 500 000 rutor i månaden; en kommersiell eller större installation behöver först ett avtal med openmaps.fr',
'admin.addons.noAddons': 'Inga tillägg tillgängliga',
'admin.weather.title': 'Väderdata',
'admin.weather.badge': 'Sedan den 24 mars 2026',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Dölj alla bokningsvägar',
'map.baseLayer.default': 'Karta',
'map.baseLayer.satellite': 'Satellit',
'map.baseLayer.hiking': 'Vandring',
'map.baseLayer.hikingDown': 'OpenHikingMap svarar inte just nu. Byt till en annan karta; din tur förblir som den är.',
'map.baseLayer.switchToSatellite': 'Byt till satellitvy',
'map.baseLayer.switchToDefault': 'Byt till kartvy',
'map.location.denied':
+3
View File
@@ -633,6 +633,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'ผู้ใช้เชื่อมต่ออินสแตนซ์ wanderer ของตนเองและนำเข้าเส้นทางเดินจากที่นั่นเป็นทัวร์ได้',
'admin.toursHikingMap.title': 'แผนที่เดินป่า (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'เสนอ OpenHikingMap เป็นแผนที่ฐานในตัววางแผนทัวร์ ใช้ฟรีสำหรับการติดตั้งที่ไม่ใช่เชิงพาณิชย์ได้ถึง 500,000 ไทล์ต่อเดือน การติดตั้งเชิงพาณิชย์หรือขนาดใหญ่กว่าต้องทำข้อตกลงกับ openmaps.fr ก่อน',
'admin.addons.noAddons': 'ไม่มีส่วนเสริมให้ใช้งาน',
'admin.weather.title': 'ข้อมูลสภาพอากาศ',
'admin.weather.badge': 'ตั้งแต่วันที่ 24 มีนาคม 2569',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'ซ่อนเส้นทางการจองทั้งหมด',
'map.baseLayer.default': 'แผนที่',
'map.baseLayer.satellite': 'ดาวเทียม',
'map.baseLayer.hiking': 'เดินป่า',
'map.baseLayer.hikingDown': 'OpenHikingMap ไม่ตอบสนองในขณะนี้ เปลี่ยนไปใช้แผนที่อื่น ทัวร์ของคุณยังคงเหมือนเดิม',
'map.baseLayer.switchToSatellite': 'สลับไปที่มุมมองดาวเทียม',
'map.baseLayer.switchToDefault': 'สลับไปที่มุมมองแผนที่',
'map.location.denied':
+3
View File
@@ -721,6 +721,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Kullanıcılar kendi wanderer sunucularını bağlayıp parkurlarını tur olarak içe aktarabilir',
'admin.toursHikingMap.title': 'Yürüyüş haritası (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
"OpenHikingMap'i tur planlayıcısında temel harita olarak sunar. Ticari olmayan kurulumlar için ayda 500.000 karoya kadar ücretsizdir; ticari veya daha büyük bir kurulum önce openmaps.fr ile anlaşma gerektirir",
'admin.addons.noAddons': 'Kullanılabilir eklenti yok',
'admin.weather.title': 'Hava Durumu Verileri',
'admin.weather.badge': "24 Mart 2026'dan beri",
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Tüm rezervasyon rotalarını gizle',
'map.baseLayer.default': 'Harita',
'map.baseLayer.satellite': 'Uydu',
'map.baseLayer.hiking': 'Yürüyüş',
'map.baseLayer.hikingDown': 'OpenHikingMap şu anda yanıt vermiyor. Başka bir haritaya geç; turun olduğu gibi kalır.',
'map.baseLayer.switchToSatellite': 'Uydu görünümüne geç',
'map.baseLayer.switchToDefault': 'Harita görünümüne geç',
'map.location.denied':
+3
View File
@@ -687,6 +687,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Користувачі можуть підключити власний екземпляр wanderer та імпортувати його маршрути як тури',
'admin.toursHikingMap.title': 'Туристична карта (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Пропонує OpenHikingMap як базову карту в планувальнику маршрутів. Безкоштовно для некомерційних установок до 500 000 тайлів на місяць; комерційній або більшій установці спершу потрібна домовленість з openmaps.fr',
'admin.addons.noAddons': 'Немає доступних доповнень',
'admin.weather.title': 'Дані про погоду',
'admin.weather.badge': 'З 24 березня 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Приховати всі маршрути бронювань',
'map.baseLayer.default': 'Карта',
'map.baseLayer.satellite': 'Супутник',
'map.baseLayer.hiking': 'Походи',
'map.baseLayer.hikingDown':
'OpenHikingMap зараз не відповідає. Перемкніться на іншу карту, ваш маршрут залишиться без змін.',
'map.baseLayer.switchToSatellite': 'Перемкнути на супутниковий вигляд',
'map.baseLayer.switchToDefault': 'Перемкнути на вигляд карти',
'map.location.denied':
+3
View File
@@ -723,6 +723,9 @@ const admin: TranslationStrings = {
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle':
'Người dùng có thể kết nối máy chủ wanderer riêng và nhập các cung đường của máy chủ đó thành chuyến tham quan',
'admin.toursHikingMap.title': 'Bản đồ đi bộ đường dài (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'Cung cấp OpenHikingMap làm bản đồ nền trong trình lập kế hoạch chuyến đi. Miễn phí cho các bản cài đặt phi thương mại đến 500.000 ô bản đồ mỗi tháng; bản cài đặt thương mại hoặc lớn hơn cần thỏa thuận với openmaps.fr trước',
'admin.addons.noAddons': 'Không có tiện ích bổ sung nào',
'admin.weather.title': 'Dữ liệu thời tiết',
'admin.weather.badge': 'Kể từ ngày 24 tháng 3 năm 2026',
+3
View File
@@ -18,6 +18,9 @@ const map: TranslationStrings = {
'map.hideAllConnections': 'Ẩn tất cả lộ trình đặt chỗ',
'map.baseLayer.default': 'Bản đồ',
'map.baseLayer.satellite': 'Vệ tinh',
'map.baseLayer.hiking': 'Đi bộ đường dài',
'map.baseLayer.hikingDown':
'OpenHikingMap hiện không phản hồi. Hãy chuyển sang bản đồ khác; chuyến đi của bạn vẫn giữ nguyên.',
'map.baseLayer.switchToSatellite': 'Chuyển sang chế độ xem vệ tinh',
'map.baseLayer.switchToDefault': 'Chuyển sang chế độ xem bản đồ',
'map.location.denied':
+3
View File
@@ -645,6 +645,9 @@ const admin: TranslationStrings = {
'admin.addons.subOptionsOn': '已開啟 {count} 個',
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle': '使用者可以連結自己的 wanderer 執行個體,並將其中的步道匯入為遊程',
'admin.toursHikingMap.title': '健行地圖 (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'在路線規劃器中提供 OpenHikingMap 作為底圖。非商業安裝每月 500,000 個圖磚以內免費;商業或更大規模的安裝需要先與 openmaps.fr 達成協議',
'admin.addons.noAddons': '暫無可用擴充套件',
'admin.weather.title': '天氣資料',
'admin.weather.badge': '自 2026 年 3 月 24 日起',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': '隱藏所有預訂路線',
'map.baseLayer.default': '地圖',
'map.baseLayer.satellite': '衛星',
'map.baseLayer.hiking': '健行',
'map.baseLayer.hikingDown': 'OpenHikingMap 目前沒有回應。請切換到其他地圖,你的路線保持不變。',
'map.baseLayer.switchToSatellite': '切換到衛星檢視',
'map.baseLayer.switchToDefault': '切換到地圖檢視',
'map.location.denied': '定位權限已被封鎖。請檢查裝置設定,已安裝的應用程式擁有與瀏覽器分開的定位權限。',
+3
View File
@@ -595,6 +595,9 @@ const admin: TranslationStrings = {
'admin.addons.subOptionsOn': '已开启 {count} 个',
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle': '用户可以连接自己的 wanderer 实例,并将其中的步道作为游览路线导入',
'admin.toursHikingMap.title': '徒步地图 (OpenHikingMap)',
'admin.toursHikingMap.subtitle':
'在路线规划器中提供 OpenHikingMap 作为底图。非商业安装每月 500,000 个瓦片以内免费;商业或更大规模的安装需要先与 openmaps.fr 达成协议',
'admin.addons.noAddons': '暂无可用扩展',
'admin.weather.title': '天气数据',
'admin.weather.badge': '自 2026 年 3 月 24 日起',
+2
View File
@@ -18,6 +18,8 @@ const map: TranslationStrings = {
'map.hideAllConnections': '隐藏所有预订路线',
'map.baseLayer.default': '地图',
'map.baseLayer.satellite': '卫星',
'map.baseLayer.hiking': '徒步',
'map.baseLayer.hikingDown': 'OpenHikingMap 当前无响应。请切换到其他地图,你的路线保持不变。',
'map.baseLayer.switchToSatellite': '切换到卫星视图',
'map.baseLayer.switchToDefault': '切换到地图视图',
'map.location.denied': '定位权限已被阻止。请检查设备设置,已安装的应用拥有与浏览器分开的定位权限。',