Laufende-Uhr-Leiste auf allen /m-Seiten, Start/Pause direkt auf den Auftragskarten, Auto-Wechsel-Dialog, Auftragsdetail mit Pause / Für heute beenden / Abschließen-Link und Segmentwechseln, /m/time (Tagesübersicht, Nachtragen, Korrektur vorschlagen), /m/approvals für Teamleiter, /work-orders/time-approvals mit Sammelfreigabe, Zeiten-Tab mit Badges und Inline-Freigabe, Dashboard-Kachel, Texte de/en. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
441 lines
14 KiB
JSON
441 lines
14 KiB
JSON
{
|
||
"nav": {
|
||
"label": "Field navigation",
|
||
"today": "Today",
|
||
"orders": "Orders",
|
||
"emergency": "Emergency",
|
||
"sync": "Sync",
|
||
"profile": "Profile",
|
||
"approvalsBadge": "{count} time entries to approve"
|
||
},
|
||
"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",
|
||
"running": "Time running",
|
||
"paused": "Paused",
|
||
"enRoute": "On the way",
|
||
"startWork": "Start work",
|
||
"pause": "Pause",
|
||
"resume": "Resume"
|
||
},
|
||
"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.",
|
||
"stop_day": "Stop for today",
|
||
"confirmStopDay": "Stop for today now",
|
||
"stopDayHint": "Time recording ends, the order stays open and can be continued tomorrow.",
|
||
"completeLink": "Complete order …",
|
||
"segment": {
|
||
"return_travel": "Start return trip",
|
||
"material_procurement": "Fetch material",
|
||
"work": "Back to work"
|
||
},
|
||
"currentSegment": "Current: {type}"
|
||
},
|
||
"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",
|
||
"manual": "Recorded later"
|
||
},
|
||
"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}",
|
||
"propose": "Propose correction",
|
||
"totalPending": "Awaiting approval: {duration}",
|
||
"ownEntryHint": "Correct your own time via “Propose correction”."
|
||
},
|
||
"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",
|
||
"myTime": "My time",
|
||
"approvals": "Approve time"
|
||
},
|
||
"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"
|
||
},
|
||
"clock": {
|
||
"label": "Running time recording",
|
||
"running": "Running",
|
||
"paused": "Paused",
|
||
"enRoute": "Travel",
|
||
"openOrder": "Open order {number}",
|
||
"pause": "Pause",
|
||
"resume": "Resume",
|
||
"stopDay": "Stop for today",
|
||
"stopDayConfirm": "Stop?",
|
||
"myTime": "My time",
|
||
"offline": "offline"
|
||
},
|
||
"switch": {
|
||
"title": "Another time recording is running",
|
||
"text": "{from} is still running. Pause it and start {to}?",
|
||
"textUnknown": "Time is still running on another order. Pause it and start {to}?",
|
||
"confirm": "Switch",
|
||
"cancel": "Cancel"
|
||
},
|
||
"myTime": {
|
||
"title": "My time",
|
||
"sub": "Your time per day across all orders.",
|
||
"today": "Today",
|
||
"yesterday": "Yesterday",
|
||
"days": "Choose day",
|
||
"empty": "No time recorded on this day.",
|
||
"approved": "Approved",
|
||
"pending": "Awaiting approval",
|
||
"dayTotal": "Day total",
|
||
"totalApproved": "Approved: {duration}",
|
||
"totalPending": "Open: {duration}",
|
||
"add": "Add time",
|
||
"running": "running",
|
||
"badge": {
|
||
"manual": "Manual",
|
||
"pending": "Awaiting approval",
|
||
"rejected": "Rejected: {reason}",
|
||
"correctionRequested": "Correction requested",
|
||
"correctionRejected": "Correction rejected: {reason}",
|
||
"corrected": "Corrected"
|
||
},
|
||
"proposed": "Proposal: {from}–{to} · {type}",
|
||
"localPending": "Waiting to be sent",
|
||
"localTitle": "Not sent yet",
|
||
"form": {
|
||
"title": "Add time",
|
||
"order": "Order",
|
||
"orderPlaceholder": "Choose order",
|
||
"noOrders": "No orders from the last 7 days available.",
|
||
"forUser": "For",
|
||
"me": "Myself",
|
||
"type": "Type",
|
||
"date": "Date",
|
||
"mode": "Entry",
|
||
"modeRange": "From – to",
|
||
"modeDuration": "Duration",
|
||
"from": "From",
|
||
"to": "To",
|
||
"duration": "Duration in minutes",
|
||
"quick": "{minutes} min",
|
||
"reason": "Reason",
|
||
"reasonHint": "Required, at least 3 characters.",
|
||
"note": "Note (optional)",
|
||
"approvalHint": "Counts once approved by the team lead or office.",
|
||
"directHint": "Time recorded for team members is approved immediately.",
|
||
"save": "Save entry",
|
||
"saved": "Entry saved – awaiting approval.",
|
||
"savedDirect": "Time saved.",
|
||
"queued": "Saved offline – will be sent once connected.",
|
||
"cancel": "Cancel"
|
||
},
|
||
"correction": {
|
||
"title": "Propose correction",
|
||
"hint": "The current time stays valid until approved.",
|
||
"save": "Send proposal",
|
||
"saved": "Correction requested."
|
||
},
|
||
"reasons": {
|
||
"forgotStart": "Forgot to start",
|
||
"noNetwork": "No network",
|
||
"recordedLater": "Recorded afterwards"
|
||
},
|
||
"errors": {
|
||
"overlap": "The period overlaps with time already recorded.",
|
||
"too_old": "Time can only be added for the last 7 days.",
|
||
"in_future": "The time must not be in the future.",
|
||
"too_long": "An entry may be at most 16 hours long.",
|
||
"end_before_start": "The end must be after the start.",
|
||
"work_order_status": "Time can no longer be recorded for this order.",
|
||
"not_own_entry": "You can only correct your own time.",
|
||
"own_entry": "You cannot approve your own time.",
|
||
"entry_running": "The time is still running."
|
||
}
|
||
},
|
||
"approvals": {
|
||
"title": "Approve time",
|
||
"sub": "Added entries and corrections of your team.",
|
||
"empty": "No open entries or corrections.",
|
||
"link": "Approve time",
|
||
"count": "{count, plural, =0 {Nothing open} one {# open} other {# open}}",
|
||
"manual": "Added entry",
|
||
"correction": "Correction",
|
||
"reason": "Reason",
|
||
"note": "Note",
|
||
"old": "Before",
|
||
"new": "New",
|
||
"approve": "Approve",
|
||
"reject": "Reject",
|
||
"rejectReason": "Reason for rejection",
|
||
"rejectConfirm": "Send rejection",
|
||
"cancel": "Cancel",
|
||
"approved": "Approved.",
|
||
"rejected": "Rejected."
|
||
},
|
||
"pendingTime": {
|
||
"report": "Note: {duration} of added time is not approved yet and missing from the report.",
|
||
"proposals": "Note: {count, plural, one {# time correction is} other {# time corrections are}} awaiting approval."
|
||
}
|
||
}
|