feat(challenges): 实现自定义挑战的编辑与删除功能并完善多语言支持
- 新增自定义挑战的编辑模式,支持修改挑战信息 - 在详情页为创建者添加删除(归档)挑战的功能入口 - 全面完善挑战创建页面的国际化(i18n)文案适配 - 优化个人中心页面的字体样式,统一使用 AliBold/Regular - 更新 Store 逻辑以处理挑战更新、删除及列表数据映射调整
This commit is contained in:
214
i18n/index.ts
214
i18n/index.ts
@@ -903,6 +903,8 @@ const challengeDetailResources = {
|
||||
joining: '加入中…',
|
||||
leave: '退出挑战',
|
||||
leaving: '退出中…',
|
||||
delete: '删除挑战',
|
||||
deleting: '删除中…',
|
||||
upcoming: '挑战即将开始',
|
||||
expired: '挑战已结束',
|
||||
},
|
||||
@@ -935,6 +937,14 @@ const challengeDetailResources = {
|
||||
},
|
||||
joinFailed: '加入挑战失败',
|
||||
leaveFailed: '退出挑战失败',
|
||||
archiveConfirm: {
|
||||
title: '确认删除该挑战?',
|
||||
message: '删除后将无法恢复,参与者也将无法再访问此挑战。',
|
||||
cancel: '取消',
|
||||
confirm: '删除挑战',
|
||||
},
|
||||
archiveFailed: '删除挑战失败',
|
||||
archiveSuccess: '挑战已删除',
|
||||
},
|
||||
ranking: {
|
||||
title: '排行榜',
|
||||
@@ -1011,6 +1021,8 @@ const challengeDetailResourcesEn = {
|
||||
joining: 'Joining…',
|
||||
leave: 'Leave Challenge',
|
||||
leaving: 'Leaving…',
|
||||
delete: 'Delete Challenge',
|
||||
deleting: 'Deleting…',
|
||||
upcoming: 'Starting Soon',
|
||||
expired: 'Challenge Ended',
|
||||
},
|
||||
@@ -1043,6 +1055,14 @@ const challengeDetailResourcesEn = {
|
||||
},
|
||||
joinFailed: 'Failed to join challenge',
|
||||
leaveFailed: 'Failed to leave challenge',
|
||||
archiveConfirm: {
|
||||
title: 'Delete this challenge?',
|
||||
message: 'This cannot be undone and participants will lose access.',
|
||||
cancel: 'Cancel',
|
||||
confirm: 'Delete Challenge',
|
||||
},
|
||||
archiveFailed: 'Failed to delete challenge',
|
||||
archiveSuccess: 'Challenge deleted',
|
||||
},
|
||||
ranking: {
|
||||
title: 'Leaderboard',
|
||||
@@ -1172,6 +1192,103 @@ const resources = {
|
||||
ongoing: '进行中',
|
||||
expired: '已结束',
|
||||
},
|
||||
createCustom: {
|
||||
title: '新建挑战',
|
||||
editTitle: '编辑挑战',
|
||||
yourChallenge: '你的专属挑战',
|
||||
defaultTitle: '自定义挑战',
|
||||
basicInfo: '基础信息',
|
||||
challengeSettings: '挑战设置',
|
||||
displayInteraction: '展示&互动',
|
||||
durationDays: '持续{{days}}天',
|
||||
durationDaysChallenge: '{{days}}天挑战',
|
||||
dayUnit: '天',
|
||||
typeLabels: {
|
||||
water: '喝水',
|
||||
exercise: '运动',
|
||||
diet: '饮食',
|
||||
sleep: '睡眠',
|
||||
mood: '心情',
|
||||
weight: '体重',
|
||||
},
|
||||
fields: {
|
||||
title: '标题',
|
||||
titlePlaceholder: '挑战标题(最多100字)',
|
||||
coverImage: '封面图',
|
||||
uploadCover: '上传封面',
|
||||
challengeDescription: '挑战说明',
|
||||
descriptionPlaceholder: '简单介绍这个挑战的目标与要求',
|
||||
challengeType: '挑战类型',
|
||||
timeRange: '时间范围',
|
||||
start: '开始',
|
||||
end: '结束',
|
||||
duration: '持续时间',
|
||||
periodLabel: '周期标签',
|
||||
periodLabelPlaceholder: '如:21天挑战',
|
||||
dailyTargetAndUnit: '每日目标值与进度单位',
|
||||
dailyTargetPlaceholder: '如:8',
|
||||
unitPlaceholder: '单位',
|
||||
unitHelper: '进度单位表示每日目标的计量单位,如:次、杯、分钟、页等',
|
||||
minimumCheckInDays: '最少打卡天数',
|
||||
minimumCheckInDaysPlaceholder: '至少1天',
|
||||
challengeRequirement: '挑战要求说明',
|
||||
requirementPlaceholder: '例如:每日完成 30 分钟运动',
|
||||
maxParticipants: '参与人数上限',
|
||||
noLimit: '留空表示无限制',
|
||||
isPublic: '是否公开',
|
||||
publicDescription: '公开后其他用户可通过邀请码加入',
|
||||
},
|
||||
buttons: {
|
||||
createAndGenerateCode: '创建并生成邀请码',
|
||||
updateAndSave: '保存修改',
|
||||
creating: '创建中…',
|
||||
updating: '更新中…',
|
||||
},
|
||||
floatingCTA: {
|
||||
title: '生成自定义挑战',
|
||||
editTitle: '编辑自定义挑战',
|
||||
subtitle: '自动创建分享码,邀请好友一起挑战',
|
||||
editSubtitle: '修改挑战信息,编辑后保存',
|
||||
},
|
||||
shareModal: {
|
||||
title: '邀请码已生成',
|
||||
subtitle: '分享给好友即可加入挑战',
|
||||
copyCode: '复制邀请码',
|
||||
viewChallenge: '查看挑战',
|
||||
later: '稍后再说',
|
||||
generatingCode: '获取中…',
|
||||
},
|
||||
alerts: {
|
||||
titleRequired: '请填写挑战标题',
|
||||
requirementRequired: '请填写挑战要求说明',
|
||||
endTimeError: '结束时间需要晚于开始时间',
|
||||
targetValueError: '每日目标值需在 1-1000 之间',
|
||||
minimumDaysError: '最少打卡天数需在 1-365 之间',
|
||||
minimumDaysExceedError: '最少打卡天数不能超过持续天数',
|
||||
participantsError: '参与人数需在 2-10000 之间,或留空表示无限制',
|
||||
createSuccess: '自定义挑战已创建',
|
||||
updateSuccess: '挑战已更新',
|
||||
createFailed: '创建失败,请稍后再试',
|
||||
},
|
||||
imageUpload: {
|
||||
uploading: '上传中…',
|
||||
clear: '清除',
|
||||
helper: '建议比例 16:9,清晰展示挑战氛围',
|
||||
selectSource: '选择封面图',
|
||||
camera: '拍照',
|
||||
album: '从相册选择',
|
||||
cancel: '取消',
|
||||
cameraPermission: '权限不足',
|
||||
cameraPermissionMessage: '需要相机权限以拍摄封面',
|
||||
albumPermissionMessage: '需要相册权限以选择封面',
|
||||
uploadFailed: '上传失败',
|
||||
uploadFailedMessage: '封面上传失败,请稍后重试',
|
||||
cameraFailed: '拍照失败',
|
||||
cameraFailedMessage: '无法打开相机,请稍后再试',
|
||||
selectFailed: '选择失败',
|
||||
selectFailedMessage: '无法打开相册,请稍后再试',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -2030,6 +2147,103 @@ const resources = {
|
||||
ongoing: 'Ongoing',
|
||||
expired: 'Expired',
|
||||
},
|
||||
createCustom: {
|
||||
title: 'New Challenge',
|
||||
editTitle: 'Edit Challenge',
|
||||
yourChallenge: 'Your Custom Challenge',
|
||||
defaultTitle: 'Custom Challenge',
|
||||
basicInfo: 'Basic Info',
|
||||
challengeSettings: 'Challenge Settings',
|
||||
displayInteraction: 'Display & Interaction',
|
||||
durationDays: 'Duration {{days}} days',
|
||||
durationDaysChallenge: '{{days}}-Day Challenge',
|
||||
dayUnit: 'day',
|
||||
typeLabels: {
|
||||
water: 'Water',
|
||||
exercise: 'Exercise',
|
||||
diet: 'Diet',
|
||||
sleep: 'Sleep',
|
||||
mood: 'Mood',
|
||||
weight: 'Weight',
|
||||
},
|
||||
fields: {
|
||||
title: 'Title',
|
||||
titlePlaceholder: 'Challenge title (max 100 characters)',
|
||||
coverImage: 'Cover Image',
|
||||
uploadCover: 'Upload Cover',
|
||||
challengeDescription: 'Challenge Description',
|
||||
descriptionPlaceholder: 'Brief introduction to the challenge goals and requirements',
|
||||
challengeType: 'Challenge Type',
|
||||
timeRange: 'Time Range',
|
||||
start: 'Start',
|
||||
end: 'End',
|
||||
duration: 'Duration',
|
||||
periodLabel: 'Period Label',
|
||||
periodLabelPlaceholder: 'e.g., 21-Day Challenge',
|
||||
dailyTargetAndUnit: 'Daily Target & Unit',
|
||||
dailyTargetPlaceholder: 'e.g., 8',
|
||||
unitPlaceholder: 'Unit',
|
||||
unitHelper: 'Progress unit represents the measurement unit for daily goals, such as: times, cups, minutes, pages, etc.',
|
||||
minimumCheckInDays: 'Minimum Check-in Days',
|
||||
minimumCheckInDaysPlaceholder: 'At least 1 day',
|
||||
challengeRequirement: 'Challenge Requirement',
|
||||
requirementPlaceholder: 'e.g., Complete 30 minutes of exercise daily',
|
||||
maxParticipants: 'Max Participants',
|
||||
noLimit: 'Leave empty for unlimited',
|
||||
isPublic: 'Public',
|
||||
publicDescription: 'Others can join via invite code when public',
|
||||
},
|
||||
buttons: {
|
||||
createAndGenerateCode: 'Create & Generate Code',
|
||||
updateAndSave: 'Save Changes',
|
||||
creating: 'Creating…',
|
||||
updating: 'Updating…',
|
||||
},
|
||||
floatingCTA: {
|
||||
title: 'Generate Custom Challenge',
|
||||
editTitle: 'Edit Custom Challenge',
|
||||
subtitle: 'Automatically create share code to invite friends',
|
||||
editSubtitle: 'Modify challenge information, save after editing',
|
||||
},
|
||||
shareModal: {
|
||||
title: 'Invite Code Generated',
|
||||
subtitle: 'Share with friends to join the challenge',
|
||||
copyCode: 'Copy Invite Code',
|
||||
viewChallenge: 'View Challenge',
|
||||
later: 'Later',
|
||||
generatingCode: 'Generating…',
|
||||
},
|
||||
alerts: {
|
||||
titleRequired: 'Please enter challenge title',
|
||||
requirementRequired: 'Please enter challenge requirement description',
|
||||
endTimeError: 'End time must be later than start time',
|
||||
targetValueError: 'Daily target value must be between 1-1000',
|
||||
minimumDaysError: 'Minimum check-in days must be between 1-365',
|
||||
minimumDaysExceedError: 'Minimum check-in days cannot exceed duration days',
|
||||
participantsError: 'Participants must be between 2-10000, or leave empty for unlimited',
|
||||
createSuccess: 'Custom challenge created',
|
||||
updateSuccess: 'Challenge updated',
|
||||
createFailed: 'Creation failed, please try again later',
|
||||
},
|
||||
imageUpload: {
|
||||
uploading: 'Uploading…',
|
||||
clear: 'Clear',
|
||||
helper: 'Recommended ratio 16:9, clearly display challenge atmosphere',
|
||||
selectSource: 'Select Cover Image',
|
||||
selectMessage: 'Please select image source',
|
||||
camera: 'Camera',
|
||||
album: 'From Album',
|
||||
cancel: 'Cancel',
|
||||
cameraPermission: 'Permission Denied',
|
||||
cameraPermissionMessage: 'Camera permission is required to take cover photo',
|
||||
uploadFailed: 'Upload Failed',
|
||||
uploadFailedMessage: 'Cover upload failed, please try again later',
|
||||
cameraFailed: 'Camera Failed',
|
||||
cameraFailedMessage: 'Unable to open camera, please try again later',
|
||||
selectFailed: 'Selection Failed',
|
||||
selectFailedMessage: 'Unable to open album, please try again later',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user