Phone App: take the car screen off hardcoded English
The previous commit left the car screen half translated: its tab labels went
through t(), and everything underneath them did not. A Polish user opening a
car got translated tabs over English tiles, English forms and English
dialogs, which is worse than either extreme because it reads as a bug rather
than as a missing translation.
So the whole screen and everything it opens now reads from the language
files: the record tiles, the share and delete-car dialogs, the service and
part sheets it hosts, record_form_sheets.dart, car_form_sheet.dart, and the
attachment field whose buttons surface inside all of them.
Almost none of these strings are new. The Web App has said all of this in
three languages since b6bb6b1, so forms.*, enums.*, attachment.* and errors.*
are copied out of its language files the same way car.* was, and Polish and
Danish arrive complete. What is written here is only what the phone alone
needs, and the categories are worth naming because they are the reason the
two apps' files are not identical: tooltips, because the web labels its
buttons; the tiles' running prose, because the web lays the same data out as
table columns; client-side validation, because the web leans on the browser's
`required`; and the snackbars.
Three things changed shape rather than just wording.
The per-record delete prompts were one template with a noun slotted in -
"Delete this $what?" - which does not survive translation into a language
that inflects the noun. Each collection now names its own confirmation
string, which is what the web already had.
The delete-car dialog counted with a hand-rolled `"$n $noun${n == 1 ? '' :
's'}"`. Polish has three plural forms, so that could not be translated at
all; it now goes through the CLDR plurals in car.delete.*. It also only ever
named service records and parts, while the cascade takes maintenance, fuel,
charges and documents too - the translated body names all six, so it is now
passed the whole data set rather than two counts.
The enum labels (fuel types, maintenance type/status, document and reminder
types) were four const maps duplicated between the tiles and the pickers.
They are one lookup against enums.* now, with an unknown value falling back
to the raw key rather than a blank - the server owns that enum, and a value
added there should stay legible in an app that has not caught up.
Found and fixed while testing: the view picker rendered the literal string
"car.tabs.provider" as a row label on an unlinked car. That key does not
exist by design - a linked car's tab is named after the service, an unlinked
one falls back to car.tabs.connected - and the picker was the one caller that
did not know it.
Verified by flutter analyze (clean), flutter test - 19 pass, 7 of them new -
and flutter build apk --debug. The new tests cover what the analyzer cannot
see: the lookups built from a key at render time (car.tabs.$key,
enums.fuelType.$v, the delete dialog's plural counts, the connected service's
readings) are checked to have a real label in all three languages, so a
catalogue entry with no translation fails a test instead of reaching a screen
as a raw key path. That is the check that caught the bug above. A one-off
script also confirmed all 550 static t() keys resolve in en.json.
Not verified: still nothing run against a live API Server or on a device.
Known gaps, deliberately left: admin_users_screen.dart is still English, and
settings.integrations.* / charging.control.* exist in en.json only. The
second one is not the phone's alone - the Web App has exactly the same gap,
so translating that OCPP and connector vocabulary belongs to both apps in one
pass rather than letting the phone run ahead of the app the strings are
copied from. Both are now recorded in TRANSLATIONS.md, which had claimed the
car screen as untranslated and the web app as complete.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e249c2f4d8
commit
a2d9efec7e
11 files changed
+1380
-426
No files matched your search
+274
-12
@@ -366,7 +366,11 @@
|
||||
"fuelType": "Brændstoftype",
|
||||
"buildDate": "Produktionsdato",
|
||||
"firstRegistration": "Første registrering",
|
||||
"technicalCheckInterval": "Synsinterval"
|
||||
"technicalCheckInterval": "Synsinterval",
|
||||
"daysValue": {
|
||||
"one": "{n} dag",
|
||||
"other": "{n} dage"
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"title": "Servicehistorik",
|
||||
@@ -381,7 +385,11 @@
|
||||
"colCabinFilter": "Kabinefilter",
|
||||
"colNotes": "Noter",
|
||||
"colFile": "Fil",
|
||||
"confirmDelete": "Slet denne servicepost?"
|
||||
"confirmDelete": "Slet denne servicepost?",
|
||||
"next": "Næste: {date} · {km}",
|
||||
"chipOil": "Olie og filter",
|
||||
"chipEngineFilter": "Motorluft",
|
||||
"chipCabinFilter": "Kabineluft"
|
||||
},
|
||||
"technical": {
|
||||
"title": "Synshistorik",
|
||||
@@ -398,7 +406,8 @@
|
||||
"colFile": "Fil",
|
||||
"passed": "Godkendt",
|
||||
"failed": "Ikke godkendt",
|
||||
"confirmDelete": "Slet dette syn?"
|
||||
"confirmDelete": "Slet dette syn?",
|
||||
"next": "Næste: {date}"
|
||||
},
|
||||
"maintenance": {
|
||||
"title": "Værksted",
|
||||
@@ -414,7 +423,8 @@
|
||||
"colCost": "Pris",
|
||||
"colFile": "Fil",
|
||||
"underWarranty": "Under garanti · {days} dage tilbage",
|
||||
"confirmDelete": "Slet dette værkstedsbesøg?"
|
||||
"confirmDelete": "Slet dette værkstedsbesøg?",
|
||||
"partsUsed": "Dele: {parts}"
|
||||
},
|
||||
"fuel": {
|
||||
"title": "Brændstofudgifter",
|
||||
@@ -442,7 +452,11 @@
|
||||
"colFile": "Fil",
|
||||
"partial": "delvis",
|
||||
"gap": "hul",
|
||||
"confirmDelete": "Slet denne tankning?"
|
||||
"confirmDelete": "Slet denne tankning?",
|
||||
"fullTank": "Fuld tank",
|
||||
"partialFill": "Delvis tankning",
|
||||
"missedBefore": "Manglende tankning før",
|
||||
"overDistance": "{consumption} · {rate} over {distance}"
|
||||
},
|
||||
"charging": {
|
||||
"title": "Opladningsudgifter",
|
||||
@@ -470,7 +484,11 @@
|
||||
"colFile": "Fil",
|
||||
"partial": "delvis",
|
||||
"gap": "hul",
|
||||
"confirmDelete": "Slet denne opladning?"
|
||||
"confirmDelete": "Slet denne opladning?",
|
||||
"fullCharge": "Fuld opladning",
|
||||
"partialCharge": "Delvis opladning",
|
||||
"missedBefore": "Manglende opladning før",
|
||||
"overDistance": "{consumption} · {rate} over {distance}"
|
||||
},
|
||||
"documents": {
|
||||
"title": "Dokumenter",
|
||||
@@ -484,7 +502,8 @@
|
||||
"colRenewal": "Fornyelse",
|
||||
"colStatus": "Status",
|
||||
"colFile": "Fil",
|
||||
"confirmDelete": "Slet dette dokument?"
|
||||
"confirmDelete": "Slet dette dokument?",
|
||||
"issuedRenews": "Udstedt {issued} · Fornyes {renews}"
|
||||
},
|
||||
"reminders": {
|
||||
"title": "Påmindelser",
|
||||
@@ -497,7 +516,10 @@
|
||||
"doneRollForward": "Færdig · flyt frem",
|
||||
"markDone": "Markér som færdig",
|
||||
"reopen": "Genåbn",
|
||||
"confirmDelete": "Slet denne påmindelse?"
|
||||
"confirmDelete": "Slet denne påmindelse?",
|
||||
"on": "den {date}",
|
||||
"repeatsEvery": "Gentages hver {every}",
|
||||
"autoHint": "Tilføjet automatisk — rediger den post, den stammer fra, for at ændre den."
|
||||
},
|
||||
"parts": {
|
||||
"title": "Reservedelskatalog",
|
||||
@@ -539,7 +561,14 @@
|
||||
"typeToConfirm": "Skriv {name} for at bekræfte",
|
||||
"deleting": "Sletter…",
|
||||
"confirm": "Slet permanent"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"share": "Del bil",
|
||||
"edit": "Rediger bil",
|
||||
"odometer": "Opdater kilometerstand",
|
||||
"delete": "Slet bil"
|
||||
},
|
||||
"readOnlyNotice": "Delt med dig (skrivebeskyttet). Du kan ikke ændre noget."
|
||||
},
|
||||
"forms": {
|
||||
"charging": {
|
||||
@@ -558,9 +587,7 @@
|
||||
"locationPlaceholder": "Hjemme",
|
||||
"notes": "Noter",
|
||||
"attachmentLegend": "Kvittering",
|
||||
"submit": "Gem opladning",
|
||||
"odometerRequired": "Kilometerstand er påkrævet.",
|
||||
"kwhRequired": "Energi (kWh) er påkrævet."
|
||||
"submit": "Gem opladning"
|
||||
},
|
||||
"import": {
|
||||
"title": "Importér en bil",
|
||||
@@ -583,6 +610,241 @@
|
||||
"importing": "Importerer…",
|
||||
"warningOdometer": "Tjenesten oplyste ingen kilometerstand — indtast den selv på bilen.",
|
||||
"moreData": "Resten af det, tjenesten oplyser, er fortsat tilgængeligt på bilens {label}-fane."
|
||||
},
|
||||
"car": {
|
||||
"addTitle": "Tilføj en bil",
|
||||
"editTitle": "Rediger bil",
|
||||
"name": "Navn *",
|
||||
"make": "Mærke",
|
||||
"model": "Model",
|
||||
"year": "Årgang",
|
||||
"registration": "Nummerplade",
|
||||
"registrationCountry": "Registreringsland",
|
||||
"registrationCountryPlaceholder": "Danmark",
|
||||
"vin": "Stelnummer",
|
||||
"vinPlaceholder": "Køretøjets stelnummer",
|
||||
"fuelType": "Brændstoftype",
|
||||
"buildDate": "Produktionsdato",
|
||||
"firstRegistration": "Første registrering",
|
||||
"oilSpec": "Motorolie-specifikation",
|
||||
"currentKm": "Nuværende kilometerstand (km)",
|
||||
"transmissionOilSpec": "Gearolie-specifikation",
|
||||
"differentialOilSpec": "Differentialeolie-specifikation",
|
||||
"brakeFluidSpec": "Bremsevæske-specifikation",
|
||||
"coolantSpec": "Kølervæske-specifikation",
|
||||
"serviceIntervalDays": "Serviceinterval (dage)",
|
||||
"serviceIntervalKm": "Serviceinterval (km)",
|
||||
"technicalCheckIntervalDays": "Synsinterval (dage)",
|
||||
"technicalCheckHint": "Udfylder på forhånd hvert syns næste forfaldsdato. Ethvert syn kan tilsidesætte den med datoen på attesten.",
|
||||
"submit": "Tilføj bil"
|
||||
},
|
||||
"service": {
|
||||
"addTitle": "Tilføj servicepost",
|
||||
"editTitle": "Rediger servicepost",
|
||||
"date": "Dato *",
|
||||
"odometer": "Kilometerstand (km)",
|
||||
"changedParts": "Udskiftede dele",
|
||||
"oil": "Olie og oliefilter",
|
||||
"engineFilter": "Luftfilter",
|
||||
"cabinFilter": "Kabinefilter",
|
||||
"attachmentLegend": "Kvittering eller side fra servicebogen",
|
||||
"notes": "Noter",
|
||||
"autoHint": "Næste servicedato (+{days} dage) og km (+{km}) beregnes automatisk.",
|
||||
"submit": "Tilføj service"
|
||||
},
|
||||
"technical": {
|
||||
"addTitle": "Tilføj syn",
|
||||
"editTitle": "Rediger syn",
|
||||
"date": "Synsdato *",
|
||||
"result": "Resultat *",
|
||||
"passed": "Godkendt",
|
||||
"failed": "Ikke godkendt",
|
||||
"validUntil": "Gyldig til",
|
||||
"failedHint": "Et ikke-godkendt syn attesterer ingenting, så der udledes ingen næste dato af det.",
|
||||
"derivedHint": "Lad feltet stå tomt for at bruge bilens interval (+{days} dage → {date}). Indtast datoen på attesten, hvis den afviger.",
|
||||
"cost": "Pris",
|
||||
"station": "Synssted",
|
||||
"stationPlaceholder": "Synshal",
|
||||
"attachmentLegend": "Synsattest",
|
||||
"notes": "Noter",
|
||||
"submit": "Tilføj syn"
|
||||
},
|
||||
"part": {
|
||||
"addTitle": "Tilføj reservedel",
|
||||
"editTitle": "Rediger reservedel",
|
||||
"name": "Reservedelens navn *",
|
||||
"namePlaceholder": "Oliefilter",
|
||||
"partNumber": "Varenummer",
|
||||
"notes": "Noter",
|
||||
"notesPlaceholder": "Passer til 2015–2020 · køb parvis",
|
||||
"attachmentLegend": "Billede eller datablad",
|
||||
"submit": "Tilføj reservedel"
|
||||
},
|
||||
"fuel": {
|
||||
"addTitle": "Registrér tankning",
|
||||
"editTitle": "Rediger tankning",
|
||||
"date": "Dato *",
|
||||
"odometer": "Kilometerstand (km) *",
|
||||
"liters": "Liter *",
|
||||
"cost": "Samlet pris",
|
||||
"pricePerLiter": "Pris pr. liter: {price}",
|
||||
"tank": "Tank",
|
||||
"fullTank": "Fyldt helt op",
|
||||
"missedFill": "Jeg glemte at registrere en tankning før denne",
|
||||
"tankHint": "Forbruget måles mellem fulde tanke, så delvise tankninger tæller med i den næste fulde. At markere en glemt tankning holder den strækning ude af tallene i stedet for at vise et urealistisk lavt forbrug.",
|
||||
"station": "Tankstation",
|
||||
"notes": "Noter",
|
||||
"attachmentLegend": "Kvittering",
|
||||
"submit": "Registrér tankning",
|
||||
"stationPlaceholder": "Orlen"
|
||||
},
|
||||
"maintenance": {
|
||||
"addTitle": "Registrér værkstedsbesøg",
|
||||
"editTitle": "Rediger værkstedsbesøg",
|
||||
"date": "Dato *",
|
||||
"odometer": "Kilometerstand (km)",
|
||||
"type": "Type",
|
||||
"status": "Status",
|
||||
"description": "Hvad blev der lavet *",
|
||||
"descriptionPlaceholder": "Udskiftede generator og drivrem",
|
||||
"workshop": "Værksted",
|
||||
"location": "Sted",
|
||||
"partsUsed": "Udskiftede dele",
|
||||
"partsUsedPlaceholder": "Generator 27060-0T010, rem 90916-02660",
|
||||
"laborCost": "Arbejdsløn",
|
||||
"partsCost": "Pris for dele",
|
||||
"total": "I alt: {total}",
|
||||
"invoiceNumber": "Fakturanummer",
|
||||
"warrantyUntil": "Garanti til",
|
||||
"attachmentLegend": "Faktura",
|
||||
"notes": "Noter",
|
||||
"submit": "Registrér besøg",
|
||||
"workshopPlaceholder": "Kowalski Auto Service",
|
||||
"locationPlaceholder": "Kraków"
|
||||
},
|
||||
"document": {
|
||||
"addTitle": "Tilføj dokument",
|
||||
"editTitle": "Rediger dokument",
|
||||
"type": "Type",
|
||||
"title": "Titel *",
|
||||
"titlePlaceholder": "Ansvarsforsikring 2026",
|
||||
"provider": "Udbyder",
|
||||
"reference": "Police- / attestnummer",
|
||||
"issued": "Udstedt",
|
||||
"renewalDate": "Fornyelsesdato",
|
||||
"renewalHint": "Lad fornyelsesdatoen stå tom for et dokument, der aldrig udløber. Angives den, tilføjes der automatisk en påmindelse.",
|
||||
"cost": "Pris",
|
||||
"attachmentLegend": "Scan eller billede",
|
||||
"notes": "Noter",
|
||||
"submit": "Tilføj dokument",
|
||||
"providerPlaceholder": "PZU"
|
||||
},
|
||||
"reminder": {
|
||||
"addTitle": "Tilføj påmindelse",
|
||||
"editTitle": "Rediger påmindelse",
|
||||
"title": "Titel *",
|
||||
"titlePlaceholder": "Skift til vinterdæk",
|
||||
"type": "Type",
|
||||
"remindMe": "Mind mig om",
|
||||
"onDate": "På dato",
|
||||
"atOdometer": "Ved kilometerstand (km)",
|
||||
"triggerHint": "Angiv det ene eller begge — med begge gælder det, der indtræffer først.",
|
||||
"currentKm": "Bilen står på {km} nu.",
|
||||
"repeat": "Gentagelse (valgfrit)",
|
||||
"everyDays": "Hver … dage",
|
||||
"everyKm": "Hver … km",
|
||||
"recurringHint": "Markeres den som færdig, flyttes den frem i stedet for at blive lukket.",
|
||||
"oneOffHint": "Lad feltet stå tomt for en engangspåmindelse, der lukkes, når du markerer den som færdig.",
|
||||
"notes": "Noter",
|
||||
"noTrigger": "Angiv en forfaldsdato, en kilometerstand eller begge.",
|
||||
"submit": "Tilføj påmindelse"
|
||||
},
|
||||
"share": {
|
||||
"title": "Del {name}",
|
||||
"body": "Giv en anden bruger adgang til denne bil. Skrivebeskyttet giver adgang til at se; læs og skriv giver også adgang til at redigere bilen samt dens serviceposter og reservedele.",
|
||||
"userEmail": "Brugerens e-mail",
|
||||
"read": "Skrivebeskyttet",
|
||||
"write": "Læs og skriv",
|
||||
"submit": "Del",
|
||||
"peopleWithAccess": "Personer med adgang",
|
||||
"notShared": "Endnu ikke delt med nogen.",
|
||||
"submitting": "Deler…"
|
||||
},
|
||||
"validation": {
|
||||
"odometer": "Kilometerstand er påkrævet.",
|
||||
"liters": "Antal liter er påkrævet.",
|
||||
"kwh": "Energi (kWh) er påkrævet.",
|
||||
"name": "Navn er påkrævet.",
|
||||
"partName": "Delnavn er påkrævet.",
|
||||
"description": "Beskriv, hvad der blev udført.",
|
||||
"title": "Titel er påkrævet."
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"fuelType": {
|
||||
"petrol": "Benzin",
|
||||
"petrol_lpg": "Benzin + LPG",
|
||||
"diesel": "Diesel",
|
||||
"diesel_lpg": "Diesel + LPG",
|
||||
"hybrid": "Hybrid",
|
||||
"electric": "El",
|
||||
"hydrogen": "Brint"
|
||||
},
|
||||
"maintenanceType": {
|
||||
"repair": "Reparation",
|
||||
"inspection": "Eftersyn",
|
||||
"bodywork": "Karrosseri",
|
||||
"tyres": "Dæk",
|
||||
"diagnostics": "Fejlsøgning",
|
||||
"recall": "Tilbagekaldelse",
|
||||
"warranty": "Garantiarbejde",
|
||||
"other": "Andet"
|
||||
},
|
||||
"maintenanceStatus": {
|
||||
"scheduled": "Planlagt",
|
||||
"in_progress": "I gang",
|
||||
"completed": "Fuldført"
|
||||
},
|
||||
"documentType": {
|
||||
"insurance": "Forsikring",
|
||||
"pollution": "Miljøattest",
|
||||
"registration": "Registreringsattest",
|
||||
"inspection": "Eftersyn",
|
||||
"roadTax": "Vægtafgift",
|
||||
"warranty": "Garanti",
|
||||
"other": "Andet"
|
||||
},
|
||||
"reminderTypeShort": {
|
||||
"maintenance": "Vedligehold",
|
||||
"document": "Dokument",
|
||||
"service": "Service",
|
||||
"inspection": "Eftersyn",
|
||||
"other": "Andet"
|
||||
},
|
||||
"reminderType": {
|
||||
"maintenance": "Vedligehold",
|
||||
"document": "Fornyelse af dokument",
|
||||
"service": "Service",
|
||||
"inspection": "Eftersyn",
|
||||
"other": "Andet"
|
||||
}
|
||||
},
|
||||
"attachment": {
|
||||
"legend": "Vedhæftet fil",
|
||||
"hint": "PDF eller billede, op til 10 MB.",
|
||||
"attached": "Vedhæftet: {name}",
|
||||
"willBeRemoved": "Den vedhæftede fil fjernes, når der gemmes.",
|
||||
"choose": "Vælg fil",
|
||||
"replace": "Erstat",
|
||||
"view": "Vis",
|
||||
"clear": "Ryd"
|
||||
},
|
||||
"errors": {
|
||||
"sessionExpired": "Sessionen er udløbet — log ind igen.",
|
||||
"deleteFailed": "Sletning mislykkedes: {error}",
|
||||
"completeFailed": "Kunne ikke fuldføres: {error}",
|
||||
"attachmentFailed": "Gemt, men filen blev ikke uploadet: {error}",
|
||||
"openFailed": "Filen kunne ikke åbnes: {error}",
|
||||
"noFile": "Ingen fil vedhæftet."
|
||||
}
|
||||
}
|
||||
+274
-12
@@ -440,7 +440,11 @@
|
||||
"fuelType": "Fuel type",
|
||||
"buildDate": "Build date",
|
||||
"firstRegistration": "First registration",
|
||||
"technicalCheckInterval": "Technical check interval"
|
||||
"technicalCheckInterval": "Technical check interval",
|
||||
"daysValue": {
|
||||
"one": "{n} day",
|
||||
"other": "{n} days"
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"title": "Service history",
|
||||
@@ -455,7 +459,11 @@
|
||||
"colCabinFilter": "Cabin air filter",
|
||||
"colNotes": "Notes",
|
||||
"colFile": "File",
|
||||
"confirmDelete": "Delete this service record?"
|
||||
"confirmDelete": "Delete this service record?",
|
||||
"next": "Next: {date} · {km}",
|
||||
"chipOil": "Oil & filter",
|
||||
"chipEngineFilter": "Engine air",
|
||||
"chipCabinFilter": "Cabin air"
|
||||
},
|
||||
"technical": {
|
||||
"title": "Technical check history",
|
||||
@@ -472,7 +480,8 @@
|
||||
"colFile": "File",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"confirmDelete": "Delete this technical check?"
|
||||
"confirmDelete": "Delete this technical check?",
|
||||
"next": "Next: {date}"
|
||||
},
|
||||
"maintenance": {
|
||||
"title": "Maintenance",
|
||||
@@ -488,7 +497,8 @@
|
||||
"colCost": "Cost",
|
||||
"colFile": "File",
|
||||
"underWarranty": "Under warranty · {days}d left",
|
||||
"confirmDelete": "Delete this workshop visit?"
|
||||
"confirmDelete": "Delete this workshop visit?",
|
||||
"partsUsed": "Parts: {parts}"
|
||||
},
|
||||
"fuel": {
|
||||
"title": "Fuel cost",
|
||||
@@ -516,7 +526,11 @@
|
||||
"colFile": "File",
|
||||
"partial": "partial",
|
||||
"gap": "gap",
|
||||
"confirmDelete": "Delete this refill?"
|
||||
"confirmDelete": "Delete this refill?",
|
||||
"fullTank": "Full tank",
|
||||
"partialFill": "Partial fill",
|
||||
"missedBefore": "Missed fill before",
|
||||
"overDistance": "{consumption} · {rate} over {distance}"
|
||||
},
|
||||
"charging": {
|
||||
"title": "Charging cost",
|
||||
@@ -544,7 +558,11 @@
|
||||
"colFile": "File",
|
||||
"partial": "partial",
|
||||
"gap": "gap",
|
||||
"confirmDelete": "Delete this charge?"
|
||||
"confirmDelete": "Delete this charge?",
|
||||
"fullCharge": "Full charge",
|
||||
"partialCharge": "Partial charge",
|
||||
"missedBefore": "Missed charge before",
|
||||
"overDistance": "{consumption} · {rate} over {distance}"
|
||||
},
|
||||
"documents": {
|
||||
"title": "Documents",
|
||||
@@ -558,7 +576,8 @@
|
||||
"colRenewal": "Renewal",
|
||||
"colStatus": "Status",
|
||||
"colFile": "File",
|
||||
"confirmDelete": "Delete this document?"
|
||||
"confirmDelete": "Delete this document?",
|
||||
"issuedRenews": "Issued {issued} · Renews {renews}"
|
||||
},
|
||||
"reminders": {
|
||||
"title": "Reminders",
|
||||
@@ -571,7 +590,10 @@
|
||||
"doneRollForward": "Done · roll forward",
|
||||
"markDone": "Mark done",
|
||||
"reopen": "Reopen",
|
||||
"confirmDelete": "Delete this reminder?"
|
||||
"confirmDelete": "Delete this reminder?",
|
||||
"on": "on {date}",
|
||||
"repeatsEvery": "Repeats every {every}",
|
||||
"autoHint": "Added automatically — edit the record it came from to change it."
|
||||
},
|
||||
"parts": {
|
||||
"title": "Parts catalog",
|
||||
@@ -613,7 +635,14 @@
|
||||
"typeToConfirm": "Type {name} to confirm",
|
||||
"deleting": "Deleting…",
|
||||
"confirm": "Delete permanently"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"share": "Share car",
|
||||
"edit": "Edit car",
|
||||
"odometer": "Update odometer",
|
||||
"delete": "Delete car"
|
||||
},
|
||||
"readOnlyNotice": "Shared with you (read-only). You can't make changes."
|
||||
},
|
||||
"forms": {
|
||||
"charging": {
|
||||
@@ -632,9 +661,7 @@
|
||||
"locationPlaceholder": "Home",
|
||||
"notes": "Notes",
|
||||
"attachmentLegend": "Receipt",
|
||||
"submit": "Save charge",
|
||||
"odometerRequired": "Odometer is required.",
|
||||
"kwhRequired": "Energy (kWh) is required."
|
||||
"submit": "Save charge"
|
||||
},
|
||||
"import": {
|
||||
"title": "Import a car",
|
||||
@@ -657,6 +684,241 @@
|
||||
"importing": "Importing…",
|
||||
"warningOdometer": "The service did not report an odometer reading — enter it yourself on the car.",
|
||||
"moreData": "The rest of what this service reports stays available on the car's {label} tab."
|
||||
},
|
||||
"car": {
|
||||
"addTitle": "Add a car",
|
||||
"editTitle": "Edit car",
|
||||
"name": "Name *",
|
||||
"make": "Make",
|
||||
"model": "Model",
|
||||
"year": "Year",
|
||||
"registration": "Registration",
|
||||
"registrationCountry": "Registration country",
|
||||
"registrationCountryPlaceholder": "Poland",
|
||||
"vin": "VIN",
|
||||
"vinPlaceholder": "Vehicle Identification Number",
|
||||
"fuelType": "Fuel type",
|
||||
"buildDate": "Build date",
|
||||
"firstRegistration": "First registration",
|
||||
"oilSpec": "Engine oil spec",
|
||||
"currentKm": "Current odometer (km)",
|
||||
"transmissionOilSpec": "Transmission oil spec",
|
||||
"differentialOilSpec": "Differential oil spec",
|
||||
"brakeFluidSpec": "Brake fluid spec",
|
||||
"coolantSpec": "Coolant spec",
|
||||
"serviceIntervalDays": "Service interval (days)",
|
||||
"serviceIntervalKm": "Service interval (km)",
|
||||
"technicalCheckIntervalDays": "Technical check interval (days)",
|
||||
"technicalCheckHint": "Prefills each check's next-due date. Any check can override it with the date printed on its certificate.",
|
||||
"submit": "Add car"
|
||||
},
|
||||
"service": {
|
||||
"addTitle": "Add service record",
|
||||
"editTitle": "Edit service record",
|
||||
"date": "Date *",
|
||||
"odometer": "Odometer (km)",
|
||||
"changedParts": "Changed parts",
|
||||
"oil": "Oil & Oil filter",
|
||||
"engineFilter": "Engine air filter",
|
||||
"cabinFilter": "Cabin air filter",
|
||||
"attachmentLegend": "Receipt or service-book page",
|
||||
"notes": "Notes",
|
||||
"autoHint": "Next service date (+{days}d) and km (+{km}) are computed automatically.",
|
||||
"submit": "Add service"
|
||||
},
|
||||
"technical": {
|
||||
"addTitle": "Add technical check",
|
||||
"editTitle": "Edit technical check",
|
||||
"date": "Check date *",
|
||||
"result": "Result *",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"validUntil": "Valid until",
|
||||
"failedHint": "A failed check certifies nothing, so no next date is derived from it.",
|
||||
"derivedHint": "Leave blank to use the car's interval (+{days}d → {date}). Enter the date on the certificate when it differs.",
|
||||
"cost": "Cost",
|
||||
"station": "Station",
|
||||
"stationPlaceholder": "Stacja Kontroli Pojazdów",
|
||||
"attachmentLegend": "Inspection certificate",
|
||||
"notes": "Notes",
|
||||
"submit": "Add check"
|
||||
},
|
||||
"part": {
|
||||
"addTitle": "Add part",
|
||||
"editTitle": "Edit part",
|
||||
"name": "Part name *",
|
||||
"namePlaceholder": "Oil Filter",
|
||||
"partNumber": "Part number",
|
||||
"notes": "Notes",
|
||||
"notesPlaceholder": "Fits 2015–2020 · buy in pairs",
|
||||
"attachmentLegend": "Photo or spec sheet",
|
||||
"submit": "Add part"
|
||||
},
|
||||
"fuel": {
|
||||
"addTitle": "Log refill",
|
||||
"editTitle": "Edit refill",
|
||||
"date": "Date *",
|
||||
"odometer": "Odometer (km) *",
|
||||
"liters": "Litres *",
|
||||
"cost": "Total cost",
|
||||
"pricePerLiter": "Price per litre: {price}",
|
||||
"tank": "Tank",
|
||||
"fullTank": "Filled to full",
|
||||
"missedFill": "I missed logging a refill before this one",
|
||||
"tankHint": "Consumption is measured between full tanks, so partial fills count towards the next full one. Flagging a missed refill leaves that stretch out of the figures instead of reporting it as unrealistically economical.",
|
||||
"station": "Station",
|
||||
"notes": "Notes",
|
||||
"attachmentLegend": "Receipt",
|
||||
"submit": "Log refill",
|
||||
"stationPlaceholder": "Orlen"
|
||||
},
|
||||
"maintenance": {
|
||||
"addTitle": "Log workshop visit",
|
||||
"editTitle": "Edit workshop visit",
|
||||
"date": "Date *",
|
||||
"odometer": "Odometer (km)",
|
||||
"type": "Type",
|
||||
"status": "Status",
|
||||
"description": "What was done *",
|
||||
"descriptionPlaceholder": "Replaced alternator and drive belt",
|
||||
"workshop": "Workshop",
|
||||
"location": "Location",
|
||||
"partsUsed": "Parts replaced",
|
||||
"partsUsedPlaceholder": "Alternator 27060-0T010, belt 90916-02660",
|
||||
"laborCost": "Labour cost",
|
||||
"partsCost": "Parts cost",
|
||||
"total": "Total: {total}",
|
||||
"invoiceNumber": "Invoice number",
|
||||
"warrantyUntil": "Warranty until",
|
||||
"attachmentLegend": "Invoice",
|
||||
"notes": "Notes",
|
||||
"submit": "Log visit",
|
||||
"workshopPlaceholder": "Kowalski Auto Service",
|
||||
"locationPlaceholder": "Kraków"
|
||||
},
|
||||
"document": {
|
||||
"addTitle": "Add document",
|
||||
"editTitle": "Edit document",
|
||||
"type": "Type",
|
||||
"title": "Title *",
|
||||
"titlePlaceholder": "Third-party liability 2026",
|
||||
"provider": "Provider",
|
||||
"reference": "Policy / certificate no.",
|
||||
"issued": "Issued",
|
||||
"renewalDate": "Renewal date",
|
||||
"renewalHint": "Leave the renewal date blank for a document that never expires. Setting it adds a reminder automatically.",
|
||||
"cost": "Cost",
|
||||
"attachmentLegend": "Scan or photo",
|
||||
"notes": "Notes",
|
||||
"submit": "Add document",
|
||||
"providerPlaceholder": "PZU"
|
||||
},
|
||||
"reminder": {
|
||||
"addTitle": "Add reminder",
|
||||
"editTitle": "Edit reminder",
|
||||
"title": "Title *",
|
||||
"titlePlaceholder": "Swap to winter tyres",
|
||||
"type": "Type",
|
||||
"remindMe": "Remind me",
|
||||
"onDate": "On date",
|
||||
"atOdometer": "At odometer (km)",
|
||||
"triggerHint": "Set either or both — with both, whichever comes first wins.",
|
||||
"currentKm": "The car is at {km} now.",
|
||||
"repeat": "Repeat (optional)",
|
||||
"everyDays": "Every … days",
|
||||
"everyKm": "Every … km",
|
||||
"recurringHint": "Marking this done will roll it forward instead of closing it.",
|
||||
"oneOffHint": "Leave blank for a one-off reminder that closes when you mark it done.",
|
||||
"notes": "Notes",
|
||||
"noTrigger": "Set a due date, a due odometer reading, or both.",
|
||||
"submit": "Add reminder"
|
||||
},
|
||||
"share": {
|
||||
"title": "Share {name}",
|
||||
"body": "Give another user access to this car. Read-only lets them view; read & write also lets them edit the car and its service records and parts.",
|
||||
"userEmail": "User email",
|
||||
"read": "Read-only",
|
||||
"write": "Read & write",
|
||||
"submit": "Share",
|
||||
"peopleWithAccess": "People with access",
|
||||
"notShared": "Not shared with anyone yet.",
|
||||
"submitting": "Sharing…"
|
||||
},
|
||||
"validation": {
|
||||
"odometer": "Odometer is required.",
|
||||
"liters": "Litres are required.",
|
||||
"kwh": "Energy (kWh) is required.",
|
||||
"name": "Name is required.",
|
||||
"partName": "Part name is required.",
|
||||
"description": "Describe what was done.",
|
||||
"title": "Title is required."
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"fuelType": {
|
||||
"petrol": "Petrol (gasoline)",
|
||||
"petrol_lpg": "Petrol (gasoline) + LPG",
|
||||
"diesel": "Diesel",
|
||||
"diesel_lpg": "Diesel + LPG",
|
||||
"hybrid": "Hybrid",
|
||||
"electric": "Electric",
|
||||
"hydrogen": "Hydrogen"
|
||||
},
|
||||
"maintenanceType": {
|
||||
"repair": "Repair",
|
||||
"inspection": "Inspection",
|
||||
"bodywork": "Bodywork",
|
||||
"tyres": "Tyres",
|
||||
"diagnostics": "Diagnostics",
|
||||
"recall": "Recall",
|
||||
"warranty": "Warranty work",
|
||||
"other": "Other"
|
||||
},
|
||||
"maintenanceStatus": {
|
||||
"scheduled": "Scheduled",
|
||||
"in_progress": "In progress",
|
||||
"completed": "Completed"
|
||||
},
|
||||
"documentType": {
|
||||
"insurance": "Insurance",
|
||||
"pollution": "Pollution certificate",
|
||||
"registration": "Registration",
|
||||
"inspection": "Inspection",
|
||||
"roadTax": "Road tax",
|
||||
"warranty": "Warranty",
|
||||
"other": "Other"
|
||||
},
|
||||
"reminderTypeShort": {
|
||||
"maintenance": "Maintenance",
|
||||
"document": "Document",
|
||||
"service": "Service",
|
||||
"inspection": "Inspection",
|
||||
"other": "Other"
|
||||
},
|
||||
"reminderType": {
|
||||
"maintenance": "Maintenance",
|
||||
"document": "Document renewal",
|
||||
"service": "Service",
|
||||
"inspection": "Inspection",
|
||||
"other": "Other"
|
||||
}
|
||||
},
|
||||
"attachment": {
|
||||
"legend": "Attachment",
|
||||
"hint": "PDF or image, up to 10MB.",
|
||||
"attached": "Attached: {name}",
|
||||
"willBeRemoved": "Attachment will be removed on save.",
|
||||
"choose": "Choose file",
|
||||
"replace": "Replace",
|
||||
"view": "View",
|
||||
"clear": "Clear"
|
||||
},
|
||||
"errors": {
|
||||
"sessionExpired": "Session expired — please log in again.",
|
||||
"deleteFailed": "Delete failed: {error}",
|
||||
"completeFailed": "Could not complete: {error}",
|
||||
"attachmentFailed": "Saved, but the file did not upload: {error}",
|
||||
"openFailed": "Could not open the file: {error}",
|
||||
"noFile": "No file attached."
|
||||
}
|
||||
}
|
||||
+276
-12
@@ -370,7 +370,13 @@
|
||||
"fuelType": "Rodzaj paliwa",
|
||||
"buildDate": "Data produkcji",
|
||||
"firstRegistration": "Pierwsza rejestracja",
|
||||
"technicalCheckInterval": "Interwał przeglądów technicznych"
|
||||
"technicalCheckInterval": "Interwał przeglądów technicznych",
|
||||
"daysValue": {
|
||||
"one": "{n} dzień",
|
||||
"few": "{n} dni",
|
||||
"many": "{n} dni",
|
||||
"other": "{n} dni"
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"title": "Historia serwisowa",
|
||||
@@ -385,7 +391,11 @@
|
||||
"colCabinFilter": "Filtr kabinowy",
|
||||
"colNotes": "Notatki",
|
||||
"colFile": "Plik",
|
||||
"confirmDelete": "Usunąć ten wpis serwisowy?"
|
||||
"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",
|
||||
@@ -402,7 +412,8 @@
|
||||
"colFile": "Plik",
|
||||
"passed": "Pozytywny",
|
||||
"failed": "Negatywny",
|
||||
"confirmDelete": "Usunąć ten przegląd techniczny?"
|
||||
"confirmDelete": "Usunąć ten przegląd techniczny?",
|
||||
"next": "Następny: {date}"
|
||||
},
|
||||
"maintenance": {
|
||||
"title": "Naprawy",
|
||||
@@ -418,7 +429,8 @@
|
||||
"colCost": "Koszt",
|
||||
"colFile": "Plik",
|
||||
"underWarranty": "Na gwarancji · pozostało {days} dni",
|
||||
"confirmDelete": "Usunąć tę wizytę w warsztacie?"
|
||||
"confirmDelete": "Usunąć tę wizytę w warsztacie?",
|
||||
"partsUsed": "Części: {parts}"
|
||||
},
|
||||
"fuel": {
|
||||
"title": "Koszty paliwa",
|
||||
@@ -446,7 +458,11 @@
|
||||
"colFile": "Plik",
|
||||
"partial": "częściowe",
|
||||
"gap": "luka",
|
||||
"confirmDelete": "Usunąć to tankowanie?"
|
||||
"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",
|
||||
@@ -474,7 +490,11 @@
|
||||
"colFile": "Plik",
|
||||
"partial": "częściowe",
|
||||
"gap": "przerwa",
|
||||
"confirmDelete": "Usunąć to ładowanie?"
|
||||
"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",
|
||||
@@ -488,7 +508,8 @@
|
||||
"colRenewal": "Odnowienie",
|
||||
"colStatus": "Status",
|
||||
"colFile": "Plik",
|
||||
"confirmDelete": "Usunąć ten dokument?"
|
||||
"confirmDelete": "Usunąć ten dokument?",
|
||||
"issuedRenews": "Wydano {issued} · Odnowienie {renews}"
|
||||
},
|
||||
"reminders": {
|
||||
"title": "Przypomnienia",
|
||||
@@ -501,7 +522,10 @@
|
||||
"doneRollForward": "Gotowe · przenieś dalej",
|
||||
"markDone": "Oznacz jako gotowe",
|
||||
"reopen": "Otwórz ponownie",
|
||||
"confirmDelete": "Usunąć to przypomnienie?"
|
||||
"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",
|
||||
@@ -553,7 +577,14 @@
|
||||
"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": {
|
||||
@@ -572,9 +603,7 @@
|
||||
"locationPlaceholder": "Dom",
|
||||
"notes": "Notatki",
|
||||
"attachmentLegend": "Paragon",
|
||||
"submit": "Zapisz ładowanie",
|
||||
"odometerRequired": "Przebieg jest wymagany.",
|
||||
"kwhRequired": "Energia (kWh) jest wymagana."
|
||||
"submit": "Zapisz ładowanie"
|
||||
},
|
||||
"import": {
|
||||
"title": "Importuj samochód",
|
||||
@@ -597,6 +626,241 @@
|
||||
"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 2015–2020 · 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."
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user