From 1ee7ea62edb278912e57d02240738ebe15baf117 Mon Sep 17 00:00:00 2001 From: Jasiu Date: Sat, 20 Jun 2026 18:55:39 +0200 Subject: [PATCH 1/4] Added translation using Weblate (Polish) --- public/locales/pl.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 public/locales/pl.json diff --git a/public/locales/pl.json b/public/locales/pl.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/public/locales/pl.json @@ -0,0 +1 @@ +{} From f1478c8602a71b1ea1da3adc8d0edbe4d5f847aa Mon Sep 17 00:00:00 2001 From: Jasiu Date: Sat, 20 Jun 2026 20:24:16 +0200 Subject: [PATCH 2/4] Translated using Weblate (Polish) Currently translated at 2.5% (117 of 4559 strings) Translation: MeshMonitor/meshmonitor Translate-URL: https://hosted.weblate.org/projects/meshmonitor/meshmonitor/pl/ --- public/locales/pl.json | 120 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/public/locales/pl.json b/public/locales/pl.json index 0967ef424..05c47d1e9 100644 --- a/public/locales/pl.json +++ b/public/locales/pl.json @@ -1 +1,119 @@ -{} +{ + "auto_favorite.max_neighbor_age": "Maksymalny wiek informacji o sąsiedzie (w godzinach)", + "auto_favorite.max_neighbor_age_desc": "Jeśli zapis NeighborInfo dla tego węzła już istnieje i jest nowszy niż podany okres, użyj go ponownie, zamiast wysyłać kolejne żądanie — oszczędzając czas antenowy. Ustaw wartość 0, aby zawsze żądać aktualnych danych. Wartość domyślna: 24 godziny.", + "admin_commands.node_favorite_confirmed": "Węzeł {{nodeNum}} potwierdził oznaczenie jako ulubiony (odebrano ACK)", + "admin_commands.node_unfavorite_confirmed": "Węzeł {{nodeNum}} potwierdził usunięcie z ulubionych (odebrano ACK)", + "admin_commands.node_favorite_no_ack": "Wysłano do węzła {{nodeNum}}, ale nie odebrano potwierdzenia ACK — polecenie mogło mimo to zostać zastosowane", + "admin_commands.node_favorite_rejected": "Węzeł {{nodeNum}} odrzucił polecenie oznaczenia jako ulubiony: {{status}}", + "auto_favorite.nav": "Automatyczne ulubione", + "auto_favorite.title": "Zarządzanie automatycznymi ulubionymi", + "auto_favorite.description": "Automatycznie utrzymuj aktualną listę ulubionych na tym zdalnym węźle. MeshMonitor wykrywa sąsiadów węzła na podstawie rozgłoszeń NeighborInfo i/lub wyników śledzenia trasy przechodzących przez ten węzeł, a następnie za pomocą zdalnego zarządzania wysyła polecenia oznaczenia ich jako ulubione, zachowując routing bezpośredni w miarę zmian w sieci mesh.", + "auto_favorite.caveats_title": "Zanim włączysz tę funkcję", + "auto_favorite.caveat_ack": "Każde polecenie oznaczenia węzła jako ulubionego jest potwierdzane: zdalny węzeł zwraca potwierdzenie routingu ACK, informujące o odebraniu i przetworzeniu polecenia, widoczne poniżej przy każdym ulubionym węźle, albo zwraca błąd, jeśli polecenie zostało odrzucone. Jest jednak jedno zastrzeżenie: ACK potwierdza przetworzenie żądania przez zdalny węzeł. Jeśli oznaczany węzeł nie znajduje się jeszcze w bazie danych zdalnego węzła, polecenie nie spowoduje żadnej zmiany. Opcja „ponowne oznaczanie jako ulubione w każdym cyklu” ponownie wysyła wcześniej przypisane ulubione węzły, zaczynając od niepotwierdzonych, aby przywrócić te, których polecenia zostały utracone lub nigdy nie zostały potwierdzone.", + "auto_favorite.caveat_heavy": "Jest to operacja znacznie obciążająca sieć. Oznaczenie każdego węzła jako ulubionego wymaga wymiany wielu pakietów w ramach jednej operacji, w tym uzgodnienia klucza sesji, a następnie oczekiwania na potwierdzenie ACK. Dlatego używaj tej funkcji oszczędnie: ustaw niskie limity na cykl i długi odstęp między cyklami.", + "auto_favorite.ack_confirmed": "potwierdzone", + "auto_favorite.ack_timeout": "brak ack", + "auto_favorite.ack_tooltip": "Status potwierdzenia ACK dla ostatniego polecenia dodania do ulubionych", + "auto_favorite.select_target": "Wybierz powyżej węzeł docelowy, aby skonfigurować automatyczne zarządzanie ulubionymi.", + "auto_favorite.loading": "Ładowanie…", + "auto_favorite.enabled": "Włącz automatyczne zarządzanie ulubionymi", + "auto_favorite.discovery_modes": "Metody wykrywania", + "auto_favorite.use_neighborinfo": "Używaj NeighborInfo", + "auto_favorite.use_neighborinfo_desc": "Okresowo pobieraj informacje NeighborInfo z węzła docelowego i dodawaj nowo wykrytych sąsiadów do ulubionych. Moduł NeighborInfo musi być włączony na węźle docelowym.", + "auto_favorite.use_traceroutes": "Używaj śledzenia tras", + "auto_favorite.enabled_desc": "Uruchamiaj cykle wykrywania i dodawania do ulubionych dla tego węzła docelowego zgodnie z poniższym harmonogramem.", + "auto_favorite.use_traceroutes_desc": "Wykrywaj sąsiadów węzła docelowego na podstawie tras przechodzących przez ten węzeł i dodawaj ich do ulubionych.", + "auto_favorite.timing_limits": "Czas i limity", + "auto_favorite.interval_hours": "Odstęp między cyklami (w godzinach)", + "auto_favorite.interval_hours_desc": "Jak często pobierać informacje o sąsiadach i uruchamiać cykl dodawania do ulubionych. Wartość domyślna: 24 godziny.", + "auto_favorite.max_new": "Maksymalna liczba nowych sąsiadów na cykl", + "auto_favorite.max_new_desc": "Limit liczby nowo wykrytych sąsiadów dodawanych do ulubionych w każdym cyklu. Wartość domyślna: 1.", + "auto_favorite.max_refavorite": "Maksymalna liczba ponownych dodań do ulubionych na cykl", + "auto_favorite.max_refavorite_desc": "W każdym cyklu ponownie wysyłaj polecenia dla określonej liczby wcześniej przypisanych ulubionych, aby przywrócić przypisania, które mogły zostać utracone. Wartość domyślna: 1.", + "auto_favorite.eligible_roles": "Dozwolone role sąsiadów", + "auto_favorite.eligible_roles_desc": "Do ulubionych zostaną dodani wyłącznie sąsiedzi z jedną z tych ról.", + "auto_favorite.status": "Stan", + "auto_favorite.last_run": "Ostatni cykl", + "auto_favorite.last_neighbor_request": "Ostatnie żądanie NeighborInfo", + "auto_favorite.managed_count": "Liczba ulubionych zarządzanych na tym węźle", + "auto_favorite.last_sent": "ostatnio wysłano", + "auto_favorite.never": "Nigdy", + "auto_favorite.save": "Zapisz ustawienia", + "auto_favorite.saving": "Zapisywanie…", + "auto_favorite.run_now": "Uruchom cykl teraz", + "auto_favorite.running": "Uruchamianie…", + "auto_favorite.run_now_title": "Uruchom jeden cykl natychmiast (spowoduje to wysłanie pakietów przez sieć mesh)", + "auto_favorite.run_now_confirm": "Uruchomić teraz jeden cykl wykrywania i dodawania do ulubionych? Spowoduje to wysłanie kilku pakietów przez sieć mesh.", + "auto_favorite.run_skipped": "Cykl pominięty: {{reason}}", + "auto_favorite.run_done": "Cykl zakończony: nowych — {{new}}, ponownie dodanych do ulubionych — {{re}} (znaleziono sąsiadów: {{found}})", + "auto_favorite.run_failed": "Nie udało się uruchomić cyklu automatycznego dodawania do ulubionych", + "auto_favorite.saved": "Ustawienia automatycznego dodawania do ulubionych zostały zapisane", + "auto_favorite.save_failed": "Nie udało się zapisać ustawień automatycznego dodawania do ulubionych", + "auto_favorite.load_failed": "Nie udało się wczytać konfiguracji automatycznego dodawania do ulubionych", + "nav.nodes": "Węzły", + "nav.channels": "Kanały", + "nav.info": "Info", + "nav.messages": "Szczegóły węzła", + "nav.dashboard": "Panel główny", + "nav.settings": "Ustawienia", + "nav.configuration": "Urządzenie", + "nav.mqtt_bridge_config": "Konfiguracja", + "nav.notifications": "Powiadomienia", + "nav.automation": "Automatyzacja", + "nav.users": "Użytkownicy", + "nav.security": "Zabezpieczenia", + "nav.admin_commands": "Polecenia administracyjne", + "nav.audit": "Dziennik audytu", + "nav.main_section": "Główne", + "nav.configuration_section": "Konfiguracja", + "nav.section_main": "Główne", + "nav.admin_section": "Admin", + "nav.section_configuration": "konfiguracja", + "nav.section_admin": "Admin", + "nav.device": "Urządzenie", + "nav.audit_log": "Dziennik audytu", + "nav.expand_sidebar": "Rozwiń pasek boczny", + "nav.collapse_sidebar": "Zwiń pasek boczny", + "nav.pin_sidebar": "Przypnij pasek boczny w pozycji otwartej", + "nav.unpin_sidebar": "Odepnij pasek boczny", + "nav.search": "Wyszukaj", + "nav.packet_monitor": "Monitor pakietów", + "search.title": "Wyszukiwanie wiadomości", + "search.placeholder": "Wyszukaj tekst w wiadomościach...", + "search.button": "Wyszukaj", + "search.case_sensitive": "Uwzględnij wielkość liter", + "search.scope": "Zakres", + "search.scope_all": "Wszystkie wiadomości", + "search.scope_channels": "Tylko kanały", + "search.scope_dms": "Tylko wiadomości prywatne", + "search.scope_meshcore": "Tylko MeshCore", + "search.channels_filter": "Kanały", + "search.sender_filter": "Nadawca", + "search.date_from": "Data od", + "search.date_to": "Data do", + "search.results_count": "Liczba znalezionych wyników: {{count}}", + "search.results_count_of": "Wyświetlono {{count}} z {{total}} wyników", + "settings.12_hour": "Format 12 godzinny", + "settings.time_12_hour": "Format 12-godzinny (np. 3:45 PM)", + "search.no_results": "Nie znaleziono wiadomości pasujących do wyszukiwania.", + "search.loading": "Wyszukiwanie...", + "search.load_more": "Załaduj więcej", + "search.channel_label": "Nazwa kanału", + "search.dm_label": "Prywatna rozmowa z {{name}}", + "search.meshcore_label": "MeshCore", + "search.error": "Wyszukiwanie nie powiodło się. Spróbuj ponownie.", + "search.min_length": "Wpisz co najmniej 2 znaki, aby rozpocząć wyszukiwanie.", + "banners.default_password_warning": "Ostrzeżenie dotyczące bezpieczeństwa: konto administratora korzysta z domyślnego hasła. Zmień je natychmiast w zakładce Użytkownicy.", + "banners.tx_disabled": "Nadawanie wyłączone: urządzenie nie może wysyłać wiadomości. Nadawanie (TX) jest obecnie wyłączone w konfiguracji LoRa. Włącz je w aplikacji Meshtastic lub ponownie zaimportuj konfigurację.", + "banners.config_error": "Błąd Konfiguracji", + "banners.learn_more": "Dowiedz się więcej", + "banners.upgrading_to": "Trwa aktualizacja do wersji {{version}}...", + "banners.update_available": "Dostępna aktualizacja: dostępna jest wersja {{version}}.", + "banners.view_release_notes": "Zobacz informacje o wydaniu", + "banners.upgrade_now": "Aktualizuj teraz", + "purgeModal.title": "⚠️ Usuń dane węzła {{nodeName}}", + "purgeModal.warning": "Tych działań nie można cofnąć. Wszystkie dane tego węzła zostaną trwale usunięte.", + "purgeModal.purgeMessages": "🗑️ Usuń wszystkie wiadomości", + "purgeModal.purgeTraceroutes": "🗺️ Usuń dane śledzenia tras", + "purgeModal.purgeTelemetry": "📊 Usuń dane telemetryczne" +} From d34eec4fd0ba24fc38a799a382d78e0e17e8b1b2 Mon Sep 17 00:00:00 2001 From: Jasiu Date: Sat, 20 Jun 2026 20:34:04 +0200 Subject: [PATCH 3/4] Translated using Weblate (Polish) Currently translated at 2.8% (130 of 4565 strings) Translation: MeshMonitor/meshmonitor Translate-URL: https://hosted.weblate.org/projects/meshmonitor/meshmonitor/pl/ --- public/locales/pl.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/public/locales/pl.json b/public/locales/pl.json index 05c47d1e9..248a1522d 100644 --- a/public/locales/pl.json +++ b/public/locales/pl.json @@ -115,5 +115,19 @@ "purgeModal.warning": "Tych działań nie można cofnąć. Wszystkie dane tego węzła zostaną trwale usunięte.", "purgeModal.purgeMessages": "🗑️ Usuń wszystkie wiadomości", "purgeModal.purgeTraceroutes": "🗺️ Usuń dane śledzenia tras", - "purgeModal.purgeTelemetry": "📊 Usuń dane telemetryczne" + "purgeModal.purgeTelemetry": "📊 Usuń dane telemetryczne", + "purgeModal.purgePositionHistory": "📍 Usuń historię pozycji", + "purgeModal.deleteNodeTitle": "Całkowicie usuń węzeł:", + "purgeModal.deleteNodeDescription": "Wybierz sposób usunięcia węzła: tylko z lokalnej bazy danych albo zarówno z urządzenia, jak i z bazy danych.", + "purgeModal.deleteLocal": "❌ Usuń węzeł (tylko z lokalnej bazy danych)", + "purgeModal.deleteDevice": "🗑️ Usuń z urządzenia i z bazy danych", + "header.disconnect": "Rozłącz", + "header.disconnectTitle": "Rozłącz z węzłem", + "header.connect": "Połącz", + "meshcore.connect": "Połącz", + "source.connect": "Połącz", + "source.connecting": "Łączenie…", + "source.add_short": "+Dodaj", + "source.edit_mode": "Edytuj", + "source.edit_mode_done": "Gotowe" } From 34886425c17c5823c634f6ec3db5211f1b0161d8 Mon Sep 17 00:00:00 2001 From: Jasiu Date: Sat, 20 Jun 2026 21:36:55 +0200 Subject: [PATCH 4/4] Translated using Weblate (Polish) Currently translated at 100.0% (4565 of 4565 strings) Translation: MeshMonitor/meshmonitor Translate-URL: https://hosted.weblate.org/projects/meshmonitor/meshmonitor/pl/ --- public/locales/pl.json | 4442 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 4440 insertions(+), 2 deletions(-) diff --git a/public/locales/pl.json b/public/locales/pl.json index 248a1522d..c01daec5f 100644 --- a/public/locales/pl.json +++ b/public/locales/pl.json @@ -98,7 +98,7 @@ "search.no_results": "Nie znaleziono wiadomości pasujących do wyszukiwania.", "search.loading": "Wyszukiwanie...", "search.load_more": "Załaduj więcej", - "search.channel_label": "Nazwa kanału", + "search.channel_label": "Kanał {{name}}", "search.dm_label": "Prywatna rozmowa z {{name}}", "search.meshcore_label": "MeshCore", "search.error": "Wyszukiwanie nie powiodło się. Spróbuj ponownie.", @@ -129,5 +129,4443 @@ "source.connecting": "Łączenie…", "source.add_short": "+Dodaj", "source.edit_mode": "Edytuj", - "source.edit_mode_done": "Gotowe" + "source.edit_mode_done": "Gotowe", + "header.connectedTo": "Połączono z: {{address}}", + "header.clickForStatus": "Kliknij, aby wyświetlić stan systemu", + "header.clickForNodeInfo": "Kliknij, aby wyświetlić informacje o węźle", + "header.status.connected": "połączono", + "header.status.disconnected": "Rozłączono", + "header.status.initializing": "inicjalizacja", + "header.status.nodeOffline": "Węzeł offline", + "header.connectTitle": "Połącz ponownie z węzłem", + "header.login": "Zaloguj się", + "header.updateMethod": "Aktualizacje", + "header.polling": "Odpytywanie", + "common.save": "Zapisz", + "common.cancel": "Anuluj", + "common.default": "Domyślne", + "common.delete": "Usuń", + "common.edit": "Edytuj", + "common.close": "Zamknij", + "common.loading": "Ładowanie", + "common.error": "Błąd", + "common.success": "Powodzenie", + "common.warning": "Ostrzeżenie", + "common.info": "Informacje", + "common.add": "Dodaj", + "common.remove": "Usuń", + "common.submit": "Prześlij", + "common.export": "Eksportuj", + "common.import": "Importuj", + "common.clear": "Wyczyść", + "common.clear_filter": "Wyczyść filtr", + "common.reset": "Resetuj", + "common.apply": "Zastosuj", + "common.confirm": "Potwierdź", + "common.copy": "Kopiuj", + "common.copy_to_clipboard": "Kopiuj do schowka", + "common.copied_to_clipboard": "Skopiowano do schowka", + "common.dismiss": "Odrzuć", + "common.ok": "OK", + "common.done": "Gotowe", + "common.saving": "Zapisywanie", + "common.updating": "Aktualizowanie...", + "common.loading_indicator": "Ładowanie...", + "common.sending": "Wysyłanie...", + "common.logging_in": "Logowanie...", + "common.changing": "Zmienianie...", + "common.expanding": "Rozwijanie", + "common.collapsing": "Zwijanie", + "common.enabled": "Włączone", + "common.disabled": "Wyłączone", + "common.yes": "Tak", + "common.no": "Nie", + "common.all": "Wszystkie", + "common.none": "Brak", + "common.search": "Szukaj", + "common.filter": "Filtruj", + "common.refresh": "Odśwież", + "common.actions": "Działania", + "common.status": "Stan", + "common.name": "Nazwa", + "common.type": "Typ", + "common.value": "Wartość", + "common.date": "Data", + "common.time": "Czas", + "common.description": "Opis", + "common.details": "Szczegóły", + "common.options": "Opcje", + "common.settings": "Ustawienia", + "common.back": "Wstecz", + "scripts.deps.title": "📦 Zależności skryptów", + "scripts.deps.description": "Zainstaluj pakiety Pythona lub Node wymagane przez skrypty. Dodaj plik requirements.txt (Python) albo package.json (Node) do katalogu skryptów, a następnie uruchom instalację. Pakiety są instalowane obok skryptów i pozostają dostępne po ponownym uruchomieniu.", + "scripts.deps.none": "W katalogu skryptów nie znaleziono jeszcze manifestu zależności.", + "scripts.deps.install": "⬇️ Zainstaluj lub zaktualizuj zależności", + "scripts.deps.installing": "Instalowanie…", + "scripts.deps.warning": "⚠️ Instalacja pobiera i uruchamia kod innych firm oraz wymaga dostępu do Internetu. W odchudzonym obrazie Dockera pakiety bez gotowego pakietu wheel dla musl nie zostaną zainstalowane, chyba że ustawiono SCRIPT_DEPS_ALLOW_SOURCE_BUILD=true.", + "common.next": "Dalej", + "common.previous": "Wstecz", + "common.finish": "Zakończ", + "common.start": "Uruchom", + "common.stop": "Zatrzymaj", + "common.pause": "Wstrzymaj", + "common.resume": "Wznów", + "common.retry": "Ponów", + "common.skip": "Pomiń", + "common.select": "Wybierz", + "common.select_all": "Wybierz wszystkie", + "common.deselect_all": "Odznacz wszystkie", + "common.show_more": "Pokaż więcej", + "common.show_less": "Pokaż mniej", + "common.view": "Wyświetl", + "common.create": "Utwórz", + "common.update": "Aktualizuj", + "common.test": "Testuj", + "common.send": "Wyślij", + "common.download": "Pobierz", + "common.upload": "Prześlij", + "common.or": "LUB", + "common.total": "łącznie", + "common.version": "Wersja", + "common.view_on_github": "Wyświetl w serwisie GitHub", + "common.unknown": "Nieznane", + "common.na": "Nie dotyczy", + "common.just_now": "przed chwilą", + "common.seconds_ago": "{{count}} s temu", + "common.minutes_ago": "{{count}} min temu", + "common.hours_ago": "{{count}} godz. temu", + "common.days_ago": "{{count}} dni temu", + "savebar.save_changes_to": "Zapisz zmiany w sekcji {{section}}", + "savebar.save_all_changes": "Zapisz niezapisane zmiany w {{count}} sekcjach", + "savebar.save_all": "Zapisz wszystko", + "auth.login": "Zaloguj się", + "auth.username": "Nazwa użytkownika", + "auth.password": "Hasło", + "auth.login_page_title": "MeshMonitor", + "auth.login_with_oidc": "Zaloguj się przez OIDC", + "auth.invalid_credentials": "Nieprawidłowa nazwa użytkownika lub hasło", + "auth.rate_limited": "Zbyt wiele prób logowania. Spróbuj ponownie za {{minutes}} min.", + "auth.rate_limited_generic": "Zbyt wiele prób logowania. Spróbuj ponownie później.", + "auth.session_expired": "Sesja wygasła. Odśwież stronę i spróbuj ponownie.", + "auth.local_auth_disabled": "Uwierzytelnianie lokalne jest wyłączone, a OIDC nie jest skonfigurowane. Skontaktuj się z administratorem.", + "auth.login_divider": "LUB", + "auth.logout": "Wyloguj się", + "auth.change_password": "Zmień hasło", + "auth.current_password": "Aktualne hasło", + "auth.new_password": "Nowe hasło", + "auth.confirm_password": "Potwierdź nowe hasło", + "auth.password_min_length": "Co najmniej 8 znaków", + "auth.password_changed_success": "Hasło zostało zmienione!", + "auth.password_changed_required": "Wszystkie pola są wymagane", + "auth.password_too_short": "Nowe hasło musi mieć co najmniej 8 znaków", + "auth.passwords_not_match": "Hasła nie są zgodne", + "auth.password_same_as_current": "Nowe hasło musi różnić się od aktualnego", + "auth.failed_change_password": "Nie udało się zmienić hasła", + "auth.logging_in": "Logowanie...", + "auth.oidc_failed": "Nie udało się rozpocząć logowania przez OIDC", + "auth.local_disabled_no_oidc": "Uwierzytelnianie lokalne jest wyłączone, a OIDC nie jest skonfigurowane. Skontaktuj się z administratorem.", + "nodes.title": "Węzły", + "nodes.map": "Widok mapy", + "nodes.list": "Lista węzłów", + "nodes.node_details": "Szczegóły węzła", + "nodes.expand_node_list": "Rozwiń listę węzłów", + "nodes.collapse_node_list": "Zwiń listę węzłów", + "nodes.add_to_favorites": "Dodaj do ulubionych", + "nodes.remove_from_favorites": "Usuń z ulubionych", + "nodes.node_name": "Nazwa węzła", + "nodes.hardware": "Sprzęt", + "nodes.role": "Rola", + "nodes.location": "Lokalizacja", + "nodes.has_telemetry": "Ma dane telemetryczne", + "nodes.has_weather": "Ma dane pogodowe", + "nodes.has_pkc": "Obsługuje kryptografię klucza publicznego", + "nodes.has_remote_admin": "Zweryfikowane zdalne zarządzanie", + "nodes.mobile_node": "Węzeł mobilny (pozycja zmienia się o ponad 1 km)", + "nodes.node_address": "Adres węzła", + "nodes.last_heard": "Ostatnio odebrano", + "nodes.signal_to_noise_ratio": "Stosunek sygnału do szumu", + "nodes.sort_by": "Sortuj węzły według", + "nodes.filter_nodes": "Filtruj węzły...", + "nodes.toggle_filters": "Pokaż lub ukryj filtry", + "nodes.hops": "Przeskoki", + "nodes.signal_hops": "Sygnał/przeskoki", + "nodes.node": "Węzeł", + "nodes.hop": "przeskok", + "nodes.signal_info_tooltip": "Siła sygnału połączenia bezpośredniego (SNR/RSSI)", + "nodes.battery": "Akumulator", + "nodes.voltage": "Napięcie", + "nodes.channel_utilization": "Wykorzystanie kanału", + "nodes.air_util_tx": "Wykorzystanie pasma TX", + "nodes.uptime": "Czas działania", + "nodes.neighbors": "Sąsiedzi", + "nodes.total_nodes": "Łączna liczba węzłów", + "nodes.online_nodes": "Węzły online", + "nodes.unknown": "Nieznane", + "nodes.never": "Nigdy", + "nodes.filter_placeholder": "Filtruj węzły...", + "nodes.filter_title": "Filtruj węzły", + "nodes.sort_name": "Sortowanie: nazwa", + "nodes.sort_short_name": "Sortowanie: krótka nazwa", + "nodes.sort_id": "Sortowanie: identyfikator", + "nodes.sort_updated": "Sortowanie: aktualizacja", + "nodes.sort_signal": "Sortowanie: sygnał", + "nodes.sort_charge": "Sortowanie: poziom naładowania", + "nodes.sort_hardware": "Sortowanie: sprzęt", + "nodes.sort_hops": "Sortowanie: przeskoki", + "nodes.ascending": "Rosnąco", + "nodes.descending": "Malejąco", + "nodes.export": "Eksportuj listę węzłów", + "nodes.export_csv": "Eksportuj listę węzłów jako CSV", + "nodes.export_html": "Eksportuj listę węzłów jako HTML", + "nodes.add_favorite": "Dodaj do ulubionych", + "nodes.remove_favorite": "Usuń z ulubionych", + "nodes.add_ignored": "Dodaj do ignorowanych", + "nodes.remove_ignored": "Usuń z ignorowanych", + "nodes.node_role": "Rola węzła", + "nodes.send_dm": "Wyślij wiadomość prywatną", + "nodes.snr": "Stosunek sygnału do szumu", + "nodes.rssi": "Siła odebranego sygnału", + "nodes.distance": "Odległość od Twojego węzła", + "nodes.elevation": "Wysokość nad poziomem morza", + "nodes.plugged_in": "Podłączono zasilanie", + "nodes.battery_level": "Poziom naładowania akumulatora", + "nodes.hops_away": "Liczba przeskoków", + "nodes.hop_one": "przeskok", + "nodes.hop_other": "przeskoki", + "nodes.via_mqtt": "Połączono przez MQTT", + "nodes.copy_nodeinfo": "Skopiuj NodeInfo z innego źródła", + "nodes.copy_nodeinfo_title": "Kopiowanie NodeInfo", + "nodes.copy_nodeinfo_description": "Skopiuj brakujące pola NodeInfo z innego źródła, które ma dane tego węzła.", + "nodes.copy_nodeinfo_no_candidates": "Żadne inne źródło nie ma danych NodeInfo tego węzła.", + "nodes.copy_nodeinfo_source": "Kopiuj ze źródła", + "nodes.copy_nodeinfo_current": "Aktualne", + "nodes.copy_nodeinfo_incoming": "Przychodzące", + "nodes.copy_nodeinfo_field": "Pole", + "nodes.copy_nodeinfo_no_changes": "Brak nowych pól do skopiowania — węzeł docelowy ma już wszystkie dostępne dane.", + "nodes.copy_nodeinfo_push_to_device": "Prześlij do NodeDB", + "nodes.copy_nodeinfo_push_to_device_help": "Wyślij również żądanie NodeInfo do połączonego urządzenia, aby poznało ten węzeł.", + "nodes.copy_nodeinfo_success": "Skopiowano {{count}} pól do tego węzła.", + "nodes.copy_nodeinfo_pushed": "Wysłano do urządzenia żądanie NodeInfo.", + "nodes.copy_nodeinfo_error": "Nie udało się skopiować NodeInfo.", + "messages.title": "Wiadomości", + "messages.send_direct_message": "Wyślij wiadomość prywatną", + "messages.reply_to_message": "Odpowiedz na tę wiadomość", + "messages.cancel_reply": "Anuluj odpowiedź", + "messages.delete_message": "Usuń tę wiadomość", + "messages.confirm_delete": "Czy na pewno chcesz usunąć tę wiadomość?", + "messages.react_with_emoji": "Zareaguj emoji", + "messages.total_messages": "Łączna liczba wiadomości", + "messages.message_sent": "Przesłano do sieci mesh", + "messages.no_messages": "Brak wiadomości", + "messages.message_input_placeholder": "Wpisz wiadomość...", + "messages.error_purging": "Wystąpił błąd podczas usuwania wiadomości. Spróbuj ponownie.", + "messages.purged_success": "Wiadomości zostały usunięte. Odświeżanie...", + "messages.direct_messages": "Wiadomości prywatne", + "messages.select_recipient": "Wybierz odbiorcę", + "messages.permission_denied": "Do wyświetlania wiadomości prywatnych wymagane jest uprawnienie messages:read.", + "messages.nodes_header": "Węzły", + "messages.mark_all_read_title": "Oznacz wszystkie wiadomości prywatne jako przeczytane", + "messages.mark_all_read_button": "Oznacz wszystkie jako przeczytane", + "messages.filter_placeholder": "Filtruj węzły...", + "messages.filter_conversations_title": "Filtruj rozmowy", + "messages.all_conversations": "Wszystkie rozmowy", + "messages.unread_only": "Tylko nieprzeczytane", + "messages.recent_24h": "Ostatnie 24 godziny", + "messages.by_hops": "Według liczby przeskoków (najbliższe najpierw)", + "messages.favorites_only": "Tylko ulubione", + "messages.with_position": "Z pozycją", + "messages.exclude_infrastructure": "Wyklucz infrastrukturę", + "messages.node_fallback": "Węzeł {{nodeNum}}", + "messages.key_security_issue": "Wykryto problem z bezpieczeństwem klucza", + "messages.pin_node": "Przypnij na górze listy", + "messages.unpin_node": "Odepnij od góry listy", + "messages.no_messages_preview": "Brak wiadomości", + "messages.total_messages_title": "Łączna liczba wiadomości", + "messages.no_nodes": "Brak dostępnych węzłów", + "messages.connect_to_view": "Połącz się z węzłem Meshtastic, aby wyświetlić wiadomości", + "messages.select_conversation": "Wybierz rozmowę...", + "messages.conversation_with": "Rozmowa z {{name}}", + "messages.last_seen": "Ostatnio widziany: {{time}}", + "messages.mark_read_conversation_title": "Oznacz wszystkie wiadomości w tej rozmowie jako przeczytane", + "messages.mark_read_button": "Oznacz wszystkie jako przeczytane", + "messages.security_risk": "Ten węzeł stanowi zagrożenie dla bezpieczeństwa", + "messages.key_mismatch": "Wykryto niezgodność klucza — wysyłanie wiadomości może się nie powieść", + "messages.traceroute_badge": "ŚLEDZENIE TRASY", + "messages.empty_message": "Pusta wiadomość", + "messages.message_unavailable": "Wiadomość jest niedostępna", + "messages.reply_button_title": "Odpowiedz na tę wiadomość", + "messages.resend_button_title": "Wyślij tę wiadomość ponownie", + "messages.emoji_button_title": "Zareaguj emoji", + "messages.insert_emoji_button_title": "Wstaw emoji", + "messages.delete_button_title": "Usuń tę wiadomość", + "messages.reaction_tooltip": "Od: {{name}} — kliknij, aby wysłać taką samą reakcję", + "messages.no_dm_yet": "Brak wiadomości prywatnych z tym węzłem", + "messages.replying_to": "Odpowiedź do: {{name}}", + "messages.cancel_reply_title": "Anuluj odpowiedź", + "messages.dm_placeholder": "Wyślij wiadomość prywatną do {{name}}...", + "messages.traceroute_button": "Śledzenie trasy", + "messages.traceroute_title": "Uruchom śledzenie trasy do tego węzła", + "messages.show_on_map": "Pokaż na mapie", + "messages.show_on_map_title": "Pokaż ten węzeł na mapie", + "messages.history_button": "Pokaż historię", + "messages.history_title": "Wyświetl historię śledzenia tras do tego węzła", + "messages.exchange_position": "Wymień pozycję", + "messages.exchange_position_title": "Zażądaj wymiany pozycji z tym węzłem", + "messages.exchange_position_channel": "Wybierz kanał do wymiany pozycji", + "messages.exchange_node_info": "Wymień informacje o węźle", + "messages.exchange_node_info_title": "Zażądaj wymiany informacji o węźle (uruchamia wymianę kluczy)", + "messages.request_neighbor_info": "Poproś o listę sąsiadów", + "messages.request_neighbor_info_title": "Zażądaj informacji o sąsiadach tego węzła (wymaga włączonego modułu NeighborInfo)", + "messages.request_telemetry": "Zażądaj telemetrii", + "messages.scan_for_admin": "Sprawdź zdalne zarządzanie", + "messages.scan_admin_success": "Węzeł umożliwia zdalne zarządzanie! Oprogramowanie układowe: {{firmware}}", + "messages.scan_admin_no_access": "Węzeł nie umożliwia zdalnego zarządzania", + "messages.scan_admin_failed": "Nie udało się sprawdzić dostępu administracyjnego do węzła", + "messages.scan_admin_permission_denied": "Brak uprawnień do sprawdzania dostępu administracyjnego", + "messages.select_telemetry_type": "Wybierz rodzaj telemetrii, której chcesz zażądać od {{nodeName}}", + "messages.telemetry_type_device": "Metryki urządzenia", + "messages.telemetry_type_device_desc": "Akumulator, napięcie, wykorzystanie kanału i czas działania", + "messages.telemetry_type_environment": "Metryki środowiskowe", + "messages.telemetry_type_environment_desc": "Temperatura, wilgotność, ciśnienie, wiatr, opady, czujniki światła i warunki glebowe", + "messages.telemetry_type_air_quality": "Metryki jakości powietrza", + "messages.telemetry_type_air_quality_desc": "Poziomy PM2.5, PM10 i CO₂", + "messages.telemetry_type_power": "Metryki zasilania", + "messages.telemetry_type_power_desc": "Wielokanałowe pomiary napięcia i prądu", + "messages.actions_menu": "Działania", + "messages.actions_menu_title": "Menu działań węzła", + "messages.purge_data": "Usuń dane", + "messages.ignore_node": "Ignoruj węzeł", + "messages.ignore_node_title": "Ignoruj ten węzeł (ukryj go na mapie i liście węzłów)", + "messages.unignore_node": "Przestań ignorować węzeł", + "messages.unignore_node_title": "Ponownie pokaż ten węzeł na mapie i liście węzłów", + "messages.traceroute_forward": "→ Trasa wychodząca:", + "messages.traceroute_return": "← Trasa powrotna:", + "messages.last_traced": "Ostatnie śledzenie: {{time}}", + "messages.traceroute_failed": "Niepowodzenie", + "messages.neighbor_info_title": "Informacje o sąsiadach", + "messages.purge_neighbors": "Usuń", + "messages.purge_neighbors_tooltip": "Usuń informacje o sąsiadach tego węzła", + "messages.confirm_purge_neighbors": "Czy na pewno chcesz usunąć wszystkie informacje o sąsiadach tego węzła?", + "messages.neighbor_info_purged": "Informacje o sąsiadach zostały usunięte", + "messages.neighbor_info_purge_failed": "Nie udało się usunąć informacji o sąsiadach", + "messages.resize_handle_title": "Przeciągnij, aby zmienić rozmiar", + "messages.security_issue_title": "Problem z bezpieczeństwem", + "messages.issue_details": "Szczegóły problemu", + "messages.low_entropy_warning": "Ten węzeł używa znanego klucza kryptograficznego o niskiej entropii. ", + "messages.shared_key_with": "Ten klucz jest współdzielony z: ", + "messages.switch_to_title": "Przełącz na {{name}}", + "messages.select_from_list": "Wybierz rozmowę z listy, aby wyświetlić wiadomości", + "messages.packet_type_distribution": "Rozkład typów pakietów (24 godz.)", + "channels.title": "Kanały", + "channels.title_with_count": "Kanały ({{count}})", + "channels.select_channel": "Wybierz kanał", + "channels.show_channel_info": "Pokaż informacje o kanale", + "channels.info_link": "informacje", + "channels.show_mqtt_messages": "Pokaż wiadomości MQTT/Bridge", + "channels.encrypted_secure": "Zaszyfrowany unikatowym kluczem", + "channels.encrypted_default": "Zaszyfrowany domyślnym kluczem (niezabezpieczony)", + "channels.unencrypted": "Niezaszyfrowany", + "channels.message_input_placeholder": "Wpisz wiadomość...", + "channels.psk": "Klucz współdzielony", + "channels.psk_base64": "PSK (Base64):", + "channels.channel_configuration": "Konfiguracja kanału", + "channels.primary": "Główny", + "channels.secondary": "Dodatkowy", + "channels.channel_fallback": "Kanał {{channelNum}}", + "channels.mqtt_uplink": "Wysyłanie do MQTT", + "channels.mqtt_downlink": "Odbieranie z MQTT", + "channels.mark_all_read_title": "Oznacz wszystkie wiadomości na tym kanale jako przeczytane", + "channels.mark_all_read_button": "Oznacz wszystkie jako przeczytane", + "channels.sender_click_title": "Kliknij, aby wyświetlić szczegóły {{name}}", + "channels.empty_message": "Pusta wiadomość", + "channels.message_unavailable": "Wiadomość jest niedostępna", + "channels.reply_button_title": "Odpowiedz na tę wiadomość", + "channels.resend_button_title": "Wyślij tę wiadomość ponownie", + "channels.emoji_button_title": "Zareaguj emoji", + "channels.insert_emoji_button_title": "Wstaw emoji", + "channels.delete_button_title": "Usuń tę wiadomość", + "channels.server_decrypted_readonly": "Odszyfrowane przez serwer (tylko do odczytu — nie można odpowiedzieć)", + "channels.channel_database_readonly": "Baza kanałów — tylko do odczytu (odszyfrowane przez serwer)", + "channels.reaction_tooltip": "Od: {{name}} — kliknij, aby wysłać taką samą reakcję", + "channels.no_messages_yet": "Na tym kanale nie ma jeszcze wiadomości", + "channels.replying_to": "Odpowiedź do: {{name}}", + "channels.cancel_reply_title": "Anuluj odpowiedź", + "channels.send_placeholder": "Wyślij wiadomość do {{name}}...", + "channels.select_channel_prompt": "Wybierz kanał powyżej, aby wyświetlać i wysyłać wiadomości", + "channels.no_configs_yet": "Nie wykryto jeszcze konfiguracji kanałów. Oczekiwanie na aktualizacje z sieci mesh...", + "channels.connect_to_view": "Połącz się z węzłem Meshtastic, aby wyświetlić konfiguracje kanałów", + "channels.info_modal_title": "Informacje o kanale", + "channels.channel_name": "Nazwa kanału:", + "channels.channel_number": "Numer kanału:", + "channels.encryption": "Szyfrowanie:", + "channels.status_secure": "🔒 Zaszyfrowany (bezpieczny)", + "channels.status_default_key": "🔐 Domyślny klucz (niezabezpieczony)", + "channels.status_unencrypted": "🔓 Niezaszyfrowany", + "channels.hide": "Ukryj", + "channels.show": "Pokaż", + "channels.enabled": "✓ Włączony", + "channels.disabled": "✗ Wyłączony", + "channels.discovered": "Wykryto:", + "channels.last_updated": "Ostatnia aktualizacja:", + "channels.purge_messages_title": "Usuń wszystkie wiadomości z tego kanału", + "channels.purge_all_messages": "Usuń wszystkie wiadomości", + "channels.cannot_undo": "Tej operacji nie można cofnąć", + "channels.virtual_channel_info_title": "Informacje o kanale wirtualnym", + "channels.description": "Opis:", + "channels.source": "Źródło:", + "channels.channel_database": "Baza kanałów", + "channels.access_mode": "Tryb dostępu:", + "channels.read_only": "Tylko do odczytu", + "channels.packets_decrypted": "Odszyfrowane pakiety:", + "channels.location_sharing": "Udostępnianie lokalizacji", + "channels.location_auto_position": "Aktywne (automatyczne aktualizacje pozycji)", + "channels.location_enabled": "Włączone (lokalizacja jest udostępniana)", + "channels.location_disabled": "Wyłączone", + "dashboard.add_widget": "Dodaj widżet", + "dashboard.remove_widget": "Usuń widżet", + "dashboard.remove_from_dashboard": "Usuń z panelu głównego", + "dashboard.error_loading": "Błąd: {{error}}", + "dashboard.loading_chart": "Ładowanie...", + "dashboard.error_chart": "Błąd podczas ładowania danych", + "dashboard.no_chart_data": "Brak dostępnych danych", + "dashboard.no_data": "Kliknij powyżej „+ Dodaj widżet” albo oznacz gwiazdką wykresy telemetrii na karcie Węzły", + "dashboard.add_widget_modal": "Dodaj widżet", + "dashboard.widget_type": "Typ widżetu", + "dashboard.select_node": "Wybierz węzeł", + "dashboard.select_metric": "Wybierz metrykę", + "settings.title": "Ustawienia", + "settings.language": "Język", + "settings.languageDescription": "Wybierz preferowany język", + "settings.language_contribute": "Nie widzisz swojego języka? Pomóż przetłumaczyć MeshMonitor w serwisie", + "settings.temperature_unit": "Jednostka temperatury", + "settings.distance_unit": "Jednostka odległości", + "settings.time_format": "Format czasu", + "settings.date_format": "Format daty", + "settings.telemetry_visualization_hours": "Zakres wykresów telemetrii w godzinach", + "settings.favorite_telemetry_storage_days": "Liczba dni przechowywania ulubionej telemetrii", + "settings.max_node_age": "Maksymalny wiek węzła (w godzinach)", + "settings.map_tileset": "Zestaw kafelków mapy", + "settings.map_pin_style": "Styl znaczników na mapie", + "settings.theme": "Motyw", + "settings.solar_monitoring_enabled": "Włącz monitorowanie instalacji solarnej", + "settings.solar_monitoring_latitude": "Szerokość geograficzna", + "settings.solar_monitoring_longitude": "Długość geograficzna", + "settings.solar_monitoring_azimuth": "Azymut", + "settings.solar_monitoring_declination": "Deklinacja", + "settings.latitude_validation": "Szerokość geograficzna musi mieścić się w zakresie od -90 do 90", + "settings.longitude_validation": "Długość geograficzna musi mieścić się w zakresie od -180 do 180", + "settings.solar_estimates_triggered": "Rozpoczęto pobieranie prognoz uzysku energii słonecznej!", + "settings.failed_solar_estimates": "Nie udało się rozpocząć pobierania prognoz uzysku energii słonecznej", + "settings.saved_success": "Ustawienia zostały zapisane!", + "settings.saved_restart_required": "Ustawienia zostały zapisane! Aby zmiany zaczęły obowiązywać, należy ponownie uruchomić kontener.", + "settings.saved_schedule_applied": "Ustawienia zostały zapisane! Zmiany harmonogramu zastosowano natychmiast.", + "settings.failed_save": "Nie udało się zapisać ustawień. Spróbuj ponownie.", + "settings.insufficient_permissions_save": "Brak uprawnień do zapisywania ustawień", + "settings.reset_to_defaults": "Przywrócono ustawienia domyślne!", + "settings.failed_reset": "Nie udało się przywrócić ustawień domyślnych. Spróbuj ponownie.", + "settings.display_preferences": "Preferencje wyświetlania", + "settings.map_preferences": "Preferencje mapy", + "settings.data_preferences": "Preferencje danych", + "settings.celsius": "Stopnie Celsjusza", + "settings.fahrenheit": "Stopnie Fahrenheita", + "settings.kilometers": "Kilometry", + "settings.miles": "Mile", + "settings.24_hour": "Format 24-godzinny", + "settings.reset_ui_positions": "Resetuj położenie elementów interfejsu", + "settings.reset_ui_positions_description": "Przywróć domyślne położenie przeciąganych elementów interfejsu (listy węzłów, funkcji mapy, legendy przeskoków i wyboru kafelków).", + "settings.reset_ui_positions_button": "Resetuj położenie", + "settings.reset_ui_positions_success": "Przywrócono domyślne położenie elementów interfejsu. Odśwież stronę, aby zobaczyć zmiany.", + "configuration.title": "Konfiguracja urządzenia", + "configuration.node_identity": "Tożsamość węzła", + "configuration.long_name": "Długa nazwa", + "configuration.long_name_help": "Pełna nazwa węzła (maksymalnie 40 znaków)", + "configuration.long_name_placeholder": "Mój węzeł Meshtastic", + "configuration.short_name": "Krótka nazwa", + "configuration.short_name_help": "Krótki identyfikator (maksymalnie 4 znaki)", + "configuration.short_name_placeholder": "MESH", + "configuration.unmessagable": "Blokowanie wiadomości prywatnych", + "configuration.unmessagable_help": "Uniemożliw innym wysyłanie wiadomości prywatnych do tego węzła", + "configuration.save_node_names": "Zapisz nazwy węzła", + "configuration.device_configuration": "Konfiguracja urządzenia", + "configuration.lora_configuration": "Konfiguracja LoRa", + "configuration.position_configuration": "Konfiguracja pozycji", + "configuration.mqtt_configuration": "Konfiguracja MQTT", + "configuration.neighbor_info_configuration": "Konfiguracja NeighborInfo", + "configuration.channels_configuration": "Konfiguracja kanałów", + "configuration.import_export": "Import i eksport konfiguracji", + "configuration.import": "Importuj", + "configuration.export": "Eksportuj", + "configuration.loading": "Ładowanie konfiguracji...", + "configuration.saved_device": "Zapisano konfigurację urządzenia! Urządzenie zostanie ponownie uruchomione...", + "configuration.saved_lora": "Zapisano konfigurację LoRa! Urządzenie zostanie ponownie uruchomione...", + "configuration.saved_position": "Zapisano konfigurację pozycji! Urządzenie zostanie ponownie uruchomione...", + "configuration.saved_mqtt": "Zapisano konfigurację MQTT! Urządzenie zostanie ponownie uruchomione...", + "configuration.saved_neighbor_info": "Zapisano konfigurację NeighborInfo! Urządzenie zostanie ponownie uruchomione...", + "configuration.saved_node_names": "Zapisano nazwy węzła! Urządzenie zostanie ponownie uruchomione...", + "configuration.import_success": "Konfiguracja została zaimportowana", + "configuration.reboot_success": "Urządzenie zostało ponownie uruchomione!", + "configuration.reboot_initiated": "Rozpoczęto ponowne uruchamianie urządzenia, ale nie udało się ponownie nawiązać połączenia", + "configuration.failed_save": "Błąd podczas zapisywania konfiguracji urządzenia", + "configuration.failed_save_lora": "Błąd podczas zapisywania konfiguracji LoRa", + "configuration.failed_save_position": "Błąd podczas zapisywania konfiguracji pozycji", + "configuration.failed_save_mqtt": "Błąd podczas zapisywania konfiguracji MQTT", + "configuration.failed_save_neighbor_info": "Błąd podczas zapisywania konfiguracji NeighborInfo", + "configuration.node_info_broadcast_min": "Interwał rozgłaszania informacji o węźle ustawiono na wartość minimalną: 3600 sekund (1 godzina)", + "configuration.position_broadcast_min": "Interwał rozgłaszania pozycji ustawiono na wartość minimalną: 32 sekundy", + "configuration.neighbor_info_min": "Interwał NeighborInfo ustawiono na wartość minimalną: 14400 sekund (4 godziny)", + "notifications.enable_web_push": "Włącz internetowe powiadomienia push", + "notifications.enable_apprise": "Włącz powiadomienia Apprise", + "notifications.enabled_channels": "Włączone kanały", + "notifications.enable_direct_messages": "Włącz wiadomości prywatne", + "notifications.notify_on_emoji": "Powiadamiaj o reakcjach emoji", + "notifications.notify_on_new_node": "Powiadamiaj o nowych węzłach", + "notifications.notify_on_traceroute": "Powiadamiaj o śledzeniu trasy", + "notifications.whitelist": "Lista dozwolonych", + "notifications.blacklist": "Lista blokowanych", + "notifications.test_notification": "Powiadomienie testowe", + "notifications.subscription_status": "Stan subskrypcji", + "notifications.requested_permission": "Żądane uprawnienie", + "notifications.apprise_urls": "Adresy URL Apprise", + "notifications.vapid_configuration": "Konfiguracja VAPID", + "notifications.vapid_subject": "Podmiot VAPID", + "notifications.vapid_subject_update": "Zaktualizuj podmiot VAPID", + "notifications.failed_preferences": "Nie udało się zapisać preferencji", + "notifications.failed_apprise": "Nie udało się skonfigurować adresów URL Apprise", + "notifications.failed_test": "Nie udało się wysłać powiadomienia testowego", + "notifications.failed_subscribe": "Nie udało się zasubskrybować powiadomień push", + "notifications.failed_unsubscribe": "Nie udało się anulować subskrypcji", + "notifications.preferences_saved": "Preferencje powiadomień zostały zapisane", + "notifications.alert_save_failed": "Nie udało się zapisać preferencji powiadomień", + "notifications.alert_not_supported": "Twoja przeglądarka nie obsługuje powiadomień push", + "notifications.alert_permission_failed": "Nie udało się poprosić o uprawnienie do wyświetlania powiadomień. Spróbuj ponownie.", + "notifications.alert_grant_permission": "Najpierw zezwól na wyświetlanie powiadomień", + "notifications.alert_subscribe_failed": "Nie udało się zasubskrybować powiadomień push: {{error}}", + "notifications.alert_unsubscribe_failed": "Nie udało się anulować subskrypcji powiadomień push", + "notifications.alert_update_email_failed": "Nie udało się zaktualizować kontaktowego adresu e-mail", + "users.username": "Nazwa użytkownika", + "users.password": "Hasło", + "users.is_admin": "Administrator", + "users.failed_permissions": "Nie udało się wczytać uprawnień", + "users.failed_update": "Nie udało się zaktualizować uprawnień. Spróbuj ponownie.", + "users.insufficient_permissions": "Brak uprawnień do zmiany uprawnień użytkownika", + "users.password_required": "Oba pola hasła są wymagane", + "users.password_mismatch": "Hasła nie są zgodne", + "users.password_set_success": "Hasło zostało ustawione", + "users.insufficient_deactivate": "Brak uprawnień do dezaktywowania użytkownika", + "audit.title": "Dziennik audytu", + "audit.loading": "Ładowanie dziennika audytu...", + "audit.no_permission": "Nie masz uprawnień do wyświetlania dziennika audytu.", + "audit.failed_load": "Nie udało się wczytać dziennika audytu", + "audit.failed_stats": "Nie udało się pobrać statystyk audytu", + "audit.failed_fetch": "Nie udało się pobrać wpisów dziennika audytu", + "audit.failed_fetch_users": "Nie udało się pobrać użytkowników", + "audit.export_csv": "Eksportuj CSV", + "audit.export_success": "Dziennik audytu został wyeksportowany", + "audit.export_failed": "Nie udało się wyeksportować dziennika audytu", + "audit.total_events_30_days": "Łączna liczba zdarzeń (30 dni)", + "audit.top_action": "Najczęstsze działanie", + "audit.most_active_user": "Najaktywniejszy użytkownik", + "audit.na": "Nie dotyczy", + "audit.filters": "Filtry", + "audit.clear_filters": "Wyczyść filtry", + "audit.user": "Użytkownik", + "audit.all_users": "Wszyscy użytkownicy", + "audit.action": "Działanie", + "audit.all_actions": "Wszystkie działania", + "audit.resource": "Zasób", + "audit.all_resources": "Wszystkie zasoby", + "audit.search": "Szukaj", + "audit.search_placeholder": "Szukaj w szczegółach...", + "audit.start_date": "Data początkowa", + "audit.end_date": "Data końcowa", + "audit.per_page": "Na stronę:", + "audit.ip_address": "Adres IP", + "audit.timestamp": "Znacznik czasu", + "audit.details": "Szczegóły", + "audit.system": "System", + "audit.no_entries": "Nie znaleziono wpisów dziennika audytu", + "audit.value_before": "Przed:", + "audit.value_after": "Po:", + "audit.showing": "Wyświetlono wpisy od {{start}} do {{end}} z {{total}}", + "audit.page": "Strona {{current}} z {{total}}", + "audit.previous": "Poprzednia", + "audit.next": "Następna", + "audit.source": "Źródło", + "audit.all_sources": "Wszystkie źródła", + "audit.ui_only": "Tylko interfejs użytkownika", + "audit.api_only": "Tylko token API", + "security.title": "Skaner bezpieczeństwa", + "security.description": "Monitoruj problemy z bezpieczeństwem kluczy szyfrujących, w tym klucze o niskiej entropii i klucze zduplikowane", + "security.loading": "Ładowanie danych bezpieczeństwa...", + "security.error_loading": "Błąd: {{error}}", + "security.retry": "Ponów", + "security.export": "Eksportuj", + "security.export_as_csv": "Eksportuj jako CSV", + "security.export_as_json": "Eksportuj jako JSON", + "security.export_results": "Eksportuj wyniki skanowania bezpieczeństwa", + "security.scanner_status": "Stan skanera", + "security.status": "Stan", + "security.scanning_now": "Skanowanie...", + "security.active": "Aktywny", + "security.stopped": "Zatrzymany", + "security.scan_interval": "Interwał skanowania", + "security.every_hours": "Co {{hours}} godz.", + "security.last_scan": "Ostatnie skanowanie", + "security.run_scan_now": "Uruchom skanowanie teraz", + "security.scanning": "Skanowanie...", + "security.nodes_with_issues": "Węzły z problemami", + "security.have_low_entropy": "Mają klucze o niskiej entropii", + "security.have_duplicate": "Mają zduplikowane klucze", + "security.both_issues_note": "Uwaga: niektóre węzły mają zarówno klucze o niskiej entropii, jak i zduplikowane klucze", + "security.no_issues": "Nie wykryto problemów z bezpieczeństwem.", + "security.scanner_checks": "Skaner sprawdza w całej sieci mesh znane klucze o niskiej entropii oraz klucze zduplikowane.", + "security.low_entropy_keys": "Klucze o niskiej entropii", + "security.low_entropy_count": "Klucze o niskiej entropii ({{count}})", + "security.duplicate_keys": "Zduplikowane klucze", + "security.duplicate_count": "Zduplikowane klucze (liczba węzłów: {{count}})", + "security.last_seen": "Ostatnio widziany: {{time}}", + "security.badge_low_entropy": "Niska entropia", + "security.badge_duplicate": "Duplikat", + "security.send_notification_title": "Wyślij do tego węzła powiadomienie dotyczące bezpieczeństwa", + "security.last_heard": "Ostatnio odebrano", + "security.details": "Szczegóły", + "security.public_key": "Klucz publiczny", + "security.recommendations": "Zalecenia", + "security.recommendation_weak_key": "Ten węzeł używa znanego słabego klucza szyfrującego, który można łatwo złamać.", + "security.recommendation_shared_key": "Ten klucz jest współdzielony z innymi węzłami, co ogranicza prywatność i bezpieczeństwo.", + "security.recommendation_reconfigure": "Rozważ ponowne skonfigurowanie węzła z bezpiecznym, losowo wygenerowanym kluczem szyfrującym.", + "security.recommendation_docs": "Zapoznaj się z dokumentacją Meshtastic dotyczącą bezpiecznego generowania kluczy.", + "security.shared_key": "Klucz współdzielony", + "security.nodes_sharing": "Liczba węzłów współdzielących ten klucz: {{count}}", + "security.group_recommendation": "Zalecenie:", + "security.group_recommendation_text": "Każdy z tych węzłów używa tego samego klucza szyfrującego, co zagraża bezpieczeństwu i prywatności sieci. Skonfiguruj każdy węzeł z unikatowym, losowo wygenerowanym kluczem szyfrującym.", + "security.failed_scan": "Nie udało się rozpocząć skanowania", + "security.failed_load": "Nie udało się wczytać danych bezpieczeństwa", + "security.failed_export": "Nie udało się wyeksportować danych", + "security.no_permission_messages": "Do wyświetlania wiadomości prywatnych wymagane jest uprawnienie messages:read", + "security.no_permission_send": "Do wysyłania powiadomień wymagane jest uprawnienie messages:read", + "security.never": "Nigdy", + "security.just_now": "Przed chwilą", + "security.minutes_ago": "{{count}} min temu", + "security.hours_ago": "{{count}} godz. temu", + "security.days_ago": "{{count}} dni temu", + "security.have_excessive_packets": "Nadmierna liczba pakietów", + "security.excessive_packets_count": "Nadmierna liczba pakietów (węzły: {{count}})", + "security.badge_excessive_packets": "Nadmierna liczba pakietów", + "security.packets_per_hour": "pakietów/godz.", + "security.packet_rate": "Częstotliwość pakietów", + "security.rate_last_checked": "Ostatnia kontrola częstotliwości", + "security.recommendation_excessive_packets": "Ten węzeł wysyła wyjątkowo dużo pakietów, co może wskazywać na spam lub nieprawidłową konfigurację urządzenia.", + "security.recommendation_investigate_spam": "Sprawdź, czy ten ruch jest prawidłowy, czy też węzeł wymaga ponownej konfiguracji.", + "security.top_broadcasters": "Najaktywniejsze węzły nadające (ostatnia godzina)", + "security.top_broadcasters_description": "Węzły z największą liczbą pakietów w ciągu ostatniej godziny, niezależnie od tego, czy zostały uznane za spam.", + "security.rank": "Pozycja", + "security.node": "Węzeł", + "security.node_id": "Identyfikator węzła", + "security.packets_hour": "Pakiety/godz.", + "security.have_time_offset": "Przesunięcie czasu", + "security.time_offset_count": "Przesunięcie czasu (węzły: {{count}})", + "security.time_offset_description": "Węzły, których zegary są znacznie rozbieżne z czasem serwera. Może to wskazywać na błędną konfigurację urządzenia lub problemy z GPS.", + "security.badge_time_offset": "Przesunięcie czasu", + "security.clock_offset": "Przesunięcie zegara", + "security.node_reported_time": "Czas zgłoszony przez węzeł", + "security.unknown": "Nieznany", + "security.offset_synchronized": "Zsynchronizowany", + "security.offset_ahead": "{{value}} do przodu", + "security.offset_behind": "{{value}} do tyłu", + "security.offset_seconds_one": "{{count}} sekunda", + "security.offset_seconds_other": "{{count}} sekund", + "security.offset_minutes_one": "{{count}} minuta", + "security.offset_minutes_other": "{{count}} minut", + "security.offset_hours_one": "{{count}} godzina", + "security.offset_hours_other": "{{count}} godzin", + "security.offset_days_one": "{{count}} dzień", + "security.offset_days_other": "{{count}} dni", + "security.recommendation_time_offset": "Zegar tego węzła znacznie różni się od czasu serwera, co może wpływać na kolejność wiadomości i wykrywanie duplikatów.", + "security.recommendation_check_gps": "Upewnij się, że węzeł ma dostęp do GPS albo ustawioną prawidłową strefę czasową. Ponowne uruchomienie urządzenia może usunąć tymczasowy dryf zegara.", + "security.key_mismatch_title": "Zdarzenia niezgodności kluczy", + "security.key_mismatch_empty": "Nie wykryto zdarzeń niezgodności kluczy", + "security.key_mismatch_detected": "Wykryto", + "security.key_mismatch_old_key": "Stary klucz", + "security.key_mismatch_new_key": "Nowy klucz", + "security.key_mismatch_status": "Stan", + "security.key_mismatch_resolved": "Rozwiązano", + "security.key_mismatch_status_pending": "Oczekuje", + "security.key_mismatch_status_purged": "Usunięto", + "security.key_mismatch_status_fixed": "Naprawiono", + "security.key_mismatch_status_exhausted": "Wyczerpano próby", + "errors.generic": "Wystąpił błąd", + "errors.failed_operation": "Operacja nie powiodła się", + "errors.invalid_input": "Nieprawidłowe dane wejściowe", + "errors.unauthorized": "Brak uwierzytelnienia", + "errors.forbidden": "Dostęp zabroniony", + "errors.not_found": "Nie znaleziono", + "errors.server_error": "Błąd serwera", + "errors.network_error": "Błąd sieci", + "errors.timeout": "Przekroczono czas oczekiwania na żądanie", + "errors.invalid_cron": "Nie można zapisać: nieprawidłowe wyrażenie cron", + "errors.unknown": "Nieznany błąd", + "errors.network": "Błąd sieci", + "errors.failed_fetch": "Nie udało się pobrać danych", + "errors.failed_save": "Nie udało się zapisać", + "errors.failed_delete": "Nie udało się usunąć", + "errors.failed_update": "Nie udało się zaktualizować", + "toast.api_token_generated": "Token API został wygenerowany", + "toast.api_token_revoked": "Token API został unieważniony", + "toast.api_token_copied": "Token skopiowano do schowka", + "toast.copied_clipboard": "Skopiowano do schowka", + "toast.result_copied": "Wynik skopiowano do schowka", + "toast.record_holder_cleared": "Rekordzista został usunięty", + "toast.record_holder_failed": "Nie udało się usunąć rekordzisty. Spróbuj ponownie.", + "toast.record_holder_no_permission": "Brak wystarczających uprawnień do usunięcia rekordzisty", + "toast.node_database_purged": "Baza węzłów została wyczyszczona!", + "toast.nodes_purged": "Lista węzłów i dane śledzenia tras zostały usunięte. Odświeżanie...", + "toast.node_purge_failed": "Błąd podczas usuwania węzłów. Spróbuj ponownie.", + "toast.telemetry_purged": "Dane telemetryczne zostały usunięte. Odświeżanie...", + "toast.telemetry_purge_failed": "Błąd podczas usuwania telemetrii. Spróbuj ponownie.", + "toast.telemetry_purge_no_permission": "Brak wystarczających uprawnień do usunięcia danych telemetrycznych", + "toast.traceroutes_purged": "Dane śledzenia tras zostały usunięte. Odświeżanie...", + "toast.traceroutes_purge_failed": "Błąd podczas usuwania danych śledzenia tras. Spróbuj ponownie.", + "toast.script_deleted": "Skrypt został usunięty", + "toast.script_imported": "Skrypt został zaimportowany", + "toast.no_scripts_export": "Brak skryptów do wyeksportowania", + "toast.no_scripts_selected": "Nie wybrano skryptów do wyeksportowania", + "toast.favorite_saved": "Dodano do ulubionych", + "toast.favorite_removed": "Usunięto z ulubionych", + "toast.favorite_save_failed": "Nie udało się dodać do ulubionych. Spróbuj ponownie.", + "toast.favorite_remove_failed": "Błąd podczas usuwania z ulubionych", + "toast.message_sent": "Wiadomość została wysłana", + "toast.message_send_failed": "Nie udało się wysłać wiadomości", + "toast.message_deleted": "Wiadomość została usunięta", + "toast.failed_load_older_messages": "Nie udało się wczytać starszych wiadomości", + "toast.disconnected_from_node": "Rozłączono z węzłem", + "toast.failed_disconnect": "Nie udało się rozłączyć", + "toast.reconnecting_to_node": "Ponowne łączenie z węzłem...", + "toast.failed_reconnect": "Nie udało się ponownie połączyć", + "toast.failed_connection_info": "Nie udało się pobrać informacji o połączeniu", + "toast.failed_delete_message": "Nie udało się usunąć wiadomości: {{error}}", + "toast.purged_messages_channel": "Usunięto {{count}} wiadomości z kanału {{channel}}", + "toast.purged_messages_dm": "Usunięto {{count}} wiadomości z węzłem {{node}}", + "toast.purged_traceroutes": "Usunięto {{count}} zapisów śledzenia trasy dla węzła {{node}}", + "toast.purged_telemetry": "Usunięto {{count}} rekordów telemetrii dla węzła {{node}}", + "toast.purged_position_history": "Usunięto {{count}} rekordów pozycji dla węzła {{node}}", + "toast.failed_purge_messages": "Nie udało się usunąć wiadomości: {{error}}", + "toast.failed_purge_traceroutes": "Nie udało się usunąć danych śledzenia tras: {{error}}", + "toast.failed_purge_telemetry": "Nie udało się usunąć telemetrii: {{error}}", + "toast.failed_purge_position_history": "Nie udało się usunąć historii pozycji: {{error}}", + "toast.failed_delete_node": "Nie udało się usunąć węzła: {{error}}", + "toast.failed_purge_node_device": "Nie udało się usunąć węzła z urządzenia: {{error}}", + "toast.deleted_node": "Usunięto {{node}} — wiadomości: {{messages}}, trasy: {{traceroutes}}, rekordy telemetrii: {{telemetry}}", + "toast.purged_node_device": "Usunięto {{node}} z urządzenia i bazy danych — wiadomości: {{messages}}, trasy: {{traceroutes}}, rekordy telemetrii: {{telemetry}}", + "toast.insufficient_permissions_favorites": "Brak wystarczających uprawnień do zmiany ulubionych", + "toast.failed_update_favorite": "Nie udało się zmienić stanu ulubionych. Spróbuj ponownie.", + "toast.insufficient_permissions_ignored": "Brak wystarczających uprawnień do zmiany stanu ignorowania", + "toast.failed_update_ignored": "Nie udało się zmienić stanu ignorowania. Spróbuj ponownie.", + "toast.insufficient_permissions_hide_from_map": "Brak wystarczających uprawnień do zmiany widoczności na mapie", + "toast.failed_update_hide_from_map": "Nie udało się zmienić widoczności na mapie. Spróbuj ponownie.", + "roles.client": "Klient", + "roles.client_mute": "Klient wyciszony", + "roles.router": "Router", + "roles.router_client": "Router z funkcją klienta", + "roles.repeater": "Przekaźnik", + "roles.tracker": "Lokalizator", + "roles.sensor": "Czujnik", + "roles.tak": "TAK", + "roles.client_hidden": "Klient ukryty", + "roles.lost_and_found": "Zgubione i znalezione", + "roles.tak_tracker": "Lokalizator TAK", + "roles.router_late": "Router opóźniony", + "roles.client_base": "Klient bazowy", + "hardware.unset": "NIE USTAWIONO", + "hardware.tlora_v2": "TLORA V2", + "hardware.tlora_v1": "TLORA V1", + "hardware.tlora_v2_1_1p6": "TLORA V2.1 1.6", + "hardware.tbeam": "T-Beam", + "hardware.heltec_v2_0": "Heltec V2.0", + "hardware.tbeam_v0p7": "T-Beam V0.7", + "hardware.t_echo": "T-Echo", + "hardware.tlora_v1_1p3": "TLORA V1 1.3", + "hardware.rak4631": "RAK4631", + "hardware.heltec_v2_1": "Heltec V2.1", + "hardware.heltec_v1": "Heltec V1", + "hardware.lilygo_tbeam_s3_core": "LilyGO T-Beam S3 Core", + "hardware.rak11200": "RAK11200", + "hardware.nano_g1": "NANO G1", + "hardware.tlora_v2_1_1p8": "TLORA V2.1 1.8", + "hardware.tlora_t3_s3": "TLORA T3 S3", + "hardware.nano_g1_explorer": "NANO G1 Explorer", + "hardware.nano_g2_ultra": "NANO G2 Ultra", + "hardware.lora_type": "Typ LoRa", + "hardware.wiphone": "WiPhone", + "hardware.wio_wm1110": "WIO WM1110", + "hardware.rak2560": "RAK2560", + "hardware.heltec_hru_3601": "Heltec HRU 3601", + "hardware.heltec_wireless_bridge": "Heltec Wireless Bridge", + "hardware.station_g1": "Station G1", + "hardware.rak11310": "RAK11310", + "hardware.senselora_rp2040": "SenseLoRa RP2040", + "hardware.senselora_s3": "SenseLoRa S3", + "hardware.canaryone": "Canary One", + "hardware.rp2040_lora": "RP2040 LoRa", + "hardware.station_g2": "Station G2", + "hardware.lora_relay_v1": "LoRa Relay V1", + "hardware.nrf52840dk": "NRF52840 DK", + "hardware.ppr": "PPR", + "hardware.genieblocks": "GenieBlocks", + "hardware.nrf52_unknown": "Nieznany NRF52", + "hardware.portduino": "Portduino", + "hardware.android_sim": "Symulator Androida", + "hardware.diy_v1": "DIY V1", + "hardware.nrf52840_pca10059": "NRF52840 PCA10059", + "hardware.dr_dev": "DR Dev", + "hardware.m5stack": "M5Stack", + "hardware.heltec_v3": "Heltec V3", + "hardware.heltec_wsl_v3": "Heltec WSL V3", + "hardware.betafpv_2400_tx": "BetaFPV 2400 TX", + "hardware.betafpv_900_nano_tx": "BetaFPV 900 Nano TX", + "hardware.rpi_pico": "Raspberry Pi Pico", + "hardware.heltec_wireless_tracker": "Heltec Wireless Tracker", + "hardware.heltec_wireless_paper": "Heltec Wireless Paper", + "hardware.t_deck": "T-Deck", + "hardware.t_watch_s3": "T-Watch S3", + "hardware.picomputer_s3": "PiComputer S3", + "hardware.heltec_ht62": "Heltec HT62", + "hardware.ebyte_esp32_s3": "Ebyte ESP32 S3", + "hardware.esp32_s3_pico": "ESP32 S3 Pico", + "hardware.chatter_2": "Chatter 2", + "hardware.heltec_wireless_paper_v1_0": "Heltec Wireless Paper V1.0", + "hardware.heltec_wireless_tracker_v1_0": "Heltec Wireless Tracker V1.0", + "hardware.unphone": "Unphone", + "hardware.td_lorac": "TD LoRaC", + "hardware.cdebyte_eora_s3": "C.Debyte EORA S3", + "hardware.twc_mesh_v4": "TWC Mesh V4", + "hardware.nrf52_promicro_diy": "NRF52 Pro Micro DIY", + "hardware.radiomaster_900_bandit_nano": "RadioMaster 900 Bandit Nano", + "hardware.heltec_capsule_sensor_v3": "Heltec Capsule Sensor V3", + "hardware.heltec_vision_master_t190": "Heltec Vision Master T190", + "hardware.heltec_vision_master_e213": "Heltec Vision Master E213", + "hardware.heltec_vision_master_e290": "Heltec Vision Master E290", + "hardware.heltec_mesh_node_t114": "Heltec Mesh Node T114", + "hardware.sensecap_indicator": "SenseCAP Indicator", + "hardware.tracker_t1000_e": "Tracker T1000-E", + "hardware.rak3172": "RAK3172", + "hardware.wio_e5": "WIO E5", + "hardware.radiomaster_900_bandit": "RadioMaster 900 Bandit", + "hardware.me25ls01_4y10td": "ME25LS01-4Y10TD", + "hardware.rp2040_feather_rfm95": "RP2040 Feather RFM95", + "hardware.m5stack_corebasic": "M5Stack CoreBasic", + "hardware.m5stack_core2": "M5Stack Core2", + "hardware.rpi_pico2": "Raspberry Pi Pico 2", + "hardware.m5stack_cores3": "M5Stack CoreS3", + "hardware.seeed_xiao_s3": "Seeed XIAO S3", + "hardware.ms24sf1": "MS24SF1", + "hardware.tlora_c6": "TLORA C6", + "hardware.wismesh_tap": "WisMesh TAP", + "hardware.routastic": "Routastic", + "hardware.mesh_tab": "Mesh Tab", + "hardware.meshlink": "MeshLink", + "hardware.xiao_nrf52_kit": "XIAO NRF52 Kit", + "hardware.thinknode_m1": "ThinkNode M1", + "hardware.thinknode_m2": "ThinkNode M2", + "hardware.t_eth_elite": "T-Eth Elite", + "hardware.heltec_sensor_hub": "Heltec Sensor Hub", + "hardware.reserved_fried_chicken": "Zarezerwowane (Fried Chicken)", + "hardware.heltec_mesh_pocket": "Heltec Mesh Pocket", + "hardware.seeed_solar_node": "Seeed Solar Node", + "hardware.nomadstar_meteor_pro": "NomadStar Meteor Pro", + "hardware.crowpanel": "CrowPanel", + "hardware.link_32": "Link 32", + "hardware.seeed_wio_tracker_l1": "Seeed WIO Tracker L1", + "hardware.seeed_wio_tracker_l1_eink": "Seeed WIO Tracker L1 E-Ink", + "hardware.muzi_r1_neo": "Muzi R1 Neo", + "hardware.t_deck_pro": "T-Deck Pro", + "hardware.t_lora_pager": "T-LoRa Pager", + "hardware.m5stack_reserved": "M5Stack — zarezerwowane", + "hardware.wismesh_tag": "WisMesh TAG", + "hardware.rak3312": "RAK3312", + "hardware.thinknode_m5": "ThinkNode M5", + "hardware.heltec_mesh_solar": "Heltec Mesh Solar", + "hardware.t_echo_lite": "T-Echo Lite", + "hardware.heltec_v4": "Heltec V4", + "hardware.m5stack_c6l": "M5Stack C6L", + "hardware.m5stack_cardputer_adv": "M5Stack Cardputer Adv", + "hardware.heltec_wireless_tracker_v2": "Heltec Wireless Tracker V2", + "hardware.t_watch_ultra": "T-Watch Ultra", + "hardware.thinknode_m3": "ThinkNode M3", + "hardware.private_hw": "Sprzęt prywatny", + "automation.title": "Automatyzacja", + "automation.auto_acknowledge": "Automatyczne potwierdzanie", + "automation.auto_announce": "Automatyczne ogłoszenia", + "automation.auto_traceroute": "Automatyczne śledzenie trasy", + "automation.auto_localstats": "Automatyczne zdalne statystyki LocalStats", + "automation.auto_welcome": "Automatyczne powitanie", + "automation.auto_responder": "Automatyczna odpowiedź", + "automation.scripts": "Skrypty", + "automation.schedule": "Harmonogram", + "automation.enabled": "Włączone", + "automation.trigger": "Wyzwalacz", + "automation.response": "Odpowiedź", + "automation.add_rule": "Dodaj regułę", + "automation.edit_rule": "Edytuj regułę", + "automation.delete_rule": "Usuń regułę", + "automation.test_rule": "Przetestuj regułę", + "filters.node_incomplete": "Pokaż niekompletne węzły", + "filters.node_mobile": "Węzły mobilne", + "filters.node_with_telemetry": "Z telemetrią", + "filters.node_with_weather": "Z danymi pogodowymi", + "filters.node_with_pkc": "Z PKC", + "filters.favorites_only": "Tylko ulubione", + "filters.online_only": "Tylko online", + "modals.add_widget": "Dodaj widżet", + "modals.confirm_delete": "Potwierdź usunięcie", + "modals.confirm_title": "Czy na pewno?", + "modals.import_config": "Importuj konfigurację", + "modals.export_config": "Eksportuj konfigurację", + "modals.traceroute_history": "Historia śledzenia tras", + "modals.view_traceroute_history": "Wyświetl historię śledzenia tras do tego węzła", + "modals.import_script": "Importuj skrypt", + "modals.export_scripts": "Eksportuj skrypty", + "modals.delete_script": "Usuń skrypt", + "modals.create_user": "Utwórz użytkownika", + "modals.set_password": "Ustaw hasło", + "modals.deactivate_user": "Dezaktywuj użytkownika", + "modals.confirm_deactivate": "Czy na pewno chcesz dezaktywować tego użytkownika?", + "modals.relay_node_info": "Informacje o węźle przekazującym", + "modals.change_password": "Zmień hasło", + "modals.reboot_device": "Uruchom ponownie urządzenie", + "modals.confirm_reboot": "Czy na pewno chcesz ponownie uruchomić urządzenie?", + "telemetry.battery_level": "Poziom naładowania akumulatora", + "telemetry.voltage": "Napięcie", + "telemetry.channel_utilization": "Wykorzystanie kanału", + "telemetry.air_util_tx": "Wykorzystanie pasma TX", + "telemetry.temperature": "Temperatura", + "telemetry.humidity": "Wilgotność", + "telemetry.barometric_pressure": "Ciśnienie atmosferyczne", + "telemetry.gas_resistance": "Rezystancja gazu", + "telemetry.wind_speed": "Prędkość wiatru", + "telemetry.wind_direction": "Kierunek wiatru", + "telemetry.rainfall": "Opady", + "telemetry.current": "Aktualne", + "telemetry.power": "Moc", + "telemetry.uptime_seconds": "Czas działania", + "telemetry.ch1_voltage": "Napięcie kanału 1", + "telemetry.ch1_current": "Prąd kanału 1", + "telemetry.paxcounter_wifi": "Paxcounter WiFi", + "telemetry.paxcounter_ble": "Paxcounter BLE", + "telemetry.paxcounter_uptime": "Czas pracy Paxcountera", + "telemetry.tm_packets_inspected": "Zarządzanie ruchem: sprawdzone pakiety", + "telemetry.tm_position_dedup_drops": "Zarządzanie ruchem: odrzucone duplikaty pozycji", + "telemetry.tm_nodeinfo_cache_hits": "Zarządzanie ruchem: trafienia pamięci podręcznej NodeInfo", + "telemetry.tm_rate_limit_drops": "Zarządzanie ruchem: pakiety odrzucone przez limit częstotliwości", + "telemetry.tm_unknown_packet_drops": "Zarządzanie ruchem: odrzucone nieznane pakiety", + "telemetry.tm_hop_exhausted_packets": "Zarządzanie ruchem: pakiety z wyczerpanym limitem przeskoków", + "telemetry.tm_router_hops_preserved": "Zarządzanie ruchem: zachowane przeskoki routera", + "telemetry.iaq": "Jakość powietrza wewnątrz (IAQ)", + "telemetry.lux": "Natężenie światła otoczenia", + "telemetry.white_lux": "Światło białe", + "telemetry.ir_lux": "Światło podczerwone", + "telemetry.uv_lux": "Światło UV", + "telemetry.wind_gust": "Poryw wiatru", + "telemetry.wind_lull": "Minimalna prędkość wiatru", + "telemetry.rainfall_1h": "Opady (1 godzina)", + "telemetry.rainfall_24h": "Opady (24 godziny)", + "telemetry.soil_moisture": "Wilgotność gleby", + "telemetry.soil_temperature": "Temperatura gleby", + "telemetry.radiation": "Promieniowanie", + "telemetry.distance": "Odległość (poziom wody)", + "telemetry.weight": "Masa", + "map.satellite": "Satelitarna", + "map.terrain": "Terenowa", + "map.street": "Uliczna", + "map.dark": "Ciemna", + "map.show_all_nodes": "Pokaż wszystkie węzły", + "map.show_traceroutes": "Pokaż śledzone trasy", + "map.center_on_nodes": "Wyśrodkuj na węzłach", + "map.zoom_in": "Powiększ", + "map.zoom_out": "Pomniejsz", + "map.legend.hops": "Przeskoki:", + "map.legend.local": "Lokalny", + "map.legend.positionHistory": "Historia pozycji", + "map.legend.oldest": "Najstarsza", + "map.legend.newest": "Najnowsza", + "map.legend.links": "Połączenia:", + "map.legend.route": "Trasa", + "map.legend.neighbor": "Sąsiad", + "map.legend.neighbors": "Sąsiedzi", + "map.legend.bidirectional": "Dwukierunkowe", + "map.legend.unidirectional": "Jednokierunkowe", + "map.legend.thickerBrighter": "Grubsza linia = silniejszy sygnał", + "map.legend.otherLines": "Pozostałe linie", + "map.legend.mqtt": "IP", + "map.legend.traceroute": "Śledzenie trasy", + "map.legend.tracerouteForward": "Śledzenie trasy →", + "map.legend.tracerouteReturn": "Śledzenie trasy ←", + "map.legend.snrQuality": "Jakość SNR", + "map.legend.snrGood": "Dobra (> 10 dB)", + "map.legend.snrMedium": "Średnia (0–10 dB)", + "map.legend.snrPoor": "Słaba (< 0 dB)", + "map.legend.snrNoData": "Brak danych", + "traceroute_history.title": "Historia śledzenia tras", + "traceroute_history.from": "Od", + "traceroute_history.to": "Do", + "traceroute_history.show_failed": "Pokaż nieudane próby śledzenia trasy", + "traceroute_history.loading": "Wczytywanie historii śledzenia tras...", + "traceroute_history.load_error": "Nie udało się wczytać historii śledzenia tras", + "traceroute_history.no_history": "Nie znaleziono historii śledzenia tras dla tej pary węzłów.", + "traceroute_history.no_matches": "Żadna trasa nie pasuje do bieżącego filtra.", + "traceroute_history.showing_count": "Wyświetlane trasy: {{count}}", + "traceroute_history.failed_hidden": "(ukryte nieudane: {{count}})", + "traceroute_history.forward": "Droga do celu", + "traceroute_history.return": "Droga powrotna", + "node_filter.title": "Filtrowanie węzłów", + "node_filter.security_status": "Stan bezpieczeństwa", + "node_filter.all_nodes": "Wszystkie węzły", + "node_filter.flagged_only": "Tylko oznaczone", + "node_filter.hide_flagged": "Ukryj oznaczone", + "node_filter.channel": "Kanał", + "node_filter.all_channels": "Wszystkie kanały", + "node_filter.channel_number": "Kanał {{number}}", + "node_filter.hide_incomplete": "Ukryj niekompletne węzły", + "node_filter.incomplete_help": "Niekompletne węzły nie mają nazwy lub informacji o sprzęcie.", + "node_filter.secure_channel_warning": "Zalecane dla bezpiecznych kanałów.", + "node_filter.hide_ignored": "Ukryj ignorowane węzły", + "node_filter.ignored_help": "Ignorowanie węzła można wyłączyć na stronie szczegółów węzła.", + "node_filter.remote_admin_only": "Tylko z dostępnym Remote Admin", + "node_filter.remote_admin_help": "Pokaż wyłącznie węzły ze zweryfikowaną obsługą Remote Admin.", + "node_filter.remote_admin": "Remote Admin", + "relay_modal.title_ack": "Potwierdzenie wiadomości", + "relay_modal.title_relay": "Informacje o przekazaniu wiadomości", + "relay_modal.acknowledged": "Potwierdzona", + "relay_modal.relay_node_byte": "Bajt węzła przekazującego", + "relay_modal.acknowledged_by": "Potwierdzona przez", + "relay_modal.potential_relays": "Potencjalne węzły przekazujące", + "relay_modal.no_matches": "Nie znaleziono węzłów odpowiadających bajtowi przekazującemu {{byte}}. Węzeł przekazujący może jeszcze nie znajdować się w bazie węzłów.", + "relay_modal.multiple_matches_note": "Uwaga: kilka węzłów ma ten sam najmłodszy bajt. Rzeczywistym węzłem przekazującym jest jeden z nich.", + "relay_modal.direct": "Bezpośrednio", + "relay_modal.hops_away": "{{count}} przeskok dalej", + "relay_modal.hops_away_plural": "{{count}} przeskoki dalej", + "relay_modal.likely_relay": "Router lub Client_Base — prawdopodobny węzeł przekazujący", + "relay_modal.heard_directly": "Odebrany bezpośrednio (prawdopodobny przekaźnik)", + "relay_modal.never_heard": "Nigdy nie odebrano bezpośrednio", + "relay_modal.avg_rssi": "Średnie RSSI przy odbiorze bezpośrednim", + "relay_modal.title_unknown": "Szacowany węzeł przekazujący", + "relay_modal.unknown_relay_explanation": "Bajt węzła przekazującego nie został zawarty w tym pakiecie. Poniżej pokazano węzły odebrane bezpośrednio, posortowane według podobieństwa RSSI do tej wiadomości. Węzeł o najbardziej zbliżonym RSSI jest najprawdopodobniej przekaźnikiem.", + "relay_modal.estimated_relays": "Szacowane węzły przekazujące (według RSSI)", + "relay_modal.no_direct_neighbors": "Nie znaleziono bezpośrednich sąsiadów. Ostatnio nie odebrano pakietów z zerową liczbą przeskoków, które pozwoliłyby określić potencjalne przekaźniki.", + "relay_modal.rssi_estimate_note": "Uwaga: sortowanie według zbliżenia RSSI. Węzły o RSSI podobnym do tej wiadomości z większym prawdopodobieństwem są przekaźnikiem.", + "node_popup.node_fallback": "Węzeł {{nodeNum}}", + "node_popup.id": "ID", + "node_popup.role": "Rola", + "node_popup.hardware": "Sprzęt", + "node_popup.snr": "SNR", + "node_popup.battery": "Akumulator: {{level}}%", + "node_popup.power_plugged": "Zasilanie: podłączone", + "node_popup.last_seen": "Ostatnio widziany", + "node_popup.direct_message": "Wiadomość prywatna", + "node_popup.more_details": "Więcej szczegółów", + "node_popup.show_on_map": "Pokaż na mapie", + "node_popup.traceroute": "Śledzenie trasy", + "node_popup.last_traceroute": "Ostatnie śledzenie trasy", + "node_popup.forward_path": "Droga do celu", + "node_popup.return_path": "Droga powrotna", + "node_popup.traceroute_failed": "Nie otrzymano odpowiedzi", + "node_popup.view_traceroute_history": "Pokaż historię", + "node_popup.tab_info": "Informacje o węźle", + "node_popup.tab_traceroute": "Śledzenie trasy", + "node_popup.no_recent_traceroute": "Brak ostatnich danych śledzenia trasy", + "route_segment.title": "Trasy wykorzystujące odcinek", + "route_segment.segment": "Odcinek", + "route_segment.no_traceroutes": "Nie znaleziono tras wykorzystujących ten odcinek.", + "route_segment.showing_count": "Wyświetlane trasy wykorzystujące ten odcinek: {{count}}", + "reboot.title": "Ponowne uruchomienie urządzenia", + "reboot.rebooting": "Ponowne uruchamianie urządzenia...", + "reboot.rebooting_please_wait": "Urządzenie jest ponownie uruchamiane... Poczekaj", + "reboot.verifying_connection": "Sprawdzanie połączenia z urządzeniem...", + "reboot.reconnection_timeout": "Upłynął czas oczekiwania na ponowne połączenie z urządzeniem. Odśwież stronę.", + "reboot.waiting_for_config": "Oczekiwanie na zastosowanie konfiguracji przez urządzenie...", + "reboot.checking_config": "Sprawdzanie aktualizacji konfiguracji... ({{attempt}}/{{total}})", + "reboot.config_verified": "Konfiguracja została zweryfikowana!", + "reboot.config_saved_reload": "Konfiguracja została zapisana. Jeśli zmiany nie są widoczne, odśwież stronę.", + "reboot.error_reload": "Błąd podczas sprawdzania po ponownym uruchomieniu. Odśwież stronę.", + "reboot.elapsed": "Czas: {{seconds}} s", + "reboot.do_not_close": "Nie zamykaj tego okna ani nie odświeżaj strony.", + "packet_monitor.title": "Monitor ruchu sieci mesh", + "packet_monitor.no_permission": "Do wyświetlania dziennika pakietów wymagane są uprawnienia channels:read oraz messages:read.", + "packet_monitor.count": "Wyświetlane: {{shown}} / łącznie: {{total}}", + "packet_monitor.count_tooltip": "Wyświetlane są najnowsze pakiety: {{shown}}. Eksport obejmie wszystkie pakiety: {{total}}.", + "packet_monitor.pause_autoscroll": "Wstrzymaj automatyczne przewijanie", + "packet_monitor.resume_autoscroll": "Wznów automatyczne przewijanie", + "packet_monitor.toggle_filters": "Pokaż lub ukryj filtry", + "packet_monitor.export_title": "Eksportuj pakiety do JSONL", + "packet_monitor.clear_all": "Usuń wszystkie pakiety", + "packet_monitor.popout": "Otwórz w nowym oknie", + "packet_monitor.admin_only": "Tylko administratorzy mogą usuwać dzienniki pakietów", + "packet_monitor.confirm_clear": "Czy na pewno chcesz usunąć wszystkie dzienniki pakietów?", + "packet_monitor.clear_failed": "Nie udało się usunąć dzienników pakietów", + "packet_monitor.export_failed": "Nie udało się wyeksportować pakietów", + "packet_monitor.filter.all_types": "Wszystkie typy", + "packet_monitor.filter.all_packets": "Wszystkie pakiety", + "packet_monitor.filter.encrypted_only": "Tylko zaszyfrowane", + "packet_monitor.filter.decoded_only": "Tylko zdekodowane", + "packet_monitor.filter.hide_own": "Ukryj własne pakiety", + "packet_monitor.filter.clear": "Wyczyść filtry", + "packet_monitor.filter.all_nodes": "Wszystkie węzły", + "packet_monitor.filter.from_node_tooltip": "Filtruj według węzła źródłowego", + "packet_monitor.filter.all_last_hops": "Wszystkie ostatnie przeskoki", + "packet_monitor.filter.unknown_hop": "Nieznany", + "packet_monitor.filter.last_hop_tooltip": "Filtruj według ostatniego węzła przekazującego", + "packet_monitor.filter.all_transports": "Wszystkie sposoby transportu", + "packet_monitor.filter.transport_lora": "Tylko LoRa", + "packet_monitor.filter.transport_udp": "Tylko UDP", + "packet_monitor.filter.transport_mqtt": "Tylko MQTT", + "packet_monitor.filter.transport_api": "Tylko API", + "packet_monitor.filter.transport_internal": "Tylko wewnętrzne", + "packet_monitor.filter.transport_tooltip": "Filtruj według mechanizmu transportu (firmware >= 2.7.x)", + "packet_monitor.rate_limit_warning": "Osiągnięto limit częstotliwości. Nieskończone przewijanie zostało wstrzymane na 15 minut. Bieżące pakiety nadal będą aktualizowane.", + "packet_monitor.loading": "Wczytywanie pakietów...", + "packet_monitor.no_packets": "Nie zarejestrowano jeszcze żadnych pakietów", + "packet_monitor.loading_more": "Wczytywanie kolejnych pakietów...", + "packet_monitor.column.date": "Data", + "packet_monitor.today": "Dzisiaj", + "packet_monitor.column.time": "Czas", + "packet_monitor.column.from": "Od", + "packet_monitor.column.to": "Do", + "packet_monitor.column.type": "Typ", + "packet_monitor.column.slot": "Szczelina", + "packet_monitor.column.snr": "SNR", + "packet_monitor.column.rssi": "RSSI", + "packet_monitor.column.hops": "Przeskoki", + "packet_monitor.column.last_hop": "Ostatni przeskok", + "packet_monitor.column.size": "Rozmiar", + "packet_monitor.column.content": "Zawartość", + "packet_monitor.column.dir": "Kierunek", + "packet_monitor.column.via": "Przez", + "packet_monitor.direction_rx": "Odebrano", + "packet_monitor.direction_tx": "Nadano", + "packet_monitor.broadcast": "Rozgłoszenie", + "packet_monitor.direct": "Bezpośrednio", + "packet_monitor.encrypted": "", + "packet_monitor.decrypted_by_node": "Odszyfrowane przez urządzenie", + "packet_monitor.decrypted_by_server": "Odszyfrowane przez serwer (baza kanałów)", + "packet_monitor.no_preview": "[Brak podglądu]", + "packet_monitor.click_for_relay": "Kliknij, aby zobaczyć potencjalne węzły przekazujące", + "packet_monitor.estimated_relay": "Szacowany przekaźnik (kliknij, aby zobaczyć szczegóły)", + "packet_monitor.details_title": "Szczegóły pakietu (pełny JSON)", + "packet_monitor.settings.disabled_warning": "Rejestrowanie pakietów jest obecnie wyłączone. Pakiety nie będą zapisywane. Włącz je w nagłówku sekcji powyżej, aby rozpocząć gromadzenie danych pakietów.", + "packet_monitor.settings.max_packets": "Maksymalna liczba przechowywanych pakietów", + "packet_monitor.settings.max_packets_desc": "Po osiągnięciu limitu najstarsze pakiety będą automatycznie usuwane (zakres: 100–10 000)", + "packet_monitor.settings.keep_packets": "Przechowuj pakiety przez (godziny)", + "packet_monitor.settings.keep_packets_desc": "Pakiety starsze niż podany czas będą automatycznie usuwane (zakres: 1–168 godzin / 1 tydzień)", + "packet_monitor.settings.storage_estimate": "Szacowane miejsce na dysku", + "packet_monitor.settings.storage_value": "{{count}} pakietów ≈ {{size}} MB", + "packet_monitor.settings.note": "Uwaga", + "packet_monitor.settings.cleanup_note": "Automatyczne czyszczenie jest uruchamiane co 15 minut w celu egzekwowania tych limitów.", + "packet_monitor.settings.no_permission": "Do zmiany ustawień monitora pakietów wymagane jest uprawnienie settings:write.", + "info.about": "O programie", + "info.connected_node": "Połączony węzeł", + "info.has_wifi": "Obsługuje WiFi", + "info.has_bluetooth": "Obsługuje Bluetooth", + "info.num_bands": "Liczba pasm", + "time.seconds_ago": "{{count}} sekundę temu", + "time.seconds_ago_plural": "{{count}} sekund temu", + "time.minutes_ago": "{{count}} minutę temu", + "time.minutes_ago_plural": "{{count}} min temu", + "time.hours_ago": "{{count}} godzinę temu", + "time.hours_ago_plural": "{{count}} godz. temu", + "time.days_ago": "{{count}} dzień temu", + "time.days_ago_plural": "{{count}} dni temu", + "time.just_now": "Przed chwilą", + "time.never": "Nigdy", + "user_menu.logged_in_as": "Zalogowano jako {{name}}", + "user_menu.administrator": "Administrator", + "user_menu.oidc_account": "Konto OIDC", + "user_menu.local_account": "Konto lokalne", + "user_menu.change_password": "Zmień hasło", + "user_menu.api_token": "Token API", + "user_menu.api_token_management": "Zarządzanie tokenem API", + "user_menu.logging_out": "Wylogowywanie...", + "user_menu.logout": "Wyloguj się", + "user_menu.mfa": "Uwierzytelnianie dwuskładnikowe", + "mfa.title": "Uwierzytelnianie dwuskładnikowe", + "mfa.description": "Dodaj dodatkową warstwę zabezpieczeń do konta za pomocą aplikacji uwierzytelniającej z jednorazowymi hasłami czasowymi (TOTP).", + "mfa.enable": "Włącz uwierzytelnianie dwuskładnikowe", + "mfa.disable": "Wyłącz uwierzytelnianie dwuskładnikowe", + "mfa.not_enabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone na Twoim koncie.", + "mfa.status_enabled": "Uwierzytelnianie dwuskładnikowe jest włączone", + "mfa.setup_step1": "Krok 1: zeskanuj kod QR", + "mfa.setup_step2": "Krok 2: zapisz kody zapasowe", + "mfa.setup_step3": "Krok 3: zweryfikuj", + "mfa.setup_description": "Zeskanuj ten kod QR aplikacją uwierzytelniającą (Google Authenticator, Authy itp.).", + "mfa.qr_code": "Kod QR dla aplikacji uwierzytelniającej", + "mfa.manual_entry": "Lub wpisz ten kod ręcznie:", + "mfa.backup_codes": "Kody zapasowe", + "mfa.backup_codes_warning": "Zapisz te kody zapasowe w bezpiecznym miejscu. Każdego kodu można użyć tylko raz. Jeśli utracisz dostęp do aplikacji uwierzytelniającej, możesz użyć tych kodów do zalogowania.", + "mfa.backup_codes_copy": "Skopiuj wszystkie kody", + "mfa.backup_codes_copied": "Kody zapasowe skopiowano do schowka", + "mfa.verify_code": "Kod weryfikacyjny", + "mfa.verify_placeholder": "Wpisz kod 6-cyfrowy", + "mfa.verify_button": "Zweryfikuj", + "mfa.enabled_success": "Uwierzytelnianie dwuskładnikowe zostało włączone", + "mfa.disabled_success": "Uwierzytelnianie dwuskładnikowe zostało wyłączone", + "mfa.disable_confirm": "Wpisz bieżący kod z aplikacji uwierzytelniającej, aby wyłączyć uwierzytelnianie dwuskładnikowe.", + "mfa.login_prompt": "Wpisz 6-cyfrowy kod z aplikacji uwierzytelniającej.", + "mfa.login_placeholder": "Kod z aplikacji uwierzytelniającej", + "mfa.backup_code_prompt": "Wpisz jeden z kodów zapasowych.", + "mfa.backup_code_label": "Kod zapasowy", + "mfa.backup_code_placeholder": "Wpisz kod zapasowy", + "mfa.use_backup_code": "Użyj kodu zapasowego", + "mfa.use_totp_code": "Użyj kodu z aplikacji uwierzytelniającej", + "mfa.invalid_code": "Nieprawidłowy kod. Spróbuj ponownie.", + "mfa.error": "Wystąpił błąd. Spróbuj ponownie.", + "mfa.login_title": "Uwierzytelnianie dwuskładnikowe", + "mfa.code_label": "Kod z aplikacji uwierzytelniającej", + "mfa.verifying": "Weryfikowanie...", + "mfa.back_to_login": "Wróć do logowania", + "common.copied": "Skopiowano", + "change_password.title": "Zmień hasło", + "change_password.current_password": "Aktualne hasło", + "change_password.new_password": "Nowe hasło", + "change_password.confirm_password": "Potwierdź nowe hasło", + "change_password.min_length_hint": "Co najmniej 8 znaków", + "change_password.all_fields_required": "Wszystkie pola są wymagane", + "change_password.min_length": "Nowe hasło musi mieć co najmniej 8 znaków", + "change_password.passwords_no_match": "Nowe hasła nie są zgodne", + "change_password.must_be_different": "Nowe hasło musi różnić się od aktualnego", + "change_password.failed": "Nie udało się zmienić hasła", + "change_password.success": "Hasło zostało zmienione!", + "change_password.changing": "Zmienianie...", + "api_token.title": "Token API", + "api_token.description": "Wygeneruj token API umożliwiający dostęp do interfejsu MeshMonitor REST API v1.", + "api_token.view_docs": "Wyświetl dokumentację API", + "api_token.loading": "Wczytywanie informacji o tokenie...", + "api_token.load_failed": "Nie udało się wczytać informacji o tokenie API", + "api_token.token_generated": "Token został wygenerowany!", + "api_token.save_warning": "Zapisz ten token w bezpiecznym miejscu — nie zostanie ponownie wyświetlony.", + "api_token.generated_success": "Token API został wygenerowany", + "api_token.generate_failed": "Nie udało się wygenerować tokenu API", + "api_token.revoked_success": "Token API został unieważniony", + "api_token.revoke_failed": "Nie udało się unieważnić tokenu API", + "api_token.copied": "Token skopiowano do schowka", + "api_token.prefix": "Prefiks", + "api_token.created": "Utworzono", + "api_token.last_used": "Ostatnio użyto", + "api_token.status": "Stan", + "api_token.status_active": "Aktywny", + "api_token.revoke": "Unieważnij token", + "api_token.revoke_confirm": "Czy na pewno chcesz unieważnić ten token? Tego działania nie można cofnąć.", + "api_token.revoking": "Unieważnianie...", + "api_token.yes_revoke": "Tak, unieważnij", + "api_token.no_token": "Nie masz aktywnego tokenu API.", + "api_token.generating": "Generowanie...", + "api_token.generate": "Wygeneruj token API", + "api_token.usage_title": "Korzystanie z tokenu API", + "api_token.usage_instruction": "Umieść token w nagłówku Authorization:", + "api_token.view_api_docs": "Wyświetl dokumentację API", + "settings.units_and_formats": "Jednostki i formaty", + "settings.sorting": "Sortowanie", + "settings.appearance": "Wygląd", + "settings.link_previews": "Podglądy odnośników", + "settings.link_previews_enabled": "Pokaż podglądy odnośników", + "settings.link_previews_description": "Po włączeniu MeshMonitor pobiera i wyświetla kartę podglądu (tytuł, opis i obraz) pierwszego adresu URL w wiadomości. Pobieranie odbywa się po stronie serwera. Wyłącz tę opcję, aby zatrzymać wszystkie wychodzące żądania do adresów docelowych — adresy URL nadal będą wyświetlane jako klikalny tekst.", + "settings.map": "Mapa", + "settings.telemetry": "Telemetria", + "settings.notifications_and_security": "Powiadomienia i bezpieczeństwo", + "settings.node_display": "Wyświetlanie węzłów", + "settings.max_node_age_label": "Maksymalny wiek aktywnych węzłów (godziny)", + "settings.max_node_age_description": "Węzły starsze niż podany czas nie będą widoczne na liście węzłów", + "settings.inactive_node_threshold_label": "Próg powiadomienia o nieaktywnym węźle (godziny)", + "settings.inactive_node_threshold_description": "Węzły, z których nie odebrano danych przez podaną liczbę godzin, wywołają powiadomienie o nieaktywności (jeśli jest włączone w zakładce Powiadomienia)", + "settings.inactive_node_check_interval_label": "Odstęp sprawdzania nieaktywnych węzłów (minuty)", + "settings.inactive_node_check_interval_description": "Jak często sprawdzać nieaktywne węzły (1–1440 minut, domyślnie: 60)", + "settings.inactive_node_cooldown_label": "Okres przerwy między powiadomieniami o nieaktywnym węźle (godziny)", + "settings.inactive_node_cooldown_description": "Minimalny czas między powiadomieniami dotyczącymi tego samego węzła (zapobiega spamowi, domyślnie: 24 godziny)", + "settings.local_stats_interval_label": "Odstęp pobierania LocalStats (minuty)", + "settings.local_stats_interval_description": "Jak często żądać LocalStats z połączonego węzła (0 = wyłączone, domyślnie: 15). Niższe wartości zwiększają obciążenie węzła.", + "settings.display_prefs": "Preferencje wyświetlania", + "settings.sort_field_label": "Preferowane sortowanie listy węzłów — pole", + "settings.sort_field_description": "Domyślne pole sortowania listy węzłów na stronie głównej", + "settings.sort_long_name": "Długa nazwa", + "settings.sort_short_name": "Krótka nazwa", + "settings.sort_id": "ID", + "settings.sort_last_heard": "Ostatnio odebrano", + "settings.sort_snr": "SNR", + "settings.sort_battery": "Akumulator", + "settings.sort_hw_model": "Model sprzętu", + "settings.sort_hops": "Przeskoki", + "settings.sort_direction_label": "Preferowane sortowanie listy węzłów — kierunek", + "settings.sort_direction_description": "Domyślny kierunek sortowania listy węzłów na stronie głównej", + "settings.sort_ascending": "Rosnąco (A–Z, 0–9, od najstarszych do najnowszych)", + "settings.sort_descending": "Malejąco (Z–A, 9–0, od najnowszych do najstarszych)", + "settings.dashboard_sort_label": "Preferowane sortowanie panelu głównego", + "settings.dashboard_sort_description": "Domyślne sortowanie wykresów telemetrii na panelu głównym", + "settings.dashboard_sort_custom": "Kolejność niestandardowa (przeciągnij i upuść)", + "settings.dashboard_sort_node_asc": "Nazwa węzła (A–Z)", + "settings.dashboard_sort_node_desc": "Nazwa węzła (Z–A)", + "settings.dashboard_sort_type_asc": "Typ telemetrii (A–Z)", + "settings.dashboard_sort_type_desc": "Typ telemetrii (Z–A)", + "settings.time_format_label": "Format czasu", + "settings.time_format_description": "Wybierz 12- lub 24-godzinny format wyświetlania czasu", + "settings.time_24_hour": "24-godzinny (np. 15:45)", + "settings.date_format_label": "Format daty", + "settings.date_format_description": "Wybierz preferowany format wyświetlania daty", + "settings.date_mdy": "MM/DD/YYYY (np. 12/31/2024)", + "settings.date_dmy": "DD/MM/YYYY (np. 31/12/2024)", + "settings.date_iso": "YYYY-MM-DD (np. 2024-12-31) — ISO 8601", + "settings.temp_unit_label": "Jednostka temperatury", + "settings.temp_unit_description": "Wybierz wyświetlanie temperatury w stopniach Celsjusza lub Fahrenheita", + "settings.temp_celsius": "Celsjusz (°C)", + "settings.temp_fahrenheit": "Fahrenheit (°F)", + "settings.dist_unit_label": "Jednostka odległości", + "settings.dist_unit_description": "Wybierz wyświetlanie odległości w kilometrach lub milach", + "settings.dist_km": "Kilometry (km)", + "settings.dist_mi": "Mile (mi)", + "settings.position_history_line_style_label": "Styl linii historii pozycji", + "settings.position_history_line_style_description": "Sposób rysowania ścieżek historii pozycji na mapie", + "settings.position_history_line_style_linear": "Liniowy (proste odcinki)", + "settings.position_history_line_style_spline": "Krzywa (na podstawie kierunku)", + "settings.neighbor_info_min_zoom_label": "Minimalny poziom powiększenia dla informacji o sąsiadach", + "settings.neighbor_info_min_zoom_description": "Linie informacji o sąsiadach są ukrywane na mapie po oddaleniu poniżej tego poziomu (1–18). Niższe wartości pokazują linie przy większym oddaleniu.", + "settings.telemetry_hours_label": "Zakres wizualizacji telemetrii (godziny)", + "settings.telemetry_hours_description": "Liczba godzin danych telemetrycznych wyświetlanych na wykresach (1–168)", + "settings.fav_telemetry_label": "Okres przechowywania ulubionej telemetrii (dni)", + "settings.fav_telemetry_description": "Liczba dni przechowywania danych telemetrycznych oznaczonych jako ulubione (7–90 dni). Ulubiona telemetria nie podlega zwykłemu czyszczeniu.", + "settings.map_tileset_label": "Zestaw kafelków mapy", + "settings.map_tileset_description": "Wybierz styl mapy używanej do wizualizacji sieci", + "settings.map_pin_label": "Styl znaczników na mapie", + "settings.map_pin_description": "Wybierz styl znaczników węzłów na mapie", + "settings.map_pin_meshmonitor": "MeshMonitor — znaczniki pinezek z etykietami zależnymi od powiększenia", + "settings.map_pin_official": "Oficjalny Meshtastic — okrągłe znaczniki z zawsze widocznymi etykietami", + "settings.custom_tileset_overlay_scheme": "Kolory nakładek mapy", + "settings.overlay_scheme_dark": "Tryb ciemny (jasne nakładki)", + "settings.overlay_scheme_light": "Tryb jasny (nasycone nakładki)", + "settings.theme_label": "Motyw kolorystyczny", + "settings.theme_description": "Wybierz jeden z 15 motywów, w tym warianty zwiększające dostępność", + "settings.appearance_mode_label": "Tryb wyglądu", + "settings.appearance_mode_description": "Wybierz stały wygląd albo dopasowanie do ustawień przeglądarki i systemu operacyjnego", + "settings.appearance_mode_system": "Dopasuj do wyglądu systemu", + "settings.appearance_mode_dark": "Ciemna", + "settings.appearance_mode_light": "Jasny", + "settings.dark_theme_label": "Motyw ciemny", + "settings.dark_theme_description": "Motyw używany w trybie ciemnym lub gdy system działa w trybie ciemnym", + "settings.light_theme_label": "Motyw jasny", + "settings.light_theme_description": "Motyw używany w trybie jasnym lub gdy system działa w trybie jasnym", + "settings.theme_catppuccin": "Catppuccin", + "settings.theme_mocha": "Mocha (ciemny)", + "settings.theme_macchiato": "Macchiato (średnio ciemny)", + "settings.theme_frappe": "Frappé (średni)", + "settings.theme_latte": "Latte (jasny)", + "settings.theme_popular": "Popularne motywy", + "settings.theme_nord": "Nord", + "settings.theme_dracula": "Dracula", + "settings.theme_solarized_dark": "Solarized Dark", + "settings.theme_solarized_light": "Solarized Light", + "settings.theme_gruvbox_dark": "Gruvbox Dark", + "settings.theme_gruvbox_light": "Gruvbox Light", + "settings.theme_high_contrast": "Wysoki kontrast (WCAG AAA)", + "settings.theme_hc_dark": "Wysoki kontrast — ciemny", + "settings.theme_hc_light": "Wysoki kontrast — jasny", + "settings.theme_colorblind": "Dostosowane do zaburzeń rozpoznawania barw", + "settings.theme_protanopia": "Protanopia (nierozpoznawanie czerwieni)", + "settings.theme_deuteranopia": "Deuteranopia (nierozpoznawanie zieleni)", + "settings.theme_tritanopia": "Tritanopia (nierozpoznawanie niebieskiego)", + "settings.theme_custom": "Motywy niestandardowe", + "settings.tapback_emojis": "Emoji reakcji", + "settings.tapback_emojis_description": "Dostosuj reakcje emoji dostępne podczas odpowiadania na wiadomości. Ustawienia dotyczą wszystkich użytkowników.", + "settings.tapback_add_emoji": "Dodaj", + "settings.tapback_reset_defaults": "Przywróć domyślne", + "settings.tapback_emoji_placeholder": "Emoji", + "settings.tapback_title_placeholder": "Tytuł (opcjonalnie)", + "settings.tapback_emoji_required": "Wpisz emoji", + "settings.tapback_emoji_exists": "To emoji znajduje się już na liście", + "settings.tapback_emoji_added": "Dodano emoji", + "settings.tapback_emoji_removed": "Usunięto emoji", + "settings.tapback_remove_emoji": "Usuń emoji", + "settings.tapback_min_emojis": "Na liście musi pozostać co najmniej jedno emoji", + "settings.tapback_save_failed": "Nie udało się zapisać zmian", + "settings.tapback_confirm_reset": "Przywrócić domyślne emoji reakcji? Wszystkie niestandardowe emoji zostaną zastąpione.", + "settings.tapback_reset_success": "Przywrócono domyślne emoji", + "settings.packet_monitor": "Monitor pakietów", + "settings.packet_monitor_description": "Skonfiguruj monitor ruchu sieci mesh wyświetlający wszystkie pakiety w sieci. Wymaga uprawnień channels:read oraz messages:read.", + "settings.enable_audio_notifications": "Włącz powiadomienia dźwiękowe", + "settings.enable_audio_notifications_description": "Odtwarzaj dźwięk po nadejściu nowych wiadomości. Wyłącz tę opcję, jeśli w przeglądarce występują problemy z dźwiękiem.", + "settings.channel_sounds_label": "Dźwięk powiadomienia dla poszczególnych kanałów", + "settings.channel_sounds_description": "Wybierz dźwięk odtwarzany dla nowych wiadomości na każdym kanale albo wycisz kanał. Przed wyborem możesz odsłuchać każdy dźwięk.", + "settings.channel_sounds_no_channels": "Brak dostępnych kanałów.", + "settings.channel_sound_dm": "Wiadomości prywatne", + "settings.channel_sound_silent": "Cisza", + "settings.channel_sound_group_standard": "Standardowe", + "settings.channel_sound_group_fun": "Zabawne", + "settings.channel_sound_preview": "Odsłuchaj", + "settings.homoglyph_enabled": "Optymalizacja wiadomości za pomocą homoglifów", + "settings.homoglyph_description": "Zastępuje identycznie wyglądające znaki spoza alfabetu łacińskiego (np. cyryliczne A→A, C→C) odpowiednikami łacińskimi, zmniejszając rozmiar wiadomości o około 20%. Wygląd wiadomości się nie zmienia.", + "settings.hide_incomplete_nodes": "Ukryj niekompletne węzły", + "settings.hide_incomplete_description": "Ukrywa węzły bez nazwy lub informacji o sprzęcie. Na bezpiecznych kanałach (niestandardowy PSK) niekompletne węzły nie zostały zweryfikowane jako należące do Twojego kanału.", + "settings.node_dimming_enabled": "Przyciemniaj nieaktywne węzły na mapie", + "settings.node_dimming_description": "Stopniowo wygaszaj znaczniki węzłów, z których ostatnio nie odebrano danych.", + "settings.node_dimming_start_hours": "Rozpocznij przyciemnianie po (godziny)", + "settings.node_dimming_start_hours_description": "Czas od ostatniego odebrania węzła, po którym jego znacznik zacznie zanikać.", + "settings.node_dimming_min_opacity": "Minimalna nieprzezroczystość", + "settings.node_dimming_min_opacity_description": "Najniższa widoczność węzła (0,1 = prawie niewidoczny, 0,9 = tylko lekko przyciemniony).", + "settings.node_hops_calculation": "Obliczanie liczby przeskoków do węzła", + "settings.node_hops_calculation_description": "Sposób ustalania liczby przeskoków do każdego węzła. Wpływa na wskaźniki listy węzłów, kolory znaczników mapy i szczegóły węzła w wiadomościach.", + "settings.node_hops_nodeinfo": "Pakiet NodeInfo (domyślnie)", + "settings.node_hops_traceroute": "Długość śledzonej trasy", + "settings.node_hops_messages": "Wszystkie wiadomości", + "settings.solar_monitoring": "Monitorowanie instalacji fotowoltaicznej", + "settings.solar_monitoring_description": "Skonfiguruj monitorowanie paneli słonecznych na potrzeby prognoz produkcji. Podziękowania dla {{link}} za interfejs Solar Estimates API!", + "settings.solar_latitude": "Szerokość geograficzna", + "settings.solar_latitude_description": "Położenie północ–południe na Ziemi (od -90 na południu do +90 na północy)", + "settings.solar_find_coords": "Znajdź tutaj swoje współrzędne GPS", + "settings.solar_longitude": "Długość geograficzna", + "settings.solar_longitude_description": "Położenie wschód–zachód na Ziemi (od -180 na zachodzie do +180 na wschodzie)", + "settings.solar_azimuth": "Azymut (stopnie)", + "settings.solar_azimuth_description": "Kierunek, w który zwrócone są panele: -180 = północ, -90 = wschód, 0 = południe, 90 = zachód, 180 = północ", + "settings.solar_declination": "Nachylenie (stopnie)", + "settings.solar_declination_description": "Kąt panelu względem podłoża: 0 = poziomo, 90 = pionowo. Typowo: 20–40 stopni", + "settings.solar_fetch_now": "Pobierz prognozy teraz", + "settings.solar_fetching": "Pobieranie...", + "settings.solar_fetch_description": "Ręcznie pobierz prognozę produkcji z Forecast.Solar. Prognozy są pobierane automatycznie co godzinę, 5 minut po pełnej godzinie.", + "settings.solar_fetch_success": "Prognozy produkcji zostały pobrane", + "settings.solar_fetch_failed": "Nie udało się pobrać prognoz produkcji", + "settings.settings_management": "Zarządzanie ustawieniami", + "settings.settings_management_description": "Zmiany zostaną zastosowane dopiero po zapisaniu. Ustawienia są przechowywane na serwerze i obowiązują we wszystkich przeglądarkach.", + "settings.saving": "Zapisywanie...", + "settings.save_settings": "Zapisz ustawienia", + "settings.reset_defaults": "Przywróć domyślne", + "settings.danger_zone": "Strefa niebezpieczna", + "settings.danger_zone_description": "Tych działań nie można cofnąć. Zachowaj ostrożność.", + "settings.erase_nodes_title": "Usuń listę węzłów", + "settings.erase_nodes_description": "Usuwa z bazy danych wszystkie węzły i historię śledzenia tras. Następnie zostanie uruchomione odświeżenie węzłów, aby ponownie zapełnić listę.", + "settings.erase_nodes_button": "Usuń węzły", + "settings.purge_telemetry_title": "Usuń telemetrię", + "settings.purge_telemetry_description": "Usuwa wszystkie historyczne dane telemetryczne (stan akumulatora, napięcie, temperaturę itd.). Bieżące stany węzłów zostaną zachowane.", + "settings.purge_telemetry_button": "Usuń telemetrię", + "settings.purge_messages_title": "Usuń wiadomości", + "settings.purge_messages_description": "Usuwa wszystkie wiadomości z kanałów oraz rozmów prywatnych. To działanie jest trwałe.", + "settings.purge_messages_button": "Usuń wiadomości", + "settings.reset_traceroutes_title": "Zresetuj dane śledzenia tras", + "settings.reset_traceroutes_description": "Usuwa wszystkie zapisane trasy, historię śledzenia tras i odcinki tras (w tym rekordzistów). Nowe trasy nadal będą gromadzone.", + "settings.reset_traceroutes_button": "Zresetuj dane śledzenia tras", + "settings.restart_container_title": "Uruchom ponownie kontener", + "settings.shutdown_title": "Wyłącz MeshMonitor", + "settings.restart_container_description": "Uruchamia ponownie kontener Docker. System będzie niedostępny przez około 10–30 sekund.", + "settings.shutdown_description": "Wyłącza MeshMonitor. Konieczne będzie jego ręczne ponowne uruchomienie.", + "settings.restarting": "Ponowne uruchamianie...", + "settings.shutting_down": "Wyłączanie...", + "settings.restart_button": "Uruchom ponownie kontener", + "settings.shutdown_button": "Wyłącz", + "settings.view_docs": "Wyświetl dokumentację ustawień", + "settings.support": "Wesprzyj MeshMonitor", + "settings.save_failed": "Nie udało się zapisać ustawień. Spróbuj ponownie.", + "settings.reset_success": "Przywrócono ustawienia domyślne!", + "settings.reset_failed": "Nie udało się przywrócić ustawień domyślnych. Spróbuj ponownie.", + "settings.confirm_reset_title": "Czy na pewno chcesz przywrócić domyślne wartości wszystkich ustawień?", + "settings.confirm_reset_defaults": "Wartości domyślne:", + "settings.confirm_reset_max_age": "Maksymalny wiek węzła: 24 godziny", + "settings.confirm_reset_temp": "Jednostka temperatury: stopnie Celsjusza", + "settings.confirm_reset_dist": "Jednostka odległości: kilometry", + "settings.confirm_reset_telemetry": "Zakres telemetrii: 24 godziny", + "settings.confirm_reset_sort": "Preferowane sortowanie: długa nazwa (rosnąco)", + "settings.confirm_reset_time": "Format czasu: 24-godzinny", + "settings.confirm_reset_date": "Format daty: MM/DD/YYYY", + "settings.confirm_reset_tileset": "Kafelki mapy: OpenStreetMap", + "settings.confirm_reset_pins": "Styl znaczników mapy: MeshMonitor", + "settings.confirm_reset_packet": "Monitor pakietów: wyłączony", + "settings.confirm_reset_max_packets": "Maksymalna liczba pakietów: 1000", + "settings.confirm_reset_packet_age": "Wiek pakietów: 24 godziny", + "settings.confirm_reset_affects": "Zmiana wpłynie na wszystkie przeglądarki korzystające z tego systemu.", + "settings.confirm_purge_nodes_title": "Czy na pewno chcesz usunąć wszystkie węzły i historię śledzenia tras?", + "settings.confirm_purge_nodes_impact": "Skutki:", + "settings.confirm_purge_nodes_item1": "Wszystkie informacje o węzłach zostaną usunięte", + "settings.confirm_purge_nodes_item2": "Cała historia śledzenia tras zostanie usunięta", + "settings.confirm_purge_nodes_item3": "Zostanie uruchomione odświeżenie węzłów, aby ponownie zapełnić listę", + "settings.confirm_cannot_undo": "Tego działania nie można cofnąć!", + "settings.confirm_purge_telemetry_title": "Czy na pewno chcesz usunąć wszystkie dane telemetryczne?", + "settings.confirm_purge_telemetry_item1": "Wszystkie historyczne rekordy telemetrii zostaną usunięte", + "settings.confirm_purge_telemetry_item2": "Wykresy telemetrii nie będą zawierały danych historycznych", + "settings.confirm_purge_telemetry_item3": "Bieżące stany węzłów (akumulator, napięcie) zostaną zachowane", + "settings.confirm_purge_telemetry_item4": "Nowe dane telemetryczne nadal będą gromadzone", + "settings.confirm_purge_messages_title": "Czy na pewno chcesz usunąć wszystkie wiadomości?", + "settings.confirm_purge_messages_item1": "Wszystkie wiadomości z kanałów zostaną usunięte", + "settings.confirm_purge_messages_item2": "Wszystkie wiadomości prywatne zostaną usunięte", + "settings.confirm_purge_messages_item3": "Nowe wiadomości nadal będą odbierane", + "settings.confirm_purge_traceroutes_title": "Czy na pewno chcesz zresetować wszystkie dane śledzenia tras?", + "settings.confirm_purge_traceroutes_item1": "Wszystkie zapisane trasy zostaną usunięte", + "settings.confirm_purge_traceroutes_item2": "Cała historia śledzenia tras zostanie usunięta", + "settings.confirm_purge_traceroutes_item3": "Wszystkie odcinki tras (w tym rekordziści) zostaną usunięte", + "settings.confirm_purge_traceroutes_item4": "Nowe trasy nadal będą gromadzone", + "settings.confirm_restart_title": "Czy na pewno chcesz {{action}} MeshMonitor?", + "settings.confirm_restart_docker": "Kontener uruchomi się ponownie automatycznie i będzie niedostępny przez około 10–30 sekund.", + "settings.confirm_restart_manual": "MeshMonitor zostanie wyłączony i będzie wymagał ręcznego ponownego uruchomienia.", + "settings.restart_action": "uruchomić ponownie", + "settings.shutdown_action": "wyłączyć", + "settings.restart_failed": "Nie udało się wykonać działania „{{action}}”. Spróbuj ponownie.", + "settings.apprise_server_section": "Serwer Apprise API", + "settings.apprise_server_description": "MeshMonitor przekazuje powiadomienia Apprise przez serwer Apprise API, który rozsyła je do adresów usług powiadomień skonfigurowanych osobno dla każdego użytkownika (Discord, poczta elektroniczna itd.). Poniżej zmień adres serwera, jeśli działa on poza dołączonym kontenerem.", + "settings.apprise_server_url_label": "Adres URL serwera Apprise API", + "settings.apprise_server_url_description": "Pozostaw puste, jeśli działa serwer Apprise API dołączony do MeshMonitor (domyślnie w instalacjach Docker).", + "settings.apprise_server_test": "Sprawdź połączenie", + "settings.apprise_server_testing": "Testowanie…", + "settings.apprise_server_test_success": "Połączono ({{latency}} ms)", + "settings.apprise_server_test_failure": "Połączenie nie powiodło się: {{error}}", + "settings.analytics": "Analityka", + "settings.analytics_provider_label": "Dostawca analityki", + "settings.analytics_provider_description": "Wybierz usługę analityczną do śledzenia ruchu użytkowników w tej instancji.", + "settings.analytics_provider_none": "Brak (wyłączona)", + "settings.analytics_provider_ga4": "Google Analytics (GA4)", + "settings.analytics_provider_cloudflare": "Cloudflare Web Analytics", + "settings.analytics_provider_posthog": "PostHog", + "settings.analytics_provider_plausible": "Plausible", + "settings.analytics_provider_umami": "Umami", + "settings.analytics_provider_matomo": "Matomo", + "settings.analytics_provider_custom": "Skrypt niestandardowy", + "settings.analytics_measurement_id_label": "Identyfikator pomiaru", + "settings.analytics_measurement_id_description": "Identyfikator pomiaru GA4 (np. G-XXXXXXXXXX)", + "settings.analytics_beacon_token_label": "Token sygnału Beacon", + "settings.analytics_beacon_token_description": "Token Beacon usługi Cloudflare Web Analytics", + "settings.analytics_api_key_label": "Klucz API", + "settings.analytics_api_key_description": "Klucz API projektu PostHog (np. phc_...)", + "settings.analytics_api_host_label": "Host API", + "settings.analytics_api_host_description": "Adres URL instancji PostHog (np. https://app.posthog.com)", + "settings.analytics_domain_label": "Domena", + "settings.analytics_domain_description": "Domena witryny skonfigurowana w Plausible", + "settings.analytics_website_id_label": "Identyfikator witryny", + "settings.analytics_website_id_description": "Identyfikator witryny Umami", + "settings.analytics_script_url_label": "Adres URL skryptu", + "settings.analytics_script_url_description": "Adres URL skryptu śledzącego Umami", + "settings.analytics_site_url_label": "Adres URL Matomo", + "settings.analytics_site_url_description": "Adres URL instancji Matomo (np. https://matomo.example.com)", + "settings.analytics_site_id_label": "Identyfikator witryny", + "settings.analytics_site_id_description": "Identyfikator witryny Matomo", + "settings.analytics_custom_script_label": "Skrypt niestandardowy", + "settings.analytics_custom_script_description": "Wklej pełny blok otrzymany od dostawcy analityki", + "settings.analytics_custom_csp_label": "Domeny dozwolone przez CSP", + "settings.analytics_custom_csp_description": "Lista domen dozwolonych w polityce Content Security Policy, rozdzielona spacjami lub przecinkami (np. https://analytics.example.com)", + "settings.analytics_warning": "Włączenie analityki spowoduje wysyłanie danych odwiedzających do wybranej usługi. Włącz ją tylko wtedy, gdy kontrolujesz tę instancję i przestrzegasz obowiązujących przepisów o ochronie prywatności (RODO, CCPA itd.).", + "dashboard.loading": "Wczytywanie panelu głównego...", + "dashboard.error": "Błąd: {{error}}", + "dashboard.title": "Panel telemetrii", + "dashboard.subtitle_with_data": "Wyświetlanie ostatnich {{days}} dni ulubionej telemetrii", + "dashboard.subtitle_empty": "Dodaj widżety albo oznacz telemetrię gwiazdką w zakładce Węzły", + "dashboard.add_widget_title": "Dodaj widżet", + "dashboard.add_widget_button": "+ Dodaj widżet", + "dashboard.days_to_view": "Liczba wyświetlanych dni:", + "dashboard.search_placeholder": "Wyszukaj węzły lub typy telemetrii...", + "dashboard.all_nodes": "Wszystkie węzły", + "dashboard.all_types": "Wszystkie typy", + "dashboard.device_roles_all": "Role urządzeń: wszystkie", + "dashboard.device_roles_selected": "Role urządzeń: wybrano {{count}}", + "dashboard.all_roles": "Wszystkie role", + "dashboard.no_roles": "Brak dostępnych ról", + "dashboard.sort_by": "Sortuj według:", + "dashboard.sort_custom": "Kolejność niestandardowa (przeciągnij i upuść)", + "dashboard.sort_node_asc": "Nazwa węzła (A–Z)", + "dashboard.sort_node_desc": "Nazwa węzła (Z–A)", + "dashboard.sort_type_asc": "Typ telemetrii (A–Z)", + "dashboard.sort_type_desc": "Typ telemetrii (Z–A)", + "dashboard.widget_count": "{{count}} widżet", + "dashboard.widget_count_plural": "{{count}} widżetów", + "dashboard.chart_count": "{{shown}} z {{total}} wykresu", + "dashboard.chart_count_plural": "{{shown}} z {{total}} wykresów", + "dashboard.empty_title": "Brak widżetów i ulubionych", + "dashboard.empty_description": "Kliknij powyżej „+ Dodaj widżet” albo oznacz gwiazdką wykresy telemetrii na karcie Węzły", + "dashboard.widget.node_status.title": "Stan węzłów", + "dashboard.widget.node_status.description": "Monitoruj stan i łączność wybranych węzłów", + "dashboard.widget.node_status.search_placeholder": "Wyszukaj węzeł do dodania...", + "dashboard.widget.node_status.remove_node": "Usuń węzeł", + "dashboard.widget.node_status.empty": "Nie skonfigurowano węzłów.", + "dashboard.widget.node_status.empty_editable": "Wyszukaj powyżej węzły, które chcesz monitorować.", + "dashboard.widget.traceroute.title": "Śledzenie trasy", + "dashboard.widget.traceroute.description": "Wyświetl ostatnią drogę do wybranego węzła i z powrotem", + "dashboard.widget.traceroute.select_node": "Wybierz węzeł...", + "dashboard.widget.traceroute.change_node": "Zmień węzeł...", + "dashboard.widget.traceroute.empty": "Nie skonfigurowano węzła.", + "dashboard.widget.traceroute.empty_editable": "Wybierz powyżej węzeł, aby wyświetlić informacje o trasie.", + "dashboard.widget.traceroute.loading": "Wczytywanie danych śledzenia trasy...", + "dashboard.widget.traceroute.no_data": "Brak danych śledzenia trasy dla tego węzła.", + "dashboard.widget.traceroute.no_route_data": "Brak danych trasy", + "dashboard.widget.traceroute.last_traceroute": "Ostatnie śledzenie trasy", + "dashboard.widget.traceroute.forward_path": "Droga do celu", + "dashboard.widget.traceroute.return_path": "Droga powrotna", + "dashboard.widget.traceroute.show_map": "Pokaż mapę", + "dashboard.widget.traceroute.hide_map": "Ukryj mapę", + "dashboard.widget.traceroute.no_position_warning": "Niektóre węzły nie mają danych pozycji", + "dashboard.widget.hop_distribution.title": "Rozkład liczby przeskoków", + "dashboard.widget.hop_distribution.description": "Liczba węzłów pogrupowana według liczby przeskoków od Twojego węzła", + "dashboard.widget.hop_distribution.direct": "Bezpośrednio", + "dashboard.widget.hop_distribution.hops_one": "{{count}} przeskok", + "dashboard.widget.hop_distribution.hops_other": "{{count}} przeskoków", + "dashboard.widget.hop_distribution.hops": "{{count}} przeskoków", + "dashboard.widget.hop_distribution.total_nodes": "Łączna liczba węzłów", + "dashboard.widget.hop_distribution.direct_neighbors": "Bezpośrednio", + "dashboard.widget.hop_distribution.longest_path": "Maks. przeskoków", + "dashboard.widget.hop_distribution.unknown": "Nieznane", + "dashboard.widget.distance_distribution.title": "Rozkład odległości", + "dashboard.widget.distance_distribution.description": "Liczba węzłów pogrupowana według odległości od Twojego węzła", + "dashboard.widget.distance_distribution.miles": "mi", + "dashboard.widget.distance_distribution.km": "km", + "dashboard.widget.distance_distribution.settings": "Ustawienia rozmiaru przedziału", + "dashboard.widget.distance_distribution.bucket_size": "Rozmiar przedziału", + "dashboard.widget.distance_distribution.with_position": "Z GPS", + "dashboard.widget.distance_distribution.avg_distance": "Średnia ({{unit}})", + "dashboard.widget.distance_distribution.max_distance": "Maks. ({{unit}})", + "dashboard.widget.distance_distribution.no_home_position": "Twój węzeł nie ma danych pozycji GPS.", + "dashboard.widget.distance_distribution.no_position_data": "Żaden inny węzeł nie ma danych pozycji GPS.", + "dashboard.widget.distance_distribution.no_gps": "Brak GPS", + "dashboard.widget.hop_distance_heatmap.title": "Mapa cieplna przeskoków i odległości", + "dashboard.widget.hop_distance_heatmap.description": "Mapa cieplna liczby węzłów według liczby przeskoków i odległości od Twojego węzła", + "dashboard.widget.hop_distance_heatmap.hops_axis": "Przeskoki", + "dashboard.widget.hop_distance_heatmap.distance_axis": "Odległość ({{unit}})", + "dashboard.widget.hop_distance_heatmap.no_data": "Brak węzłów mających jednocześnie dane o liczbie przeskoków i pozycji GPS.", + "dashboard.widget.hop_distance_heatmap.skipped": "Wykluczone węzły: {{count}} (brak przeskoków lub GPS)", + "dashboard.widget.hop_distance_heatmap.fewer": "Mniej", + "dashboard.widget.hop_distance_heatmap.more": "Więcej", + "dashboard.widget.more.title": "Więcej...", + "dashboard.widget.more.description": "Jak dodać widżety telemetrii (temperatura, wilgotność, akumulator itd.)", + "dashboard.telemetry_help.title": "Dodawanie widżetów telemetrii", + "dashboard.telemetry_help.intro": "Widżety telemetrii (temperatura, wilgotność, akumulator itd.) dodaje się w widoku szczegółów węzła:", + "dashboard.telemetry_help.step1": "Kliknij węzeł na mapie", + "dashboard.telemetry_help.step2": "Kliknij Więcej informacji u dołu", + "dashboard.telemetry_help.step3": "Przewiń do sekcji Dane telemetryczne", + "dashboard.telemetry_help.step4": "Kliknij ikonę gwiazdki ⭐ obok metryki, którą chcesz przypiąć do panelu głównego", + "dashboard.telemetry_help.back": "Wstecz", + "dashboard.show_solar": "Pokaż nakładkę solarną", + "dashboard.hide_solar": "Ukryj nakładkę solarną", + "info.title": "Informacje o urządzeniu i konfiguracja", + "info.connection_status": "Stan połączenia", + "info.node_address": "Adres węzła:", + "info.node_id": "Identyfikator węzła:", + "info.node_name": "Nazwa węzła:", + "info.firmware_version": "Wersja firmware:", + "info.connection_status_label": "Stan połączenia:", + "info.uptime": "Czas pracy:", + "info.uses_tls": "Używa TLS:", + "info.reboot_count": "Liczba ponownych uruchomień:", + "info.not_available": "Niedostępne", + "info.lora_config": "Konfiguracja radia LoRa", + "info.device_role": "Rola urządzenia:", + "info.region": "Region:", + "info.modem_preset": "Profil modemu:", + "info.channel_number": "Numer kanału:", + "info.frequency": "Częstotliwość:", + "info.hop_limit": "Limit przeskoków:", + "info.tx_power": "Moc TX:", + "info.tx_enabled": "TX włączone:", + "info.boosted_rx_gain": "Zwiększone wzmocnienie RX:", + "info.unknown": "Nieznane", + "info.mqtt_config": "Konfiguracja MQTT", + "info.mqtt_enabled": "Włączone:", + "info.mqtt_server": "Serwer:", + "info.mqtt_username": "Nazwa użytkownika:", + "info.mqtt_encryption": "Szyfrowanie włączone:", + "info.mqtt_json": "Format JSON:", + "info.mqtt_tls": "TLS włączone:", + "info.mqtt_root_topic": "Temat główny:", + "info.not_configured": "Nie skonfigurowano", + "info.not_set": "Nie ustawiono", + "info.app_info": "Informacje o aplikacji", + "info.version": "Wersja:", + "info.timezone": "Strefa czasowa:", + "info.timezone_default": "(domyślna)", + "info.virtual_node": "Serwer węzła wirtualnego", + "info.virtual_node_status": "Stan:", + "info.server_running": "Serwer działa:", + "info.connected_clients": "Połączeni klienci:", + "info.client_details": "Szczegóły klientów:", + "info.client_id": "ID:", + "info.client_ip": "IP:", + "info.client_connected": "Połączono:", + "info.client_last_activity": "Ostatnia aktywność:", + "info.virtual_node_description": "Serwer węzła wirtualnego umożliwia jednoczesne połączenie wielu aplikacji mobilnych Meshtastic, zmniejszając obciążenie fizycznego węzła.", + "info.virtual_node_admin_commands": "Polecenia administracyjne:", + "info.virtual_node_admin_allowed": "Dozwolone", + "info.virtual_node_admin_blocked": "Zablokowane", + "info.virtual_node_unavailable": "Stan węzła wirtualnego jest niedostępny", + "info.network_stats": "Statystyki sieci", + "info.total_nodes": "Łączna liczba węzłów:", + "info.total_channels": "Łączna liczba kanałów:", + "info.total_messages": "Łączna liczba wiadomości:", + "info.active_channels": "Aktywne kanały wiadomości:", + "info.packets_tx": "Pakiety TX:", + "info.packets_rx": "Pakiety RX:", + "info.rx_bad": "Błędne RX:", + "info.rx_duplicate": "Duplikaty RX:", + "info.tx_dropped": "Odrzucone TX:", + "info.tx_relay": "Przekazane TX:", + "info.tx_relay_canceled": "Anulowane przekazanie TX:", + "info.radio_statistics": "Statystyki radia", + "info.rx_statistics": "Statystyki RX", + "info.tx_statistics": "Statystyki TX", + "info.rx_good": "Prawidłowe", + "info.rx_bad_short": "Błędne", + "info.rx_dupe_short": "Duplikat", + "info.tx_direct": "Bezpośrednio", + "info.tx_relay_short": "Przekazane", + "info.tx_dropped_short": "Odrzucone", + "info.tx_canceled_short": "Anulowane", + "info.packet_stats_unavailable": "Statystyki pakietów są niedostępne. To urządzenie wysyła HostMetrics (urządzenie oparte na Linuksie) zamiast LocalStats.", + "info.na": "Nie dotyczy", + "info.host_metrics": "Metryki systemu hosta", + "info.host_metrics_description": "Telemetria urządzenia opartego na Linuksie", + "info.host_uptime": "Czas pracy hosta:", + "info.free_memory": "Wolna pamięć:", + "info.disk_free_root": "Wolne miejsce na dysku (/):", + "info.disk_free_2": "Wolne miejsce na dysku (2):", + "info.disk_free_3": "Wolne miejsce na dysku (3):", + "info.load_average": "Średnie obciążenie:", + "info.recent_activity": "Ostatnia aktywność", + "info.last_message": "Ostatnia wiadomość:", + "info.most_active_node": "Ostatnio odebrany węzeł:", + "info.longest_route": "Najdłuższy aktywny odcinek trasy", + "info.distance": "Odległość:", + "info.from": "Od:", + "info.to": "Do:", + "info.last_seen": "Ostatnio widziany:", + "info.no_active_routes": "Nie znaleziono aktywnych odcinków tras", + "info.record_holder": "Rekordowy odcinek trasy", + "info.achieved": "Osiągnięto:", + "info.no_record_holder": "Nie ustawiono jeszcze rekordu", + "info.clear_record": "Usuń rekord", + "info.clear_record_title": "Usunąć rekord?", + "info.clear_record_confirm": "Czy na pewno chcesz usunąć rekord? Tego działania nie można cofnąć.", + "info.record_cleared": "Rekordzista został usunięty", + "info.record_clear_permission": "Brak wystarczających uprawnień do usunięcia rekordzisty", + "info.record_clear_failed": "Nie udało się usunąć rekordzisty. Spróbuj ponownie.", + "info.device_config_unavailable": "Konfiguracja urządzenia jest niedostępna. Upewnij się, że połączenie zostało nawiązane.", + "info.local_telemetry": "Telemetria lokalnego węzła", + "info.node_count_chart": "Liczba węzłów w czasie", + "info.node_count_chart_description": "Porównuje liczbę aktywnych węzłów w MeshMonitor (na podstawie ustawienia maxNodeAgeHours) z liczbą węzłów online zgłaszaną przez urządzenie (z LocalStats).", + "info.active_nodes_meshmonitor": "Aktywne węzły (MeshMonitor)", + "info.online_nodes_device": "Węzły online (urządzenie)", + "info.packet_rate_graphs": "Trendy częstotliwości pakietów (na minutę)", + "info.rx_rates": "Częstotliwość RX (pakiety/min)", + "info.tx_rates": "Częstotliwość TX (pakiety/min)", + "info.no_rate_data": "Za mało danych do obliczenia częstotliwości. Wymagane są co najmniej 2 punkty danych.", + "info.rate_error": "Błąd podczas wczytywania danych o częstotliwości pakietów.", + "info.smart_hops_graph": "Analiza Smart Hops", + "info.smart_hops_title": "Trendy liczby przeskoków", + "info.smart_hops_min": "Min. przeskoków", + "info.smart_hops_max": "Maks. przeskoków", + "info.smart_hops_avg": "Śr. przeskoków", + "info.smart_hops_no_data": "Brak danych o liczbie przeskoków. Dane są zbierane z przychodzących wiadomości i wyników śledzenia tras.", + "info.smart_hops_error": "Błąd podczas wczytywania danych Smart Hops.", + "info.link_quality_graph": "Analiza jakości połączeń", + "info.link_quality_title": "Jakość połączenia", + "info.link_quality_label": "Jakość", + "info.link_quality_no_data": "Brak danych o jakości połączeń. Dane są obliczane na podstawie liczby przeskoków wiadomości, śledzenia tras i błędów PKI.", + "info.link_quality_error": "Błąd podczas wczytywania danych o jakości połączeń.", + "info.link_quality_dead": "Brak połączenia", + "info.link_quality_poor": "Słaba", + "info.link_quality_moderate": "Umiarkowana", + "info.link_quality_good": "Prawidłowe", + "info.link_quality_excellent": "Doskonała", + "info.secrets": "Klucze", + "info.public_key": "Klucz publiczny:", + "info.private_key": "Klucz prywatny:", + "info.secrets_unavailable": "Klucze bezpieczeństwa są niedostępne", + "info.packet_distribution": "Rozkład pakietów", + "info.total_packets": "Łącznie pakietów: {{count}}", + "info.packets_by_device": "Pakiety według urządzenia", + "info.packets_by_type": "Pakiety według typu", + "info.last_hour": "Ostatnia godzina", + "info.last_24_hours": "Ostatnie 24 godziny", + "info.all_data": "Wszystkie dane", + "info.other_devices": "Pozostałe", + "info.no_packet_data": "Brak danych o pakietach", + "info.select_packet_type": "Wybierz typ pakietu, aby zobaczyć wysyłające go węzły", + "info.packets_by_type_nodes": "Węzły według typu pakietu", + "info.nodes_sending_type": "Węzły wysyłające {{type}}", + "info.no_packets_for_type": "W wybranym zakresie czasu nie znaleziono pakietów tego typu", + "info.hw_model_distribution": "Modele sprzętu", + "info.hw_model_breakdown": "Węzły według modelu sprzętu", + "config.loading": "Ładowanie konfiguracji...", + "config.warning_title": "OSTRZEŻENIE", + "config.warning_text": "Zmiana tych ustawień może uszkodzić konfigurację węzła Meshtastic.", + "config.warning_description": "Te ustawienia bezpośrednio modyfikują konfigurację lokalnie połączonego urządzenia Meshtastic. Nieprawidłowe wartości mogą powodować problemy z komunikacją lub siecią, a nawet wymagać przywrócenia ustawień fabrycznych. Zmieniaj je wyłącznie wtedy, gdy rozumiesz ich działanie.", + "config.reboot_device": "Uruchom ponownie urządzenie", + "config.purge_node_db": "Wyczyść bazę węzłów", + "config.import_export_title": "Import i eksport konfiguracji", + "config.import_export_description": "Importuj lub eksportuj konfigurację kanałów i ustawienia urządzenia w formacie adresu URL Meshtastic. Adresy te są zgodne z oficjalnymi aplikacjami Meshtastic.", + "config.import_config": "Importuj konfigurację", + "config.export_config": "Eksportuj konfigurację", + "config.reboot_confirm": "Czy na pewno chcesz ponownie uruchomić urządzenie?\n\nUrządzenie uruchomi się ponownie i będzie niedostępne przez około 30–60 sekund.", + "config.rebooting": "Ponowne uruchamianie urządzenia... Może to potrwać do 60 sekund.", + "config.rebooting_toast": "Ponowne uruchamianie urządzenia...", + "config.reboot_success": "Urządzenie zostało ponownie uruchomione i połączone!", + "config.reboot_success_toast": "Urządzenie zostało ponownie uruchomione!", + "config.reboot_failed_reconnect": "Uruchomiono ponowne uruchamianie urządzenia, ale nie udało się ponownie połączyć. Sprawdź połączenie ręcznie.", + "config.reboot_failed_reconnect_toast": "Rozpoczęto ponowne uruchamianie urządzenia, ale nie udało się ponownie nawiązać połączenia", + "config.reboot_sent": "Polecenie ponownego uruchomienia zostało wysłane! Urządzenie uruchomi się ponownie za 5 sekund.", + "config.reboot_sent_toast": "Wysłano polecenie ponownego uruchomienia!", + "config.reboot_failed": "Nie udało się ponownie uruchomić urządzenia", + "config.purge_confirm": "Czy na pewno chcesz wyczyścić bazę węzłów?\n\nSpowoduje to TRWAŁE USUNIĘCIE wszystkich zapisanych informacji o węzłach ZARÓWNO z urządzenia, JAK I z lokalnej bazy danych MeshMonitor.\nTego działania NIE MOŻNA cofnąć!\n\nUrządzenie automatycznie odbuduje bazę, gdy będzie odbierać węzły w sieci mesh.", + "config.purge_success": "Baza węzłów została wyczyszczona!", + "config.purge_failed": "Nie udało się wyczyścić bazy węzłów", + "config.node_info_adjusted": "Interwał rozgłaszania informacji o węźle ustawiono na wartość minimalną: 3600 sekund (1 godzina)", + "config.device_config_saved": "Konfiguracja urządzenia została zapisana! Urządzenie uruchomi się ponownie...", + "config.device_config_saved_toast": "Zapisano konfigurację urządzenia! Urządzenie zostanie ponownie uruchomione...", + "config.device_config_failed": "Nie udało się zapisać konfiguracji urządzenia", + "config.node_names_saved": "Nazwy węzła zostały zapisane! Urządzenie uruchomi się ponownie...", + "config.node_names_saved_toast": "Zapisano nazwy węzła! Urządzenie zostanie ponownie uruchomione...", + "config.node_names_failed": "Nie udało się zapisać nazw węzła", + "config.hop_limit_adjusted": "Limit przeskoków dostosowano do prawidłowego zakresu (1–7)", + "config.lora_saved": "Konfiguracja LoRa została zapisana! Urządzenie uruchomi się ponownie...", + "config.lora_saved_toast": "Zapisano konfigurację LoRa! Urządzenie zostanie ponownie uruchomione...", + "config.lora_failed": "Nie udało się zapisać konfiguracji LoRa", + "config.position_interval_adjusted": "Interwał rozgłaszania pozycji ustawiono na wartość minimalną: 32 sekundy", + "config.latitude_range_error": "Szerokość geograficzna musi mieścić się w zakresie od -90 do 90", + "config.longitude_range_error": "Długość geograficzna musi mieścić się w zakresie od -180 do 180", + "config.position_saved": "Konfiguracja pozycji została zapisana! Urządzenie uruchomi się ponownie...", + "config.position_saved_toast": "Zapisano konfigurację pozycji! Urządzenie zostanie ponownie uruchomione...", + "config.position_failed": "Nie udało się zapisać konfiguracji pozycji", + "config.mqtt_saved": "Konfiguracja MQTT została zapisana! Urządzenie uruchomi się ponownie...", + "config.mqtt_saved_toast": "Zapisano konfigurację MQTT! Urządzenie zostanie ponownie uruchomione...", + "config.mqtt_failed": "Nie udało się zapisać konfiguracji MQTT", + "config.neighbor_interval_adjusted": "Interwał NeighborInfo ustawiono na wartość minimalną: 14400 sekund (4 godziny)", + "config.neighbor_saved": "Konfiguracja NeighborInfo została zapisana! Urządzenie uruchomi się ponownie...", + "config.neighbor_saved_toast": "Zapisano konfigurację NeighborInfo! Urządzenie zostanie ponownie uruchomione...", + "config.neighbor_failed": "Nie udało się zapisać konfiguracji NeighborInfo", + "config.import_success": "Konfiguracja została zaimportowana", + "config.load_warning": "Ostrzeżenie: nie udało się wczytać bieżącej konfiguracji. Wyświetlono wartości domyślne.", + "notifications.title": "Powiadomienia", + "notifications.services_title": "Usługi powiadomień", + "notifications.services_description": "Włącz lub wyłącz usługi powiadomień. Obie usługi korzystają z poniższych ustawień filtrowania.", + "notifications.webpush_title": "Powiadomienia Web Push", + "notifications.webpush_description": "Powiadomienia push w przeglądarce (wymagają HTTPS)", + "notifications.apprise_title": "Powiadomienia Apprise", + "notifications.apprise_description": "Discord, Slack, poczta elektroniczna, SMS itd. (HTTPS nie jest wymagany)", + "notifications.filtering_title": "Filtrowanie powiadomień", + "notifications.filtering_description": "Te filtry dotyczą powiadomień Web Push i Apprise.", + "notifications.sources_title": "Źródła powiadomień", + "notifications.direct_messages": "Wiadomości prywatne", + "notifications.emoji_reactions": "Reakcje emoji", + "notifications.mqtt_messages": "Wiadomości MQTT", + "notifications.new_nodes": "Nowo znalezione węzły", + "notifications.traceroutes": "Udane śledzenie tras", + "notifications.notify_on_inactive_node": "Powiadamiaj o nieaktywnych węzłach", + "notifications.notify_on_low_battery": "Powiadamiaj o niskim poziomie akumulatora", + "notifications.low_battery_threshold_label": "Alarmuj, gdy poziom akumulatora spadnie poniżej", + "notifications.low_battery_voltage_threshold_label": "Alarmuj, gdy napięcie spadnie poniżej", + "notifications.low_battery_threshold_hint": "Wartość procentowa dotyczy węzłów Meshtastic; napięcie (mV) dotyczy węzłów MeshCore, które zgłaszają stan akumulatora jako napięcie.", + "notifications.low_battery_threshold_hint_percent": "Węzły Meshtastic zgłaszają stan akumulatora jako procent pełnego naładowania.", + "notifications.low_battery_threshold_hint_voltage": "Węzły MeshCore zgłaszają stan akumulatora jako napięcie (mV), a nie wartość procentową.", + "notifications.monitored_nodes_description": "Wybierz monitorowane węzły. Alerty o nieaktywności i niskim poziomie akumulatora będą wysyłane wyłącznie dla węzłów z tej listy.", + "notifications.search_nodes": "Wyszukaj węzły...", + "notifications.no_nodes_match": "Żaden węzeł nie pasuje do wyszukiwania", + "notifications.no_nodes_available": "Brak dostępnych węzłów", + "notifications.monitored_nodes_count": "Wybrane węzły: {{count}}", + "notifications.no_nodes_selected_warning": "Nie wybrano węzłów — nie otrzymasz żadnych powiadomień", + "notifications.notify_on_server_events": "Powiadamiaj o zdarzeniach serwera", + "notifications.server_events_description": "Otrzymuj powiadomienia o zmianach stanu serwera MeshMonitor:", + "notifications.server_events_startup": "Uruchomienie serwera (zawiera wersję i włączone funkcje)", + "notifications.server_events_disconnect": "Rozłączenie węzła (utrata połączenia z węzłem Meshtastic)", + "notifications.server_events_reconnect": "Ponowne połączenie węzła (przywrócenie połączenia)", + "notifications.prefix_with_node_name": "🏷️ Dodawaj nazwę węzła na początku powiadomień", + "notifications.prefix_with_node_name_description": "Wszystkie powiadomienia będą rozpoczynały się nazwą lokalnie połączonego węzła, np. „[NazwaWęzła] Treść wiadomości”", + "notifications.channels_label": "Kanały:", + "notifications.no_channels": "Brak dostępnych kanałów", + "notifications.channel_fallback": "Kanał {{id}}", + "notifications.keyword_filtering_title": "Filtrowanie według słów kluczowych", + "notifications.whitelist_title": "Biała lista (zawsze powiadamiaj)", + "notifications.whitelist_description": "Wiadomości zawierające te słowa zawsze wywołają powiadomienie (jedno słowo lub wyrażenie w wierszu):", + "notifications.blacklist_title": "Czarna lista (wyciszenie)", + "notifications.blacklist_description": "Wiadomości zawierające te słowa nigdy nie wywołają powiadomienia (jedno słowo lub wyrażenie w wierszu):", + "notifications.filter_priority": "Priorytet filtrów:", + "notifications.filter_priority_description": "Biała lista (najwyższy) → czarna lista → ustawienia kanałów/wiadomości prywatnych. Dopasowanie nie uwzględnia wielkości liter i sprawdza fragmenty tekstu.", + "notifications.saving": "Zapisywanie...", + "notifications.save_preferences": "Zapisz preferencje", + "notifications.save_failed": "Nie udało się zapisać preferencji powiadomień", + "notifications.webpush_config_title": "Konfiguracja Web Push", + "notifications.https_required_title": "Wymagany HTTPS", + "notifications.https_required_text": "Powiadomienia push nie są dostępne przez HTTP.", + "notifications.https_required_options": "Aby włączyć powiadomienia push, otwórz MeshMonitor przez:", + "notifications.https_option_ssl": "HTTPS:", + "notifications.https_option_ssl_desc": "Skonfiguruj certyfikaty SSL (zalecane w środowisku produkcyjnym)", + "notifications.https_option_localhost": "Localhost:", + "notifications.https_option_localhost_desc": "W celach testowych otwórz przez http://localhost", + "notifications.current_connection": "Bieżące połączenie:", + "notifications.https_help_title": "Potrzebujesz pomocy z konfiguracją HTTPS?", + "notifications.https_help_link": "prosty przewodnik konfiguracji bezpłatnego HTTPS z DuckDNS", + "notifications.browser_support": "Obsługa przeglądarki", + "notifications.notifications_api": "Notifications API:", + "notifications.service_workers": "Service Workers:", + "notifications.push_api": "Push API:", + "notifications.pwa_installed": "Zainstalowano PWA:", + "notifications.pwa_yes": "Tak", + "notifications.pwa_no": "Nie (w systemie iOS dodaj do ekranu początkowego)", + "notifications.permission": "Uprawnienie:", + "notifications.permission_granted": "Przyznane", + "notifications.permission_denied": "Odmówione", + "notifications.permission_not_requested": "Nie zażądano", + "notifications.subscription": "Subskrypcja:", + "notifications.subscribed": "Subskrybowano", + "notifications.not_subscribed": "Brak subskrypcji", + "notifications.supported": "Obsługiwane", + "notifications.not_supported": "Nieobsługiwane", + "notifications.ios_title": "Użytkownicy iOS: wymagana instalacja", + "notifications.ios_text": "W systemie iOS (iPhone/iPad) powiadomienia push wymagają HTTPS i instalacji PWA:", + "notifications.ios_step1": "Wymagany HTTPS:", + "notifications.ios_step1_desc": "Otwórz MeshMonitor przez HTTPS (np. https://your-server.com)", + "notifications.ios_step2": "Otwórz MeshMonitor w Safari", + "notifications.ios_step3": "Stuknij przycisk Udostępnij (kwadrat ze strzałką)", + "notifications.ios_step4": "Przewiń w dół i stuknij „Dodaj do ekranu początkowego”", + "notifications.ios_step5": "Otwórz MeshMonitor z ekranu początkowego", + "notifications.ios_step6": "Wróć tutaj, aby włączyć powiadomienia", + "notifications.setup_title": "Konfiguracja powiadomień", + "notifications.setup_description": "Wykonaj poniższe kroki, aby włączyć powiadomienia push:", + "notifications.step1_title": "Krok 1: włącz powiadomienia", + "notifications.step1_description": "Zezwól tej witrynie na wyświetlanie powiadomień.", + "notifications.enable_notifications": "Włącz powiadomienia", + "notifications.permission_granted_text": "Przyznano uprawnienie do powiadomień", + "notifications.permission_denied_text": "Odmówiono uprawnienia do powiadomień. Włącz je w ustawieniach przeglądarki.", + "notifications.permission_chrome": "Chrome/Edge:", + "notifications.permission_chrome_desc": "Kliknij ikonę kłódki na pasku adresu → Ustawienia witryny → Powiadomienia", + "notifications.permission_safari": "Safari:", + "notifications.permission_safari_desc": "Safari → Ustawienia → Witryny → Powiadomienia", + "notifications.step2_title": "Krok 2: zasubskrybuj powiadomienia", + "notifications.step2_description": "Zasubskrybuj, aby otrzymywać powiadomienia push o nowych wiadomościach.", + "notifications.subscribing": "Subskrybowanie...", + "notifications.subscribe": "Zasubskrybuj powiadomienia", + "notifications.subscribed_text": "Subskrybujesz powiadomienia push!", + "notifications.unsubscribing": "Anulowanie subskrypcji...", + "notifications.unsubscribe": "Anuluj subskrypcję", + "notifications.unsubscribe_failed": "Nie udało się anulować subskrypcji powiadomień push", + "notifications.subscription_debug": "Debugowanie:", + "notifications.test_title": "Test powiadomień", + "notifications.test_description": "Wyślij powiadomienie testowe, aby sprawdzić poprawność działania.", + "notifications.send_test": "Wyślij powiadomienie testowe", + "notifications.test_sending": "Wysyłanie...", + "notifications.test_sent": "Wysłano: {{sent}}, niepowodzenia: {{failed}}", + "notifications.test_failed": "Nie udało się wysłać powiadomienia testowego", + "notifications.vapid_title": "Konfiguracja VAPID (administrator)", + "notifications.vapid_status": "Stan:", + "notifications.vapid_configured": "Skonfigurowano", + "notifications.vapid_not_configured": "Nie skonfigurowano", + "notifications.active_subscriptions": "Aktywne subskrypcje:", + "notifications.public_key": "Klucz publiczny:", + "notifications.public_key_not_set": "Nie ustawiono", + "notifications.contact_email": "Adres kontaktowy e-mail (podmiot VAPID):", + "notifications.updating": "Aktualizowanie...", + "notifications.update_contact_email": "Zaktualizuj kontaktowy adres e-mail", + "notifications.update_failed": "Nie udało się zaktualizować kontaktowego adresu e-mail", + "notifications.apprise_config_title": "Konfiguracja Apprise", + "notifications.apprise_config_description": "Skonfiguruj Apprise do wysyłania powiadomień do usług zewnętrznych, takich jak Discord, Slack, poczta elektroniczna, SMS i inne. Apprise działa przez HTTP, dlatego HTTPS nie jest wymagany!", + "notifications.apprise_about": "O Apprise:", + "notifications.apprise_about_text": "Apprise obsługuje ponad 100 usług powiadomień, w tym Discord, Slack, Telegram, Microsoft Teams, pocztę elektroniczną (SMTP), SMS i wiele innych. Poniżej wpisz po jednym adresie URL usługi w każdym wierszu.", + "notifications.apprise_urls_label": "Adresy URL usług powiadomień", + "notifications.apprise_urls_description": "Wpisz adresy URL powiadomień Apprise (po jednym w wierszu). Przykłady:", + "notifications.apprise_discord": "— webhook Discord", + "notifications.apprise_slack": "— webhook Slack", + "notifications.apprise_email": "— poczta przez Gmail", + "notifications.apprise_telegram": "— Telegram", + "notifications.apprise_docs_link": "Dokumentacja Apprise", + "notifications.apprise_docs_text": "z pełną listą obsługiwanych usług.", + "notifications.save_configuration": "Zapisz konfigurację", + "notifications.config_saved": "Konfiguracja została zapisana", + "notifications.config_save_failed": "Nie udało się zapisać konfiguracji", + "notifications.connection_test_failed": "Test połączenia nie powiódł się", + "notifications.test_notification_sending": "Wysyłanie powiadomienia testowego...", + "notifications.push_not_supported": "Twoja przeglądarka nie obsługuje powiadomień push", + "notifications.permission_request_failed": "Nie udało się poprosić o uprawnienie do wyświetlania powiadomień. Spróbuj ponownie.", + "notifications.grant_permission_first": "Najpierw zezwól na wyświetlanie powiadomień", + "notifications.channels": "Kanały", + "notifications.channel_number": "Kanał {{id}}", + "notifications.keyword_filtering": "Filtrowanie według słów kluczowych", + "notifications.filter_priority_order": "Biała lista (najwyższy) → czarna lista → ustawienia kanałów/wiadomości prywatnych. Dopasowanie nie uwzględnia wielkości liter i sprawdza fragmenty tekstu.", + "notifications.https_required": "Wymagany HTTPS", + "notifications.https_enable_options": "Aby włączyć powiadomienia push, otwórz MeshMonitor przez:", + "notifications.https_help_text": "Zobacz nasz", + "notifications.pwa_not_installed": "Nie (w systemie iOS dodaj do ekranu początkowego)", + "notifications.ios_description": "W systemie iOS (iPhone/iPad) powiadomienia push wymagają HTTPS i instalacji PWA:", + "notifications.ios_step_https": "Otwórz MeshMonitor przez HTTPS (np. https://your-server.com)", + "notifications.ios_step_safari": "Otwórz MeshMonitor w Safari", + "notifications.ios_step_share": "Stuknij przycisk Udostępnij (kwadrat ze strzałką)", + "notifications.ios_step_add": "Przewiń w dół i stuknij „Dodaj do ekranu początkowego”", + "notifications.ios_step_open": "Otwórz MeshMonitor z ekranu początkowego", + "notifications.ios_step_return": "Wróć tutaj, aby włączyć powiadomienia", + "notifications.permission_denied_message": "Odmówiono uprawnienia do powiadomień. Włącz je w ustawieniach przeglądarki.", + "notifications.permission_fix_chrome": "Kliknij ikonę kłódki na pasku adresu → Ustawienia witryny → Powiadomienia", + "notifications.permission_fix_safari": "Safari → Ustawienia → Witryny → Powiadomienia", + "notifications.subscribe_button": "Zasubskrybuj powiadomienia", + "notifications.debug": "Debugowanie", + "notifications.subscribed_message": "Subskrybujesz powiadomienia push!", + "notifications.unsubscribe_button": "Anuluj subskrypcję", + "notifications.configured": "Skonfigurowano", + "notifications.not_configured": "Nie skonfigurowano", + "notifications.not_set": "Nie ustawiono", + "notifications.about_apprise": "O Apprise", + "notifications.apprise_info": "Apprise obsługuje ponad 100 usług powiadomień, w tym Discord, Slack, Telegram, Microsoft Teams, pocztę elektroniczną (SMTP), SMS i wiele innych. Poniżej wpisz po jednym adresie URL usługi w każdym wierszu.", + "notifications.service_urls_label": "Adresy URL usług powiadomień", + "notifications.service_urls_description": "Wpisz adresy URL powiadomień Apprise (po jednym w wierszu). Przykłady:", + "notifications.example_discord": "Webhook Discord", + "notifications.example_slack": "Webhook Slack", + "notifications.example_email": "Poczta przez Gmail", + "notifications.example_telegram": "Telegram", + "notifications.see_docs": "Zobacz", + "notifications.full_list": "pełną listę obsługiwanych usług", + "notifications.save_config": "Zapisz konfigurację", + "users.title": "Użytkownicy", + "users.add_user": "Dodaj użytkownika", + "users.user_details": "Szczegóły użytkownika", + "users.loading": "Wczytywanie użytkowników...", + "users.access_denied": "Dostęp zabroniony. Wymagane są uprawnienia administratora.", + "users.failed_load": "Nie udało się wczytać użytkowników", + "users.failed_load_permissions": "Nie udało się wczytać uprawnień", + "users.permissions_updated": "Uprawnienia zostały zaktualizowane", + "users.insufficient_permissions_update": "Brak uprawnień do zmiany uprawnień użytkownika", + "users.failed_update_permissions": "Nie udało się zaktualizować uprawnień. Spróbuj ponownie.", + "users.admin_removed": "Odebrano uprawnienia administratora", + "users.admin_granted": "Przyznano uprawnienia administratora", + "users.failed_admin_status": "Nie udało się zmienić stanu administratora", + "users.password_unlocked": "Odblokowano zmianę hasła", + "users.password_locked": "Zablokowano zmianę hasła", + "users.failed_password_lock": "Nie udało się zmienić blokady hasła", + "users.password_fields_required": "Oba pola hasła są wymagane", + "users.password_min_length": "Hasło musi mieć co najmniej 8 znaków", + "users.passwords_not_match": "Hasła nie są zgodne", + "users.password_updated": "Hasło zostało zaktualizowane", + "users.insufficient_permissions_password": "Brak wystarczających uprawnień do ustawienia hasła", + "users.failed_set_password": "Nie udało się ustawić hasła. Spróbuj ponownie.", + "users.user_deactivated": "Użytkownik {{username}} został dezaktywowany", + "users.insufficient_permissions_deactivate": "Brak uprawnień do dezaktywowania użytkownika", + "users.failed_deactivate": "Nie udało się dezaktywować użytkownika. Spróbuj ponownie.", + "users.username_password_required": "Nazwa użytkownika i hasło są wymagane", + "users.user_created": "Użytkownik został utworzony", + "users.failed_create": "Nie udało się utworzyć użytkownika", + "users.special_user": "Użytkownik specjalny", + "users.anonymous_hint": "Określa uprawnienia użytkowników nieuwierzytelnionych", + "users.inactive": "Nieaktywny", + "users.active": "Aktywny", + "users.remove_admin": "Odbierz administratora", + "users.make_admin": "Nadaj administratora", + "users.set_password": "Ustaw hasło", + "users.password_locked_hint": "Zmiana hasła jest zablokowana dla tego konta", + "users.deactivate_user": "Dezaktywuj użytkownika", + "users.cannot_deactivate_anonymous": "Nie można dezaktywować użytkownika anonimowego", + "users.permissions": "Uprawnienia", + "users.channel_primary": "Kanał 0 (główny)", + "users.channel_n": "Kanał {{n}}", + "users.can_control_connection": "Może sterować połączeniem", + "users.connection_view_status": "Wyświetlanie stanu", + "users.connection_control_device": "Sterowanie urządzeniem", + "users.can_initiate_traceroutes": "Może uruchamiać śledzenie tras", + "users.read": "Odczyt", + "users.write": "Zapis", + "users.view_on_map": "Wyświetlanie na mapie", + "users.read_messages": "Odczytywanie wiadomości", + "users.send_messages": "Wysyłanie wiadomości", + "users.save_permissions": "Zapisz uprawnienia", + "users.channel_database_permissions": "Uprawnienia kanałów wirtualnych", + "users.save_channel_db_permissions": "Zapisz uprawnienia kanałów wirtualnych", + "users.no_channel_database_entries": "Nie skonfigurowano kanałów wirtualnych", + "users.channel_db_permissions_updated": "Uprawnienia kanałów wirtualnych zostały zaktualizowane", + "users.failed_update_channel_db_permissions": "Nie udało się zaktualizować uprawnień kanałów wirtualnych", + "users.create_new_user": "Utwórz nowego użytkownika", + "users.username_label": "Nazwa użytkownika", + "users.password_label": "Hasło", + "users.display_name": "Nazwa wyświetlana", + "users.email": "E-mail", + "users.administrator": "Administrator", + "users.create_user": "Utwórz użytkownika", + "users.set_password_for": "Ustaw hasło użytkownika {{username}}", + "users.new_password": "Nowe hasło", + "users.confirm_password": "Potwierdź hasło", + "users.at_least_8_chars": "Co najmniej 8 znaków", + "users.reenter_password": "Wpisz hasło ponownie", + "users.deactivate_confirm": "Dezaktywować użytkownika?", + "users.deactivate_confirm_text": "Czy na pewno chcesz dezaktywować użytkownika {{username}}?", + "users.deactivate_warning": "Spowoduje to odebranie dostępu do MeshMonitor.", + "users.permanently_delete": "Usuń trwale", + "users.permanently_delete_hint": "Trwale usuń tego użytkownika z bazy danych", + "users.cannot_delete_anonymous": "Nie można usunąć użytkownika anonimowego", + "users.permanent_delete_confirm": "Trwale usunąć użytkownika?", + "users.permanent_delete_confirm_text": "Czy na pewno chcesz trwale usunąć użytkownika {{username}}?", + "users.permanent_delete_warning": "Tego działania nie można cofnąć!", + "users.permanent_delete_details": "Spowoduje to usunięcie użytkownika i wszystkich powiązanych danych, w tym uprawnień, preferencji i subskrypcji powiadomień.", + "users.user_permanently_deleted": "Użytkownik {{username}} został trwale usunięty", + "users.failed_permanent_delete": "Nie udało się trwale usunąć użytkownika. Spróbuj ponownie.", + "users.insufficient_permissions_delete": "Brak wystarczających uprawnień do usunięcia użytkownika", + "users.auth_provider": "Dostawca uwierzytelniania", + "users.password_locked_yes": "Tak (zmiana hasła wyłączona)", + "users.full_name": "Imię i nazwisko", + "automation.save_changes": "Zapisz zmiany", + "automation.saving": "Zapisywanie...", + "automation.settings_saved": "Ustawienia zostały zapisane!", + "automation.settings_save_failed": "Nie udało się zapisać ustawień. Spróbuj ponownie.", + "automation.insufficient_permissions": "Brak uprawnień do zapisywania ustawień", + "automation.view_docs": "Wyświetl dokumentację", + "automation.auto_ack.title": "Automatyczne potwierdzanie", + "automation.auto_ack.description": "Po włączeniu automatycznie odpowiada na każdą wiadomość pasującą do wzorca RegEx, używając konfigurowalnego szablonu.", + "automation.auto_ack.tokens_info": "Użyj tokenów, takich jak {NODE_ID}, {NUMBER_HOPS}, {DATE}, {TIME}, {SNR} i {RSSI}, aby wstawiać dynamiczną treść.", + "automation.auto_ack.regex_label": "Wzorzec wiadomości (wyrażenie regularne)", + "automation.auto_ack.regex_description": "Wiadomości pasujące do tego wzorca wywołają automatyczne potwierdzenie. Wzorzec nie uwzględnia wielkości liter.", + "automation.auto_ack.regex_default": "Domyślnie: ^(test|ping)", + "automation.auto_ack.pattern_too_long": "Wzorzec jest za długi (maks. 100 znaków)", + "automation.auto_ack.pattern_too_complex": "Wzorzec jest zbyt złożony lub może powodować problemy z wydajnością", + "automation.auto_ack.invalid_regex": "Nieprawidłowa składnia wyrażenia regularnego", + "automation.auto_ack.active_channels": "Aktywne kanały", + "automation.auto_ack.active_channels_description": "Wybierz kanały i wiadomości prywatne, dla których ma działać automatyczne potwierdzanie", + "automation.auto_ack.direct_messages": "Wiadomości prywatne", + "automation.auto_ack.response_delivery": "Sposób dostarczenia odpowiedzi", + "automation.auto_ack.response_delivery_description": "Określ sposób dostarczania odpowiedzi potwierdzających", + "automation.auto_ack.always_respond_dm": "Zawsze odpowiadaj wiadomością prywatną", + "automation.auto_ack.always_respond_dm_description": "Po włączeniu potwierdzenia będą wysyłane jako wiadomości prywatne niezależnie od kanału, który je wywołał", + "automation.auto_ack.security": "Zabezpieczenia", + "automation.auto_ack.security_description": "Zabezpieczenie przed wysyłaniem wiadomości do węzłów, które mogą nie należeć do Twojego kanału", + "automation.auto_ack.skip_incomplete": "Pomijaj niekompletne węzły", + "automation.auto_ack.skip_incomplete_description": "Nie potwierdzaj automatycznie wiadomości z węzłów bez nazwy lub informacji o sprzęcie. Zalecane dla bezpiecznych kanałów, aby uniknąć odpowiadania węzłom, które mogły podsłuchać zaszyfrowany ruch.", + "automation.auto_ack.node_ignore_list": "Lista ignorowanych węzłów", + "automation.auto_ack.node_ignore_list_description": "Nie potwierdzaj automatycznie wiadomości z tych identyfikatorów węzłów. Wpisz po jednym w wierszu lub rozdziel przecinkami, używając formatu !xxxxxxxx.", + "automation.auto_ack.cooldown_label": "Przerwa dla pojedynczego węzła (sekundy)", + "automation.auto_ack.cooldown_description": "Po odpowiedzi na wiadomość węzła ignoruj kolejne wyzwalacze z tego węzła przez podany czas. Chroni przed nadużyciami polegającymi na spamowaniu słowami wyzwalającymi.", + "automation.auto_ack.cooldown_help": "sekundy (0 = wyłączone)", + "automation.auto_ack.message_multihop": "Szablon wiadomości potwierdzającej (wiadomości wieloprzeskokowe)", + "automation.auto_ack.message_multihop_description": "Wiadomość wysyłana dla wiadomości wieloprzeskokowych (liczba przeskoków > 0).", + "automation.auto_ack.message_direct": "Szablon wiadomości potwierdzającej (połączenia bezpośrednie — 0 przeskoków)", + "automation.auto_ack.message_direct_description": "Wiadomość wysyłana dla połączeń bezpośrednich (liczba przeskoków = 0). Pozostaw puste, aby używać szablonu wieloprzeskokowego dla wszystkich wiadomości.", + "automation.auto_ack.sample_preview_multihop": "Przykładowy podgląd wiadomości (wieloprzeskokowa)", + "automation.auto_ack.sample_preview_multihop_description": "Pokazuje wygląd potwierdzenia po zastąpieniu tokenów (na przykładowych wartościach dla 3 przeskoków)", + "automation.auto_ack.sample_preview_direct": "Przykładowy podgląd wiadomości (połączenie bezpośrednie)", + "automation.auto_ack.sample_preview_direct_description": "Pokazuje wygląd potwierdzenia dla połączenia bezpośredniego (na przykładowych wartościach dla 0 przeskoków)", + "automation.auto_ack.pattern_testing": "Testowanie wzorca", + "automation.auto_ack.pattern_testing_description": "Wpisz przykładowe wiadomości (po jednej w wierszu), aby przetestować wzorzec. Zielony = wywoła automatyczne potwierdzenie, czerwony = nie wywoła", + "automation.auto_ack.test_placeholder": "Wpisz wiadomości testowe, po jednej w wierszu...", + "automation.auto_ack.available_tokens": "Dostępne tokeny:", + "automation.auto_ack.response_type": "Typ odpowiedzi", + "automation.auto_ack.response_type_description": "Wybierz sposób odpowiedzi na wiadomość pasującą do wzorca. Możesz włączyć obie opcje, aby wysłać reakcję i wiadomość.", + "automation.auto_ack.tapback_with_hop_count": "Reakcja z liczbą przeskoków", + "automation.auto_ack.tapback_with_hop_count_description": "Wyślij reakcję emoji z liczbą przeskoków (*️⃣ dla połączenia bezpośredniego, 1️⃣–7️⃣ dla przeskoków). To oszczędny sposób potwierdzania wiadomości.", + "automation.auto_ack.hop_emojis": "Emoji przeskoków", + "automation.auto_ack.reply_with_message": "Odpowiedz wiadomością", + "automation.auto_ack.reply_with_message_description": "Wyślij konfigurowalną odpowiedź tekstową przy użyciu poniższych szablonów.", + "automation.auto_ack.direct_section": "Wiadomości bezpośrednie (0 przeskoków)", + "automation.auto_ack.direct_section_description": "Skonfiguruj odpowiedzi dla połączeń bezpośrednich (wiadomości odebrane z 0 przeskoków).", + "automation.auto_ack.multihop_section": "Wiadomości wieloprzeskokowe (co najmniej 1 przeskok)", + "automation.auto_ack.multihop_section_description": "Skonfiguruj odpowiedzi dla wiadomości przekazywanych (odebranych przez co najmniej 1 przeskok).", + "automation.auto_ack.response_matrix": "Macierz odpowiedzi", + "automation.auto_ack.response_matrix_description": "Skonfiguruj odpowiedzi dla każdej kombinacji typu wiadomości (kanał lub prywatna) i odległości (0 przeskoków lub wiele przeskoków).", + "automation.auto_ack.matrix_message": "Wiadomość", + "automation.auto_ack.matrix_tapback": "Reakcja", + "automation.auto_ack.matrix_respond_via_dm": "Odpowiedz prywatnie", + "automation.auto_ack.direct_reply_always_dm": "Odpowiedzi bezpośrednie są zawsze wysyłane jako wiadomości prywatne", + "automation.auto_welcome.title": "Automatyczne powitanie", + "automation.auto_welcome.description": "Po włączeniu automatycznie wysyła wiadomość powitalną, gdy nowy węzeł dołącza do sieci mesh.", + "automation.auto_welcome.tokens_info": "Użyj tokenów do personalizacji wiadomości: {LONG_NAME}, {SHORT_NAME}, {VERSION}, {DURATION}, {FEATURES}, {NODECOUNT}, {DIRECTCOUNT}", + "automation.auto_welcome.wait_for_name": "Poczekaj na nazwę", + "automation.auto_welcome.wait_for_name_description": "Poczekaj, aż węzeł otrzyma długą lub krótką nazwę, zanim wyślesz wiadomość powitalną. Po wyłączeniu wiadomości powitalne będą wysyłane natychmiast po wykryciu nowego węzła.", + "automation.auto_welcome.max_hops": "Maksymalna liczba przeskoków", + "automation.auto_welcome.max_hops_description": "Witaj tylko węzły znajdujące się w podanej liczbie przeskoków (1–10). Dalsze węzły nie otrzymają wiadomości powitalnej.", + "automation.auto_welcome.delay": "Opóźnienie przed wysłaniem (sekundy)", + "automation.auto_welcome.delay_description": "Po pierwszym odebraniu węzła poczekaj podany czas przed wysłaniem powitania. Daje to węzłowi czas na zakończenie serii transmisji startowych i przygotowanie się do odbioru — jest to szczególnie ważne po resecie NodeDB, gdy wiele węzłów pojawia się jednocześnie. Zakres: 0–120 sekund; domyślnie 30.", + "automation.auto_welcome.broadcast_target": "Miejsce wysłania", + "automation.auto_welcome.broadcast_target_description": "Wybierz miejsce wysłania wiadomości powitalnej", + "automation.auto_welcome.dm_to_new_node": "Wiadomość prywatna do nowego węzła", + "automation.auto_welcome.message_label": "Wiadomość powitalna", + "automation.auto_welcome.message_description": "Wiadomość wysyłana do nowych węzłów.", + "automation.auto_welcome.sample_preview": "Przykładowy podgląd wiadomości", + "automation.auto_welcome.sample_preview_description": "Pokazuje wygląd wiadomości powitalnej po zastąpieniu tokenów (na przykładowych wartościach)", + "automation.auto_welcome.mark_all_welcomed": "Oznacz wszystkie jako powitane", + "automation.auto_welcome.mark_all_welcomed_tooltip": "Oznacz wszystkie istniejące węzły jako już powitane, aby nie otrzymały wiadomości powitalnych", + "automation.auto_welcome.marking": "Oznaczanie...", + "automation.auto_welcome.marked_all_welcomed": "Oznaczono jako powitane węzły: {{count}}", + "automation.auto_welcome.mark_welcomed_failed": "Nie udało się oznaczyć węzłów jako powitane", + "automation.auto_announce.title": "Automatyczne ogłoszenia", + "automation.auto_announce.description": "Po włączeniu automatycznie rozgłasza wiadomość informacyjną na wybranym kanale w skonfigurowanym odstępie. Użyj tokenów {VERSION}, {DURATION}, {FEATURES}, {NODECOUNT} i {DIRECTCOUNT}, aby wstawiać dynamiczną treść.", + "automation.auto_announce.channel": "Kanał", + "automation.auto_announce.channel_description": "Wybierz kanał, na którym ma być rozgłaszane ogłoszenie", + "automation.auto_announce.schedule": "Harmonogram", + "automation.auto_announce.schedule_description": "Ustaw harmonogram ogłoszeń za pomocą wyrażenia cron", + "automation.auto_announce.cron_expression": "Wyrażenie cron", + "automation.auto_announce.cron_expression_description": "Format harmonogramu: minuta godzina dzień miesiąc dzień_tygodnia.", + "automation.auto_announce.cron_help_link": "Pomoc: crontab.guru", + "automation.auto_announce.invalid_cron": "Nieprawidłowe wyrażenie cron", + "automation.auto_announce.valid_cron": "Prawidłowe wyrażenie cron", + "automation.auto_announce.cannot_save_invalid_cron": "Nie można zapisać: nieprawidłowe wyrażenie cron", + "automation.auto_announce.next_run": "Następne uruchomienie", + "automation.auto_announce.message_label": "Treść ogłoszenia", + "automation.auto_announce.message_description": "Wiadomość do rozgłoszenia. Dostępne tokeny: {VERSION} (wersja MeshMonitor), {DURATION} (czas pracy), {FEATURES} (włączone funkcje jako emoji), {NODECOUNT} (aktywne węzły), {DIRECTCOUNT} (węzły bezpośrednie przy 0 przeskoków)", + "automation.auto_announce.sample_preview": "Przykładowy podgląd wiadomości", + "automation.auto_announce.sample_preview_description": "Pokazuje wygląd ogłoszenia po zastąpieniu tokenów (na przykładowych wartościach)", + "automation.auto_announce.send_now": "Wyślij teraz", + "automation.auto_announce.sending": "Wysyłanie...", + "automation.auto_announce.sent_success": "Ogłoszenie zostało wysłane!", + "automation.auto_announce.send_failed": "Nie udało się wysłać ogłoszenia. Spróbuj ponownie.", + "automation.auto_announce.settings_saved_schedule": "Ustawienia zostały zapisane! Zmiany harmonogramu zastosowano natychmiast.", + "automation.auto_announce.last_announcement": "Ostatnie ogłoszenie", + "automation.auto_announce.announce_on_start": "Ogłoszenie przy uruchomieniu", + "automation.auto_announce.announce_on_start_description": "Automatycznie wyślij ogłoszenie po uruchomieniu kontenera (obejmuje godzinną ochronę przed spamem, aby nie przeciążyć sieci)", + "automation.auto_announce.scheduled_sends": "Wysyłanie według harmonogramu", + "automation.auto_announce.scheduled_sends_description": "Użyj wyrażenia cron do planowania ogłoszeń zamiast stałego odstępu", + "automation.auto_announce.interval": "Odstęp między ogłoszeniami (godziny)", + "automation.auto_announce.interval_description": "Jak często rozgłaszać ogłoszenie (3–24 godziny). Domyślnie: 6 godzin", + "automation.auto_announce.broadcast_channel": "Kanał rozgłoszeniowy", + "automation.auto_announce.broadcast_channel_description": "Wybierz kanał, na którym mają być rozgłaszane ogłoszenia", + "automation.auto_announce.feature_emojis": "Emoji funkcji", + "automation.auto_announce.feature_traceroute": "🗺️ Automatyczne śledzenie tras — mapowanie topologii sieci", + "automation.auto_announce.feature_acknowledge": "🤖 Automatyczne potwierdzanie — automatyczne odpowiedzi na wiadomości", + "automation.auto_announce.feature_announce": "📢 Automatyczne ogłoszenia — okresowe komunikaty", + "automation.auto_announce.feature_welcome": "👋 Automatyczne powitanie — powitania nowych węzłów", + "automation.auto_announce.feature_ping": "🏓 Automatyczny ping — automatyczne odpytywanie węzłów", + "automation.auto_announce.feature_key_management": "🔑 Automatyczne zarządzanie kluczami — dystrybucja kluczy szyfrowania", + "automation.auto_announce.feature_responder": "💬 Automatyczna odpowiedź — niestandardowe odpowiedzi automatyczne", + "automation.auto_announce.feature_timed_triggers": "⏱️ Wyzwalacze czasowe — zaplanowane działania", + "automation.auto_announce.feature_geofence": "📍 Wyzwalacze geostref — działania zależne od lokalizacji", + "automation.auto_announce.feature_remote_admin": "🔍 Skanowanie Remote Admin — skanowanie sieci", + "automation.auto_announce.feature_time_sync": "🕐 Automatyczna synchronizacja czasu — synchronizacja zegarów", + "automation.auto_announce.nodeinfo_title": "Rozgłaszanie NodeInfo", + "automation.auto_announce.nodeinfo_description": "Rozgłaszaj informacje o swoim węźle na wybranych kanałach. Ułatwia to węzłom na kanałach dodatkowych wykrycie Twojego węzła bez ręcznej wymiany. Pakiety NodeInfo są wysyłane przy każdym zaplanowanym ogłoszeniu.", + "automation.auto_announce.nodeinfo_channels": "Kanały rozgłoszeniowe", + "automation.auto_announce.nodeinfo_channels_description": "Wybierz kanały, na których ma być rozgłaszane NodeInfo. Możesz wybrać wiele kanałów.", + "automation.auto_announce.nodeinfo_no_channels_warning": "Wybierz co najmniej jeden kanał do rozgłaszania NodeInfo.", + "automation.auto_announce.nodeinfo_delay": "Opóźnienie między kanałami", + "automation.auto_announce.nodeinfo_delay_description": "Czas oczekiwania między wysyłaniem NodeInfo na kolejne kanały (10–300 sekund). Pomaga uniknąć przeciążenia sieci mesh.", + "automation.auto_announce.seconds": "sekundy", + "automation.auto_traceroute.title": "Automatyczne śledzenie trasy", + "automation.auto_traceroute.description": "Po włączeniu automatycznie wysyła żądania śledzenia trasy do wszystkich aktywnych węzłów w skonfigurowanych odstępach. Pomaga utrzymywać aktualne informacje o topologii sieci. Zastosowanie wymaga ponownego uruchomienia kontenera.", + "automation.auto_traceroute.schedule": "Harmonogram", + "automation.auto_traceroute.schedule_description": "Ustaw harmonogram śledzenia tras za pomocą wyrażenia cron", + "automation.auto_traceroute.interval": "Odstęp śledzenia tras (minuty)", + "automation.auto_traceroute.interval_description": "Jak często automatycznie śledzić trasy do węzłów. Domyślnie: 3 minuty", + "automation.auto_traceroute.expiration_hours": "Ponów śledzenie po (godziny)", + "automation.auto_traceroute.expiration_hours_description": "Czas oczekiwania przed ponownym śledzeniem trasy do węzła. Domyślnie: 24 godziny. Zakres: 1–168 godzin (1 tydzień)", + "automation.auto_traceroute.target_selection": "Wybór celów", + "automation.auto_traceroute.target_selection_description": "Skonfiguruj węzły, do których mają być śledzone trasy", + "automation.auto_traceroute.favorites_only": "Tylko ulubione", + "automation.auto_traceroute.favorites_only_description": "Śledź trasy tylko do węzłów oznaczonych jako ulubione", + "automation.auto_traceroute.max_nodes": "Maksymalna liczba węzłów", + "automation.auto_traceroute.max_nodes_description": "Maksymalna liczba węzłów śledzonych w jednym uruchomieniu", + "automation.auto_traceroute.min_interval": "Minimalny odstęp", + "automation.auto_traceroute.min_interval_description": "Minimalny czas między śledzeniem trasy do tego samego węzła", + "automation.auto_traceroute.limit_to_nodes": "Ogranicz do określonych węzłów", + "automation.auto_traceroute.limit_to_nodes_description": "Po włączeniu śledzone będą wyłącznie wybrane węzły. Po wyłączeniu kwalifikują się wszystkie węzły.", + "automation.auto_traceroute.search_nodes": "Wyszukaj węzły...", + "automation.auto_traceroute.no_nodes_match": "Żaden węzeł nie pasuje do wyszukiwania", + "automation.auto_traceroute.no_nodes_available": "Brak dostępnych węzłów", + "automation.auto_traceroute.no_nodes_match_filters": "Żaden węzeł nie pasuje do bieżących filtrów", + "automation.auto_traceroute.selected_count": "Wybrane węzły: {{count}}", + "automation.auto_traceroute.all_nodes_eligible": "Jeśli niczego nie wybrano, kwalifikują się wszystkie węzły", + "automation.auto_traceroute.settings_saved_restart": "Ustawienia zostały zapisane! Aby zmiany zaczęły obowiązywać, należy ponownie uruchomić kontener.", + "automation.auto_traceroute.filter_description": "Użyj filtrów, aby automatycznie uwzględniać pasujące węzły. Każdy filtr DODAJE węzły do listy kwalifikujących się celów (suma zbiorów).", + "automation.auto_traceroute.matching_nodes": "Węzły pasujące do bieżących filtrów: {{count}}", + "automation.auto_traceroute.specific_nodes": "Określone węzły", + "automation.auto_traceroute.filter_by_channel": "Filtruj według kanału", + "automation.auto_traceroute.filter_by_role": "Filtruj według roli", + "automation.auto_traceroute.filter_by_hardware": "Filtruj według modelu sprzętu", + "automation.auto_traceroute.filter_by_name": "Filtruj według nazwy (RegEx)", + "automation.auto_traceroute.no_channels": "Brak dostępnych kanałów", + "automation.auto_traceroute.no_roles_available": "Brak dostępnych ról", + "automation.auto_traceroute.no_hardware_available": "Brak dostępnych modeli sprzętu", + "automation.auto_traceroute.regex_help": "Użyj wzorców RegEx, np. .* (wszystkie), ^Base.* (zaczyna się od Base) albo Router|Gateway (zawiera jedno z nich)", + "automation.auto_traceroute.regex_invalid": "Nieprawidłowy wzorzec RegEx", + "automation.auto_traceroute.test_regex": "Testuj", + "automation.auto_traceroute.clear_filter": "Wyczyść", + "automation.auto_traceroute.recent_log": "Ostatnie automatyczne śledzenia tras", + "automation.auto_traceroute.log_timestamp": "Znacznik czasu", + "automation.auto_traceroute.log_destination": "Cel", + "automation.auto_traceroute.log_status": "Stan", + "automation.auto_traceroute.status_pending": "Oczekuje", + "automation.auto_traceroute.status_success": "Powodzenie", + "automation.auto_traceroute.status_failed": "Niepowodzenie", + "automation.auto_traceroute.no_log_entries": "Nie zarejestrowano jeszcze automatycznego śledzenia tras. Wpisy pojawią się tutaj po wysłaniu żądań.", + "automation.auto_traceroute.sort_by_hops": "Najpierw bliższe węzły", + "automation.auto_traceroute.sort_by_hops_description": "Po włączeniu najpierw śledzone są węzły o mniejszej liczbie przeskoków. Jest to przydatne w gęstych sieciach, w których śledzenie tras do odległych węzłów często kończy się niepowodzeniem. Po wyłączeniu węzły są wybierane losowo.", + "automation.auto_traceroute.schedule_window": "Ogranicz do przedziału czasu", + "automation.auto_traceroute.schedule_window_description": "Uruchamiaj automatyczne śledzenie tras tylko w określonym przedziale czasu. Używany jest lokalny czas serwera.", + "automation.auto_traceroute.filter_by_last_heard": "Ostatnio odebrano w ciągu", + "automation.auto_traceroute.last_heard_within": "Tylko węzły odebrane w ciągu", + "automation.auto_traceroute.hours": "godzin", + "automation.auto_localstats.title": "Automatyczne zdalne statystyki LocalStats", + "automation.auto_localstats.description": "Po włączeniu okresowo żąda telemetrii local_stats (poziom szumu, wykorzystanie pasma, czas pracy, liczba pakietów) od wybranych poniżej zdalnych węzłów. Przydatne dla routerów i przekaźników, które samodzielnie nie rozgłaszają statystyk. Żądania są wysyłane pojedynczo, aby oszczędzać czas antenowy. Zastosowanie wymaga ponownego uruchomienia kontenera.", + "automation.auto_localstats.interval": "Odstęp między żądaniami (minuty)", + "automation.auto_localstats.interval_description": "Jak często żądać local_stats od jednego pasującego zdalnego węzła. Domyślnie: 60 minut. Zakres: 5–1440.", + "automation.auto_localstats.schedule_window": "Ogranicz do przedziału czasu", + "automation.auto_localstats.schedule_window_description": "Wysyłaj zdalne żądania LocalStats tylko w określonym przedziale czasu. Używany jest lokalny czas serwera.", + "automation.auto_localstats.limit_to_nodes": "Wybór węzłów docelowych", + "automation.auto_localstats.filter_description": "Wybierz zdalne węzły do odpytywania. Każdy włączony filtr DODAJE pasujące węzły do listy celów (suma zbiorów).", + "automation.auto_localstats.specific_nodes": "Określone węzły", + "automation.auto_localstats.search_nodes": "Wyszukaj węzły...", + "automation.auto_localstats.no_nodes_match": "Żaden węzeł nie pasuje do wyszukiwania", + "automation.auto_localstats.no_nodes_available": "Brak dostępnych węzłów", + "automation.auto_localstats.filter_by_role": "Filtruj według roli", + "automation.auto_localstats.no_roles_available": "Brak dostępnych ról", + "automation.auto_localstats.filter_by_favorite": "Uwzględnij ulubione węzły", + "automation.auto_localstats.filter_by_name": "Filtruj według nazwy (RegEx)", + "automation.auto_localstats.regex_help": "Użyj wzorców RegEx, np. .* (wszystkie), ^Base.* (zaczyna się od Base) albo Router|Gateway (zawiera jedno z nich)", + "automation.auto_localstats.filter_by_last_heard": "Ostatnio odebrano w ciągu", + "automation.auto_localstats.last_heard_within": "Tylko węzły odebrane w ciągu", + "automation.auto_localstats.hours": "godzin", + "automation.auto_localstats.matching_nodes": "Węzły pasujące do bieżących filtrów: {{count}}", + "automation.auto_localstats.no_nodes_match_filters": "Żaden węzeł nie pasuje do bieżących filtrów", + "automation.auto_localstats.settings_saved_restart": "Ustawienia zostały zapisane! Aby zmiany zaczęły obowiązywać, należy ponownie uruchomić kontener.", + "automation.auto_traceroute.filter_by_hops": "Zakres przeskoków", + "automation.auto_traceroute.min_hops": "Min.:", + "automation.auto_traceroute.max_hops": "Maks.:", + "automation.remote_admin_scanner.title": "Skaner Remote Admin", + "automation.remote_admin_scanner.description": "Automatycznie skanuje węzły sieci mesh, aby wykryć te z włączonym dostępem Remote Admin. Węzły z dostępem administracyjnym można zdalnie konfigurować i monitorować. Skaner wysyła żądania DeviceMetadata i zapisuje informacje o firmware po otrzymaniu prawidłowej odpowiedzi.", + "automation.remote_admin_scanner.interval": "Odstęp skanowania (minuty)", + "automation.remote_admin_scanner.interval_description": "Jak często skanować węzły pod kątem obsługi Remote Admin. W każdym odstępie skanowany jest jeden kwalifikujący się węzeł. Zakres: 1–60 minut", + "automation.remote_admin_scanner.expiration_hours": "Ponów skanowanie po (godziny)", + "automation.remote_admin_scanner.expiration_hours_description": "Czas oczekiwania przed ponownym sprawdzeniem węzła pod kątem dostępu administracyjnego. Domyślnie: 168 godzin (1 tydzień). Zakres: 24–168 godzin", + "automation.remote_admin_scanner.settings_saved": "Ustawienia skanera Remote Admin zostały zapisane", + "automation.remote_admin_scanner.nodes_with_admin": "Węzły z dostępem administracyjnym", + "automation.remote_admin_scanner.nodes_checked": "Sprawdzone węzły", + "automation.remote_admin_scanner.eligible_nodes": "Kwalifikujące się węzły", + "automation.remote_admin_scanner.recent_log": "Ostatnie wyniki skanowania", + "automation.remote_admin_scanner.log_timestamp": "Skanowanie", + "automation.remote_admin_scanner.log_node": "Węzeł", + "automation.remote_admin_scanner.log_status": "Admin", + "automation.remote_admin_scanner.log_firmware": "Firmware", + "automation.remote_admin_scanner.status_has_admin": "Ma dostęp Remote Admin", + "automation.remote_admin_scanner.status_no_admin": "Brak dostępu Remote Admin", + "automation.remote_admin_scanner.no_log_entries": "Brak wyników skanowania. Wpisy pojawią się tutaj podczas skanowania węzłów.", + "automation.remote_admin_scanner.schedule_window": "Ogranicz do przedziału czasu", + "automation.remote_admin_scanner.schedule_window_description": "Uruchamiaj skanowanie Remote Admin tylko w określonym przedziale czasu. Używany jest lokalny czas serwera.", + "automation.schedule.starting_at": "Początek", + "automation.schedule.ending_at": "Koniec", + "automation.time_sync.title": "Automatyczna synchronizacja czasu", + "automation.time_sync.description": "Przesyłaj czas serwera MeshMonitor do węzłów (serwer jest źródłem czasu). Dotyczy węzłów z dostępem Remote Admin — przydatne dla urządzeń bez synchronizacji NTP lub GPS. W każdym odstępie synchronizowany jest jeden kwalifikujący się węzeł.", + "automation.time_sync.interval": "Odstęp synchronizacji (minuty)", + "automation.time_sync.interval_description": "Jak często synchronizować czas węzłów. W każdym odstępie synchronizowany jest jeden kwalifikujący się węzeł. Zakres: 15–1440 minut", + "automation.time_sync.expiration_hours": "Ponów synchronizację po (godziny)", + "automation.time_sync.expiration_hours_description": "Czas oczekiwania przed ponowną synchronizacją czasu węzła. Domyślnie: 24 godziny. Zakres: 1–24 godziny", + "automation.time_sync.limit_to_nodes": "Ogranicz do określonych węzłów", + "automation.time_sync.filter_description": "Po włączeniu czas otrzymają tylko wybrane węzły. Po wyłączeniu kwalifikują się wszystkie węzły z dostępem Remote Admin.", + "automation.time_sync.select_nodes": "Wybierz węzły", + "automation.time_sync.search_nodes": "Wyszukaj węzły...", + "automation.time_sync.no_nodes_match": "Żaden węzeł nie pasuje do wyszukiwania", + "automation.time_sync.no_nodes_available": "Nie znaleziono węzłów z Remote Admin. Włącz skaner Remote Admin, aby je wykryć.", + "automation.time_sync.eligible_nodes": "Kwalifikujące się węzły", + "automation.time_sync.nodes_with_remote_admin": "węzły z Remote Admin", + "automation.time_sync.settings_saved": "Ustawienia automatycznej synchronizacji czasu zostały zapisane", + "automation.auto_key_management.title": "Automatyczne zarządzanie kluczami", + "automation.auto_key_management.description": "Automatycznie próbuje naprawiać niezgodności kluczy PKI przez wymianę informacji o węźle i opcjonalne usuwanie nieaktualnych kluczy z bazy urządzenia.", + "automation.auto_key_management.interval_minutes": "Odstęp między próbami (minuty)", + "automation.auto_key_management.interval_description": "Czas oczekiwania między próbami wymiany informacji o węźle dla każdego węzła z niezgodnym kluczem.", + "automation.auto_key_management.max_exchanges": "Maksymalna liczba prób wymiany", + "automation.auto_key_management.max_exchanges_description": "Liczba prób wymiany informacji o węźle przed rezygnacją.", + "automation.auto_key_management.auto_purge": "Automatycznie usuń po wyczerpaniu prób", + "automation.auto_key_management.auto_purge_description": "Po włączeniu automatycznie usuwa węzeł z bazy urządzenia po niepowodzeniu wszystkich prób wymiany, a następnie wysyła ostatnie żądanie wymiany informacji o węźle.", + "automation.auto_key_management.activity_log": "Dziennik aktywności", + "automation.auto_key_management.no_activity": "Brak aktywności naprawy kluczy", + "automation.auto_key_management.log_time": "Czas", + "automation.auto_key_management.log_node": "Węzeł", + "automation.auto_key_management.log_action": "Działanie", + "automation.auto_key_management.log_status": "Stan", + "automation.auto_key_management.action_exchange": "Wymiana", + "automation.auto_key_management.action_purge": "Usuń", + "automation.auto_key_management.action_fixed": "Naprawiono", + "automation.auto_key_management.action_exhausted": "Wyczerpano próby", + "automation.auto_key_management.action_mismatch": "Niezgodność", + "automation.auto_key_management.immediate_purge": "Natychmiast usuń przy niezgodności klucza", + "automation.auto_key_management.immediate_purge_description": "Gdy węzeł rozgłasza klucz inny niż zapisany w pamięci podręcznej urządzenia, natychmiast usuń go z bazy urządzenia, aby wymusić ponowne wykrycie. Po wyłączeniu używany jest standardowy cykl wymiany, a następnie usunięcia.", + "automation.auto_key_management.log_old_key": "Stary klucz", + "automation.auto_key_management.log_new_key": "Nowy klucz", + "automation.timer_triggers.section_title": "Zdarzenia czasowe", + "automation.timer_triggers.description": "Planuj automatyczne uruchamianie skryptów lub wysyłanie wiadomości tekstowych za pomocą wyrażeń cron", + "automation.timer_triggers.view_docs": "Wyświetl dokumentację", + "automation.timer_triggers.add_new": "Dodaj nowy wyzwalacz czasowy", + "automation.timer_triggers.existing": "Istniejące wyzwalacze czasowe", + "automation.timer_triggers.no_timers": "Nie skonfigurowano wyzwalaczy czasowych. Dodaj wyzwalacz powyżej, aby zaplanować automatyczne uruchamianie skryptu lub wysyłanie wiadomości.", + "automation.timer_triggers.name": "Nazwa:", + "automation.timer_triggers.name_placeholder": "np. Raport dzienny", + "automation.timer_triggers.name_required": "Nazwa jest wymagana", + "automation.timer_triggers.schedule": "Harmonogram:", + "automation.timer_triggers.cron_help": "Format: minuta godzina dzień miesiąc dzień_tygodnia", + "automation.timer_triggers.invalid_cron": "Nieprawidłowe wyrażenie cron", + "automation.timer_triggers.valid_cron_required": "Wymagane jest prawidłowe wyrażenie cron", + "automation.timer_triggers.response_type": "Typ:", + "automation.timer_triggers.type_script": "Skrypt", + "automation.timer_triggers.type_text": "Wiadomość tekstowa", + "automation.timer_triggers.script": "Skrypt:", + "automation.timer_triggers.script_required": "Skrypt jest wymagany", + "automation.timer_triggers.no_scripts": "Nie znaleziono skryptów w /data/scripts/", + "automation.timer_triggers.select_script": "Wybierz skrypt...", + "automation.timer_triggers.script_args": "Argumenty:", + "automation.timer_triggers.script_args_help": "Opcjonalne argumenty CLI. Tokeny: {IP}, {PORT}, {VERSION}, {NODECOUNT} itd.", + "automation.timer_triggers.script_args_placeholder": "--ip {IP} --count {NODECOUNT}", + "automation.timer_triggers.message": "Wiadomość:", + "automation.timer_triggers.message_placeholder": "np. MeshMonitor {VERSION} — węzły online: {NODECOUNT}", + "automation.timer_triggers.message_required": "Wiadomość jest wymagana", + "automation.timer_triggers.tokens_help": "Dostępne tokeny:", + "automation.timer_triggers.channel": "Kanał:", + "automation.timer_triggers.channel_help_generic": "Dane wyjściowe zostaną wysłane na ten kanał", + "automation.timer_triggers.channel_none": "Brak (bez wysyłania do sieci mesh)", + "automation.timer_triggers.channel_none_help": "Skrypt sam obsługuje dane wyjściowe (np. integracje zewnętrzne)", + "automation.timer_triggers.add": "Dodaj wyzwalacz czasowy", + "automation.timer_triggers.added": "Dodano wyzwalacz czasowy", + "automation.timer_triggers.saved": "Zapisano wyzwalacze czasowe", + "automation.timer_triggers.save_failed": "Nie udało się zapisać wyzwalaczy czasowych", + "automation.timer_triggers.never_run": "Nigdy", + "automation.geofence_triggers.title": "Wyzwalacze geostref", + "automation.geofence_triggers.section_title": "Wyzwalacze geostref", + "automation.geofence_triggers.description": "Uruchamiaj działania, gdy węzły wchodzą do obszarów geograficznych, opuszczają je lub pozostają w nich", + "automation.geofence_triggers.view_docs": "Wyświetl dokumentację", + "automation.geofence_triggers.add_new": "Dodaj nowy wyzwalacz geostrefy", + "automation.geofence_triggers.existing": "Istniejące wyzwalacze geostref", + "automation.geofence_triggers.no_triggers": "Nie skonfigurowano wyzwalaczy geostref. Dodaj jeden powyżej, aby uruchamiać działania na podstawie położenia węzła.", + "automation.geofence_triggers.name": "Nazwa:", + "automation.geofence_triggers.name_placeholder": "np. Alert wejścia do bazy", + "automation.geofence_triggers.name_required": "Nazwa jest wymagana", + "automation.geofence_triggers.shape_type": "Kształt:", + "automation.geofence_triggers.shape_circle": "Okrąg", + "automation.geofence_triggers.shape_polygon": "Wielokąt", + "automation.geofence_triggers.event": "Zdarzenie:", + "automation.geofence_triggers.event_entry": "Wejście", + "automation.geofence_triggers.event_exit": "Wyjście", + "automation.geofence_triggers.event_while_inside": "Pozostawanie wewnątrz", + "automation.geofence_triggers.while_inside_interval": "Odstęp (minuty):", + "automation.geofence_triggers.while_inside_interval_help": "Jak często uruchamiać działanie, gdy węzły pozostają wewnątrz", + "automation.geofence_triggers.node_filter": "Węzły:", + "automation.geofence_triggers.node_filter_all": "Wszystkie węzły", + "automation.geofence_triggers.node_filter_selected": "Wybrane węzły", + "automation.geofence_triggers.response_type": "Typ:", + "automation.geofence_triggers.type_script": "Skrypt", + "automation.geofence_triggers.type_text": "Wiadomość tekstowa", + "automation.geofence_triggers.script": "Skrypt:", + "automation.geofence_triggers.script_required": "Skrypt jest wymagany", + "automation.geofence_triggers.no_scripts": "Nie znaleziono skryptów w /data/scripts/", + "automation.geofence_triggers.select_script": "Wybierz skrypt...", + "automation.geofence_triggers.script_args": "Argumenty:", + "automation.geofence_triggers.script_args_help": "Opcjonalne argumenty CLI. Tokeny: {IP}, {NODE_ID}, {EVENT}, {GEOFENCE_NAME} itd.", + "automation.geofence_triggers.script_args_placeholder": "--ip {IP} --dest {NODE_ID} --reboot", + "automation.geofence_triggers.message": "Wiadomość:", + "automation.geofence_triggers.message_placeholder": "np. {LONG_NAME} wszedł do {GEOFENCE_NAME}", + "automation.geofence_triggers.message_required": "Wiadomość jest wymagana", + "automation.geofence_triggers.tokens_help": "Dostępne tokeny:", + "automation.geofence_triggers.channel": "Kanał:", + "automation.geofence_triggers.channel_help": "Dane wyjściowe zostaną wysłane na ten kanał", + "automation.geofence_triggers.channel_none": "Brak (bez wysyłania do sieci mesh)", + "automation.geofence_triggers.channel_none_help": "Skrypt sam obsługuje dane wyjściowe (np. integracje zewnętrzne)", + "automation.geofence_triggers.verify_response": "Zweryfikuj odpowiedź (włącz potwierdzanie dostarczenia z 3 próbami — tylko wiadomości prywatne)", + "automation.geofence_triggers.add": "Dodaj wyzwalacz geostrefy", + "automation.geofence_triggers.added": "Dodano wyzwalacz geostrefy", + "automation.geofence_triggers.saved": "Zapisano wyzwalacze geostref", + "automation.geofence_triggers.save_failed": "Nie udało się zapisać wyzwalaczy geostref", + "automation.geofence_triggers.never_run": "Nigdy", + "automation.geofence_triggers.shape_required": "Zdefiniuj kształt geostrefy na mapie", + "automation.geofence_triggers.search_nodes": "Wyszukaj węzły...", + "automation.geofence_triggers.map_click_circle": "Kliknij mapę, aby umieścić środek okręgu", + "automation.geofence_triggers.map_click_polygon": "Klikaj mapę, aby dodawać wierzchołki wielokąta. Kliknij dwukrotnie, aby zakończyć.", + "automation.geofence_triggers.radius_km": "Promień (km):", + "automation.geofence_triggers.center_lat": "Szerokość geograficzna środka:", + "automation.geofence_triggers.center_lng": "Długość geograficzna środka:", + "automation.geofence_triggers.vertices_count": "Wierzchołki:", + "automation.geofence_triggers.clear_shape": "Usuń kształt", + "automation.geofence_triggers.cooldown": "Przerwa (minuty):", + "automation.geofence_triggers.cooldown_help": "Minimalny czas między wyzwoleniami dla każdego węzła. 0 = brak przerwy.", + "automation.geofence_triggers.cooldown_display": "Przerwa: {{minutes}} min", + "script_test.title": "Test skryptu", + "script_test.mock_context": "Kontekst testowy", + "script_test.run_test": "Uruchom test", + "script_test.running": "Uruchamianie...", + "script_test.console_output": "Wyjście konsoli", + "script_test.would_send": "Zostałoby wysłane do sieci mesh", + "script_test.would_send_note": "Te wiadomości zostałyby wysłane przy rzeczywistym wyzwoleniu (NIE są wysyłane podczas testu)", + "script_test.no_messages": "Brak wiadomości do wysłania", + "script_test.environment": "Zmienne środowiskowe", + "script_test.execution_time": "Czas wykonania: {{time}} ms", + "script_test.success": "Skrypt został wykonany prawidłowo", + "script_test.error": "Wykonanie skryptu nie powiodło się", + "script_test.mock.message": "Wiadomość testowa", + "script_test.mock.message_hint": "Wpisz wiadomość, która wywołałaby ten skrypt", + "script_test.mock.trigger_pattern": "Wzorzec wyzwalający", + "script_test.mock.from_node": "Numer węzła nadawcy", + "script_test.mock.from_short_name": "Krótka nazwa nadawcy", + "script_test.mock.from_long_name": "Długa nazwa nadawcy", + "script_test.mock.event_type": "Zdarzenie geostrefy", + "script_test.mock.node_lat": "Szerokość geograficzna węzła", + "script_test.mock.node_lon": "Długość geograficzna węzła", + "theme_management.title": "Motywy niestandardowe", + "theme_management.description": "Twórz i zarządzaj niestandardowymi motywami kolorystycznymi aplikacji", + "theme_management.create_new": "Utwórz nowy motyw", + "theme_management.no_themes": "Brak niestandardowych motywów.", + "theme_management.get_started": "Kliknij „Utwórz nowy motyw”, aby rozpocząć!", + "theme_management.delete_confirm": "Czy na pewno chcesz usunąć ten motyw?", + "theme_management.delete_failed": "Nie udało się usunąć motywu: {{error}}", + "theme_management.built_in": "Wbudowany", + "theme_management.active": "Aktywny", + "theme_management.apply": "Zastosuj", + "theme_management.apply_dark": "Użyj jako ciemnego", + "theme_management.apply_light": "Użyj jako jasnego", + "theme_management.dark_active": "Aktywny ciemny", + "theme_management.light_active": "Aktywny jasny", + "theme_management.assigned_dark": "Ciemna", + "theme_management.assigned_light": "Jasny", + "theme_management.clone": "Sklonuj", + "theme_editor.edit_title": "Edytuj motyw", + "theme_editor.create_title": "Utwórz niestandardowy motyw", + "theme_editor.import": "Importuj", + "theme_editor.export": "Eksportuj", + "theme_editor.theme_name": "Nazwa motywu", + "theme_editor.name_placeholder": "Mój niestandardowy motyw", + "theme_editor.slug": "Identyfikator tekstowy", + "theme_editor.visual_editor": "Edytor wizualny", + "theme_editor.json_editor": "Edytor JSON", + "theme_editor.validation_errors": "Błędy walidacji", + "theme_editor.accessibility_check": "Kontrola dostępności", + "theme_editor.critical_issues": "Problemy krytyczne", + "theme_editor.warnings": "Ostrzeżenia", + "theme_editor.recommendations": "Zalecenia", + "theme_editor.update_theme": "Zaktualizuj motyw", + "theme_editor.create_theme": "Utwórz motyw", + "theme_editor.enter_name": "Wpisz nazwę motywu", + "theme_editor.validation_failed": "Walidacja motywu nie powiodła się:\n{{errors}}", + "theme_editor.save_failed": "Nie udało się zapisać motywu: {{error}}", + "theme_editor.invalid_file": "Nieprawidłowy plik motywu:\n{{errors}}", + "theme_editor.import_failed": "Nie udało się zaimportować motywu: {{error}}", + "theme_gallery.title": "Galeria motywów", + "theme_gallery.description": "Wybierz jeden z {{count}} starannie przygotowanych motywów, w tym warianty zwiększające dostępność. Kliknij kartę motywu, aby natychmiast zobaczyć podgląd!", + "theme_gallery.category_all": "Wszystkie motywy", + "theme_gallery.category_catppuccin": "Catppuccin", + "theme_gallery.category_popular": "Popularne", + "theme_gallery.category_high_contrast": "Wysoki kontrast", + "theme_gallery.category_colorblind": "Dostosowane do zaburzeń rozpoznawania barw", + "theme_gallery.current": "Aktualne", + "theme_gallery.active": "Aktywny", + "theme_gallery.preview": "Odsłuchaj", + "theme_gallery.accessibility_info": "Informacje o dostępności", + "theme_gallery.high_contrast_title": "Motywy o wysokim kontraście", + "theme_gallery.high_contrast_desc": "Nasze motywy o wysokim kontraście zapewniają maksymalną czytelność i zgodność z WCAG AAA. Są odpowiednie dla osób słabowidzących oraz wszystkich, którzy preferują wyraźniejsze rozróżnienie kolorów.", + "theme_gallery.colorblind_title": "Motywy dostosowane do zaburzeń rozpoznawania barw", + "theme_gallery.colorblind_desc": "Oferujemy trzy specjalne motywy dla różnych rodzajów zaburzeń rozpoznawania barw:", + "theme_gallery.protanopia": "Protanopia", + "theme_gallery.protanopia_desc": "Dla osób nierozpoznających czerwieni (dotyczy około 1% mężczyzn)", + "theme_gallery.deuteranopia": "Deuteranopia", + "theme_gallery.deuteranopia_desc": "Dla osób nierozpoznających zieleni (dotyczy około 1% mężczyzn)", + "theme_gallery.tritanopia": "Tritanopia", + "theme_gallery.tritanopia_desc": "Dla osób nierozpoznających niebieskiego (rzadkie, dotyczy około 0,001%)", + "theme_gallery.persistence_title": "Zapamiętywanie motywu", + "theme_gallery.persistence_desc": "Wybór motywu jest zapisywany automatycznie i zachowywany między sesjami. Wszystkie motywy działają na każdej stronie i we wszystkich elementach interfejsu.", + "tileset.map_style": "Styl mapy", + "tileset.custom": "Niestandardowy", + "tileset.collapse": "Zwiń wybór kafelków", + "tileset.expand": "Rozwiń wybór kafelków", + "tileset_manager.title": "Niestandardowe serwery kafelków", + "tileset_manager.description": "Dodaj niestandardowe serwery kafelków do map offline lub własnego stylu.", + "tileset_manager.setup_guide": "Wyświetl przewodnik konfiguracji", + "tileset_manager.no_tilesets": "Nie skonfigurowano niestandardowych serwerów kafelków.", + "tileset_manager.no_tilesets_hint": "Skonfiguruj lokalny serwer kafelków (np. TileServer GL) lub użyj własnej usługi hostingowej.", + "tileset_manager.vector": "Wektorowe", + "tileset_manager.raster": "Rastrowe", + "tileset_manager.max_zoom": "Maks. powiększenie", + "tileset_manager.attribution": "Informacja o autorstwie", + "tileset_manager.edit_form_title": "Edytuj niestandardowy serwer kafelków", + "tileset_manager.add_form_title": "Dodaj niestandardowy serwer kafelków", + "tileset_manager.field_name": "Nazwa", + "tileset_manager.name_placeholder": "Moje niestandardowe kafelki", + "tileset_manager.name_help": "Przyjazna nazwa tego serwera kafelków (maks. 100 znaków)", + "tileset_manager.field_url": "Adres URL kafelków", + "tileset_manager.url_help": "Musi zawierać znaczniki {z}, {x}, {y}. Opcjonalnie: {s} dla subdomen", + "tileset_manager.url_example_raster": "Rastrowe: http://localhost:8080/styles/osm-bright/{z}/{x}/{y}.png", + "tileset_manager.url_example_vector": "Wektorowe: http://localhost:8080/data/v3/{z}/{x}/{y}.pbf", + "tileset_manager.tileserver_tip_title": "TileServer GL Light (zalecany dla map offline)", + "tileset_manager.tileserver_tip_desc": "Do pracy offline użyj TileServer GL Light z plikami .mbtiles:", + "tileset_manager.tileserver_tip_support": "Obsługuje kafelki wektorowe (.pbf) i rastrowe (.png). Wersja Light nie ma zależności natywnych i działa na wszystkich platformach.", + "tileset_manager.tileserver_tip_link": "Wyświetl pełny przewodnik konfiguracji z konfiguratorem Docker Compose", + "tileset_manager.field_attribution": "Informacja o autorstwie", + "tileset_manager.attribution_placeholder": "Dane mapy © Twoja organizacja", + "tileset_manager.attribution_help": "Tekst informacji o autorstwie wyświetlany na mapie (maks. 200 znaków)", + "tileset_manager.field_max_zoom": "Maks. powiększenie", + "tileset_manager.max_zoom_help": "Maksymalny poziom powiększenia (1–22)", + "tileset_manager.field_description": "Opis", + "tileset_manager.description_placeholder": "Niestandardowe kafelki offline do zastosowań terenowych", + "tileset_manager.description_help": "Opcjonalny opis (maks. 200 znaków)", + "tileset_manager.add_button": "Dodaj niestandardowy serwer kafelków", + "tileset_manager.save_failed": "Nie udało się zapisać niestandardowego zestawu kafelków. Spróbuj ponownie.", + "tileset_manager.delete_confirm": "Czy na pewno chcesz usunąć ten niestandardowy zestaw kafelków?", + "tileset_manager.delete_failed": "Nie udało się usunąć niestandardowego zestawu kafelków. Spróbuj ponownie.", + "tileset_manager.test_button": "Testuj", + "tileset_manager.test_button_title": "Sprawdź połączenie i zgodność serwera kafelków", + "tileset_manager.testing": "Testowanie...", + "tileset_manager.test_tile_type": "Typ", + "tileset_manager.test_tile_size": "Rozmiar", + "tileset_manager.test_matched_layers": "Dopasowane warstwy", + "tileset_manager.test_missing_layers": "Brakujące warstwy", + "tileset_manager.autodetect_title": "Automatyczne wykrywanie adresu URL", + "tileset_manager.autodetect_placeholder": "hostname:port lub http://hostname:port", + "tileset_manager.autodetect_help": "Wpisz adres serwera kafelków, a automatycznie znajdziemy prawidłowy format adresu URL.", + "tileset_manager.autodetect_button": "Wykryj automatycznie", + "tileset_manager.autodetecting": "Wykrywanie...", + "tileset_manager.autodetect_testing": "Testowanie wzorca {{current}} z {{total}}...", + "tileset_manager.autodetect_found": "Znaleziono działające adresy URL: {{count}}", + "tileset_manager.autodetect_none_found": "Nie znaleziono działających adresów URL kafelków", + "tileset_manager.use_this_url": "Użyj", + "tileset_manager.reload_required": "Ze względu na ograniczenia bezpieczeństwa przeglądarki nowy serwer kafelków zacznie działać po ponownym wczytaniu strony.", + "tileset_manager.reload_now": "Wczytaj stronę ponownie", + "telemetry.loading": "Wczytywanie danych telemetrycznych...", + "telemetry.load_failed": "Nie udało się wczytać danych telemetrycznych", + "telemetry.no_data": "Brak danych telemetrycznych dla tego węzła", + "telemetry.title_one": "Telemetria z ostatniej {{count}} godziny", + "telemetry.title_other": "Telemetria z ostatnich {{count}} godzin", + "telemetry.title_minutes_one": "Telemetria z ostatniej {{count}} minuty", + "telemetry.title_minutes_other": "Telemetria z ostatnich {{count}} minut", + "telemetry.time_range": "Zakres czasu telemetrii", + "telemetry.favorite_save_failed": "Nie udało się dodać do ulubionych. Spróbuj ponownie.", + "telemetry.purge_confirm": "Czy na pewno chcesz usunąć wszystkie dane typu {{type}} dla tego węzła? Tego działania nie można cofnąć.", + "telemetry.purge_permission_denied": "Brak wystarczających uprawnień do usunięcia danych telemetrycznych", + "telemetry.purge_success": "Dane typu {{type}} zostały usunięte", + "telemetry.purge_failed": "Nie udało się usunąć danych telemetrycznych. Spróbuj ponownie.", + "telemetry.remove_favorite": "Usuń z ulubionych", + "telemetry.add_favorite": "Dodaj do ulubionych", + "telemetry.more_options": "Więcej opcji", + "telemetry.purge_data": "Usuń dane", + "telemetry.show_solar": "Pokaż nakładkę solarną", + "telemetry.hide_solar": "Ukryj nakładkę solarną", + "node_details.title": "Szczegóły węzła", + "node_details.expand": "Rozwiń szczegóły węzła", + "node_details.collapse": "Zwiń szczegóły węzła", + "node_details.hardware": "Sprzęt", + "node_details.battery": "Akumulator", + "node_details.signal_snr": "Sygnał (SNR)", + "node_details.signal_rssi": "Sygnał (RSSI)", + "node_details.channel_utilization": "Wykorzystanie kanału", + "node_details.air_utilization_tx": "Wykorzystanie pasma TX", + "node_details.uptime": "Czas działania", + "node_details.node_id": "Identyfikator węzła", + "node_details.role": "Rola", + "node_details.channel": "Kanał", + "node_details.firmware": "Firmware", + "node_details.hops_away": "Liczba przeskoków", + "node_details.direct": "Bezpośrednio", + "node_details.hops_one": "{{count}} przeskok", + "node_details.hops_other": "{{count}} przeskoków", + "node_details.connection": "Połączenie", + "node_details.via_mqtt": "Przez MQTT", + "node_details.remote_admin": "Remote Admin", + "node_details.remote_admin_yes": "Dostępny", + "node_details.remote_admin_no": "Niedostępny", + "node_details.remote_admin_unknown": "Nieznany", + "node_details.remote_firmware": "Zdalny firmware", + "node_details.has_wifi": "Obsługuje WiFi", + "node_details.has_bluetooth": "Obsługuje Bluetooth", + "node_details.has_ethernet": "Obsługuje Ethernet", + "node_details.can_shutdown": "Można wyłączyć", + "node_details.last_heard": "Ostatnio odebrano", + "node_details.public_key": "Klucz publiczny", + "messages.hops_one": "{{count}}/{{hopStart}} przeskok", + "messages.hops_other": "{{count}}/{{hopStart}} przeskoków", + "messages.signal_info": "Siła sygnału (SNR/RSSI) — wiadomość bezpośrednia", + "messages.click_for_relay": "Kliknij, aby zobaczyć potencjalne węzły przekazujące", + "messages.via_mqtt": "Odebrano przez MQTT", + "link_preview.loading": "Wczytywanie podglądu...", + "link_preview.image_alt": "Podgląd odnośnika", + "message_status.failed": "Nie udało się wysłać — błąd routingu lub przekroczono maksymalną liczbę prób", + "message_status.confirmed": "Odebrano przez węzeł docelowy", + "message_status.delivered": "Przesłano do sieci mesh", + "message_status.pending": "Wysyłanie...", + "message_status.timeout": "Nie odebrano potwierdzenia (przekroczono czas oczekiwania)", + "auto_responder.title": "Automatyczna odpowiedź", + "auto_responder.view_docs": "Wyświetl dokumentację automatycznych odpowiedzi", + "auto_responder.description": "Automatycznie odpowiadaj na wiadomości pasujące do wzorców wyzwalających. Obsługuje odpowiedzi tekstowe, webhooki HTTP i wykonywanie niestandardowych skryptów. Skrypty muszą znajdować się w /data/scripts/ (środowisko produkcyjne) i mogą być napisane w Node.js (.js, .mjs), Pythonie (.py) lub powłoce (.sh). Odpowiedzi są skracane do 200 znaków.", + "auto_responder.security": "Zabezpieczenia", + "auto_responder.security_description": "Zabezpieczenie przed wysyłaniem wiadomości do węzłów, które mogą nie należeć do Twojego kanału", + "auto_responder.skip_incomplete_nodes": "Pomijaj niekompletne węzły", + "auto_responder.skip_incomplete_description": "Nie odpowiadaj automatycznie na wiadomości z węzłów bez nazwy lub informacji o sprzęcie. Zalecane dla bezpiecznych kanałów, aby uniknąć odpowiadania węzłom, które mogły podsłuchać zaszyfrowany ruch.", + "auto_responder.add_trigger": "Dodaj wyzwalacz", + "auto_responder.add_trigger_description": "Utwórz wzorzec wyzwalający pasujący do przychodzących wiadomości. Użyj {parameter} dla wartości dynamicznych lub {param:regex} dla własnych reguł dopasowania. Wiele wzorców można rozdzielić przecinkami.", + "auto_responder.trigger_placeholder": "Przykład: pogoda, pogoda {location}, p {location}", + "auto_responder.pattern_count_one": "{{count}} wzorzec", + "auto_responder.pattern_count_other": "{{count}} wzorców", + "auto_responder.type_text": "Tekst", + "auto_responder.type_http": "HTTP", + "auto_responder.type_script": "Skrypt", + "auto_responder.response_text_placeholder": "Wpisz treść odpowiedzi...\nUżyj {parameter}, aby wstawić dopasowane wartości\nObsługuje odpowiedzi wielowierszowe", + "auto_responder.no_scripts_found": "Nie znaleziono skryptów w data/scripts/", + "auto_responder.select_script": "Wybierz skrypt...", + "auto_responder.script_args": "Argumenty", + "auto_responder.script_args_help": "Opcjonalne argumenty CLI. Tokeny: {NODE_ID}, {IP}, {VERSION} itd.", + "auto_responder.script_args_placeholder": "--arg wartość --flag", + "auto_responder.clear_fields": "Wyczyść wszystkie pola w sekcji Dodaj wyzwalacz", + "auto_responder.valid": "Prawidłowy", + "auto_responder.parameter_count_one": "{{count}} parametr", + "auto_responder.parameter_count_other": "{{count}} parametrów", + "auto_responder.pattern_preview": "Podgląd wzorca:", + "auto_responder.detected_parameters": "Wykryte parametry:", + "auto_responder.test_message_placeholder": "Wpisz wiadomość testową, aby sprawdzić dopasowanie wzorca i odpowiedź...", + "auto_responder.direct_messages": "Wiadomości prywatne", + "auto_responder.channel_none": "Brak (bez wysyłania do sieci mesh)", + "auto_responder.configured_triggers": "Skonfigurowane wyzwalacze ({{count}})", + "auto_responder.current_triggers_description": "Bieżące wzorce wyzwalające i ich odpowiedzi", + "auto_responder.search_triggers": "Wyszukaj wyzwalacze...", + "auto_responder.filter_all": "Wszystkie typy", + "auto_responder.legend": "Legenda:", + "auto_responder.literal": "Tekst dosłowny", + "auto_responder.parameter": "Parametr", + "auto_responder.no_triggers_match": "Żaden wyzwalacz nie pasuje do kryteriów wyszukiwania lub filtrowania", + "auto_responder.test_pattern_matching": "Test dopasowania wzorców", + "auto_responder.test_patterns_description": "Przetestuj wzorce wyzwalające na przykładowych wiadomościach. Wpisz po jednej wiadomości w wierszu, aby zobaczyć pasujące wzorce i wyodrębniane parametry. Zielony = pasuje, czerwony = nie pasuje. Dopasowanie jest aktualizowane na bieżąco podczas pisania.", + "auto_responder.quick_test": "Szybki test (dopasowanie na bieżąco):", + "auto_responder.no_triggers_configured": "Nie skonfigurowano żadnych wyzwalaczy. Dodaj pierwszy wyzwalacz powyżej, aby rozpocząć.", + "auto_responder.import_script": "Importuj skrypt", + "auto_responder.export_scripts": "Eksportuj skrypty", + "auto_responder.delete_script": "Usuń skrypt", + "auto_responder.extracted_parameters": "Wyodrębnione parametry:", + "auto_responder.script_imported": "Skrypt został zaimportowany", + "auto_responder.script_import_failed": "Nie udało się zaimportować skryptu", + "auto_responder.no_scripts_to_export": "Brak skryptów do wyeksportowania", + "auto_responder.scripts_exported": "Pomyślnie wyeksportowano skrypty: {{count}}", + "auto_responder.script_export_failed": "Nie udało się wyeksportować skryptów", + "auto_responder.script_deleted": "Skrypt został usunięty", + "auto_responder.script_delete_failed": "Nie udało się usunąć skryptu", + "auto_responder.trigger_removed": "Wyzwalacz został pomyślnie usunięty", + "auto_responder.invalid_trigger": "Nieprawidłowy wzorzec wyzwalacza", + "auto_responder.invalid_response": "Nieprawidłowa odpowiedź", + "auto_responder.settings_saved": "Ustawienia automatycznej odpowiedzi zostały zapisane", + "auto_responder.settings_save_failed": "Nie udało się zapisać ustawień automatycznej odpowiedzi", + "auto_responder.cooldown_label": "Czas oczekiwania:", + "auto_responder.cooldown_description": "Po odpowiedzi na ten wyzwalacz dla danego węzła ignoruj kolejne dopasowania z tego węzła przez określony czas.", + "auto_responder.cooldown_help": "sekund na węzeł (0 = wyłączone)", + "auto_responder.cooldown_badge": "czas oczekiwania", + "device_config.title": "Konfiguracja urządzenia", + "device_config.view_docs": "Zobacz dokumentację konfiguracji urządzenia", + "device_config.router_warning": "Czy na pewno?\n\nUstawienie roli urządzenia na ROUTER zasadniczo nie jest zalecane dla większości użytkowników. Tryb ROUTER spowoduje, że urządzenie będzie przekazywać wszystkie pakiety, znacznie zwiększając zużycie energii i wykorzystanie czasu antenowego.\n\nKliknij OK, aby potwierdzić tę zmianę, albo Anuluj, aby zachować bieżące ustawienie.", + "device_config.device_role": "Rola urządzenia", + "device_config.device_role_description": "Określa sposób działania węzła w sieci mesh.", + "device_config.node_info_broadcast": "Interwał rozgłaszania informacji o węźle (sekundy)", + "device_config.node_info_broadcast_description": "Częstotliwość rozgłaszania informacji o węźle. Zakres: 3600–4294967295 (domyślnie: 10800 = 3 godziny, minimum: 3600 = 1 godzina)", + "device_config.timezone": "Strefa czasowa urządzenia", + "device_config.timezone_description": "Definicja strefy czasowej POSIX używana do wyświetlania czasu lokalnego urządzenia. Wybierz ustawienie wstępne lub wpisz własną wartość.", + "device_config.timezone_not_set": "Nie ustawiono (używany jest UTC)", + "device_config.custom_timezone": "Niestandardowa strefa czasowa POSIX", + "device_config.timezone_search_placeholder": "Wyszukaj lub wpisz własną strefę czasową...", + "device_config.timezone_custom_hint": "Naciśnij Enter, aby użyć niestandardowej wartości strefy czasowej POSIX", + "device_config.timezone_clear": "Wyczyść strefę czasową (użyj UTC)", + "device_config.timezone_use_custom": "Użyj własnej wartości", + "device_config.rebroadcast_mode": "Tryb ponownego rozgłaszania", + "device_config.rebroadcast_mode_description": "Sposób obsługi przez urządzenie ponownego rozgłaszania pakietów z innych węzłów.", + "device_config.buzzer_mode": "Tryb brzęczyka", + "device_config.buzzer_mode_description": "Określa, kiedy brzęczyk urządzenia jest aktywny.", + "device_config.double_tap_as_button": "Podwójne stuknięcie jako naciśnięcie przycisku", + "device_config.double_tap_as_button_description": "Traktuj podwójne stuknięcie wykryte przez akcelerometr jako naciśnięcie przycisku.", + "device_config.disable_triple_click": "Wyłącz potrójne kliknięcie", + "device_config.disable_triple_click_description": "Wyłącz przełączanie GPS potrójnym kliknięciem.", + "device_config.led_heartbeat_disabled": "Miganie kontrolne diody LED wyłączone", + "device_config.led_heartbeat_disabled_description": "Wyłącz migającą diodę LED sygnalizującą pracę urządzenia.", + "device_config.advanced_settings": "Ustawienia zaawansowane", + "device_config.button_gpio": "GPIO przycisku", + "device_config.button_gpio_description": "Pin GPIO wejścia przycisku. 0 = użyj wartości domyślnej.", + "device_config.buzzer_gpio": "GPIO brzęczyka", + "device_config.buzzer_gpio_description": "Pin GPIO wyjścia brzęczyka. 0 = użyj wartości domyślnej.", + "device_config.save_button": "Zapisz konfigurację urządzenia", + "common.more_info": "Więcej informacji", + "node_identity.title": "Tożsamość węzła", + "node_identity.view_docs": "Zobacz dokumentację tożsamości węzła", + "node_identity.long_name": "Długa nazwa", + "node_identity.long_name_description": "Pełna nazwa węzła (maksymalnie 40 znaków)", + "node_identity.long_name_placeholder": "Mój węzeł Meshtastic", + "node_identity.short_name": "Krótka nazwa", + "node_identity.short_name_description": "Krótki identyfikator (maksymalnie 4 znaki)", + "node_identity.short_name_placeholder": "MESH", + "node_identity.unmessageable": "Blokowanie wiadomości prywatnych", + "node_identity.unmessageable_description": "Uniemożliw innym wysyłanie wiadomości prywatnych do tego węzła", + "node_identity.is_licensed": "Licencjonowany krótkofalowiec (HAM)", + "node_identity.is_licensed_description": "Oznacz ten węzeł jako należący do licencjonowanego operatora radiowego (HAM). Długa nazwa powinna zawierać znak wywoławczy.", + "node_identity.save_button": "Zapisz nazwy węzła", + "neighbor_info.title": "Moduł informacji o sąsiadach", + "neighbor_info.view_docs": "Zobacz dokumentację Neighbor Info", + "neighbor_info.enable": "Włącz informacje o sąsiadach", + "neighbor_info.enable_description": "Rozgłaszaj informacje o sąsiadach w sieci mesh", + "neighbor_info.interval": "Interwał aktualizacji (sekundy)", + "neighbor_info.interval_description": "Częstotliwość wysyłania informacji o sąsiadach (minimum: 14400 = 4 godziny)", + "neighbor_info.transmit_over_lora": "Wysyłaj przez LoRa", + "neighbor_info.transmit_over_lora_description": "Rozgłaszaj informacje o sąsiadach przez LoRa, oprócz MQTT i interfejsu API telefonu. Funkcja niedostępna na kanałach z domyślnym kluczem lub nazwą.", + "neighbor_info.save_button": "Zapisz konfigurację NeighborInfo", + "network_config.title": "Konfiguracja sieci", + "network_config.view_docs": "Zobacz dokumentację konfiguracji sieci", + "network_config.wifi_enabled": "WiFi włączone", + "network_config.wifi_enabled_description": "Włącz łączność WiFi w urządzeniu.", + "network_config.wifi_ssid": "SSID sieci WiFi", + "network_config.wifi_ssid_description": "Nazwa sieci WiFi, z którą urządzenie ma się połączyć. Maksymalnie 32 znaki.", + "network_config.wifi_psk": "Hasło WiFi", + "network_config.wifi_psk_description": "Hasło sieci WiFi. Maksymalnie 63 znaki.", + "network_config.address_mode": "Tryb adresowania", + "network_config.address_mode_description": "Sposób uzyskiwania adresu IP przez urządzenie (DHCP lub statycznie).", + "network_config.static_ip_settings": "Ustawienia statycznego adresu IP", + "network_config.ip_address": "Adres IP", + "network_config.ip_address_description": "Statyczny adres IP urządzenia (np. 192.168.1.100).", + "network_config.gateway": "Brama", + "network_config.gateway_description": "Adres bramy sieciowej (np. 192.168.1.1).", + "network_config.subnet": "Maska podsieci", + "network_config.subnet_description": "Maska podsieci (np. 255.255.255.0).", + "network_config.dns": "Serwer DNS", + "network_config.dns_description": "Adres serwera DNS (np. 8.8.8.8).", + "network_config.ntp_server": "Serwer NTP", + "network_config.ntp_server_description": "Adres niestandardowego serwera NTP (domyślnie: meshtastic.pool.ntp.org). Maksymalnie 33 znaki.", + "network_config.rsyslog_server": "Serwer Rsyslog", + "network_config.rsyslog_server_description": "Adres zdalnego serwera syslog (np. 192.168.1.100:514). Pozostaw puste, aby wyłączyć.", + "network_config.save_button": "Zapisz konfigurację sieci", + "config.network_saved": "Konfiguracja sieci została zapisana", + "config.network_saved_toast": "Konfiguracja sieci została zapisana! Urządzenie uruchomi się ponownie, aby zastosować zmiany.", + "config.network_failed": "Nie udało się zapisać konfiguracji sieci", + "config.power_saved": "Konfiguracja zasilania została zapisana", + "config.power_saved_toast": "Konfiguracja zasilania została zapisana! Urządzenie uruchomi się ponownie, aby zastosować zmiany.", + "config.power_failed": "Nie udało się zapisać konfiguracji zasilania", + "power_config.title": "Konfiguracja zasilania", + "power_config.view_docs": "Zobacz dokumentację konfiguracji zasilania", + "power_config.power_saving": "Tryb oszczędzania energii", + "power_config.power_saving_description": "Włącz tryb oszczędzania energii, aby zmniejszyć zużycie akumulatora", + "power_config.shutdown_on_battery": "Wyłączenie przy zasilaniu z akumulatora (sekundy)", + "power_config.shutdown_on_battery_description": "Automatycznie wyłącz urządzenie po podanej liczbie sekund pracy z akumulatora. 0 = wyłączone", + "power_config.adc_multiplier": "Nadpisanie mnożnika ADC", + "power_config.adc_multiplier_description": "Mnożnik kalibracji napięcia akumulatora. 0 = użyj wartości domyślnej. Zakres: 0–10", + "power_config.bluetooth_wait": "Oczekiwanie na Bluetooth (sekundy)", + "power_config.bluetooth_wait_description": "Czas oczekiwania na połączenie Bluetooth przed przejściem w stan uśpienia (tylko ESP32). Domyślnie: 60", + "power_config.super_deep_sleep": "Bardzo głębokie uśpienie (sekundy)", + "power_config.super_deep_sleep_description": "Czas pozostawania w trybie bardzo głębokiego uśpienia (tylko ESP32). Domyślnie: 31536000 (1 rok)", + "power_config.light_sleep": "Lekkie uśpienie (sekundy)", + "power_config.light_sleep_description": "Czas pozostawania w trybie lekkiego uśpienia (tylko ESP32). Domyślnie: 300", + "power_config.min_wake": "Minimalny czas aktywności (sekundy)", + "power_config.min_wake_description": "Minimalny czas pozostawania urządzenia w stanie aktywnym po odbiorze LoRa (tylko ESP32). Domyślnie: 10", + "power_config.advanced_settings": "Ustawienia zaawansowane", + "power_config.ina_address": "Adres czujnika akumulatora INA", + "power_config.ina_address_description": "Adres I2C czujnika akumulatora INA. 0 = wyłączone. Zakres: 0–127", + "power_config.save_button": "Zapisz konfigurację zasilania", + "power_config.disabled": "Wyłączone", + "common.seconds": "sekundy", + "common.minutes": "minuty", + "common.hours": "godzin", + "common.days": "dni", + "display_config.title": "Konfiguracja wyświetlacza", + "display_config.view_docs": "Zobacz dokumentację konfiguracji wyświetlacza", + "display_config.screen_on_secs": "Limit czasu ekranu (sekundy)", + "display_config.screen_on_secs_description": "Czas włączenia ekranu w sekundach. 0 = zawsze włączony. Domyślnie: 60", + "display_config.auto_carousel": "Automatyczne przełączanie ekranów (sekundy)", + "display_config.auto_carousel_description": "Automatycznie przełączaj kolejne ekrany. 0 = wyłączone", + "display_config.flip_screen": "Obróć ekran", + "display_config.flip_screen_description": "Obróć obraz na wyświetlaczu o 180 stopni", + "display_config.units": "Jednostki wyświetlania", + "display_config.units_description": "Jednostki używane do wyświetlania odległości i prędkości", + "display_config.display_mode": "Tryb wyświetlania", + "display_config.display_mode_description": "Tryb kolorów wyświetlacza", + "display_config.heading_bold": "Pogrubiony nagłówek", + "display_config.heading_bold_description": "Wyświetlaj pierwszy wiersz ekranu pogrubioną czcionką", + "display_config.wake_on_tap": "Wybudzanie stuknięciem lub ruchem", + "display_config.wake_on_tap_description": "Wybudzaj wyświetlacz po wykryciu aktywności akcelerometru", + "display_config.advanced_settings": "Ustawienia zaawansowane", + "display_config.oled_type": "Typ OLED", + "display_config.oled_type_description": "Typ wyświetlacza OLED. AUTO = automatyczne wykrywanie", + "display_config.compass_orientation": "Orientacja kompasu", + "display_config.compass_orientation_description": "Orientacja i odwrócenie obrazu kompasu", + "display_config.save_button": "Zapisz konfigurację wyświetlacza", + "display_config.always_on": "Zawsze włączony", + "config.display_saved": "Konfiguracja wyświetlacza została zapisana", + "config.display_saved_toast": "Konfiguracja wyświetlacza została zapisana! Urządzenie uruchomi się ponownie, aby zastosować zmiany.", + "config.display_failed": "Nie udało się zapisać konfiguracji wyświetlacza", + "config.telemetry_saved": "Konfiguracja telemetrii została zapisana", + "config.telemetry_saved_toast": "Konfiguracja telemetrii została zapisana! Urządzenie uruchomi się ponownie, aby zastosować zmiany.", + "config.telemetry_failed": "Nie udało się zapisać konfiguracji telemetrii", + "config.extnotif_saved": "Konfiguracja powiadomień zewnętrznych została zapisana", + "config.extnotif_saved_toast": "Konfiguracja powiadomień zewnętrznych została zapisana!", + "config.extnotif_failed": "Nie udało się zapisać konfiguracji powiadomień zewnętrznych", + "config.storeforward_saved": "Konfiguracja przechowywania i przekazywania została zapisana", + "config.storeforward_saved_toast": "Konfiguracja przechowywania i przekazywania została zapisana!", + "config.storeforward_failed": "Nie udało się zapisać konfiguracji przechowywania i przekazywania", + "config.rangetest_saved": "Konfiguracja testu zasięgu została zapisana", + "config.rangetest_saved_toast": "Konfiguracja testu zasięgu została zapisana!", + "config.rangetest_failed": "Nie udało się zapisać konfiguracji testu zasięgu", + "config.cannedmsg_saved": "Konfiguracja gotowych wiadomości została zapisana", + "config.cannedmsg_saved_toast": "Konfiguracja gotowych wiadomości została zapisana!", + "config.cannedmsg_failed": "Nie udało się zapisać konfiguracji gotowych wiadomości", + "config.audio_saved": "Konfiguracja dźwięku została zapisana", + "config.audio_saved_toast": "Konfiguracja dźwięku została zapisana!", + "config.audio_failed": "Nie udało się zapisać konfiguracji dźwięku", + "config.remotehardware_saved": "Konfiguracja zdalnego sprzętu została zapisana", + "config.remotehardware_saved_toast": "Konfiguracja zdalnego sprzętu została zapisana!", + "config.remotehardware_failed": "Nie udało się zapisać konfiguracji zdalnego sprzętu", + "config.detectionsensor_saved": "Konfiguracja czujnika wykrywania została zapisana", + "config.detectionsensor_saved_toast": "Konfiguracja czujnika wykrywania została zapisana!", + "config.detectionsensor_failed": "Nie udało się zapisać konfiguracji czujnika wykrywania", + "config.paxcounter_saved": "Konfiguracja Paxcounter została zapisana", + "config.paxcounter_saved_toast": "Konfiguracja Paxcounter została zapisana!", + "config.paxcounter_failed": "Nie udało się zapisać konfiguracji Paxcounter", + "config.serial_saved": "Konfiguracja portu szeregowego została zapisana", + "config.serial_saved_toast": "Konfiguracja portu szeregowego została zapisana!", + "config.serial_failed": "Nie udało się zapisać konfiguracji portu szeregowego", + "config.ambientlighting_saved": "Konfiguracja oświetlenia otoczenia została zapisana", + "config.ambientlighting_saved_toast": "Konfiguracja oświetlenia otoczenia została zapisana!", + "config.ambientlighting_failed": "Nie udało się zapisać konfiguracji oświetlenia otoczenia", + "config.security_saved": "Konfiguracja zabezpieczeń została zapisana", + "config.security_saved_toast": "Konfiguracja zabezpieczeń została zapisana!", + "config.security_failed": "Nie udało się zapisać konfiguracji zabezpieczeń", + "config.reload_config": "Wczytaj ponownie konfigurację", + "config.reloading": "Ponowne wczytywanie...", + "config.reload_changes_detected": "Konfiguracja została ponownie wczytana. Wykryto zmiany: {{count}}.", + "config.reload_no_changes": "Konfiguracja została ponownie wczytana. Nie wykryto zmian.", + "config.reload_failed": "Nie udało się ponownie wczytać konfiguracji", + "config.changes_detected": "Wykryte zmiany: {{count}}", + "config.field": "Pole", + "config.old_value": "Poprzednia wartość", + "config.new_value": "Aktualne", + "telemetry_config.title": "Konfiguracja telemetrii", + "telemetry_config.view_docs": "Zobacz dokumentację konfiguracji telemetrii", + "telemetry_config.device_section": "Telemetria urządzenia", + "telemetry_config.device_interval": "Interwał aktualizacji urządzenia (sekundy)", + "telemetry_config.device_interval_description": "Częstotliwość zbierania i przesyłania parametrów urządzenia (poziom akumulatora, napięcie itp.)", + "telemetry_config.environment_section": "Telemetria środowiskowa", + "telemetry_config.environment_enabled": "Pomiary środowiskowe włączone", + "telemetry_config.environment_enabled_description": "Włącz zbieranie danych z czujników środowiskowych (temperatura, wilgotność itp.)", + "telemetry_config.environment_interval": "Interwał aktualizacji środowiskowej (sekundy)", + "telemetry_config.environment_interval_description": "Częstotliwość zbierania i przesyłania parametrów środowiskowych", + "telemetry_config.environment_screen": "Pokaż na ekranie urządzenia", + "telemetry_config.environment_screen_description": "Wyświetlaj dane środowiskowe na ekranie urządzenia", + "telemetry_config.environment_fahrenheit": "Wyświetlaj w stopniach Fahrenheita", + "telemetry_config.environment_fahrenheit_description": "Wyświetlaj temperaturę w stopniach Fahrenheita zamiast Celsjusza", + "telemetry_config.advanced_settings": "Ustawienia zaawansowane", + "telemetry_config.air_quality_section": "Metryki jakości powietrza", + "telemetry_config.air_quality_enabled": "Pomiar jakości powietrza włączony", + "telemetry_config.air_quality_enabled_description": "Włącz zbieranie danych z czujników jakości powietrza", + "telemetry_config.air_quality_interval": "Interwał jakości powietrza (sekundy)", + "telemetry_config.air_quality_interval_description": "Częstotliwość zbierania parametrów jakości powietrza", + "telemetry_config.power_section": "Metryki zasilania", + "telemetry_config.power_enabled": "Pomiar zasilania włączony", + "telemetry_config.power_enabled_description": "Włącz zbieranie parametrów zasilania (czujniki INA)", + "telemetry_config.power_interval": "Interwał aktualizacji zasilania (sekundy)", + "telemetry_config.power_interval_description": "Częstotliwość zbierania parametrów zasilania", + "telemetry_config.power_screen": "Pokaż zasilanie na ekranie", + "telemetry_config.power_screen_description": "Wyświetlaj parametry zasilania na ekranie urządzenia", + "telemetry_config.device_enabled": "Telemetria urządzenia włączona", + "telemetry_config.device_enabled_description": "Włącz wysyłanie parametrów urządzenia (poziom akumulatora, napięcie itp.) do sieci mesh", + "telemetry_config.health_section": "Parametry zdrowotne", + "telemetry_config.health_enabled": "Pomiary zdrowotne włączone", + "telemetry_config.health_enabled_description": "Włącz zbieranie danych telemetrii zdrowotnej", + "telemetry_config.health_interval": "Interwał aktualizacji parametrów zdrowotnych (sekundy)", + "telemetry_config.health_interval_description": "Częstotliwość wysyłania parametrów zdrowotnych do sieci mesh", + "telemetry_config.health_screen": "Ekran parametrów zdrowotnych włączony", + "telemetry_config.health_screen_description": "Wyświetlaj parametry zdrowotne na ekranie urządzenia", + "telemetry_config.save_button": "Zapisz konfigurację telemetrii", + "telemetry_config.disabled": "Wyłączone", + "lora_config.title": "Konfiguracja radia LoRa", + "lora_config.view_docs": "Zobacz dokumentację konfiguracji LoRa", + "lora_config.use_preset": "Użyj ustawienia wstępnego", + "lora_config.use_preset_description": "Użyj predefiniowanych ustawień modemu (zalecane)", + "lora_config.modem_preset": "Ustawienie wstępne modemu", + "lora_config.modem_preset_description": "Predefiniowane ustawienia radiowe równoważące zasięg i prędkość", + "lora_config.bandwidth": "Szerokość pasma (kHz)", + "lora_config.bandwidth_description": "Szerokość pasma kanału w kHz. Typowe wartości: 125, 250, 500 (31 = 31,25)", + "lora_config.spread_factor": "Współczynnik rozpraszania", + "lora_config.spread_factor_description": "Liczba impulsów chirp na symbol (7–12). Wyższa wartość = większy zasięg, mniejsza prędkość", + "lora_config.coding_rate": "Mianownik współczynnika kodowania", + "lora_config.coding_rate_description": "Mianownik współczynnika kodowania (5–8). Dla 4/5 wpisz 5, a dla 4/8 wpisz 8", + "lora_config.frequency_offset": "Przesunięcie częstotliwości (MHz)", + "lora_config.frequency_offset_description": "Zaawansowane: przesunięcie częstotliwości do kalibracji rezonatora kwarcowego (domyślnie: 0)", + "lora_config.override_frequency": "Nadpisanie częstotliwości (MHz)", + "lora_config.override_frequency_description": "HAM/Zaawansowane: pomiń obliczanie kanału i użyj tej częstotliwości. Przesunięcie częstotliwości nadal obowiązuje. Wartość 0 = wyłączone", + "lora_config.region": "Kod regionu", + "lora_config.region_description": "Wybierz region regulacyjny określający limity częstotliwości i mocy", + "lora_config.hop_limit": "Limit przeskoków", + "lora_config.hop_limit_description": "Maksymalna liczba przeskoków pakietów sieci mesh. Zakres: 1–7 (domyślnie: 3)", + "lora_config.tx_power": "Moc nadawania (dBm)", + "lora_config.tx_power_description": "Moc nadawania LoRa w dBm. Wartość 0 oznacza użycie domyślnej maksymalnej bezpiecznej mocy dla danego sprzętu. Wartości ujemne są dozwolone (pole ma typ ze znakiem), ale mają znaczenie tylko w modułach radiowych obsługujących obniżoną lub ujemną moc wyjściową, np. SX126x. Oprogramowanie układowe nie ogranicza dolnej granicy, dlatego działanie wartości ujemnych zależy od modułu radiowego.", + "lora_config.channel_num": "Numer kanału", + "lora_config.channel_num_description": "Numer kanału LoRa używany do wyboru częstotliwości. Zakres: 0–255 (domyślnie: 0)", + "lora_config.rx_boosted_gain": "Zwiększone wzmocnienie RX (SX126x)", + "lora_config.rx_boosted_gain_description": "Włącz zwiększone wzmocnienie odbioru w modułach radiowych SX126x (poprawia czułość, ale zwiększa zużycie energii)", + "lora_config.ignore_mqtt": "Ignoruj MQTT", + "lora_config.ignore_mqtt_description": "Po włączeniu urządzenie nie będzie przetwarzać pakietów odebranych przez LoRa, które pochodzą z MQTT", + "lora_config.ok_to_mqtt": "Zezwalaj na MQTT", + "lora_config.ok_to_mqtt_description": "Ustawia flagę ok_to_mqtt w wychodzących pakietach, zezwalając innym węzłom na przekazywanie ich do MQTT", + "lora_config.tx_enabled": "Nadawanie włączone", + "lora_config.tx_enabled_description": "Włącz nadawanie radiowe. Wyłącz, aby węzeł tylko odbierał.", + "lora_config.override_duty_cycle": "Nadpisz ograniczenie cyklu pracy", + "lora_config.override_duty_cycle_description": "OSTRZEŻENIE: powoduje przekroczenie prawnych limitów cyklu pracy. Używaj wyłącznie tam, gdzie zezwalają na to przepisy.", + "lora_config.pa_fan_disabled": "Wentylator wzmacniacza mocy wyłączony", + "lora_config.pa_fan_disabled_description": "Wyłącz wentylator chłodzący wzmacniacz mocy w obsługiwanych urządzeniach.", + "lora_config.save_button": "Zapisz konfigurację LoRa", + "channels_config.title": "Konfiguracja kanałów", + "channels_config.view_docs": "Zobacz dokumentację kanałów Meshtastic", + "channels_config.description": "Urządzenia Meshtastic obsługują maksymalnie 8 kanałów (0–7). Kanał 0 jest zwykle kanałem podstawowym. Dla każdego kanału można skonfigurować nazwę, klucz szyfrowania (PSK) oraz ustawienia łącza w górę i w dół.", + "channels_config.slot": "Pozycja {{slot}}", + "channels_config.unnamed": "(bez nazwy)", + "channels_config.primary": "PODSTAWOWY", + "channels_config.disabled": "WYŁĄCZONY", + "channels_config.empty": "Pusty", + "channels_config.encrypted": "Szyfrowany", + "channels_config.encrypted_secure": "Szyfrowany (własny klucz)", + "channels_config.encrypted_default": "Klucz domyślny (niezabezpieczony)", + "channels_config.unencrypted": "Niezaszyfrowany", + "channels_config.uplink": "Łącze w górę", + "channels_config.downlink": "Łącze w dół", + "channels_config.no_bridge": "Bez mostu", + "channels_config.edit_channel": "Edytuj kanał {{slot}}", + "channels_config.channel_name": "Nazwa kanału", + "channels_config.channel_name_description": "Maksymalnie 11 znaków", + "channels_config.channel_name_placeholder": "Nazwa kanału", + "channels_config.psk": "Klucz współdzielony (PSK)", + "channels_config.psk_description": "Pozostaw puste, aby wyłączyć szyfrowanie, lub wpisz klucz zakodowany w Base64 (16 albo 32 bajty)", + "channels_config.psk_placeholder": "Opcjonalnie: PSK w Base64", + "channels_config.generate_key_title": "Wygeneruj losowy klucz AES-256", + "channels_config.generate": "Generuj", + "channels_config.channel_role": "Rola kanału", + "channels_config.channel_role_description": "Kanał podstawowy ustala częstotliwość radiową, dodatkowy służy wyłącznie do szyfrowania, a wyłączony dezaktywuje kanał", + "channels_config.role_disabled": "Wyłączone", + "channels_config.role_primary": "Główny", + "channels_config.role_secondary": "Dodatkowy", + "channels_config.position_precision": "Dokładność lokalizacji (bity)", + "channels_config.position_precision_description": "Liczba bitów danych pozycji (0–32). Wyższa wartość oznacza większą dokładność. 32 = pełna dokładność.", + "channels_config.estimated_accuracy": "Szacowana dokładność: {{accuracy}}", + "channels_config.uplink_enabled": "Łącze w górę włączone", + "channels_config.uplink_description": "Zezwalaj węzłom bramy na przekazywanie wiadomości z sieci mesh do Internetu", + "channels_config.downlink_enabled": "Łącze w dół włączone", + "channels_config.downlink_description": "Zezwalaj na kierowanie wiadomości z Internetu do lokalnej sieci mesh", + "channels_config.save_channel": "Zapisz kanał", + "channels_config.import_channel": "Importuj kanał do pozycji {{slot}}", + "channels_config.select_file": "Wybierz plik konfiguracji kanału", + "channels_config.select_file_description": "Wybierz wcześniej wyeksportowany plik JSON kanału", + "channels_config.preview": "Odsłuchaj", + "channels_config.importing": "Importowanie...", + "channels_config.import_channel_button": "Importuj kanał", + "channels_config.toast_name_too_long": "Nazwa kanału może mieć najwyżej 11 znaków", + "channels_config.toast_channel_updated": "Kanał {{slot}} został pomyślnie zaktualizowany!", + "channels_config.toast_update_failed": "Nie udało się zaktualizować kanału", + "channels_config.toast_channel_exported": "Kanał {{slot}} został pomyślnie wyeksportowany!", + "channels_config.toast_export_failed": "Nie udało się wyeksportować kanału", + "channels_config.toast_select_file": "Wybierz plik do zaimportowania", + "channels_config.toast_invalid_format": "Nieprawidłowy format importowanego pliku. Oczekiwano obiektu kanału.", + "channels_config.toast_channel_imported": "Kanał został pomyślnie zaimportowany do pozycji {{slot}}!", + "channels_config.toast_import_failed": "Nie udało się zaimportować kanału", + "channels_config.toast_key_generated": "Wygenerowano nowy klucz AES-256", + "channels_config.location_auto_broadcast": "Lokalizacja: automatyczne rozgłaszanie", + "channels_config.location_enabled": "Lokalizacja: włączona", + "mqtt_config.title": "Moduł MQTT", + "mqtt_config.view_docs": "Zobacz dokumentację konfiguracji MQTT", + "mqtt_config.enable": "Włącz MQTT", + "mqtt_config.enable_description": "Włącz bramę MQTT dla łącza w górę i w dół", + "mqtt_config.server_address": "Adres serwera MQTT", + "mqtt_config.server_address_description": "Pozostaw puste, aby użyć serwera domyślnego (mqtt.meshtastic.org)", + "mqtt_config.username": "Nazwa użytkownika MQTT", + "mqtt_config.username_description": "Nazwa użytkownika do uwierzytelniania MQTT (opcjonalna)", + "mqtt_config.password": "Hasło MQTT", + "mqtt_config.password_description": "Hasło do uwierzytelniania MQTT (opcjonalne)", + "mqtt_config.root_topic": "Główny temat MQTT", + "mqtt_config.root_topic_description": "Główny temat wiadomości MQTT (np. „msh/US/MyRegion”)", + "mqtt_config.encryption_enabled": "Szyfrowanie włączone", + "mqtt_config.encryption_description": "Wysyłaj zaszyfrowane pakiety do MQTT", + "mqtt_config.json_enabled": "JSON włączony", + "mqtt_config.json_description": "Wysyłaj i odbieraj pakiety JSON przez MQTT", + "mqtt_config.tls_enabled": "TLS włączony", + "mqtt_config.tls_description": "Włącz szyfrowanie TLS/SSL połączenia MQTT", + "mqtt_config.proxy_to_client": "Serwer proxy przez klienta", + "mqtt_config.proxy_to_client_description": "Przekazuj pakiety MQTT przez połączoną aplikację telefonu zamiast bezpośredniego połączenia WiFi", + "mqtt_config.proxy_to_client_meshmonitor_note": "Dla MeshMonitor: włącz tę opcję i skonfiguruj dodatkowy kontener MQTT Proxy.", + "mqtt_config.proxy_to_client_docs_link": "Zobacz instrukcję konfiguracji →", + "mqtt_config.map_reporting": "Raportowanie na mapie", + "mqtt_config.map_reporting_description": "Włącz okresowe przesyłanie lokalizacji do usługi mapy MQTT", + "mqtt_config.map_publish_interval": "Interwał publikowania na mapie (sekundy)", + "mqtt_config.map_publish_interval_description": "Częstotliwość publikowania aktualizacji lokalizacji na mapie (0 = użyj wartości domyślnej)", + "mqtt_config.map_position_precision": "Dokładność pozycji na mapie", + "mqtt_config.map_position_precision_description": "Dokładność pozycji podczas raportowania na mapę (10–19, wyższa wartość = większa dokładność)", + "mqtt_config.save_button": "Zapisz konfigurację MQTT", + "position_config.title": "Rozgłaszanie pozycji", + "position_config.view_docs": "Zobacz dokumentację konfiguracji pozycji", + "position_config.broadcast_interval": "Interwał rozgłaszania pozycji (sekundy)", + "position_config.broadcast_interval_description": "Częstotliwość rozgłaszania pozycji. Zakres: 32–4294967295 (domyślnie: 900 = 15 minut, minimum: 32 sekundy)", + "position_config.smart_broadcast": "Inteligentne rozgłaszanie pozycji", + "position_config.smart_broadcast_description": "Rozgłaszaj tylko wtedy, gdy pozycja zmieniła się w istotnym stopniu", + "position_config.fixed_position": "Pozycja stała", + "position_config.fixed_position_description": "Węzeł znajduje się w stałej pozycji (wyłącza aktualizacje GPS)", + "position_config.latitude": "Szerokość geograficzna", + "position_config.latitude_description": "Zakres: od -90 do 90 (stopnie dziesiętne)", + "position_config.find_coordinates": "Znajdź tutaj swoje współrzędne GPS", + "position_config.longitude": "Długość geograficzna", + "position_config.longitude_description": "Zakres: od -180 do 180 (stopnie dziesiętne)", + "position_config.altitude": "Wysokość (metry)", + "position_config.altitude_description": "Wysokość nad poziomem morza w metrach", + "position_config.gps_mode": "Tryb GPS", + "position_config.gps_mode_description": "Tryb pracy GPS w urządzeniu.", + "position_config.gps_update_interval": "Interwał aktualizacji GPS (sekundy)", + "position_config.gps_update_interval_description": "Częstotliwość odczytywania pozycji z GPS. 0 = użyj wartości domyślnej.", + "position_config.smart_min_distance": "Minimalna odległość inteligentnego rozgłaszania (metry)", + "position_config.smart_min_distance_description": "Minimalna przebyta odległość w metrach przed wysłaniem aktualizacji pozycji.", + "position_config.smart_min_interval": "Minimalny interwał inteligentnego rozgłaszania (sekundy)", + "position_config.smart_min_interval_description": "Minimalny czas w sekundach między rozgłoszeniami pozycji przy włączonym inteligentnym rozgłaszaniu.", + "position_config.position_flags": "Flagi pozycji", + "position_config.position_flags_description": "Wybierz dodatkowe dane dołączane do pakietów pozycji.", + "position_config.advanced_settings": "Ustawienia zaawansowane", + "position_config.rx_gpio": "GPIO RX GPS", + "position_config.rx_gpio_description": "Pin GPIO odbioru GPS. 0 = użyj wartości domyślnej.", + "position_config.tx_gpio": "GPIO TX GPS", + "position_config.tx_gpio_description": "Pin GPIO nadawania GPS. 0 = użyj wartości domyślnej.", + "position_config.gps_en_gpio": "GPIO włączania GPS", + "position_config.gps_en_gpio_description": "Pin GPIO do włączania i wyłączania modułu GPS. 0 = użyj wartości domyślnej.", + "position_config.save_button": "Zapisz konfigurację pozycji", + "export_config.title": "Eksport konfiguracji Meshtastic", + "export_config.description": "Wybierz kanały i ustawienia, które mają zostać uwzględnione w eksportowanym adresie URL. Adres będzie zgodny z oficjalnymi aplikacjami Meshtastic.", + "export_config.select_channels": "Wybierz kanały", + "export_config.no_channels": "Nie skonfigurowano kanałów", + "export_config.no_channels_title": "Brak dostępnych kanałów", + "export_config.no_channels_local_help": "Aby wyeksportować konfigurację, najpierw wczytaj dane kanałów. Kliknij przycisk „Wczytaj całą konfigurację” w powyższej sekcji konfiguracji kanałów, a następnie wróć tutaj, aby przeprowadzić eksport.", + "export_config.no_channels_remote_help": "Aby wyeksportować konfigurację tego zdalnego węzła, najpierw wczytaj dane kanałów. Kliknij poniższy przycisk, aby wczytać kanały, lub użyj przycisku „Wczytaj całą konfigurację” w powyższej sekcji konfiguracji kanałów.", + "export_config.load_channels_button": "Wczytaj kanały", + "export_config.failed_load_channels": "Nie udało się wczytać kanałów", + "export_config.channel_label": "Kanał {{id}}: {{name}}", + "export_config.psk_set": "ustawiony", + "export_config.psk_none": "brak", + "export_config.position_precision": "Dokładność pozycji: {{bits}} bitów", + "export_config.uplink_enabled": "Łącze w górę: włączone", + "export_config.uplink_disabled": "Łącze w górę: wyłączone", + "export_config.downlink_enabled": "Łącze w dół: włączone", + "export_config.downlink_disabled": "Łącze w dół: wyłączone", + "export_config.device_settings": "Ustawienia urządzenia", + "export_config.lora_config": "Konfiguracja LoRa", + "export_config.lora_config_description": "Uwzględnij ustawienia radiowe LoRa (region, ustawienie wstępne, limit przeskoków itp.)", + "export_config.generated_url": "Wygenerowany adres URL", + "export_config.copy": "Kopiuj", + "export_config.copied": "Skopiowano!", + "export_config.share_url_description": "Udostępnij ten adres URL innym osobom, aby mogły zaimportować konfigurację kanałów do swoich urządzeń Meshtastic", + "export_config.qr_code": "Kod QR", + "export_config.scan_qr_description": "Zeskanuj kod aplikacją mobilną Meshtastic, aby zaimportować konfigurację", + "export_config.close": "Zamknij", + "import_config.title": "Import konfiguracji Meshtastic", + "import_config.url_label": "Adres URL konfiguracji Meshtastic", + "import_config.url_placeholder": "https://meshtastic.org/e/#...", + "import_config.decode_button": "Dekoduj adres URL", + "import_config.decoding": "Dekodowanie...", + "import_config.error_enter_url": "Wpisz adres URL", + "import_config.error_decode_failed": "Nie udało się zdekodować adresu URL", + "import_config.error_import_failed": "Nie udało się zaimportować konfiguracji", + "import_config.error_reconnect_timeout": "Urządzenie nie połączyło się ponownie w ciągu 60 sekund", + "import_config.config_preview": "Podgląd konfiguracji", + "import_config.channels_count": "Kanały ({{count}})", + "import_config.channel_label": "Kanał {{idx}}: {{name}}", + "import_config.channel_unnamed": "(bez nazwy)", + "import_config.psk_label": "PSK: {{psk}}", + "import_config.psk_none": "PSK: brak", + "import_config.position_precision": "Dokładność pozycji: {{bits}} bitów", + "import_config.uplink_enabled": "Łącze w górę: włączone", + "import_config.uplink_disabled": "Łącze w górę: wyłączone", + "import_config.downlink_enabled": "Łącze w dół: włączone", + "import_config.downlink_disabled": "Łącze w dół: wyłączone", + "import_config.lora_settings": "Ustawienia urządzenia LoRa", + "import_config.preset": "Ustawienie wstępne: {{preset}}", + "import_config.region": "Region: {{region}}", + "import_config.hop_limit": "Limit przeskoków: {{limit}}", + "import_config.tx_power": "Moc TX: {{power}} dBm", + "import_config.import_in_progress": "Importowanie w toku", + "import_config.status_sending": "Wysyłanie konfiguracji do urządzenia...", + "import_config.status_rebooting": "Urządzenie jest ponownie uruchamiane... Poczekaj", + "import_config.status_rebooting_elapsed": "Ponowne uruchamianie urządzenia... ({{elapsed}} s)", + "import_config.status_syncing": "Konfiguracja została wysłana, oczekiwanie na synchronizację urządzenia...", + "import_config.status_verifying": "Weryfikowanie konfiguracji...", + "import_config.status_complete": "Import zakończony!", + "import_config.cancel": "Anuluj", + "import_config.importing": "Importowanie...", + "import_config.import_selected": "Importuj wybrane", + "backup_management.title": "Zarządzanie kopiami zapasowymi urządzenia", + "backup_management.about_title": "Informacje o kopiach zapasowych urządzenia", + "backup_management.about_description": "Kopie zapasowe urządzenia zawierają pełną konfigurację Meshtastic wyeksportowaną w formacie YAML, zgodnym z poleceniem Meshtastic CLI --export-config. Obejmują wszystkie ustawienia urządzenia, konfiguracje modułów i ustawienia kanałów. Można ich użyć do przywrócenia konfiguracji po aktualizacji oprogramowania układowego albo do skopiowania ustawień na inne urządzenie.", + "backup_management.manual_title": "Ręczna kopia zapasowa", + "backup_management.manual_description": "Utwórz kopię zapasową natychmiast i pobierz ją na komputer.", + "backup_management.create_button": "Utwórz kopię zapasową teraz", + "backup_management.loading": "Ładowanie...", + "backup_management.show_backups": "Pokaż zapisane kopie zapasowe", + "backup_management.auto_title": "Harmonogram automatycznych kopii zapasowych", + "backup_management.auto_description": "Automatycznie twórz kopie zapasowe codziennie o określonej godzinie. Kopie są zapisywane w systemie plików serwera i można je później pobrać lub przywrócić.", + "backup_management.enable_auto": "Włącz automatyczne kopie zapasowe", + "backup_management.max_backups": "Maksymalna liczba przechowywanych kopii:", + "backup_management.max_backups_hint": "(Najstarsze kopie będą automatycznie usuwane)", + "backup_management.backup_time": "Godzina codziennej kopii zapasowej:", + "backup_management.backup_time_hint": "(Strefa czasowa serwera)", + "backup_management.save_settings": "Zapisz ustawienia kopii zapasowych", + "backup_management.modal_title": "Zapisane kopie zapasowe", + "backup_management.no_backups": "Nie znaleziono kopii zapasowych. Utwórz pierwszą kopię za pomocą powyższego przycisku.", + "backup_management.table_filename": "Nazwa pliku", + "backup_management.table_date": "Data", + "backup_management.table_type": "Typ", + "backup_management.table_size": "Rozmiar", + "backup_management.table_actions": "Działania", + "backup_management.type_auto": "Automatyczna", + "backup_management.type_manual": "Ręczna", + "backup_management.download": "Pobierz", + "backup_management.delete": "Usuń", + "backup_management.confirm_delete": "Czy na pewno chcesz usunąć kopię zapasową „{{filename}}”?", + "backup_management.toast_settings_saved": "Ustawienia kopii zapasowych zostały pomyślnie zapisane", + "backup_management.toast_settings_failed": "Nie udało się zapisać ustawień kopii zapasowych: {{error}}", + "backup_management.toast_creating_backup": "Tworzenie kopii zapasowej...", + "backup_management.toast_backup_created": "Kopia zapasowa została utworzona i pomyślnie pobrana", + "backup_management.toast_backup_failed": "Nie udało się utworzyć kopii zapasowej: {{error}}", + "backup_management.toast_list_failed": "Nie udało się wczytać listy kopii zapasowych: {{error}}", + "backup_management.toast_downloaded": "Kopia zapasowa została pomyślnie pobrana", + "backup_management.toast_download_failed": "Nie udało się pobrać kopii zapasowej: {{error}}", + "backup_management.toast_deleted": "Kopia zapasowa została pomyślnie usunięta", + "backup_management.toast_delete_failed": "Nie udało się usunąć kopii zapasowej: {{error}}", + "system_backup.title": "Zarządzanie kopiami zapasowymi systemu", + "system_backup.about_title": "Informacje o kopiach zapasowych systemu", + "system_backup.about_description": "Kopie zapasowe systemu zawierają pełną bazę danych MeshMonitor, w tym historię wiadomości, informacje o węzłach, dane telemetryczne, konta użytkowników i ustawienia systemowe. Każda kopia jest zbiorem plików JSON z sumami kontrolnymi integralności i metadanymi wersji. Używaj kopii systemowych do odzyskiwania po awarii, migracji serwera lub przywracania wcześniejszego stanu bazy danych.", + "system_backup.restore_warning_title": "Uwaga dotycząca przywracania:", + "system_backup.restore_warning_description": "Aby przywrócić kopię zapasową systemu, należy ustawić zmienną środowiskową RESTORE_FROM_BACKUP i ponownie uruchomić kontener. Ze względów bezpieczeństwa przywracanie nie jest dostępne z poziomu interfejsu użytkownika.", + "system_backup.manual_title": "Ręczna kopia zapasowa", + "system_backup.manual_description": "Utwórz kopię zapasową systemu na żądanie. Kopia zostanie zapisana w /data/system-backups.", + "system_backup.creating": "Tworzenie...", + "system_backup.create_button": "Utwórz kopię zapasową teraz", + "system_backup.view_backups": "Wyświetl zapisane kopie zapasowe", + "system_backup.auto_title": "Automatyczne kopie zapasowe", + "system_backup.auto_description": "Zaplanuj automatyczne tworzenie kopii zapasowych systemu codziennie o określonej godzinie.", + "system_backup.enable_auto": "Włącz automatyczne kopie zapasowe systemu", + "system_backup.backup_time": "Godzina tworzenia kopii (format 24-godzinny)", + "system_backup.max_backups": "Maksymalna liczba przechowywanych kopii", + "system_backup.max_backups_hint": "Po przekroczeniu tego limitu starsze kopie będą automatycznie usuwane.", + "system_backup.save_settings": "Zapisz ustawienia kopii zapasowych", + "system_backup.modal_title": "Zapisane kopie zapasowe systemu", + "system_backup.no_backups": "Nie znaleziono kopii zapasowych systemu. Utwórz pierwszą, aby rozpocząć!", + "system_backup.table_directory": "Katalog kopii zapasowej", + "system_backup.table_created": "Utworzono", + "system_backup.table_type": "Typ", + "system_backup.table_version": "Wersja", + "system_backup.table_tables": "Tabele", + "system_backup.table_size": "Rozmiar", + "system_backup.table_actions": "Działania", + "system_backup.toast_settings_saved": "Ustawienia kopii zapasowych systemu zostały pomyślnie zapisane", + "system_backup.toast_settings_failed": "Nie udało się zapisać ustawień: {{error}}", + "system_backup.toast_creating": "Tworzenie kopii zapasowej systemu...", + "system_backup.toast_backup_created": "Kopia zapasowa systemu została pomyślnie utworzona: {{dirname}}", + "system_backup.toast_backup_failed": "Nie udało się utworzyć kopii zapasowej: {{error}}", + "system_backup.toast_list_failed": "Nie udało się wczytać listy kopii zapasowych: {{error}}", + "system_backup.toast_downloading": "Pobieranie kopii zapasowej systemu...", + "system_backup.toast_downloaded": "Kopia zapasowa systemu została pomyślnie pobrana", + "system_backup.toast_download_failed": "Nie udało się pobrać kopii zapasowej: {{error}}", + "system_backup.toast_deleted": "Kopia zapasowa systemu została pomyślnie usunięta", + "system_backup.toast_delete_failed": "Nie udało się usunąć kopii zapasowej: {{error}}", + "system_backup.confirm_delete": "Czy na pewno chcesz usunąć kopię zapasową systemu „{{dirname}}”?", + "maintenance.title": "Konserwacja bazy danych", + "maintenance.about_title": "Informacje o konserwacji bazy danych", + "maintenance.about_description": "Konserwacja bazy danych automatycznie usuwa stare dane, aby zapobiec nieograniczonemu wzrostowi jej rozmiaru. Obejmuje to wiadomości, dane śledzenia tras, odcinki tras i informacje o sąsiadach starsze niż skonfigurowane okresy przechowywania. Po czyszczeniu baza jest optymalizowana poleceniem VACUUM w celu odzyskania miejsca na dysku.", + "maintenance.database_size": "Bieżący rozmiar bazy danych", + "maintenance.last_run": "Ostatnie uruchomienie", + "maintenance.deleted_records": "Usunięte rekordy: {{count}}", + "maintenance.manual_title": "Konserwacja ręczna", + "maintenance.manual_description": "Uruchom konserwację bazy danych natychmiast. Stare dane zostaną usunięte zgodnie z ustawieniami przechowywania, a baza danych zostanie zoptymalizowana poleceniem VACUUM.", + "maintenance.run_now": "Uruchom konserwację teraz", + "maintenance.running": "Uruchamianie...", + "maintenance.auto_title": "Konserwacja automatyczna", + "maintenance.auto_description": "Zaplanuj automatyczną konserwację bazy danych codziennie o określonej godzinie.", + "maintenance.enable_auto": "Włącz automatyczną konserwację bazy danych", + "maintenance.maintenance_time": "Godzina konserwacji (format 24-godzinny)", + "maintenance.next_run": "Następne zaplanowane uruchomienie", + "maintenance.not_scheduled": "Nie zaplanowano", + "maintenance.never_run": "Nigdy", + "maintenance.message_retention": "Okres przechowywania wiadomości", + "maintenance.traceroute_retention": "Okres przechowywania danych śledzenia tras", + "maintenance.routesegment_retention": "Okres przechowywania odcinków tras", + "maintenance.neighborinfo_retention": "Okres przechowywania informacji o sąsiadach", + "maintenance.retention_hint": "Dane starsze niż ustawiony okres przechowywania będą automatycznie usuwane podczas konserwacji. Minimum 7 dni, maksimum 365 dni.", + "maintenance.save_settings": "Zapisz ustawienia konserwacji", + "maintenance.toast_settings_saved": "Ustawienia konserwacji zostały pomyślnie zapisane", + "maintenance.toast_settings_failed": "Nie udało się zapisać ustawień konserwacji: {{error}}", + "maintenance.toast_running": "Trwa konserwacja bazy danych...", + "maintenance.toast_complete": "Konserwacja zakończona: usunięto {{count}} rekordów, zwolniono {{saved}} miejsca", + "maintenance.toast_failed": "Konserwacja nie powiodła się: {{error}}", + "auto_upgrade_test.title": "Testowanie automatycznej aktualizacji", + "auto_upgrade_test.description_intro": "Przetestuj konfigurację automatycznej aktualizacji, aby upewnić się, że wszystkie składniki są prawidłowo skonfigurowane.", + "auto_upgrade_test.config_test_name": "Test konfiguracji", + "auto_upgrade_test.config_test_description": "sprawdza zmienne środowiskowe, uprawnienia plików, dodatkowy kontener aktualizatora i inne elementy.", + "auto_upgrade_test.upgrade_test_name": "Test procesu aktualizacji", + "auto_upgrade_test.upgrade_test_description": "przeprowadza rzeczywistą aktualizację do bieżącej wersji, sprawdzając tworzenie kopii zapasowej, ponowne utworzenie kontenera i kontrole stanu bez zmiany wersji.", + "auto_upgrade_test.btn_testing": "Testowanie konfiguracji...", + "auto_upgrade_test.btn_test_config": "Przetestuj konfigurację automatycznej aktualizacji", + "auto_upgrade_test.btn_running_upgrade": "Przeprowadzanie aktualizacji testowej...", + "auto_upgrade_test.btn_test_upgrade": "Przetestuj proces aktualizacji", + "auto_upgrade_test.status_pending": "Oczekuje", + "auto_upgrade_test.status_backing_up": "Tworzenie kopii zapasowej", + "auto_upgrade_test.status_downloading": "Pobieranie obrazu", + "auto_upgrade_test.status_restarting": "Ponowne tworzenie kontenera", + "auto_upgrade_test.status_health_check": "Kontrola stanu", + "auto_upgrade_test.status_cleanup": "Usuwanie starych obrazów", + "auto_upgrade_test.status_complete": "Zakończono", + "auto_upgrade_test.status_failed": "Niepowodzenie", + "auto_upgrade_test.status_rolling_back": "Przywracanie poprzedniej wersji", + "auto_upgrade_test.target_version": "Wersja docelowa", + "auto_upgrade_test.started": "Rozpoczęto", + "auto_upgrade_test.completed": "Zakończono", + "auto_upgrade_test.note_label": "Uwaga:", + "auto_upgrade_test.note_complete": "Aktualizacja testowa zakończyła się pomyślnie! Kontener został ponownie utworzony z tą samą wersją. Sprawdź dzienniki systemowe, aby potwierdzić prawidłowe działanie.", + "auto_upgrade_test.note_failed": "Aktualizacja testowa nie powiodła się. Szczegóły znajdują się w powyższym komunikacie o błędzie i dziennikach systemowych.", + "auto_upgrade_test.sidecar_note": "Jeżeli test „Dodatkowy kontener aktualizatora” zakończy się niepowodzeniem, upewnij się, że MeshMonitor został uruchomiony z użyciem obu plików Compose:", + "auto_upgrade_test.table_status": "Stan", + "auto_upgrade_test.table_check": "Test", + "auto_upgrade_test.table_result": "Wynik", + "auto_upgrade_test.hide_details": "Ukryj szczegóły", + "auto_upgrade_test.show_details": "Pokaż szczegóły", + "auto_upgrade_test.toast_all_passed": "Wszystkie testy konfiguracji automatycznej aktualizacji zakończyły się pomyślnie!", + "auto_upgrade_test.toast_has_issues": "Konfiguracja automatycznej aktualizacji zawiera problemy. Szczegóły znajdują się poniżej.", + "auto_upgrade_test.toast_test_failed": "Nie udało się przetestować konfiguracji automatycznej aktualizacji", + "auto_upgrade_test.toast_upgrade_complete": "Aktualizacja testowa zakończyła się pomyślnie!", + "auto_upgrade_test.toast_upgrade_failed": "Aktualizacja testowa nie powiodła się", + "auto_upgrade_test.toast_upgrade_started": "Aktualizacja testowa została rozpoczęta! Monitorowanie postępu...", + "auto_upgrade_test.toast_start_failed": "Nie udało się rozpocząć aktualizacji testowej", + "auto_upgrade_test.check_connection_error": "Błąd połączenia", + "auto_upgrade_test.message_server_communication_failed": "Nie udało się nawiązać komunikacji z serwerem", + "auto_upgrade_test.message_connect_failed": "Nie można połączyć się z serwerem", + "auto_upgrade_test.immediate_upgrade": "Aktualizuj natychmiast po udostępnieniu nowej wersji", + "auto_upgrade_test.immediate_upgrade_description": "Po wykryciu nowej wersji i przy włączonej automatycznej aktualizacji rozpocznij aktualizację bez oczekiwania na ręczne potwierdzenie. Używaj ostrożnie — aktualizacja rozpocznie się automatycznie natychmiast po udostępnieniu nowej wersji.", + "auto_upgrade_test.setting_saved": "Ustawienie automatycznej aktualizacji zostało zapisane", + "auto_upgrade_test.setting_save_failed": "Nie udało się zapisać ustawienia automatycznej aktualizacji", + "admin_commands.title": "Polecenia administracyjne", + "admin_commands.loading_nodes": "Ładowanie węzłów...", + "admin_commands.target_node": "Węzeł docelowy", + "admin_commands.select_node_description": "Wybierz węzeł, do którego mają zostać wysłane polecenia administracyjne", + "admin_commands.select_node_help": "Wybierz węzeł lokalny lub zdalny. W przypadku węzła zdalnego klucz sesji zostanie pobrany automatycznie.", + "admin_commands.search_node_placeholder": "Wyszukaj węzeł...", + "admin_commands.local_node_indicator": "Lokalny", + "admin_commands.local_node_no_passkey": "✓ Węzeł lokalny — klucz sesji nie jest wymagany", + "admin_commands.local_node_config_hint": "Pełna konfiguracja urządzenia lokalnego, w tym wiele funkcji niedostępnych w zdalnym zarządzaniu, znajduje się na stronie", + "admin_commands.device_configuration_page_link": "Konfiguracja urządzenia", + "admin_commands.local_node_config_hint_suffix": ".", + "admin_commands.remote_node_passkey": "✓ Węzeł zdalny — klucz sesji zostanie pobrany automatycznie", + "admin_commands.remote_node_passkey_acquired": "✓ Węzeł zdalny — uzyskano klucz sesji (pozostało {{seconds}} s)", + "admin_commands.please_select_node": "Wybierz węzeł", + "admin_commands.set_owner": "Ustaw właściciela", + "admin_commands.long_name": "Długa nazwa", + "admin_commands.long_name_description": "Długa nazwa właściciela urządzenia.", + "admin_commands.long_name_placeholder": "Długa nazwa właściciela urządzenia", + "admin_commands.short_name": "Krótka nazwa", + "admin_commands.short_name_description": "Krótka nazwa właściciela urządzenia (maksymalnie 4 znaki).", + "admin_commands.short_name_placeholder": "Krótka nazwa właściciela urządzenia (maks. 4 znaki)", + "admin_commands.mark_unmessagable": "Oznacz jako niezdolny do odbierania wiadomości", + "admin_commands.mark_unmessagable_description": "Uniemożliw innym węzłom wysyłanie wiadomości do tego urządzenia", + "admin_commands.mark_licensed": "Licencjonowany krótkofalowiec (HAM)", + "admin_commands.mark_licensed_description": "Oznacz jako licencjonowanego krótkofalowca. Długa nazwa powinna zawierać znak wywoławczy.", + "admin_commands.set_owner_button": "Ustaw właściciela", + "admin_commands.radio_configuration": "Konfiguracja radiowa", + "admin_commands.device_configuration": "Konfiguracja urządzenia", + "admin_commands.module_configuration": "Konfiguracja modułów", + "admin_commands.security_config_description": "Skonfiguruj ustawienia zabezpieczeń urządzenia, w tym klucze administratora i kontrolę dostępu.", + "admin_commands.config_coming_soon": "Interfejs konfiguracji będzie dostępny wkrótce. Użyj przycisku Wczytaj, aby zobaczyć bieżące ustawienia.", + "admin_commands.power_configuration": "Konfiguracja zasilania", + "admin_commands.network_configuration": "Konfiguracja sieci", + "admin_commands.display_configuration": "Konfiguracja wyświetlacza", + "admin_commands.bluetooth_configuration": "Konfiguracja Bluetooth", + "admin_commands.enable_bluetooth": "Włącz Bluetooth", + "admin_commands.enable_bluetooth_description": "Włącz Bluetooth w urządzeniu", + "admin_commands.bluetooth_pairing_mode": "Tryb parowania", + "admin_commands.bluetooth_pairing_mode_description": "Określa metodę parowania urządzenia", + "admin_commands.bluetooth_mode_random_pin": "Losowy PIN", + "admin_commands.bluetooth_mode_fixed_pin": "Stały PIN", + "admin_commands.bluetooth_mode_no_pin": "Bez kodu PIN", + "admin_commands.bluetooth_fixed_pin": "Stały PIN", + "admin_commands.bluetooth_fixed_pin_description": "Kod PIN do parowania (wymagany w trybie stałego kodu PIN)", + "admin_commands.save_bluetooth_config": "Zapisz konfigurację Bluetooth", + "admin_commands.sessionkey_configuration": "Konfiguracja klucza sesji", + "admin_commands.deviceui_configuration": "Konfiguracja interfejsu urządzenia", + "admin_commands.serial_configuration": "Konfiguracja portu szeregowego", + "admin_commands.extnotif_configuration": "Konfiguracja powiadomień zewnętrznych", + "admin_commands.storeforward_configuration": "Konfiguracja przechowywania i przekazywania", + "admin_commands.rangetest_configuration": "Konfiguracja testu zasięgu", + "admin_commands.telemetry_configuration": "Konfiguracja telemetrii", + "admin_commands.cannedmsg_configuration": "Konfiguracja gotowych wiadomości", + "admin_commands.audio_configuration": "Konfiguracja dźwięku", + "admin_commands.remotehardware_configuration": "Konfiguracja zdalnego sprzętu", + "admin_commands.neighborinfo_configuration": "Konfiguracja informacji o sąsiadach", + "admin_commands.enable_neighbor_info": "Włącz informacje o sąsiadach", + "admin_commands.enable_neighbor_info_description": "Określa, czy moduł informacji o sąsiadach jest włączony", + "admin_commands.neighbor_info_update_interval": "Interwał aktualizacji (sekundy)", + "admin_commands.neighbor_info_update_interval_description": "Interwał w sekundach określający częstotliwość prób wysyłania informacji o sąsiadach (minimum 14400, czyli 4 godziny)", + "admin_commands.neighbor_info_transmit_over_lora": "Wysyłaj przez LoRa", + "admin_commands.neighbor_info_transmit_over_lora_description": "Określa, czy oprócz wysyłania do MQTT i PhoneAPI informacje NeighborInfo mają być przesyłane przez LoRa. Funkcja nie jest dostępna na kanale z domyślnym kluczem i nazwą.", + "admin_commands.save_neighbor_info_config": "Zapisz konfigurację informacji o sąsiadach", + "admin_commands.ambientlighting_configuration": "Konfiguracja oświetlenia otoczenia", + "admin_commands.detectionsensor_configuration": "Konfiguracja czujnika wykrywania", + "admin_commands.paxcounter_configuration": "Konfiguracja Paxcounter", + "admin_commands.device_role_description": "Ustaw rolę urządzenia. Tryb ROUTER powoduje stałe ponowne rozgłaszanie pakietów i jest przeznaczony dla infrastruktury.", + "admin_commands.node_info_broadcast": "Interwał rozgłaszania informacji o węźle (sekundy)", + "admin_commands.node_info_broadcast_description": "Częstotliwość rozgłaszania informacji o węźle przez urządzenie. Minimum: 3600 sekund (1 godzina).", + "admin_commands.save_device_config": "Zapisz konfigurację urządzenia", + "admin_commands.lora_configuration": "Konfiguracja radia LoRa", + "admin_commands.use_modem_preset": "Użyj ustawienia wstępnego modemu", + "admin_commands.use_modem_preset_description": "Użyj predefiniowanego ustawienia modemu zamiast ustawień ręcznych", + "admin_commands.modem_preset": "Ustawienie wstępne modemu", + "admin_commands.bandwidth": "Szerokość pasma (kHz)", + "admin_commands.spread_factor": "Współczynnik rozpraszania", + "admin_commands.coding_rate": "Współczynnik kodowania", + "admin_commands.frequency_offset": "Przesunięcie częstotliwości", + "admin_commands.override_frequency": "Nadpisanie częstotliwości (Hz)", + "admin_commands.region": "Region", + "admin_commands.hop_limit": "Limit przeskoków (1–7)", + "admin_commands.tx_power": "Moc TX", + "admin_commands.channel_number": "Numer kanału", + "admin_commands.sx126x_rx_boosted_gain": "Zwiększone wzmocnienie RX SX126x", + "admin_commands.sx126x_rx_boosted_gain_description": "Włącz zwiększone wzmocnienie odbioru w modułach radiowych SX126x", + "admin_commands.ignore_mqtt": "Ignoruj MQTT", + "admin_commands.ignore_mqtt_description": "Po włączeniu urządzenie nie będzie przetwarzać pakietów odebranych przez LoRa, które na dowolnym odcinku trasy przeszły przez MQTT", + "admin_commands.config_ok_to_mqtt": "Zezwalaj na MQTT", + "admin_commands.config_ok_to_mqtt_description": "Po włączeniu ustawia bit ok_to_mqtt w pakietach wychodzących, zezwalając na ich przekazywanie przez MQTT", + "admin_commands.tx_enabled": "Nadawanie włączone", + "admin_commands.tx_enabled_description": "Włącz nadawanie LoRa. Po wyłączeniu urządzenie będzie tylko odbierać pakiety.", + "admin_commands.override_duty_cycle": "Nadpisz ograniczenie cyklu pracy", + "admin_commands.override_duty_cycle_description": "Nadpisz ograniczenie cyklu pracy. Używaj ostrożnie — może to naruszać lokalne przepisy.", + "admin_commands.pa_fan_disabled": "Wentylator wzmacniacza mocy wyłączony", + "admin_commands.pa_fan_disabled_description": "Wyłącz wentylator chłodzący wzmacniacz mocy (w urządzeniach wyposażonych w wentylator PA)", + "admin_commands.save_lora_config": "Zapisz konfigurację LoRa", + "admin_commands.position_configuration": "Konfiguracja pozycji", + "admin_commands.position_broadcast_interval": "Interwał rozgłaszania pozycji (sekundy)", + "admin_commands.position_broadcast_interval_description": "Częstotliwość rozgłaszania pozycji przez urządzenie. Minimum: 32 sekundy.", + "admin_commands.smart_position_broadcast": "Inteligentne rozgłaszanie pozycji", + "admin_commands.smart_position_broadcast_description": "Rozgłaszaj pozycję tylko wtedy, gdy zmieniła się w istotnym stopniu", + "admin_commands.fixed_position": "Pozycja stała", + "admin_commands.fixed_position_description": "Użyj stałej pozycji zamiast GPS", + "admin_commands.latitude": "Szerokość geograficzna", + "admin_commands.latitude_description": "Stała szerokość geograficzna (od -90 do 90)", + "admin_commands.longitude": "Długość geograficzna", + "admin_commands.longitude_description": "Stała długość geograficzna (od -180 do 180)", + "admin_commands.altitude": "Wysokość (metry)", + "admin_commands.altitude_description": "Stała wysokość nad poziomem morza", + "admin_commands.save_position_config": "Zapisz konfigurację pozycji", + "admin_commands.gps_update_interval": "Interwał aktualizacji GPS (sekundy)", + "admin_commands.gps_update_interval_description": "Częstotliwość prób pobierania pozycji GPS. 0 = wartość domyślna (30 sekund); bardzo duża wartość oznacza aktualizację tylko raz podczas uruchamiania", + "admin_commands.gps_mode": "Tryb GPS", + "admin_commands.gps_mode_description": "Określ, czy GPS jest włączony, wyłączony albo nie występuje w urządzeniu", + "admin_commands.gps_mode_disabled": "Wyłączone", + "admin_commands.gps_mode_enabled": "Włączone", + "admin_commands.gps_mode_not_present": "Brak", + "admin_commands.broadcast_smart_minimum_distance": "Minimalna odległość inteligentnego rozgłaszania (metry)", + "admin_commands.broadcast_smart_minimum_distance_description": "Minimalna przebyta odległość przed wysłaniem pozycji przy włączonym inteligentnym rozgłaszaniu", + "admin_commands.broadcast_smart_minimum_interval": "Minimalny interwał inteligentnego rozgłaszania (sekundy)", + "admin_commands.broadcast_smart_minimum_interval_description": "Minimalny czas między rozgłoszeniami pozycji przy włączonym inteligentnym rozgłaszaniu", + "admin_commands.position_flags_description": "Wybierz opcjonalne pola dołączane do wiadomości POSITION. Więcej pól = większe wiadomości = dłuższy czas antenowy", + "admin_commands.position_flag_altitude": "Uwzględnij wysokość", + "admin_commands.position_flag_altitude_msl": "Wysokość względem średniego poziomu morza (MSL)", + "admin_commands.position_flag_geoidal_separation": "Uwzględnij separację geoidy", + "admin_commands.position_flag_dop": "Uwzględnij DOP (pogorszenie dokładności)", + "admin_commands.position_flag_hvdop": "Użyj HDOP/VDOP zamiast PDOP", + "admin_commands.position_flag_satinview": "Uwzględnij widoczne satelity", + "admin_commands.position_flag_seq_no": "Uwzględnij numer sekwencyjny", + "admin_commands.position_flag_timestamp": "Uwzględnij znacznik czasu", + "admin_commands.position_flag_heading": "Uwzględnij kierunek (dla pojazdów)", + "admin_commands.position_flag_speed": "Uwzględnij prędkość (dla pojazdów)", + "admin_commands.gps_gpio_pins": "Piny GPIO GPS", + "admin_commands.gps_gpio_pins_description": "Zmień przypisania pinów GPS dla swojej płytki (opcjonalnie)", + "admin_commands.gps_rx_gpio": "GPIO RX GPS", + "admin_commands.gps_tx_gpio": "GPIO TX GPS", + "admin_commands.gps_en_gpio": "GPIO włączania GPS", + "admin_commands.optional": "Opcjonalne", + "admin_commands.mqtt_configuration": "Konfiguracja MQTT", + "admin_commands.enable_mqtt": "Włącz MQTT", + "admin_commands.enable_mqtt_description": "Włącz połączenie z brokerem MQTT", + "admin_commands.server_address": "Adres serwera", + "admin_commands.server_address_description": "Adres brokera MQTT (np. mqtt.meshtastic.org)", + "admin_commands.username": "Nazwa użytkownika", + "admin_commands.username_description": "Nazwa użytkownika brokera MQTT", + "admin_commands.password": "Hasło", + "admin_commands.password_description": "Hasło brokera MQTT", + "admin_commands.root_topic": "Główny temat", + "admin_commands.root_topic_description": "Prefiks głównego tematu MQTT (np. msh/US)", + "admin_commands.encryption_enabled": "Szyfrowanie włączone", + "admin_commands.encryption_enabled_description": "Użyj szyfrowania TLS dla połączenia MQTT", + "admin_commands.json_enabled": "JSON włączony", + "admin_commands.json_enabled_description": "Wysyłaj wiadomości w formacie JSON", + "admin_commands.save_mqtt_config": "Zapisz konfigurację MQTT", + "admin_commands.security_configuration": "Konfiguracja zabezpieczeń", + "admin_commands.admin_keys": "Klucze administratora", + "admin_commands.admin_keys_description": "Klucze publiczne uprawnione do wysyłania wiadomości administracyjnych do tego węzła. Można skonfigurować maksymalnie 3 klucze. Użyj formatu Base64 lub szesnastkowego.", + "admin_commands.admin_key_placeholder": "base64:... lub ciąg szesnastkowy", + "admin_commands.is_managed": "Urządzenie zarządzane", + "admin_commands.is_managed_description": "Po włączeniu urządzenie jest uznawane za zarządzane przez administratora sieci mesh za pomocą wiadomości administracyjnych", + "admin_commands.serial_enabled": "Port szeregowy włączony", + "admin_commands.serial_enabled_description": "Włącz konsolę szeregową przez Stream API", + "admin_commands.debug_log_api_enabled": "Interfejs API dziennika debugowania włączony", + "admin_commands.debug_log_api_enabled_description": "Przesyłaj dziennik debugowania na żywo przez port szeregowy lub Bluetooth. Domyślnie rejestrowanie jest wyłączane po połączeniu klienta API.", + "admin_commands.admin_channel_enabled": "Kanał administracyjny włączony", + "admin_commands.admin_channel_enabled_description": "Zezwalaj na zdalne sterowanie urządzeniem przez niezabezpieczony starszy kanał administracyjny", + "admin_commands.save_security_config": "Zapisz konfigurację zabezpieczeń", + "admin_commands.security_save_disabled": "Zapisywanie konfiguracji zabezpieczeń jest tymczasowo wyłączone z powodu problemu ze zgodnością oprogramowania układowego", + "admin_commands.security_config_loaded": "Konfiguracja zabezpieczeń została pomyślnie wczytana", + "admin_commands.failed_load_security_config": "Nie udało się wczytać konfiguracji zabezpieczeń", + "admin_commands.channel_configuration": "Konfiguracja kanału", + "admin_commands.load_channels": "Wczytaj kanały", + "admin_commands.loading_channels": "Ładowanie kanałów...", + "admin_commands.device_config_loaded": "Konfiguracja urządzenia została pomyślnie wczytana", + "admin_commands.failed_load_device_config": "Nie udało się wczytać konfiguracji urządzenia", + "admin_commands.lora_config_loaded": "Konfiguracja LoRa została pomyślnie wczytana", + "admin_commands.failed_load_lora_config": "Nie udało się wczytać konfiguracji LoRa", + "admin_commands.position_config_loaded": "Konfiguracja pozycji została pomyślnie wczytana", + "admin_commands.failed_load_position_config": "Nie udało się wczytać konfiguracji pozycji", + "admin_commands.mqtt_config_loaded": "Konfiguracja MQTT została pomyślnie wczytana", + "admin_commands.failed_load_mqtt_config": "Nie udało się wczytać konfiguracji MQTT", + "admin_commands.local_node_fallback": "Węzeł lokalny", + "admin_commands.local_node_short": "LOKALNY", + "admin_commands.no_config_data": "Nie odebrano danych konfiguracyjnych", + "admin_commands.channels_loaded_local": "Wczytano {{count}} kanałów z węzła lokalnego", + "admin_commands.channels_loaded_remote": "Wczytano {{count}} kanałów ze zdalnego węzła", + "admin_commands.failed_session_passkey": "Nie udało się uzyskać klucza sesji: {{error}}", + "admin_commands.failed_load_channels": "Nie udało się wczytać kanałów", + "admin_commands.no_node_selected": "Nie wybrano węzła", + "admin_commands.command_executed": "Polecenie „{{command}}” zostało wykonane pomyślnie", + "admin_commands.failed_execute_command": "Nie udało się wykonać polecenia", + "admin_commands.owner_info_loaded": "Informacje o właścicielu zostały pomyślnie wczytane", + "admin_commands.no_owner_info": "Brak informacji o właścicielu", + "admin_commands.channel_config_description": "Skonfiguruj kanały wybranego węzła. Każdą pozycję kanału można skonfigurować niezależnie.", + "admin_commands.channel_slot": "Kanał {{index}}", + "admin_commands.unnamed": "Bez nazwy", + "admin_commands.primary": "Główny", + "admin_commands.secondary": "Dodatkowy", + "admin_commands.disabled": "Wyłączone", + "admin_commands.empty": "Pusty", + "admin_commands.encrypted": "Szyfrowany", + "admin_commands.unencrypted": "Niezaszyfrowany", + "admin_commands.uplink": "Łącze w górę", + "admin_commands.downlink": "Łącze w dół", + "admin_commands.no_bridge": "Bez mostu", + "admin_commands.config_import_export": "Import i eksport konfiguracji", + "admin_commands.config_import_export_description": "Importuj lub eksportuj konfigurację kanałów i ustawienia urządzenia w formacie adresu URL Meshtastic. Adresy te są zgodne z oficjalnymi aplikacjami Meshtastic.", + "admin_commands.import_configuration": "Importuj konfigurację", + "admin_commands.export_configuration": "Eksportuj konfigurację", + "admin_commands.export_config_tooltip": "Wyeksportuj adres URL konfiguracji. W razie potrzeby najpierw wczytaj kanały.", + "admin_commands.loading_remote_config": "Ładowanie konfiguracji zdalnego węzła...", + "admin_commands.config_loaded_success": "Konfiguracja została pomyślnie wczytana", + "admin_commands.config_load_failed": "Nie udało się wczytać konfiguracji {{configType}}", + "admin_commands.failed_load_config": "Nie udało się wczytać konfiguracji", + "admin_commands.node_favorites_ignored": "Ulubione i ignorowane węzły", + "admin_commands.node_favorites_ignored_description": "Zarządzaj ulubionymi i ignorowanymi węzłami na urządzeniu docelowym. Ulubione mają wyższy priorytet na liście węzłów, a ignorowane są ukrywane podczas zwykłego działania.", + "admin_commands.select_node_to_manage": "Wybierz węzeł", + "admin_commands.select_node_to_manage_description": "Wybierz węzeł, którego stan ulubionego lub ignorowanego ma zostać zmieniony na urządzeniu docelowym.", + "admin_commands.node_fallback": "Węzeł {{nodeNum}}", + "admin_commands.search_node_to_manage": "Wyszukaj węzeł do zarządzania...", + "admin_commands.favorite": "Ulubiony", + "admin_commands.ignored": "Ignorowany", + "admin_commands.selected": "Wybrany", + "admin_commands.favorites": "Ulubione", + "admin_commands.ignored_nodes": "Ignorowane", + "admin_commands.already_favorite": "✓ Już jest ulubiony", + "admin_commands.set_as_favorite": "Oznacz jako ulubiony", + "admin_commands.remove_favorite": "Usuń z ulubionych", + "admin_commands.already_ignored": "✓ Już jest ignorowany", + "admin_commands.set_as_ignored": "Oznacz jako ignorowany", + "admin_commands.remove_ignored": "Przestań ignorować", + "admin_commands.firmware_requirement_note": "Uwaga: te polecenia wymagają oprogramowania układowego w wersji 2.7.0 lub nowszej. Urządzenie docelowe należy wybrać w powyższej sekcji „Węzeł docelowy”.", + "admin_commands.failed_load_owner_info": "Nie udało się wczytać informacji o właścicielu", + "admin_commands.long_short_name_required": "Długa i krótka nazwa są wymagane", + "admin_commands.please_select_node_to_favorite": "Wybierz węzeł do dodania do ulubionych", + "admin_commands.please_select_node_to_unfavorite": "Wybierz węzeł do usunięcia z ulubionych", + "admin_commands.please_select_node_to_ignore": "Wybierz węzeł do ignorowania", + "admin_commands.please_select_node_to_unignore": "Wybierz węzeł, który ma przestać być ignorowany", + "admin_commands.router_mode_confirmation": "Ustawienie urządzenia w trybie ROUTER spowoduje, że będzie ono zawsze ponownie rozgłaszać pakiety. Ten tryb jest zwykle używany przez węzły infrastruktury. Kontynuować?", + "admin_commands.router_mode_warning_title": "Tryb routera", + "admin_commands.router_mode_warning": "To urządzenie będzie zawsze ponownie rozgłaszać pakiety. Rolę Router należy przeznaczyć dla węzłów infrastruktury ze stabilnym zasilaniem i dobrze umieszczoną anteną; ustawienie jej na typowym kliencie zwiększa zbędny ruch w sieci mesh.", + "admin_commands.channel_name_max_length": "Nazwa kanału może mieć najwyżej 11 znaków", + "admin_commands.channel_name": "Nazwa kanału", + "admin_commands.channel_name_description": "Maksymalnie 11 znaków", + "admin_commands.channel_name_placeholder": "Nazwa kanału", + "admin_commands.psk": "Klucz współdzielony (PSK)", + "admin_commands.psk_description": "Pozostaw puste, aby wyłączyć szyfrowanie, lub wpisz klucz zakodowany w Base64 (16 albo 32 bajty)", + "admin_commands.psk_placeholder": "PSK zakodowany w Base64", + "admin_commands.channel_role": "Rola kanału", + "admin_commands.channel_role_description": "Kanał podstawowy ustala częstotliwość radiową, dodatkowy służy wyłącznie do szyfrowania, a wyłączony dezaktywuje kanał", + "admin_commands.uplink_enabled": "Łącze w górę włączone", + "admin_commands.uplink_enabled_description": "Zezwalaj temu kanałowi na wysyłanie wiadomości do MQTT", + "admin_commands.downlink_enabled": "Łącze w dół włączone", + "admin_commands.downlink_enabled_description": "Zezwalaj temu kanałowi na odbieranie wiadomości z MQTT", + "admin_commands.position_precision": "Dokładność lokalizacji (bity)", + "admin_commands.position_precision_description": "Liczba bitów danych pozycji (0–32). Wyższa wartość oznacza większą dokładność. 32 = pełna dokładność.", + "admin_commands.edit_channel": "Edytuj kanał {{slot}}", + "admin_commands.save_channel": "Zapisz kanał", + "admin_commands.please_select_node_export": "Wybierz węzeł", + "admin_commands.reboot_delay_label": "Opóźnienie ponownego uruchomienia (sekundy)", + "admin_commands.reboot_device": "Uruchom ponownie urządzenie", + "admin_commands.purge_node_database": "Wyczyść bazę węzłów", + "admin_commands.warning": "Strefa niebezpieczna", + "admin_commands.reboot_confirmation": "Czy na pewno chcesz ponownie uruchomić urządzenie? Ponowne uruchomienie nastąpi za {{seconds}} sekund.", + "admin_commands.purge_confirmation": "Czy na pewno chcesz wyczyścić bazę węzłów? Spowoduje to usunięcie wszystkich węzłów z urządzenia.", + "admin_commands.node_set_favorite": "Węzeł {{nodeNum}} został oznaczony jako ulubiony", + "admin_commands.node_removed_favorite": "Węzeł {{nodeNum}} został usunięty z ulubionych", + "admin_commands.node_set_ignored": "Węzeł {{nodeNum}} został oznaczony jako ignorowany", + "admin_commands.node_removed_ignored": "Węzeł {{nodeNum}} nie jest już ignorowany", + "admin_commands.channel_exported_successfully": "Kanał {{channelId}} został pomyślnie wyeksportowany", + "admin_commands.channel_imported_successfully": "Kanał {{importSlotId}} został pomyślnie zaimportowany", + "admin_commands.please_select_file_and_slot": "Wybierz plik i pozycję kanału", + "admin_commands.invalid_import_format": "Nieprawidłowy format importu. Oczekiwano obiektu kanału", + "admin_commands.configuration_imported_success": "Konfiguracja została zaimportowana", + "admin_commands.warning_message": "Zmiana tych ustawień może uszkodzić konfigurację węzła Meshtastic.", + "admin_commands.warning_description": "Te ustawienia bezpośrednio zmieniają konfigurację docelowego urządzenia Meshtastic. Nieprawidłowe wartości mogą spowodować problemy z łącznością lub siecią, a nawet wymagać przywrócenia ustawień fabrycznych. Zmieniaj je tylko wtedy, gdy rozumiesz ich działanie.", + "common.load": "Wczytaj", + "admin_commands.load_all_configs": "Wczytaj całą konfigurację", + "admin_commands.all_configs_loaded": "Pomyślnie wczytano wszystkie konfiguracje: {{count}}", + "admin_commands.configs_partially_loaded": "Wczytano konfiguracje: {{loaded}}, niepowodzenia: {{errors}}", + "admin_commands.failed_load_all_configs": "Nie udało się wczytać konfiguracji", + "admin_commands.retrieve_device_metadata": "Pobierz metadane urządzenia", + "admin_commands.device_metadata_loaded": "Metadane urządzenia zostały pomyślnie wczytane", + "admin_commands.failed_device_metadata": "Nie udało się wczytać metadanych urządzenia", + "admin_commands.send_reboot": "Wyślij polecenie ponownego uruchomienia", + "admin_commands.reboot_sent": "Polecenie ponownego uruchomienia zostało wysłane pomyślnie", + "admin_commands.failed_reboot": "Nie udało się wysłać polecenia ponownego uruchomienia", + "admin_commands.confirm_reboot": "Czy na pewno chcesz ponownie uruchomić ten węzeł?", + "admin_commands.set_time": "Ustaw czas", + "admin_commands.set_time_sent": "Polecenie synchronizacji czasu zostało wysłane pomyślnie", + "admin_commands.failed_set_time": "Nie udało się wysłać polecenia ustawienia czasu", + "admin_commands.device_metadata_title": "Metadane urządzenia", + "admin_commands.firmware_version": "Wersja oprogramowania układowego", + "admin_commands.hardware_model": "Model sprzętu", + "admin_commands.device_role": "Rola urządzenia", + "admin_commands.device_state_version": "Wersja stanu", + "admin_commands.capabilities": "Możliwości", + "admin_commands.position_flags": "Flagi pozycji", + "admin_commands.loading_config_progress": "Ładowanie {{configType}} ({{current}}/{{total}})...", + "admin_commands.device_config_short": "Urządzenie", + "admin_commands.lora_config_short": "LoRa", + "admin_commands.position_config_short": "Pozycja", + "admin_commands.mqtt_config_short": "MQTT", + "admin_commands.security_config_short": "Zabezpieczenia", + "admin_commands.owner_config_short": "Właściciel", + "admin_commands.channels_config_short": "Kanały", + "admin_commands.bluetooth_config_short": "Bluetooth", + "admin_commands.neighborinfo_config_short": "Informacje o sąsiadach", + "admin_commands.telemetry_config_short": "Telemetria", + "admin_commands.load_section": "Wczytaj: {{section}}", + "admin_commands.load_button": "Wczytaj", + "admin_commands.section_loaded": "Sekcja została pomyślnie wczytana", + "admin_commands.section_load_failed": "Nie udało się wczytać sekcji", + "messages.override_position": "Nadpisz pozycję", + "messages.override_position_title": "Ustaw niestandardową pozycję tego węzła", + "messages.hide_from_map": "Ukryj na mapie", + "messages.unhide_from_map": "Pokaż na mapie", + "position_override.title": "Nadpisanie pozycji: {{nodeName}}", + "position_override.description": "Nadpisz pozycję tego węzła na mapie. Po włączeniu ta niestandardowa pozycja będzie używana zamiast pozycji GPS lub szacowanej podczas wyświetlania mapy i obliczania odległości.", + "position_override.use_position": "Użyj tej niestandardowej pozycji", + "position_override.latitude": "Szerokość geograficzna", + "position_override.latitude_description": "Zakres: od -90 do 90 (stopnie dziesiętne)", + "position_override.latitude_error": "Szerokość geograficzna musi mieścić się w zakresie od -90 do 90", + "position_override.longitude": "Długość geograficzna", + "position_override.longitude_description": "Zakres: od -180 do 180 (stopnie dziesiętne)", + "position_override.longitude_error": "Długość geograficzna musi mieścić się w zakresie od -180 do 180", + "position_override.altitude": "Wysokość (opcjonalna)", + "position_override.altitude_description": "Wysokość nad poziomem morza w metrach", + "position_override.find_coordinates": "Znajdź tutaj swoje współrzędne GPS", + "position_override.save_success": "Nadpisanie pozycji zostało pomyślnie zapisane", + "position_override.save_error": "Nie udało się zapisać nadpisania pozycji", + "position_override.private": "Pozycja prywatna", + "position_override.private_description": "Widoczna tylko dla zalogowanych użytkowników tej instancji MeshMonitor. Użytkownicy anonimowi zobaczą oryginalną pozycję węzła.", + "node_info.title": "Informacje o węźle", + "node_info.node_name": "Nazwa węzła", + "node_info.short_name": "Krótka nazwa", + "node_info.node_id": "Identyfikator węzła", + "node_info.connection_section": "Połączenie", + "node_info.address": "Adres", + "node_info.default_address": "Adres domyślny", + "node_info.overridden": "Nadpisany", + "node_info.change_address": "Zmień adres", + "node_info.change_address_button": "Zmień adres", + "node_info.new_address": "Nowy adres", + "node_info.address_placeholder": "192.168.1.100 lub nazwa_hosta:port", + "node_info.warning_title": "Ważna informacja", + "node_info.warning_no_purge": "Zmiana adresu nie spowoduje usunięcia żadnych danych.", + "node_info.warning_temporary": "To ustawienie jest tymczasowe i po ponownym uruchomieniu kontenera zostanie przywrócony adres domyślny.", + "node_info.warning_immediate": "Nowy adres zostanie natychmiast użyty do wszystkich operacji.", + "node_info.save": "Zastosuj zmiany", + "node_info.saving": "Stosowanie...", + "node_info.success": "Adres został pomyślnie zmieniony. Ponowne ładowanie strony...", + "node_info.error_empty_ip": "Wpisz adres IP lub nazwę hosta", + "node_info.error_invalid_ip": "Wpisz prawidłowy adres IP lub nazwę hosta (opcjonalnie z portem)", + "node_info.error_failed": "Nie udało się zmienić adresu", + "extnotif_config.title": "Powiadomienia zewnętrzne", + "extnotif_config.view_docs": "Zobacz dokumentację powiadomień zewnętrznych", + "extnotif_config.enabled": "Włącz powiadomienia zewnętrzne", + "extnotif_config.enabled_description": "Włącz zewnętrzne wyjścia powiadomień (diody LED, wibracje, brzęczyk)", + "extnotif_config.output_ms": "Czas aktywacji wyjścia (ms)", + "extnotif_config.output_ms_description": "Czas impulsu włączenia lub wyłączenia w milisekundach (domyślnie: 1000)", + "extnotif_config.active_high": "Stan wysoki aktywny", + "extnotif_config.active_high_description": "Włącz dla wyjść aktywnych stanem wysokim, wyłącz dla wyjść aktywnych stanem niskim", + "extnotif_config.alert_section": "Wyzwalacze alarmów", + "extnotif_config.alert_message": "Powiadamiaj o wiadomości (LED)", + "extnotif_config.alert_message_description": "Włącz wyjście LED po odebraniu wiadomości tekstowej", + "extnotif_config.alert_message_vibra": "Powiadamiaj o wiadomości (wibracje)", + "extnotif_config.alert_message_vibra_description": "Uruchom silnik wibracyjny po odebraniu wiadomości tekstowej", + "extnotif_config.alert_message_buzzer": "Powiadamiaj o wiadomości (brzęczyk)", + "extnotif_config.alert_message_buzzer_description": "Uruchom brzęczyk po odebraniu wiadomości tekstowej", + "extnotif_config.alert_bell": "Powiadamiaj o znaku dzwonka (LED)", + "extnotif_config.alert_bell_description": "Włącz wyjście LED po wykryciu znaku dzwonka w wiadomości", + "extnotif_config.alert_bell_vibra": "Powiadamiaj o znaku dzwonka (wibracje)", + "extnotif_config.alert_bell_vibra_description": "Uruchom silnik wibracyjny po wykryciu znaku dzwonka", + "extnotif_config.alert_bell_buzzer": "Powiadamiaj o znaku dzwonka (brzęczyk)", + "extnotif_config.alert_bell_buzzer_description": "Uruchom brzęczyk po wykryciu znaku dzwonka", + "extnotif_config.advanced_settings": "Ustawienia zaawansowane", + "extnotif_config.use_pwm": "Użyj PWM", + "extnotif_config.use_pwm_description": "Użyj PWM do regulacji wyjścia zamiast prostego włączania i wyłączania", + "extnotif_config.use_i2s": "Użyj I2S jako brzęczyka", + "extnotif_config.use_i2s_description": "Włącz wyjście audio I2S dla dźwięków powiadomień", + "extnotif_config.nag_timeout": "Interwał ponawiania (sekundy)", + "extnotif_config.nag_timeout_description": "Powtarzaj powiadomienie co N sekund aż do potwierdzenia (0 = wyłączone)", + "extnotif_config.gpio_section": "Konfiguracja pinów GPIO", + "extnotif_config.output_gpio": "GPIO wyjścia LED", + "extnotif_config.output_gpio_description": "Numer pinu GPIO wyjścia LED", + "extnotif_config.output_vibra_gpio": "GPIO silnika wibracyjnego", + "extnotif_config.output_vibra_gpio_description": "Numer pinu GPIO silnika wibracyjnego", + "extnotif_config.output_buzzer_gpio": "GPIO brzęczyka", + "extnotif_config.output_buzzer_gpio_description": "Numer pinu GPIO aktywnego brzęczyka", + "extnotif_config.save_button": "Zapisz konfigurację powiadomień zewnętrznych", + "storeforward_config.title": "Przechowywanie i przekazywanie", + "storeforward_config.view_docs": "Zobacz dokumentację przechowywania i przekazywania", + "storeforward_config.enabled": "Włącz przechowywanie i przekazywanie", + "storeforward_config.enabled_description": "Włącz funkcje przechowywania i późniejszego przekazywania wiadomości", + "storeforward_config.is_server": "Działaj jako serwer", + "storeforward_config.is_server_description": "Przechowuj wiadomości i ponownie wysyłaj je klientom, którzy ich nie odebrali", + "storeforward_config.heartbeat": "Sygnał obecności włączony", + "storeforward_config.heartbeat_description": "Wysyłaj okresowy sygnał obecności informujący o dostępności serwera", + "storeforward_config.records": "Maksymalna liczba rekordów", + "storeforward_config.records_description": "Maksymalna liczba przechowywanych wiadomości (0 = wartość domyślna)", + "storeforward_config.history_return_max": "Maksymalna liczba zwracanych wiadomości", + "storeforward_config.history_return_max_description": "Maksymalna liczba wiadomości zwracanych w jednym żądaniu (0 = wartość domyślna)", + "storeforward_config.history_return_window": "Okno historii (sekundy)", + "storeforward_config.history_return_window_description": "Przedział czasowy historii wiadomości (0 = wartość domyślna)", + "storeforward_config.save_button": "Zapisz konfigurację przechowywania i przekazywania", + "rangetest_config.title": "Test zasięgu", + "rangetest_config.view_docs": "Zobacz dokumentację testu zasięgu", + "rangetest_config.enabled": "Włącz test zasięgu", + "rangetest_config.enabled_description": "Włącz tryb testowania zasięgu do analizy pokrycia sygnałem radiowym", + "rangetest_config.sender": "Interwał nadawania (sekundy)", + "rangetest_config.sender_description": "Odstęp między transmisjami testu zasięgu (0 = tylko odbiór)", + "rangetest_config.save": "Zapisuj wyniki do pliku", + "rangetest_config.save_description": "Zapisuj wyniki testu zasięgu do pliku RangeTest.csv (tylko ESP32)", + "rangetest_config.save_button": "Zapisz konfigurację testu zasięgu", + "cannedmsg_config.title": "Gotowe wiadomości", + "cannedmsg_config.view_docs": "Zobacz dokumentację gotowych wiadomości", + "cannedmsg_config.enabled": "Włącz gotowe wiadomości", + "cannedmsg_config.enabled_description": "Włącz moduł gotowych wiadomości umożliwiający szybkie wysyłanie wcześniej zdefiniowanych treści", + "cannedmsg_config.rotary1_enabled": "Enkoder obrotowy włączony", + "cannedmsg_config.rotary1_enabled_description": "Włącz enkoder obrotowy do wybierania wiadomości", + "cannedmsg_config.updown1_enabled": "Przyciski góra/dół włączone", + "cannedmsg_config.updown1_enabled_description": "Włącz urządzenie wejściowe z przyciskami góra/dół", + "cannedmsg_config.send_bell": "Wysyłaj znak dzwonka", + "cannedmsg_config.send_bell_description": "Dołączaj do wysyłanych wiadomości znak dzwonka uruchamiający powiadomienie", + "cannedmsg_config.allow_input_source": "Dozwolone źródło wejścia", + "cannedmsg_config.allow_input_source_description": "Ograniczenie źródła wejścia (0 = dowolne albo określona wartość InputEventChar)", + "cannedmsg_config.advanced_settings": "Ustawienia zaawansowane", + "cannedmsg_config.gpio_section": "Konfiguracja pinów GPIO", + "cannedmsg_config.pin_a": "Pin A enkodera", + "cannedmsg_config.pin_a_description": "Pin GPIO wejścia A enkodera obrotowego", + "cannedmsg_config.pin_b": "Pin B enkodera", + "cannedmsg_config.pin_b_description": "Pin GPIO wejścia B enkodera obrotowego", + "cannedmsg_config.pin_press": "Pin przycisku enkodera", + "cannedmsg_config.pin_press_description": "Pin GPIO przycisku enkodera obrotowego", + "cannedmsg_config.events_section": "Przypisania zdarzeń", + "cannedmsg_config.event_cw": "Zdarzenie obrotu zgodnie z ruchem wskazówek zegara", + "cannedmsg_config.event_cw_description": "Działanie uruchamiane podczas obrotu zgodnie z ruchem wskazówek zegara", + "cannedmsg_config.event_ccw": "Zdarzenie obrotu przeciwnie do ruchu wskazówek zegara", + "cannedmsg_config.event_ccw_description": "Działanie uruchamiane podczas obrotu przeciwnie do ruchu wskazówek zegara", + "cannedmsg_config.event_press": "Zdarzenie naciśnięcia", + "cannedmsg_config.event_press_description": "Działanie uruchamiane po naciśnięciu przycisku", + "cannedmsg_config.save_button": "Zapisz konfigurację gotowych wiadomości", + "audio_config.title": "Dźwięk (Codec2)", + "audio_config.view_docs": "Zobacz dokumentację konfiguracji dźwięku", + "audio_config.codec2_enabled": "Włącz dźwięk Codec2", + "audio_config.codec2_enabled_description": "Włącz kompresję głosu Codec2 podczas transmisji dźwięku", + "audio_config.bitrate": "Przepływność dźwięku", + "audio_config.bitrate_description": "Przepływność kompresji Codec2 (niższa = mniejsze pakiety i niższa jakość)", + "audio_config.advanced_settings": "Ustawienia zaawansowane", + "audio_config.ptt_pin": "Pin GPIO PTT", + "audio_config.ptt_pin_description": "Pin GPIO przycisku nadawania PTT", + "audio_config.i2s_section": "Konfiguracja pinów I2S", + "audio_config.i2s_ws": "Pin I2S WS", + "audio_config.i2s_ws_description": "Pin GPIO wyboru słowa I2S (LRCLK)", + "audio_config.i2s_sd": "Pin I2S SD", + "audio_config.i2s_sd_description": "Pin GPIO wejścia danych szeregowych I2S", + "audio_config.i2s_din": "Pin I2S DIN", + "audio_config.i2s_din_description": "Pin GPIO wyjścia danych szeregowych I2S", + "audio_config.i2s_sck": "Pin I2S SCK", + "audio_config.i2s_sck_description": "Pin GPIO zegara szeregowego I2S (BCLK)", + "audio_config.save_button": "Zapisz konfigurację dźwięku", + "remotehw_config.title": "Zdalny sprzęt", + "remotehw_config.view_docs": "Zobacz dokumentację zdalnego sprzętu", + "remotehw_config.enabled": "Włącz zdalny sprzęt", + "remotehw_config.enabled_description": "Zezwalaj na zdalny dostęp do pinów GPIO przez sieć mesh", + "remotehw_config.allow_undefined": "Zezwalaj na dostęp do niezdefiniowanych pinów", + "remotehw_config.allow_undefined_description": "Zezwalaj na odczyt i zapis pinów, które nie zostały jawnie zdefiniowane w available_pins", + "remotehw_config.pins_note": "Uwaga: konfiguracją dostępnych pinów zarządza się za pomocą aplikacji Meshtastic lub CLI", + "remotehw_config.save_button": "Zapisz konfigurację zdalnego sprzętu", + "detectionsensor_config.title": "Czujnik wykrywania", + "detectionsensor_config.view_docs": "Zobacz dokumentację czujnika wykrywania", + "detectionsensor_config.enabled": "Włącz czujnik wykrywania", + "detectionsensor_config.enabled_description": "Monitoruj pin GPIO i rozgłaszaj alarmy po zmianie jego stanu", + "detectionsensor_config.name": "Nazwa czujnika", + "detectionsensor_config.name_description": "Przyjazna nazwa czujnika (maksymalnie 20 znaków)", + "detectionsensor_config.monitor_pin": "Monitorowany pin", + "detectionsensor_config.monitor_pin_description": "Numer pinu GPIO monitorowanego pod kątem zmian", + "detectionsensor_config.trigger_type": "Typ wyzwalacza", + "detectionsensor_config.trigger_type_description": "Rodzaj zmiany stanu uruchamiającej alarm", + "detectionsensor_config.use_pullup": "Użyj rezystora podciągającego", + "detectionsensor_config.use_pullup_description": "Włącz wewnętrzny rezystor podciągający na monitorowanym pinie", + "detectionsensor_config.send_bell": "Wysyłaj znak dzwonka", + "detectionsensor_config.send_bell_description": "Dołączaj znak dzwonka do wiadomości alarmowych", + "detectionsensor_config.advanced_settings": "Ustawienia zaawansowane", + "detectionsensor_config.min_broadcast_secs": "Minimalny interwał rozgłaszania (sekundy)", + "detectionsensor_config.min_broadcast_secs_description": "Minimalny czas między rozgłoszeniami wyzwalacza (0 = bez ograniczenia)", + "detectionsensor_config.state_broadcast_secs": "Interwał rozgłaszania stanu (sekundy)", + "detectionsensor_config.state_broadcast_secs_description": "Okresowy interwał sygnału obecności z bieżącym stanem (0 = wyłączone)", + "detectionsensor_config.save_button": "Zapisz konfigurację czujnika wykrywania", + "paxcounter_config.title": "Paxcounter", + "paxcounter_config.view_docs": "Zobacz dokumentację Paxcounter", + "paxcounter_config.enabled": "Włącz Paxcounter", + "paxcounter_config.enabled_description": "Zliczaj pobliskie urządzenia WiFi i BLE w celu wykrywania obecności", + "paxcounter_config.update_interval": "Interwał aktualizacji (sekundy)", + "paxcounter_config.update_interval_description": "Częstotliwość rozgłaszania liczby wykrytych urządzeń do sieci mesh", + "paxcounter_config.wifi_threshold": "Próg RSSI WiFi (dBm)", + "paxcounter_config.wifi_threshold_description": "Minimalna siła sygnału WiFi uwzględniana przy zliczaniu (domyślnie: -80)", + "paxcounter_config.ble_threshold": "Próg RSSI BLE (dBm)", + "paxcounter_config.ble_threshold_description": "Minimalna siła sygnału BLE uwzględniana przy zliczaniu (domyślnie: -80)", + "paxcounter_config.save_button": "Zapisz konfigurację Paxcounter", + "serial_config.title": "Moduł portu szeregowego", + "serial_config.view_docs": "Zobacz dokumentację modułu portu szeregowego", + "serial_config.enabled": "Włącz moduł portu szeregowego", + "serial_config.enabled_description": "Włącz komunikację przez port szeregowy z urządzeniami zewnętrznymi", + "serial_config.mode": "Tryb portu szeregowego", + "serial_config.mode_description": "Tryb pracy komunikacji szeregowej", + "serial_config.baud": "Prędkość transmisji", + "serial_config.baud_description": "Prędkość komunikacji szeregowej", + "serial_config.echo": "Echo wejścia", + "serial_config.echo_description": "Odsyłaj odebrane znaki do nadawcy", + "serial_config.advanced_settings": "Ustawienia zaawansowane", + "serial_config.rxd": "Pin GPIO RXD", + "serial_config.rxd_description": "Pin GPIO odbioru szeregowego (RX)", + "serial_config.txd": "Pin GPIO TXD", + "serial_config.txd_description": "Pin GPIO nadawania szeregowego (TX)", + "serial_config.timeout": "Limit czasu (ms)", + "serial_config.timeout_description": "Limit czasu komunikacji szeregowej w milisekundach", + "serial_config.override_console": "Nadpisz port konsoli", + "serial_config.override_console_description": "Użyj domyślnego portu szeregowego platformy zamiast skonfigurowanych pinów", + "serial_config.save_button": "Zapisz konfigurację portu szeregowego", + "ambientlighting_config.title": "Oświetlenie otoczenia", + "ambientlighting_config.view_docs": "Zobacz dokumentację oświetlenia otoczenia", + "ambientlighting_config.led_state": "Włącz diodę LED", + "ambientlighting_config.led_state_description": "Włącz diodę LED RGB oświetlenia otoczenia", + "ambientlighting_config.current": "Prąd diody LED", + "ambientlighting_config.current_description": "Poziom prądu wyjściowego diody LED (0–255, domyślnie: 10)", + "ambientlighting_config.color_section": "Ustawienia koloru", + "ambientlighting_config.preview": "Podgląd koloru", + "ambientlighting_config.red": "Czerwony", + "ambientlighting_config.green": "Zielony", + "ambientlighting_config.blue": "Niebieski", + "ambientlighting_config.save_button": "Zapisz konfigurację oświetlenia otoczenia", + "security_config.title": "Zabezpieczenia", + "security_config.view_docs": "Zobacz dokumentację zabezpieczeń", + "security_config.public_key": "Lokalny klucz publiczny", + "security_config.public_key_description": "Klucz publiczny tego urządzenia używany do szyfrowania PKI (infrastruktura klucza publicznego). Udostępnij ten klucz innym osobom, aby umożliwić bezpieczną wymianę wiadomości prywatnych.", + "security_config.private_key": "Lokalny klucz prywatny", + "security_config.private_key_description": "Klucz prywatny tego urządzenia. Jest wymagany do szyfrowania i odszyfrowywania PKI.", + "security_config.private_key_warning": "Nigdy nie udostępniaj klucza prywatnego! Przechowuj go bezpiecznie i wykonaj kopię zapasową.", + "security_config.admin_keys": "Klucze publiczne zdalnych administratorów", + "security_config.admin_keys_description": "Klucze publiczne urządzeń uprawnionych do zdalnego administrowania tym węzłem. Można skonfigurować maksymalnie 3 klucze. Użyj formatu Base64.", + "security_config.admin_key_placeholder": "klucz publiczny w Base64...", + "security_config.add_admin_key": "Dodaj klucz administratora", + "security_config.admin_keys_note": "Skonfigurowane klucze administratora: {{count}} z {{max}}", + "security_config.is_managed": "Urządzenie zarządzane", + "security_config.is_managed_description": "Oznacz urządzenie jako zarządzane przez administratora sieci mesh. Urządzenia zarządzane można konfigurować zdalnie za pomocą wiadomości administracyjnych.", + "security_config.serial_enabled": "Konsola szeregowa włączona", + "security_config.serial_enabled_description": "Zezwalaj na dostęp do konsoli szeregowej przez Stream API. Wyłącz, aby zwiększyć bezpieczeństwo wdrożonych urządzeń.", + "security_config.debug_log_api_enabled": "Interfejs API dziennika debugowania włączony", + "security_config.debug_log_api_enabled_description": "Przesyłaj dziennik debugowania na żywo przez port szeregowy lub Bluetooth. Domyślnie rejestrowanie jest wyłączane po połączeniu klienta API.", + "security_config.admin_channel_enabled": "Starszy kanał administracyjny", + "security_config.admin_channel_enabled_description": "Zezwalaj na sterowanie urządzeniem przez niezabezpieczony starszy kanał administracyjny. Wyłącz, aby zwiększyć bezpieczeństwo.", + "security_config.save_button": "Zapisz konfigurację zabezpieczeń", + "security_config.copy_private_key_confirm": "Czy na pewno chcesz skopiować klucz prywatny do schowka? Nigdy nikomu go nie udostępniaj!", + "security_config.invalid_base64": "Nieprawidłowy format. Wpisz prawidłowy klucz zakodowany w Base64.", + "security_config.fix_invalid_keys": "Popraw nieprawidłowe klucze administratora przed zapisaniem", + "gpio_summary.title": "Wykorzystanie pinów GPIO", + "gpio_summary.description": "Piny obecnie skonfigurowane we wszystkich sekcjach", + "gpio_summary.no_pins": "Obecnie nie skonfigurowano żadnych pinów GPIO", + "gpio_summary.conflict_warning": "Wykryto konflikt pinów! Niektóre piny są używane przez kilka funkcji.", + "gpio_summary.pin": "Pin", + "gpio_summary.usage": "Zastosowanie", + "gpio_summary.button_gpio": "GPIO przycisku", + "gpio_summary.buzzer_gpio": "GPIO brzęczyka", + "gpio_summary.gps_rx": "RX GPS", + "gpio_summary.gps_tx": "TX GPS", + "gpio_summary.gps_enable": "Włączanie GPS", + "gpio_summary.led_output": "Wyjście LED", + "gpio_summary.vibra_output": "Wyjście wibracji", + "gpio_summary.buzzer_output": "Wyjście brzęczyka", + "gpio_summary.encoder_pin_a": "Pin A enkodera", + "gpio_summary.encoder_pin_b": "Pin B enkodera", + "gpio_summary.encoder_press": "Przycisk enkodera", + "gpio_summary.ptt_pin": "Pin PTT", + "gpio_summary.i2s_ws": "I2S WS", + "gpio_summary.i2s_sd": "I2S SD", + "gpio_summary.i2s_din": "I2S DIN", + "gpio_summary.i2s_sck": "I2S SCK", + "gpio_summary.monitor_pin": "Monitorowany pin", + "gpio_summary.serial_rx": "RX portu szeregowego", + "gpio_summary.serial_tx": "TX portu szeregowego", + "nodes_private": "Pozycje prywatne", + "nodes_private_description": "Zezwala na wyświetlanie prywatnych nadpisań pozycji na mapie, w historii i telemetrii.", + "channel_database.title": "Baza kanałów", + "channel_database.description": "Przechowuj dodatkowe konfiguracje kanałów na potrzeby odszyfrowywania po stronie serwera. Kanały te pozwalają MeshMonitor odszyfrowywać zaszyfrowane pakiety bez konfigurowania ich w urządzeniu. Dostęp jest tylko do odczytu — nie można nadawać na tych kanałach.", + "channel_database.view_docs": "Zobacz dokumentację szyfrowania Meshtastic", + "channel_database.admin_required": "Do zarządzania bazą kanałów wymagane są uprawnienia administratora.", + "channel_database.no_channels": "Nie skonfigurowano kanałów. Dodaj kanał, aby włączyć odszyfrowywanie po stronie serwera.", + "channel_database.add_channel": "Dodaj kanał", + "channel_database.edit_channel": "Edytuj kanał", + "channel_database.channel_name": "Nazwa kanału", + "channel_database.channel_name_description": "Opisowa nazwa tego kanału", + "channel_database.channel_name_placeholder": "np. Regionalne akcje ratunkowe", + "channel_database.psk": "Klucz współdzielony (PSK)", + "channel_database.psk_description": "Klucz szyfrowania zakodowany w Base64 (16 bajtów dla AES-128 albo 32 bajty dla AES-256)", + "channel_database.psk_placeholder": "PSK zakodowany w Base64", + "channel_database.generate": "Generuj", + "channel_database.generate_key_title": "Wygeneruj losowy klucz AES-256", + "channel_database.channel_description": "Opis", + "channel_database.channel_description_hint": "Opcjonalne uwagi dotyczące tego kanału", + "channel_database.channel_description_placeholder": "np. Używany do koordynowania działań ratunkowych w naszym regionie", + "channel_database.is_enabled": "Włącz odszyfrowywanie", + "channel_database.is_enabled_description": "Po włączeniu MeshMonitor będzie próbował odszyfrowywać pakiety przy użyciu tego klucza", + "channel_database.enabled": "Włączone", + "channel_database.disabled": "Wyłączone", + "channel_database.enable": "Włącz", + "channel_database.disable": "Wyłącz", + "channel_database.decrypt": "Odszyfruj", + "channel_database.run_retroactive": "Uruchom odszyfrowywanie historycznych pakietów", + "channel_database.decrypted_count": "Odszyfrowane pakiety", + "channel_database.last_decrypted": "Ostatnio odszyfrowano", + "channel_database.retroactive_decryption": "Odszyfrowywanie wsteczne", + "channel_database.progress": "Postęp", + "channel_database.decrypted": "odszyfrowano", + "channel_database.confirm_delete": "Usunąć kanał?", + "channel_database.confirm_delete_message": "Ta konfiguracja kanału zostanie trwale usunięta. Pakiety odszyfrowane przy użyciu tego klucza pozostaną odszyfrowane.", + "channel_database.import_channels": "Importuj kanały", + "channel_database.select_file": "Wybierz plik", + "channel_database.select_file_description": "Wybierz plik JSON zawierający konfigurację jednego lub kilku kanałów", + "channel_database.preview": "Odsłuchaj", + "channel_database.toast_fetch_failed": "Nie udało się wczytać bazy kanałów", + "channel_database.toast_name_required": "Nazwa kanału jest wymagana", + "channel_database.toast_psk_required": "Klucz PSK jest wymagany", + "channel_database.toast_psk_invalid_length": "PSK musi mieć 1 bajt (skrót), 16 bajtów (AES-128) albo 32 bajty (AES-256)", + "channel_database.toast_psk_invalid_base64": "PSK musi być prawidłowym ciągiem Base64", + "channel_database.toast_psk_no_crypto": "Kanałów bez szyfrowania (PSK=0) nie można dodawać do bazy kanałów", + "channel_database.toast_channel_created": "Kanał został pomyślnie utworzony", + "channel_database.toast_channel_updated": "Kanał został pomyślnie zaktualizowany", + "channel_database.toast_channel_deleted": "Kanał został pomyślnie usunięty", + "channel_database.toast_channel_enabled": "Kanał został włączony", + "channel_database.toast_channel_disabled": "Kanał został wyłączony", + "channel_database.toast_save_failed": "Nie udało się zapisać kanału", + "channel_database.toast_update_failed": "Nie udało się zaktualizować kanału", + "channel_database.toast_delete_failed": "Nie udało się usunąć kanału", + "channel_database.toast_key_generated": "Wygenerowano losowy klucz", + "channel_database.toast_select_file": "Wybierz plik do zaimportowania", + "channel_database.toast_import_success": "Pomyślnie zaimportowano kanały: {{count}}", + "channel_database.toast_import_failed": "Nie udało się zaimportować kanałów", + "channel_database.export_title": "Pobierz wszystkie kanały jako plik JSON", + "channel_database.toast_export_success": "Wyeksportowano kanały do pliku JSON: {{count}}", + "channel_database.toast_export_failed": "Nie udało się wyeksportować kanałów", + "channel_database.toast_export_empty": "Brak kanałów do wyeksportowania", + "channel_database.import_from_url": "Importuj z adresu URL", + "channel_database.import_from_url_title": "Wklej adres URL kanału Meshtastic i dodaj jego kanały do bazy danych", + "channel_database.import_from_url_description": "Wklej adres URL kanału Meshtastic (https://meshtastic.org/e/#...). MeshMonitor zdekoduje kanały i umożliwi wybór tych, które mają zostać dodane jako kanały wirtualne wraz z kluczami i nazwami.", + "channel_database.imported_from_url_description": "Zaimportowano z adresu URL Meshtastic", + "channel_database.imported_channel_default_name": "Zaimportowany kanał {{index}}", + "channel_database.url_label": "Adres URL kanału Meshtastic", + "channel_database.decode_url": "Dekoduj adres URL", + "channel_database.url_decoded_channels": "Zdekodowano kanały: {{count}} — wybierz, które zaimportować:", + "channel_database.url_include_channel": "Uwzględnij {{name}}", + "channel_database.url_psk_summary": "PSK: klucz {{bytes}}-bajtowy", + "channel_database.url_psk_no_crypto": "Brak szyfrowania — nie można zapisać", + "channel_database.url_add_selected": "Dodaj kanały: {{count}}", + "channel_database.role_primary": "Główny", + "channel_database.role_secondary": "Dodatkowy", + "channel_database.role_disabled": "Wyłączone", + "channel_database.role_unknown": "Nieznana rola", + "channel_database.toast_url_required": "Wklej adres URL Meshtastic do zdekodowania", + "channel_database.toast_url_no_channels": "Adres URL został zdekodowany, ale nie zawierał kanałów", + "channel_database.toast_url_decode_failed": "Nie udało się zdekodować adresu URL Meshtastic", + "channel_database.toast_url_no_selection": "Wybierz co najmniej jeden kanał do zaimportowania", + "channel_database.toast_url_import_success": "Zaimportowano kanały z adresu URL: {{count}}", + "channel_database.toast_url_import_partial": "Zaimportowano: {{imported}}, nie udało się zaimportować: {{failed}}", + "channel_database.toast_url_import_all_skipped": "Brak elementów do zaimportowania — wszystkie wybrane wiersze dotyczą kanałów bez szyfrowania", + "channel_database.toast_decryption_started": "Rozpoczęto odszyfrowywanie wsteczne", + "channel_database.toast_decryption_failed": "Nie udało się rozpocząć odszyfrowywania wstecznego", + "channel_database.toast_decryption_completed": "Odszyfrowywanie zakończone: odszyfrowano {{decrypted}} z {{total}} pakietów", + "channel_database.enforce_name_validation": "Wymagaj zgodności nazwy kanału", + "channel_database.enforce_name_validation_description": "Próbuj odszyfrowywać tylko wtedy, gdy skrót kanału w pakiecie jest zgodny. Pozwala to używać wielu kanałów wirtualnych z tym samym kluczem, lecz różnymi nazwami.", + "channel_database.sort_order_note": "Podczas odszyfrowywania kanały są sprawdzane w podanej kolejności. Zostanie użyty tylko pierwszy pasujący kanał. Przeciągnij, aby zmienić kolejność.", + "channel_database.drag_to_reorder": "Przeciągnij, aby zmienić kolejność", + "channel_database.reorder_success": "Kolejność kanałów została zaktualizowana", + "channel_database.reorder_error": "Nie udało się zaktualizować kolejności kanałów", + "common.never": "Nigdy", + "common.importing": "Importowanie...", + "common.deleting": "Usuwanie...", + "news.title": "Aktualności", + "news.view_news": "Zobacz aktualności", + "news.do_not_show_again": "Nie pokazuj ponownie", + "news.next": "Dalej", + "news.previous": "Wstecz", + "news.close": "Zamknij", + "news.no_news": "Obecnie brak aktualności.", + "news.important": "Ważne", + "news.category.release": "Wydanie", + "news.category.security": "Zabezpieczenia", + "news.category.feature": "Funkcja", + "news.category.maintenance": "Konserwacja", + "automation.ignored_nodes.title": "Ignorowane węzły", + "automation.ignored_nodes.description": "Węzły z tej listy pozostają trwale ignorowane. MeshMonitor automatycznie ponownie ustawia flagę ignorowania, gdy węzeł z listy pojawi się bez niej, na przykład po usunięciu nieaktywnych węzłów albo gdy baza węzłów urządzenia zapełni się i samoczynnie usunie flagę ignorowania.", + "automation.ignored_nodes.total_ignored": "Ignorowane węzły", + "automation.ignored_nodes.empty": "Żaden węzeł nie jest obecnie ignorowany.", + "automation.ignored_nodes.col_node_id": "Identyfikator węzła", + "automation.ignored_nodes.col_long_name": "Długa nazwa", + "automation.ignored_nodes.col_short_name": "Krótka nazwa", + "automation.ignored_nodes.col_ignored_at": "Ignorowany od", + "automation.ignored_nodes.col_actions": "Działania", + "automation.ignored_nodes.unignore": "Przestań ignorować", + "automation.ignored_nodes.removed": "Węzeł {{name}} nie jest już ignorowany.", + "automation.ignored_nodes.remove_failed": "Nie udało się wyłączyć ignorowania węzła. Spróbuj ponownie.", + "automation.distance_delete.title": "Automatyczne usuwanie według odległości", + "automation.distance_delete.description": "Automatycznie usuwaj węzły znajdujące się dalej niż określona odległość od współrzędnych bazowych. Przydatne do usuwania odległych węzłów wprowadzonych do sieci przez przekaźniki w samolotach.", + "automation.distance_delete.enabled": "Włącz automatyczne usuwanie według odległości", + "automation.distance_delete.home_coordinate": "Współrzędne bazowe", + "automation.distance_delete.latitude": "Szerokość geograficzna", + "automation.distance_delete.longitude": "Długość geograficzna", + "automation.distance_delete.use_node_position": "Użyj bieżącej pozycji węzła", + "automation.distance_delete.threshold": "Próg odległości", + "automation.distance_delete.interval": "Interwał sprawdzania", + "automation.distance_delete.interval_hours": "{{count}} godzin", + "automation.distance_delete.run_now": "Uruchom teraz", + "automation.distance_delete.running": "Uruchamianie...", + "automation.distance_delete.run_result": "Usunięte węzły: {{count}}", + "automation.distance_delete.activity_log": "Dziennik aktywności", + "automation.distance_delete.no_log_entries": "Nie uruchamiano jeszcze tej funkcji", + "automation.distance_delete.nodes_deleted": "Usunięte węzły", + "automation.distance_delete.threshold_used": "Próg", + "automation.distance_delete.timestamp": "Czas", + "automation.distance_delete.no_home_coordinate": "Ustaw współrzędne bazowe, aby włączyć usuwanie według odległości", + "automation.distance_delete.protected_note": "Ulubione węzły i węzeł lokalny są zawsze chronione", + "meshcore.title": "Monitor MeshCore", + "meshcore.connection": "Połączenie", + "meshcore.connection_type": "Typ połączenia", + "meshcore.serial_port": "Port szeregowy", + "meshcore.tcp_ip": "TCP/IP", + "meshcore.host": "Host", + "meshcore.port": "Port", + "meshcore.connecting": "Łączenie...", + "meshcore.connected_to": "Połączono z {{name}}", + "meshcore.type": "Typ", + "meshcore.radio": "Radio", + "meshcore.public_key": "Klucz publiczny", + "meshcore.send_advert": "Wyślij ogłoszenie", + "meshcore.disconnect": "Rozłącz", + "meshcore.nodes": "Węzły", + "meshcore.nodes_count": "Węzły ({{count}})", + "meshcore.unknown": "Nieznany", + "meshcore.key": "Klucz", + "meshcore.rssi": "RSSI", + "meshcore.snr": "SNR", + "meshcore.battery": "Akumulator", + "meshcore.last_heard": "Ostatnio", + "meshcore.no_nodes": "Nie wykryto jeszcze żadnych węzłów", + "meshcore.contacts": "Kontakty", + "meshcore.contacts_count": "Kontakty ({{count}})", + "meshcore.refresh": "Odśwież", + "meshcore.select": "Wybierz", + "meshcore.no_contacts": "Brak kontaktów. Wyślij ogłoszenie, aby wykryć węzły.", + "meshcore.messages": "Wiadomości", + "meshcore.no_messages": "Brak wiadomości", + "meshcore.broadcast": "Rozgłoszenie", + "meshcore.type_message": "Wpisz wiadomość...", + "meshcore.send": "Wyślij", + "meshcore.remote_admin": "Remote Admin", + "meshcore.target_public_key": "Klucz publiczny odbiorcy", + "meshcore.target_key_placeholder": "Klucz publiczny węzła docelowego", + "meshcore.admin_password": "Hasło administratora", + "meshcore.admin_password_placeholder": "Hasło administratora", + "meshcore.login_status": "Zaloguj i pobierz stan", + "meshcore.remote_node_status": "Stan zdalnego węzła", + "meshcore.uptime": "Czas działania", + "meshcore.tx_power": "Moc TX", + "meshcore.frequency": "Częstotliwość", + "meshcore.device_type.unknown": "Nieznany", + "meshcore.device_type.companion": "Urządzenie towarzyszące", + "meshcore.device_type.repeater": "Przekaźnik", + "meshcore.device_type.room_server": "Serwer pokoju", + "meshcore.disconnected": "Rozłączono", + "meshcore.sending": "Wysyłanie…", + "meshcore.you": "Ty", + "meshcore.select_contact": "Wybierz kontakt, aby rozpocząć prywatną rozmowę", + "meshcore.nav.channels": "Kanały", + "meshcore.nav.collapse": "Zwiń", + "meshcore.nav.configuration": "Konfiguracja", + "meshcore.nav.dms": "Wiadomości prywatne", + "meshcore.nav.expand": "Rozwiń", + "meshcore.nav.nodes": "Węzły", + "meshcore.nav.notifications": "Powiadomienia", + "meshcore.node_row.details": "Więcej szczegółów", + "meshcore.nav.rooms": "Pokoje", + "meshcore.nav.packets": "Monitor pakietów", + "meshcore.nav.settings": "Ustawienia", + "meshcore.nav.telemetry": "Telemetria", + "meshcore.packets.title": "Monitor pakietów", + "meshcore.packets.disabled": "Przechwytywanie pakietów MeshCore jest wyłączone. Nowe pakiety nie będą rejestrowane, dopóki go nie włączysz.", + "meshcore.packets.enable": "Włącz przechwytywanie", + "meshcore.packets.captureEnabled": "Przechwytywanie włączone", + "meshcore.packets.payloadType": "Ładunek", + "meshcore.packets.routeType": "Trasa", + "meshcore.packets.maxCount": "Maksymalna liczba", + "meshcore.packets.maxAgeHours": "Maksymalny wiek (godz.)", + "meshcore.packets.time": "Czas", + "meshcore.packets.hops": "Przeskoki", + "meshcore.packets.snr": "SNR", + "meshcore.packets.rssi": "RSSI", + "meshcore.packets.size": "Rozmiar", + "meshcore.packets.path": "Trasa", + "meshcore.packets.raw": "Dane surowe", + "meshcore.packets.empty": "Nie przechwycono jeszcze żadnych pakietów. Oczekiwanie na ruch OTA…", + "meshcore.packets.emptyDisabled": "Nie przechwycono pakietów. Włącz przechwytywanie, aby rozpocząć rejestrowanie.", + "meshcore.packets.clearConfirm": "Wyczyścić dziennik przechwyconych pakietów MeshCore dla tego źródła?", + "meshcore.packets.clickToDecode": "Kliknij, aby zdekodować ten pakiet", + "meshcore.packets.detailTitle": "Dekodowanie pakietu", + "meshcore.packets.reception": "Odbiór", + "meshcore.packets.header": "Nagłówek", + "meshcore.packets.version": "Wersja", + "meshcore.packets.transportCodes": "Kody transportowe", + "meshcore.packets.routing": "Routing", + "meshcore.packets.directNoRelay": "Bezpośrednio (bez przekaźników)", + "meshcore.packets.hashWidth": "Długość skrótu", + "meshcore.packets.relayChain": "Łańcuch przekaźników", + "meshcore.packets.payload": "Ładunek", + "meshcore.packets.advType": "Typ ogłoszenia", + "meshcore.packets.nodeName": "Nazwa węzła", + "meshcore.packets.publicKey": "Klucz publiczny", + "meshcore.packets.advTimestamp": "Czas ogłoszenia", + "meshcore.packets.location": "Lokalizacja", + "meshcore.packets.signature": "Podpis", + "meshcore.packets.destHash": "Skrót celu", + "meshcore.packets.srcHash": "Skrót źródła", + "meshcore.packets.encrypted": "Zaszyfrowana treść", + "meshcore.packets.ackCode": "Kod ACK", + "meshcore.packets.payloadHex": "Ładunek (hex)", + "meshcore.packets.noRaw": "Brak surowych bajtów pakietu do zdekodowania.", + "meshcore.packets.decodeNote": "Częściowe dekodowanie", + "meshcore.rooms.login_title": "Logowanie do serwera pokoju", + "meshcore.rooms.password_placeholder": "Hasło (puste dla gościa)", + "meshcore.rooms.login_button": "Zaloguj się", + "meshcore.rooms.login_failed": "Logowanie nie powiodło się", + "meshcore.rooms.logging_in": "Logowanie…", + "meshcore.rooms.logged_in": "Zalogowano", + "meshcore.rooms.not_logged_in": "Nie zalogowano", + "meshcore.rooms.no_rooms": "Nie wykryto jeszcze żadnych serwerów pokojów", + "meshcore.rooms.no_messages": "Brak wpisów w tym pokoju", + "meshcore.rooms.select_room": "Wybierz serwer pokoju, aby wyświetlić wpisy", + "meshcore.rooms.post_failed": "Nie udało się wysłać wpisu", + "meshcore.rooms.remember_password": "Zapamiętaj hasło", + "meshcore.rooms.posts": "wpisy", + "meshcore.rooms.last_post": "ostatni", + "meshcore.rooms.auto_sync": "Automatyczna synchronizacja", + "meshcore.rooms.sync_enabled_tooltip": "Okresowo loguj ponownie, aby pobierać nowe wpisy", + "meshcore.rooms.save_sync": "Zapisz", + "meshcore.config.bandwidth": "Szerokość pasma (kHz)", + "meshcore.config.cr": "Współczynnik kodowania", + "meshcore.config.device_name": "Nazwa urządzenia", + "meshcore.config.device_name_hint": "Przyjazna nazwa rozgłaszana innym węzłom (maksymalnie 32 znaki).", + "meshcore.config.frequency": "Częstotliwość (MHz)", + "meshcore.config.name_label": "Nazwa", + "meshcore.config.not_connected": "Połącz się z urządzeniem, aby zmienić jego konfigurację.", + "meshcore.config.permission_denied": "Nie masz uprawnień do zmiany konfiguracji tego źródła.", + "meshcore.config.radio_hint": "Częstotliwość (137–1020 MHz), szerokość pasma (kHz), współczynnik rozpraszania (5–12), współczynnik kodowania (5–8 → 4/5–4/8).", + "meshcore.config.radio_params": "Parametry radiowe", + "meshcore.config.save_name": "Zapisz nazwę", + "meshcore.config.save_radio": "Zapisz ustawienia radiowe", + "meshcore.config.save_telemetry": "Zapisz ustawienia telemetrii", + "meshcore.config.saved": "Zapisano", + "meshcore.config.saving": "Zapisywanie…", + "meshcore.config.sf": "Współczynnik rozpraszania", + "meshcore.config.telemetry": "Telemetria", + "meshcore.config.telemetry_base": "Telemetria podstawowa", + "meshcore.config.telemetry_loc": "Telemetria lokalizacji", + "meshcore.config.telemetry_env": "Telemetria środowiskowa", + "meshcore.config.telemetry_hint": "Określ, jakie dane telemetryczne udostępnia ten węzeł. Zawsze = rozgłaszaj wraz z ogłoszeniem; Tylko urządzenie = odpowiadaj tylko na bezpośrednie żądania kontaktów; Nigdy = wyłącz.", + "meshcore.config.telemetry_companion_only": "Tryb telemetrii można konfigurować wyłącznie w urządzeniach towarzyszących.", + "meshcore.config.telemetry_mode.always": "Zawsze", + "meshcore.config.telemetry_mode.device": "Tylko urządzenie", + "meshcore.config.telemetry_mode.never": "Nigdy", + "meshcore.settings.actions": "Działania urządzenia", + "meshcore.settings.actions_hint": "Odśwież listę kontaktów z urządzenia albo rozgłoś nowe ogłoszenie.", + "meshcore.discover.title": "Wykrywanie węzłów", + "meshcore.discover.hint": "Poproś węzły znajdujące się w bezpośrednim zasięgu radiowym o ogłoszenie swojej obecności. Węzły odpowiadające zostaną dodane jako kontakty. Węzły dostępne przez wiele przeskoków nie pojawią się — wykrywanie działa tylko bezpośrednio.", + "meshcore.discover.nearby": "Wykryj pobliskie węzły", + "meshcore.discover.repeaters": "Wykryj repeatery", + "meshcore.discover.sensors": "Wykryj czujniki", + "meshcore.discover.button": "Wykryj", + "meshcore.discover.running": "Wykrywanie…", + "meshcore.discover.result": "Zwrócone kontakty: {{returned}} (nowe: {{new}})", + "meshcore.discover.failed": "Wykrywanie nie powiodło się", + "meshcore.discover.respond_label": "Odpowiadaj na żądania wykrywania (pozwól innym węzłom wykryć ten węzeł)", + "meshcore.discover.respond_hint": "Oprogramowanie urządzeń towarzyszących MeshCore nie odpowiada samodzielnie na żądania wykrywania, dlatego inne węzły mogą znaleźć ten węzeł tylko po włączeniu tej opcji. Odpowiedzi są bezpośrednie i objęte ograniczeniem częstotliwości.", + "meshcore.discover.toggle_failed": "Nie udało się zaktualizować ustawienia", + "meshcore.settings.currently_connected": "Urządzenie jest obecnie połączone. Najpierw je rozłącz, aby zmienić ustawienia połączenia.", + "meshcore.settings.local_node": "Węzeł lokalny", + "meshcore.settings.name": "Nazwa", + "meshcore.settings.type": "Typ", + "meshcore.contact_details.title": "Szczegóły kontaktu", + "meshcore.contact_details.expand": "Rozwiń szczegóły kontaktu", + "meshcore.contact_details.collapse": "Zwiń szczegóły kontaktu", + "meshcore.contact_details.name": "Nazwa", + "meshcore.contact_details.type": "Typ kontaktu", + "meshcore.contact_details.hops_away": "Liczba przeskoków", + "meshcore.contact_details.last_advert": "Ostatnie ogłoszenie", + "meshcore.contact_details.position": "Pozycja", + "firmware.title": "Aktualizacje oprogramowania układowego", + "firmware.description": "Zarządzaj aktualizacjami oprogramowania układowego węzła bramy.", + "firmware.current_version": "Bieżące oprogramowanie układowe", + "firmware.hardware_model": "Model sprzętu", + "firmware.channel": "Kanał wydań", + "firmware.channel_stable": "Stabilny", + "firmware.channel_alpha": "Alpha (wersja wstępna)", + "firmware.channel_custom": "Niestandardowy adres URL", + "firmware.custom_url_placeholder": "https://example.com/firmware.bin", + "firmware.last_checked": "Ostatnio sprawdzono", + "firmware.never_checked": "Nigdy", + "firmware.check_now": "Sprawdź teraz", + "firmware.checking": "Sprawdzanie...", + "firmware.no_releases": "Nie znaleziono wydań. Kliknij „Sprawdź teraz”, aby pobrać dostępne wersje oprogramowania układowego.", + "firmware.version": "Wersja", + "firmware.release_date": "Data wydania", + "firmware.release_notes": "Informacje o wydaniu", + "firmware.install": "Zainstaluj", + "firmware.update_available": "Dostępna aktualizacja", + "firmware.not_ota_capable": "Sprzęt bramy nie obsługuje aktualizacji OTA przez WiFi.", + "firmware.wizard_preflight_title": "Kontrola wstępna", + "firmware.wizard_backup_title": "Kopia zapasowa konfiguracji", + "firmware.wizard_download_title": "Pobieranie oprogramowania układowego", + "firmware.wizard_extract_title": "Rozpakowanie i weryfikacja", + "firmware.wizard_flash_title": "Wgrywanie oprogramowania układowego", + "firmware.wizard_verify_title": "Weryfikacja aktualizacji", + "firmware.wizard_confirm": "Potwierdź i kontynuuj", + "firmware.wizard_cancel": "Anuluj aktualizację", + "firmware.matched_file": "Wybrane oprogramowanie układowe", + "firmware.rejected_files": "Odrzucone pliki", + "firmware.backups_title": "Kopie zapasowe konfiguracji", + "firmware.restore_backup": "Przywróć", + "firmware.no_backups": "Nie znaleziono kopii zapasowych konfiguracji.", + "firmware.save_channel": "Zapisz", + "firmware.downgrade_warning": "Ostrzeżenie: instalacja starszej wersji oprogramowania układowego może powodować problemy ze zgodnością.", + "firmware.reboot_warning": "Węzeł zostanie ponownie uruchomiony podczas aktualizacji i przez krótki czas będzie niedostępny.", + "firmware.ota_bootloader_warning": "Aktualizacja OTA przez WiFi wymaga jednorazowego wgrania programu rozruchowego OTA przez USB. Jeżeli jest to pierwsza aktualizacja OTA, upewnij się, że program rozruchowy został zainstalowany.", + "firmware.ota_bootloader_learn_more": "Dowiedz się więcej", + "firmware.retry_flash": "Ponów wgrywanie", + "firmware.retry_flash_unavailable": "Nie można ponowić: pliki oprogramowania układowego nie są już dostępne. Rozpocznij nową aktualizację.", + "firmware.recovery_title": "Urządzenie oznaczone jako częściowo zaprogramowane", + "firmware.recovery_explanation": "Poprzednia próba aktualizacji OTA nie została zakończona, dlatego MeshMonitor oznaczył ten węzeł, aby zapobiec kolejnemu wgrywaniu na potencjalnie uszkodzone urządzenie. Najpierw przywróć je przez wgranie oprogramowania za pomocą USB. Gdy ponownie będzie dostępne, wyczyść poniższą flagę i spróbuj ponownie.", + "firmware.recovery_online": "Węzeł jest dostępny i przyjmuje połączenia — wygląda na przywrócony.", + "firmware.recovery_offline": "Węzeł nie jest jeszcze dostępny ani nie przyjmuje połączeń. Przywróć go przez USB i poczekaj na ponowne połączenie.", + "firmware.recovery_not_online": "Węzeł nie jest jeszcze dostępny ani nie przyjmuje połączeń. Przywróć go przez USB i zaczekaj na ponowne połączenie przed wyczyszczeniem flagi.", + "firmware.recovery_clear_retry": "Urządzenie przywrócone przez USB — wyczyść flagę i ponów", + "firmware.recovery_cleared": "Flaga odzyskiwania została wyczyszczona", + "direct_links.neighbor_connection": "Połączenie z sąsiadem", + "direct_links.bidirectional": "Dwukierunkowe", + "direct_links.distance": "Odległość", + "direct_links.last_seen": "Ostatnio widziany", + "map": { + "maximumAge": "Maksymalny wiek", + "maxAgeAll": "Wszystkie", + "showRouteSegments": "Pokaż odcinki tras", + "showNeighborInfo": "Pokaż informacje o sąsiadach", + "showTraceroute": "Pokaż śledzenie tras", + "showMqtt": "Pokaż MQTT", + "showUdp": "Pokaż UDP", + "showRf": "Pokaż RF", + "showMeshCore": "Pokaż MeshCore", + "nodeType": { + "legendTitle": "Typy węzłów", + "allTypes": "Wszystkie typy węzłów", + "someHidden": "Ukryte typy: {{count}}", + "showAll": "Pokaż wszystkie", + "repeater": "Repeater", + "roomServer": "Serwer pokoju", + "sensor": "Czujnik", + "companion": "Urządzenie towarzyszące", + "standard": "Standardowy" + }, + "showWaypoints": "Pokaż punkty trasy", + "showPositionHistory": "Pokaż historię pozycji", + "positionHistoryPointsOnly": "Tylko punkty (bez linii)", + "showAnimations": "Pokaż animacje", + "showEstimatedPositions": "Pokaż szacowane pozycje", + "showAccuracyRegions": "Pokaż obszary dokładności", + "showPolarGrid": "Pokaż siatkę biegunową", + "polarGridDisabledTooltip": "Wymaga pozycji własnego węzła" + }, + "source.header": "Źródła", + "source.edit_mode_help": "Zmień kolejność źródeł, przeciągając je. Po zakończeniu kliknij Gotowe.", + "source.resize_sidebar": "Przeciągnij, aby zmienić szerokość paska bocznego", + "source.add": "Dodaj źródło", + "source.edit": "Edytuj źródło", + "source.delete": "Usuń źródło", + "source.delete_confirm": "Czy na pewno chcesz usunąć to źródło? Źródło i wszystkie jego dane zostaną usunięte.", + "source.options": "Opcje źródła", + "source.open": "Otwórz →", + "source.node_count": "Węzły: {{count}}", + "source.status_connected": "Połączono", + "source.status_disconnected": "Rozłączono", + "source.status_connecting": "Łączenie", + "source.status_disabled": "Wyłączone", + "source.status_idle": "Bezczynne (ręcznie)", + "source.permission_restricted": "ograniczone", + "source.publishers_all_connected": "Bramy: {{count}}", + "source.publishers_all_connected_one": "Brama: {{count}}", + "source.publishers_partial": "Bramy: {{connected}}/{{total}}", + "source.node_activity": "Aktywne: {{active}}/{{total}}", + "source.node_activity_title": "Węzły odebrane w ciągu ostatnich 2 godzin: {{active}} z {{total}}", + "source.connect_help": "Połącz się z tym źródłem ręcznie. Automatyczne łączenie jest wyłączone, więc źródło nie połączy się ponownie samodzielnie.", + "source.kebab.edit": "Edytuj", + "source.kebab.enable": "Włącz", + "source.kebab.disable": "Wyłącz", + "source.kebab.delete": "Usuń", + "source.kebab.disconnect": "Rozłącz", + "source.kebab.prune_outside_roi": "Usuń węzły spoza obszaru zainteresowania (ROI)", + "source.prune_outside_roi_confirm": "Usunąć z tego mostu wszystkie węzły, których ostatnia znana pozycja znajduje się poza skonfigurowanym obszarem ograniczającym? Węzły bez zapisanej pozycji zostaną zachowane. Nowy ruch nadal będzie filtrowany. Tej operacji nie można cofnąć.", + "source.prune_outside_roi_result": "Usunięto {{count}} węzłów spoza obszaru zainteresowania (ROI).", + "source.prune_pending": "Usuwanie…", + "source.form.name": "Nazwa", + "source.form.name_placeholder": "Węzeł domowy", + "source.form.host": "Host / IP", + "source.form.host_placeholder": "192.168.1.100", + "source.form.tcp_port": "Port TCP", + "source.form.heartbeat": "Sygnał podtrzymujący (sekundy, 0 = wyłączony)", + "source.form.heartbeat_help": "Wysyła okresowy pakiet podtrzymujący do węzła. Dla CLIENT_MUTE lub innych mało aktywnych węzłów odbierających niewiele ruchu sieci mesh spróbuj 30–60 s; w pozostałych przypadkach pozostaw 0.", + "source.form.auto_connect": "Łącz automatycznie podczas uruchamiania", + "source.form.auto_connect_help": "Po wyłączeniu tej opcji MeshMonitor nie połączy się z tym węzłem podczas uruchamiania. Aby rozpocząć monitorowanie, należy kliknąć przycisk Połącz.", + "source.form.virtual_node": "Węzeł wirtualny", + "source.form.enable_virtual_node": "Włącz węzeł wirtualny", + "source.form.virtual_node_port": "Port węzła wirtualnego", + "source.form.allow_admin_commands": "Zezwalaj na polecenia administracyjne", + "source.form.allow_admin_help": "Klienci innych firm połączeni z węzłem wirtualnym mogą wysyłać polecenia administracyjne do węzła Meshtastic. Pozostaw wyłączone, jeżeli nie ufasz klientom.", + "source.form.error_name_required": "Nazwa jest wymagana", + "source.form.error_host_required": "Host jest wymagany", + "source.form.error_port_range": "Port musi mieścić się w zakresie 1–65535", + "source.form.error_heartbeat_range": "Sygnał podtrzymujący musi mieć wartość 0 (wyłączony) albo od 1 do 3600 sekund", + "source.form.error_vn_port_range": "Port węzła wirtualnego musi mieścić się w zakresie 1–65535", + "source.form.error_save_failed": "Zapisywanie nie powiodło się", + "source.form.error_network": "Błąd sieci", + "source.virtual_node_badge_title": "Węzeł wirtualny", + "source.sidebar.open_sources": "Otwórz źródła", + "source.sidebar.close_sources": "Zamknij źródła", + "source.sidebar.users": "Użytkownicy", + "source.sidebar.settings": "Ustawienia", + "source.sidebar.news": "Aktualności", + "source.sidebar.github": "GitHub", + "source.sidebar.website": "Strona internetowa", + "source.sidebar.unified_messages": "💬 Wspólne wiadomości", + "source.sidebar.unified_telemetry": "📡 Wspólna telemetria", + "source.sidebar.unified_packets": "📦 Wspólne pakiety", + "source.sidebar.map_analysis": "🗺️ Analiza mapy", + "source.topbar.sign_in": "🔒 Zaloguj się", + "source.topbar.logo_alt": "Logo MeshMonitor", + "unified.back_to_sources": "← Źródła", + "unified.packets.title": "Wspólny monitor pakietów", + "unified.packets.subtitle": "Strumień pakietów na żywo ze wszystkich źródeł", + "unified.packets.count": "Pakiety: {{shown}}", + "unified.packets.toggle_charts": "Przełącz wykresy", + "unified.packets.by_source": "Według źródła", + "unified.packets.by_device": "Według urządzenia", + "unified.packets.by_type": "Według typu", + "unified.packets.range_all": "Wszystkie", + "unified.packets.filter_source": "Filtruj według źródła", + "unified.packets.column_source": "Źródło", + "unified.close": "Zamknij", + "unified.no_text": "(brak tekstu)", + "unified.messages.title": "Wspólne wiadomości", + "unified.messages.subtitle_channel": "#{{channel}} · ze wszystkich dostępnych źródeł", + "unified.messages.subtitle_none": "Wybierz kanał", + "unified.messages.channel_aria": "Kanał", + "unified.messages.no_channels": "Brak kanałów", + "unified.messages.channel_option": "#{{name}} ({{count}})", + "unified.messages.source_filter_aria": "Filtr źródeł", + "unified.messages.all_sources": "Wszystkie źródła", + "unified.messages.meshcore_badge": "MeshCore", + "unified.messages.refresh": "Odśwież", + "unified.messages.sign_in_required": "Zaloguj się, aby wyświetlić wiadomości.", + "unified.messages.failed_channels": "Nie udało się wczytać kanałów.", + "unified.messages.failed_messages": "Nie udało się wczytać wiadomości.", + "unified.messages.loading": "Ładowanie wiadomości…", + "unified.messages.empty_channel": "Na tym kanale nie ma jeszcze wiadomości.", + "unified.messages.choose_channel": "Wybierz kanał, aby rozpocząć.", + "unified.messages.loading_older": "Ładowanie starszych wiadomości…", + "unified.messages.history_start": "Początek historii.", + "unified.messages.heard_by_source": "Odebrano przez {{name}}", + "unified.messages.heard_by_count": "odebrane przez: {{count}}", + "unified.messages.date_today": "Dzisiaj", + "unified.messages.date_yesterday": "Wczoraj", + "unified.messages.hop_direct": "bezpośrednio", + "unified.messages.hop_count_one": "{{count}} przeskok", + "unified.messages.hop_count_other": "{{count}} przeskoków", + "unified.messages.hop_start_only": "początek {{value}}", + "unified.messages.hop_limit_only": "limit {{value}}", + "unified.messages.modal.title": "Szczegóły odbioru", + "unified.messages.modal.request_id": "Identyfikator żądania", + "unified.messages.modal.channel": "Kanał", + "unified.messages.modal.col_source": "Źródło", + "unified.messages.modal.col_hops": "Przeskoki", + "unified.messages.modal.col_snr": "SNR", + "unified.messages.modal.col_rssi": "RSSI", + "unified.messages.modal.col_heard": "Odebrano", + "unified.telemetry.title": "Wspólna telemetria", + "unified.telemetry.subtitle": "Najnowsze odczyty · wszystkie źródła", + "unified.telemetry.search_placeholder": "Wyszukaj węzły…", + "unified.telemetry.search_aria": "Wyszukaj węzły", + "unified.telemetry.filter_source_aria": "Filtruj według źródła", + "unified.telemetry.filter_type_aria": "Filtruj według typu", + "unified.telemetry.sort_aria": "Sortuj węzły", + "unified.telemetry.all_sources": "Wszystkie źródła", + "unified.telemetry.all_types": "Wszystkie typy", + "unified.telemetry.sort_newest": "Najpierw najnowsze", + "unified.telemetry.sort_oldest": "Najpierw najstarsze", + "unified.telemetry.sort_name_asc": "Nazwa (A→Z)", + "unified.telemetry.sort_name_desc": "Nazwa (Z→A)", + "unified.telemetry.loading": "Ładowanie telemetrii…", + "unified.telemetry.failed": "Nie udało się wczytać telemetrii", + "unified.telemetry.network_error": "Błąd sieci", + "unified.telemetry.empty_range": "Nie znaleziono telemetrii w wybranym zakresie czasu.", + "unified.telemetry.empty_filters": "Żaden węzeł nie odpowiada bieżącym filtrom.", + "unified.telemetry.node_count_one": "{{count}} węzeł", + "unified.telemetry.node_count_other": "{{count}} węzłów", + "unified.telemetry.age_seconds": "{{count}} s temu", + "unified.telemetry.age_minutes": "{{count}} min temu", + "unified.telemetry.age_hours": "{{count}} godz. temu", + "unified.telemetry.age_days": "{{count}} dni temu", + "unified.telemetry.jump_to_source": "Przejdź do {{name}}", + "admin.back_to_dashboard": "← Powrót do panelu głównego", + "automation.airtime_cutoff.title": "Próg wykorzystania czasu antenowego wyłączający automatyzacje", + "automation.airtime_cutoff.description": "Wstrzymuje wszystkie automatyzacje (automatyczne śledzenie tras, ogłoszenia, czasomierze itp.), gdy wykorzystanie kanału przez połączony węzeł przekroczy ten próg. Zapobiega to generowaniu dodatkowego ruchu przez boty, gdy sieć mesh jest zajęta rzeczywistą aktywnością. Automatyzacje zostaną wznowione po spadku wykorzystania poniżej progu. Ustaw 0, aby wyłączyć.", + "automation.airtime_cutoff.threshold_label": "Próg wykorzystania kanału wyłączający automatyzacje (%)", + "automation.airtime_cutoff.threshold_hint": "Procent wykorzystania kanału, powyżej którego automatyzacje są wstrzymywane. 0 wyłącza funkcję; wartość domyślna: 30.", + "automation.airtime_cutoff.status_disabled": "Próg czasu antenowego jest wyłączony (wartość 0).", + "automation.airtime_cutoff.status_unknown": "Oczekiwanie, aż połączony węzeł zgłosi wykorzystanie kanału…", + "automation.airtime_cutoff.status_unknown_neighbors": "Oczekiwanie, aż bezpośrednio dostępne węzły infrastruktury (routery) zgłoszą wykorzystanie kanału…", + "automation.airtime_cutoff.status_paused": "⏸ Automatyzacje wstrzymane — wykorzystanie kanału źródła {{source}} wynosi {{util}}% i przekracza {{threshold}}%.", + "automation.airtime_cutoff.status_active": "✓ Automatyzacje aktywne — wykorzystanie kanału źródła {{source}} wynosi {{util}}% i jest niższe niż {{threshold}}%.", + "automation.airtime_cutoff.status_neighbors_suffix": "(średnia z {{count}} węzłów infrastruktury)", + "automation.airtime_cutoff.contributors_label": "Węzły infrastruktury uwzględnione w obliczeniach", + "automation.airtime_cutoff.contributor_detail": "{{util}}% · {{rssi}} dBm", + "automation.airtime_cutoff.contributor_unknown": "Nieznany węzeł", + "automation.airtime_cutoff.source_local_label": "lokalny", + "automation.airtime_cutoff.source_neighbors_label": "średnia z sąsiadów", + "automation.airtime_cutoff.source_label": "Mierz wykorzystanie kanału na podstawie", + "automation.airtime_cutoff.source_hint": "Węzeł lokalny wykorzystuje własny pomiar wykorzystania kanału połączonego urządzenia. Pobliska infrastruktura używa średniej z trzech bezpośrednio odbieranych routerów lub repeaterów o najsilniejszym RSSI — przydatne, gdy węzeł jest dobrze umieszczony, lecz zaniża obciążenie całej sieci mesh.", + "automation.airtime_cutoff.source_local_option": "Węzeł lokalny (własne wykorzystanie kanału)", + "automation.airtime_cutoff.source_neighbors_option": "Pobliska infrastruktura (średnia z 3 najsilniejszych routerów)", + "automation.airtime_cutoff.saved": "Ustawienia progu czasu antenowego zostały zapisane", + "automation.airtime_cutoff.save_error": "Nie udało się zapisać ustawień", + "automation.auto_heap.title": "Automatyczne zarządzanie pamięcią sterty", + "automation.auto_heap.saved": "Ustawienia automatycznego zarządzania pamięcią sterty zostały zapisane", + "automation.auto_heap.save_error": "Nie udało się zapisać ustawień", + "automation.auto_heap.warning": "Po uruchomieniu MeshMonitor usunie z bazy urządzenia 10 węzłów, które najdłużej nie były odbierane, a następnie ponownie uruchomi węzeł. Może to spowodować krótką przerwę w połączeniu.", + "automation.auto_heap.heap_status": "Bieżąca wolna pamięć sterty: {{kb}} KB", + "automation.auto_heap.threshold_label": "Próg wolnej pamięci sterty (KB)", + "automation.auto_heap.threshold_hint": "Uruchom czyszczenie, gdy węzeł zgłosi mniej wolnej pamięci sterty niż podana wartość.", + "automation.auto_ping.title": "Automatyczny ping", + "automation.auto_ping.description": "Po włączeniu użytkownicy sieci mesh mogą wysłać prywatną wiadomość „ping N”, aby rozpocząć N automatycznych pingów zwrotnych, albo „ping stop”, aby anulować aktywną sesję.", + "automation.auto_ping.settings_saved": "Ustawienia automatycznego pingu zostały zapisane", + "automation.auto_ping.session_stopped": "Sesja pingu została zatrzymana", + "automation.auto_ping.stop_failed": "Nie udało się zatrzymać sesji pingu", + "automation.auto_ping.interval": "Interwał pingu (sekundy)", + "automation.auto_ping.interval_description": "Czas między kolejnymi pingami w sesji", + "automation.auto_ping.max_pings": "Maksymalna liczba pingów na sesję", + "automation.auto_ping.max_pings_description": "Maksymalna liczba pingów, o które użytkownik może poprosić w jednej sesji", + "automation.auto_ping.timeout": "Limit czasu pingu (sekundy)", + "automation.auto_ping.timeout_description": "Czas oczekiwania na odpowiedź, po którym ping zostanie oznaczony jako przekroczony", + "automation.auto_ping.dm_commands": "Polecenia w wiadomości prywatnej", + "automation.auto_ping.dm_start_help": "— Rozpocznij 5 pingów z ustawionym interwałem", + "automation.auto_ping.dm_stop_help": "— Anuluj aktywną sesję pingu", + "automation.auto_ping.active_sessions": "Aktywne sesje", + "automation.auto_ping.requested_by": "Zlecone przez", + "automation.auto_ping.progress": "Postęp", + "automation.auto_ping.successful": "Pomyślne", + "automation.auto_ping.failed": "Niepowodzenie", + "automation.auto_ping.elapsed": "Czas trwania", + "automation.distance_delete.action": "Działanie dla węzłów poza progiem", + "automation.distance_delete.action_delete": "Usuń węzeł", + "automation.distance_delete.action_ignore": "Ignoruj węzeł", + "automation.distance_delete.note_delete": "Usunięty węzeł może pojawić się ponownie, jeżeli nadal rozgłasza pakiety. Wybierz Ignoruj, aby trwale ukrywać go na urządzeniu.", + "automation.distance_delete.note_ignore": "Ignorowane węzły są ukrywane i synchronizowane z połączonym urządzeniem (wymaga oprogramowania układowego w wersji ≥ 2.7.0)." }