- 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.
551 lines
14 KiB
TypeScript
551 lines
14 KiB
TypeScript
export const nutritionRecords = {
|
|
title: 'Nutrition Records',
|
|
listTitle: 'Today\'s Meals',
|
|
recordCount: '{{count}} records',
|
|
empty: {
|
|
title: 'No records today',
|
|
action: 'Add Record',
|
|
},
|
|
footer: {
|
|
end: '- No more records -',
|
|
loadMore: 'Load More',
|
|
},
|
|
delete: {
|
|
title: 'Confirm Delete',
|
|
message: 'Are you sure you want to delete this nutrition record? This action cannot be undone.',
|
|
cancel: 'Cancel',
|
|
confirm: 'Delete',
|
|
},
|
|
mealTypes: {
|
|
breakfast: 'Breakfast',
|
|
lunch: 'Lunch',
|
|
dinner: 'Dinner',
|
|
snack: 'Snack',
|
|
other: 'Other',
|
|
},
|
|
nutrients: {
|
|
protein: 'Protein',
|
|
fat: 'Fat',
|
|
carbs: 'Carbs',
|
|
unit: 'g',
|
|
caloriesUnit: 'kcal',
|
|
},
|
|
overlay: {
|
|
title: 'Record Method',
|
|
scan: 'AI Scan',
|
|
foodLibrary: 'Food Library',
|
|
voiceRecord: 'Voice Log',
|
|
},
|
|
chart: {
|
|
remaining: 'Remaining',
|
|
formula: 'Remaining = Metabolism + Exercise - Diet',
|
|
metabolism: 'Metabolism',
|
|
exercise: 'Exercise',
|
|
diet: 'Diet',
|
|
},
|
|
};
|
|
|
|
export const foodCamera = {
|
|
title: 'Food Camera',
|
|
hint: 'Keep food within the frame',
|
|
permission: {
|
|
title: 'Camera Permission Required',
|
|
description: 'Camera access is needed to capture food for AI recognition',
|
|
button: 'Allow Access',
|
|
},
|
|
guide: {
|
|
title: 'Shooting Guide',
|
|
description: 'Please upload or take clear photos of food to improve recognition accuracy',
|
|
button: 'Got it',
|
|
good: 'Good lighting, clear subject',
|
|
bad: 'Blurry, poor lighting',
|
|
},
|
|
buttons: {
|
|
album: 'Album',
|
|
capture: 'Capture',
|
|
help: 'Help',
|
|
},
|
|
alerts: {
|
|
captureFailed: {
|
|
title: 'Capture Failed',
|
|
message: 'Please try again',
|
|
},
|
|
pickFailed: {
|
|
title: 'Selection Failed',
|
|
message: 'Please try again',
|
|
},
|
|
},
|
|
};
|
|
|
|
export const foodRecognition = {
|
|
title: 'Food Recognition',
|
|
header: {
|
|
confirm: 'Confirm Food',
|
|
recognizing: 'AI Recognizing',
|
|
},
|
|
errors: {
|
|
noImage: 'Image not found',
|
|
generic: 'Food recognition failed, please try again',
|
|
unknown: 'Unknown error',
|
|
noFoodDetected: 'Recognition failed: No food detected',
|
|
processError: 'Error during recognition process',
|
|
},
|
|
logs: {
|
|
uploading: '📤 Uploading image to cloud...',
|
|
uploadSuccess: '✅ Image upload completed',
|
|
analyzing: '🤖 AI model analyzing...',
|
|
analysisSuccess: '✅ AI analysis completed',
|
|
confidence: '🎯 Confidence: {{value}}%',
|
|
itemsFound: '🍽️ Detected {{count}} food items',
|
|
failed: '❌ Recognition failed: No food detected',
|
|
error: '❌ Error during recognition process',
|
|
},
|
|
status: {
|
|
idle: {
|
|
title: 'Ready',
|
|
subtitle: 'Please wait...',
|
|
},
|
|
uploading: {
|
|
title: 'Uploading Image',
|
|
subtitle: 'Uploading image to cloud server...',
|
|
},
|
|
recognizing: {
|
|
title: 'AI Analyzing',
|
|
subtitle: 'AI model is analyzing food ingredients...',
|
|
},
|
|
completed: {
|
|
title: 'Success',
|
|
subtitle: 'Redirecting to analysis results...',
|
|
},
|
|
failed: {
|
|
title: 'Failed',
|
|
subtitle: 'Please check network or try again later',
|
|
},
|
|
processing: {
|
|
title: 'Processing...',
|
|
subtitle: 'Please wait...',
|
|
},
|
|
},
|
|
mealTypes: {
|
|
breakfast: 'Breakfast',
|
|
lunch: 'Lunch',
|
|
dinner: 'Dinner',
|
|
snack: 'Snack',
|
|
unknown: 'Unknown',
|
|
},
|
|
info: {
|
|
title: 'Smart Food Recognition',
|
|
description: 'AI will analyze the photo, identify food types, estimate nutrition, and generate a detailed report.',
|
|
},
|
|
actions: {
|
|
start: 'Start Recognition',
|
|
retry: 'Retry',
|
|
logs: 'Process Logs',
|
|
logsPlaceholder: 'Ready to start...',
|
|
},
|
|
alerts: {
|
|
recognizing: {
|
|
title: 'Recognition in progress',
|
|
message: 'Recognition is not complete. Are you sure you want to go back?',
|
|
continue: 'Continue',
|
|
back: 'Go Back',
|
|
},
|
|
},
|
|
};
|
|
|
|
export const foodAnalysisResult = {
|
|
title: 'Analysis Result',
|
|
error: {
|
|
notFound: 'Image or recognition result not found',
|
|
},
|
|
placeholder: 'Nutrition Record',
|
|
nutrients: {
|
|
caloriesUnit: 'kcal',
|
|
protein: 'Protein',
|
|
fat: 'Fat',
|
|
carbs: 'Carbs',
|
|
unit: 'g',
|
|
},
|
|
sections: {
|
|
recognitionResult: 'Recognition Result',
|
|
foodIntake: 'Food Intake',
|
|
},
|
|
nonFood: {
|
|
title: 'No Food Detected',
|
|
suggestions: {
|
|
title: 'Suggestions:',
|
|
item1: '• Ensure food is in the frame',
|
|
item2: '• Try a clearer angle',
|
|
item3: '• Avoid blur or poor lighting',
|
|
},
|
|
},
|
|
actions: {
|
|
retake: 'Retake',
|
|
record: 'Record',
|
|
close: 'Close',
|
|
},
|
|
mealSelector: {
|
|
title: 'Select Meal',
|
|
},
|
|
editModal: {
|
|
title: 'Edit Food Info',
|
|
fields: {
|
|
name: 'Food Name',
|
|
namePlaceholder: 'Enter food name',
|
|
amount: 'Weight (g)',
|
|
amountPlaceholder: 'Enter weight',
|
|
calories: 'Calories (kcal)',
|
|
caloriesPlaceholder: 'Enter calories',
|
|
},
|
|
actions: {
|
|
cancel: 'Cancel',
|
|
save: 'Save',
|
|
},
|
|
},
|
|
confidence: 'Confidence: {{value}}%',
|
|
dateFormats: {
|
|
today: 'MMM D, YYYY',
|
|
full: 'MMM D, YYYY HH:mm',
|
|
},
|
|
};
|
|
|
|
export const foodLibrary = {
|
|
title: 'Food Library',
|
|
custom: 'Custom',
|
|
search: {
|
|
placeholder: 'Search food...',
|
|
loading: 'Searching...',
|
|
empty: 'No relevant food found',
|
|
noData: 'No food data',
|
|
},
|
|
loading: 'Loading food library...',
|
|
retry: 'Retry',
|
|
mealTypes: {
|
|
breakfast: 'Breakfast',
|
|
lunch: 'Lunch',
|
|
dinner: 'Dinner',
|
|
snack: 'Snack',
|
|
},
|
|
actions: {
|
|
record: 'Record',
|
|
selectMeal: 'Select Meal',
|
|
},
|
|
alerts: {
|
|
deleteFailed: {
|
|
title: 'Delete Failed',
|
|
message: 'Error occurred while deleting food, please try again later',
|
|
},
|
|
createFailed: {
|
|
title: 'Create Failed',
|
|
message: 'Error occurred while creating custom food, please try again later',
|
|
},
|
|
},
|
|
};
|
|
|
|
export const createCustomFood = {
|
|
title: 'Create Custom Food',
|
|
save: 'Save',
|
|
preview: {
|
|
title: 'Preview',
|
|
defaultName: 'Food Name',
|
|
},
|
|
basicInfo: {
|
|
title: 'Basic Info',
|
|
name: 'Food Name',
|
|
namePlaceholder: 'e.g. Hamburger',
|
|
defaultAmount: 'Default Amount',
|
|
calories: 'Calories',
|
|
},
|
|
optionalInfo: {
|
|
title: 'Optional Info',
|
|
photo: 'Photo',
|
|
addPhoto: 'Add Photo',
|
|
protein: 'Protein',
|
|
fat: 'Fat',
|
|
carbohydrate: 'Carbs',
|
|
},
|
|
units: {
|
|
kcal: 'kcal',
|
|
g: 'g',
|
|
gram: 'g',
|
|
},
|
|
alerts: {
|
|
permissionDenied: {
|
|
title: 'Permission Denied',
|
|
message: 'Photo library permission is required to select photos',
|
|
},
|
|
uploadFailed: {
|
|
title: 'Upload Failed',
|
|
message: 'Photo upload failed, please try again',
|
|
},
|
|
error: {
|
|
title: 'Error',
|
|
message: 'Failed to select photo, please try again',
|
|
},
|
|
validation: {
|
|
title: 'Notice',
|
|
nameRequired: 'Please enter food name',
|
|
caloriesRequired: 'Please enter valid calories',
|
|
},
|
|
},
|
|
};
|
|
|
|
export const voiceRecord = {
|
|
title: 'Voice Log',
|
|
intro: {
|
|
description: 'Describe your meal with voice, AI will intelligently analyze nutrition and calories',
|
|
},
|
|
status: {
|
|
idle: 'Tap microphone to start recording',
|
|
listening: 'Listening... Please start speaking...',
|
|
processing: 'AI is processing voice content...',
|
|
analyzing: 'AI model is deeply analyzing nutritional components...',
|
|
result: 'Voice recognition completed, please confirm the result',
|
|
},
|
|
hints: {
|
|
listening: 'Tell us about the food you want to record',
|
|
},
|
|
examples: {
|
|
title: 'Recording Examples:',
|
|
items: [
|
|
'This morning I had two fried eggs, a slice of whole wheat bread and a glass of milk',
|
|
'For lunch I had about 150g of braised pork, a small bowl of rice and a serving of vegetables',
|
|
'For dinner I had steamed egg custard, seaweed egg drop soup and a bowl of millet porridge',
|
|
],
|
|
},
|
|
analysis: {
|
|
progress: 'Analysis Progress: {{progress}}%',
|
|
hint: 'AI is deeply analyzing your food description...',
|
|
},
|
|
result: {
|
|
label: 'Recognition Result:',
|
|
},
|
|
actions: {
|
|
retry: 'Retry Recording',
|
|
confirm: 'Confirm & Use',
|
|
},
|
|
alerts: {
|
|
noVoiceInput: 'No voice input detected, please try again',
|
|
networkError: 'Network connection error, please check network and try again',
|
|
voiceError: 'Voice recognition problem occurred, please try again',
|
|
noValidContent: 'No valid content recognized, please record again',
|
|
pleaseRecordFirst: 'Please perform voice recognition first',
|
|
recordingFailed: 'Recording Failed',
|
|
recordingPermissionError: 'Unable to start voice recognition, please check microphone permission settings',
|
|
analysisFailed: 'Analysis Failed',
|
|
},
|
|
};
|
|
|
|
export const nutritionLabelAnalysis = {
|
|
title: 'Nutrition Label Analysis',
|
|
camera: {
|
|
permissionDenied: 'Permission Denied',
|
|
permissionMessage: 'Camera permission is required to take nutrition label photos',
|
|
},
|
|
actions: {
|
|
takePhoto: 'Take Photo',
|
|
selectFromAlbum: 'Select from Album',
|
|
startAnalysis: 'Start Analysis',
|
|
close: 'Close',
|
|
},
|
|
placeholder: {
|
|
text: 'Take or select a nutrition label photo',
|
|
},
|
|
status: {
|
|
uploading: 'Uploading image...',
|
|
analyzing: 'Analyzing nutrition label...',
|
|
},
|
|
errors: {
|
|
analysisFailed: {
|
|
title: 'Analysis Failed',
|
|
message: 'Error occurred while analyzing the image, please try again',
|
|
defaultMessage: 'Analysis service is temporarily unavailable',
|
|
},
|
|
cannotRecognize: 'Unable to recognize nutrition label, please try taking a clearer photo',
|
|
cameraPermissionDenied: 'Camera permission is required to take nutrition label photos',
|
|
},
|
|
results: {
|
|
title: 'Detailed Nutrition Analysis',
|
|
detailedAnalysis: 'Detailed Nutrition Analysis',
|
|
},
|
|
imageViewer: {
|
|
close: 'Close',
|
|
dateFormat: 'MMM D, YYYY HH:mm',
|
|
},
|
|
};
|
|
|
|
export const nutritionAnalysisHistory = {
|
|
title: 'History',
|
|
dateFormat: 'MMM D, YYYY HH:mm',
|
|
recognized: 'Recognized {{count}} nutrients',
|
|
loadingMore: 'Loading more...',
|
|
loading: 'Loading history...',
|
|
filter: {
|
|
all: 'All',
|
|
},
|
|
filters: {
|
|
all: 'All',
|
|
success: 'Success',
|
|
failed: 'Failed',
|
|
},
|
|
status: {
|
|
success: 'Success',
|
|
failed: 'Failed',
|
|
processing: 'Processing',
|
|
unknown: 'Unknown',
|
|
},
|
|
nutrients: {
|
|
energy: 'Energy',
|
|
protein: 'Protein',
|
|
carbs: 'Carbs',
|
|
fat: 'Fat',
|
|
},
|
|
delete: {
|
|
confirmTitle: 'Confirm Delete',
|
|
confirmMessage: 'Are you sure you want to delete this record?',
|
|
cancel: 'Cancel',
|
|
delete: 'Delete',
|
|
successTitle: 'Deleted Successfully',
|
|
successMessage: 'Record has been deleted successfully',
|
|
},
|
|
actions: {
|
|
expand: 'Expand Details',
|
|
collapse: 'Collapse Details',
|
|
expandDetails: 'Expand Details',
|
|
collapseDetails: 'Collapse Details',
|
|
confirmDelete: 'Confirm Delete',
|
|
delete: 'Delete',
|
|
cancel: 'Cancel',
|
|
retry: 'Retry',
|
|
},
|
|
empty: {
|
|
title: 'No History Records',
|
|
subtitle: 'Start recognizing nutrition labels',
|
|
},
|
|
errors: {
|
|
error: 'Error',
|
|
loadFailed: 'Load Failed',
|
|
unknownError: 'Unknown Error',
|
|
fetchFailed: 'Failed to fetch history records',
|
|
fetchFailedRetry: 'Failed to fetch history records, please retry',
|
|
deleteFailed: 'Delete failed, please try again later',
|
|
},
|
|
loadingState: {
|
|
records: 'Loading history...',
|
|
more: 'Loading more...',
|
|
},
|
|
details: {
|
|
title: 'Detailed Nutrition Information',
|
|
nutritionDetails: 'Detailed Nutrition Information',
|
|
aiModel: 'AI Model',
|
|
provider: 'Service Provider',
|
|
serviceProvider: 'Service Provider',
|
|
},
|
|
records: {
|
|
nutritionCount: 'Recognized {{count}} nutrients',
|
|
},
|
|
imageViewer: {
|
|
close: 'Close',
|
|
},
|
|
};
|
|
|
|
export const waterDetail = {
|
|
title: 'Water Details',
|
|
waterRecord: 'Water Records',
|
|
today: 'Today',
|
|
total: 'Total: ',
|
|
goal: 'Goal: ',
|
|
noRecords: 'No water records',
|
|
noRecordsSubtitle: 'Tap "Add Record" to start tracking water intake',
|
|
deleteConfirm: {
|
|
title: 'Confirm Delete',
|
|
message: 'Are you sure you want to delete this water record? This action cannot be undone.',
|
|
cancel: 'Cancel',
|
|
confirm: 'Delete',
|
|
},
|
|
deleteButton: 'Delete',
|
|
water: 'Water',
|
|
loadingUserPreferences: 'Failed to load user preferences',
|
|
};
|
|
|
|
export const waterSettings = {
|
|
title: 'Water Settings',
|
|
sections: {
|
|
dailyGoal: 'Daily Water Goal',
|
|
quickAdd: 'Quick Add Default',
|
|
reminder: 'Water Reminder',
|
|
},
|
|
descriptions: {
|
|
quickAdd: 'Set the default water amount when clicking the "+" button',
|
|
reminder: 'Set periodic reminders to replenish water',
|
|
},
|
|
labels: {
|
|
ml: 'ml',
|
|
disabled: 'Disabled',
|
|
},
|
|
alerts: {
|
|
goalSuccess: {
|
|
title: 'Settings Saved',
|
|
message: 'Daily water goal has been set to {{amount}}ml',
|
|
},
|
|
quickAddSuccess: {
|
|
title: 'Settings Saved',
|
|
message: 'Quick add default has been set to {{amount}}ml',
|
|
},
|
|
quickAddFailed: {
|
|
title: 'Save Failed',
|
|
message: 'Unable to save quick add default, please try again',
|
|
},
|
|
},
|
|
buttons: {
|
|
cancel: 'Cancel',
|
|
confirm: 'Confirm',
|
|
},
|
|
status: {
|
|
reminderEnabled: '{{startTime}}-{{endTime}}, every {{interval}} minutes',
|
|
},
|
|
};
|
|
|
|
export const waterReminderSettings = {
|
|
title: 'Water Reminder',
|
|
sections: {
|
|
notifications: 'Push Notifications',
|
|
timeRange: 'Reminder Time Range',
|
|
interval: 'Reminder Interval',
|
|
},
|
|
descriptions: {
|
|
notifications: 'Enable to receive periodic water reminders during specified time periods',
|
|
timeRange: 'Only send reminders during specified time periods to avoid disturbing your rest',
|
|
interval: 'Choose the reminder frequency, recommended 30-120 minutes',
|
|
},
|
|
labels: {
|
|
startTime: 'Start Time',
|
|
endTime: 'End Time',
|
|
interval: 'Reminder Interval',
|
|
saveSettings: 'Save Settings',
|
|
hours: 'Hours',
|
|
timeRangePreview: 'Time Range Preview',
|
|
minutes: 'Minutes',
|
|
},
|
|
alerts: {
|
|
timeValidation: {
|
|
title: 'Time Setting Tip',
|
|
startTimeInvalid: 'Start time cannot be later than or equal to end time, please select again',
|
|
endTimeInvalid: 'End time cannot be earlier than or equal to start time, please select again',
|
|
},
|
|
success: {
|
|
enabled: 'Settings Saved',
|
|
enabledMessage: 'Water reminder has been enabled\n\nTime range: {{timeRange}}\nReminder interval: {{interval}}\n\nWe will periodically remind you to drink water during the specified time period',
|
|
disabled: 'Settings Saved',
|
|
disabledMessage: 'Water reminder has been disabled',
|
|
},
|
|
error: {
|
|
title: 'Save Failed',
|
|
message: 'Unable to save water reminder settings, please try again',
|
|
},
|
|
},
|
|
buttons: {
|
|
confirm: 'Confirm',
|
|
cancel: 'Cancel',
|
|
},
|
|
}; |