Files
DriverVault/Phone App/assets/i18n/pl.json
T
tajniak81andClaude Opus 5 e5759df52c Say how far the next service is, not only how long
The service badge has always watched two triggers - the next-due date and the
next-due odometer reading - and shown one of them. It ranked the two and
printed the worse one's sentence, so a car comfortable on both read "OK ·
354d" and never said that the odometer target was 13.612 km away, even though
the Information card right under it prints the 15.000 km the badge is
counting towards. Whichever trigger arrives first ends the interval, so
naming only one of them describes half the thing.

Both are named now. With both signals known the label is a severity headline
followed by each trigger as a bare quantity - "OK · 354d · 13.612 km", "Due
in 12d · 13.612 km" - which is the shape reminderStatus in the same file
already uses, it having had the two-trigger problem first. The signals gained
the number behind their own wording to make that possible; they were
returning only a formatted sentence.

Wording is unchanged wherever only one signal has data, which is the case
this rewrite most risked disturbing: a car with no odometer target still
reads "OK · 354d" exactly as before, one with no service date still reads
"13.612 km left", and neither still reads "No data". The new keys are only
reached when there are genuinely two numbers to print.

An overdue badge lists only the triggers that have actually passed. "Service
Overdue 30d · 13.612 km" would read as overdue by 13.612 km, which is the
opposite of what that number means, so the trigger that is still comfortable
stays out of a sentence headed "Overdue". It costs the remaining distance on
a date-overdue badge; the alternative costs the reader's trust in the number.

The phone carried a line-for-line copy of this logic and gets the same
treatment rather than being left a version behind - the two would otherwise
disagree about the same car on the same day. Its signals become a private
record type, since Status is public and shared with the expiry, reminder and
warranty badges that have no second trigger and no use for the field.

Two new keys (status.okIn, status.serviceOverdueBy) in all three languages in
both apps. The day and km fragments they interpolate were already translated
for the reminder badge, so the parts assemble in Polish and Danish without
new wording: "OK · 354 dni · 13 612 km", "OK · 354 d · 13.612 km", each with
its own grouping separator.

Verified by flutter analyze (clean), flutter test - 21 pass, including the
key-parity test that would have caught a key added in English alone - and npm
run build for the web. The web function was driven through the real module in
a browser over ten cases: both signals known at each severity, each of the
two overdue alone, both overdue together, either signal missing, neither, and
a zero-odometer car, in all three languages.

Not verified: no new automated test covers this. The web app has no test
runner and the phone's format tests cover the catalogue lookups rather than
the badge, so the ten cases above were checked by hand and are not guarded
against the next edit. The deployed Web App still serves the previous build
and will keep reading "OK · 354d" until it is redeployed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 23:23:19 +02:00

