diff --git a/client/src/components/Tours/hike/HikeWaysCard.test.tsx b/client/src/components/Tours/hike/HikeWaysCard.test.tsx
index 606706dca..c1351ec7d 100644
--- a/client/src/components/Tours/hike/HikeWaysCard.test.tsx
+++ b/client/src/components/Tours/hike/HikeWaysCard.test.tsx
@@ -12,7 +12,7 @@ vi.mock('./useHikeWays', () => ({
},
}));
-// FE-HIKE-WAYSCARD-001 to FE-HIKE-WAYSCARD-011
+// FE-HIKE-WAYSCARD-001 to FE-HIKE-WAYSCARD-012
const LINE: [number, number][] = [
[47.0, 11.0],
@@ -153,8 +153,8 @@ describe('HikeWaysCard (MAP-03, MAP-04)', () => {
await tooltipOf('sac-row-unclear', /T3, hiking;mountain_hiking/);
await tooltipOf('sac-row-untagged', /Unknown does not mean easy/);
await tooltipOf('sac-row-unmatched', /no way lies clearly under the line/i);
- // A way that could not be asked about says so in its row; there is nothing more to name.
expect(screen.getByTestId('sac-row-unasked')).toHaveTextContent('Could not be asked this time');
+ await tooltipOf('sac-row-unasked', /could not be asked about these ways this time/);
});
it('FE-HIKE-WAYSCARD-009: the surfaces list their groups, the most common one, and no grade or routing limit', () => {
@@ -190,4 +190,16 @@ describe('HikeWaysCard (MAP-03, MAP-04)', () => {
fireEvent.click(screen.getByTestId('way-row-track'));
expect(state.focusOn).toHaveBeenCalledWith('track');
});
+
+ it('FE-HIKE-WAYSCARD-012: ways that could not be asked this time may be asked again from the list, and only then', () => {
+ const state = ways();
+ const partial = show(state);
+ const unknown = screen.getByText('Unknown').parentElement as HTMLElement;
+ fireEvent.click(within(unknown).getByRole('button', { name: /try again/i }));
+ expect(state.retry).toHaveBeenCalledTimes(1);
+ partial.unmount();
+ show(ways({ rows: SAC_ROWS.filter((row) => row.key !== 'unasked') }));
+ expect(screen.getByTestId('sac-row-unmatched')).toBeInTheDocument();
+ expect(screen.queryByRole('button', { name: /try again/i })).toBeNull();
+ });
});
diff --git a/client/src/components/Tours/hike/HikeWaysList.tsx b/client/src/components/Tours/hike/HikeWaysList.tsx
index 440be9f97..b2ad500a6 100644
--- a/client/src/components/Tours/hike/HikeWaysList.tsx
+++ b/client/src/components/Tours/hike/HikeWaysList.tsx
@@ -1,4 +1,4 @@
-import { Info, SlidersHorizontal } from 'lucide-react';
+import { Info, RefreshCw, SlidersHorizontal } from 'lucide-react';
import { useTranslation } from '../../../i18n';
import { useSettingsStore } from '../../../store/settingsStore';
import { formatDistance } from '../../../utils/units';
@@ -7,6 +7,7 @@ import { fs } from '../../shared/DialogShell';
import { Tooltip } from '../../shared/Tooltip';
import { bikePaintCss } from '../bike/bikePaint';
import { FigureBadge } from '../paddle/FigureBadge';
+import { CardAction } from '../tourParts';
import { HIKE_FACETS, type HikeFacet } from './hikeFacetSpecs';
import { facetPaint, isUnknownClass, type FacetRow } from './hikeFacets';
import { hikePaintCss } from './hikePaint';
@@ -74,7 +75,7 @@ function useRowSource(facet: HikeFacet, row: FacetRow): string {
if (step !== null) return t('tours.hike.sac.stepTip', { step: stepName(step), tag: row.tags[0] ?? '' });
if (row.key === 'untagged') return t(FACET_KEY[facet]('untaggedTip'));
if (row.key === 'unmatched') return t('tours.hike.ways.unmatchedTip');
- if (row.key === 'unasked') return '';
+ if (row.key === 'unasked') return t('tours.hike.ways.unaskedTip');
if (row.key === 'unclear' && facet === 'sac') return t('tours.hike.sac.unclearTip', { tags: row.tags.join(', ') });
if (row.key === 'unclear') return t('tours.hike.ways.unclearTip', { tags: writtenTags(facet, row) });
return t('tours.hike.ways.recordedTip', { tags: writtenTags(facet, row) });
@@ -211,6 +212,14 @@ export function HikeWaysList({ ways, limit }: { ways: HikeWays; limit: number |
))}
+ {/* Some ways could not be asked this time: they may be asked again without leaving the card. */}
+ {unknown.some((row) => row.key === 'unasked') && (
+
+ } onClick={ways.retry}>
+ {t('common.errorRetry')}
+
+
+ )}
)}
diff --git a/shared/src/i18n/ar/tours.ts b/shared/src/i18n/ar/tours.ts
index ef0b6c2a9..54c4f86a7 100644
--- a/shared/src/i18n/ar/tours.ts
+++ b/shared/src/i18n/ar/tours.ts
@@ -537,6 +537,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'لا يعطي OpenStreetMap هذه الطرق قيمة sac_scale. غير معروف لا يعني سهلًا.',
'tours.hike.sac.unclearTip': 'يكتب OpenStreetMap هنا {tags}، وهذا لا يحدد درجة واحدة.',
'tours.hike.ways.unmatchedTip': 'لا يقع هنا أي طريق بوضوح تحت خط الجولة، لذلك لا يُعرض له شيء.',
+ 'tours.hike.ways.unaskedTip': 'تعذّر الاستعلام من OpenStreetMap عن هذه الطرق هذه المرة. غير معروف لا يعني سهلًا.',
'tours.hike.ways.known': 'معروف',
'tours.hike.sac.knownTip': 'جزء المسار الذي يعطي OpenStreetMap درجته في SAC. الباقي غير معروف.',
'tours.hike.sac.highest': 'الأعلى المعروف',
diff --git a/shared/src/i18n/az/tours.ts b/shared/src/i18n/az/tours.ts
index 053d08c03..aed0af2ec 100644
--- a/shared/src/i18n/az/tours.ts
+++ b/shared/src/i18n/az/tours.ts
@@ -529,6 +529,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap burada {tags} yazır, bu isə tək bir dərəcə bildirmir.',
'tours.hike.ways.unmatchedTip':
'Burada turun xətti altında aydın bir yol yoxdur, ona görə onun üçün heç nə göstərilmir.',
+ 'tours.hike.ways.unaskedTip': 'Bu dəfə OpenStreetMap-dən bu yollar barədə sorğu alınmadı. Naməlum asan demək deyil.',
'tours.hike.ways.known': 'Məlum',
'tours.hike.sac.knownTip': 'Marşrutun OpenStreetMap-in SAC dərəcəsi verdiyi hissəsi. Qalanı naməlumdur.',
'tours.hike.sac.highest': 'Ən yüksək məlum',
diff --git a/shared/src/i18n/br/tours.ts b/shared/src/i18n/br/tours.ts
index bc7ac0f6b..6417d5e8a 100644
--- a/shared/src/i18n/br/tours.ts
+++ b/shared/src/i18n/br/tours.ts
@@ -535,6 +535,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'O OpenStreetMap indica aqui {tags}, que não nomeia um único grau.',
'tours.hike.ways.unmatchedTip':
'Aqui nenhuma trilha fica claramente sob a linha do passeio, então nada é mostrado para ela.',
+ 'tours.hike.ways.unaskedTip':
+ 'Desta vez não foi possível consultar o OpenStreetMap sobre estas trilhas. Desconhecido não quer dizer fácil.',
'tours.hike.ways.known': 'Conhecido',
'tours.hike.sac.knownTip': 'A parte da rota cujo grau SAC o OpenStreetMap informa. O resto é desconhecido.',
'tours.hike.sac.highest': 'Maior conhecido',
diff --git a/shared/src/i18n/ca/tours.ts b/shared/src/i18n/ca/tours.ts
index f449a0d5d..9732c3c66 100644
--- a/shared/src/i18n/ca/tours.ts
+++ b/shared/src/i18n/ca/tours.ts
@@ -536,6 +536,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap hi indica {tags}, que no anomena cap grau concret.',
'tours.hike.ways.unmatchedTip':
'Aquí cap camí queda clarament sota la línia de la ruta, així que no se’n mostra res.',
+ 'tours.hike.ways.unaskedTip':
+ 'Aquesta vegada no s’ha pogut consultar OpenStreetMap sobre aquests camins. Desconegut no vol dir fàcil.',
'tours.hike.ways.known': 'Conegut',
'tours.hike.sac.knownTip': 'La part de la ruta de la qual OpenStreetMap dona el grau SAC. La resta és desconeguda.',
'tours.hike.sac.highest': 'Màxim conegut',
diff --git a/shared/src/i18n/cs/tours.ts b/shared/src/i18n/cs/tours.ts
index 0cf7e63ea..6059dc49d 100644
--- a/shared/src/i18n/cs/tours.ts
+++ b/shared/src/i18n/cs/tours.ts
@@ -526,6 +526,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap těmto cestám nedává sac_scale. Neznámé neznamená snadné.',
'tours.hike.sac.unclearTip': 'OpenStreetMap zde uvádí {tags}, což neoznačuje jediný stupeň.',
'tours.hike.ways.unmatchedTip': 'Zde pod linií túry jednoznačně neleží žádná cesta, proto se pro ni nic nezobrazuje.',
+ 'tours.hike.ways.unaskedTip':
+ 'OpenStreetMap se tentokrát na tyto cesty nepodařilo dotázat. Neznámé neznamená snadné.',
'tours.hike.ways.known': 'Známé',
'tours.hike.sac.knownTip': 'Podíl trasy, pro který OpenStreetMap uvádí stupeň SAC. Zbytek je neznámý.',
'tours.hike.sac.highest': 'Nejvyšší známý',
diff --git a/shared/src/i18n/de/tours.ts b/shared/src/i18n/de/tours.ts
index cfcfc3b14..a0e04d962 100644
--- a/shared/src/i18n/de/tours.ts
+++ b/shared/src/i18n/de/tours.ts
@@ -539,6 +539,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap schreibt hier {tags}, das benennt keine einzelne Stufe.',
'tours.hike.ways.unmatchedTip':
'Hier liegt kein Weg eindeutig unter der Linie der Tour, daher wird dafür nichts gezeigt.',
+ 'tours.hike.ways.unaskedTip':
+ 'OpenStreetMap war für diese Wege diesmal nicht erreichbar. Unbekannt heißt nicht leicht.',
'tours.hike.ways.known': 'Bekannt',
'tours.hike.sac.knownTip':
'Der Anteil der Route, für den OpenStreetMap eine SAC-Stufe angibt. Der Rest ist unbekannt.',
diff --git a/shared/src/i18n/en/tours.ts b/shared/src/i18n/en/tours.ts
index a94ce3bbb..e56c59dca 100644
--- a/shared/src/i18n/en/tours.ts
+++ b/shared/src/i18n/en/tours.ts
@@ -526,6 +526,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap gives these ways no sac_scale. Unknown does not mean easy.',
'tours.hike.sac.unclearTip': 'OpenStreetMap writes {tags} here, which names no single step.',
'tours.hike.ways.unmatchedTip': 'No way lies clearly under the line of the tour here, so nothing is shown for it.',
+ 'tours.hike.ways.unaskedTip':
+ 'OpenStreetMap could not be asked about these ways this time. Unknown does not mean easy.',
'tours.hike.ways.known': 'Known',
'tours.hike.sac.knownTip': 'The share of the route whose SAC grade OpenStreetMap gives. The rest is unknown.',
'tours.hike.sac.highest': 'Highest known',
diff --git a/shared/src/i18n/es/tours.ts b/shared/src/i18n/es/tours.ts
index 3211e1571..b830d4ee9 100644
--- a/shared/src/i18n/es/tours.ts
+++ b/shared/src/i18n/es/tours.ts
@@ -535,6 +535,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap indica aquí {tags}, que no nombra un único grado.',
'tours.hike.ways.unmatchedTip':
'Aquí ningún camino queda claramente bajo la línea de la ruta, así que no se muestra nada.',
+ 'tours.hike.ways.unaskedTip':
+ 'Esta vez no se pudo consultar a OpenStreetMap sobre estos caminos. Desconocido no significa fácil.',
'tours.hike.ways.known': 'Conocido',
'tours.hike.sac.knownTip': 'La parte de la ruta cuyo grado SAC da OpenStreetMap. El resto es desconocido.',
'tours.hike.sac.highest': 'Máximo conocido',
diff --git a/shared/src/i18n/et/tours.ts b/shared/src/i18n/et/tours.ts
index 1e908570d..4d2bccdfd 100644
--- a/shared/src/i18n/et/tours.ts
+++ b/shared/src/i18n/et/tours.ts
@@ -530,6 +530,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap märgib siin {tags}, mis ei nimeta ühte astet.',
'tours.hike.ways.unmatchedTip':
'Siin ei asu ükski rada selgelt matka joone all, seega selle kohta midagi ei näidata.',
+ 'tours.hike.ways.unaskedTip':
+ 'Seekord ei õnnestunud OpenStreetMapilt nende radade kohta pärida. Teadmata ei tähenda kerget.',
'tours.hike.ways.known': 'Teada',
'tours.hike.sac.knownTip': 'Marsruudi osa, mille SAC raskusastme OpenStreetMap annab. Ülejäänu on teadmata.',
'tours.hike.sac.highest': 'Kõrgeim teadaolev',
diff --git a/shared/src/i18n/fr/tours.ts b/shared/src/i18n/fr/tours.ts
index 765d621d7..fe8bfa02c 100644
--- a/shared/src/i18n/fr/tours.ts
+++ b/shared/src/i18n/fr/tours.ts
@@ -543,6 +543,8 @@ const tours: TranslationStrings = {
'OpenStreetMap ne donne aucun sac_scale à ces chemins. Inconnu ne veut pas dire facile.',
'tours.hike.sac.unclearTip': 'OpenStreetMap indique ici {tags}, ce qui ne désigne aucun degré précis.',
'tours.hike.ways.unmatchedTip': 'Aucun chemin ne se trouve clairement sous le tracé ici, donc rien n’y est affiché.',
+ 'tours.hike.ways.unaskedTip':
+ 'OpenStreetMap n’a pas pu être interrogé sur ces chemins cette fois. Inconnu ne veut pas dire facile.',
'tours.hike.ways.known': 'Connu',
'tours.hike.sac.knownTip': 'La part de l’itinéraire dont OpenStreetMap donne la cotation SAC. Le reste est inconnu.',
'tours.hike.sac.highest': 'Plus haute connue',
diff --git a/shared/src/i18n/gr/tours.ts b/shared/src/i18n/gr/tours.ts
index bbb68f5e8..5df8b5727 100644
--- a/shared/src/i18n/gr/tours.ts
+++ b/shared/src/i18n/gr/tours.ts
@@ -546,6 +546,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'Το OpenStreetMap γράφει εδώ {tags}, που δεν ορίζει έναν μόνο βαθμό.',
'tours.hike.ways.unmatchedTip':
'Εδώ κανένα μονοπάτι δεν βρίσκεται σαφώς κάτω από τη γραμμή της διαδρομής, οπότε δεν εμφανίζεται τίποτα.',
+ 'tours.hike.ways.unaskedTip':
+ 'Δεν ήταν δυνατή η αναζήτηση αυτών των μονοπατιών στο OpenStreetMap αυτή τη φορά. Άγνωστο δεν σημαίνει εύκολο.',
'tours.hike.ways.known': 'Γνωστό',
'tours.hike.sac.knownTip':
'Το μέρος της διαδρομής για το οποίο το OpenStreetMap δίνει βαθμό SAC. Το υπόλοιπο είναι άγνωστο.',
diff --git a/shared/src/i18n/hu/tours.ts b/shared/src/i18n/hu/tours.ts
index a61c647e6..3b5b65732 100644
--- a/shared/src/i18n/hu/tours.ts
+++ b/shared/src/i18n/hu/tours.ts
@@ -538,6 +538,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'Az OpenStreetMap itt ezt írja: {tags}, ami nem egyetlen fokozatot jelöl.',
'tours.hike.ways.unmatchedTip':
'Itt egyetlen út sem fut egyértelműen a túra vonala alatt, ezért ehhez nem jelenik meg semmi.',
+ 'tours.hike.ways.unaskedTip':
+ 'Az OpenStreetMapet ezúttal nem sikerült lekérdezni ezekről az utakról. Az ismeretlen nem jelent könnyűt.',
'tours.hike.ways.known': 'Ismert',
'tours.hike.sac.knownTip': 'Az útvonal azon része, amelyhez az OpenStreetMap SAC-fokozatot ad. A többi ismeretlen.',
'tours.hike.sac.highest': 'Legmagasabb ismert',
diff --git a/shared/src/i18n/id/tours.ts b/shared/src/i18n/id/tours.ts
index 723be8bb1..5ac57262a 100644
--- a/shared/src/i18n/id/tours.ts
+++ b/shared/src/i18n/id/tours.ts
@@ -531,6 +531,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap menulis {tags} di sini, yang tidak menyebut satu tingkat.',
'tours.hike.ways.unmatchedTip':
'Di sini tidak ada jalur yang jelas berada di bawah garis tur, jadi tidak ada yang ditampilkan.',
+ 'tours.hike.ways.unaskedTip':
+ 'OpenStreetMap tidak dapat ditanyakan tentang jalur ini kali ini. Tidak diketahui bukan berarti mudah.',
'tours.hike.ways.known': 'Diketahui',
'tours.hike.sac.knownTip': 'Bagian rute yang tingkat SAC-nya diberikan OpenStreetMap. Sisanya tidak diketahui.',
'tours.hike.sac.highest': 'Tertinggi diketahui',
diff --git a/shared/src/i18n/it/tours.ts b/shared/src/i18n/it/tours.ts
index bc244afc3..c5f7e5362 100644
--- a/shared/src/i18n/it/tours.ts
+++ b/shared/src/i18n/it/tours.ts
@@ -539,6 +539,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'Qui OpenStreetMap riporta {tags}, che non indica un singolo grado.',
'tours.hike.ways.unmatchedTip':
'Qui nessun sentiero sta chiaramente sotto la linea del percorso, quindi non viene mostrato nulla.',
+ 'tours.hike.ways.unaskedTip':
+ 'Questa volta non è stato possibile interrogare OpenStreetMap su questi sentieri. Sconosciuto non significa facile.',
'tours.hike.ways.known': 'Noto',
'tours.hike.sac.knownTip': 'La parte del percorso di cui OpenStreetMap indica il grado SAC. Il resto è sconosciuto.',
'tours.hike.sac.highest': 'Massimo noto',
diff --git a/shared/src/i18n/ja/tours.ts b/shared/src/i18n/ja/tours.ts
index 2d2f8265e..98261b22e 100644
--- a/shared/src/i18n/ja/tours.ts
+++ b/shared/src/i18n/ja/tours.ts
@@ -515,6 +515,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMapはこれらの道にsac_scaleを付けていません。不明は易しいという意味ではありません。',
'tours.hike.sac.unclearTip': 'OpenStreetMapはここに{tags}と記載しており、単一の段階を示していません。',
'tours.hike.ways.unmatchedTip': 'ここではツアーの線の下に明確に道がないため、何も表示されません。',
+ 'tours.hike.ways.unaskedTip':
+ '今回はこれらの道についてOpenStreetMapに問い合わせできませんでした。不明は易しいという意味ではありません。',
'tours.hike.ways.known': '判明',
'tours.hike.sac.knownTip': 'OpenStreetMapがSAC難易度を示しているルートの割合です。残りは不明です。',
'tours.hike.sac.highest': '判明している最高',
diff --git a/shared/src/i18n/ko/tours.ts b/shared/src/i18n/ko/tours.ts
index 486e016f9..1000dc1fa 100644
--- a/shared/src/i18n/ko/tours.ts
+++ b/shared/src/i18n/ko/tours.ts
@@ -513,6 +513,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap은 이 길들에 sac_scale을 주지 않습니다. 알 수 없음은 쉬움이 아닙니다.',
'tours.hike.sac.unclearTip': 'OpenStreetMap은 여기에 {tags}라고 적어 하나의 등급을 가리키지 않습니다.',
'tours.hike.ways.unmatchedTip': '여기서는 투어 선 아래에 명확히 놓인 길이 없어 아무것도 표시하지 않습니다.',
+ 'tours.hike.ways.unaskedTip':
+ '이번에는 이 길들에 대해 OpenStreetMap을 조회할 수 없었습니다. 알 수 없음은 쉬움이 아닙니다.',
'tours.hike.ways.known': '알려짐',
'tours.hike.sac.knownTip': 'OpenStreetMap이 SAC 등급을 제공하는 경로의 비율입니다. 나머지는 알 수 없습니다.',
'tours.hike.sac.highest': '알려진 최고',
diff --git a/shared/src/i18n/nl/tours.ts b/shared/src/i18n/nl/tours.ts
index 87f094148..c7c6229f3 100644
--- a/shared/src/i18n/nl/tours.ts
+++ b/shared/src/i18n/nl/tours.ts
@@ -537,6 +537,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap vermeldt hier {tags}, wat geen enkele graad aanduidt.',
'tours.hike.ways.unmatchedTip':
'Hier ligt geen pad duidelijk onder de lijn van de tocht, dus er wordt niets getoond.',
+ 'tours.hike.ways.unaskedTip':
+ 'OpenStreetMap kon deze keer niet over deze paden worden opgevraagd. Onbekend betekent niet makkelijk.',
'tours.hike.ways.known': 'Bekend',
'tours.hike.sac.knownTip': 'Het deel van de route waarvoor OpenStreetMap een SAC-graad geeft. De rest is onbekend.',
'tours.hike.sac.highest': 'Hoogste bekende',
diff --git a/shared/src/i18n/pl/tours.ts b/shared/src/i18n/pl/tours.ts
index 2be2242d0..f9a766e66 100644
--- a/shared/src/i18n/pl/tours.ts
+++ b/shared/src/i18n/pl/tours.ts
@@ -544,6 +544,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap podaje tu {tags}, co nie wskazuje jednego stopnia.',
'tours.hike.ways.unmatchedTip':
'Tutaj żadna droga nie leży wyraźnie pod linią wycieczki, więc nic nie jest pokazywane.',
+ 'tours.hike.ways.unaskedTip':
+ 'Tym razem nie udało się sprawdzić tych dróg w OpenStreetMap. Nieznane nie znaczy łatwe.',
'tours.hike.ways.known': 'Znane',
'tours.hike.sac.knownTip': 'Część trasy, dla której OpenStreetMap podaje stopień SAC. Reszta jest nieznana.',
'tours.hike.sac.highest': 'Najwyższy znany',
diff --git a/shared/src/i18n/ru/tours.ts b/shared/src/i18n/ru/tours.ts
index ac0812db1..a4586015b 100644
--- a/shared/src/i18n/ru/tours.ts
+++ b/shared/src/i18n/ru/tours.ts
@@ -548,6 +548,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap указывает здесь {tags}, что не означает одну категорию.',
'tours.hike.ways.unmatchedTip':
'Здесь ни один путь однозначно не лежит под линией маршрута, поэтому для него ничего не показано.',
+ 'tours.hike.ways.unaskedTip':
+ 'В этот раз не удалось запросить OpenStreetMap об этих путях. Неизвестно не значит легко.',
'tours.hike.ways.known': 'Известно',
'tours.hike.sac.knownTip': 'Доля маршрута, для которой OpenStreetMap указывает категорию SAC. Остальное неизвестно.',
'tours.hike.sac.highest': 'Высшая известная',
diff --git a/shared/src/i18n/sk/tours.ts b/shared/src/i18n/sk/tours.ts
index db9f6fb83..3aaf54e29 100644
--- a/shared/src/i18n/sk/tours.ts
+++ b/shared/src/i18n/sk/tours.ts
@@ -529,6 +529,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap tu uvádza {tags}, čo neoznačuje jediný stupeň.',
'tours.hike.ways.unmatchedTip':
'Tu pod líniou túry jednoznačne neleží žiadna cesta, preto sa pre ňu nič nezobrazuje.',
+ 'tours.hike.ways.unaskedTip': 'OpenStreetMap sa tentoraz na tieto cesty nepodarilo opýtať. Neznáme neznamená ľahké.',
'tours.hike.ways.known': 'Známe',
'tours.hike.sac.knownTip': 'Podiel trasy, pre ktorý OpenStreetMap uvádza stupeň SAC. Zvyšok je neznámy.',
'tours.hike.sac.highest': 'Najvyšší známy',
diff --git a/shared/src/i18n/sv/tours.ts b/shared/src/i18n/sv/tours.ts
index e17281988..a0b03e2c4 100644
--- a/shared/src/i18n/sv/tours.ts
+++ b/shared/src/i18n/sv/tours.ts
@@ -525,6 +525,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap ger dessa vägar ingen sac_scale. Okänt betyder inte lätt.',
'tours.hike.sac.unclearTip': 'OpenStreetMap anger här {tags}, vilket inte pekar ut en enda grad.',
'tours.hike.ways.unmatchedTip': 'Här ligger ingen väg tydligt under turens linje, så inget visas för den.',
+ 'tours.hike.ways.unaskedTip':
+ 'OpenStreetMap kunde inte frågas om dessa vägar den här gången. Okänt betyder inte lätt.',
'tours.hike.ways.known': 'Känt',
'tours.hike.sac.knownTip': 'Den del av rutten där OpenStreetMap anger en SAC-grad. Resten är okänd.',
'tours.hike.sac.highest': 'Högsta kända',
diff --git a/shared/src/i18n/th/tours.ts b/shared/src/i18n/th/tours.ts
index 8f1f328b3..44b77259e 100644
--- a/shared/src/i18n/th/tours.ts
+++ b/shared/src/i18n/th/tours.ts
@@ -506,6 +506,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap ไม่ได้ระบุ sac_scale ให้ทางเหล่านี้ ไม่ทราบไม่ได้แปลว่าง่าย',
'tours.hike.sac.unclearTip': 'OpenStreetMap เขียนไว้ที่นี่ว่า {tags} ซึ่งไม่ได้ระบุระดับเดียว',
'tours.hike.ways.unmatchedTip': 'ที่นี่ไม่มีทางใดอยู่ใต้เส้นของทัวร์อย่างชัดเจน จึงไม่แสดงสิ่งใด',
+ 'tours.hike.ways.unaskedTip': 'ครั้งนี้สอบถาม OpenStreetMap เกี่ยวกับทางเหล่านี้ไม่ได้ ไม่ทราบไม่ได้แปลว่าง่าย',
'tours.hike.ways.known': 'ทราบแล้ว',
'tours.hike.sac.knownTip': 'สัดส่วนของเส้นทางที่ OpenStreetMap ระบุระดับ SAC ส่วนที่เหลือไม่ทราบ',
'tours.hike.sac.highest': 'สูงสุดที่ทราบ',
diff --git a/shared/src/i18n/tours-locales.spec.ts b/shared/src/i18n/tours-locales.spec.ts
index 386e08bfc..c68e24358 100644
--- a/shared/src/i18n/tours-locales.spec.ts
+++ b/shared/src/i18n/tours-locales.spec.ts
@@ -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 = 1063;
+const GENERAL_KEY_COUNT = 1064;
function literalKeys(source: string): string[] {
const tree = ts.createSourceFile('locale.ts', source, ts.ScriptTarget.Latest, true);
diff --git a/shared/src/i18n/tr/tours.ts b/shared/src/i18n/tr/tours.ts
index d879226b8..c9296b0de 100644
--- a/shared/src/i18n/tr/tours.ts
+++ b/shared/src/i18n/tr/tours.ts
@@ -529,6 +529,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap bu yollara sac_scale vermiyor. Bilinmiyor kolay demek değildir.',
'tours.hike.sac.unclearTip': 'OpenStreetMap burada {tags} yazıyor; bu tek bir derece belirtmiyor.',
'tours.hike.ways.unmatchedTip': 'Burada turun çizgisinin altında net bir yol yok, bu yüzden bir şey gösterilmiyor.',
+ 'tours.hike.ways.unaskedTip': 'Bu sefer OpenStreetMap bu yollar için sorgulanamadı. Bilinmiyor kolay demek değildir.',
'tours.hike.ways.known': 'Bilinen',
'tours.hike.sac.knownTip': 'Rotanın, OpenStreetMap’in SAC derecesi verdiği payı. Gerisi bilinmiyor.',
'tours.hike.sac.highest': 'En yüksek bilinen',
diff --git a/shared/src/i18n/uk/tours.ts b/shared/src/i18n/uk/tours.ts
index 6826b9c09..e106f38f2 100644
--- a/shared/src/i18n/uk/tours.ts
+++ b/shared/src/i18n/uk/tours.ts
@@ -543,6 +543,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.unclearTip': 'OpenStreetMap вказує тут {tags}, що не означає одну категорію.',
'tours.hike.ways.unmatchedTip':
'Тут жоден шлях однозначно не лежить під лінією маршруту, тому для нього нічого не показано.',
+ 'tours.hike.ways.unaskedTip': 'Цього разу не вдалося запитати OpenStreetMap про ці шляхи. Невідомо не означає легко.',
'tours.hike.ways.known': 'Відомо',
'tours.hike.sac.knownTip': 'Частка маршруту, для якої OpenStreetMap вказує категорію SAC. Решта невідома.',
'tours.hike.sac.highest': 'Найвища відома',
diff --git a/shared/src/i18n/vi/tours.ts b/shared/src/i18n/vi/tours.ts
index 17b61ea28..937516ee5 100644
--- a/shared/src/i18n/vi/tours.ts
+++ b/shared/src/i18n/vi/tours.ts
@@ -526,6 +526,8 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap không gán sac_scale cho các đường này. Không rõ không có nghĩa là dễ.',
'tours.hike.sac.unclearTip': 'OpenStreetMap ghi {tags} ở đây, không chỉ một cấp độ duy nhất.',
'tours.hike.ways.unmatchedTip': 'Ở đây không có đường nào nằm rõ dưới tuyến của chuyến đi, nên không hiển thị gì.',
+ 'tours.hike.ways.unaskedTip':
+ 'Lần này không truy vấn được OpenStreetMap về các đường này. Không rõ không có nghĩa là dễ.',
'tours.hike.ways.known': 'Đã biết',
'tours.hike.sac.knownTip': 'Phần tuyến đường mà OpenStreetMap cho biết cấp độ SAC. Phần còn lại không rõ.',
'tours.hike.sac.highest': 'Cao nhất đã biết',
diff --git a/shared/src/i18n/zh-TW/tours.ts b/shared/src/i18n/zh-TW/tours.ts
index 8c73d882e..e6445afc9 100644
--- a/shared/src/i18n/zh-TW/tours.ts
+++ b/shared/src/i18n/zh-TW/tours.ts
@@ -482,6 +482,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap 未替這些道路標註 sac_scale。未知並不代表容易。',
'tours.hike.sac.unclearTip': 'OpenStreetMap 在此處寫的是 {tags},並未指出單一等級。',
'tours.hike.ways.unmatchedTip': '此處沒有道路明確位於路線下方,因此不顯示任何內容。',
+ 'tours.hike.ways.unaskedTip': '本次無法向 OpenStreetMap 查詢這些道路。未知並不代表容易。',
'tours.hike.ways.known': '已知',
'tours.hike.sac.knownTip': 'OpenStreetMap 提供 SAC 難度的路線比例。其餘為未知。',
'tours.hike.sac.highest': '已知最高',
diff --git a/shared/src/i18n/zh/tours.ts b/shared/src/i18n/zh/tours.ts
index 6c0878a4b..c220d73ab 100644
--- a/shared/src/i18n/zh/tours.ts
+++ b/shared/src/i18n/zh/tours.ts
@@ -483,6 +483,7 @@ const tours: TranslationStrings = {
'tours.hike.sac.untaggedTip': 'OpenStreetMap 未给这些道路标注 sac_scale。未知并不代表容易。',
'tours.hike.sac.unclearTip': 'OpenStreetMap 在此处写的是 {tags},并未指明单一等级。',
'tours.hike.ways.unmatchedTip': '此处没有道路明确位于路线下方,因此不显示任何内容。',
+ 'tours.hike.ways.unaskedTip': '本次无法向 OpenStreetMap 查询这些道路。未知并不代表容易。',
'tours.hike.ways.known': '已知',
'tours.hike.sac.knownTip': 'OpenStreetMap 给出 SAC 难度的路线比例。其余为未知。',
'tours.hike.sac.highest': '已知最高',