Files
TREK/shared/src/i18n/pl/places.ts
T
Maurice 3e9626fce9 feat(places): enrich list-imported places via the Places API (#886) (#1161)
* feat(places): enrich list-imported places via the Places API (#886)

Google/Naver list imports only carry a name and coordinates, so the places open
as bare pins — the Maps tab jumps to coordinates, with no photo, address or
open/closed. Add an opt-in "Enrich places via Google" toggle to the list-import
dialog, shown only when a Google Maps key is configured.

When enabled, after the (fast, unchanged) import the server runs a background
pass that re-resolves each place by name — biased to and validated against the
imported coordinates so a common-name search cannot overwrite the wrong place —
and fills the empty address/website/phone/photo columns plus the resolved
google_place_id, pushing each row over the live sync. Opening hours and the
proper Maps link then work on demand from the stored id.

Enrichment only fills empty fields, runs detached so a long list never blocks
the import, and no-ops when no key is configured.

* fix(places): use the ToggleSwitch component for the enrich toggle

Match the rest of the app — the import-enrichment opt-in used a raw checkbox;
swap it for the shared ToggleSwitch (text left, switch right) like the settings
toggles.
2026-06-14 00:54:11 +02:00

98 lines
4.9 KiB
TypeScript

import type { TranslationStrings } from '../types';
const places: TranslationStrings = {
'places.addPlace': 'Dodaj miejsce/atrakcję',
'places.importFile': 'Importuj plik',
'places.sidebarDrop': 'Upuść, aby zaimportować',
'places.importFileHint':
'Importuj pliki .gpx, .kml lub .kmz z narzędzi takich jak Google My Maps, Google Earth lub tracker GPS.',
'places.importFileDropHere':
'Kliknij, aby wybrać plik lub przeciągnij i upuść tutaj',
'places.importFileDropActive': 'Upuść plik, aby go wybrać',
'places.importFileUnsupported':
'Nieobsługiwany typ pliku. Użyj .gpx, .kml lub .kmz.',
'places.importFileTooLarge':
'Plik jest za duży. Maksymalny rozmiar przesyłania to {maxMb} MB.',
'places.importFileError': 'Import nie powiódł się',
'places.importAllSkipped': 'Wszystkie miejsca były już w podróży.',
'places.gpxImported': '{count} miejsc zaimportowanych z GPX',
'places.gpxImportTypes': 'Co chcesz zaimportować?',
'places.gpxImportWaypoints': 'Punkty trasy',
'places.gpxImportRoutes': 'Trasy',
'places.gpxImportTracks': 'Trasy GPS (ze śladem)',
'places.gpxImportNoneSelected': 'Wybierz co najmniej jeden typ do importu.',
'places.kmlImportTypes': 'Co chcesz zaimportować?',
'places.kmlImportPoints': 'Punkty (Placemarks)',
'places.kmlImportPaths': 'Ścieżki (LineStrings)',
'places.kmlImportNoneSelected': 'Wybierz co najmniej jeden typ.',
'places.selectionCount': '{count} zaznaczono',
'places.deleteSelected': 'Usuń wybrane',
'places.kmlKmzImported': 'Zaimportowano {count} miejsc z KMZ/KML',
'places.urlResolved': 'Miejsce zaimportowane z URL',
'places.kmlKmzSummaryValues':
'Placemarks: {total} • Zaimportowano: {created} • Pominięto: {skipped}',
'places.importGoogleList': 'Lista Google',
'places.assignToDay': 'Do którego dnia dodać?',
'places.all': 'Wszystkie',
'places.unplanned': 'Niezaplanowane',
'places.filterTracks': 'Trasy',
'places.search': 'Szukaj miejsc...',
'places.allCategories': 'Wszystkie kategorie',
'places.categoriesSelected': 'kategorii',
'places.clearFilter': 'Wyczyść filtr',
'places.count': '{count} miejsc',
'places.countSingular': '1 miejsce',
'places.allPlanned': 'Wszystkie miejsca są zaplanowane',
'places.noneFound': 'Nie znaleziono miejsc',
'places.editPlace': 'Edytuj miejsce',
'places.formName': 'Nazwa',
'places.formNamePlaceholder': 'np. Wieża Eiffla',
'places.formDescription': 'Opis',
'places.formDescriptionPlaceholder': 'Krótki opis...',
'places.formAddress': 'Adres',
'places.formAddressPlaceholder': 'Ulica, miasto, kraj',
'places.formLat': 'Szerokość (np. 48.8566)',
'places.formLng': 'Długość (np. 2.3522)',
'places.formCategory': 'Kategoria',
'places.noCategory': 'Brak kategorii',
'places.categoryNamePlaceholder': 'Nazwa kategorii',
'places.formTime': 'Godzina',
'places.startTime': 'Początek',
'places.endTime': 'Koniec',
'places.endTimeBeforeStart':
'Godzina zakończenia jest przed godziną rozpoczęcia',
'places.timeCollision': 'Nakładanie się godzin z:',
'places.formWebsite': 'Strona internetowa',
'places.formNotes': 'Notatki',
'places.formNotesPlaceholder': 'Osobiste notatki...',
'places.formReservation': 'Rezerwacja',
'places.reservationNotesPlaceholder':
'Notatki z rezerwacji, numer potwierdzenia...',
'places.mapsSearchPlaceholder': 'Szukaj miejsc...',
'places.mapsSearchError': 'Nie udało się wyszukać miejsca.',
'places.loadingDetails': 'Ładowanie szczegółów miejsca…',
'places.osmHint':
'Korzystając z OpenStreetMap (brak zdjęć, godzin otwarcia czy ocen). Dodaj klucz API Google w ustawieniach aby uzyskać pełne dane.',
'places.osmActive':
'Szukaj przez OpenStreetMap (brak zdjęć, ocen czy godzin otwarcia). Dodaj klucz API Google w ustawieniach aby uzyskać pełne dane.',
'places.categoryCreateError': 'Nie udało się utworzyć kategorii',
'places.nameRequired': 'Proszę podać nazwę',
'places.saveError': 'Nie udało się zapisać',
'places.duplicateExists': "'{name}' jest już w tej podróży.",
'places.addAnyway': 'Dodaj mimo to',
'places.importNaverList': 'Lista Naver',
'places.importList': 'Import listy',
'places.googleListHint': 'Wklej link do listy Google Maps.',
'places.googleListImported': 'Zaimportowano {count} miejsc',
'places.googleListError': 'Nie udało się zaimportować listy',
'places.naverListHint':
'Wklej link do udostępnionej listy Naver Maps, aby zaimportować wszystkie miejsca.',
'places.naverListImported': 'Zaimportowano {count} miejsc z "{list}"',
'places.naverListError': 'Nie udało się zaimportować listy Naver Maps',
'places.viewDetails': 'Zobacz szczegóły',
'places.enrichOnImport': 'Wzbogać miejsca przez Google',
'places.enrichOnImportHint':
'Wyszukuje każde zaimportowane miejsce, aby dodać zdjęcia, adres i dane kontaktowe. Wymaga klucza Google Maps.',
};
export default places;