979 lines
39 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"common": {
"save": "Zapisz",
"saving": "Zapisywanie…",
"saved": "Zapisano ✓",
"cancel": "Anuluj",
"remove": "Usuń",
"retry": "Ponów",
"required": "Wymagane",
"confirm": "Potwierdź",
"empty": "—",
"saveChanges": "Zapisz zmiany",
"loading": "Ładowanie…",
"edit": "Edytuj",
"open": "Otwórz",
"delete": "Usuń",
"done": "Gotowe",
"undo": "Cofnij",
"download": "Pobierz",
"yes": "Tak",
"no": "Nie"
},
"nav": {
"garage": "Garaż",
"charging": "Ładowanie",
"settings": "Ustawienia",
"users": "Użytkownicy"
},
"login": {
"tagline": "Twój samochód pod kontrolą.",
"email": "E-mail",
"password": "Hasło",
"showPassword": "Pokaż hasło",
"hidePassword": "Ukryj hasło",
"submit": "Zaloguj się",
"submitting": "Logowanie…",
"or": "lub",
"signInWithFace": "Zaloguj się rozpoznawaniem twarzy",
"signInWithFingerprint": "Zaloguj się odciskiem palca",
"signInWithBiometrics": "Zaloguj się biometrią",
"enrollTitle": "Włączyć logowanie biometryczne?",
"enrollBody": "Następnym razem możesz zalogować się za pomocą {method} zamiast wpisywać hasło.",
"enrollNotNow": "Nie teraz",
"enrollEnable": "Włącz",
"methodFace": "rozpoznawania twarzy",
"methodFingerprint": "odcisku palca",
"methodBiometrics": "biometrii",
"bioReasonSignInAs": "Zaloguj się jako {email}",
"bioReasonSignIn": "Zaloguj się do DriverVault",
"savedInvalid": "Zapisane dane logowania są już nieważne. Zaloguj się hasłem.",
"serverSettings": "Ustawienia serwera",
"apiServerUrl": "Adres serwera API",
"leaveBlank": "Pozostaw puste, aby użyć domyślnego.",
"reset": "Resetuj",
"savedNote": "Zapisano ✓",
"resetNote": "Zresetowano ✓"
},
"lock": {
"title": "DriverVault jest zablokowany",
"reason": "Odblokuj DriverVault",
"unlock": "Odblokuj",
"unlocking": "Odblokowywanie…",
"usePassword": "Użyj hasła"
},
"dashboard": {
"eyebrow": "TWOJE SAMOCHODY",
"title": "Garaż",
"addCar": "Dodaj samochód",
"lightMode": "Tryb jasny",
"darkMode": "Tryb ciemny",
"logOut": "Wyloguj się",
"empty": "Nie masz jeszcze samochodów.",
"shared": "Udostępniony",
"sharedReadOnly": "Udostępniony · tylko do odczytu",
"serviceLife": "ZUŻYCIE OKRESU SERWISOWEGO",
"lastService": "Ostatni serwis",
"currentOdometer": "Aktualny przebieg",
"nextDue": "Następny termin",
"nextDueKm": "Następny przebieg",
"serviceRecords": {
"one": "{n} wpis serwisowy",
"few": "{n} wpisy serwisowe",
"many": "{n} wpisów serwisowych",
"other": "{n} wpisu serwisowego"
}
},
"charging": {
"eyebrow": "ŁADOWANIE I MAPA",
"title": "Ładowarki w pobliżu",
"tabs": {
"public": "Ładowarki publiczne",
"home": "Ładowarki domowe"
},
"liveMap": "Mapa na żywo",
"youAreHere": "Tu jesteś",
"session": {
"chargingNow": "Ładowanie w toku",
"rate": "Moc",
"added": "Dodano",
"cost": "Koszt",
"done": "Koniec",
"stop": "Zatrzymaj ładowanie",
"idle": "Brak ładowania",
"idleHint": "Podłącz na stacji, aby rozpocząć sesję."
},
"stations": {
"heading": "W pobliżu",
"homeHeading": "Twoje ładowarki",
"noControlHint": "Włącz tryb Own lub Proxy CSMS w Ustawienia → Integracje, aby sterować domową ładowarką.",
"count": {
"one": "{n} stacja",
"few": "{n} stacje",
"many": "{n} stacji",
"other": "{n} stacji"
},
"free": "{avail} z {total} wolnych",
"full": "Zajęte",
"offPeak": "poza szczytem",
"homeCharger": "Ładowarka domowa"
},
"control": {
"title": "Sterowanie ładowarką",
"connected": "Połączono",
"disconnected": "Offline",
"serialPlaceholder": "Numer seryjny ładowarki (np. A5191-XXXXXXXX)",
"refresh": "Odśwież",
"status": "Złącze",
"meter": "Energia",
"start": "Rozpocznij ładowanie",
"stop": "Zatrzymaj ładowanie",
"limit": "Limit prądu",
"applyLimit": "Zastosuj limit",
"clearLimit": "Usuń limit",
"reset": "Zrestartuj ładowarkę",
"resetConfirm": "Zrestartować teraz tę ładowarkę? Trwająca sesja ładowania zostanie przerwana. Wpisz ponownie hasło, aby potwierdzić.",
"resetPassword": "Hasło do Twojego konta",
"connectHint": "Wpisz numer seryjny ładowarki i odśwież. Ładowarka musi być połączona z backendem OCPP DriverVault (konfiguracja w Ustawienia → Integracje)."
}
},
"settings": {
"tabs": {
"personal": "Ustawienia osobiste",
"integrations": "Integracje"
},
"title": "Ustawienia",
"account": {
"title": "Konto",
"name": "Imię i nazwisko",
"nameSaved": "Zapisano imię i nazwisko.",
"email": "E-mail",
"verified": "Zweryfikowany",
"notVerified": "Niezweryfikowany",
"sending": "Wysyłanie…",
"resendVerification": "Wyślij ponownie e-mail weryfikacyjny",
"verificationRequested": "Zamówiono e-mail weryfikacyjny.",
"changePassword": "Zmień hasło",
"currentPassword": "Obecne hasło",
"newPassword": "Nowe hasło (min. 8)",
"confirmNewPassword": "Potwierdź nowe hasło",
"tooShort": "Nowe hasło musi mieć co najmniej 8 znaków.",
"mismatch": "Nowe hasło i potwierdzenie nie są takie same.",
"passwordUpdated": "Hasło zaktualizowane.",
"updating": "Aktualizowanie…",
"updatePassword": "Zaktualizuj hasło"
},
"appearance": {
"title": "Wygląd",
"theme": "Motyw",
"themeLight": "Jasny",
"themeDark": "Ciemny",
"themeSystem": "Systemowy",
"language": "Język",
"languageHint": "Tekst aplikacji oraz nazwy miesięcy i dni.",
"languageFallbackHint": "Ten język nie jest jeszcze przetłumaczony — tekst aplikacji pozostanie po angielsku.",
"region": "Region",
"regionHint": "Format liczb i waluty.",
"currency": "Waluta",
"currencyHint": "Przykład: {example}. Kwoty są tylko wyświetlane — nic nie jest przeliczane.",
"dateFormat": "Format daty",
"dateHint": "Przykład: {example}",
"fontSize": "Rozmiar czcionki",
"fontSmall": "Mała",
"fontMedium": "Średnia",
"fontLarge": "Duża"
},
"profile": {
"title": "Profil",
"working": "Przetwarzanie…",
"uploadPhoto": "Prześlij zdjęcie",
"remove": "Usuń",
"bio": "O mnie",
"bioHint": "Krótka notatka widoczna dla innych osób w Twoim gospodarstwie domowym.",
"bioSaved": "Zapisano opis.",
"saveBio": "Zapisz opis"
},
"security": {
"title": "Bezpieczeństwo",
"checkingDevice": "Sprawdzanie urządzenia…",
"biometricSignIn": "Logowanie biometryczne",
"biometricAvailable": "Zaloguj się za pomocą {method} zamiast hasła.",
"biometricUnavailable": "Na tym urządzeniu nie zarejestrowano biometrii.",
"methodFaceOrFingerprint": "twarzy lub odcisku palca",
"methodFace": "rozpoznawania twarzy",
"methodFingerprint": "odcisku palca",
"methodBiometrics": "biometrii",
"turnedOff": "Logowanie biometryczne wyłączone",
"enabled": "Logowanie biometryczne włączone",
"couldNotEnable": "Nie udało się włączyć: {error}",
"confirmPassword": "Potwierdź hasło",
"password": "Hasło"
},
"org": {
"title": "Organizacja",
"titleAll": "Organizacje",
"subtitleOwn": "Organizacja, którą administrujesz",
"subtitleNone": "Utwórz ją, aby zarządzać własnym zespołem",
"subtitleAll": "Podmioty, do których należą użytkownicy",
"nameLabel": "Nazwa organizacji",
"namePlaceholder": "Acme Fleet",
"newOrg": "Nowa organizacja",
"create": "Utwórz organizację",
"createHint": "Zostaniesz jej administratorem i będziesz móc dodawać użytkowników oraz nimi zarządzać.",
"rename": "Zmień nazwę",
"delete": "Usuń",
"deleteTitle": "Usunąć organizację?",
"empty": "Brak organizacji.",
"confirmDelete": "Usunąć organizację „{name}”? Tego nie można cofnąć.",
"confirmDeleteOwn": "Usunąć Twoją organizację „{name}”? Zostaniesz z niej usunięty i staniesz się zwykłym użytkownikiem. Tego nie można cofnąć."
},
"privacy": {
"title": "Prywatność i bezpieczeństwo",
"body": "Uwierzytelnianie dwuskładnikowe nie jest jeszcze dostępne. Sesje opierają się na tokenach wydawanych przez serwer, które wygasają samoczynnie, więc wylogowanie kończy tylko sesję na tym urządzeniu. Aby wylogować wszystkie urządzenia, zmień hasło powyżej.",
"signOut": "Wyloguj się"
},
"danger": {
"title": "Strefa niebezpieczna",
"body": "Usunięcie konta usuwa Twój login i profil. Nie usuwa samochodów ani historii serwisowej współdzielonych w gospodarstwie domowym. Obowiązuje 3-dniowy okres karencji, zanim usunięcie stanie się ostateczne — do tego czasu możesz je anulować.",
"deleteAccount": "Usuń moje konto",
"typeToConfirm": "Wpisz {email}, aby potwierdzić",
"typeEmailPrompt": "Wpisz swój e-mail, aby potwierdzić.",
"requesting": "Wysyłanie żądania…",
"requestDeletion": "Zażądaj usunięcia",
"requestedOn": "Żądanie usunięcia konta złożono {date}. {tail}",
"cooldownPassed": "Okres karencji minął. Możesz teraz dokończyć usuwanie.",
"canStillCancel": "Nadal możesz je anulować — stanie się ostateczne po 3-dniowym okresie karencji.",
"cancelRequest": "Anuluj żądanie usunięcia",
"permanentlyDelete": "Usuń trwale",
"finalizeTitle": "Usunąć konto?",
"finalizeBody": "To trwale usunie Twoje konto. Tej operacji nie można cofnąć.",
"delete": "Usuń"
},
"advanced": {
"title": "Zaawansowane",
"exportTitle": "Eksportuj swoje dane",
"exportBody": "Pobierz swój profil oraz wszystkie samochody, wpisy serwisowe i części w formacie JSON.",
"preparing": "Przygotowywanie…",
"exportAction": "Eksportuj dane",
"importTitle": "Importuj swoje dane",
"importBody": "Dodaj samochody z wcześniej wyeksportowanego pliku JSON. Tworzy to nowe wpisy — nic nie jest scalane ani nadpisywane.",
"importing": "Importowanie…",
"importAction": "Importuj dane",
"notJson": "Ten plik nie jest poprawnym plikiem JSON.",
"notExport": "Ten plik nie wygląda na eksport z DriverVault (brak listy \"cars\").",
"confirmImport": "Zaimportować samochody z tego pliku ({count})? Zostaną dodane nowe wpisy — istniejące samochody nie zostaną scalone ani nadpisane.",
"imported": "Zaimportowano: samochody ({cars}), wpisy serwisowe ({services}), części ({parts}).",
"exported": "Zapisano {file}",
"open": "Otwórz",
"openFailed": "Nie udało się otworzyć pliku."
},
"integrations": {
"title": "Integracje",
"subtitle": "Połącz zewnętrzne usługi ze swoim kontem.",
"toyotaDesc": "Zaloguj się kontem MyToyota, aby pobierać dane pojazdu z Toyota Connected Europe. Tylko Europa.",
"enable": "Włącz dla mojego konta",
"enableOrg": "Włącz dla organizacji",
"unavailable": "Ta integracja została wyłączona przez administratora.",
"orgDisabled": "Ta integracja jest wyłączona dla Twojej organizacji.",
"scopeMy": "Moje ustawienia",
"scopeOrg": "Organizacja",
"scopeHint": "Ustawienia organizacji obowiązują każdego w Twojej organizacji, kto pozostawi pole puste.",
"readOnly": "Wspólnymi ustawieniami tej integracji zarządzasz w panelu API Servera; tutaj są tylko do odczytu.",
"email": "E-mail MyToyota",
"password": "Hasło MyToyota",
"brand": "Marka",
"inherited": "Ustawione na wyższym poziomie",
"inheritedFrom": "Odziedziczone od: {source}",
"sourceGlobal": "administratora",
"sourceOrg": "Twojej organizacji",
"sourceUser": "Ciebie",
"passwordKeep": "Pozostaw puste, aby zachować zapisane hasło.",
"test": "Testuj połączenie",
"testing": "Testowanie…",
"save": "Zapisz",
"saved": "Zapisano ✓",
"connected": "Połączono",
"notConnected": "Nie połączono",
"ankerSolixDesc": "Zaloguj się kontem Anker, aby pobierać dane ładowarki EV z chmury Anker Solix.",
"ankerEmail": "E-mail konta Anker",
"ankerPassword": "Hasło konta Anker",
"country": "Kraj",
"countryHint": "Dwuliterowy kod kraju Twojego konta Anker (np. DE, GB, US).",
"controlMode": "Tryb sterowania",
"controlModeHint": "Sposób, w jaki DriverVault steruje ładowarką przez OCPP.",
"controlOff": "Wyłączone (tylko monitorowanie)",
"controlOwn": "Własny CSMS (pełne sterowanie)",
"controlProxy": "CSMS pośredniczący (przekazywanie + sterowanie)",
"controlTitle": "Sterowanie ładowarką (OCPP)",
"controlOwnHint": "Ładowarka łączy się bezpośrednio z DriverVault jako swoim systemem centralnym. Ustaw backend OCPP ładowarki na poniższy adres.",
"controlProxyHint": "DriverVault przekazuje ruch do chmury Anker i może wysyłać własne polecenia. Ustaw backend OCPP ładowarki na poniższy adres.",
"controlProvisionSteps": "W aplikacji Anker (lub w ustawieniach OCPP ładowarki) ustaw adres backendu OCPP na powyższy endpoint, a klucz autoryzacji na powyższy token.",
"chargerSerial": "Numer seryjny ładowarki",
"controlCheck": "Sprawdź status",
"controlGenerate": "Wygeneruj token",
"controlEndpoint": "Endpoint OCPP",
"controlToken": "Token autoryzacji",
"controlTokenOnce": "Skopiuj ten token teraz — jest pokazywany tylko raz i nie da się go później odzyskać.",
"controlRevoke": "Unieważnij token",
"controlRevokeConfirm": "Unieważnić token sterowania tej ładowarki? Rozłączy się i nie połączy ponownie, dopóki nie wygenerujesz nowego.",
"controlConnected": "Połączono z backendem sterowania",
"controlDisconnected": "Nie połączono",
"toyota": "Toyota Connected (MyToyota)",
"brandToyota": "Toyota",
"brandLexus": "Lexus",
"ankerSolix": "Anker Solix (V1 Smart EV Charger)"
}
},
"status": {
"noData": "Brak danych",
"serviceOverdueDays": "Serwis zaległy {days} dni",
"dueInDays": "Termin za {days} dni",
"okDays": "OK · {days} dni",
"okIn": "OK · {parts}",
"noKm": "Brak przebiegu",
"serviceOverdueKm": "Serwis zaległy {km} km",
"serviceOverdueBy": "Serwis zaległy {parts}",
"inKm": "Za {km} km",
"kmLeft": "Pozostało {km} km",
"expiredAgo": "Wygasło {days} dni temu",
"expiresToday": "Wygasa dzisiaj",
"renewInDays": "Odnowienie za {days} dni",
"validDays": "Ważne · {days} dni",
"noExpiry": "Bezterminowe",
"done": "Gotowe",
"noTrigger": "Brak wyzwalacza",
"overdue": "Zaległe",
"overdueBy": "Zaległe {parts}",
"dueIn": "Termin za {parts}",
"upcoming": "Nadchodzące",
"today": "dzisiaj",
"days": "{days} dni",
"km": "{km} km",
"warrantyExpiredAgo": "Gwarancja wygasła {days} dni temu",
"warrantyEndsIn": "Gwarancja kończy się za {days} dni",
"underWarranty": "Na gwarancji · {days} dni"
},
"car": {
"allCars": "← Wszystkie samochody",
"share": "Udostępnij",
"shared": "Udostępniony",
"sharedReadOnly": "Udostępniony · tylko do odczytu",
"tabs": {
"connected": "Połączona usługa",
"info": "Informacje",
"services": "Historia serwisowa",
"technical": "Historia przeglądów",
"maintenance": "Naprawy",
"fuel": "Koszty paliwa",
"charging": "Koszty ładowania",
"documents": "Dokumenty",
"parts": "Katalog części",
"reminders": "Przypomnienia",
"dragHint": "Przeciągnij kartę, aby zmienić kolejność kart tego samochodu."
},
"viewPicker": {
"open": "Co pokazuje strona tego samochodu",
"title": "Co pokazuje ten samochód",
"subtitle": "Wybierz sekcje i szczegóły widoczne na stronie tego samochodu. Dotyczy wszystkich, którym go udostępniono.",
"tabsHeading": "Zakładki",
"fieldsHeading": "Pola informacji",
"alwaysOn": "Zakładka {tab} jest zawsze dostępna.",
"fieldsOrderHint": "Przeciągnij pola na zakładce Informacje, aby zmienić ich kolejność.",
"reorderHint": "Przeciągnij wiersz za uchwyt, aby zmienić kolejność.",
"tabsReorder": "Zakładki",
"fieldsReorder": "Pola informacyjne"
},
"provider": {
"subtitle": "Dane na żywo z Twojego konta {label}.",
"refresh": "Odśwież",
"refreshing": "Odświeżanie…",
"updated": "Zaktualizowano {time}",
"vehicle": "Pojazd",
"readings": "Aktualne odczyty",
"dragHint": "Przeciągnij odczyt, aby zmienić ich kolejność.",
"noData": "{label} nie zwróciło żadnych danych dla tego samochodu.",
"raw": "Surowa odpowiedź",
"allFields": "Wszystkie zgłoszone pola",
"truncated": "Wypisano tylko pierwsze {n} pól — pozostałe znajdziesz w surowej odpowiedzi poniżej.",
"sectionEmpty": "Brak danych.",
"sectionFailed": "Nie udało się pobrać",
"own": "Używane jest wyłącznie Twoje własne konto, więc dane logowania nigdy nie są udostępniane wraz z samochodem.",
"odometerSuggest": "{label} podaje {km}, czyli więcej niż zapisany przebieg tego samochodu.",
"updateOdometer": "Zaktualizuj przebieg",
"updatingOdometer": "Aktualizowanie…",
"unlink": "Odłącz",
"unlinkConfirm": "Odłączyć ten samochód od {label}? Żadne zapisane dane nie zostaną usunięte.",
"connectTitle": "Połącz ten samochód z usługą",
"connectHint": "Wybierz pojazd ze swojego konta, który odpowiada temu samochodowi. Jego dane pojawią się tutaj.",
"connectSubmit": "Połącz pojazd",
"connecting": "Łączenie…",
"noProviders": "Nie połączono żadnego konta producenta. Dodaj je w Ustawieniach Integracje.",
"settingsLink": "Otwórz Ustawienia",
"sections": {
"telemetry": "Przebieg i zasięg",
"electric": "Akumulator i ładowanie",
"status": "Drzwi, szyby i światła",
"health": "Stan pojazdu",
"location": "Ostatnia znana lokalizacja",
"serviceHistory": "Historia serwisowa u dealera",
"notifications": "Powiadomienia"
},
"metrics": {
"odometer": "Przebieg",
"fuelLevel": "Poziom paliwa",
"fuelRange": "Zasięg",
"batteryLevel": "Akumulator",
"evRange": "Zasięg elektryczny (bez klimatyzacji)",
"evRangeWithAc": "Zasięg elektryczny (z klimatyzacją)",
"chargingStatus": "Ładowanie",
"location": "Pozycja"
}
},
"info": {
"allHidden": "Wszystkie pola są wyłączone dla tego samochodu.",
"dragHint": "Przeciągnij pole, aby zmienić układ informacji o tym samochodzie.",
"oilSpec": "Specyfikacja oleju silnikowego",
"transmissionOil": "Olej przekładniowy",
"differentialOil": "Olej mostu napędowego",
"brakeFluid": "Płyn hamulcowy",
"coolant": "Płyn chłodniczy",
"odometer": "Przebieg",
"serviceInterval": "Interwał serwisowy",
"nextDue": "Następny termin",
"registrationPlate": "Numer rejestracyjny",
"registrationCountry": "Kraj rejestracji",
"vin": "VIN",
"fuelType": "Rodzaj paliwa",
"buildDate": "Data produkcji",
"firstRegistration": "Pierwsza rejestracja",
"technicalCheckInterval": "Interwał przeglądów technicznych",
"daysValue": {
"one": "{n} dzień",
"few": "{n} dni",
"many": "{n} dni",
"other": "{n} dni"
}
},
"services": {
"title": "Historia serwisowa",
"add": "Dodaj serwis",
"empty": "Brak wpisów serwisowych.",
"colDate": "Data",
"colKm": "Km",
"colNextDate": "Następna data",
"colNextKm": "Następny przebieg",
"colOil": "Olej i filtr oleju",
"colEngineFilter": "Filtr powietrza silnika",
"colCabinFilter": "Filtr kabinowy",
"colNotes": "Notatki",
"colFile": "Plik",
"confirmDelete": "Usunąć ten wpis serwisowy?",
"next": "Następny: {date} · {km}",
"chipOil": "Olej i filtr",
"chipEngineFilter": "Filtr powietrza",
"chipCabinFilter": "Filtr kabinowy"
},
"technical": {
"title": "Historia przeglądów technicznych",
"subtitle": "Obowiązkowe badania techniczne. Powtarzają się wyłącznie w oparciu o czas, niezależnie od przebiegu.",
"add": "Dodaj przegląd",
"empty": "Brak przeglądów technicznych.",
"colDate": "Data",
"colResult": "Wynik",
"colNextCheck": "Następny przegląd",
"colStatus": "Status",
"colStation": "Stacja",
"colCost": "Koszt",
"colNotes": "Notatki",
"colFile": "Plik",
"passed": "Pozytywny",
"failed": "Negatywny",
"confirmDelete": "Usunąć ten przegląd techniczny?",
"next": "Następny: {date}"
},
"maintenance": {
"title": "Naprawy",
"subtitle": "Wizyty w warsztacie i naprawy. Rutynowa obsługa znajduje się w Historii serwisowej.",
"add": "Zapisz wizytę",
"empty": "Brak zapisanych wizyt w warsztacie.",
"colDate": "Data",
"colKm": "Km",
"colType": "Rodzaj",
"colWork": "Wykonane prace",
"colWorkshop": "Warsztat",
"colStatus": "Status",
"colCost": "Koszt",
"colFile": "Plik",
"underWarranty": "Na gwarancji · pozostało {days} dni",
"confirmDelete": "Usunąć tę wizytę w warsztacie?",
"partsUsed": "Części: {parts}"
},
"fuel": {
"title": "Koszty paliwa",
"subtitle": "Zużycie liczone jest między pełnymi bakami.",
"add": "Zapisz tankowanie",
"empty": "Brak zapisanych tankowań.",
"average": "Średnie",
"best": "Najlepsze",
"worst": "Najgorsze",
"costPerKm": "Koszt na km",
"refills": "Tankowania",
"totalLiters": "Łącznie litrów",
"totalSpent": "Łącznie wydano",
"trackedDistance": "Zmierzony dystans",
"avgPrice": "Śr. cena {price}/l",
"needTwoTanks": "Zapisz co najmniej dwa pełne baki, aby zobaczyć zużycie.",
"colDate": "Data",
"colKm": "Km",
"colLiters": "Litry",
"colCost": "Koszt",
"colPerLiter": "Za litr",
"colDistance": "Dystans",
"colConsumption": "Zużycie",
"colStation": "Stacja",
"colFile": "Plik",
"partial": "częściowe",
"gap": "luka",
"confirmDelete": "Usunąć to tankowanie?",
"fullTank": "Pełny bak",
"partialFill": "Tankowanie częściowe",
"missedBefore": "Pominięte tankowanie",
"overDistance": "{consumption} · {rate} na dystansie {distance}"
},
"charging": {
"title": "Koszty ładowania",
"subtitle": "Zużycie liczone jest między pełnymi ładowaniami.",
"add": "Zapisz ładowanie",
"empty": "Brak zapisanych ładowań.",
"average": "Średnio",
"best": "Najlepsze",
"worst": "Najgorsze",
"costPerKm": "Koszt na km",
"sessions": "Ładowania",
"totalKwh": "Łączna energia",
"totalSpent": "Łącznie wydano",
"trackedDistance": "Zmierzony dystans",
"avgPrice": "Śr. cena {price}/kWh",
"needTwoCharges": "Zapisz co najmniej dwa pełne ładowania, aby zobaczyć zużycie.",
"colDate": "Data",
"colKm": "Km",
"colKwh": "kWh",
"colCost": "Koszt",
"colPerKwh": "Za kWh",
"colDistance": "Dystans",
"colConsumption": "Zużycie",
"colLocation": "Ładowarka",
"colFile": "Plik",
"partial": "częściowe",
"gap": "przerwa",
"confirmDelete": "Usunąć to ładowanie?",
"fullCharge": "Pełne ładowanie",
"partialCharge": "Ładowanie częściowe",
"missedBefore": "Pominięte ładowanie",
"overDistance": "{consumption} · {rate} na dystansie {distance}"
},
"documents": {
"title": "Dokumenty",
"subtitle": "Ubezpieczenie, zaświadczenia i inne dokumenty z terminami odnowienia.",
"add": "Dodaj dokument",
"empty": "Brak dokumentów.",
"colType": "Rodzaj",
"colTitle": "Nazwa",
"colProvider": "Wystawca",
"colIssued": "Wystawiono",
"colRenewal": "Odnowienie",
"colStatus": "Status",
"colFile": "Plik",
"confirmDelete": "Usunąć ten dokument?",
"issuedRenews": "Wydano {issued} · Odnowienie {renews}"
},
"reminders": {
"title": "Przypomnienia",
"subtitle": "Przypomnienia o odnowieniach i serwisach dodawane są automatycznie na podstawie dokumentów i historii serwisowej.",
"add": "Dodaj przypomnienie",
"empty": "Nie ma jeszcze o czym przypominać.",
"automatic": "Automatyczne",
"repeats": "Powtarza się",
"at": "przy {km}",
"doneRollForward": "Gotowe · przenieś dalej",
"markDone": "Oznacz jako gotowe",
"reopen": "Otwórz ponownie",
"confirmDelete": "Usunąć to przypomnienie?",
"on": "dnia {date}",
"repeatsEvery": "Powtarza się co {every}",
"autoHint": "Dodane automatycznie — aby to zmienić, edytuj wpis, z którego pochodzi."
},
"parts": {
"title": "Katalog części",
"add": "Dodaj część",
"empty": "Brak części.",
"colPart": "Część",
"colPartNumber": "Numer części",
"colNotes": "Notatki",
"colFile": "Plik",
"confirmDelete": "Usunąć tę część?"
},
"delete": {
"title": "Usunąć ten samochód?",
"body": "To trwale usunie {name} i wszystko, co zostało w nim zapisane — {services}, {maintenance}, {fuel}, {charging}, {documents} i {parts}. Tej operacji nie można cofnąć.",
"services": {
"one": "{n} wpis serwisowy",
"few": "{n} wpisy serwisowe",
"many": "{n} wpisów serwisowych",
"other": "{n} wpisu serwisowego"
},
"maintenance": {
"one": "{n} wizyta w warsztacie",
"few": "{n} wizyty w warsztacie",
"many": "{n} wizyt w warsztacie",
"other": "{n} wizyty w warsztacie"
},
"fuel": {
"one": "{n} tankowanie",
"few": "{n} tankowania",
"many": "{n} tankowań",
"other": "{n} tankowania"
},
"charging": {
"one": "{n} ładowanie",
"other": "{n} ładowań"
},
"documents": {
"one": "{n} dokument",
"few": "{n} dokumenty",
"many": "{n} dokumentów",
"other": "{n} dokumentu"
},
"parts": {
"one": "{n} część",
"few": "{n} części",
"many": "{n} części",
"other": "{n} części"
},
"typeToConfirm": "Wpisz {name}, aby potwierdzić",
"deleting": "Usuwanie…",
"confirm": "Usuń trwale"
},
"actions": {
"share": "Udostępnij samochód",
"edit": "Edytuj samochód",
"odometer": "Zaktualizuj przebieg",
"delete": "Usuń samochód"
},
"readOnlyNotice": "Udostępnione Tobie (tylko do odczytu). Nie możesz wprowadzać zmian."
},
"forms": {
"charging": {
"addTitle": "Zapisz ładowanie",
"editTitle": "Edytuj ładowanie",
"date": "Data",
"odometer": "Przebieg (km)",
"kwh": "Energia (kWh)",
"cost": "Koszt",
"pricePerKwh": "To {price} za kWh.",
"battery": "Akumulator",
"fullCharge": "Naładowany do pełna",
"missedSession": "Wcześniejsze ładowanie nie zostało zapisane",
"batteryHint": "Zużycie liczone jest między pełnymi ładowaniami. Ładowania częściowe wliczają się do kosztów i doliczają do kolejnego pełnego.",
"location": "Ładowarka",
"locationPlaceholder": "Dom",
"notes": "Notatki",
"attachmentLegend": "Paragon",
"submit": "Zapisz ładowanie"
},
"import": {
"title": "Importuj samochód",
"subtitle": "Utwórz samochód na podstawie pojazdu z Twojego konta u producenta. Wszystko, co da się odczytać, zostanie wypełnione automatycznie.",
"service": "Usługa",
"loadingVehicles": "Wczytywanie Twoich pojazdów…",
"noVehicles": "Brak pojazdów na tym koncie.",
"notConnected": "Nie połączono",
"noProviders": "Nie połączono żadnego konta producenta. Dodaj je w Ustawieniach Integracje.",
"alreadyInGarage": "Już w Twoim garażu",
"selectVehicle": "Pojazd",
"dataTitle": "Co zaimportować",
"dataHint": "Odznacz to, co wolisz wpisać samodzielnie.",
"includeIdentity": "Marka, model, rok, rejestracja i VIN",
"includeFuelType": "Rodzaj paliwa",
"includeDates": "Data produkcji i pierwszej rejestracji",
"includeOdometer": "Aktualny przebieg",
"name": "Nazwa samochodu",
"submit": "Importuj samochód",
"importing": "Importowanie…",
"warningOdometer": "Usługa nie podała przebiegu — wpisz go samodzielnie w samochodzie.",
"moreData": "Pozostałe dane z tej usługi pozostają dostępne w karcie {label} samochodu."
},
"car": {
"addTitle": "Dodaj samochód",
"editTitle": "Edytuj samochód",
"name": "Nazwa *",
"make": "Marka",
"model": "Model",
"year": "Rok",
"registration": "Numer rejestracyjny",
"registrationCountry": "Kraj rejestracji",
"registrationCountryPlaceholder": "Polska",
"vin": "VIN",
"vinPlaceholder": "Numer identyfikacyjny pojazdu",
"fuelType": "Rodzaj paliwa",
"buildDate": "Data produkcji",
"firstRegistration": "Pierwsza rejestracja",
"oilSpec": "Specyfikacja oleju silnikowego",
"currentKm": "Aktualny przebieg (km)",
"transmissionOilSpec": "Specyfikacja oleju przekładniowego",
"differentialOilSpec": "Specyfikacja oleju mostu napędowego",
"brakeFluidSpec": "Specyfikacja płynu hamulcowego",
"coolantSpec": "Specyfikacja płynu chłodniczego",
"serviceIntervalDays": "Interwał serwisowy (dni)",
"serviceIntervalKm": "Interwał serwisowy (km)",
"technicalCheckIntervalDays": "Interwał przeglądu technicznego (dni)",
"technicalCheckHint": "Wstępnie wypełnia termin następnego przeglądu. Każdy przegląd może go nadpisać datą z zaświadczenia.",
"submit": "Dodaj samochód"
},
"service": {
"addTitle": "Dodaj wpis serwisowy",
"editTitle": "Edytuj wpis serwisowy",
"date": "Data *",
"odometer": "Przebieg (km)",
"changedParts": "Wymienione części",
"oil": "Olej i filtr oleju",
"engineFilter": "Filtr powietrza silnika",
"cabinFilter": "Filtr kabinowy",
"attachmentLegend": "Paragon lub strona książki serwisowej",
"notes": "Notatki",
"autoHint": "Data (+{days} dni) i przebieg (+{km}) następnego serwisu są obliczane automatycznie.",
"submit": "Dodaj serwis"
},
"technical": {
"addTitle": "Dodaj przegląd techniczny",
"editTitle": "Edytuj przegląd techniczny",
"date": "Data przeglądu *",
"result": "Wynik *",
"passed": "Pozytywny",
"failed": "Negatywny",
"validUntil": "Ważny do",
"failedHint": "Negatywny przegląd niczego nie potwierdza, więc nie wyznacza następnego terminu.",
"derivedHint": "Pozostaw puste, aby użyć interwału samochodu (+{days} dni → {date}). Wpisz datę z zaświadczenia, jeśli jest inna.",
"cost": "Koszt",
"station": "Stacja",
"stationPlaceholder": "Stacja Kontroli Pojazdów",
"attachmentLegend": "Zaświadczenie o przeglądzie",
"notes": "Notatki",
"submit": "Dodaj przegląd"
},
"part": {
"addTitle": "Dodaj część",
"editTitle": "Edytuj część",
"name": "Nazwa części *",
"namePlaceholder": "Filtr oleju",
"partNumber": "Numer części",
"notes": "Notatki",
"notesPlaceholder": "Pasuje do 20152020 · kupować parami",
"attachmentLegend": "Zdjęcie lub karta katalogowa",
"submit": "Dodaj część"
},
"fuel": {
"addTitle": "Zapisz tankowanie",
"editTitle": "Edytuj tankowanie",
"date": "Data *",
"odometer": "Przebieg (km) *",
"liters": "Litry *",
"cost": "Koszt całkowity",
"pricePerLiter": "Cena za litr: {price}",
"tank": "Bak",
"fullTank": "Zatankowano do pełna",
"missedFill": "Nie zapisałem tankowania przed tym",
"tankHint": "Zużycie liczone jest między pełnymi bakami, więc tankowania częściowe wliczają się do następnego pełnego. Oznaczenie pominiętego tankowania wyklucza ten odcinek z obliczeń, zamiast pokazywać nierealnie niskie spalanie.",
"station": "Stacja",
"notes": "Notatki",
"attachmentLegend": "Paragon",
"submit": "Zapisz tankowanie",
"stationPlaceholder": "Orlen"
},
"maintenance": {
"addTitle": "Zapisz wizytę w warsztacie",
"editTitle": "Edytuj wizytę w warsztacie",
"date": "Data *",
"odometer": "Przebieg (km)",
"type": "Rodzaj",
"status": "Status",
"description": "Co zostało zrobione *",
"descriptionPlaceholder": "Wymiana alternatora i paska napędowego",
"workshop": "Warsztat",
"location": "Lokalizacja",
"partsUsed": "Wymienione części",
"partsUsedPlaceholder": "Alternator 27060-0T010, pasek 90916-02660",
"laborCost": "Koszt robocizny",
"partsCost": "Koszt części",
"total": "Razem: {total}",
"invoiceNumber": "Numer faktury",
"warrantyUntil": "Gwarancja do",
"attachmentLegend": "Faktura",
"notes": "Notatki",
"submit": "Zapisz wizytę",
"workshopPlaceholder": "Auto Serwis Kowalski",
"locationPlaceholder": "Kraków"
},
"document": {
"addTitle": "Dodaj dokument",
"editTitle": "Edytuj dokument",
"type": "Rodzaj",
"title": "Nazwa *",
"titlePlaceholder": "OC 2026",
"provider": "Wystawca",
"reference": "Nr polisy / zaświadczenia",
"issued": "Wystawiono",
"renewalDate": "Data odnowienia",
"renewalHint": "Pozostaw datę odnowienia pustą dla dokumentu bezterminowego. Ustawienie jej automatycznie doda przypomnienie.",
"cost": "Koszt",
"attachmentLegend": "Skan lub zdjęcie",
"notes": "Notatki",
"submit": "Dodaj dokument",
"providerPlaceholder": "PZU"
},
"reminder": {
"addTitle": "Dodaj przypomnienie",
"editTitle": "Edytuj przypomnienie",
"title": "Nazwa *",
"titlePlaceholder": "Zmiana na opony zimowe",
"type": "Rodzaj",
"remindMe": "Przypomnij mi",
"onDate": "W dniu",
"atOdometer": "Przy przebiegu (km)",
"triggerHint": "Ustaw jedno lub oba — przy obu liczy się to, co nastąpi wcześniej.",
"currentKm": "Samochód ma teraz {km}.",
"repeat": "Powtarzanie (opcjonalnie)",
"everyDays": "Co … dni",
"everyKm": "Co … km",
"recurringHint": "Oznaczenie jako gotowe przeniesie je dalej, zamiast zamknąć.",
"oneOffHint": "Pozostaw puste dla jednorazowego przypomnienia, które zamknie się po oznaczeniu jako gotowe.",
"notes": "Notatki",
"noTrigger": "Ustaw datę, przebieg lub oba.",
"submit": "Dodaj przypomnienie"
},
"share": {
"title": "Udostępnij {name}",
"body": "Daj innemu użytkownikowi dostęp do tego samochodu. Tylko do odczytu pozwala na podgląd; odczyt i zapis pozwala też edytować samochód oraz jego wpisy serwisowe i części.",
"userEmail": "E-mail użytkownika",
"read": "Tylko do odczytu",
"write": "Odczyt i zapis",
"submit": "Udostępnij",
"peopleWithAccess": "Osoby z dostępem",
"notShared": "Jeszcze nikomu nie udostępniono.",
"submitting": "Udostępnianie…"
},
"validation": {
"odometer": "Przebieg jest wymagany.",
"liters": "Liczba litrów jest wymagana.",
"kwh": "Energia (kWh) jest wymagana.",
"name": "Nazwa jest wymagana.",
"partName": "Nazwa części jest wymagana.",
"description": "Opisz, co zostało zrobione.",
"title": "Tytuł jest wymagany."
}
},
"enums": {
"fuelType": {
"petrol": "Benzyna",
"petrol_lpg": "Benzyna + LPG",
"diesel": "Diesel",
"diesel_lpg": "Diesel + LPG",
"hybrid": "Hybryda",
"electric": "Elektryczny",
"hydrogen": "Wodór"
},
"maintenanceType": {
"repair": "Naprawa",
"inspection": "Przegląd",
"bodywork": "Blacharka",
"tyres": "Opony",
"diagnostics": "Diagnostyka",
"recall": "Akcja serwisowa",
"warranty": "Naprawa gwarancyjna",
"other": "Inne"
},
"maintenanceStatus": {
"scheduled": "Zaplanowana",
"in_progress": "W trakcie",
"completed": "Zakończona"
},
"documentType": {
"insurance": "Ubezpieczenie",
"pollution": "Zaświadczenie o emisji spalin",
"registration": "Dowód rejestracyjny",
"inspection": "Przegląd",
"roadTax": "Podatek drogowy",
"warranty": "Gwarancja",
"other": "Inne"
},
"reminderTypeShort": {
"maintenance": "Naprawa",
"document": "Dokument",
"service": "Serwis",
"inspection": "Przegląd",
"other": "Inne"
},
"reminderType": {
"maintenance": "Naprawa",
"document": "Odnowienie dokumentu",
"service": "Serwis",
"inspection": "Przegląd",
"other": "Inne"
}
},
"attachment": {
"legend": "Załącznik",
"hint": "PDF lub obraz, do 10 MB.",
"attached": "Załączono: {name}",
"willBeRemoved": "Załącznik zostanie usunięty przy zapisie.",
"choose": "Wybierz plik",
"replace": "Zamień",
"view": "Podgląd",
"clear": "Wyczyść"
},
"errors": {
"sessionExpired": "Sesja wygasła — zaloguj się ponownie.",
"deleteFailed": "Usuwanie nie powiodło się: {error}",
"completeFailed": "Nie udało się ukończyć: {error}",
"attachmentFailed": "Zapisano, ale plik nie został przesłany: {error}",
"openFailed": "Nie udało się otworzyć pliku: {error}",
"noFile": "Brak załączonego pliku."
},
"admin": {
"title": "Użytkownicy",
"subtitleAll": "Konta ze wszystkich organizacji.",
"subtitleOrg": "Konta w Twojej organizacji.",
"addUser": "Dodaj użytkownika",
"colEmail": "E-mail",
"colName": "Imię i nazwisko",
"colOrganization": "Organizacja",
"noOrganization": "— Bez organizacji —",
"organizationHint": "Zostaw puste, aby utworzyć konto bez organizacji.",
"colRole": "Rola",
"colCreated": "Utworzono",
"you": "(Ty)",
"resetPassword": "Zresetuj hasło",
"confirmDelete": "Usunąć użytkownika {name}? Tej operacji nie można cofnąć.",
"cantDeleteSelf": "Nie możesz usunąć własnego konta.",
"onlySuperadminDeletes": "Tylko superadministrator może usunąć superadministratora.",
"cantChangeOwnRole": "Nie możesz zmienić własnej roli.",
"onlySuperadminEdits": "Tylko superadministrator może edytować superadministratora.",
"createTitle": "Dodaj użytkownika",
"emailRequired": "E-mail *",
"passwordRequired": "Hasło *",
"minChars": "(min. 8)",
"creating": "Tworzenie…",
"createUser": "Utwórz użytkownika",
"resetTitle": "Reset hasła — {email}",
"newPassword": "Nowe hasło",
"setPassword": "Ustaw hasło",
"roles": {
"user": "użytkownik",
"admin": "administrator",
"superadmin": "superadministrator"
},
"deleteTitle": "Usunąć użytkownika?",
"passwordUpdated": "Hasło zostało zmienione."
}
}