Files
craftvia/messages/en/field.json
T
msolarczekandClaude Opus 5 95f41b29f5 L4 Einsatz mobil: Mobile Shell und Einsatz-Oberfläche
- /m in eigene Route-Group (field)/m verschoben (emergency-Platzhalter mit),
  Zugriffsprüfungen aus (app)/layout.tsx nach server/app-access.ts extrahiert
  und von Backoffice- und Mobile-Shell gemeinsam genutzt
- Mobile Shell mit Bottom-Nav (Heute · Aufträge · Notdienst · Sync · Profil)
  und Online/Offline-Badge; Startseite rollenabhängig (Feldrollen → /m),
  Login-Default-Redirect auf /
- Heute, Auftragsliste mit Tabs, Auftragsdetail mit einer Primäraktion je
  Zustand, Unterseiten Fotos (Kamera, Kompression, Upload-Fortschritt),
  Notizen + Sprachaufnahme, Material mit Stepper, Checkliste, Zeiten mit
  Korrektur, Profil; Sync-Platzhalter für L7
- Client-Wrapper submitOp (lib/field/client-ops.ts), Upload mit Fortschritt,
  Bildkompression, Formatierung; Texte in messages/{de,en}/field.json

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 12:30:03 +02:00

299 lines
8.7 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.
{
"nav": {
"label": "Field navigation",
"today": "Today",
"orders": "Orders",
"emergency": "Emergency",
"sync": "Sync",
"profile": "Profile"
},
"connection": {
"online": "Online",
"offline": "Offline"
},
"noAccess": "The field app is not enabled for your role.",
"today": {
"title": "Today",
"greeting": "Hello {name}",
"count": "{count, plural, =0 {No jobs} one {# job} other {# jobs}}",
"empty": "No jobs scheduled for today.",
"allOrders": "View all orders"
},
"orders": {
"title": "Orders",
"tabs": {
"upcoming": "Upcoming",
"running": "Ongoing",
"to_complete": "To complete",
"past": "Past"
},
"empty": "No orders in this list."
},
"card": {
"open": "Open order",
"route": "Route",
"noDate": "No date",
"emergency": "Emergency",
"urgent": "Urgent",
"high": "High"
},
"statusGroup": {
"new": "New",
"planned": "Planned",
"en_route": "On the way",
"in_progress": "In progress",
"documentation_incomplete": "Documentation incomplete",
"in_review": "In review",
"ready_for_billing": "Ready for billing",
"billed": "Billed",
"cancelled": "Cancelled"
},
"statusDetail": {
"draft": "Draft",
"review_required": "Review required",
"planned": "Planned",
"assigned": "Assigned",
"accepted": "Accepted",
"en_route": "On the way",
"in_progress": "In progress",
"paused": "Paused",
"waiting_material": "Waiting for material",
"daily_report_created": "Daily report created",
"technically_completed": "Technically completed",
"signature_pending": "Signature pending",
"in_review": "In review",
"released_for_billing": "Ready for billing",
"billed": "Billed",
"cancelled": "Cancelled"
},
"action": {
"accept": "Accept",
"travel": "Leave now",
"start": "Start work",
"pause": "Pause",
"resume": "Resume",
"complete": "Complete",
"confirmComplete": "Complete now",
"confirmHint": "Time tracking stops and the order is marked technically completed.",
"saving": "Saving …",
"blocked": "Still missing before completion:",
"reportNext": "Report and signature follow in the next step.",
"nothing": "No action required."
},
"blocker": {
"checklist_item": "Checklist: {label}",
"photo_requirement": "Required photo: {label}",
"running_session": "A team member's time tracking is still running",
"missing_field": "Missing: {label}"
},
"errors": {
"not_found": "Not found or not shared with you.",
"forbidden": "You are not allowed to do this.",
"invalid": "Please check your input.",
"conflict": "The order was changed in the meantime. The view has been refreshed.",
"blocked": "Required information is still missing.",
"internal": "Technical error. Please try again.",
"network": "No connection. Please try again.",
"image": "The photo could not be processed."
},
"detail": {
"back": "Back",
"backToOrder": "Back to order",
"window": "Time window",
"hints": "Notes for technicians",
"order": "Order",
"orderType": "Order type",
"externalNumber": "Customer order",
"team": "Team",
"scope": "Scope of work",
"description": "Description",
"customer": "Customer",
"contact": "Contact",
"onSiteContact": "On site",
"call": "Call",
"mail": "Email",
"site": "Site",
"route": "Open route",
"access": "Access",
"parking": "Parking",
"safety": "Safety",
"technical": "Technical",
"documents": "Documents",
"noDocuments": "No documents.",
"siteDocument": "Site",
"openDocument": "Open",
"history": "Site history",
"noHistory": "No approved reports at this site.",
"reportType": {
"daily": "Daily report",
"completion": "Completion report"
},
"checklist": "Checklist",
"checklistProgress": "{done} of {total} done",
"materials": "Material",
"materialsProgress": "{done} of {total} items recorded",
"materialsNone": "No material planned",
"photos": "Photos",
"photosProgress": "{count} photos · {done} of {total} required photos",
"photosCount": "{count} photos",
"notes": "Notes",
"notesCount": "{count, plural, =0 {No notes yet} one {# note} other {# notes}}",
"time": "Time",
"myTime": "My working time: {duration}",
"quick": {
"photo": "Photo",
"note": "Note",
"material": "Material",
"checklist": "Checklist",
"time": "Time"
}
},
"photos": {
"title": "Photos",
"camera": "Camera",
"gallery": "Gallery",
"phaseLabel": "When",
"phase": {
"before": "Before",
"during": "During",
"after": "After"
},
"requirement": "Required photo",
"checklistItem": "Checklist item",
"none": "Not assigned",
"comment": "Comment",
"location": "Include location",
"save": "Save photo",
"discard": "Discard",
"preview": "Photo preview",
"compressing": "Resizing photo …",
"uploading": "Uploading … {percent} %",
"saved": "Photo saved.",
"empty": "No photos yet.",
"requirements": "Required photos",
"missing": "Missing",
"done": "Present"
},
"notes": {
"title": "Notes",
"kindLabel": "Type",
"kind": {
"work_done": "Work done",
"deviation": "Deviation",
"problem": "Problem",
"additional_work": "Additional work",
"not_executable": "Not feasible",
"follow_up": "Follow-up work",
"recommendation": "Recommendation",
"customer_note": "Customer note",
"general": "General"
},
"text": "Note",
"placeholder": "Briefly describe what happened on site …",
"save": "Save note",
"saved": "Note saved.",
"draftKept": "Draft is kept on this device.",
"empty": "No notes yet."
},
"voice": {
"title": "Voice note",
"record": "Start recording",
"stop": "Stop recording",
"recording": "Recording · {time} of 5:00",
"save": "Save voice note",
"discard": "Discard",
"saved": "Voice note saved.",
"unsupported": "Voice recording is not supported on this device.",
"denied": "Microphone access is not granted.",
"status": {
"pending": "Transcription running",
"done": "Transcribed",
"failed": "Transcription failed",
"disabled": "No transcription"
}
},
"materials": {
"title": "Material",
"planned": "Planned: {quantity} {unit}",
"usage": {
"fully_used": "Fully used",
"partially_used": "Partially used",
"not_used": "Not used",
"additional": "Additional"
},
"quantity": "Quantity",
"unit": "Unit",
"decrease": "Decrease quantity",
"increase": "Increase quantity",
"reason": "Reason for deviation",
"reasonRequired": "A reason is required for deviations.",
"save": "Save",
"saved": "Saved.",
"recorded": "Recorded: {quantity} {unit}",
"open": "Open",
"noPlan": "No material planned.",
"additionalTitle": "Additional material",
"additionalEmpty": "No additional material recorded.",
"name": "Name",
"articleNumber": "Article number (optional)",
"additionalReason": "Reason",
"add": "Save additional material",
"invalid": "Incomplete input or quantity does not match the status."
},
"checklist": {
"title": "Checklist",
"required": "Required",
"photo": "Photo needed",
"done": "Done",
"open": "Open",
"comment": "Comment",
"saveComment": "Save comment",
"empty": "This order has no checklist."
},
"time": {
"title": "Time",
"type": {
"travel": "Travel",
"work": "Working time",
"break": "Break",
"material_procurement": "Material procurement",
"return_travel": "Return travel",
"interruption": "Interruption"
},
"session": {
"en_route": "On the way",
"running": "Running",
"paused": "Paused",
"ended": "Ended"
},
"running": "running",
"offlineStarted": "started offline",
"corrected": "Corrected: {reason}",
"correct": "Correct",
"start": "Start",
"end": "End",
"reason": "Reason for correction",
"reasonHint": "Required, will be logged.",
"save": "Save correction",
"saved": "Correction saved.",
"empty": "No time recorded yet.",
"totalWork": "Total working time: {duration}"
},
"profile": {
"title": "Profile",
"tenant": "Company",
"teams": "Team",
"noTeam": "Not assigned to a team",
"roles": "Role",
"language": "Language",
"logout": "Sign out",
"backoffice": "Go to office area"
},
"sync": {
"title": "Synchronisation",
"immediate": "Changes are sent to the office immediately.",
"offlineHint": "Without a connection, entries cannot be buffered yet – the offline queue will follow.",
"status": "Connection"
}
}