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.
This commit is contained in:
303
i18n/en/challenge.ts
Normal file
303
i18n/en/challenge.ts
Normal file
@@ -0,0 +1,303 @@
|
||||
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',
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user