Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

1505 lines
67 KiB
JSON

{
"title": "Projects",
"subtitle": "Overview of your current and past projects",
"searchPlaceholder": "Search projects...",
"allStatuses": "All Statuses",
"resetFilters": "Reset",
"active": "Active Projects",
"completed": "Completed Projects",
"onHold": "On Hold",
"timeline": "Timeline",
"milestones": "Milestones",
"phasesAndTasks": "Phases & Tasks",
"kanbanView": "Kanban",
"listView": "List",
"task": "task",
"tasks": {
"title": "Tasks",
"noTasks": "No tasks to display",
"taskName": "Name",
"dueDate": "Due Date",
"status": "Status",
"assignedTo": "Assigned To",
"assignee": "Assignee",
"estimatedHours": "Estimated Hours",
"estHours": "Est. Hours",
"hoursLogged": "Hours Logged",
"checklist": "Checklist",
"dependencies": "Deps",
"priority": "Priority",
"services": "Services",
"attachments": "Attachments",
"actualHours": "Actual Hours",
"createdAt": "Created At",
"updatedAt": "Updated At",
"assignedTeam": "Assigned Team",
"phase": "Phase",
"priorityLevel": "Priority level",
"seeLess": "See less",
"seeMore": "See more",
"checklistItems": "Checklist Items",
"of": "of",
"complete": "complete",
"additionalAgents": "Additional Agents",
"unassigned": "Unassigned"
},
"phases": {
"title": "Project Phases",
"completion": "Complete",
"noPhases": "No phases to display",
"statusColumns": "Status columns",
"statusColumnsProjectDefaults": "Project defaults",
"statusColumnsCustom": "Custom ({{count}} statuses)",
"configureStatuses": "Configure",
"phaseName": "Phase Name",
"phaseDescription": "Phase Description",
"descriptionPlaceholder": "Description",
"startDate": "Start Date",
"startDatePlaceholder": "Start date",
"endDate": "End Date",
"endDatePlaceholder": "End date",
"cancelEditing": "Cancel editing",
"saveChanges": "Save changes",
"editPhase": "Edit phase",
"deletePhase": "Delete phase",
"cancel": "Cancel",
"save": "Save",
"taskCount_other": "{{count}} tasks",
"startLabel": "Start",
"dueLabel": "Due",
"notSet": "Not set",
"taskCount_one": "{{count}} task"
},
"projectList": {
"addProject": "Add Project",
"createFromTemplate": "Create from Template",
"openMenu": "Open menu",
"searchPlaceholder": "Search projects, tasks, and comments",
"statusPlaceholder": "Select status",
"contactPlaceholder": "Filter by contact",
"managerPlaceholder": "All managers",
"deadlinePlaceholder": "Filter by deadline",
"deletedSuccess": "Project deleted successfully",
"deleteValidationFailed": "Failed to validate deletion. Please try again.",
"deleteFailed": "Failed to delete project.",
"statusUnknown": "Unknown",
"notAvailable": "N/A",
"noClient": "No Client",
"noContact": "No Contact",
"unassigned": "Unassigned",
"thisProject": "this project",
"statusOptions": {
"all": "All projects",
"active": "Active projects",
"inactive": "Inactive projects"
},
"columns": {
"number": "Number",
"projectName": "Project Name",
"client": "Client",
"contact": "Contact",
"status": "Status",
"deadline": "Deadline",
"created": "Created",
"projectManager": "Project Manager",
"tags": "Tags",
"priority": "Priority",
"taskType": "Type",
"actions": "Actions"
},
"unknownUser": "Unknown"
},
"quickAdd": {
"title": "Add New Project",
"projectNamePlaceholder": "Project Name *",
"descriptionPlaceholder": "Description",
"statusLabel": "Status *",
"statusPlaceholder": "Select Status",
"clientLabel": "Client *",
"contactLabel": "Contact",
"contactPlaceholder": "Select Contact",
"projectManagerLabel": "Project Manager",
"projectManagerPlaceholder": "Select Assignee",
"budgetedHoursLabel": "Budgeted Hours",
"budgetedHoursPlaceholder": "Enter budgeted hours",
"startDateLabel": "Start Date",
"startDatePlaceholder": "Select start date",
"endDateLabel": "End Date",
"endDatePlaceholder": "Select end date",
"clientPortalVisibility": "Client Portal Visibility",
"validationTitle": "Please fix the following errors:",
"projectNameRequired": "Project name is required",
"clientRequired": "Client is required",
"projectStatusRequired": "Project status is required",
"taskStatusRequired": "At least one task status must be selected",
"creating": "Creating...",
"create": "Create Project",
"createdSuccess": "Project created successfully",
"tagCreatePartialError": "{{count}} tag(s) could not be created",
"createError": "Failed to create project. Please try again."
},
"projectEdit": {
"projectNameLabel": "Project Name *",
"projectNamePlaceholder": "Enter project name...",
"descriptionPlaceholder": "Enter project description...",
"statusLabel": "Status *",
"statusPlaceholder": "Select Status",
"contactLabel": "Contact",
"contactPlaceholder": "Select Contact",
"budgetedHoursLabel": "Budgeted Hours",
"budgetedHoursPlaceholder": "Enter budgeted hours",
"tagsLabel": "Tags",
"startDatePlaceholder": "Select start date",
"endDatePlaceholder": "Select end date",
"clientPortalVisibility": "Client Portal Visibility",
"validationTitle": "Please fill in the required fields:",
"updatedSuccess": "Project updated successfully",
"updateError": "Failed to update project",
"unsavedTitle": "Unsaved Changes",
"unsavedMessage": "You have unsaved changes. Are you sure you want to cancel?",
"saveTitle": "Save Changes",
"saveMessage": "Are you sure you want to save your changes and close the drawer?",
"continueEditing": "Continue Editing",
"discardChanges": "Discard Changes",
"saveAndClose": "Save and Close",
"saving": "Saving..."
},
"projectDetail": {
"allAgents": "All Agents",
"primaryAssigneeOnly": "Only show tasks where selected agent is the primary assignee",
"taskType": "Task Type",
"priority": "Priority",
"searchTasksPlaceholder": "Search tasks...",
"caseSensitive": "Case sensitive",
"wholeWord": "Whole word",
"wholeWordShort": "Word",
"clearSearch": "Clear search",
"taskList": "Task List",
"kanbanBoard": "Kanban Board",
"kanbanBoardWithPhase": "Kanban Board: {{phaseName}}",
"selectPhaseToViewKanban": "Please select or create a phase to view the Kanban board.",
"selectPhaseToAddCard": "Please select a phase before adding a card.",
"selectPhaseToAddTask": "Please select a phase before adding a task.",
"showPhasesPanel": "Show phases panel",
"hidePhasesPanel": "Hide phases panel",
"phaseHelp": "A phase is a distinct stage or milestone in your project timeline. Each phase can contain multiple tasks and helps organize work into manageable sections.",
"phaseNameRequired": "Phase name cannot be empty",
"phaseAddedSuccess": "New phase added successfully!",
"phaseUpdatedSuccess": "Phase updated successfully!",
"phaseDeletedSuccess": "Phase deleted successfully!",
"phaseReorderedSuccess": "Phase reordered successfully",
"taskAddedSuccess": "New task added successfully!",
"taskPhaseMismatch": "Error adding new task: Phase mismatch",
"taskDeletedGeneric": "Task deleted successfully!",
"taskDeletedSuccess": "Task \"{{taskName}}\" deleted successfully!",
"taskMovedSuccess": "Task \"{{taskName}}\" moved successfully!",
"taskMovedCrossPhaseSuccess": "Task \"{{taskName}}\" moved to different phase successfully! Switch to the target phase to see it.",
"taskMovedToPhase": "Task moved to {{phaseName}}",
"taskStatusUpdated": "Task status updated",
"taskMovedToNewPhase": "Task moved to new phase",
"taskMovedToNewStatus": "Task moved to new status",
"taskReordered": "Task reordered",
"tasksReorderedSuccess": "Tasks reordered successfully",
"commentCountsLoadError": "Failed to load comment counts",
"taskAssigneeUpdatedSuccess": "Task assignee updated successfully!",
"teamAssignedSuccess": "Team assigned successfully",
"assignTeamFailed": "Failed to assign team",
"taskDuplicatedSuccess": "Task \"{{taskName}}\" duplicated successfully!",
"duplicateNoTargetPhase": "Could not find a target phase to duplicate to.",
"taskNotFound": "Task not found",
"taskPhaseNotFound": "Task phase not found",
"allTypes": "All Types",
"primaryShort": "Primary",
"deletePhaseTitle": "Delete Phase",
"deletePhaseMessage": "Are you sure you want to delete phase \"{{phaseName}}\"? This will also delete all tasks and their checklists in this phase.",
"deleteTaskTitle": "Delete Task",
"deleteTaskMessage": "Are you sure you want to delete task \"{{taskName}}\"? This action cannot be undone.",
"moveTaskTitle": "Move Task",
"confirmMoveTaskMessage": "Are you sure you want to move task \"{{taskName}}\" from phase \"{{sourcePhase}}\" to \"{{targetPhase}}\"?",
"moveTaskFailed": "Failed to move task. Please try again.",
"loading": "Loading...",
"loadingListView": "Loading list view...",
"importSuccess": "Imported {{phases}} phases and {{tasks}} tasks",
"importFailed": "Import failed: {{error}}",
"completionSummary": "{{completed}} / {{total}} Done",
"selectedPhaseCompletionHelp": "Shows the percentage of completed tasks for the selected phase \"{{phaseName}}\" only",
"showStickyStatusNames": "Show sticky status names",
"hideStickyStatusNames": "Hide sticky status names",
"pinHeader": "Pin header to top",
"unpinHeader": "Unpin header",
"showHideColumns": "Show/hide columns",
"columns": "Columns",
"showAll": "Show all",
"noColumns": "No columns available",
"allColumnsHidden": "All columns are hidden",
"allColumnsHiddenHint": "Show one or more columns to see your tasks.",
"showAllColumns": "Show all columns",
"hideColumn": "Hide column",
"showColumn": "Show column",
"addTask": "Add Task",
"taskUpdatedSuccess": "Task updated successfully!",
"hiddenColumnsAlert": "{{count}} columns hidden due to limited space. Resize browser to see more.",
"listViewEmptyMessage": "Create phases and add tasks to see them here",
"seeMore": "See more",
"seeLess": "See less",
"checklistItems": "Checklist Items:",
"checklistSummary": "{{completed}} of {{total}} complete",
"unknownUser": "Unknown",
"blocksLabel": "Blocks:",
"taskCardAria": "Task: {{taskName}}. Drag to reorder or use menu for actions.",
"taskActions": "Task Actions",
"priorityLevel": "Priority level: {{priority}}",
"dueLabel": "Due",
"noDueDate": "No due date",
"hideTags": "Hide tags",
"criticalPath": "Critical Path",
"selectTaskAria": "Select task {{taskName}}",
"bulkMoveSuccess": "{{count}} task(s) moved successfully!",
"bulkMovePartial": "Moved {{moved}} task(s), {{failed}} failed.",
"bulkDeleteSuccess": "{{count}} task(s) deleted successfully!",
"bulkDeletePartial": "Deleted {{deleted}} task(s), {{failed}} failed.",
"bulkAssignSuccess": "{{count}} task(s) assigned successfully!",
"bulkAssignPartial": "Assigned {{success}} task(s), {{failed}} failed.",
"bulkAssignTeamSuccess": "{{count}} task(s) assigned to team successfully!",
"bulkAssignTeamPartial": "Assigned {{success}} task(s) to team, {{failed}} failed.",
"bulkTagsSuccess_one": "Tags added to {{count}} task",
"bulkTagsSuccess_other": "Tags added to {{count}} tasks",
"bulkTagsPartial": "Tags could not be added to some tasks",
"bulkTagsFailure": "Failed to add tags to selected tasks",
"bulkDeleteTitle": "Delete Tasks",
"bulkDeleteMessage": "Are you sure you want to delete {{count}} selected task(s)? This action cannot be undone.",
"bulkTasksMovedSuccess": "{{count}} tasks moved",
"bulkTasksMovedToPhase": "{{count}} tasks moved to {{phaseName}}",
"moveTasksTitle": "Move Tasks",
"confirmMoveTasksMessage": "Are you sure you want to move {{count}} selected tasks to phase \"{{targetPhase}}\"?"
},
"taskForm": {
"addTitle": "Add New Task",
"editTitle": "Edit Task",
"taskNameLabel": "Task Name *",
"taskNameRequired": "Task name",
"taskNamePlaceholder": "Enter task name...",
"descriptionLabel": "Description",
"descriptionPlaceholder": "Add task description...",
"dueDateLabel": "Due Date",
"taskDueDateLabel": "Task Due Date",
"dueDatePlaceholder": "Select due date",
"serviceLabel": "Service (for time entries)",
"noService": "No service",
"servicePlaceholder": "Select service for time entry prefill...",
"serviceHelp": "When set, this service will be automatically selected when creating time entries from this task.",
"taskTypeLabel": "Task Type",
"priorityLabel": "Priority",
"selectPriorityPlaceholder": "Select priority",
"estimatedHoursLabel": "Estimated Hours",
"actualHoursLabel": "Actual Hours",
"assignedToLabel": "Assigned To",
"additionalAgentsLabel": "Additional Agents",
"addTeamMembers": "Add Team Members",
"additionalAgentsPlaceholder": "Select additional agents...",
"createdAtLabel": "Created At",
"moveToLabel": "Move to",
"moveToPlaceholder": "Select move destination...",
"duplicateToLabel": "Duplicate to",
"duplicateToPlaceholder": "Select duplicate destination...",
"loading": "Loading...",
"noValidProjects": "No projects available with valid phases and statuses",
"loadProjectDataFailed": "Error loading project data. Please try again.",
"validationTitle": "Please fill in the required fields:",
"agentAddedSuccess": "Agent added successfully",
"agentPendingSave": "Agent will be added when task is saved",
"teamAssignedSuccess": "Team assigned successfully",
"assignTeamFailed": "Failed to assign team",
"teamRemovedSuccess": "Team removed successfully",
"teamRemoveFailed": "Failed to remove team assignment",
"removeTeamAssignment": "Remove team assignment",
"switchTeamAssignment": "Switch team assignment",
"removeTeamMode": {
"removeAll": "Remove all team members",
"keepAll": "Keep all team members as individual agents",
"selective": "Select individual members to keep/remove",
"selectiveHint": "Check members to keep on the task as individual agents. Unchecked members will be removed."
},
"noTeamMembersFound": "No team members found on this task.",
"unnamedUser": "Unnamed User",
"linkingPartialFailure": "Task created but failed to link some items",
"tagCreationPartialFailure": "{{count}} tag(s) could not be created",
"saveFailed": "Failed to save task",
"deleteFailed": "Failed to delete task",
"moveFailed": "Failed to move task",
"prepareTimeEntryFailed": "Failed to prepare time entry. Please try again.",
"addAgentFailed": "Failed to add agent",
"removeAgentFailed": "Failed to remove agent",
"duplicateFailed": "Failed to duplicate task.",
"saveBeforeTimeEntry": "Please save the task before adding time entries",
"addTimeEntry": "Add Time Entry",
"primaryAgentRequired": "Primary agent is required when additional agents are assigned",
"keepCreatedTicketsTitle": "Keep Created Tickets?",
"keepCreatedTicketsMessage": "Would you like to keep these tickets or delete them?",
"createdTicketsIntro_one": "You created {{count}} ticket during this session:",
"createdTicketsIntro_other": "You created {{count}} tickets during this session:",
"keepUploadedDocumentsTitle": "Keep Uploaded Documents?",
"keepUploadedDocumentsMessage": "Would you like to keep these documents in the Documents section or delete them?",
"documentsCleanupIntro_one": "You have {{count}} document that was {{cleanupType}}:",
"documentsCleanupIntro_other": "You have {{count}} documents that were {{cleanupType}}:",
"uploadedOrCreated": "uploaded or created",
"createdOnly": "created",
"uploadedOnly": "uploaded",
"createdDocumentTag": "created",
"uploadedDocumentTag": "uploaded",
"andMore": "...and {{count}} more",
"documentCleanupFailure_one": "{{count}} document could not be deleted and will remain in Documents",
"documentCleanupFailure_other": "{{count}} documents could not be deleted and will remain in Documents",
"ticketCleanupFailure_one": "{{count}} ticket could not be deleted",
"ticketCleanupFailure_other": "{{count}} tickets could not be deleted",
"checklistItemPlaceholder": "Checklist item",
"reorderChecklistItem": "Drag to reorder",
"insertChecklistItem": "Insert item here",
"editChecklistItem": "Edit checklist item",
"removeChecklistItem": "Remove checklist item",
"tagsTitle": "Tags",
"checklistTitle": "Checklist",
"createFromTicket": "Create from ticket",
"deletingTitle": "Delete Task",
"deleteMessage": "Are you sure you want to delete task \"{{taskName}}\"? This action cannot be undone.",
"movingTitle": "Move Task",
"move": "Move",
"moveMessage": "Are you sure you want to move task \"{{taskName}}\" to phase \"{{phaseName}}\"?",
"cancelCreateTitle": "Cancel Task Creation",
"cancelEditTitle": "Cancel Edit",
"cancelMessage": "Are you sure you want to cancel? Any unsaved changes will be lost.",
"unsavedTitle": "Unsaved Changes",
"dependencyUnsavedMessage": "You have a dependency selected but not yet added. Click the purple + button to add it, or discard the selection and save.",
"discardChanges": "Discard changes",
"continueEditing": "Continue editing",
"deleteDocumentsLabel": "Delete documents",
"keepDocumentsLabel": "Keep documents",
"deleteTicketsLabel": "Delete tickets",
"keepTicketsLabel": "Keep tickets",
"deleting": "Deleting...",
"save": "Save",
"update": "Update",
"adding": "Adding...",
"updating": "Updating...",
"deletedSuccess": "Task deleted successfully",
"movedSuccess": "Task moved successfully",
"duplicatedSuccess": "Task \"{{taskName}}\" duplicated successfully!",
"willBeSetOnCreate": "Will be set on creation",
"unknownPhase": "Unknown Phase"
},
"taskDependencies": {
"title": "Dependencies",
"dependsOn": "Depends on:",
"blocks": "Blocks",
"blockedBy": "Blocked by",
"relatedTo": "Related to",
"unknownTask": "Unknown task",
"noOtherTasks": "No other tasks available for dependencies",
"selectTaskPlaceholder": "Select task...",
"selectNewTaskPlaceholder": "Select new task...",
"cancelEdit": "Cancel edit",
"editDependency": "Edit dependency",
"removeDependency": "Remove dependency",
"addError": "Failed to add dependency",
"removeError": "Failed to remove dependency",
"updateError": "Failed to update dependency"
},
"taskDocuments": {
"attachmentsTitle": "Attachments",
"createNew": "Create new document",
"linkExisting": "Link existing document",
"newButton": "New",
"uploadButton": "Upload",
"linkButton": "Link",
"remove": "Remove",
"unsavedTitle": "Unsaved Changes",
"unsavedMessage": "Are you sure you want to cancel? Any unsaved changes will be lost.",
"discardChanges": "Discard changes",
"continueEditing": "Continue editing",
"uploadFile": "Upload file",
"documentNamePlaceholder": "Document Name",
"fileAttachment": "This is a file attachment",
"noDocumentsAttached": "No documents attached",
"loginToCreateError": "Please log in to create documents",
"documentNameRequired": "Document name is required",
"loginToSaveError": "Please log in to save documents",
"createdSuccess": "Document created successfully",
"updatedSuccess": "Document updated successfully",
"loginToUploadError": "Please log in to upload documents",
"uploadedSuccess": "Document uploaded successfully",
"removedSuccess": "Document removed",
"removedFromTaskSuccess": "Document removed from task",
"loadFailed": "Failed to load documents",
"loadContentFailed": "Failed to load document content",
"createFailed": "Failed to create document",
"saveFailed": "Failed to save document",
"removeFailed": "Failed to remove document",
"downloadFailed": "Failed to download document",
"downloadFailedGeneric": "Download failed",
"exportPdfFailed": "Failed to export PDF",
"documentFallbackName": "document",
"downloadFallbackName": "download",
"newDocumentTitle": "New Document",
"editDocumentTitle": "Edit Document",
"viewDocumentTitle": "View Document",
"pdfLabel": "PDF",
"save": "Save",
"saving": "Saving...",
"downloadFile": "Download File",
"selectFolderTitle": "Select Folder for New Document",
"selectFolderDescription": "Choose where to save this new document"
},
"taskTicketLinks": {
"title": "Associated Tickets",
"restrictedTooltip": "Limited details — you are not assigned to this ticket",
"linkExistingTitle": "Link Existing Ticket",
"createTicket": "Create Ticket",
"linkTicket": "Link Ticket",
"selectTicket": "Select Ticket",
"selectTicketPlaceholder": "Select a ticket",
"searchTicketsPlaceholder": "Search tickets...",
"categoryPlaceholder": "Category",
"assignedToLabel": "Assigned To",
"boardLabel": "Board",
"statusLabel": "Status",
"priorityLabel": "Priority",
"allStatuses": "All Statuses",
"allPriorities": "All Priorities",
"allPhases": "All phases",
"searchFilterLabel": "Search: {{value}}",
"categoriesFilterLabel": "Categories: {{count}}",
"assignedFilterLabel": "Assigned: {{name}}",
"boardFilterLabel": "Board: {{name}}",
"priorityFilterLabel": "Priority: {{label}}",
"statusFilterLabel": "Status: {{label}}",
"linkToTaskLabel": "Link this ticket to the task",
"duplicateError": "This ticket is already linked to this task",
"linkedSuccess": "Ticket linked successfully",
"linkFailed": "Failed to link ticket",
"removedSuccess": "Ticket link removed",
"removeFailed": "Failed to remove ticket link",
"invalidTicketId": "Invalid ticket ID",
"createdAndLinkedSuccess": "Ticket created and linked successfully",
"createdSuccess": "Ticket created successfully",
"linkNewFailed": "Failed to link new ticket",
"linkedToTaskSuccess": "Ticket linked to task successfully",
"failedLoadTask": "Failed to load task",
"clientFallback": "Client",
"defaultNewStatus": "New"
},
"materials": {
"title": "Project Materials",
"product": "Product",
"selectProductPlaceholder": "Select a product...",
"searchProductsPlaceholder": "Search products...",
"noProductsFound": "No products found",
"price": "Price",
"selectCurrencyPlaceholder": "Select currency...",
"quantity": "Quantity",
"total": "Total",
"descriptionOptional": "Description (optional)",
"notesPlaceholder": "Additional notes...",
"noClientAssigned": "A client must be assigned to this project before materials can be added.",
"loadingMaterials": "Loading materials...",
"loadingPrices": "Loading prices...",
"noMaterials": "No materials added to this project.",
"noPricesConfigured": "No prices configured for this product",
"selectProductError": "Please select a product",
"selectCurrencyError": "Please select a currency",
"quantityMinError": "Quantity must be at least 1",
"loadFailed": "Failed to load materials",
"addFailed": "Failed to add material",
"removeFailed": "Failed to remove material",
"adding": "Adding...",
"addMaterial": "Add Material",
"addedSuccess": "Material added",
"removedSuccess": "Material removed",
"productColumn": "Product",
"qtyColumn": "Qty",
"rateColumn": "Rate",
"totalColumn": "Total",
"statusColumn": "Status",
"unknownProduct": "Unknown Product",
"billed": "Billed",
"pending": "Pending",
"unbilledTotal": "Unbilled ({{currency}}): "
},
"export": {
"title": "Export Project Tasks",
"phasesToExport": "Phases to export",
"fieldsToExport": "Fields to export",
"selectAll": "Select all",
"deselectAll": "Deselect all",
"phasesSelected_one": "{{selected}} of {{total}} phase selected",
"phasesSelected_other": "{{selected}} of {{total}} phases selected",
"fieldsSelected": "{{selected}} of {{total}} fields selected",
"exportTasks": "Export Tasks",
"exporting": "Exporting tasks...",
"completeTitle": "Export Complete",
"success_one": "Successfully exported {{count}} task to CSV.",
"success_other": "Successfully exported {{count}} tasks to CSV.",
"failed": "Failed to export tasks",
"done": "Done",
"fields": {
"taskName": "Task Name",
"description": "Description",
"phase": "Phase",
"status": "Status",
"isClosed": "Is Closed",
"taskType": "Task Type",
"priority": "Priority",
"assignedTo": "Assigned To",
"assignedTeam": "Assigned Team",
"dueDate": "Due Date",
"estimatedHours": "Estimated Hours",
"actualHours": "Actual Hours",
"checklistProgress": "Checklist Progress",
"tags": "Tags",
"createdAt": "Created At",
"updatedAt": "Updated At"
},
"exportSelected": "Export {{count}} Selected",
"selectedTasksNotice_one": "Exporting {{count}} selected task.",
"selectedTasksNotice_other": "Exporting {{count}} selected tasks."
},
"import": {
"title": "Import Phases & Tasks",
"uploadIntro": "Upload a CSV file with phase and task data",
"requiredFields": "Required:",
"requiredFieldsList": "task_name",
"optionalFields": "Optional:",
"optionalFieldsList": "phase_name, task_description, assigned_to, estimated_hours, actual_hours, due_date, priority, service, task_type, status, tags",
"noteLabel": "Note:",
"defaultPhaseNote": "Tasks without a phase_name will be grouped into \"{{phaseName}}\"",
"downloadTemplate": "Download CSV Template",
"mapFieldsTitle": "Map Task Fields to CSV Columns",
"fieldColumn": "Field",
"selectCsvColumn": "Select CSV Column",
"fieldInstructions": "Select which CSV column contains the data for each field. Fields marked with * are required.",
"notMapped": "Not mapped",
"rowLimitExceeded": "Row limit exceeded:",
"rowLimitDescription": "Your CSV has {{original}} rows, but only the first {{kept}} rows will be imported. Please split your file into smaller batches for the remaining rows.",
"previewTitle": "Preview Import",
"totalRows": "Total rows:",
"validRows": "Valid:",
"invalidRows": "Invalid:",
"phasesCount": "Phases:",
"tasksCount": "Tasks:",
"skipInvalidRows": "Skip invalid rows",
"skipInvalidRowsHelp": "Continue import even if some rows have validation errors",
"yes": "Yes",
"no": "No",
"structureTitle": "Import Structure",
"phaseTaskCount": "({{count}} tasks)",
"estimatedHoursSummary": "({{hours}}h)",
"validReadyTooltip": "Valid - Ready to import",
"invalidReadyTooltip": "Invalid - Has errors",
"noIssues": "-",
"unmatchedAgentsCount": "{{count}} agent(s)",
"unmatchedAgentsWarning": "from your CSV don't match existing users. You'll be asked to map these in the next step.",
"unmatchedStatusesCount": "{{count}} status(es)",
"unmatchedStatusesWarning": "from your CSV don't match existing project statuses. You'll be asked to resolve these {{timing}}.",
"afterMappingAgents": "after mapping agents",
"inTheNextStep": "in the next step",
"invalidRowsCount": "{{count}} row(s)",
"invalidRowsBlockingError": "have validation errors. Enable \"Skip invalid rows\" to proceed with only the valid rows, or go back and fix your CSV.",
"largeImportConfirmHelp": "I understand this will create {{phases}} phase(s) and {{tasks}} task(s). This action may take a while to complete.",
"processingPreview": "Processing...",
"preview": "Preview",
"nextMapAgents": "Next: Map Agents",
"nextResolveStatuses": "Next: Resolve Statuses",
"importTasksButton": "Import {{tasks}} Tasks",
"mapUnmatchedAgentsTitle": "Map Unmatched Agents",
"agentResolutionIntro": "The following agent names from your CSV don't match any existing users. Choose how to handle each one. The first agent in a comma-separated list becomes the primary assignee, and additional agents become task resources.",
"taskCountLabel_one": "({{count}} task)",
"taskCountLabel_other": "({{count}} tasks)",
"tasksList": "Tasks: {{tasks}}",
"andMore": " and {{count}} more...",
"mapToExistingUser": "Map to existing user:",
"selectUserPlaceholder": "Select user...",
"skipAgent": "Skip this agent",
"skipPrimaryAgentHelp": "Tasks where this is the primary agent will be imported without an assignee.",
"skipAdditionalAgentHelp": "This additional agent will not be added to the affected tasks.",
"resolveStatusesTitle": "Resolve Unmatched Statuses",
"statusResolutionIntro": "The following statuses from your CSV don't match any existing project statuses. Choose how to handle each one:",
"mapToExistingStatus": "Map to existing:",
"noStatusSpecified": "Use \"No Status Specified\" column (will be created if needed)",
"createNewStatus": "Create new status column \"{{statusName}}\"",
"mapAgentRequiredError": "Please select a target user for all \"Map to existing user\" resolutions before proceeding.",
"mapStatusRequiredError": "Please select a target status for all \"Map to existing\" resolutions before importing.",
"largeImportConfirm": "Confirm large import ({{tasks}} tasks)",
"largeImportHelp": "You are importing {{tasks}} tasks. Processing may take a moment.",
"primaryAgent": "Primary agent",
"processing": "Importing phases and tasks...",
"importingButton": "Importing...",
"completeTitle": "Import Complete",
"completeWithIssuesTitle": "Import Completed with Issues",
"createdSummary": "Created {{phases}} phases and {{tasks}} tasks",
"successSummary": "Successfully created {{phases}} phases and {{tasks}} tasks",
"errorsLabel": "Errors:",
"emptyCsvError": "CSV file is empty or has no data rows",
"readCsvError": "Error reading CSV file",
"requiredFieldNotMapped": "Required field \"{{fieldLabel}}\" is not mapped",
"processCsvError": "Error processing CSV data",
"importDataError": "Error importing data",
"table": {
"status": "Status",
"row": "Row",
"phase": "Phase",
"task": "Task",
"issues": "Issues",
"valid": "Valid"
},
"fields": {
"task_name": "Task Name *",
"phase_name": "Phase Name",
"task_description": "Task Description",
"assigned_to": "Assigned To",
"estimated_hours": "Estimated Hours",
"actual_hours": "Actual Hours",
"due_date": "Due Date",
"priority": "Priority",
"service": "Service",
"task_type": "Task Type",
"status": "Status",
"tags": "Tags"
},
"fallbackPhaseLabel": "Default phase for tasks without phase_name",
"fallbackPhaseHelp": "{{count}} row(s) have no phase. Pick an existing phase or keep the default to create one.",
"fallbackPhaseCreateDefault": "Create new phase: \"{{name}}\"",
"fallbackStatusLabel": "Default status for tasks without status",
"fallbackStatusHelp": "{{count}} row(s) have no status. The selected status will be assigned to those tasks.",
"rowResultsTitle": "Row Results",
"rowFilterLabel": "Show:",
"rowFilterAll": "All rows ({{count}})",
"rowFilterImported": "Will be imported ({{count}})",
"rowFilterSkipped": "Will be skipped ({{count}})",
"rowsToBeSkippedCount": "{{count}} row(s) will be skipped",
"rowsToBeSkippedHelp": "because they failed validation. Use the filter above to review them.",
"statusUnmatchedSuffix": "Unmatched",
"statusUnmatchedTooltip": "Status does not match any existing status for this phase. Resolve in the mapping steps before import.",
"statusFallbackSuffix": "Default",
"statusFallbackTooltip": "Using the default fallback status for this phase.",
"inPhaseBadge": "in {{phase}}"
},
"dialogs": {
"moveTask": {
"title": "Move Task",
"selectTargetError": "Please select a target phase.",
"selectDifferentTargetError": "Please select a different phase or status to move the task.",
"message": "Move task \"{{taskName}}\" to a new phase/status:",
"placeholder": "Select target project/phase/status...",
"moving": "Moving...",
"confirm": "Confirm Move"
},
"duplicateTask": {
"title": "Duplicate Task",
"selectTargetError": "Please select a target phase.",
"message": "Duplicate task \"{{taskName}}\" to:",
"placeholder": "Select target project/phase/status...",
"withChecklist": "Duplicate task with checklist items",
"withoutChecklist": "Duplicate task without checklist items",
"withPrimaryAssignee": "Duplicate task with primary assignee",
"withoutPrimaryAssignee": "Duplicate task without primary assignee",
"withAdditionalAssignees": "Duplicate task with additional assignees ({{count}})",
"withoutAdditionalAssignees": "Duplicate task without additional assignees",
"withTicketLinks": "Duplicate task with ticket links ({{count}})",
"withoutTicketLinks": "Duplicate task without ticket links",
"duplicating": "Duplicating...",
"confirm": "Confirm Duplicate"
},
"createTaskFromTicket": {
"title": "Create Task from Ticket",
"button": "Create Task",
"projectLabel": "Project",
"projectPlaceholder": "Select a project",
"phaseLabel": "Phase",
"phasePlaceholder": "Select a phase",
"statusLabel": "Status",
"statusPlaceholder": "Select a status",
"linkTicketLabel": "Link ticket to the created task"
},
"linkTicketToTask": {
"title": "Link Ticket to Task",
"button": "Link to Task",
"projectLabel": "Project",
"projectPlaceholder": "Select a project",
"phaseLabel": "Phase (optional filter)",
"phasePlaceholder": "All phases",
"taskLabel": "Task",
"taskPlaceholder": "Select a task",
"linkedSuccess": "Ticket linked to task successfully",
"linking": "Linking...",
"confirm": "Link",
"linkTicketError": "Failed to link ticket"
},
"prefillFromTicket": {
"title": "Prefill From Ticket",
"searchTicketsPlaceholder": "Search tickets...",
"selectTicket": "Select Ticket",
"linkTicketLabel": "Link this ticket to the task",
"confirm": "Prefill",
"allStatuses": "All Statuses",
"allPriorities": "All Priorities"
},
"ticketLinkedTasks": {
"title": "Linked Project Tasks",
"loadFailed": "Failed to load task",
"phaseNotFound": "Task phase not found",
"openFailed": "Failed to open task",
"task": "Task",
"tasks": "Tasks",
"badgeCount_other": "{{count}} Tasks",
"restrictedTooltip": "Limited details — you are not assigned to this task",
"badgeCount_one": "{{count}} Task"
},
"bulkMoveTask": {
"title": "Move Tasks",
"message": "Move {{count}} selected task(s) to a new phase/status:",
"confirm": "Move Tasks"
},
"bulkAssign": {
"title": "Assign Tasks",
"message": "Assign {{count}} selected task(s) to:",
"unassigned": "Not assigned",
"assigning": "Assigning...",
"confirm": "Assign Tasks",
"teamReplaceNotice": "Tasks already assigned to a different team will have that team replaced."
},
"convertAdHocToTask": {
"title": "Convert to Project Task"
}
},
"filters": {
"deadline": {
"placeholder": "Filter by deadline",
"filterTypeLabel": "Filter Type",
"selectFilterType": "Select filter type",
"before": "Before",
"after": "After",
"on": "On",
"between": "Between",
"date": "Date",
"startDate": "Start Date",
"endDate": "End Date",
"clear": "Clear",
"apply": "Apply Filter",
"beforeDate": "Before {{date}}",
"afterDate": "After {{date}}",
"onDate": "On {{date}}",
"betweenDates": "Between {{start}} - {{end}}",
"fromDate": "From {{date}}"
}
},
"settings": {
"page": {
"title": "Project Settings",
"tabs": {
"projectNumbering": "Project Numbering",
"projectStatuses": "Project Statuses",
"taskStatuses": "Task Statuses",
"taskPriorities": "Task Priorities"
}
},
"statuses": {
"project": {
"title": "Task Status Columns",
"description": "Configure which status columns are available for tasks",
"add_from_library": "Add Status"
},
"closed": "Closed",
"open": "Open",
"confirm_delete_title": "Delete Status",
"confirm_delete": "Remove \"{{statusName}}\"?",
"delete_error": "Failed to delete status",
"delete_validation_failed": "Failed to validate deletion. Please try again.",
"scope_label": "Status Scope",
"scope_placeholder": "Select a status scope",
"scope_project_defaults": "Project Defaults",
"use_project_defaults": "Use project defaults",
"custom_statuses": "Custom statuses",
"phase_uses_defaults": "This phase uses the project default status columns.",
"copy_from_defaults": "Copy from project defaults",
"add_custom_status": "Add custom status",
"revert_title": "Revert to Project Defaults",
"revert_message": "Remove this phase's custom statuses and revert to project defaults?",
"revert_confirm": "Revert",
"copy_failed": "Failed to copy project defaults to this phase.",
"revert_failed": "Failed to revert this phase to project defaults.",
"delete_has_tasks": "\"{{statusName}}\" has {{count}} task(s). Move them to:",
"delete_and_move": "Move & Delete",
"already_added": "Status already added",
"added_success": "Status added successfully",
"removed_success": "Status removed successfully",
"move_up": "Move up",
"move_down": "Move down",
"remove": "Remove status",
"add_existing": "Add Existing",
"create_new": "Create New",
"task_statuses_label": "Task Statuses",
"phase_task_statuses_label": "Phase Task Statuses",
"customize": "Customize",
"customize_phase": "Customize task statuses for this phase",
"customize_project": "Customize task statuses for this project",
"available_statuses_click_add": "Available Statuses (click to add):",
"load_task_statuses_failed": "Failed to load task statuses",
"add_task_status_failed": "Failed to add status",
"remove_task_status_failed": "Failed to remove status",
"reorder_failed": "Failed to reorder statuses",
"arrange_hint": "Arrange statuses in the order tasks will flow through them.",
"none_selected": "No statuses selected",
"none_selected_hint": "Click \"Add Status\" to add statuses to your project.",
"selector_none_selected_hint": "Click \"Add Existing\" to select from available statuses, or \"Create New\" to add a new status.",
"add_from_library_title": "Add Status from Library",
"add_phase_from_library_title": "Add Phase Status from Library",
"choose_status": "Choose a status",
"no_statuses_available": "No statuses available",
"no_statuses_available_hint": "Create statuses in Settings → Projects → Statuses first.",
"task_status_library_title": "Project Task Status Library",
"task_status_library_description": "Manage your organization's project task statuses. These statuses can be used across all projects.",
"task_status_library_empty": "No project task statuses found",
"task_status_library_empty_hint": "Create your first status to get started",
"edit_status_title": "Edit Status",
"create_status_title": "Create Status",
"import_from_standard": "Import from Standard",
"loading": "Loading...",
"status_name": "Status Name",
"status_name_placeholder": "e.g., In Progress, Blocked, etc.",
"preview": "Preview",
"color": "Color",
"icon": "Icon",
"sample_task": "Sample Task",
"sample_task_hint": "This is how tasks will appear in the column",
"selected_color": "Selected Color",
"selected_icon": "Selected Icon",
"choose_icon": "Choose Icon",
"mark_closed": "Mark as closed status",
"mark_closed_help": "Tasks with this status will be considered complete",
"status_updated_success": "Status updated successfully",
"status_created_success": "Status created successfully",
"status_deleted_success": "Status \"{{statusName}}\" deleted successfully",
"status_imported_success": "Successfully imported {{count}} statuses",
"status_import_skipped": "Skipped {{count}} statuses ({{reason}})",
"import_skipped_names": "Skipped: {{names}}",
"save_failed": "Failed to save status. Please try again.",
"delete_confirm_message": "Are you sure you want to delete the status \"{{statusName}}\"? This cannot be undone.",
"delete_in_use": "Failed to delete status. It may be in use by projects.",
"import_failed": "Failed to import statuses",
"update_status": "Update Status",
"project_statuses_title": "Project Statuses",
"project_statuses_description": "Define the workflow stages for your projects. Mark statuses as \"closed\" to indicate project completion.",
"project_closed_hint": "Projects with this status will be marked as closed",
"project_open_hint": "Projects with this status will remain open",
"order": "Order",
"this_status": "this status",
"last_closed_error": "At least one status must remain marked as closed",
"last_closed_delete_error": "Cannot delete the last closed status for this type.",
"addStatus": "Add new status",
"add_from_library": "Add Status"
}
},
"templates": {
"statuses": {
"manage_title": "Manage Status Columns",
"manage_description": "Define the status columns for tasks in this template. Drag to reorder.",
"template_defaults": "Template Defaults",
"added": "Status column added",
"removed": "Status column removed",
"copied_to_phase": "Template defaults copied to phase",
"reverted": "Phase reverted to template defaults",
"revert_message": "Remove this phase's custom status columns and fall back to the template defaults?",
"remove_title": "Remove Status Column",
"remove_message": "Remove this status column? Tasks in this column will be moved to the first column.",
"remove_confirm": "Remove",
"empty": "No status columns yet",
"empty_hint": "Add status columns to organize tasks",
"add_title": "Add Status Column",
"select_placeholder": "Select a status...",
"all_in_use": "All available statuses are in use",
"create_new": "Create New"
},
"list": {
"title": "Project Templates",
"searchPlaceholder": "Search templates...",
"categoryPlaceholder": "Filter by category",
"loading": "Loading...",
"loadFailed": "Failed to load templates",
"deletedSuccess": "Template deleted successfully",
"deleteFailed": "Failed to delete template",
"deleteTitle": "Delete Template",
"deleteMessage": "Are you sure you want to delete template \"{{templateName}}\"? This action cannot be undone.",
"columns": {
"name": "Name",
"description": "Description",
"category": "Category",
"timesUsed": "Times Used",
"lastUsed": "Last Used",
"actions": "Actions"
},
"neverUsed": "Never",
"edit": "Edit",
"applyTemplate": "Apply Template",
"addTemplate": "Add Template",
"createFromProject": "Create from Project",
"allCategories": "All Categories"
},
"create": {
"title": "Create Template from Project",
"sourceProjectLabel": "Source Project *",
"sourceProjectPlaceholder": "Select a project",
"templateNameLabel": "Template Name *",
"templateNamePlaceholder": "Enter template name",
"descriptionLabel": "Description",
"descriptionPlaceholder": "Enter template description",
"categoryLabel": "Category",
"categoryPlaceholder": "e.g., Software Development, Network Setup",
"whatToInclude": "What to include from the project:",
"copyPhases": "Copy project phases",
"copyStatuses": "Copy project columns/statuses",
"copyTasks": "Copy project tasks",
"copyChecklists": "Copy task checklists",
"copyServices": "Copy task services",
"copyAssignments": "Copy task assignments",
"creating": "Creating...",
"create": "Create Template",
"createdSuccess": "Template created successfully",
"createFailed": "Failed to create template",
"loadFailed": "Failed to load projects and categories",
"projectRequired": "Project and template name are required"
},
"apply": {
"title": "Create Project from Template",
"templateLabel": "Template *",
"templatePlaceholder": "Select a template",
"projectNameLabel": "Project Name *",
"projectNamePlaceholder": "Enter project name",
"clientLabel": "Client *",
"clientPlaceholder": "Select a client",
"statusLabel": "Status *",
"statusPlaceholder": "Select Status",
"startDateLabel": "Start Date (Optional)",
"startDatePlaceholder": "Select start date",
"customizationOptions": "Customization Options",
"elementsToCopy": "Template Elements to Copy",
"copyPhases": "Copy Phases",
"copyStatuses": "Copy Statuses",
"copyTasks": "Copy Tasks",
"copyChecklists": "Copy Checklists",
"copyTaskServices": "Copy Task Services",
"taskAssignments": "Task Assignments",
"creating": "Creating...",
"create": "Create Project",
"createdSuccess": "Project created from template successfully",
"createFailed": "Failed to create project from template",
"loadErrorTitle": "Error",
"loadErrorDescription": "Failed to load data",
"templateRequired": "Template is required",
"projectRequired": "Project name is required",
"clientRequired": "Client is required",
"statusRequired": "Status is required",
"assignmentOptions": {
"none": "Don't copy assignments",
"primary": "Copy primary agent only",
"all": "Copy all agents (primary + additional)"
},
"fixErrors": "Please fix the following errors:",
"addStatus": "Add new status"
},
"detail": {
"description": "Description:",
"used": "Used:",
"times": "times",
"projectPhases": "Project Phases",
"noPhasesDefined": "No phases defined",
"phasePrefix": "Phase:",
"selectPhase": "Please select a phase to view the template details.",
"deleteTitle": "Delete Template",
"deletedSuccess": "Template deleted successfully",
"usedCount": "Used: {{count}} times"
},
"editor": {
"deletedSuccess": "Template deleted successfully",
"deleteFailed": "Failed to delete template",
"clientPortalSaved": "Client portal settings saved",
"clientPortalSaveFailed": "Failed to save client portal settings",
"addPhaseFailed": "Failed to add phase",
"phaseUpdated": "Phase updated",
"updatePhaseFailed": "Failed to update phase",
"phaseDeleted": "Phase deleted",
"deletePhaseFailed": "Failed to delete phase",
"taskMovedToPhase": "Task moved to \"{{phaseName}}\"",
"moveTaskFailed": "Failed to move task",
"reorderPhaseFailed": "Failed to reorder phase",
"selectPhaseFirst": "Please select a phase first",
"taskUpdated": "Task updated",
"newTaskFallback": "New Task",
"taskCreated": "Task created",
"taskSaveFailed": "Failed to save task",
"taskDeleted": "Task deleted",
"deleteTaskFailed": "Failed to delete task",
"updateAssigneeFailed": "Failed to update assignee",
"deleteTemplateTitle": "Delete Template",
"deleteTemplateMessage": "Are you sure you want to delete template \"{{templateName}}\"? This action cannot be undone.",
"deletePhaseTitle": "Delete Phase",
"deletePhaseMessage": "Are you sure you want to delete phase \"{{phaseName}}\"? This will also delete all tasks in this phase.",
"deleteTaskTitle": "Delete Task",
"deleteTaskMessage": "Are you sure you want to delete task \"{{taskName}}\"?",
"templateBadge": "Template",
"useTemplate": "Use Template",
"statusColumnsLabel": "Status Columns",
"clientPortalVisibility": "Client Portal Visibility",
"done": "Done",
"projectPhases": "Project Phases",
"noPhasesYet": "No phases yet.",
"addFirstPhase": "Add your first phase",
"phaseName": "Phase Name",
"phaseNamePlaceholder": "Phase name",
"phaseDescription": "Phase Description",
"phaseDescriptionPlaceholder": "Description (optional)",
"duration": "Duration",
"daysPlaceholder": "Days",
"startOffset": "Start offset",
"statusColumnsTooltip": "Status columns: {{value}}",
"customStatusesCount": "Custom ({{count}} statuses)",
"templateDefaults": "Template defaults",
"notSet": "Not set",
"durationSummary": "Duration: {{value}}",
"startOffsetSummary": "Start offset: {{value}}",
"phaseDurationDays": "Duration: {{days}} days",
"phaseStartDays": "Start: +{{days}} days",
"searchTasksPlaceholder": "Search tasks...",
"searchTasks": "Search tasks",
"showStickyStatusNames": "Show sticky status names",
"hideStickyStatusNames": "Hide sticky status names",
"pinHeader": "Pin header to top",
"unpinHeader": "Unpin header",
"statusFallback": "Status",
"addPhaseToGetStarted": "Add a phase to get started",
"selectPhaseToViewTasks": "Select a phase to view tasks",
"noStatusColumns": "No status columns defined",
"addStatusColumns": "Add Status Columns",
"taskActions": "Task Actions",
"editTask": "Edit Task",
"deleteTask": "Delete Task",
"priorityLevel": "Priority level: {{priority}}",
"additionalAgents": "Additional Agents:",
"dependsOn": "Depends on:",
"blocks": "Blocks:",
"seeMore": "See more",
"seeLess": "See less",
"noPhasesFound": "No phases found",
"untitledPhase": "Untitled Phase",
"taskCount_one": "1 task",
"taskCount_other": "{{count}} tasks",
"unknownUser": "Unknown",
"unknownTask": "Unknown task",
"checklistCountTitle": "{{count}} checklist item"
},
"taskForm": {
"addTitle": "Add Task",
"editTitle": "Edit Task",
"addAction": "Add Task",
"updateAction": "Update Task",
"saving": "Saving...",
"saveFailed": "Failed to save task",
"taskNameRequired": "Task name is required",
"taskNamePlaceholder": "Enter task name",
"descriptionPlaceholder": "Task description (optional)",
"primaryAgentRequired": "Primary agent is required when additional agents are assigned",
"primaryAgentPlaceholder": "Select primary agent (optional)",
"checklist": "Checklist",
"doneEditing": "Done editing",
"editChecklist": "Edit checklist",
"addChecklistItem": "Add an item",
"checklistItemPlaceholder": "Checklist item",
"emptyChecklistItem": "Empty item",
"reorderChecklistItem": "Drag to reorder",
"insertChecklistItem": "Insert item here",
"dependencies": "Dependencies",
"dependenciesHelp": "Define task dependencies to control execution order when project is created",
"removeDependency": "Remove dependency",
"selectTaskPlaceholder": "Select task...",
"cancelEditTitle": "Cancel Edit",
"cancelEditMessage": "Are you sure you want to cancel? Any unsaved changes will be lost.",
"discardChanges": "Discard changes",
"continueEditing": "Continue editing",
"serviceLabel": "Service (for time entries)",
"noService": "No service",
"serviceHint": "When set, this service will be automatically selected when creating time entries from tasks created using this template.",
"statusColumnLabel": "Status Column",
"estimatedHoursLabel": "Estimated Hours",
"durationLabel": "Duration (days)",
"taskTypeLabel": "Task Type",
"priorityLabel": "Priority",
"primaryAgentLabel": "Primary Agent",
"additionalAgentsLabel": "Additional Agents",
"additionalAgentsHelp": "Additional team members to assign to this task",
"assignedWhenApplied": "This user will be assigned when the template is applied",
"dependenciesLabel": "Dependencies"
},
"wizard": {
"next": "Next",
"back": "Back",
"skip": "Skip",
"create": "Create Template",
"creating": "Creating...",
"title": "Create New Project Template",
"basics": {
"nameLabel": "Template Name *",
"namePlaceholder": "e.g., Website Development, Network Migration",
"nameHelp": "Give your template a descriptive name that reflects the type of project",
"descriptionLabel": "Description",
"descriptionPlaceholder": "Describe what this template is used for and any important details...",
"descriptionHelp": "Provide context to help users understand when to use this template",
"categoryLabel": "Category",
"categoryPlaceholder": "e.g., Development, Infrastructure, Consulting",
"categoryHelp": "Organize templates by category for easier filtering",
"nextHintTitle": "What's Next?",
"nextHintDescription": "After defining the basics, you'll set up status columns, add phases, create tasks, configure client portal visibility, and review your template before saving."
},
"phases": {
"title": "Project Phases",
"intro": "Break down your project into phases. Each phase can have its own tasks and timeline.",
"empty": "No phases added yet",
"addFirstPhase": "Add First Phase",
"phaseName": "Phase Name *",
"phaseNamePlaceholder": "e.g., Planning, Development, Testing",
"phaseNameRequired": "Phase name is required",
"descriptionLabel": "Description",
"description": "Description",
"descriptionPlaceholder": "Describe what happens in this phase...",
"duration": "Duration (days)",
"optionalPlaceholder": "Optional",
"startOffset": "Start Offset (days)",
"daysAfterProjectStart": "Days after project start",
"durationSummary": "Duration: {{days}} days",
"startSummary": "Starts: +{{days}} days",
"tasksCount": "Tasks: {{count}}",
"reorderedHint": "Phases reordered. Would you like to recalculate offsets based on phase order and durations?",
"recalculate": "Recalculate",
"recalculateOffsets": "Recalculate Offsets",
"aboutTimingTitle": "About Phase Timing",
"startOffsetLabel": "Start Offset",
"durationLabel": "Duration",
"tipLabel": "Tip",
"aboutTimingStartOffset": "Days after the project start date when this phase begins. New phases auto-calculate their offset based on preceding phases.",
"aboutTimingDuration": "How long this phase typically takes. Used to calculate the next phase's offset.",
"aboutTimingTip": "After reordering phases, use \"Recalculate Offsets\" to update timing based on the new order."
},
"tasks": {
"empty": "No phases available",
"title": "Tasks",
"selectPhase": "Select Phase",
"noTasksInPhase": "No tasks in {{phaseName}}",
"thisPhase": "this phase",
"taskName": "Task Name *",
"taskNamePlaceholder": "e.g., Design database schema",
"description": "Add tasks to each phase. You can also add checklist items to break down tasks further.",
"descriptionPlaceholder": "Describe what needs to be done...",
"service": "Service (for time entries)",
"estimatedHours": "Estimated Hours",
"duration": "Duration (days)",
"durationSummaryShort": "{{days}} days",
"taskType": "Task Type",
"priority": "Priority",
"noPriority": "No priority",
"assignedTo": "Assigned To",
"notAssigned": "Not assigned",
"additionalAgents": "Additional Agents",
"statusColumn": "Status Column",
"statusPlaceholder": "Select status column",
"checklist": "Checklist",
"checklistItemPlaceholder": "Checklist item",
"checklistItemsSummary": "{{count}} checklist items",
"tipTitle": "Tip",
"tipDescription": "Add checklist items to break down complex tasks into smaller steps. These will help team members track progress within each task.",
"emptyDescription": "Please add at least one phase in the previous step before adding tasks.",
"addFirstTask": "Add First Task",
"serviceHint": "Auto-fills service when creating time entries from tasks.",
"done": "Done",
"addTaskToPhase": "Add Task to {{phaseName}}"
},
"review": {
"title": "Review Your Template",
"templateInformation": "Template Information",
"name": "Name:",
"descriptionLabel": "Description:",
"description": "Review your template details before creating. You can edit any section by going back.",
"category": "Category:",
"statusColumns": "Status Columns ({{count}})",
"tasksSummary": "Tasks Summary",
"totalTasks": "Total Tasks",
"checklistItems": "Checklist Items",
"estimatedHours": "Est. Hours",
"taskDetailsByPhase": "Task Details by Phase",
"readyToCreate": "Ready to Create",
"readyDescription": "Once you create this template, you'll be able to use it to quickly start new projects with this structure. Click \"{{action}}\" to finish."
},
"clientPortal": {
"title": "Client Portal Visibility",
"description": "Configure what information clients can see when viewing projects created from this template in the client portal.",
"aboutTitle": "About Client Portal Visibility",
"aboutDescription": "These settings control what project information is visible to clients when they access the client portal. You can choose to show phases, task completion progress, and specific task details. These settings will be applied to all projects created from this template but can be customized per project."
},
"steps": {
"basics": "Template Basics",
"statusColumns": "Task Status Columns",
"phases": "Phases",
"tasks": "Tasks",
"clientPortal": "Client Portal",
"reviewCreate": "Review & Create"
},
"errors": {
"loadRequiredData": "Failed to load required data",
"templateNameRequired": "Template name is required",
"createFailed": "Failed to create template"
}
}
},
"documents": {
"title": "Attachments",
"upload": "Upload",
"noDocuments": "No documents attached",
"uploadSuccess": "Document uploaded successfully",
"uploadError": "Failed to upload document",
"downloadError": "Failed to download document",
"dragDrop": "Drag and drop a file here, or click to select",
"maxSize": "Maximum file size: {{size}}MB",
"file": "file",
"files": "files",
"uploadHint": "Upload files to share with this task",
"download": "Download",
"view": "View"
},
"team": "Team Members",
"budget": "Budget",
"fields": {
"projectNumber": "Project #",
"projectName": "Project Name",
"reference": "Reference",
"name": "Project Name",
"description": "Description",
"status": "Status",
"startDate": "Start Date",
"endDate": "End Date",
"projectManager": "Project Manager",
"progress": "Progress",
"hoursLogged": "Hours Logged",
"budgetUsed": "Budget Used"
},
"status": {
"notStarted": "Not Started",
"inProgress": "In Progress",
"completed": "Completed",
"onHold": "On Hold",
"cancelled": "Cancelled",
"active": "Active",
"inactive": "Inactive"
},
"messages": {
"noProjects": "No projects found",
"loadingProjects": "Loading projects...",
"noDescription": "No description provided",
"noPhasesOrTasks": "No phases or tasks to display",
"loadError": "Failed to load project details"
},
"backToProjects": "Back to Projects",
"invalidProjectData": "Invalid project data",
"viewDetails": "View Details →",
"details": "Details",
"startDate": "Start Date",
"endDate": "End Date",
"lastUpdated": "Last Updated",
"taskCompletion": "Task Completion",
"percentComplete": "{{percent}}% Complete",
"tasksCompleted": "{{completed}} of {{total}} tasks completed",
"budgetHours": "Budget Hours",
"budgetUsed": "{{percent}}% of Budget Used",
"hoursUsed": "{{spent}} of {{budgeted}} hours",
"hoursUsage": "Hours Usage",
"hoursUsedDetail": "{{spent}} of {{budgeted}} hours used",
"hoursRemaining": "{{remaining}} hours remaining",
"projectInfo": {
"client": "Client:",
"contact": "Contact:",
"budget": "Budget:",
"notAvailable": "N/A",
"saveAsTemplate": "Save as Template",
"materials": "Materials",
"hoursUsageDescription": "Shows budget hours usage for the entire project",
"templateCreatedSuccess": "Template created successfully",
"shareTooltip": "Print, import and export"
},
"comments": {
"title": "Comments",
"internalOnly": "Internal Only",
"newestFirst": "Newest first",
"oldestFirst": "Oldest first",
"addComment": "Add Comment",
"submitting": "Submitting...",
"loading": "Loading...",
"empty": "No comments yet. Be the first to comment!"
},
"addStatusDialog": {
"phaseTitle": "Add Phase Status from Library",
"projectTitle": "Add Status from Library",
"selectLabel": "Select from Status Library",
"placeholder": "Choose a status",
"helpText": "Select a status from your tenant's status library to add to this project.",
"noStatusesTitle": "No statuses available",
"noStatusesDescription": "Create statuses in Settings → Projects → Statuses first.",
"adding": "Adding...",
"addStatus": "Add Status",
"addFailed": "Failed to add status. Please try again."
},
"taskStatusSelect": {
"ariaLabel": "Task status",
"selectStatus": "Select status"
},
"ticketSelect": {
"placeholder": "Select a ticket...",
"searchPlaceholder": "Search tickets...",
"noTickets": "No tickets found"
},
"taskTypeSelect": {
"placeholder": "Select task type"
},
"projectPhases": {
"title": "Project Phases",
"addTask": "Add Task",
"addPhase": "Add Phase",
"phaseNamePlaceholder": "Phase name... *",
"descriptionPlaceholder": "Description",
"adding": "Adding...",
"addError": "Failed to add phase. Please try again.",
"import": "Import"
},
"clientPortal": {
"clientsWillSee": "Clients will see:",
"showBudgetHours": "Show Budget Hours",
"showBudgetHoursDescription": "Clients will see the project-level Budget Hours card with spent vs. budgeted hours and % of budget used.",
"showPhases": "Show Phases",
"showPhasesDescription": "Clients will see phase cards with names, descriptions, and date ranges. They can select phases to view associated tasks.",
"showCompletion": "Show Completion %",
"showCompletionDescription": "Display a progress bar and percentage showing how many tasks are completed in each phase.",
"showTasks": "Show Tasks",
"showTasksDescription": "Clients can view individual tasks within each phase. Tasks are displayed in a Kanban board or list view grouped by status.",
"visibleTaskFields": "Visible Task Fields",
"visibleTaskFieldsDescription": "Select which task details are visible to clients. Unchecked fields will be hidden from task cards.",
"required": "(required)",
"summary": {
"projectInfo": "Project name, description, dates, and overall progress",
"budgetHours": "Budget hours: spent vs. budgeted totals and % used",
"phaseInfo": "Phase names, descriptions, and date ranges",
"phaseCompletion": "Completion percentage for each phase",
"taskDetails": "Task details: {{fields}}",
"fields": {
"taskNames": "task names",
"descriptions": "descriptions",
"dueDates": "due dates",
"status": "status",
"assignees": "assignees",
"estimatedHours": "estimated hours",
"actualHours": "actual hours",
"priority": "priority",
"checklist": "checklist item names and completion",
"dependencies": "task dependencies",
"documentUploads": "document uploads"
}
},
"fieldLabels": {
"task_name": "Task Name",
"description": "Description",
"due_date": "Due Date",
"status": "Status",
"assigned_to": "Assigned To",
"estimated_hours": "Estimated Hours",
"actual_hours": "Actual Hours",
"priority": "Priority",
"checklist_progress": "Checklist",
"services": "Services",
"dependencies": "Dependencies",
"document_uploads": "Document Uploads"
}
},
"quickAddStatus": {
"title": "Create New Status",
"statusName": "Status Name",
"namePlaceholder": "e.g., In Progress, Review, Done",
"statusColor": "Status Color",
"changeColor": "Change color",
"markClosed": "Mark as closed status",
"markClosedDescription": "Tasks in closed statuses are considered complete",
"creating": "Creating...",
"createButton": "Create Status",
"nameRequired": "Status name is required",
"duplicateName": "A status with this name already exists",
"createdSuccess": "Status \"{{name}}\" created successfully",
"createFailed": "Failed to create status"
},
"dependencies": {
"dependsOn": "Depends on",
"unknownTask": "Unknown task",
"blocks": "Blocks"
},
"columnsHidden": "column(s) hidden due to limited space. Resize browser to see more.",
"projectPrint": {
"tasks": {
"title": "Project Tasks",
"subtitle": "{{count}} tasks",
"noTasks": "No project tasks to print",
"emptyValue": "-",
"hoursValue": "{{actual}} / {{estimated}}",
"columns": {
"task": "Task",
"phase": "Phase",
"status": "Status",
"assignee": "Assignee",
"dueDate": "Due Date",
"hours": "Hours"
},
"optionsDialog": {
"title": "Print options",
"description": "Choose which columns to include when printing project tasks."
},
"fields": {
"phase": "Phase",
"status": "Status",
"assignee": "Assignee",
"dueDate": "Due Date",
"estimatedHours": "Estimated Hours",
"wbsCode": "WBS Code",
"description": "Description"
},
"subtitleSelected": "{{count}} selected tasks"
}
},
"bulkActions": {
"selectedCount": "{{count}} selected",
"move": "Move",
"assign": "Assign",
"tags": "Tags",
"delete": "Delete",
"clear": "Clear"
},
"bulk": {
"tags": {
"dialogTitle": "Add Tags to Selected Tasks",
"message": "Add one or more tags to {{count}} selected task(s). Tags already on a task are skipped.",
"placeholder": "Type a tag and press Enter",
"submitting": "Adding tags...",
"confirm_one": "Add Tags to {{count}} Task",
"confirm_other": "Add Tags to {{count}} Tasks",
"failedHeading": "Tags could not be added to the following tasks:"
}
},
"common:actions": {
"back": "Back",
"cancel": "Cancel",
"delete": "Delete",
"done": "Done",
"edit": "Edit",
"save": "Save"
}
}