fix(tours): explain and offer to re-ask hike ways that could not be asked

A way OpenStreetMap could not be asked about this time now carries a tooltip
saying so, and the unknown list offers to ask again whenever such a row is
there, not only when nothing at all was answered.
This commit is contained in:
Maurice
2026-10-20 14:51:23 +02:00
parent c80152f41d
commit f016972a4e
30 changed files with 72 additions and 5 deletions
@@ -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();
});
});
@@ -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 |
<ClassRow key={row.key} row={row} ways={ways} limit={limit} />
))}
</ul>
{/* Some ways could not be asked this time: they may be asked again without leaving the card. */}
{unknown.some((row) => row.key === 'unasked') && (
<span className="flex">
<CardAction icon={<RefreshCw size={12} strokeWidth={2} />} onClick={ways.retry}>
{t('common.errorRetry')}
</CardAction>
</span>
)}
</div>
)}
<span className="inline-flex gap-1.5 text-content-faint" style={fs(11, 'body')}>
+1
View File
@@ -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': 'الأعلى المعروف',
+1
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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ý',
+2
View File
@@ -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.',
+2
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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. Το υπόλοιπο είναι άγνωστο.',
+2
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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': '判明している最高',
+2
View File
@@ -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': '알려진 최고',
+2
View File
@@ -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',
+2
View File
@@ -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',
+2
View File
@@ -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': 'Высшая известная',
+1
View File
@@ -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',
+2
View File
@@ -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',
+1
View File
@@ -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': 'สูงสุดที่ทราบ',
+1 -1
View File
@@ -20,7 +20,7 @@ const tokens = (value: string) => [...value.matchAll(/\{[^{}]+\}/g)].map((match)
// placeholder spec; here only the general keys are.
const groups = pluralGroups(Object.keys(english));
const generalKeys = (keys: string[]) => keys.filter((key) => !pluralFormOf(key, groups));
const GENERAL_KEY_COUNT = 1063;
const GENERAL_KEY_COUNT = 1064;
function literalKeys(source: string): string[] {
const tree = ts.createSourceFile('locale.ts', source, ts.ScriptTarget.Latest, true);
+1
View File
@@ -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',
+1
View File
@@ -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': 'Найвища відома',
+2
View File
@@ -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',
+1
View File
@@ -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': '已知最高',
+1
View File
@@ -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': '已知最高',