Merge pull request #2366 from liketrek/fix/roadtrip-feedback

feat(roadtrip): the testers' round, and a defect it uncovered
This commit is contained in:
Maurice
2026-09-14 13:33:36 +02:00
committed by GitHub
55 changed files with 2260 additions and 98 deletions
+10
View File
@@ -9,6 +9,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.prices': 'التعريفات المنشورة',
'roadtrip.charging.note': 'تعريفة منشورة؛ قد تُطبق ضرائب وشروط ورسوم إضافية. قد يختلف سعر بطاقة الشحن.',
'roadtrip.charging.coverage': 'بيانات مفتوحة؛ تختلف التغطية حسب المنطقة والمشغل.',
'roadtrip.charging.availability': 'التوفر والتعريفات',
'roadtrip.import.title': 'استيراد مسار Google Maps',
'roadtrip.import.note': 'تُضاف المحطات إلى اليوم المحدد. يعيد TREK حساب المسار.',
'roadtrip.import.unresolved': 'تعذر تحديد الموقع؛ سيتم تخطي هذه المحطة.',
@@ -193,6 +194,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} عن المسار',
'roadtrip.poi.atStart': 'قرب نقطة البداية',
'roadtrip.poi.alongRoute': 'بعد {distance}',
'roadtrip.poi.clearResults': 'مسح النتائج',
'roadtrip.poi.addManual': 'إضافة يدوية',
'roadtrip.poi.manualHint':
'لا يجد البحث عن الأماكن كل محطة شحن أو وقود. ابحث عن واحدة بالاسم وحدّد موضعها في الرحلة.',
'roadtrip.poi.addBetween': 'الإضافة بين محطتين',
'roadtrip.poi.manualOffRoute': '{distance} عن المسار، لذا تحقق من المرحلة التي تناسبها.',
'roadtrip.poi.manualAppend': 'لا يوجد مسار بعد، لذا تُضاف في نهاية اليوم {number}.',
'roadtrip.poi.manualNoResults': 'لم يُعثر على أي مكان.',
'roadtrip.summary.distance': 'المسافة',
'roadtrip.summary.driving': 'مدة القيادة',
'roadtrip.alt.ask': 'مسارات أخرى',
@@ -204,6 +213,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'الأسرع',
'roadtrip.alt.slower': 'أبطأ بـ {time}',
'roadtrip.alt.quicker': 'أسرع بـ {time}',
'roadtrip.alt.otherEngine': 'الزمن محسوب بمحرك التجنب، لا بالمحرك الرئيسي.',
'roadtrip.day': 'اليوم {number}',
'roadtrip.quietDay.empty': 'لا توجد محطات بعد — أفلِت واحدة هنا',
'roadtrip.quietDay.one': 'حتى الآن {name} فقط — أفلِت محطة هنا',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Tarifa publicada; impostos, condições e taxas extras podem se aplicar. O preço do seu cartão pode variar.',
'roadtrip.charging.coverage': 'Dados abertos; cobertura varia por região e operador.',
'roadtrip.charging.availability': 'Disponibilidade e tarifas',
'roadtrip.import.title': 'Importar rota do Google Maps',
'roadtrip.import.note': 'As paradas são adicionadas ao dia escolhido. O TREK recalcula a rota.',
'roadtrip.import.unresolved': 'Local não encontrado; esta parada será ignorada.',
@@ -198,6 +199,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} fora da rota',
'roadtrip.poi.atStart': 'perto do início',
'roadtrip.poi.alongRoute': 'após {distance}',
'roadtrip.poi.clearResults': 'Limpar resultados',
'roadtrip.poi.addManual': 'Adicionar manualmente',
'roadtrip.poi.manualHint':
'A busca de locais não encontra todos os pontos de recarga nem todos os postos. Procure um pelo nome e diga em que ponto do trajeto ele entra.',
'roadtrip.poi.addBetween': 'Adicionar entre',
'roadtrip.poi.manualOffRoute': '{distance} fora da rota, então confira a que trecho ele pertence.',
'roadtrip.poi.manualAppend': 'Nenhuma rota foi calculada ainda, então ele entra no fim do dia {number}.',
'roadtrip.poi.manualNoResults': 'Nenhum local encontrado.',
'roadtrip.summary.distance': 'Distância',
'roadtrip.summary.driving': 'Tempo de direção',
'roadtrip.alt.ask': 'Outras rotas',
@@ -209,6 +218,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Mais rápida',
'roadtrip.alt.slower': '{time} mais lenta',
'roadtrip.alt.quicker': '{time} mais rápida',
'roadtrip.alt.otherEngine': 'Tempo do roteador de desvios, não do principal.',
'roadtrip.day': 'Dia {number}',
'roadtrip.quietDay.empty': 'Ainda sem paradas — solte uma aqui',
'roadtrip.quietDay.one': 'Até agora só {name} — solte uma parada aqui',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Tarifa publicada; pot haver-hi impostos, condicions i càrrecs addicionals. El preu de la targeta pot variar.',
'roadtrip.charging.coverage': 'Dades obertes; cobertura segons regió i operador.',
'roadtrip.charging.availability': 'Disponibilitat i tarifes',
'roadtrip.import.title': 'Importa una ruta de Google Maps',
'roadtrip.import.note': 'Les parades s’afegeixen al dia triat. TREK recalcula la ruta.',
'roadtrip.import.unresolved': 'Ubicació no trobada; aquesta parada s’ometrà.',
@@ -200,6 +201,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} fora de la ruta',
'roadtrip.poi.atStart': 'a prop de l’inici',
'roadtrip.poi.alongRoute': 'després de {distance}',
'roadtrip.poi.clearResults': 'Esborra resultats',
'roadtrip.poi.addManual': 'Afegeix manualment',
'roadtrip.poi.manualHint':
'La cerca de llocs no troba tots els punts de recàrrega ni totes les benzineres. Busca’n un pel nom i digues en quin punt del trajecte va.',
'roadtrip.poi.addBetween': 'Afegeix entre',
'roadtrip.poi.manualOffRoute': '{distance} fora de la ruta: comprova a quin trajecte pertany.',
'roadtrip.poi.manualAppend': 'Encara no hi ha cap ruta calculada, així que va al final del dia {number}.',
'roadtrip.poi.manualNoResults': 'No s’ha trobat cap lloc.',
'roadtrip.summary.distance': 'Distància',
'roadtrip.summary.driving': 'Temps de conducció',
'roadtrip.alt.ask': 'Altres rutes',
@@ -211,6 +220,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'La més ràpida',
'roadtrip.alt.slower': '{time} més lenta',
'roadtrip.alt.quicker': '{time} més ràpida',
'roadtrip.alt.otherEngine': 'Temps de l’encaminador d’evitació, no del principal.',
'roadtrip.day': 'Dia {number}',
'roadtrip.quietDay.empty': 'Encara sense parades: deixa’n una aquí',
'roadtrip.quietDay.one': 'De moment només {name}: deixa una parada aquí',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Zveřejněný tarif; mohou platit daně, podmínky a další poplatky. Cena vaší karty se může lišit.',
'roadtrip.charging.coverage': 'Otevřená data; pokrytí závisí na regionu a provozovateli.',
'roadtrip.charging.availability': 'Dostupnost a tarify',
'roadtrip.import.title': 'Importovat trasu z Google Maps',
'roadtrip.import.note': 'Zastávky se přidají ke zvolenému dni. TREK trasu přepočítá.',
'roadtrip.import.unresolved': 'Místo nenalezeno; tato zastávka bude přeskočena.',
@@ -196,6 +197,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} od trasy',
'roadtrip.poi.atStart': 'blízko startu',
'roadtrip.poi.alongRoute': 'po {distance}',
'roadtrip.poi.clearResults': 'Vymazat výsledky',
'roadtrip.poi.addManual': 'Přidat ručně',
'roadtrip.poi.manualHint':
'Vyhledávání míst nenajde každou nabíječku nebo pumpu. Najděte ji podle názvu a určete, kam na cestě patří.',
'roadtrip.poi.addBetween': 'Přidat mezi',
'roadtrip.poi.manualOffRoute': '{distance} od trasy, ověřte proto, do kterého úseku patří.',
'roadtrip.poi.manualAppend': 'Zatím není spočítaná žádná trasa, přidá se proto na konec dne {number}.',
'roadtrip.poi.manualNoResults': 'Žádná místa nenalezena.',
'roadtrip.summary.distance': 'Vzdálenost',
'roadtrip.summary.driving': 'Doba jízdy',
'roadtrip.alt.ask': 'Jiné trasy',
@@ -207,6 +216,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Nejrychlejší',
'roadtrip.alt.slower': 'o {time} déle',
'roadtrip.alt.quicker': 'o {time} rychleji',
'roadtrip.alt.otherEngine': 'Čas spočítal server pro objížďky, ne ten hlavní.',
'roadtrip.day': 'Den {number}',
'roadtrip.quietDay.empty': 'Zatím žádné zastávky — přetáhněte sem',
'roadtrip.quietDay.one': 'Zatím jen {name} — přetáhněte sem zastávku',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Veröffentlichter Tarif; Steuern, Bedingungen und Zusatzgebühren beachten. Dein Ladekartenpreis kann abweichen.',
'roadtrip.charging.coverage': 'Offene Daten; Abdeckung abhängig von Region und Betreiber.',
'roadtrip.charging.availability': 'Verfügbarkeit und Tarife',
'roadtrip.import.title': 'Google-Maps-Route importieren',
'roadtrip.import.note': 'Stopps werden an den gewählten Tag angehängt. TREK berechnet die Route neu.',
'roadtrip.import.unresolved': 'Ort nicht gefunden; dieser Stopp wird übersprungen.',
@@ -195,6 +196,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} abseits der Route',
'roadtrip.poi.atStart': 'am Startpunkt',
'roadtrip.poi.alongRoute': 'nach {distance}',
'roadtrip.poi.clearResults': 'Ergebnisse löschen',
'roadtrip.poi.addManual': 'Selbst hinzufügen',
'roadtrip.poi.manualHint':
'Die Ortssuche findet nicht jede Ladesäule und nicht jede Tankstelle. Suche einen Ort per Name und lege fest, wo unterwegs er hingehört.',
'roadtrip.poi.addBetween': 'Einfügen zwischen',
'roadtrip.poi.manualOffRoute': '{distance} abseits der Route, prüfe also, zu welcher Etappe er gehört.',
'roadtrip.poi.manualAppend': 'Noch ist keine Route berechnet, also kommt der Stopp ans Ende von Tag {number}.',
'roadtrip.poi.manualNoResults': 'Keine Orte gefunden.',
'roadtrip.summary.distance': 'Strecke',
'roadtrip.summary.driving': 'Fahrzeit',
'roadtrip.alt.ask': 'Andere Wege',
@@ -206,6 +215,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Schnellste',
'roadtrip.alt.slower': '{time} länger',
'roadtrip.alt.quicker': '{time} kürzer',
'roadtrip.alt.otherEngine': 'Zeit vom Ausweich-Router, nicht vom Haupt-Router.',
'roadtrip.day': 'Tag {number}',
'roadtrip.quietDay.empty': 'Noch keine Stopps — hier ablegen',
'roadtrip.quietDay.one': 'Bisher nur {name} — hier einen Stopp ablegen',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Published tariff; taxes, conditions and extra fees may apply. Your charging-card price can differ.',
'roadtrip.charging.coverage': 'Open data; coverage varies by region and operator.',
'roadtrip.charging.availability': 'Availability and prices',
'roadtrip.import.title': 'Import Google Maps route',
'roadtrip.import.note': 'Stops are appended to the selected day. TREK recalculates the route.',
'roadtrip.import.unresolved': 'Location unresolved; this stop will be skipped.',
@@ -192,6 +193,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} off the route',
'roadtrip.poi.atStart': 'near the start',
'roadtrip.poi.alongRoute': 'after {distance}',
'roadtrip.poi.clearResults': 'Clear results',
'roadtrip.poi.addManual': 'Add manually',
'roadtrip.poi.manualHint':
'The place search does not find every charger or pump. Look one up by name and say where on the drive it goes.',
'roadtrip.poi.addBetween': 'Add between',
'roadtrip.poi.manualOffRoute': '{distance} from the route, so check which leg it belongs on.',
'roadtrip.poi.manualAppend': 'Nothing has routed yet, so it goes at the end of day {number}.',
'roadtrip.poi.manualNoResults': 'No places found.',
'roadtrip.summary.distance': 'Distance',
'roadtrip.summary.driving': 'Driving time',
'roadtrip.alt.ask': 'Other ways',
@@ -203,6 +212,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Fastest',
'roadtrip.alt.slower': '{time} slower',
'roadtrip.alt.quicker': '{time} quicker',
'roadtrip.alt.otherEngine': 'Timed by the avoidance router, not the main one.',
'roadtrip.day': 'Day {number}',
'roadtrip.quietDay.empty': 'No stops yet — drop one here',
'roadtrip.quietDay.one': 'Only {name} so far — drop a stop here',
+10
View File
@@ -11,6 +11,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Tarifa publicada; pueden aplicarse impuestos, condiciones y cargos adicionales. El precio de tu tarjeta puede variar.',
'roadtrip.charging.coverage': 'Datos abiertos; cobertura según región y operador.',
'roadtrip.charging.availability': 'Disponibilidad y tarifas',
'roadtrip.import.title': 'Importar ruta de Google Maps',
'roadtrip.import.note': 'Las paradas se añaden al día elegido. TREK recalcula la ruta.',
'roadtrip.import.unresolved': 'Ubicación no encontrada; se omitirá esta parada.',
@@ -199,6 +200,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} fuera de la ruta',
'roadtrip.poi.atStart': 'cerca del inicio',
'roadtrip.poi.alongRoute': 'tras {distance}',
'roadtrip.poi.clearResults': 'Borrar resultados',
'roadtrip.poi.addManual': 'Añadir a mano',
'roadtrip.poi.manualHint':
'La búsqueda de lugares no encuentra todos los puntos de recarga ni todas las gasolineras. Busca uno por su nombre e indica en qué punto del recorrido va.',
'roadtrip.poi.addBetween': 'Añadir entre',
'roadtrip.poi.manualOffRoute': '{distance} fuera de la ruta: comprueba a qué tramo pertenece.',
'roadtrip.poi.manualAppend': 'Aún no hay ninguna ruta calculada, así que va al final del día {number}.',
'roadtrip.poi.manualNoResults': 'No se encontró ningún lugar.',
'roadtrip.summary.distance': 'Distancia',
'roadtrip.summary.driving': 'Tiempo de conducción',
'roadtrip.alt.ask': 'Otras rutas',
@@ -210,6 +219,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'La más rápida',
'roadtrip.alt.slower': '{time} más',
'roadtrip.alt.quicker': '{time} menos',
'roadtrip.alt.otherEngine': 'Tiempo del enrutador de evitación, no del principal.',
'roadtrip.day': 'Día {number}',
'roadtrip.quietDay.empty': 'Sin paradas todavía: suelta una aquí',
'roadtrip.quietDay.one': 'Por ahora solo {name}: suelta una parada aquí',
+10
View File
@@ -11,6 +11,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Tarif publié ; taxes, conditions et frais supplémentaires possibles. Le prix de votre carte peut différer.',
'roadtrip.charging.coverage': 'Données ouvertes ; couverture variable selon la région et l’opérateur.',
'roadtrip.charging.availability': 'Disponibilité et tarifs',
'roadtrip.import.title': 'Importer un itinéraire Google Maps',
'roadtrip.import.note': 'Les étapes sont ajoutées au jour choisi. TREK recalcule le trajet.',
'roadtrip.import.unresolved': 'Lieu introuvable ; cette étape sera ignorée.',
@@ -199,6 +200,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} hors itinéraire',
'roadtrip.poi.atStart': 'près du départ',
'roadtrip.poi.alongRoute': 'après {distance}',
'roadtrip.poi.clearResults': 'Effacer les résultats',
'roadtrip.poi.addManual': 'Ajouter manuellement',
'roadtrip.poi.manualHint':
'La recherche de lieux ne trouve pas toutes les bornes ni toutes les stations-service. Cherchez-en une par son nom et indiquez où elle se place sur le trajet.',
'roadtrip.poi.addBetween': 'Ajouter entre',
'roadtrip.poi.manualOffRoute': '{distance} de l’itinéraire, vérifiez donc sur quel trajet il se place.',
'roadtrip.poi.manualAppend': 'Aucun itinéraire n’est encore calculé, il ira donc à la fin du jour {number}.',
'roadtrip.poi.manualNoResults': 'Aucun lieu trouvé.',
'roadtrip.summary.distance': 'Distance',
'roadtrip.summary.driving': 'Temps de conduite',
'roadtrip.alt.ask': 'Autres itinéraires',
@@ -210,6 +219,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'La plus rapide',
'roadtrip.alt.slower': '{time} de plus',
'roadtrip.alt.quicker': '{time} de moins',
'roadtrip.alt.otherEngine': 'Temps du routeur de contournement, pas du principal.',
'roadtrip.day': 'Jour {number}',
'roadtrip.quietDay.empty': 'Aucun arrêt — déposez-en un ici',
'roadtrip.quietDay.one': 'Seulement {name} pour l’instant — déposez un arrêt ici',
+10
View File
@@ -11,6 +11,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Δημοσιευμένη χρέωση· ενδέχεται να ισχύουν φόροι, όροι και πρόσθετα τέλη. Η τιμή της κάρτας σας μπορεί να διαφέρει.',
'roadtrip.charging.coverage': 'Ανοικτά δεδομένα· η κάλυψη εξαρτάται από την περιοχή και τον πάροχο.',
'roadtrip.charging.availability': 'Διαθεσιμότητα και χρεώσεις',
'roadtrip.import.title': 'Εισαγωγή διαδρομής Google Maps',
'roadtrip.import.note': 'Οι στάσεις προστίθενται στην επιλεγμένη ημέρα. Το TREK υπολογίζει ξανά τη διαδρομή.',
'roadtrip.import.unresolved': 'Η τοποθεσία δεν βρέθηκε· αυτή η στάση θα παραλειφθεί.',
@@ -201,6 +202,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} από τη διαδρομή',
'roadtrip.poi.atStart': 'κοντά στην αφετηρία',
'roadtrip.poi.alongRoute': 'μετά από {distance}',
'roadtrip.poi.clearResults': 'Καθαρισμός αποτελεσμάτων',
'roadtrip.poi.addManual': 'Χειροκίνητη προσθήκη',
'roadtrip.poi.manualHint':
'Η αναζήτηση τοποθεσιών δεν βρίσκει κάθε φορτιστή ή πρατήριο καυσίμων. Βρείτε ένα με το όνομά του και δηλώστε πού μπαίνει στη διαδρομή.',
'roadtrip.poi.addBetween': 'Προσθήκη ανάμεσα',
'roadtrip.poi.manualOffRoute': '{distance} από τη διαδρομή, οπότε ελέγξτε σε ποιο σκέλος ανήκει.',
'roadtrip.poi.manualAppend': 'Δεν έχει υπολογιστεί ακόμη διαδρομή, οπότε μπαίνει στο τέλος της ημέρας {number}.',
'roadtrip.poi.manualNoResults': 'Δεν βρέθηκαν τοποθεσίες.',
'roadtrip.summary.distance': 'Απόσταση',
'roadtrip.summary.driving': 'Χρόνος οδήγησης',
'roadtrip.alt.ask': 'Άλλες διαδρομές',
@@ -212,6 +221,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Η ταχύτερη',
'roadtrip.alt.slower': '{time} πιο αργή',
'roadtrip.alt.quicker': '{time} πιο γρήγορη',
'roadtrip.alt.otherEngine': 'Χρόνος από τον δρομολογητή αποφυγής, όχι τον κύριο.',
'roadtrip.day': 'Ημέρα {number}',
'roadtrip.quietDay.empty': 'Καμία στάση ακόμη — αφήστε μία εδώ',
'roadtrip.quietDay.one': 'Μέχρι στιγμής μόνο {name} — αφήστε μια στάση εδώ',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.prices': 'Közzétett díjak',
'roadtrip.charging.note': 'Közzétett díj; adók, feltételek és felárak lehetnek. A töltőkártya ára eltérhet.',
'roadtrip.charging.coverage': 'Nyílt adatok; a lefedettség régiónként és szolgáltatónként változik.',
'roadtrip.charging.availability': 'Elérhetőség és díjak',
'roadtrip.import.title': 'Google Maps-útvonal importálása',
'roadtrip.import.note': 'A megállók a kiválasztott naphoz kerülnek. A TREK újratervezi az útvonalat.',
'roadtrip.import.unresolved': 'A hely nem található; ez a megálló kimarad.',
@@ -197,6 +198,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} az útvonaltól',
'roadtrip.poi.atStart': 'a kiindulás közelében',
'roadtrip.poi.alongRoute': '{distance} után',
'roadtrip.poi.clearResults': 'Találatok törlése',
'roadtrip.poi.addManual': 'Hozzáadás kézzel',
'roadtrip.poi.manualHint':
'A helykeresés nem talál meg minden töltőt vagy benzinkutat. Keresd meg név szerint, és add meg, hová kerüljön az úton.',
'roadtrip.poi.addBetween': 'Beszúrás két megálló közé',
'roadtrip.poi.manualOffRoute': '{distance} az útvonaltól, ezért nézd meg, melyik szakaszhoz tartozik.',
'roadtrip.poi.manualAppend': 'Még nincs kiszámolt útvonal, ezért a(z) {number}. nap végére kerül.',
'roadtrip.poi.manualNoResults': 'Nincs találat.',
'roadtrip.summary.distance': 'Távolság',
'roadtrip.summary.driving': 'Vezetési idő',
'roadtrip.alt.ask': 'Más útvonalak',
@@ -208,6 +217,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Leggyorsabb',
'roadtrip.alt.slower': '{time}-cel lassabb',
'roadtrip.alt.quicker': '{time}-cel gyorsabb',
'roadtrip.alt.otherEngine': 'Az időt a kerülő útvonaltervező számolta, nem a fő.',
'roadtrip.day': '{number}. nap',
'roadtrip.quietDay.empty': 'Még nincs megálló — húzzon ide egyet',
'roadtrip.quietDay.one': 'Egyelőre csak {name} — húzzon ide egy megállót',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Tarif publik; pajak, syarat, dan biaya tambahan mungkin berlaku. Harga kartu pengisian Anda bisa berbeda.',
'roadtrip.charging.coverage': 'Data terbuka; cakupan bergantung wilayah dan operator.',
'roadtrip.charging.availability': 'Ketersediaan dan tarif',
'roadtrip.import.title': 'Impor rute Google Maps',
'roadtrip.import.note': 'Perhentian ditambahkan ke hari yang dipilih. TREK menghitung ulang rute.',
'roadtrip.import.unresolved': 'Lokasi tidak ditemukan; perhentian ini akan dilewati.',
@@ -199,6 +200,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} dari rute',
'roadtrip.poi.atStart': 'dekat titik awal',
'roadtrip.poi.alongRoute': 'setelah {distance}',
'roadtrip.poi.clearResults': 'Hapus hasil',
'roadtrip.poi.addManual': 'Tambah manual',
'roadtrip.poi.manualHint':
'Pencarian tempat tidak menemukan setiap pengisian daya atau pompa bahan bakar. Cari satu menurut nama dan tentukan di bagian perjalanan mana ia ditempatkan.',
'roadtrip.poi.addBetween': 'Tambahkan di antara',
'roadtrip.poi.manualOffRoute': '{distance} dari rute, jadi periksa ia masuk ke ruas yang mana.',
'roadtrip.poi.manualAppend': 'Belum ada rute yang dihitung, jadi ia masuk di akhir hari {number}.',
'roadtrip.poi.manualNoResults': 'Tidak ada tempat yang ditemukan.',
'roadtrip.summary.distance': 'Jarak',
'roadtrip.summary.driving': 'Waktu berkendara',
'roadtrip.alt.ask': 'Rute lain',
@@ -210,6 +219,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Tercepat',
'roadtrip.alt.slower': '{time} lebih lama',
'roadtrip.alt.quicker': '{time} lebih cepat',
'roadtrip.alt.otherEngine': 'Waktu dihitung mesin penghindaran, bukan mesin utama.',
'roadtrip.day': 'Hari {number}',
'roadtrip.quietDay.empty': 'Belum ada perhentian — jatuhkan di sini',
'roadtrip.quietDay.one': 'Sejauh ini hanya {name} — jatuhkan perhentian di sini',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Tariffa pubblicata; verificare tasse, condizioni e supplementi. Il prezzo della tua tessera può variare.',
'roadtrip.charging.coverage': 'Dati aperti; copertura variabile per regione e gestore.',
'roadtrip.charging.availability': 'Disponibilità e tariffe',
'roadtrip.import.title': 'Importa percorso Google Maps',
'roadtrip.import.note': 'Le tappe vengono aggiunte al giorno scelto. TREK ricalcola il percorso.',
'roadtrip.import.unresolved': 'Posizione non trovata; questa tappa verrà saltata.',
@@ -199,6 +200,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} fuori percorso',
'roadtrip.poi.atStart': 'vicino alla partenza',
'roadtrip.poi.alongRoute': 'dopo {distance}',
'roadtrip.poi.clearResults': 'Svuota risultati',
'roadtrip.poi.addManual': 'Aggiungi a mano',
'roadtrip.poi.manualHint':
'La ricerca dei luoghi non trova ogni colonnina o distributore. Cercane uno per nome e indica dove si inserisce nel viaggio.',
'roadtrip.poi.addBetween': 'Inserisci tra',
'roadtrip.poi.manualOffRoute': '{distance} fuori percorso: controlla a quale tratto appartiene.',
'roadtrip.poi.manualAppend': 'Nessun percorso è ancora calcolato, quindi va alla fine del giorno {number}.',
'roadtrip.poi.manualNoResults': 'Nessun luogo trovato.',
'roadtrip.summary.distance': 'Distanza',
'roadtrip.summary.driving': 'Tempo di guida',
'roadtrip.alt.ask': 'Altri percorsi',
@@ -210,6 +219,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'La più veloce',
'roadtrip.alt.slower': '{time} in più',
'roadtrip.alt.quicker': '{time} in meno',
'roadtrip.alt.otherEngine': 'Tempo dal router delle esclusioni, non dal principale.',
'roadtrip.day': 'Giorno {number}',
'roadtrip.quietDay.empty': 'Ancora nessuna sosta: trascinane una qui',
'roadtrip.quietDay.one': 'Finora solo {name}: trascina qui una sosta',
+10
View File
@@ -11,6 +11,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'公開料金です。税金、条件、追加料金をご確認ください。充電カードの料金は異なる場合があります。',
'roadtrip.charging.coverage': 'オープンデータ。地域や事業者によって対応範囲が異なります。',
'roadtrip.charging.availability': '空き状況と料金',
'roadtrip.import.title': 'Google Mapsのルートをインポート',
'roadtrip.import.note': '立ち寄り先を選択した日に追加し、TREKでルートを再計算します。',
'roadtrip.import.unresolved': '場所が見つからないため、この立ち寄り先はスキップされます。',
@@ -196,6 +197,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': 'ルートから {distance}',
'roadtrip.poi.atStart': '出発地の近く',
'roadtrip.poi.alongRoute': '{distance} 地点',
'roadtrip.poi.clearResults': '結果を消去',
'roadtrip.poi.addManual': '手動で追加',
'roadtrip.poi.manualHint':
'場所の検索では、すべての充電スポットや給油所は見つかりません。名前で探して、道中のどこに入れるかを指定してください。',
'roadtrip.poi.addBetween': '追加する区間',
'roadtrip.poi.manualOffRoute': 'ルートから {distance} 離れています。どの区間に入れるか確認してください。',
'roadtrip.poi.manualAppend': 'まだルートがないため、{number} 日目の最後に追加します。',
'roadtrip.poi.manualNoResults': '場所が見つかりませんでした。',
'roadtrip.summary.distance': '距離',
'roadtrip.summary.driving': '運転時間',
'roadtrip.alt.ask': '別のルート',
@@ -207,6 +216,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': '最速',
'roadtrip.alt.slower': '{time} 遅い',
'roadtrip.alt.quicker': '{time} 速い',
'roadtrip.alt.otherEngine': '所要時間は主エンジンではなく回避用エンジンでの計算です。',
'roadtrip.day': '{number} 日目',
'roadtrip.quietDay.empty': 'まだ立ち寄り先がありません。ここにドロップ',
'roadtrip.quietDay.one': '今のところ {name} だけです。立ち寄り先をここにドロップ',
+9
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'공개 요금입니다. 세금, 조건, 추가 요금이 적용될 수 있으며 충전 카드 요금은 다를 수 있습니다.',
'roadtrip.charging.coverage': '공개 데이터로 지역과 운영사에 따라 범위가 다릅니다.',
'roadtrip.charging.availability': '이용 가능 여부와 요금',
'roadtrip.import.title': 'Google Maps 경로 가져오기',
'roadtrip.import.note': '경유지를 선택한 날짜에 추가합니다. TREK이 경로를 다시 계산합니다.',
'roadtrip.import.unresolved': '위치를 찾을 수 없어 이 경유지를 건너뜁니다.',
@@ -195,6 +196,13 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '경로에서 {distance}',
'roadtrip.poi.atStart': '출발지 근처',
'roadtrip.poi.alongRoute': '{distance} 지점',
'roadtrip.poi.clearResults': '결과 지우기',
'roadtrip.poi.addManual': '직접 추가',
'roadtrip.poi.manualHint': '장소 검색이 모든 충전소나 주유소를 찾아내지는 못합니다. 이름으로 직접 찾아 주행 중 어디에 들어갈지 지정하세요.',
'roadtrip.poi.addBetween': '사이에 추가',
'roadtrip.poi.manualOffRoute': '경로에서 {distance} 떨어져 있으니 어느 구간에 속하는지 확인하세요.',
'roadtrip.poi.manualAppend': '아직 계산된 경로가 없어 {number}일차 마지막에 추가됩니다.',
'roadtrip.poi.manualNoResults': '장소를 찾지 못했습니다.',
'roadtrip.summary.distance': '거리',
'roadtrip.summary.driving': '운전 시간',
'roadtrip.alt.ask': '다른 경로',
@@ -206,6 +214,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': '가장 빠름',
'roadtrip.alt.slower': '{time} 더 걸림',
'roadtrip.alt.quicker': '{time} 더 빠름',
'roadtrip.alt.otherEngine': '기본 엔진이 아니라 회피 엔진이 계산한 시간입니다.',
'roadtrip.day': '{number}일차',
'roadtrip.quietDay.empty': '아직 경유지가 없습니다. 여기에 놓으세요',
'roadtrip.quietDay.one': '지금은 {name}뿐입니다. 경유지를 여기에 놓으세요',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Gepubliceerd tarief; belastingen, voorwaarden en toeslagen kunnen gelden. Je laadpasprijs kan afwijken.',
'roadtrip.charging.coverage': 'Open data; dekking verschilt per regio en aanbieder.',
'roadtrip.charging.availability': 'Beschikbaarheid en tarieven',
'roadtrip.import.title': 'Google Maps-route importeren',
'roadtrip.import.note': 'Stops worden aan de gekozen dag toegevoegd. TREK berekent de route opnieuw.',
'roadtrip.import.unresolved': 'Locatie niet gevonden; deze stop wordt overgeslagen.',
@@ -199,6 +200,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} van de route',
'roadtrip.poi.atStart': 'bij het startpunt',
'roadtrip.poi.alongRoute': 'na {distance}',
'roadtrip.poi.clearResults': 'Resultaten wissen',
'roadtrip.poi.addManual': 'Handmatig toevoegen',
'roadtrip.poi.manualHint':
'De plaatszoekfunctie vindt niet elk laadpunt of tankstation. Zoek er zelf een op naam en geef aan waar in de rit hij hoort.',
'roadtrip.poi.addBetween': 'Toevoegen tussen',
'roadtrip.poi.manualOffRoute': '{distance} van de route, controleer dus bij welke rit hij hoort.',
'roadtrip.poi.manualAppend': 'Er is nog geen route berekend, dus hij komt aan het einde van dag {number}.',
'roadtrip.poi.manualNoResults': 'Geen plaatsen gevonden.',
'roadtrip.summary.distance': 'Afstand',
'roadtrip.summary.driving': 'Rijtijd',
'roadtrip.alt.ask': 'Andere routes',
@@ -210,6 +219,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Snelste',
'roadtrip.alt.slower': '{time} langzamer',
'roadtrip.alt.quicker': '{time} sneller',
'roadtrip.alt.otherEngine': 'Tijd van de vermijdingsrouter, niet van de hoofdrouter.',
'roadtrip.day': 'Dag {number}',
'roadtrip.quietDay.empty': 'Nog geen stops — laat er hier een vallen',
'roadtrip.quietDay.one': 'Voorlopig alleen {name} — laat hier een stop vallen',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Opublikowana taryfa; możliwe podatki, warunki i dodatkowe opłaty. Cena Twojej karty może się różnić.',
'roadtrip.charging.coverage': 'Otwarte dane; zasięg zależy od regionu i operatora.',
'roadtrip.charging.availability': 'Dostępność i taryfy',
'roadtrip.import.title': 'Importuj trasę z Google Maps',
'roadtrip.import.note': 'Przystanki zostaną dodane do wybranego dnia. TREK przeliczy trasę.',
'roadtrip.import.unresolved': 'Nie znaleziono miejsca; ten przystanek zostanie pominięty.',
@@ -197,6 +198,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} od trasy',
'roadtrip.poi.atStart': 'blisko startu',
'roadtrip.poi.alongRoute': 'po {distance}',
'roadtrip.poi.clearResults': 'Wyczyść wyniki',
'roadtrip.poi.addManual': 'Dodaj ręcznie',
'roadtrip.poi.manualHint':
'Wyszukiwanie miejsc nie znajdzie każdej ładowarki ani stacji paliw. Wyszukaj ją po nazwie i wskaż, gdzie na trasie ma się znaleźć.',
'roadtrip.poi.addBetween': 'Dodaj między',
'roadtrip.poi.manualOffRoute': '{distance} od trasy, więc sprawdź, do którego odcinka należy.',
'roadtrip.poi.manualAppend': 'Nie wyznaczono jeszcze żadnej trasy, więc trafi na koniec dnia {number}.',
'roadtrip.poi.manualNoResults': 'Nie znaleziono miejsc.',
'roadtrip.summary.distance': 'Dystans',
'roadtrip.summary.driving': 'Czas jazdy',
'roadtrip.alt.ask': 'Inne trasy',
@@ -208,6 +217,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Najszybsza',
'roadtrip.alt.slower': '{time} dłużej',
'roadtrip.alt.quicker': '{time} krócej',
'roadtrip.alt.otherEngine': 'Czas policzony silnikiem omijania, nie głównym.',
'roadtrip.day': 'Dzień {number}',
'roadtrip.quietDay.empty': 'Brak przystanków — upuść tutaj',
'roadtrip.quietDay.one': 'Na razie tylko {name} — upuść tutaj przystanek',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Опубликованный тариф; возможны налоги, условия и доплаты. Цена по вашей карте может отличаться.',
'roadtrip.charging.coverage': 'Открытые данные; охват зависит от региона и оператора.',
'roadtrip.charging.availability': 'Доступность и тарифы',
'roadtrip.import.title': 'Импорт маршрута Google Maps',
'roadtrip.import.note': 'Остановки добавляются в выбранный день. TREK пересчитает маршрут.',
'roadtrip.import.unresolved': 'Место не найдено; эта остановка будет пропущена.',
@@ -199,6 +200,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} от маршрута',
'roadtrip.poi.atStart': 'у начала маршрута',
'roadtrip.poi.alongRoute': 'через {distance}',
'roadtrip.poi.clearResults': 'Очистить результаты',
'roadtrip.poi.addManual': 'Добавить вручную',
'roadtrip.poi.manualHint':
'Поиск мест находит не каждую зарядку или заправку. Найдите место по названию и укажите, куда в поездке его поставить.',
'roadtrip.poi.addBetween': 'Добавить между',
'roadtrip.poi.manualOffRoute': '{distance} от маршрута, проверьте, к какому участку оно относится.',
'roadtrip.poi.manualAppend': 'Маршрутов пока нет, поэтому место встанет в конце дня {number}.',
'roadtrip.poi.manualNoResults': 'Места не найдены.',
'roadtrip.summary.distance': 'Расстояние',
'roadtrip.summary.driving': 'Время в пути',
'roadtrip.alt.ask': 'Другие маршруты',
@@ -210,6 +219,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Самый быстрый',
'roadtrip.alt.slower': 'на {time} дольше',
'roadtrip.alt.quicker': 'на {time} быстрее',
'roadtrip.alt.otherEngine': 'Время посчитал маршрутизатор обхода, не основной.',
'roadtrip.day': 'День {number}',
'roadtrip.quietDay.empty': 'Остановок пока нет — перетащите сюда',
'roadtrip.quietDay.one': 'Пока только {name} — перетащите сюда остановку',
+10
View File
@@ -9,6 +9,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.prices': 'Publicerade priser',
'roadtrip.charging.note': 'Publicerat pris; skatter, villkor och tillägg kan gälla. Ditt laddkorts pris kan avvika.',
'roadtrip.charging.coverage': 'Öppna data; täckning varierar efter region och operatör.',
'roadtrip.charging.availability': 'Tillgänglighet och priser',
'roadtrip.import.title': 'Importera Google Maps-rutt',
'roadtrip.import.note': 'Stoppen läggs till på vald dag. TREK beräknar rutten på nytt.',
'roadtrip.import.unresolved': 'Platsen hittades inte; stoppet hoppas över.',
@@ -196,6 +197,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} från rutten',
'roadtrip.poi.atStart': 'nära starten',
'roadtrip.poi.alongRoute': 'efter {distance}',
'roadtrip.poi.clearResults': 'Rensa träffar',
'roadtrip.poi.addManual': 'Lägg till manuellt',
'roadtrip.poi.manualHint':
'Platssökningen hittar inte alla laddare eller bensinstationer. Sök upp en på namn och ange var i körningen den ska ligga.',
'roadtrip.poi.addBetween': 'Lägg till mellan',
'roadtrip.poi.manualOffRoute': '{distance} från rutten, så kontrollera vilken sträcka den hör till.',
'roadtrip.poi.manualAppend': 'Ingen rutt är beräknad än, så den läggs sist på dag {number}.',
'roadtrip.poi.manualNoResults': 'Inga platser hittades.',
'roadtrip.summary.distance': 'Sträcka',
'roadtrip.summary.driving': 'Körtid',
'roadtrip.alt.ask': 'Andra vägar',
@@ -207,6 +216,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Snabbast',
'roadtrip.alt.slower': '{time} långsammare',
'roadtrip.alt.quicker': '{time} snabbare',
'roadtrip.alt.otherEngine': 'Tid från undvikandemotorn, inte huvudmotorn.',
'roadtrip.day': 'Dag {number}',
'roadtrip.quietDay.empty': 'Inga stopp än – släpp ett här',
'roadtrip.quietDay.one': 'Hittills bara {name} – släpp ett stopp här',
+10
View File
@@ -11,6 +11,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Yayımlanan tarife; vergi, koşullar ve ek ücretler uygulanabilir. Şarj kartı fiyatınız farklı olabilir.',
'roadtrip.charging.coverage': 'Açık veri; kapsam bölge ve operatöre göre değişir.',
'roadtrip.charging.availability': 'Müsaitlik ve tarifeler',
'roadtrip.import.title': 'Google Maps rotasını içe aktar',
'roadtrip.import.note': 'Duraklar seçilen güne eklenir. TREK rotayı yeniden hesaplar.',
'roadtrip.import.unresolved': 'Konum bulunamadı; bu durak atlanacak.',
@@ -198,6 +199,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': 'rotadan {distance}',
'roadtrip.poi.atStart': 'başlangıca yakın',
'roadtrip.poi.alongRoute': '{distance} sonra',
'roadtrip.poi.clearResults': 'Sonuçları temizle',
'roadtrip.poi.addManual': 'Elle ekle',
'roadtrip.poi.manualHint':
'Yer araması her şarj noktasını veya benzin istasyonunu bulamaz. Adıyla arayın ve sürüşün neresine gireceğini söyleyin.',
'roadtrip.poi.addBetween': 'Araya ekle',
'roadtrip.poi.manualOffRoute': 'Rotadan {distance}, bu yüzden hangi etaba ait olduğunu kontrol edin.',
'roadtrip.poi.manualAppend': 'Henüz rota hesaplanmadı, bu yüzden {number}. günün sonuna eklenir.',
'roadtrip.poi.manualNoResults': 'Yer bulunamadı.',
'roadtrip.summary.distance': 'Mesafe',
'roadtrip.summary.driving': 'Sürüş süresi',
'roadtrip.alt.ask': 'Başka yollar',
@@ -209,6 +218,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'En hızlı',
'roadtrip.alt.slower': '{time} daha uzun',
'roadtrip.alt.quicker': '{time} daha kısa',
'roadtrip.alt.otherEngine': 'Süre, ana motorla değil kaçınma motoruyla hesaplandı.',
'roadtrip.day': '{number}. gün',
'roadtrip.quietDay.empty': 'Henüz mola yok — buraya bırakın',
'roadtrip.quietDay.one': 'Şimdilik yalnızca {name} — buraya bir mola bırakın',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Опублікований тариф; можливі податки, умови та доплати. Ціна за вашою карткою може відрізнятися.',
'roadtrip.charging.coverage': 'Відкриті дані; охоплення залежить від регіону й оператора.',
'roadtrip.charging.availability': 'Доступність і тарифи',
'roadtrip.import.title': 'Імпорт маршруту Google Maps',
'roadtrip.import.note': 'Зупинки додаються до вибраного дня. TREK перерахує маршрут.',
'roadtrip.import.unresolved': 'Місце не знайдено; цю зупинку буде пропущено.',
@@ -198,6 +199,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '{distance} від маршруту',
'roadtrip.poi.atStart': 'біля початку',
'roadtrip.poi.alongRoute': 'через {distance}',
'roadtrip.poi.clearResults': 'Очистити результати',
'roadtrip.poi.addManual': 'Додати вручну',
'roadtrip.poi.manualHint':
'Пошук місць знаходить не кожну зарядку чи заправку. Знайдіть потрібну за назвою та вкажіть, де в дорозі вона має бути.',
'roadtrip.poi.addBetween': 'Додати між',
'roadtrip.poi.manualOffRoute': '{distance} від маршруту, тож перевірте, до якого відрізка це місце належить.',
'roadtrip.poi.manualAppend': 'Маршруту ще немає, тож це місце потрапить у кінець дня {number}.',
'roadtrip.poi.manualNoResults': 'Місць не знайдено.',
'roadtrip.summary.distance': 'Відстань',
'roadtrip.summary.driving': 'Час у дорозі',
'roadtrip.alt.ask': 'Інші маршрути',
@@ -209,6 +218,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Найшвидший',
'roadtrip.alt.slower': 'на {time} довше',
'roadtrip.alt.quicker': 'на {time} швидше',
'roadtrip.alt.otherEngine': 'Час порахував маршрутизатор обходів, а не основний.',
'roadtrip.day': 'День {number}',
'roadtrip.quietDay.empty': 'Зупинок ще немає — перетягніть сюди',
'roadtrip.quietDay.one': 'Поки лише {name} — перетягніть сюди зупинку',
+10
View File
@@ -10,6 +10,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.note':
'Biểu giá công bố; có thể áp dụng thuế, điều kiện và phụ phí. Giá thẻ sạc của bạn có thể khác.',
'roadtrip.charging.coverage': 'Dữ liệu mở; phạm vi phụ thuộc khu vực và nhà vận hành.',
'roadtrip.charging.availability': 'Tình trạng còn trống và biểu giá',
'roadtrip.import.title': 'Nhập tuyến đường Google Maps',
'roadtrip.import.note': 'Các điểm dừng được thêm vào ngày đã chọn. TREK tính lại tuyến đường.',
'roadtrip.import.unresolved': 'Không tìm thấy vị trí; điểm dừng này sẽ bị bỏ qua.',
@@ -197,6 +198,14 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': 'cách lộ trình {distance}',
'roadtrip.poi.atStart': 'gần điểm xuất phát',
'roadtrip.poi.alongRoute': 'sau {distance}',
'roadtrip.poi.clearResults': 'Xóa kết quả',
'roadtrip.poi.addManual': 'Thêm thủ công',
'roadtrip.poi.manualHint':
'Tìm kiếm địa điểm không tìm ra mọi trạm sạc hay trạm xăng. Hãy tra theo tên và cho biết nó nằm ở đâu trên hành trình.',
'roadtrip.poi.addBetween': 'Thêm vào giữa',
'roadtrip.poi.manualOffRoute': 'Cách lộ trình {distance}, hãy kiểm tra xem nó thuộc chặng nào.',
'roadtrip.poi.manualAppend': 'Chưa có lộ trình nào được tính, nên nó sẽ nằm ở cuối ngày {number}.',
'roadtrip.poi.manualNoResults': 'Không tìm thấy địa điểm nào.',
'roadtrip.summary.distance': 'Quãng đường',
'roadtrip.summary.driving': 'Thời gian lái xe',
'roadtrip.alt.ask': 'Lộ trình khác',
@@ -208,6 +217,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': 'Nhanh nhất',
'roadtrip.alt.slower': 'chậm hơn {time}',
'roadtrip.alt.quicker': 'nhanh hơn {time}',
'roadtrip.alt.otherEngine': 'Giờ do máy chủ định tuyến tránh đường tính, không phải máy chính.',
'roadtrip.day': 'Ngày {number}',
'roadtrip.quietDay.empty': 'Chưa có điểm dừng — thả vào đây',
'roadtrip.quietDay.one': 'Hiện chỉ có {name} — thả một điểm dừng vào đây',
+9
View File
@@ -9,6 +9,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.prices': '公布的費率',
'roadtrip.charging.note': '公布的費率可能附帶稅費、條件和額外費用。您的充電卡價格可能不同。',
'roadtrip.charging.coverage': '開放資料,涵蓋範圍因地區和營運商而異。',
'roadtrip.charging.availability': '可用狀態與費率',
'roadtrip.import.title': '匯入 Google Maps 路線',
'roadtrip.import.note': '停靠點將新增至所選日期。TREK 將重新計算路線。',
'roadtrip.import.unresolved': '找不到位置;將略過此停靠點。',
@@ -186,6 +187,13 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '偏離路線 {distance}',
'roadtrip.poi.atStart': '靠近起點',
'roadtrip.poi.alongRoute': '{distance} 處',
'roadtrip.poi.clearResults': '清除結果',
'roadtrip.poi.addManual': '手動新增',
'roadtrip.poi.manualHint': '地點搜尋不一定能找到每個充電站或加油站。請自行用名稱搜尋,並指定它在行程中的位置。',
'roadtrip.poi.addBetween': '新增於兩站之間',
'roadtrip.poi.manualOffRoute': '偏離路線 {distance},請確認它屬於哪一段。',
'roadtrip.poi.manualAppend': '目前尚無路線,因此會加在第 {number} 天的最後。',
'roadtrip.poi.manualNoResults': '找不到地點。',
'roadtrip.summary.distance': '距離',
'roadtrip.summary.driving': '駕駛時間',
'roadtrip.alt.ask': '其他路線',
@@ -197,6 +205,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': '最快',
'roadtrip.alt.slower': '慢 {time}',
'roadtrip.alt.quicker': '快 {time}',
'roadtrip.alt.otherEngine': '駕駛時間由避開專用的路徑服務計算,無法與其他項比較。',
'roadtrip.day': '第 {number} 天',
'roadtrip.quietDay.empty': '尚無停靠點 — 拖到這裡',
'roadtrip.quietDay.one': '目前只有 {name} — 把停靠點拖到這裡',
+9
View File
@@ -9,6 +9,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.charging.prices': '公布的费率',
'roadtrip.charging.note': '公布的费率可能附带税费、条件和额外费用。您的充电卡价格可能不同。',
'roadtrip.charging.coverage': '开放数据,覆盖范围因地区和运营商而异。',
'roadtrip.charging.availability': '可用状态与费率',
'roadtrip.import.title': '导入 Google Maps 路线',
'roadtrip.import.note': '停靠点将添加到所选日期。TREK 将重新计算路线。',
'roadtrip.import.unresolved': '未找到位置;将跳过此停靠点。',
@@ -186,6 +187,13 @@ const roadtrip: TranslationStrings = {
'roadtrip.poi.offRoute': '偏离路线 {distance}',
'roadtrip.poi.atStart': '靠近起点',
'roadtrip.poi.alongRoute': '{distance} 处',
'roadtrip.poi.clearResults': '清除结果',
'roadtrip.poi.addManual': '手动添加',
'roadtrip.poi.manualHint': '地点搜索不会找到所有充电站或加油站。按名称自行搜索,并指定它在行程中的位置。',
'roadtrip.poi.addBetween': '添加到两站之间',
'roadtrip.poi.manualOffRoute': '偏离路线 {distance},请确认它属于哪个路段。',
'roadtrip.poi.manualAppend': '还没有路线,因此它将添加到第 {number} 天的末尾。',
'roadtrip.poi.manualNoResults': '未找到地点。',
'roadtrip.summary.distance': '距离',
'roadtrip.summary.driving': '驾驶时间',
'roadtrip.alt.ask': '其他路线',
@@ -197,6 +205,7 @@ const roadtrip: TranslationStrings = {
'roadtrip.alt.fastest': '最快',
'roadtrip.alt.slower': '慢 {time}',
'roadtrip.alt.quicker': '快 {time}',
'roadtrip.alt.otherEngine': '用时由避开引擎计算,而非主引擎。',
'roadtrip.day': '第 {number} 天',
'roadtrip.quietDay.empty': '暂无停靠点 — 拖到这里',
'roadtrip.quietDay.one': '目前只有 {name} — 把停靠点拖到这里',
@@ -0,0 +1,24 @@
import { chargingLookupSchema } from './charging.schema';
import { describe, expect, it } from 'vitest';
describe('Charging station lookup by coordinate', () => {
const request = { lat: 48.137, lng: 11.575, name: 'Ladepark Nord' };
it('accepts a bounded coordinate and a nameless station', () => {
expect(chargingLookupSchema.safeParse(request).success).toBe(true);
// OSM charging nodes are regularly untagged; the matcher has its own answer for
// that case, so an empty name must reach it rather than being refused here.
expect(chargingLookupSchema.safeParse({ ...request, name: '' }).success).toBe(true);
});
it('refuses coordinates off the globe and an unbounded name', () => {
expect(chargingLookupSchema.safeParse({ ...request, lat: 91 }).success).toBe(false);
expect(chargingLookupSchema.safeParse({ ...request, lng: -181 }).success).toBe(false);
expect(chargingLookupSchema.safeParse({ ...request, lat: Number.NaN }).success).toBe(false);
expect(chargingLookupSchema.safeParse({ ...request, name: 'x'.repeat(201) }).success).toBe(false);
});
it('has no batch form: the array a caller might send is not a station', () => {
// The cache key upstream is one station, and a cache miss costs several requests
// against a shared public registry. Anything list-shaped is refused outright.
expect(chargingLookupSchema.safeParse([request]).success).toBe(false);
});
});
+25
View File
@@ -30,3 +30,28 @@ export const chargingInfoSchema = z.object({
pricesUnavailable: z.boolean(),
});
export type ChargingInfo = z.infer<typeof chargingInfoSchema>;
/**
* A charging station addressed by where it is, rather than by a row in `places`.
*
* The saved-stop route answers for a place id, which a hit found along the route does
* not have yet, and "is anything free here, and what does it cost" is the question
* people want answered before adding the charger, not after. The match needs nothing
* more than this: a coordinate, and whatever the search called the place.
*
* One station per request, deliberately. A cache miss costs the upstream registry
* several requests, nothing rate-limits the route, and the caches on both sides of it
* are sized for the handful of stops a trip has. A batch would turn one click into a
* burst against shared public infrastructure.
*/
export const chargingLookupSchema = z.object({
lat: z.number().min(-90).max(90),
lng: z.number().min(-180).max(180),
/**
* An empty name is allowed. OSM charging nodes are frequently nameless, and the
* matcher already treats "nothing to go on" as its own case: it then insists the
* station be within 30 m instead of accepting the nearest one inside 100 m.
*/
name: z.string().max(200),
});
export type ChargingLookup = z.infer<typeof chargingLookupSchema>;