## Security Enhancements (P0) - Add input validation with max_length and numeric range constraints - Implement WebSocket token authentication via first message - Add path traversal prevention in file storage service ## Permission Enhancements (P0) - Add project member management for cross-department access - Implement is_department_manager flag for workload visibility ## Cycle Detection (P0) - Add DFS-based cycle detection for task dependencies - Add formula field circular reference detection - Display user-friendly cycle path visualization ## Concurrency & Reliability (P1) - Implement optimistic locking with version field (409 Conflict on mismatch) - Add trigger retry mechanism with exponential backoff (1s, 2s, 4s) - Implement cascade restore for soft-deleted tasks ## Rate Limiting (P1) - Add tiered rate limits: standard (60/min), sensitive (20/min), heavy (5/min) - Apply rate limits to tasks, reports, attachments, and comments ## Frontend Improvements (P1) - Add responsive sidebar with hamburger menu for mobile - Improve touch-friendly UI with proper tap target sizes - Complete i18n translations for all components ## Backend Reliability (P2) - Configure database connection pool (size=10, overflow=20) - Add Redis fallback mechanism with message queue - Add blocker check before task deletion ## API Enhancements (P3) - Add standardized response wrapper utility - Add /health/ready and /health/live endpoints - Implement project templates with status/field copying ## Tests Added - test_input_validation.py - Schema and path traversal tests - test_concurrency_reliability.py - Optimistic locking and retry tests - test_backend_reliability.py - Connection pool and Redis tests - test_api_enhancements.py - Health check and template tests Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
167 lines
6.2 KiB
JSON
167 lines
6.2 KiB
JSON
{
|
||
"title": "設定",
|
||
"projectSettings": "專案設定",
|
||
"backToTasks": "返回任務",
|
||
"mySettings": {
|
||
"title": "個人設定",
|
||
"profile": "個人資訊",
|
||
"email": "電子郵件",
|
||
"department": "部門",
|
||
"role": "角色",
|
||
"workloadSettings": "工作負載設定",
|
||
"capacityDescription": "設定您每週可用的工作時數,用於計算工作負載百分比。",
|
||
"weeklyCapacity": "每週容量",
|
||
"hoursPerWeek": "小時/週",
|
||
"capacityHelp": "建議值:40 小時(標準工時)。最大值:168 小時(一週總時數)。",
|
||
"capacitySaved": "容量設定已儲存",
|
||
"capacityError": "儲存容量設定失敗",
|
||
"capacityInvalid": "請輸入有效的時數(0-168)"
|
||
},
|
||
"tabs": {
|
||
"general": "一般",
|
||
"members": "成員",
|
||
"customFields": "自訂欄位",
|
||
"notifications": "通知",
|
||
"integrations": "整合",
|
||
"danger": "危險區域"
|
||
},
|
||
"general": {
|
||
"title": "一般設定",
|
||
"projectName": "專案名稱",
|
||
"description": "描述",
|
||
"noDescription": "沒有描述",
|
||
"securityLevel": "安全等級",
|
||
"status": "狀態",
|
||
"visibility": "可見性",
|
||
"public": "公開",
|
||
"private": "私人",
|
||
"helpText": "如需編輯專案詳情,請聯繫專案負責人。"
|
||
},
|
||
"members": {
|
||
"title": "成員管理",
|
||
"description": "管理可以存取此專案的使用者。專案成員可以檢視和編輯專案內容。",
|
||
"addMember": "新增成員",
|
||
"invite": "邀請成員",
|
||
"inviteByEmail": "透過電子郵件邀請",
|
||
"emailPlaceholder": "輸入電子郵件地址",
|
||
"selectUser": "選擇使用者",
|
||
"searchUserPlaceholder": "搜尋使用者...",
|
||
"user": "使用者",
|
||
"role": "角色",
|
||
"joinedAt": "加入時間",
|
||
"changeRole": "變更角色",
|
||
"remove": "移除",
|
||
"confirmRemove": "確定要移除此成員嗎?",
|
||
"removeConfirmTitle": "移除成員",
|
||
"removeConfirmMessage": "確定要將 {{name}} 從此專案移除嗎?移除後該成員將無法存取此專案。",
|
||
"empty": "此專案尚無成員。",
|
||
"emptyHint": "點擊「新增成員」來添加專案成員。",
|
||
"loadError": "載入成員列表失敗",
|
||
"addError": "新增成員失敗",
|
||
"removeError": "移除成員失敗",
|
||
"roleChangeError": "變更角色失敗",
|
||
"memberAdded": "成員已新增",
|
||
"adding": "新增中...",
|
||
"selectUserRequired": "請選擇要新增的使用者",
|
||
"alreadyMember": "此使用者已經是專案成員",
|
||
"roles": {
|
||
"member": "成員",
|
||
"admin": "管理員"
|
||
},
|
||
"roleHelp": {
|
||
"member": "成員可以檢視和編輯專案中的任務。",
|
||
"admin": "管理員可以管理專案設定和成員。"
|
||
}
|
||
},
|
||
"customFields": {
|
||
"title": "自訂欄位",
|
||
"add": "新增欄位",
|
||
"edit": "編輯欄位",
|
||
"delete": "刪除欄位",
|
||
"create": "建立欄位",
|
||
"fieldName": "欄位名稱",
|
||
"fieldNamePlaceholder": "例如:故事點數、衝刺編號",
|
||
"fieldType": "欄位類型",
|
||
"required": "必填",
|
||
"requiredField": "必填欄位",
|
||
"requiredHelp": "建立或更新任務時必須填寫必填欄位。",
|
||
"cannotChangeType": "無法變更",
|
||
"description": "自訂欄位允許您為任務新增額外資料。每個專案最多可建立 20 個欄位。",
|
||
"loading": "載入自訂欄位中...",
|
||
"loadError": "載入自訂欄位失敗",
|
||
"retry": "重試",
|
||
"empty": "尚未定義任何自訂欄位。",
|
||
"emptyHint": "點擊「新增欄位」建立您的第一個自訂欄位。",
|
||
"deleteConfirmTitle": "刪除自訂欄位?",
|
||
"deleteConfirmMessage": "這將永久刪除此欄位及所有任務中儲存的值。此操作無法復原。",
|
||
"deleting": "刪除中...",
|
||
"deleted": "自訂欄位已刪除",
|
||
"deleteError": "刪除欄位失敗",
|
||
"saving": "儲存中...",
|
||
"saveChanges": "儲存變更",
|
||
"saveError": "儲存欄位失敗",
|
||
"options": "選項",
|
||
"optionPlaceholder": "選項 {{index}}",
|
||
"addOption": "新增選項",
|
||
"optionRequired": "下拉欄位至少需要一個選項",
|
||
"formula": "公式運算式",
|
||
"formulaPlaceholder": "例如:{time_spent} / {original_estimate} * 100",
|
||
"formulaRequired": "公式運算式為必填",
|
||
"formulaHelp": {
|
||
"intro": "使用大括號來參照其他欄位:",
|
||
"customField": "參照自訂數字欄位",
|
||
"estimate": "任務預估時間",
|
||
"timeSpent": "已記錄時間",
|
||
"operators": "支援的運算子:+, -, *, /"
|
||
},
|
||
"types": {
|
||
"text": "文字",
|
||
"textDesc": "單行文字輸入",
|
||
"number": "數字",
|
||
"numberDesc": "數值",
|
||
"date": "日期",
|
||
"dateDesc": "日期選擇器",
|
||
"dropdown": "下拉選單",
|
||
"dropdownDesc": "從預設選項中選擇",
|
||
"person": "人員",
|
||
"personDesc": "使用者指派",
|
||
"formula": "公式",
|
||
"formulaDesc": "從其他欄位計算"
|
||
},
|
||
"validation": {
|
||
"nameRequired": "欄位名稱為必填"
|
||
},
|
||
"circularError": {
|
||
"title": "偵測到循環參照",
|
||
"description": "此公式會產生循環參照,這是不被允許的。",
|
||
"cyclePath": "參照循環路徑",
|
||
"helpText": "要解決此問題,請修改公式以避免參照直接或間接參照此欄位的其他欄位。"
|
||
}
|
||
},
|
||
"notifications": {
|
||
"title": "通知設定",
|
||
"email": "電子郵件通知",
|
||
"inApp": "應用內通知",
|
||
"taskAssigned": "任務指派給我時",
|
||
"taskCompleted": "任務完成時",
|
||
"commentAdded": "新增留言時",
|
||
"dueDateApproaching": "截止日期即將到來時"
|
||
},
|
||
"danger": {
|
||
"title": "危險區域",
|
||
"archive": "封存專案",
|
||
"archiveDescription": "封存此專案。封存後專案將變為唯讀。",
|
||
"delete": "刪除專案",
|
||
"deleteDescription": "永久刪除此專案及其所有資料。此操作無法復原。",
|
||
"confirmArchive": "確定要封存此專案嗎?",
|
||
"confirmDelete": "確定要刪除此專案嗎?請輸入專案名稱以確認:",
|
||
"typeToConfirm": "輸入「{{name}}」以確認"
|
||
},
|
||
"messages": {
|
||
"saved": "設定已儲存",
|
||
"memberInvited": "已發送邀請",
|
||
"memberRemoved": "成員已移除",
|
||
"roleChanged": "角色已變更"
|
||
}
|
||
}
|