feat: complete i18n translation for remaining components

- Translate pages: Projects, ProjectHealthPage, ProjectSettings
- Translate components: TaskDetailModal, KanbanBoard, Comments,
  SubtaskList, CalendarView, BlockerDialog
- Add translation keys for tasks namespace: kanban, calendar,
  subtasks.error, comments.error, blockers (full translation)
- Add common.labels.task translation key
- Fix task creation: use original_estimate instead of time_estimate

Translation coverage:
- 10 locale files updated (zh-TW & en)
- 6 page/component files translated
- ~100 new translation keys added

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
beabigegg
2026-01-08 23:38:21 +08:00
parent 4bc3c24360
commit 2796cbb42d
20 changed files with 401 additions and 197 deletions

View File

@@ -52,7 +52,8 @@
"selectAssignee": "Select assignee...",
"searchUsers": "Search users...",
"noUsersFound": "No users found",
"typeToSearch": "Type to search users"
"typeToSearch": "Type to search users",
"task": "Task"
},
"messages": {
"success": "Operation successful",

View File

@@ -1,12 +1,29 @@
{
"title": "Project Health",
"subtitle": "Monitor the overall health of projects",
"title": "Project Health Dashboard",
"subtitle": "Monitor project health status and risk levels across all projects",
"overall": {
"title": "Overall Health",
"healthy": "Healthy",
"atRisk": "At Risk",
"critical": "Critical"
},
"summary": {
"totalProjects": "Total Projects",
"healthy": "Healthy",
"atRisk": "At Risk",
"critical": "Critical",
"avgHealth": "Avg. Health",
"withBlockers": "With Blockers",
"delayed": "Delayed"
},
"sort": {
"label": "Sort by",
"riskHigh": "Risk: High to Low",
"riskLow": "Risk: Low to High",
"healthHigh": "Health: High to Low",
"healthLow": "Health: Low to High",
"name": "Name: A to Z"
},
"metrics": {
"schedule": "Schedule",
"budget": "Budget",
@@ -34,15 +51,21 @@
"high": "High Risk",
"medium": "Medium Risk",
"low": "Low Risk",
"critical": "Critical",
"mitigated": "Mitigated"
},
"actions": {
"viewDetails": "View Details",
"exportReport": "Export Report",
"setAlert": "Set Alert"
"setAlert": "Set Alert",
"retry": "Retry"
},
"projectCount": "{{count}} project(s)",
"empty": {
"title": "No Health Data",
"description": "The project needs more data to display health metrics"
"title": "No projects found",
"description": "Create a project to start tracking health status"
},
"error": {
"loadFailed": "Failed to load project health data. Please try again."
}
}

View File

@@ -4,16 +4,26 @@
"editProject": "Edit Project",
"deleteProject": "Delete Project",
"projectSettings": "Project Settings",
"newProject": "New Project",
"fields": {
"name": "Name",
"namePlaceholder": "Enter project name",
"title": "Project Title",
"titlePlaceholder": "Enter project title",
"description": "Description",
"descriptionPlaceholder": "Enter project description",
"descriptionPlaceholder": "Description (optional)",
"status": "Status",
"startDate": "Start Date",
"endDate": "End Date",
"owner": "Project Owner",
"space": "Space"
"space": "Space",
"securityLevel": "Security Level"
},
"securityLevel": {
"label": "Security Level",
"public": "Public - All users",
"department": "Department - Same department only",
"confidential": "Confidential - Owner only"
},
"status": {
"planning": "Planning",
@@ -37,10 +47,18 @@
"overdue": "Overdue",
"progress": "Overall Progress"
},
"card": {
"tasks": "{{count}} tasks",
"owner": "Owner",
"noDescription": "No description",
"unknown": "Unknown"
},
"messages": {
"created": "Project created",
"created": "Project created successfully",
"updated": "Project updated",
"deleted": "Project deleted",
"loadFailed": "Failed to load projects",
"createFailed": "Failed to create project",
"confirmDelete": "Are you sure you want to delete this project? This will delete all related tasks."
},
"empty": {

View File

@@ -1,6 +1,7 @@
{
"title": "Settings",
"projectSettings": "Project Settings",
"backToTasks": "Back to Tasks",
"tabs": {
"general": "General",
"members": "Members",
@@ -13,10 +14,13 @@
"title": "General Settings",
"projectName": "Project Name",
"description": "Description",
"noDescription": "No description",
"securityLevel": "Security Level",
"status": "Status",
"visibility": "Visibility",
"public": "Public",
"private": "Private"
"private": "Private",
"helpText": "To edit project details, contact the project owner."
},
"members": {
"title": "Member Management",

View File

@@ -23,7 +23,8 @@
"attachments": "Attachments",
"comments": "Comments",
"watchers": "Watchers",
"blockers": "Blockers"
"blockers": "Blockers",
"hours": "{{count}} hours"
},
"status": {
"todo": "To Do",
@@ -31,7 +32,11 @@
"review": "In Review",
"done": "Done",
"cancelled": "Cancelled",
"blocked": "Blocked"
"blocked": "Blocked",
"noStatus": "No Status",
"unassigned": "Unassigned",
"noDueDate": "No due date",
"notEstimated": "Not estimated"
},
"priority": {
"low": "Low",
@@ -86,17 +91,32 @@
"add": "Add Subtask",
"placeholder": "Enter subtask title",
"completed": "{{count}} / {{total}} completed",
"empty": "No subtasks"
"count": "{{count}} subtask(s)",
"empty": "No subtasks",
"adding": "Adding...",
"error": {
"load": "Failed to load subtasks",
"create": "Failed to create subtask"
}
},
"comments": {
"title": "Comments",
"add": "Add Comment",
"placeholder": "Write your comment...",
"add": "Post Comment",
"placeholder": "Add a comment... Use @name to mention someone",
"edited": "edited",
"delete": "Delete Comment",
"confirmDelete": "Are you sure you want to delete this comment?",
"confirmDelete": "Are you sure you want to delete this comment? This action cannot be undone.",
"empty": "No comments yet",
"reply": "Reply"
"reply": "Reply",
"mentioned": "Mentioned",
"replyingTo": "Replying to comment",
"posting": "Posting...",
"error": {
"load": "Failed to load comments",
"post": "Failed to post comment",
"update": "Failed to update comment",
"delete": "Failed to delete comment"
}
},
"attachments": {
"title": "Attachments",
@@ -113,7 +133,26 @@
"blockedBy": "Blocked by",
"blocking": "Blocking",
"remove": "Remove blocker",
"empty": "No blockers"
"empty": "No blockers",
"taskBlocked": "Task Blocked",
"markAsBlocked": "Mark as Blocked",
"activeBlocker": "Active Blocker",
"reportedBy": "Reported by",
"on": "on",
"resolutionNote": "Resolution Note",
"resolutionPlaceholder": "Describe how the blocker was resolved...",
"resolving": "Resolving...",
"resolveBlocker": "Resolve Blocker",
"blockerReason": "Blocker Reason",
"reasonPlaceholder": "Describe what is blocking this task...",
"history": "Blocker History",
"reported": "Reported",
"resolved": "Resolved",
"error": {
"load": "Failed to load blockers",
"create": "Failed to create blocker",
"resolve": "Failed to resolve blocker"
}
},
"messages": {
"created": "Task created",
@@ -126,6 +165,18 @@
"attachmentUploaded": "Attachment uploaded",
"confirmDelete": "Are you sure you want to delete this task? This action cannot be undone."
},
"kanban": {
"dropHere": "Drop tasks here"
},
"calendar": {
"allAssignees": "All Assignees",
"allPriorities": "All Priorities",
"activeOnly": "Active Only",
"completedOnly": "Completed Only",
"clearFilters": "Clear Filters",
"overdue": "Overdue",
"completed": "Completed"
},
"empty": {
"title": "No Tasks",
"description": "There are no tasks yet. Create your first task to get started!",