From 74258bd5d9ad91d0e037108f961fd117b74942ee Mon Sep 17 00:00:00 2001 From: Maurice Date: Fri, 28 Aug 2026 22:56:28 +0200 Subject: [PATCH] feat(roadtrip): give the corridor hits their own icons, and say when a stretch went unsearched MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A petrol station and a campsite both came back as the same nameless grey dot, because the road categories only existed on the server: the map falls back to grey for a category it does not know. They now sit in the client's category table too — with the pump, the bolt, the parking sign and the tent, in their own colours — which both map renderers and the popup read from the same place. They stay out of the explore pill's own list on purpose: that pill offers what a city visit needs, and while road trip mode is on it is not on screen anyway. The search also stayed quiet when only some boxes failed, which reads as "no fuel on this stretch" when the truth is that nobody looked. A partial failure now says how many stretches went unanswered. --- client/src/components/Map/poiCategories.ts | 17 +++++++++++++++-- .../Roadtrip/RoadtripCorridorPanel.tsx | 7 +++++++ .../src/components/Roadtrip/useCorridorPois.ts | 8 +++++++- shared/src/i18n/ar/roadtrip.ts | 1 + shared/src/i18n/br/roadtrip.ts | 1 + shared/src/i18n/ca/roadtrip.ts | 1 + shared/src/i18n/cs/roadtrip.ts | 1 + shared/src/i18n/de/roadtrip.ts | 1 + shared/src/i18n/en/roadtrip.ts | 1 + shared/src/i18n/es/roadtrip.ts | 1 + shared/src/i18n/fr/roadtrip.ts | 1 + shared/src/i18n/gr/roadtrip.ts | 1 + shared/src/i18n/hu/roadtrip.ts | 1 + shared/src/i18n/id/roadtrip.ts | 1 + shared/src/i18n/it/roadtrip.ts | 1 + shared/src/i18n/ja/roadtrip.ts | 1 + shared/src/i18n/ko/roadtrip.ts | 1 + shared/src/i18n/nl/roadtrip.ts | 1 + shared/src/i18n/pl/roadtrip.ts | 1 + shared/src/i18n/ru/roadtrip.ts | 1 + shared/src/i18n/sv/roadtrip.ts | 1 + shared/src/i18n/tr/roadtrip.ts | 1 + shared/src/i18n/uk/roadtrip.ts | 1 + shared/src/i18n/vi/roadtrip.ts | 1 + shared/src/i18n/zh-TW/roadtrip.ts | 1 + shared/src/i18n/zh/roadtrip.ts | 1 + 26 files changed, 52 insertions(+), 3 deletions(-) diff --git a/client/src/components/Map/poiCategories.ts b/client/src/components/Map/poiCategories.ts index 3dfdd35d7..fa388c9d4 100644 --- a/client/src/components/Map/poiCategories.ts +++ b/client/src/components/Map/poiCategories.ts @@ -1,4 +1,4 @@ -import { Utensils, Coffee, Wine, BedDouble, Camera, Landmark, Trees, Ticket, type LucideIcon } from 'lucide-react' +import { Utensils, Coffee, Wine, BedDouble, Camera, Landmark, Trees, Ticket, Fuel, Zap, ParkingSquare, Tent, type LucideIcon } from 'lucide-react' // The POI categories shown in the map "explore" pill. The `key` is the contract // with the server (CATEGORY_OSM_FILTERS in mapsService.ts) — the OSM tag mapping @@ -22,8 +22,21 @@ export const POI_CATEGORIES: PoiCategory[] = [ { key: 'activity', labelKey: 'poi.cat.activities', Icon: Ticket, color: '#F59E0B' }, ] +/** + * What a drive needs. Kept out of POI_CATEGORIES on purpose: these are not offered by + * the explore pill, they are what the road trip corridor searches for. They are in the + * lookup below all the same, so a hit drawn on the map gets its own icon and colour + * instead of the nameless grey dot an unknown category falls back to. + */ +export const ROADTRIP_POI_CATEGORIES: PoiCategory[] = [ + { key: 'fuel', labelKey: 'roadtrip.poi.fuel', Icon: Fuel, color: '#0EA5E9' }, + { key: 'charging', labelKey: 'roadtrip.poi.charging', Icon: Zap, color: '#10B981' }, + { key: 'rest_area', labelKey: 'roadtrip.poi.rest', Icon: ParkingSquare, color: '#64748B' }, + { key: 'campsite', labelKey: 'roadtrip.poi.campsite', Icon: Tent, color: '#65A30D' }, +] + export const POI_CATEGORY_BY_KEY: Record = Object.fromEntries( - POI_CATEGORIES.map(c => [c.key, c]), + [...POI_CATEGORIES, ...ROADTRIP_POI_CATEGORIES].map(c => [c.key, c]), ) // One POI result from /api/maps/pois (mirror of the server's OverpassPoi). diff --git a/client/src/components/Roadtrip/RoadtripCorridorPanel.tsx b/client/src/components/Roadtrip/RoadtripCorridorPanel.tsx index 255cc7c9c..d22f5cf8d 100644 --- a/client/src/components/Roadtrip/RoadtripCorridorPanel.tsx +++ b/client/src/components/Roadtrip/RoadtripCorridorPanel.tsx @@ -214,6 +214,13 @@ export default function RoadtripCorridorPanel({ corridor, routes, onAddPoi }: Ro {t('roadtrip.poi.failed')}

