Files
digital-pilates/i18n/en/challenge.ts
richarjiang bca6670390 Add Chinese translations for medication management and personal settings
- Introduced new translation files for medication, personal, and weight management in Chinese.
- Updated the main index file to include the new translation modules.
- Enhanced the medication type definitions to include 'ointment'.
- Refactored workout type labels to utilize i18n for better localization support.
- Improved sleep quality descriptions and recommendations with i18n integration.
2025-11-28 17:29:51 +08:00

304 lines
9.6 KiB
TypeScript

export const challengeDetail = {
title: 'Challenge Details',
notFound: 'Challenge not found, please try again later.',
loading: 'Loading challenge details…',
retry: 'Reload',
share: {
generating: 'Generating share card...',
failed: 'Share failed, please try again later',
messageJoined: 'I\'m participating in "{{title}}" challenge, completed {{completed}}/{{target}} days! Join me!',
messageNotJoined: 'Found an amazing challenge "{{title}}", let\'s join together!',
},
dateRange: {
format: '{{start}} - {{end}}',
monthDay: 'Month {{month}} Day {{day}}',
ongoing: 'Ongoing updates',
},
participants: {
count: '{{count}} participants',
ongoing: 'Ongoing updates',
more: 'More',
},
detail: {
requirement: 'Daily check-in auto accumulates',
viewAllRanking: 'View All',
},
checkIn: {
title: 'Challenge Check-in',
todayChecked: 'Checked in today',
subtitle: 'Daily check-ins accumulate progress towards goal',
subtitleChecked: 'Today\'s progress recorded, keep it up tomorrow',
button: {
checkIn: 'Check In Now',
checking: 'Checking in…',
checked: 'Checked in today',
notJoined: 'Join to check in',
upcoming: 'Not started yet',
expired: 'Challenge ended',
},
toast: {
alreadyChecked: 'Already checked in today',
notStarted: 'Challenge not started yet, check in after it begins',
expired: 'Challenge has ended, cannot check in',
mustJoin: 'Join the challenge to check in',
success: 'Check-in successful, keep going!',
failed: 'Check-in failed, please try again',
},
},
cta: {
join: 'Join Challenge',
joining: 'Joining…',
leave: 'Leave Challenge',
leaving: 'Leaving…',
delete: 'Delete Challenge',
deleting: 'Deleting…',
upcoming: 'Starting Soon',
expired: 'Challenge Ended',
},
highlight: {
join: {
title: 'Join Challenge Now',
subtitle: 'Invite friends to persist together, achieve more easily',
},
leave: {
title: 'Don\'t leave just yet',
subtitle: 'Keep going, the next milestone is around the corner',
},
upcoming: {
title: 'Challenge Starting Soon',
subtitle: 'Starts on {{date}}, stay tuned',
subtitleFallback: 'Challenge coming soon, stay tuned',
},
expired: {
title: 'Challenge Ended',
subtitle: 'Ended on {{date}}, look forward to the next one',
subtitleFallback: 'This round has ended, look forward to the next challenge',
},
},
alert: {
leaveConfirm: {
title: 'Confirm leaving challenge?',
message: 'You will need to rejoin to continue.',
cancel: 'Cancel',
confirm: 'Leave Challenge',
},
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',
description: '',
empty: 'Leaderboard opening soon, grab your spot.',
today: 'Today',
todayGoal: 'Today\'s Goal',
hour: 'hrs',
},
leaderboard: {
title: 'Leaderboard',
loading: 'Loading leaderboard…',
notFound: 'Challenge not found.',
loadFailed: 'Unable to load leaderboard, please try again later.',
empty: 'Leaderboard opening soon, grab your spot.',
loadMore: 'Loading more…',
loadMoreFailed: 'Failed to load more, pull to refresh and retry',
},
shareCard: {
footer: 'Out Live · Beyond Life',
progress: {
label: 'My Progress',
days: '{{completed}} / {{target}} days',
completed: '🎉 Challenge Completed!',
remaining: '{{remaining}} days to complete',
},
info: {
checkInDaily: 'Daily check-in',
joinUs: 'Join us!',
},
shareCode: {
copied: 'Share code copied',
},
},
shareCode: {
copied: 'Share code copied',
},
};
export const badges = {
title: 'Badge Gallery',
subtitle: 'Celebrate every effort',
hero: {
highlight: 'Keep checking in to unlock rarer badges.',
earnedLabel: 'Earned',
totalLabel: 'Total',
progressLabel: 'Progress',
},
categories: {
all: 'All',
sleep: 'Sleep',
exercise: 'Exercise',
diet: 'Nutrition',
challenge: 'Challenge',
social: 'Social',
special: 'Special',
},
rarities: {
common: 'Common',
uncommon: 'Uncommon',
rare: 'Rare',
epic: 'Epic',
legendary: 'Legendary',
},
status: {
earned: 'Unlocked',
locked: 'Locked',
earnedAt: 'Unlocked on {{date}}',
},
legend: 'Rarity legend',
filterLabel: 'Badge categories',
empty: {
title: 'No badges yet',
description: 'Complete sleep, workout, or challenge tasks to earn your first badge.',
action: 'Explore plans',
},
};
export const challenges = {
title: 'Challenges',
subtitle: 'Join challenges to stay consistent',
loading: 'Loading challenges…',
loadFailed: 'Failed to load challenges, please try again later.',
retry: 'Retry',
empty: 'No challenges yet. Join one to get started.',
customChallenges: 'Custom Challenges',
officialChallengesTitle: 'Official Challenges',
officialChallenges: 'Official challenges launching soon.',
join: 'Join',
joined: 'Joined',
invalidInviteCode: 'Please enter a valid invite code',
joinSuccess: 'Joined challenge successfully',
joinFailed: 'Failed to join challenge',
joinModal: {
title: 'Join via invite code',
description: 'Enter the invite code to join a challenge',
confirm: 'Join',
joining: 'Joining…',
cancel: 'Cancel',
placeholder: 'Enter invite code',
},
statusLabels: {
upcoming: 'Upcoming',
ongoing: 'Ongoing',
expired: 'Ended',
},
createCustom: {
title: 'Create Challenge',
editTitle: 'Edit Challenge',
yourChallenge: 'Your challenge',
basicInfo: 'Basic Info',
challengeSettings: 'Challenge Settings',
displayInteraction: 'Display & Interaction',
durationDays: '{{days}} days',
durationDaysChallenge: '{{days}}-day challenge',
dayUnit: 'days',
defaultTitle: 'Custom Challenge',
rankingDescription: 'Leaderboard updates daily',
typeLabels: {
water: 'Hydration',
exercise: 'Exercise',
diet: 'Diet',
sleep: 'Sleep',
mood: 'Mood',
weight: 'Weight',
custom: 'Custom',
},
fields: {
title: 'Challenge title',
titlePlaceholder: 'e.g., 21-day hydration',
coverImage: 'Cover image',
uploadCover: 'Upload cover',
challengeDescription: 'Challenge description',
descriptionPlaceholder: 'Describe the goal and check-in rules',
challengeType: 'Challenge type',
challengeTypeHelper: 'Pick the category closest to your goal',
timeRange: 'Time range',
start: 'Start date',
end: 'End date',
duration: 'Duration',
periodLabel: 'Period label',
periodLabelPlaceholder: 'e.g., 21-day sprint',
dailyTargetAndUnit: 'Daily target & unit',
dailyTargetPlaceholder: 'Daily target value',
unitPlaceholder: 'Unit (cups / mins / steps...)',
unitHelper: 'Optional, shown after the daily target',
minimumCheckInDays: 'Minimum check-in days',
minimumCheckInDaysPlaceholder: 'Cannot exceed total duration',
maxParticipants: 'Max participants',
noLimit: 'No limit',
isPublic: 'Allow public join',
publicDescription: 'Others can join with the invite code when enabled.',
},
floatingCTA: {
title: 'Generate invite code',
subtitle: 'Create a challenge and share it with friends',
editTitle: 'Save changes',
editSubtitle: 'Update the challenge for all participants',
},
buttons: {
createAndGenerateCode: 'Create & generate code',
creating: 'Creating…',
updateAndSave: 'Save changes',
updating: 'Saving…',
},
datePicker: {
confirm: 'Confirm',
cancel: 'Cancel',
},
alerts: {
titleRequired: 'Please enter a challenge title',
endTimeError: 'End date must be after start date',
targetValueError: 'Daily target must be between 1 and 1000',
minimumDaysError: 'Minimum check-in days must be between 1 and 365',
minimumDaysExceedError: 'Minimum check-in days cannot exceed total duration',
participantsError: 'Participants must be between 2 and 10000 or leave empty',
createFailed: 'Failed to create challenge',
createSuccess: 'Challenge created',
updateSuccess: 'Challenge updated',
},
imageUpload: {
selectSource: 'Choose cover',
selectMessage: 'Take a photo or pick from album',
camera: 'Camera',
album: 'Album',
cancel: 'Cancel',
cameraPermission: 'Camera permission required',
cameraPermissionMessage: 'Enable camera access to take a photo.',
albumPermissionMessage: 'Enable photo access to choose from library.',
cameraFailed: 'Failed to open camera',
cameraFailedMessage: 'Please try again or choose from album.',
selectFailed: 'Selection failed',
selectFailedMessage: 'Could not select an image, please try again.',
uploadFailed: 'Upload failed',
uploadFailedMessage: 'Cover upload failed, please retry.',
uploading: 'Uploading…',
clear: 'Remove cover',
helper: 'Use a 16:9 cover under 2MB for better results.',
},
shareModal: {
title: 'Invite code generated',
subtitle: 'Share this code so others can join your challenge',
generatingCode: 'Generating…',
copyCode: 'Copy code',
viewChallenge: 'View challenge',
later: 'Share later',
},
},
};