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:
551
i18n/en/diet.ts
Normal file
551
i18n/en/diet.ts
Normal file
@@ -0,0 +1,551 @@
|
||||
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',
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user