feat: add i18n internationalization support

- Add react-i18next, i18next with browser language detection
- Support Traditional Chinese (zh-TW) and English (en)
- Default language: zh-TW, stored in localStorage
- Create 10 translation namespaces (common, auth, dashboard, tasks, etc.)
- Add LanguageSwitcher component in header
- Translate pages: Login, Dashboard, Tasks, Spaces, Workload, Audit

🤖 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:18:41 +08:00
parent 1e31def7ba
commit 4bc3c24360
32 changed files with 1741 additions and 104 deletions

View File

@@ -0,0 +1,73 @@
{
"title": "Settings",
"projectSettings": "Project Settings",
"tabs": {
"general": "General",
"members": "Members",
"customFields": "Custom Fields",
"notifications": "Notifications",
"integrations": "Integrations",
"danger": "Danger Zone"
},
"general": {
"title": "General Settings",
"projectName": "Project Name",
"description": "Description",
"status": "Status",
"visibility": "Visibility",
"public": "Public",
"private": "Private"
},
"members": {
"title": "Member Management",
"invite": "Invite Member",
"inviteByEmail": "Invite by email",
"emailPlaceholder": "Enter email address",
"role": "Role",
"changeRole": "Change Role",
"remove": "Remove Member",
"confirmRemove": "Are you sure you want to remove this member?"
},
"customFields": {
"title": "Custom Fields",
"add": "Add Field",
"edit": "Edit Field",
"delete": "Delete Field",
"fieldName": "Field Name",
"fieldType": "Field Type",
"required": "Required",
"types": {
"text": "Text",
"number": "Number",
"date": "Date",
"select": "Dropdown",
"multiSelect": "Multi-select",
"checkbox": "Checkbox"
}
},
"notifications": {
"title": "Notification Settings",
"email": "Email Notifications",
"inApp": "In-app Notifications",
"taskAssigned": "When a task is assigned to me",
"taskCompleted": "When a task is completed",
"commentAdded": "When a comment is added",
"dueDateApproaching": "When a due date is approaching"
},
"danger": {
"title": "Danger Zone",
"archive": "Archive Project",
"archiveDescription": "Archive this project. The project will become read-only.",
"delete": "Delete Project",
"deleteDescription": "Permanently delete this project and all its data. This action cannot be undone.",
"confirmArchive": "Are you sure you want to archive this project?",
"confirmDelete": "Are you sure you want to delete this project? Type the project name to confirm:",
"typeToConfirm": "Type \"{{name}}\" to confirm"
},
"messages": {
"saved": "Settings saved",
"memberInvited": "Invitation sent",
"memberRemoved": "Member removed",
"roleChanged": "Role changed"
}
}