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:
richarjiang
2025-11-28 17:29:51 +08:00
parent fbe0c92f0f
commit bca6670390
42 changed files with 7972 additions and 6632 deletions

551
i18n/en/diet.ts Normal file
View 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',
},
};