mirror of
https://github.com/FoggedLens/deflock-app.git
synced 2026-03-21 18:33:51 +00:00
- Add ServicePolicy framework with OSM-specific rate limiting and TTL - Add per-provider disk tile cache (ProviderTileCacheStore) with O(1) lookup, oldest-modified eviction, and ETag/304 revalidation - Rewrite DeflockTileProvider with two paths: common (NetworkTileProvider) and offline-first (disk cache -> local tiles -> network with caching) - Add zoom-aware offline routing so tiles outside offline area zoom ranges use the efficient common path instead of the overhead-heavy offline path - Fix HTTP client lifecycle: dispose() is now a no-op for flutter_map widget recycling; shutdown() handles permanent teardown - Add TileLayerManager with exponential backoff retry (2s->60s cap), provider switch detection, and backoff reset - Guard null provider/tileType in download dialog with localized error - Fix Nominatim cache key to use normalized viewbox values - Comprehensive test coverage (1800+ lines across 6 test files) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
562 lines
30 KiB
JSON
562 lines
30 KiB
JSON
{
|
||
"language": {
|
||
"name": "Polski"
|
||
},
|
||
"app": {
|
||
"title": "DeFlock"
|
||
},
|
||
"about": {
|
||
"title": "DeFlock - Przejrzystość Nadzoru",
|
||
"description": "DeFlock to mobilna aplikacja skoncentrowana na prywatności do mapowania publicznej infrastruktury nadzoru przy użyciu OpenStreetMap. Dokumentuj kamery, ALPR, detektory wystrzałów i inne urządzenia nadzoru w swojej społeczności, aby uczynić tę infrastrukturę widoczną i możliwą do przeszukiwania.",
|
||
"features": "• Mapowanie offline z obszarami do pobrania\n• Przesyłanie bezpośrednio do OpenStreetMap z OAuth2\n• Wbudowane profile dla głównych producentów\n• Szanujące prywatność - nie zbierane są dane użytkownika\n• Wielu dostawców kafelków map (OSM, zdjęcia satelitarne)",
|
||
"initiative": "Część szerszej inicjatywy DeFlock promującej przejrzystość nadzoru.",
|
||
"footer": "Odwiedź: deflock.me\nZbudowane z Flutter • Open Source",
|
||
"showWelcome": "Pokaż Wiadomość Powitalną",
|
||
"showSubmissionGuide": "Pokaż Przewodnik Zgłaszania",
|
||
"viewReleaseNotes": "Zobacz Notatki Wydania"
|
||
},
|
||
"welcome": {
|
||
"title": "Witamy w DeFlock",
|
||
"description": "DeFlock został założony na idei, że narzędzia publicznego nadzoru powinny być przejrzyste. W tej aplikacji mobilnej, jak i na stronie internetowej, będziesz mógł przeglądać lokalizacje ALPR i innych infrastruktur nadzoru w Twoim lokalnym obszarze i za granicą.",
|
||
"mission": "Jednak ten projekt nie jest zautomatyzowany; potrzeba nas wszystkich, aby ten projekt uczynić lepszym. Podczas przeglądania mapy możesz stuknąć \"Nowy Węzeł\", aby dodać wcześniej nieznaną instalację. Z Twoją pomocą możemy osiągnąć nasz cel zwiększonej przejrzystości i publicznej świadomości infrastruktury nadzoru.",
|
||
"firsthandKnowledge": "WAŻNE: Dodawaj tylko urządzenia nadzoru, które osobiście obserwowałeś z pierwszej ręki. Polityki OpenStreetMap i Google zabraniają używania źródeł takich jak zdjęcia Street View do zgłoszeń. Twoje wkłady powinny być oparte na Twoich własnych bezpośrednich obserwacjach.",
|
||
"privacy": "Uwaga o Prywatności: Ta aplikacja działa całkowicie lokalnie na Twoim urządzeniu i używa zewnętrznego API OpenStreetMap do przechowywania danych i zgłoszeń. DeFlock nie zbiera ani nie przechowuje żadnych danych użytkownika jakiegokolwiek rodzaju i nie jest odpowiedzialny za zarządzanie kontami.",
|
||
"tileNote": "UWAGA: Darmowe kafelki map z OpenStreetMap mogą ładować się bardzo wolno. Alternatywni dostawcy kafelków mogą być skonfigurowani w Ustawieniach > Zaawansowane.",
|
||
"moreInfo": "Więcej linków znajdziesz w Ustawieniach > O aplikacji.",
|
||
"dontShowAgain": "Nie pokazuj ponownie tej wiadomości powitalnej",
|
||
"getStarted": "Zacznijmy DeFlocking!"
|
||
},
|
||
"submissionGuide": {
|
||
"title": "Najlepsze Praktyki Zgłaszania",
|
||
"description": "Przed zgłoszeniem Twojego pierwszego urządzenia nadzoru, poświęć chwilę na przejrzenie tych ważnych wytycznych, aby zapewnić wysokiej jakości wkłady do OpenStreetMap.",
|
||
"bestPractices": "• Mapuj tylko urządzenia, które osobiście obserwowałeś z pierwszej ręki\n• Poświęć czas na dokładną identyfikację typu urządzenia i producenta\n• Używaj precyzyjnego pozycjonowania - przybliż przed umieszczeniem znacznika\n• Dołączaj informacje o kierunku, gdy ma to zastosowanie\n• Sprawdź dwukrotnie swoje wybory tagów przed zgłoszeniem",
|
||
"placementNote": "Pamiętaj: Dokładne dane z pierwszej ręki są kluczowe dla społeczności DeFlock i projektu OpenStreetMap.",
|
||
"moreInfo": "Dla szczegółowego przewodnika po identyfikacji urządzeń i najlepszych praktykach mapowania:",
|
||
"identificationGuide": "Przewodnik Identyfikacji",
|
||
"osmWiki": "OpenStreetMap Wiki",
|
||
"dontShowAgain": "Nie pokazuj ponownie tego przewodnika",
|
||
"gotIt": "Rozumiem!"
|
||
},
|
||
"positioningTutorial": {
|
||
"title": "Doprecyzuj Swoją Lokalizację",
|
||
"instructions": "Przeciągnij mapę, aby precyzyjnie ustawić znacznik urządzenia nad lokalizacją urządzenia nadzoru.",
|
||
"hint": "Możesz przybliżyć dla lepszej dokładności przed pozycjonowaniem."
|
||
},
|
||
"actions": {
|
||
"tagNode": "Nowy Węzeł",
|
||
"download": "Pobierz",
|
||
"settings": "Ustawienia",
|
||
"edit": "Edytuj",
|
||
"delete": "Usuń",
|
||
"cancel": "Anuluj",
|
||
"ok": "OK",
|
||
"close": "Zamknij",
|
||
"submit": "Zgłoś",
|
||
"logIn": "Zaloguj",
|
||
"saveEdit": "Zapisz Edycję",
|
||
"clear": "Wyczyść",
|
||
"viewOnOSM": "Zobacz w OSM",
|
||
"advanced": "Zaawansowane",
|
||
"useAdvancedEditor": "Użyj Zaawansowanego Edytora"
|
||
},
|
||
"proximityWarning": {
|
||
"title": "Węzeł Bardzo Blisko Istniejącego Urządzenia",
|
||
"message": "Ten węzeł jest tylko {} metrów od istniejącego urządzenia nadzoru.",
|
||
"suggestion": "Jeśli wiele urządzeń znajduje się na tym samym słupie, użyj wielu kierunków na jednym węźle zamiast tworzenia oddzielnych węzłów.",
|
||
"nearbyNodes": "Znaleziono pobliskie urządzenie/urządzenia ({}):",
|
||
"nodeInfo": "Węzeł #{} - {}",
|
||
"andMore": "...i {} więcej",
|
||
"goBack": "Wróć",
|
||
"submitAnyway": "Zgłoś Mimo To",
|
||
"nodeType": {
|
||
"alpr": "Kamera ALPR/ANPR",
|
||
"publicCamera": "Kamera Nadzoru Publicznego",
|
||
"camera": "Kamera Nadzoru",
|
||
"amenity": "{}",
|
||
"device": "Urządzenie {}",
|
||
"unknown": "Nieznane Urządzenie"
|
||
}
|
||
},
|
||
"followMe": {
|
||
"off": "Włącz śledzenie",
|
||
"follow": "Włącz śledzenie (obracające)",
|
||
"rotating": "Wyłącz śledzenie"
|
||
},
|
||
"settings": {
|
||
"title": "Ustawienia",
|
||
"language": "Język i Region",
|
||
"systemDefault": "Domyślne Systemowe",
|
||
"aboutInfo": "O / Informacje",
|
||
"aboutThisApp": "O Tej Aplikacji",
|
||
"aboutSubtitle": "Informacje o aplikacji i autorzy",
|
||
"languageSubtitle": "Wybierz preferowany język i jednostki",
|
||
"distanceUnit": "Jednostki Odległości",
|
||
"distanceUnitSubtitle": "Wybierz między jednostkami metrycznymi (km/m) lub imperialnymi (mila/stopa)",
|
||
"metricUnits": "Metryczne (km, m)",
|
||
"imperialUnits": "Imperialne (mila, stopa)",
|
||
"maxNodes": "Maksymalna liczba rysowanych węzłów",
|
||
"maxNodesSubtitle": "Ustaw górny limit liczby węzłów na mapie.",
|
||
"maxNodesWarning": "Prawdopodobnie nie chcesz tego robić, chyba że jesteś absolutnie pewien, że masz dobry powód.",
|
||
"offlineMode": "Tryb Offline",
|
||
"offlineModeSubtitle": "Wyłącz wszystkie żądania sieciowe z wyjątkiem lokalnych/offline obszarów.",
|
||
"pauseQueueProcessing": "Wstrzymaj Przetwarzanie Kolejki Przesyłania",
|
||
"pauseQueueProcessingSubtitle": "Zatrzymaj przesyłanie kolejkowanych zmian zachowując dostęp do danych na żywo.",
|
||
"offlineModeWarningTitle": "Aktywne Pobierania",
|
||
"offlineModeWarningMessage": "Włączenie trybu offline anuluje wszystkie aktywne pobierania obszarów. Czy chcesz kontynuować?",
|
||
"enableOfflineMode": "Włącz Tryb Offline",
|
||
"profiles": "Profile",
|
||
"profilesSubtitle": "Zarządzaj profilami węzłów i operatorów",
|
||
"offlineSettings": "Ustawienia Offline",
|
||
"offlineSettingsSubtitle": "Zarządzaj trybem offline i pobranymi obszarami",
|
||
"advancedSettings": "Ustawienia Zaawansowane",
|
||
"advancedSettingsSubtitle": "Wydajność, alerty i ustawienia dostawców kafelków",
|
||
"proximityAlerts": "Alerty Bliskości",
|
||
"networkStatusIndicator": "Wskaźnik Stanu Sieci"
|
||
},
|
||
"proximityAlerts": {
|
||
"getNotified": "Otrzymuj powiadomienia przy zbliżaniu się do urządzeń nadzoru",
|
||
"batteryUsage": "Używa dodatkowej baterii do ciągłego monitorowania lokalizacji",
|
||
"notificationsEnabled": "✓ Powiadomienia włączone",
|
||
"notificationsDisabled": "⚠ Powiadomienia wyłączone",
|
||
"permissionRequired": "Wymagane uprawnienie do powiadomień",
|
||
"permissionExplanation": "Powiadomienia push są wyłączone. Będziesz widzieć tylko alerty w aplikacji i nie będziesz powiadamiany, gdy aplikacja jest w tle.",
|
||
"enableNotifications": "Włącz Powiadomienia",
|
||
"checkingPermissions": "Sprawdzanie uprawnień...",
|
||
"alertDistance": "Odległość alertu: ",
|
||
"rangeInfo": "Zakres: {}-{} {} (domyślnie: {})"
|
||
},
|
||
"node": {
|
||
"title": "Węzeł #{}",
|
||
"tagSheetTitle": "Tagi Urządzenia Nadzoru",
|
||
"queuedForUpload": "Węzeł umieszczony w kolejce do przesłania",
|
||
"editQueuedForUpload": "Edycja węzła umieszczona w kolejce do przesłania",
|
||
"deleteQueuedForUpload": "Usuwanie węzła umieszczone w kolejce do przesłania",
|
||
"confirmDeleteTitle": "Usuń Węzeł",
|
||
"confirmDeleteMessage": "Czy na pewno chcesz usunąć węzeł #{}? Tej akcji nie można cofnąć."
|
||
},
|
||
"addNode": {
|
||
"profile": "Profil",
|
||
"selectProfile": "Wybierz profil...",
|
||
"profileRequired": "Proszę wybrać profil, aby kontynuować.",
|
||
"direction": "Kierunek {}°",
|
||
"profileNoDirectionInfo": "Ten profil nie wymaga kierunku.",
|
||
"mustBeLoggedIn": "Musisz być zalogowany, aby zgłaszać nowe węzły. Zaloguj się przez Ustawienia.",
|
||
"enableSubmittableProfile": "Włącz profil możliwy do zgłoszenia w Ustawieniach, aby zgłaszać nowe węzły.",
|
||
"profileViewOnlyWarning": "Ten profil służy tylko do przeglądania mapy. Proszę wybrać profil możliwy do zgłoszenia, aby zgłaszać nowe węzły.",
|
||
"loadingAreaData": "Ładowanie danych obszaru... Poczekaj przed zgłoszeniem.",
|
||
"refineTags": "Doprecyzuj Tagi"
|
||
},
|
||
"editNode": {
|
||
"title": "Edytuj Węzeł #{}",
|
||
"profile": "Profil",
|
||
"selectProfile": "Wybierz profil...",
|
||
"profileRequired": "Proszę wybrać profil, aby kontynuować.",
|
||
"direction": "Kierunek {}°",
|
||
"profileNoDirectionInfo": "Ten profil nie wymaga kierunku.",
|
||
"temporarilyDisabled": "Edycje zostały tymczasowo wyłączone, gdy rozwiązujemy błąd - przepraszamy - sprawdź wkrótce.",
|
||
"mustBeLoggedIn": "Musisz być zalogowany, aby edytować węzły. Zaloguj się przez Ustawienia.",
|
||
"sandboxModeWarning": "Nie można przesyłać edycji węzłów produkcyjnych do piaskownicy. Przełącz na tryb Produkcyjny w Ustawieniach, aby edytować węzły.",
|
||
"enableSubmittableProfile": "Włącz profil możliwy do zgłoszenia w Ustawieniach, aby edytować węzły.",
|
||
"profileViewOnlyWarning": "Ten profil służy tylko do przeglądania mapy. Proszę wybrać profil możliwy do zgłoszenia, aby edytować węzły.",
|
||
"loadingAreaData": "Ładowanie danych obszaru... Poczekaj przed zgłoszeniem.",
|
||
"cannotMoveConstrainedNode": "Nie można przenieść tej kamery - jest połączona z innym elementem mapy (droga/relacja OSM). Nadal możesz edytować jej tagi i kierunek.",
|
||
"zoomInRequiredMessage": "Przybliż do co najmniej poziomu {}, aby dodawać lub edytować węzły nadzoru. Zapewnia to precyzyjne pozycjonowanie dla dokładnego mapowania.",
|
||
"extractFromWay": "Wyciągnij węzeł z drogi/relacji",
|
||
"extractFromWaySubtitle": "Utwórz nowy węzeł z tymi samymi tagami, pozwalając na przeniesienie do nowej lokalizacji",
|
||
"refineTags": "Doprecyzuj Tagi",
|
||
"existingTags": "<Istniejące tagi>",
|
||
"noChangesDetected": "Nie wykryto zmian - nie ma nic do zgłoszenia",
|
||
"noChangesTitle": "Brak Zmian do Zgłoszenia",
|
||
"noChangesMessage": "Nie wprowadziłeś żadnych zmian do tego węzła. Aby zgłosić edycję, musisz zmienić lokalizację, profil, kierunki lub tagi."
|
||
},
|
||
"download": {
|
||
"title": "Pobierz Obszar Mapy",
|
||
"maxZoomLevel": "Maksymalny poziom przybliżenia",
|
||
"storageEstimate": "Oszacowanie pamięci:",
|
||
"tilesAndSize": "{} kafelków, {} MB",
|
||
"minZoom": "Min przybliżenie:",
|
||
"maxRecommendedZoom": "Maksymalne zalecane przybliżenie: Z{}",
|
||
"withinTileLimit": "W granicach {} limitu kafelków",
|
||
"exceedsTileLimit": "Obecny wybór przekracza {} limit kafelków",
|
||
"offlineModeWarning": "Pobieranie wyłączone w trybie offline. Wyłącz tryb offline, aby pobierać nowe obszary.",
|
||
"areaTooBigMessage": "Przybliż do co najmniej poziomu {}, aby pobierać obszary offline. Duże pobieranie obszarów może sprawić, że aplikacja przestanie odpowiadać.",
|
||
"downloadStarted": "Pobieranie rozpoczęte! Pobieranie kafelków i węzłów...",
|
||
"downloadFailed": "Nie udało się rozpocząć pobierania: {}",
|
||
"offlineNotPermitted": "Serwer {} nie zezwala na pobieranie offline. Przełącz się na dostawcę kafelków, który obsługuje tryb offline (np. Bing Maps, Mapbox lub samodzielnie hostowany serwer kafelków).",
|
||
"currentTileProvider": "bieżący kafelek",
|
||
"noTileProviderSelected": "Nie wybrano dostawcy kafelków. Wybierz styl mapy przed pobraniem obszaru offline."
|
||
},
|
||
"downloadStarted": {
|
||
"title": "Pobieranie Rozpoczęte",
|
||
"message": "Pobieranie rozpoczęte! Pobieranie kafelków i węzłów...",
|
||
"ok": "OK",
|
||
"viewProgress": "Zobacz Postęp w Ustawieniach"
|
||
},
|
||
"uploadMode": {
|
||
"title": "Miejsce Docelowe Przesyłania",
|
||
"subtitle": "Wybierz gdzie przesyłane są kamery",
|
||
"production": "Produkcja",
|
||
"sandbox": "Piaskownica",
|
||
"simulate": "Symulacja",
|
||
"productionDescription": "Prześlij do aktywnej bazy danych OSM (widoczne dla wszystkich użytkowników)",
|
||
"sandboxDescription": "Przesłania trafiają do Piaskownicy OSM (bezpieczne do testowania, regularne resetowanie).",
|
||
"simulateDescription": "Symuluj przesyłanie (nie kontaktuje się z serwerami OSM)",
|
||
"cannotChangeWithQueue": "Nie można zmienić miejsca docelowego przesyłania, gdy {} elementów jest w kolejce. Najpierw wyczyść kolejkę."
|
||
},
|
||
"auth": {
|
||
"osmAccountTitle": "Konto OpenStreetMap",
|
||
"osmAccountSubtitle": "Zarządzaj logowaniem OSM i przeglądaj swoje wkłady",
|
||
"loggedInAs": "Zalogowany jako {}",
|
||
"loginToOSM": "Zaloguj się do OpenStreetMap",
|
||
"tapToLogout": "Stuknij aby się wylogować",
|
||
"requiredToSubmit": "Wymagane do zgłaszania danych kamer",
|
||
"loggedOut": "Wylogowany",
|
||
"testConnection": "Testuj Połączenie",
|
||
"testConnectionSubtitle": "Sprawdź czy dane logowania OSM działają",
|
||
"connectionOK": "Połączenie OK - dane logowania są ważne",
|
||
"connectionFailed": "Połączenie nie powiodło się - zaloguj się ponownie",
|
||
"viewMyEdits": "Zobacz Moje Edycje w OSM",
|
||
"viewMyEditsSubtitle": "Zobacz swoją historię edycji w OpenStreetMap",
|
||
"aboutOSM": "O OpenStreetMap",
|
||
"aboutOSMDescription": "OpenStreetMap to współpracujący projekt mapowania open-source, gdzie współtwórcy tworzą i utrzymują darmową, edytowalną mapę świata. Twoje wkłady urządzeń nadzoru pomagają uczynić tę infrastrukturę widoczną i możliwą do przeszukiwania.",
|
||
"visitOSM": "Odwiedź OpenStreetMap",
|
||
"deleteAccount": "Usuń Konto OSM",
|
||
"deleteAccountSubtitle": "Zarządzaj swoim kontem OpenStreetMap",
|
||
"deleteAccountExplanation": "Aby usunąć swoje konto OpenStreetMap, musisz odwiedzić stronę OpenStreetMap. To trwale usunie twoje konto OSM i wszystkie powiązane dane.",
|
||
"deleteAccountWarning": "Ostrzeżenie: Ta akcja nie może być cofnięta i trwale usunie twoje konto OSM.",
|
||
"goToOSM": "Przejdź do OpenStreetMap",
|
||
"accountManagement": "Zarządzanie Kontem",
|
||
"accountManagementDescription": "Aby usunąć swoje konto OpenStreetMap, musisz odwiedzić odpowiednią stronę OpenStreetMap. To trwale usunie twoje konto i wszystkie powiązane dane.",
|
||
"currentDestinationProduction": "Obecnie połączony z: Produkcyjny OpenStreetMap",
|
||
"currentDestinationSandbox": "Obecnie połączony z: Sandbox OpenStreetMap",
|
||
"currentDestinationSimulate": "Obecnie w: Trybie symulacji (brak rzeczywistego konta)",
|
||
"viewMessages": "Zobacz Wiadomości w OSM",
|
||
"unreadMessagesCount": "Masz {} nieprzeczytanych wiadomości",
|
||
"noUnreadMessages": "Brak nieprzeczytanych wiadomości",
|
||
"reauthRequired": "Odśwież Uwierzytelnienie",
|
||
"reauthExplanation": "Musisz odświeżyć uwierzytelnienie, aby otrzymywać powiadomienia o wiadomościach OSM przez aplikację.",
|
||
"reauthBenefit": "To włączy kropki powiadomień, gdy masz nieprzeczytane wiadomości w OpenStreetMap.",
|
||
"reauthNow": "Zrób To Teraz",
|
||
"reauthLater": "Później"
|
||
},
|
||
"queue": {
|
||
"title": "Kolejka Przesyłania",
|
||
"subtitle": "Zarządzaj oczekującymi przesłaniami urządzeń nadzoru",
|
||
"pendingUploads": "Oczekujące przesłania: {}",
|
||
"pendingItemsCount": "Oczekujące Elementy: {}",
|
||
"nothingInQueue": "Nic w kolejce",
|
||
"simulateModeEnabled": "Tryb symulacji włączony – przesłania symulowane",
|
||
"sandboxMode": "Tryb piaskownicy – przesłania idą do OSM Sandbox",
|
||
"tapToViewQueue": "Stuknij aby zobaczyć kolejkę",
|
||
"clearUploadQueue": "Wyczyść Kolejkę Przesyłania",
|
||
"removeAllPending": "Usuń wszystkie {} oczekujące przesłania",
|
||
"clearQueueTitle": "Wyczyść Kolejkę",
|
||
"clearQueueConfirm": "Usunąć wszystkie {} oczekujące przesłania?",
|
||
"queueCleared": "Kolejka wyczyszczona",
|
||
"uploadQueueTitle": "Kolejka Przesyłania ({} elementów)",
|
||
"queueIsEmpty": "Kolejka jest pusta",
|
||
"itemWithIndex": "Element {}",
|
||
"error": " (Błąd)",
|
||
"completing": " (Kończenie...)",
|
||
"destination": "Cel: {}",
|
||
"latitude": "Szerokość: {}",
|
||
"longitude": "Długość: {}",
|
||
"direction": "Kierunek: {}°",
|
||
"attempts": "Próby: {}",
|
||
"uploadFailedRetry": "Przesyłanie nie powiodło się. Stuknij ponownie aby spróbować ponownie.",
|
||
"retryUpload": "Spróbuj ponownie przesłać",
|
||
"clearAll": "Wyczyść Wszystko",
|
||
"errorDetails": "Szczegóły Błędu",
|
||
"creatingChangeset": " (Tworzenie zestawu zmian...)",
|
||
"uploading": " (Przesyłanie...)",
|
||
"closingChangeset": " (Zamykanie zestawu zmian...)",
|
||
"processingPaused": "Przetwarzanie Kolejki Wstrzymane",
|
||
"pausedDueToOffline": "Przetwarzanie przesyłania jest wstrzymane, ponieważ tryb offline jest włączony.",
|
||
"pausedByUser": "Przetwarzanie przesyłania jest ręcznie wstrzymane."
|
||
},
|
||
"tileProviders": {
|
||
"title": "Dostawcy Kafelków",
|
||
"noProvidersConfigured": "Brak skonfigurowanych dostawców kafelków",
|
||
"tileTypesCount": "{} typów kafelków",
|
||
"apiKeyConfigured": "Klucz API skonfigurowany",
|
||
"needsApiKey": "Potrzebuje klucz API",
|
||
"editProvider": "Edytuj Dostawcę",
|
||
"addProvider": "Dodaj Dostawcę",
|
||
"deleteProvider": "Usuń Dostawcę",
|
||
"deleteProviderConfirm": "Czy na pewno chcesz usunąć \"{}\"?",
|
||
"providerName": "Nazwa Dostawcy",
|
||
"providerNameHint": "np., Niestandardowe Mapy Sp. z o.o.",
|
||
"providerNameRequired": "Nazwa dostawcy jest wymagana",
|
||
"apiKey": "Klucz API (Opcjonalnie)",
|
||
"apiKeyHint": "Wprowadź klucz API jeśli wymagany przez typy kafelków",
|
||
"tileTypes": "Typy Kafelków",
|
||
"addType": "Dodaj Typ",
|
||
"noTileTypesConfigured": "Brak skonfigurowanych typów kafelków",
|
||
"atLeastOneTileTypeRequired": "Przynajmniej jeden typ kafelka jest wymagany",
|
||
"manageTileProviders": "Zarządzaj Dostawcami"
|
||
},
|
||
"tileTypeEditor": {
|
||
"editTileType": "Edytuj Typ Kafelka",
|
||
"addTileType": "Dodaj Typ Kafelka",
|
||
"name": "Nazwa",
|
||
"nameHint": "np., Satelita",
|
||
"nameRequired": "Nazwa jest wymagana",
|
||
"urlTemplate": "Szablon URL",
|
||
"urlTemplateHint": "https://example.com/{z}/{x}/{y}.png",
|
||
"urlTemplateRequired": "Szablon URL jest wymagany",
|
||
"urlTemplatePlaceholders": "URL musi zawierać albo {quadkey} albo {z}, {x} i {y} symbole zastępcze",
|
||
"attribution": "Atrybucja",
|
||
"attributionHint": "© Dostawca Map",
|
||
"attributionRequired": "Atrybucja jest wymagana",
|
||
"maxZoom": "Maksymalny Poziom Przybliżenia",
|
||
"maxZoomHint": "Maksymalny poziom przybliżenia (1-23)",
|
||
"maxZoomRequired": "Maksymalne przybliżenie jest wymagane",
|
||
"maxZoomInvalid": "Maksymalne przybliżenie musi być liczbą",
|
||
"maxZoomRange": "Maksymalne przybliżenie musi być między {} a {}",
|
||
"fetchPreview": "Pobierz Podgląd",
|
||
"previewTileLoaded": "Kafelek podglądu załadowany pomyślnie",
|
||
"previewTileFailed": "Nie udało się pobrać podglądu: {}",
|
||
"save": "Zapisz"
|
||
},
|
||
"profiles": {
|
||
"nodeProfiles": "Profile Węzłów",
|
||
"newProfile": "Nowy Profil",
|
||
"builtIn": "Wbudowany",
|
||
"custom": "Niestandardowy",
|
||
"view": "Zobacz",
|
||
"deleteProfile": "Usuń Profil",
|
||
"deleteProfileConfirm": "Czy na pewno chcesz usunąć \"{}\"?",
|
||
"profileDeleted": "Profil usunięty",
|
||
"getMore": "Pobierz więcej...",
|
||
"addProfileChoice": "Dodaj Profil",
|
||
"addProfileChoiceMessage": "Jak chciałbyś dodać profil?",
|
||
"createCustomProfile": "Utwórz Niestandardowy Profil",
|
||
"createCustomProfileDescription": "Zbuduj profil od zera z własnymi tagami",
|
||
"importFromWebsite": "Importuj ze Strony",
|
||
"importFromWebsiteDescription": "Przeglądaj i importuj profile z deflock.me/identify"
|
||
},
|
||
"mapTiles": {
|
||
"title": "Kafelki Mapy",
|
||
"manageProviders": "Zarządzaj Dostawcami",
|
||
"attribution": "Atrybucja Mapy",
|
||
"mapAttribution": "Źródło mapy: {}",
|
||
"couldNotOpenLink": "Nie udało się otworzyć linku",
|
||
"openLicense": "Otwórz licencję: {}"
|
||
},
|
||
"profileEditor": {
|
||
"viewProfile": "Zobacz Profil",
|
||
"newProfile": "Nowy Profil",
|
||
"editProfile": "Edytuj Profil",
|
||
"profileName": "Nazwa profilu",
|
||
"profileNameHint": "np., Niestandardowa Kamera ALPR",
|
||
"profileNameRequired": "Nazwa profilu jest wymagana",
|
||
"requiresDirection": "Wymaga Kierunku",
|
||
"requiresDirectionSubtitle": "Czy kamery tego typu potrzebują tagu kierunku",
|
||
"fov": "Pole Widzenia",
|
||
"fovHint": "FOV w stopniach (zostaw puste dla domyślnego)",
|
||
"fovSubtitle": "Pole widzenia kamery - używane dla szerokości stożka i formatu zgłaszania zasięgu",
|
||
"fovInvalid": "FOV musi być między 1 a 360 stopniami",
|
||
"submittable": "Możliwy do Zgłoszenia",
|
||
"submittableSubtitle": "Czy ten profil może być używany do zgłoszeń kamer",
|
||
"osmTags": "Tagi OSM",
|
||
"addTag": "Dodaj tag",
|
||
"saveProfile": "Zapisz Profil",
|
||
"keyHint": "klucz",
|
||
"valueHint": "wartość",
|
||
"atLeastOneTagRequired": "Przynajmniej jeden tag jest wymagany",
|
||
"profileSaved": "Profil \"{}\" zapisany"
|
||
},
|
||
"operatorProfileEditor": {
|
||
"newOperatorProfile": "Nowy Profil Operatora",
|
||
"editOperatorProfile": "Edytuj Profil Operatora",
|
||
"operatorName": "Nazwa operatora",
|
||
"operatorNameHint": "np., Policja Warszawska",
|
||
"operatorNameRequired": "Nazwa operatora jest wymagana",
|
||
"operatorProfileSaved": "Profil operatora \"{}\" zapisany"
|
||
},
|
||
"operatorProfiles": {
|
||
"title": "Profile Operatorów",
|
||
"noProfilesMessage": "Brak zdefiniowanych profili operatorów. Utwórz jeden, aby zastosować tagi operatorów do zgłoszeń węzłów.",
|
||
"tagsCount": "{} tagów",
|
||
"deleteOperatorProfile": "Usuń Profil Operatora",
|
||
"deleteOperatorProfileConfirm": "Czy na pewno chcesz usunąć \"{}\"?",
|
||
"operatorProfileDeleted": "Profil operatora usunięty"
|
||
},
|
||
"offlineAreas": {
|
||
"title": "Obszary Offline",
|
||
"noAreasTitle": "Brak obszarów offline",
|
||
"noAreasSubtitle": "Pobierz obszar mapy do użytku offline.",
|
||
"provider": "Dostawca",
|
||
"maxZoom": "Maksymalne przybliżenie",
|
||
"zoomLevels": "Z{}-{}",
|
||
"latitude": "Szerokość",
|
||
"longitude": "Długość",
|
||
"tiles": "Kafelki",
|
||
"size": "Rozmiar",
|
||
"nodes": "Węzły",
|
||
"areaIdFallback": "Obszar {}...",
|
||
"renameArea": "Zmień nazwę obszaru",
|
||
"refreshWorldTiles": "Odśwież/pobierz ponownie kafelki światowe",
|
||
"deleteOfflineArea": "Usuń obszar offline",
|
||
"cancelDownload": "Anuluj pobieranie",
|
||
"renameAreaDialogTitle": "Zmień Nazwę Obszaru Offline",
|
||
"areaNameLabel": "Nazwa Obszaru",
|
||
"renameButton": "Zmień Nazwę",
|
||
"megabytes": "MB",
|
||
"kilobytes": "KB",
|
||
"progress": "{}%",
|
||
"refreshArea": "Odśwież obszar",
|
||
"refreshAreaDialogTitle": "Odśwież Obszar Offline",
|
||
"refreshAreaDialogSubtitle": "Wybierz co odświeżyć dla tego obszaru:",
|
||
"refreshTiles": "Odśwież Kafelki Mapy",
|
||
"refreshTilesSubtitle": "Pobierz ponownie wszystkie kafelki dla zaktualizowanych obrazów",
|
||
"refreshNodes": "Odśwież Węzły",
|
||
"refreshNodesSubtitle": "Pobierz ponownie dane węzłów dla tego obszaru",
|
||
"startRefresh": "Rozpocznij Odświeżanie",
|
||
"refreshStarted": "Odświeżanie rozpoczęte!",
|
||
"refreshFailed": "Odświeżanie nie powiodło się: {}"
|
||
},
|
||
"refineTagsSheet": {
|
||
"title": "Doprecyzuj Tagi",
|
||
"operatorProfile": "Profil Operatora",
|
||
"done": "Gotowe",
|
||
"none": "Brak",
|
||
"noAdditionalOperatorTags": "Brak dodatkowych tagów operatora",
|
||
"additionalTags": "dodatkowe tagi",
|
||
"additionalTagsTitle": "Dodatkowe Tagi",
|
||
"noTagsDefinedForProfile": "Brak tagów zdefiniowanych dla tego profilu operatora.",
|
||
"noOperatorProfiles": "Brak zdefiniowanych profili operatorów",
|
||
"noOperatorProfilesMessage": "Utwórz profile operatorów w Ustawieniach, aby zastosować dodatkowe tagi do swoich zgłoszeń węzłów.",
|
||
"profileTags": "Tagi Profilu",
|
||
"profileTagsDescription": "Wypełnij te opcjonalne wartości tagów dla bardziej szczegółowych zgłoszeń:",
|
||
"selectValue": "Wybierz wartość...",
|
||
"noValue": "(zostaw puste)",
|
||
"noSuggestions": "Brak dostępnych sugestii",
|
||
"existingTagsTitle": "Istniejące Tagi",
|
||
"existingTagsDescription": "Edytuj istniejące tagi na tym urządzeniu. Dodaj, usuń lub zmodyfikuj dowolny tag:",
|
||
"existingOperator": "<Istniejący operator>",
|
||
"existingOperatorTags": "istniejące tagi operatora"
|
||
},
|
||
"layerSelector": {
|
||
"cannotChangeTileTypes": "Nie można zmieniać typów kafelków podczas pobierania obszarów offline",
|
||
"selectMapLayer": "Wybierz Warstwę Mapy",
|
||
"noTileProvidersAvailable": "Brak dostępnych dostawców kafelków"
|
||
},
|
||
"advancedEdit": {
|
||
"title": "Zaawansowane Opcje Edycji",
|
||
"subtitle": "Te edytory oferują bardziej zaawansowane funkcje dla złożonych edycji.",
|
||
"webEditors": "Edytory Webowe",
|
||
"mobileEditors": "Edytory Mobilne",
|
||
"iDEditor": "Edytor iD",
|
||
"iDEditorSubtitle": "W pełni funkcjonalny edytor webowy - zawsze działa",
|
||
"rapidEditor": "Edytor RapiD",
|
||
"rapidEditorSubtitle": "Edycja wspomagana AI z danymi Facebook",
|
||
"vespucci": "Vespucci",
|
||
"vespucciSubtitle": "Zaawansowany edytor OSM dla Androida",
|
||
"streetComplete": "StreetComplete",
|
||
"streetCompleteSubtitle": "Aplikacja do mapowania oparta na ankietach",
|
||
"everyDoor": "EveryDoor",
|
||
"everyDoorSubtitle": "Szybka edycja POI",
|
||
"goMap": "Go Map!!",
|
||
"goMapSubtitle": "Edytor OSM dla iOS",
|
||
"couldNotOpenEditor": "Nie można otworzyć edytora - aplikacja może nie być zainstalowana",
|
||
"couldNotOpenURL": "Nie można otworzyć URL",
|
||
"couldNotOpenOSMWebsite": "Nie można otworzyć strony OSM"
|
||
},
|
||
"networkStatus": {
|
||
"showIndicator": "Pokaż wskaźnik stanu sieci",
|
||
"showIndicatorSubtitle": "Wyświetl status ładowania danych nadzoru i błędów",
|
||
"loading": "Ładowanie danych nadzoru...",
|
||
"timedOut": "Żądanie przekroczyło limit czasu",
|
||
"noData": "Brak danych offline",
|
||
"success": "Dane nadzoru załadowane",
|
||
"nodeDataSlow": "Dane nadzoru powolne",
|
||
"rateLimited": "Ograniczone przez serwer",
|
||
"networkError": "Błąd sieci"
|
||
},
|
||
"nodeLimitIndicator": {
|
||
"message": "Pokazuje {rendered} z {total} urządzeń",
|
||
"editingDisabledMessage": "Pokazano zbyt wiele urządzeń, aby bezpiecznie edytować. Przybliż dalej, aby zmniejszyć liczbę widocznych urządzeń, następnie spróbuj ponownie."
|
||
},
|
||
"navigation": {
|
||
"searchLocation": "Szukaj Lokalizacji",
|
||
"searchPlaceholder": "Szukaj miejsc lub współrzędnych...",
|
||
"routeTo": "Trasa Do",
|
||
"routeFrom": "Trasa Od",
|
||
"selectLocation": "Wybierz Lokalizację",
|
||
"calculatingRoute": "Obliczanie trasy...",
|
||
"routeCalculationFailed": "Obliczanie trasy nie powiodło się",
|
||
"start": "Start",
|
||
"resume": "Wznów",
|
||
"endRoute": "Zakończ Trasę",
|
||
"routeOverview": "Przegląd Trasy",
|
||
"retry": "Spróbuj Ponownie",
|
||
"cancelSearch": "Anuluj wyszukiwanie",
|
||
"noResultsFound": "Nie znaleziono wyników",
|
||
"searching": "Wyszukiwanie...",
|
||
"location": "Lokalizacja",
|
||
"startPoint": "Start",
|
||
"endPoint": "Koniec",
|
||
"startSelect": "Start (wybierz)",
|
||
"endSelect": "Koniec (wybierz)",
|
||
"distance": "Odległość: {} km",
|
||
"routeActive": "Trasa aktywna",
|
||
"locationsTooClose": "Lokalizacje startu i mety są zbyt blisko siebie",
|
||
"navigationSettings": "Nawigacja",
|
||
"navigationSettingsSubtitle": "Planowanie tras i ustawienia unikania",
|
||
"avoidanceDistance": "Odległość Unikania",
|
||
"avoidanceDistanceSubtitle": "Minimalna odległość do utrzymania od urządzeń nadzoru",
|
||
"searchHistory": "Maksymalna Historia Wyszukiwania",
|
||
"searchHistorySubtitle": "Maksymalna liczba ostatnich wyszukiwań do zapamiętania"
|
||
},
|
||
"suspectedLocations": {
|
||
"title": "Podejrzane Lokalizacje",
|
||
"showSuspectedLocations": "Pokaż Podejrzane Lokalizacje",
|
||
"showSuspectedLocationsSubtitle": "Pokaż znaczniki znaku zapytania dla podejrzanych miejsc nadzoru z danych pozwoleń użyteczności publicznej",
|
||
"lastUpdated": "Ostatnio Zaktualizowane",
|
||
"refreshNow": "Odśwież teraz",
|
||
"dataSource": "Źródło Danych",
|
||
"dataSourceDescription": "Dane pozwoleń użyteczności publicznej wskazujące potencjalne miejsca instalacji infrastruktury nadzoru",
|
||
"dataSourceCredit": "Zbieranie danych i hosting zapewnione przez alprwatch.org",
|
||
"minimumDistance": "Minimalna Odległość od Rzeczywistych Węzłów",
|
||
"minimumDistanceSubtitle": "Ukryj podejrzane lokalizacje w promieniu {}m od istniejących urządzeń nadzoru",
|
||
"updating": "Aktualizowanie Podejrzanych Lokalizacji",
|
||
"downloadingAndProcessing": "Pobieranie i przetwarzanie danych...",
|
||
"updateSuccess": "Podejrzane lokalizacje zaktualizowane pomyślnie",
|
||
"updateFailed": "Nie udało się zaktualizować podejrzanych lokalizacji",
|
||
"neverFetched": "Nigdy nie pobrano",
|
||
"daysAgo": "{} dni temu",
|
||
"hoursAgo": "{} godzin temu",
|
||
"minutesAgo": "{} minut temu",
|
||
"justNow": "Właśnie teraz"
|
||
},
|
||
"suspectedLocation": {
|
||
"title": "Podejrzana Lokalizacja #{}",
|
||
"ticketNo": "Nr Biletu",
|
||
"address": "Adres",
|
||
"street": "Ulica",
|
||
"city": "Miasto",
|
||
"state": "Województwo",
|
||
"intersectingStreet": "Przecinająca Ulica",
|
||
"workDoneFor": "Praca Wykonana Dla",
|
||
"remarks": "Uwagi",
|
||
"url": "URL",
|
||
"coordinates": "Współrzędne",
|
||
"noAddressAvailable": "Brak dostępnego adresu"
|
||
},
|
||
"units": {
|
||
"meters": "m",
|
||
"feet": "ft",
|
||
"kilometers": "km",
|
||
"miles": "mila",
|
||
"metersLong": "metry",
|
||
"feetLong": "stopy",
|
||
"kilometersLong": "kilometry",
|
||
"milesLong": "mile",
|
||
"metric": "Metryczny",
|
||
"imperial": "Imperialny",
|
||
"metricDescription": "Metryczny (km, m)",
|
||
"imperialDescription": "Imperialny (mila, ft)"
|
||
}
|
||
}
|