+ ) : search.failedAreas > 0 ? ( + // Some boxes answered and some did not. Saying so is the difference between + // "there is no fuel on this stretch" and "nobody looked at this stretch". +

+ + {t('roadtrip.poi.partial', { count: search.failedAreas })} +

) : null} diff --git a/client/src/components/Roadtrip/useCorridorPois.ts b/client/src/components/Roadtrip/useCorridorPois.ts index 51e96ed4f..b7d5134f3 100644 --- a/client/src/components/Roadtrip/useCorridorPois.ts +++ b/client/src/components/Roadtrip/useCorridorPois.ts @@ -17,6 +17,8 @@ export interface CorridorSearch { loading: boolean /** True when the route was longer than the request budget and the tail was left out. */ capped: boolean + /** Boxes the place search could not answer — a partial result is still shown. */ + failedAreas: number error: boolean search: () => void clear: () => void @@ -58,6 +60,7 @@ export function useCorridorPois(line: LatLng[], categories: string[], widthKm: n const [progress, setProgress] = useState({ done: 0, total: 0 }) const [loading, setLoading] = useState(false) const [capped, setCapped] = useState(false) + const [failedAreas, setFailedAreas] = useState(0) const [error, setError] = useState(false) const abortRef = useRef(null) const runIdRef = useRef(0) @@ -68,6 +71,7 @@ export function useCorridorPois(line: LatLng[], categories: string[], widthKm: n setProgress({ done: 0, total: 0 }) setLoading(false) setCapped(false) + setFailedAreas(0) setError(false) }, []) @@ -90,6 +94,7 @@ export function useCorridorPois(line: LatLng[], categories: string[], widthKm: n const tiles = allTiles.slice(0, MAX_TILES) setCapped(allTiles.length > tiles.length) + setFailedAreas(0) setError(false) setResults([]) setLoading(true) @@ -124,6 +129,7 @@ export function useCorridorPois(line: LatLng[], categories: string[], widthKm: n // One dead mirror or one clamped box must not empty the whole search; the run // is only called a failure if every request failed. failures++ + setFailedAreas(failures) } done++ if (controller.signal.aborted || runId !== runIdRef.current) return @@ -142,5 +148,5 @@ export function useCorridorPois(line: LatLng[], categories: string[], widthKm: n useEffect(() => () => abortRef.current?.abort(), []) - return { results, progress, loading, capped, error, search, clear } + return { results, progress, loading, capped, failedAreas, error, search, clear } } diff --git a/shared/src/i18n/ar/roadtrip.ts b/shared/src/i18n/ar/roadtrip.ts index 0727553f1..f0c1dd76e 100644 --- a/shared/src/i18n/ar/roadtrip.ts +++ b/shared/src/i18n/ar/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'ابحث على طول المسار', 'roadtrip.poi.searching': 'جارٍ البحث {done} من {total}', 'roadtrip.poi.capped': 'المسار طويل — تم البحث في الجزء الأول فقط.', + 'roadtrip.poi.partial': 'تعذّر البحث في {count} من المقاطع — لم يستجب البحث عن الأماكن.', 'roadtrip.poi.failed': 'البحث عن الأماكن لا يستجيب حاليًا.', 'roadtrip.poi.empty': 'اختر ما تحتاجه ثم ابحث.', 'roadtrip.poi.add': 'إضافة', diff --git a/shared/src/i18n/br/roadtrip.ts b/shared/src/i18n/br/roadtrip.ts index 0eed8f675..09d158b28 100644 --- a/shared/src/i18n/br/roadtrip.ts +++ b/shared/src/i18n/br/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Buscar ao longo da rota', 'roadtrip.poi.searching': 'Buscando {done} de {total}', 'roadtrip.poi.capped': 'A rota é longa — apenas o primeiro trecho foi pesquisado.', + 'roadtrip.poi.partial': 'Não foi possível pesquisar {count} trechos — a busca de locais não respondeu.', 'roadtrip.poi.failed': 'A busca de locais não está respondendo agora.', 'roadtrip.poi.empty': 'Escolha o que precisa e pesquise.', 'roadtrip.poi.add': 'Adicionar', diff --git a/shared/src/i18n/ca/roadtrip.ts b/shared/src/i18n/ca/roadtrip.ts index ee2f12015..7000d2dbc 100644 --- a/shared/src/i18n/ca/roadtrip.ts +++ b/shared/src/i18n/ca/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Cerca al llarg de la ruta', 'roadtrip.poi.searching': 'Cercant {done} de {total}', 'roadtrip.poi.capped': 'La ruta és llarga: només s’ha cercat el primer tram.', + 'roadtrip.poi.partial': 'No s’han pogut cercar {count} trams: la cerca de llocs no ha respost.', 'roadtrip.poi.failed': 'La cerca de llocs no respon ara mateix.', 'roadtrip.poi.empty': 'Tria què necessites i cerca.', 'roadtrip.poi.add': 'Afegeix', diff --git a/shared/src/i18n/cs/roadtrip.ts b/shared/src/i18n/cs/roadtrip.ts index 0bef1442c..0986ca622 100644 --- a/shared/src/i18n/cs/roadtrip.ts +++ b/shared/src/i18n/cs/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Hledat podél trasy', 'roadtrip.poi.searching': 'Hledání {done} z {total}', 'roadtrip.poi.capped': 'Trasa je dlouhá — prohledán byl jen první úsek.', + 'roadtrip.poi.partial': '{count} úseků se nepodařilo prohledat — vyhledávání míst neodpovědělo.', 'roadtrip.poi.failed': 'Vyhledávání míst právě neodpovídá.', 'roadtrip.poi.empty': 'Vyberte, co potřebujete, a hledejte.', 'roadtrip.poi.add': 'Přidat', diff --git a/shared/src/i18n/de/roadtrip.ts b/shared/src/i18n/de/roadtrip.ts index 0cfdf5c38..bd2575d3e 100644 --- a/shared/src/i18n/de/roadtrip.ts +++ b/shared/src/i18n/de/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Entlang der Route suchen', 'roadtrip.poi.searching': 'Suche {done} von {total}', 'roadtrip.poi.capped': 'Die Route ist lang — nur der erste Abschnitt wurde durchsucht.', + 'roadtrip.poi.partial': '{count} Abschnitte konnten nicht durchsucht werden — die Ortssuche hat nicht geantwortet.', 'roadtrip.poi.failed': 'Die Ortssuche antwortet gerade nicht.', 'roadtrip.poi.empty': 'Wähle aus, was du brauchst, und suche.', 'roadtrip.poi.add': 'Übernehmen', diff --git a/shared/src/i18n/en/roadtrip.ts b/shared/src/i18n/en/roadtrip.ts index 78ed29112..646015e19 100644 --- a/shared/src/i18n/en/roadtrip.ts +++ b/shared/src/i18n/en/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Search along the route', 'roadtrip.poi.searching': 'Searching {done} of {total}', 'roadtrip.poi.capped': 'The route is long — only the first stretch was searched.', + 'roadtrip.poi.partial': '{count} stretches could not be searched — the place search did not answer.', 'roadtrip.poi.failed': 'The place search is not answering right now.', 'roadtrip.poi.empty': 'Pick what you need and search.', 'roadtrip.poi.add': 'Add', diff --git a/shared/src/i18n/es/roadtrip.ts b/shared/src/i18n/es/roadtrip.ts index 201971ec5..cd90bd78d 100644 --- a/shared/src/i18n/es/roadtrip.ts +++ b/shared/src/i18n/es/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Buscar a lo largo de la ruta', 'roadtrip.poi.searching': 'Buscando {done} de {total}', 'roadtrip.poi.capped': 'La ruta es larga: solo se buscó en el primer tramo.', + 'roadtrip.poi.partial': 'No se pudieron buscar {count} tramos: la búsqueda de lugares no respondió.', 'roadtrip.poi.failed': 'La búsqueda de lugares no responde ahora mismo.', 'roadtrip.poi.empty': 'Elige lo que necesitas y busca.', 'roadtrip.poi.add': 'Añadir', diff --git a/shared/src/i18n/fr/roadtrip.ts b/shared/src/i18n/fr/roadtrip.ts index 8f1f80f2d..3dd521181 100644 --- a/shared/src/i18n/fr/roadtrip.ts +++ b/shared/src/i18n/fr/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Chercher le long du trajet', 'roadtrip.poi.searching': 'Recherche {done} sur {total}', 'roadtrip.poi.capped': 'L’itinéraire est long : seule la première portion a été parcourue.', + 'roadtrip.poi.partial': '{count} tronçons n’ont pas pu être parcourus : la recherche de lieux n’a pas répondu.', 'roadtrip.poi.failed': 'La recherche de lieux ne répond pas pour le moment.', 'roadtrip.poi.empty': 'Choisissez ce qu’il vous faut, puis lancez la recherche.', 'roadtrip.poi.add': 'Ajouter', diff --git a/shared/src/i18n/gr/roadtrip.ts b/shared/src/i18n/gr/roadtrip.ts index 5151dfedb..52209313d 100644 --- a/shared/src/i18n/gr/roadtrip.ts +++ b/shared/src/i18n/gr/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Αναζήτηση κατά μήκος της διαδρομής', 'roadtrip.poi.searching': 'Αναζήτηση {done} από {total}', 'roadtrip.poi.capped': 'Η διαδρομή είναι μεγάλη — αναζητήθηκε μόνο το πρώτο τμήμα.', + 'roadtrip.poi.partial': 'Δεν ήταν δυνατή η αναζήτηση σε {count} τμήματα — η αναζήτηση τοποθεσιών δεν απάντησε.', 'roadtrip.poi.failed': 'Η αναζήτηση τοποθεσιών δεν απαντά αυτή τη στιγμή.', 'roadtrip.poi.empty': 'Διαλέξτε τι χρειάζεστε και αναζητήστε.', 'roadtrip.poi.add': 'Προσθήκη', diff --git a/shared/src/i18n/hu/roadtrip.ts b/shared/src/i18n/hu/roadtrip.ts index ce636f310..34c476daf 100644 --- a/shared/src/i18n/hu/roadtrip.ts +++ b/shared/src/i18n/hu/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Keresés az útvonal mentén', 'roadtrip.poi.searching': 'Keresés {done}/{total}', 'roadtrip.poi.capped': 'Az útvonal hosszú – csak az első szakaszon kerestünk.', + 'roadtrip.poi.partial': '{count} szakaszon nem sikerült keresni – a helykeresés nem válaszolt.', 'roadtrip.poi.failed': 'A helykeresés most nem válaszol.', 'roadtrip.poi.empty': 'Válaszd ki, mire van szükséged, és keress.', 'roadtrip.poi.add': 'Hozzáadás', diff --git a/shared/src/i18n/id/roadtrip.ts b/shared/src/i18n/id/roadtrip.ts index 4c38c9271..f45fdd5f6 100644 --- a/shared/src/i18n/id/roadtrip.ts +++ b/shared/src/i18n/id/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Cari di sepanjang rute', 'roadtrip.poi.searching': 'Mencari {done} dari {total}', 'roadtrip.poi.capped': 'Rute panjang — hanya bagian pertama yang dicari.', + 'roadtrip.poi.partial': '{count} ruas tidak dapat dicari — pencarian tempat tidak merespons.', 'roadtrip.poi.failed': 'Pencarian tempat sedang tidak merespons.', 'roadtrip.poi.empty': 'Pilih yang Anda butuhkan lalu cari.', 'roadtrip.poi.add': 'Tambah', diff --git a/shared/src/i18n/it/roadtrip.ts b/shared/src/i18n/it/roadtrip.ts index 90c6fe88b..3f7c9973d 100644 --- a/shared/src/i18n/it/roadtrip.ts +++ b/shared/src/i18n/it/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Cerca lungo il percorso', 'roadtrip.poi.searching': 'Ricerca {done} di {total}', 'roadtrip.poi.capped': 'Il percorso è lungo: è stato cercato solo il primo tratto.', + 'roadtrip.poi.partial': 'Non è stato possibile cercare in {count} tratti: la ricerca dei luoghi non ha risposto.', 'roadtrip.poi.failed': 'La ricerca dei luoghi non risponde al momento.', 'roadtrip.poi.empty': 'Scegli cosa ti serve e cerca.', 'roadtrip.poi.add': 'Aggiungi', diff --git a/shared/src/i18n/ja/roadtrip.ts b/shared/src/i18n/ja/roadtrip.ts index 024e4bf74..fb706644d 100644 --- a/shared/src/i18n/ja/roadtrip.ts +++ b/shared/src/i18n/ja/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'ルート沿いを検索', 'roadtrip.poi.searching': '検索中 {done}/{total}', 'roadtrip.poi.capped': 'ルートが長いため、最初の区間のみ検索しました。', + 'roadtrip.poi.partial': '{count} 区間を検索できませんでした。場所の検索が応答しませんでした。', 'roadtrip.poi.failed': '場所の検索が現在応答していません。', 'roadtrip.poi.empty': '必要なものを選んで検索してください。', 'roadtrip.poi.add': '追加', diff --git a/shared/src/i18n/ko/roadtrip.ts b/shared/src/i18n/ko/roadtrip.ts index a204992b3..371742bd5 100644 --- a/shared/src/i18n/ko/roadtrip.ts +++ b/shared/src/i18n/ko/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': '경로 주변 검색', 'roadtrip.poi.searching': '검색 중 {done}/{total}', 'roadtrip.poi.capped': '경로가 길어 앞부분만 검색했습니다.', + 'roadtrip.poi.partial': '{count}개 구간을 검색하지 못했습니다. 장소 검색이 응답하지 않았습니다.', 'roadtrip.poi.failed': '장소 검색이 지금 응답하지 않습니다.', 'roadtrip.poi.empty': '필요한 항목을 고르고 검색하세요.', 'roadtrip.poi.add': '추가', diff --git a/shared/src/i18n/nl/roadtrip.ts b/shared/src/i18n/nl/roadtrip.ts index abdf4adfb..25d47a5bf 100644 --- a/shared/src/i18n/nl/roadtrip.ts +++ b/shared/src/i18n/nl/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Langs de route zoeken', 'roadtrip.poi.searching': 'Zoeken {done} van {total}', 'roadtrip.poi.capped': 'De route is lang — alleen het eerste deel is doorzocht.', + 'roadtrip.poi.partial': '{count} stukken konden niet worden doorzocht — de plaatszoekfunctie antwoordde niet.', 'roadtrip.poi.failed': 'De plaatszoekfunctie reageert nu niet.', 'roadtrip.poi.empty': 'Kies wat je nodig hebt en zoek.', 'roadtrip.poi.add': 'Toevoegen', diff --git a/shared/src/i18n/pl/roadtrip.ts b/shared/src/i18n/pl/roadtrip.ts index 8496ef677..44de0a0c4 100644 --- a/shared/src/i18n/pl/roadtrip.ts +++ b/shared/src/i18n/pl/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Szukaj wzdłuż trasy', 'roadtrip.poi.searching': 'Szukanie {done} z {total}', 'roadtrip.poi.capped': 'Trasa jest długa — przeszukano tylko pierwszy odcinek.', + 'roadtrip.poi.partial': 'Nie udało się przeszukać {count} odcinków — wyszukiwanie miejsc nie odpowiedziało.', 'roadtrip.poi.failed': 'Wyszukiwanie miejsc chwilowo nie odpowiada.', 'roadtrip.poi.empty': 'Wybierz, czego potrzebujesz, i szukaj.', 'roadtrip.poi.add': 'Dodaj', diff --git a/shared/src/i18n/ru/roadtrip.ts b/shared/src/i18n/ru/roadtrip.ts index 7d008c70d..4ec78dbdb 100644 --- a/shared/src/i18n/ru/roadtrip.ts +++ b/shared/src/i18n/ru/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Искать вдоль маршрута', 'roadtrip.poi.searching': 'Поиск {done} из {total}', 'roadtrip.poi.capped': 'Маршрут длинный — просмотрен только первый участок.', + 'roadtrip.poi.partial': 'Не удалось просмотреть участков: {count} — поиск мест не ответил.', 'roadtrip.poi.failed': 'Поиск мест сейчас не отвечает.', 'roadtrip.poi.empty': 'Выберите нужное и запустите поиск.', 'roadtrip.poi.add': 'Добавить', diff --git a/shared/src/i18n/sv/roadtrip.ts b/shared/src/i18n/sv/roadtrip.ts index f3d2f75ee..a17020134 100644 --- a/shared/src/i18n/sv/roadtrip.ts +++ b/shared/src/i18n/sv/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Sök längs rutten', 'roadtrip.poi.searching': 'Söker {done} av {total}', 'roadtrip.poi.capped': 'Rutten är lång – bara första sträckan genomsöktes.', + 'roadtrip.poi.partial': '{count} sträckor kunde inte genomsökas – platssökningen svarade inte.', 'roadtrip.poi.failed': 'Platssökningen svarar inte just nu.', 'roadtrip.poi.empty': 'Välj vad du behöver och sök.', 'roadtrip.poi.add': 'Lägg till', diff --git a/shared/src/i18n/tr/roadtrip.ts b/shared/src/i18n/tr/roadtrip.ts index 8dc6e363b..aed933968 100644 --- a/shared/src/i18n/tr/roadtrip.ts +++ b/shared/src/i18n/tr/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Rota boyunca ara', 'roadtrip.poi.searching': 'Aranıyor {done}/{total}', 'roadtrip.poi.capped': 'Rota uzun — yalnızca ilk bölüm arandı.', + 'roadtrip.poi.partial': '{count} bölüm aranamadı — yer araması yanıt vermedi.', 'roadtrip.poi.failed': 'Yer araması şu anda yanıt vermiyor.', 'roadtrip.poi.empty': 'Neye ihtiyacın olduğunu seç ve ara.', 'roadtrip.poi.add': 'Ekle', diff --git a/shared/src/i18n/uk/roadtrip.ts b/shared/src/i18n/uk/roadtrip.ts index 15da7e361..55f37fb24 100644 --- a/shared/src/i18n/uk/roadtrip.ts +++ b/shared/src/i18n/uk/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Шукати вздовж маршруту', 'roadtrip.poi.searching': 'Пошук {done} з {total}', 'roadtrip.poi.capped': 'Маршрут довгий — переглянуто лише перший відрізок.', + 'roadtrip.poi.partial': 'Не вдалося переглянути відрізків: {count} — пошук місць не відповів.', 'roadtrip.poi.failed': 'Пошук місць зараз не відповідає.', 'roadtrip.poi.empty': 'Оберіть потрібне й почніть пошук.', 'roadtrip.poi.add': 'Додати', diff --git a/shared/src/i18n/vi/roadtrip.ts b/shared/src/i18n/vi/roadtrip.ts index ec69d5397..b72dd3217 100644 --- a/shared/src/i18n/vi/roadtrip.ts +++ b/shared/src/i18n/vi/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': 'Tìm dọc lộ trình', 'roadtrip.poi.searching': 'Đang tìm {done}/{total}', 'roadtrip.poi.capped': 'Lộ trình dài — chỉ đoạn đầu được tìm kiếm.', + 'roadtrip.poi.partial': 'Không tìm được {count} đoạn — tìm kiếm địa điểm không phản hồi.', 'roadtrip.poi.failed': 'Tìm kiếm địa điểm hiện không phản hồi.', 'roadtrip.poi.empty': 'Chọn thứ bạn cần rồi tìm.', 'roadtrip.poi.add': 'Thêm', diff --git a/shared/src/i18n/zh-TW/roadtrip.ts b/shared/src/i18n/zh-TW/roadtrip.ts index 5d98b1626..efba5d689 100644 --- a/shared/src/i18n/zh-TW/roadtrip.ts +++ b/shared/src/i18n/zh-TW/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': '沿路線搜尋', 'roadtrip.poi.searching': '搜尋中 {done}/{total}', 'roadtrip.poi.capped': '路線較長,僅搜尋了前段。', + 'roadtrip.poi.partial': '有 {count} 段無法搜尋 — 地點搜尋沒有回應。', 'roadtrip.poi.failed': '地點搜尋暫時沒有回應。', 'roadtrip.poi.empty': '選擇你需要的,然後搜尋。', 'roadtrip.poi.add': '新增', diff --git a/shared/src/i18n/zh/roadtrip.ts b/shared/src/i18n/zh/roadtrip.ts index 0d1ef0afd..f0e988b5b 100644 --- a/shared/src/i18n/zh/roadtrip.ts +++ b/shared/src/i18n/zh/roadtrip.ts @@ -25,6 +25,7 @@ const roadtrip: TranslationStrings = { 'roadtrip.poi.search': '沿路线搜索', 'roadtrip.poi.searching': '搜索中 {done}/{total}', 'roadtrip.poi.capped': '路线较长,仅搜索了前段。', + 'roadtrip.poi.partial': '有 {count} 段无法搜索 — 地点搜索没有响应。', 'roadtrip.poi.failed': '地点搜索暂时没有响应。', 'roadtrip.poi.empty': '选择你需要的,然后搜索。', 'roadtrip.poi.add': '添加',