544 lines
18 KiB
TypeScript
544 lines
18 KiB
TypeScript
export const medications = {
|
||
greeting: 'Hello, {{name}}',
|
||
welcome: 'Welcome to Medication Assistant!',
|
||
todayMedications: 'Today\'s Medications',
|
||
filters: {
|
||
all: 'All',
|
||
taken: 'Taken',
|
||
missed: 'Missed',
|
||
},
|
||
emptyState: {
|
||
title: 'No medications scheduled for today',
|
||
subtitle: 'No medication plans added yet. Let\'s add some.',
|
||
},
|
||
stack: {
|
||
completed: 'Completed ({{count}})',
|
||
},
|
||
dateFormats: {
|
||
today: 'Today, {{date}}',
|
||
other: '{{date}}',
|
||
},
|
||
// MedicationCard
|
||
card: {
|
||
status: {
|
||
missed: 'Missed',
|
||
timeToTake: 'Time to take',
|
||
remaining: '{{time}} remaining',
|
||
},
|
||
action: {
|
||
takeNow: 'Take Now',
|
||
taken: 'Taken',
|
||
skipped: 'Skipped',
|
||
skip: 'Skip',
|
||
submitting: 'Submitting...',
|
||
},
|
||
skipAlert: {
|
||
title: 'Confirm Skip',
|
||
message: 'Are you sure you want to skip this medication?\n\nIt will not be recorded as taken.',
|
||
cancel: 'Cancel',
|
||
confirm: 'Confirm Skip',
|
||
},
|
||
earlyTakeAlert: {
|
||
title: 'Not yet time to take medication',
|
||
message: 'This medication is scheduled for {{time}}, which is more than 1 hour from now.\n\nHave you already taken this medication?',
|
||
cancel: 'Cancel',
|
||
confirm: 'Confirm Taken',
|
||
},
|
||
takeError: {
|
||
title: 'Operation Failed',
|
||
message: 'An error occurred while recording medication, please try again later',
|
||
confirm: 'OK',
|
||
},
|
||
skipError: {
|
||
title: 'Operation Failed',
|
||
message: 'Skip operation failed, please try again later',
|
||
confirm: 'OK',
|
||
},
|
||
},
|
||
// Add Medication Page
|
||
add: {
|
||
title: 'Add Medication',
|
||
steps: {
|
||
name: 'Medication Name',
|
||
dosage: 'Dosage & Form',
|
||
frequency: 'Frequency',
|
||
time: 'Reminder Time',
|
||
note: 'Notes',
|
||
},
|
||
descriptions: {
|
||
name: 'Name the medication and upload package photo for easy identification',
|
||
dosage: 'Select tablet type and fill in dosage per administration',
|
||
frequency: 'Set medication frequency and daily times',
|
||
time: 'Add and manage daily reminder times',
|
||
note: 'Fill in notes or doctor instructions (optional)',
|
||
},
|
||
name: {
|
||
placeholder: 'Enter or search medication name',
|
||
},
|
||
photo: {
|
||
title: 'Upload Medication Photo',
|
||
subtitle: 'Take a photo or select from album to help identify medication packaging',
|
||
selectTitle: 'Select Image',
|
||
selectMessage: 'Please select image source',
|
||
camera: 'Camera',
|
||
album: 'From Album',
|
||
cancel: 'Cancel',
|
||
retake: 'Retake',
|
||
uploading: 'Uploading...',
|
||
uploadingText: 'Uploading',
|
||
remove: 'Remove',
|
||
cameraPermission: 'Camera permission is required to take medication photos',
|
||
albumPermission: 'Album permission is required to select medication photos',
|
||
uploadFailed: 'Upload Failed',
|
||
uploadFailedMessage: 'Image upload failed, please try again later',
|
||
cameraFailed: 'Camera Failed',
|
||
cameraFailedMessage: 'Unable to open camera, please try again later',
|
||
selectFailed: 'Selection Failed',
|
||
selectFailedMessage: 'Unable to open album, please try again later',
|
||
},
|
||
dosage: {
|
||
label: 'Dosage per administration',
|
||
placeholder: '0.5',
|
||
type: 'Type',
|
||
unitSelector: 'Select dosage unit',
|
||
},
|
||
frequency: {
|
||
label: 'Times per day',
|
||
value: '{{count}} times/day',
|
||
period: 'Medication period',
|
||
start: 'Start',
|
||
end: 'End',
|
||
longTerm: 'Long-term',
|
||
startDateInvalid: 'Invalid date',
|
||
startDateInvalidMessage: 'Start date cannot be earlier than today',
|
||
endDateInvalid: 'Invalid date',
|
||
endDateInvalidMessage: 'End date cannot be earlier than start date',
|
||
},
|
||
time: {
|
||
label: 'Daily reminder times',
|
||
addTime: 'Add Time',
|
||
editTime: 'Edit Reminder Time',
|
||
addTimeButton: 'Add Time',
|
||
},
|
||
note: {
|
||
label: 'Notes',
|
||
placeholder: 'Record precautions, doctor instructions or custom reminders',
|
||
voiceNotSupported: 'Voice-to-text is not supported on this device, you can type notes directly',
|
||
voiceError: 'Voice recognition unavailable',
|
||
voiceErrorMessage: 'Unable to use voice input, please check permission settings and try again',
|
||
voiceStartError: 'Unable to start voice input',
|
||
voiceStartErrorMessage: 'Please check microphone and voice recognition permissions and try again',
|
||
},
|
||
actions: {
|
||
previous: 'Previous',
|
||
next: 'Next',
|
||
complete: 'Complete',
|
||
},
|
||
success: {
|
||
title: 'Added Successfully',
|
||
message: 'Successfully added medication "{{name}}"',
|
||
confirm: 'OK',
|
||
},
|
||
error: {
|
||
title: 'Add Failed',
|
||
message: 'An error occurred while creating medication, please try again later',
|
||
confirm: 'OK',
|
||
},
|
||
datePickers: {
|
||
startDate: 'Select Start Date',
|
||
endDate: 'Select End Date',
|
||
time: 'Select Time',
|
||
cancel: 'Cancel',
|
||
confirm: 'Confirm',
|
||
},
|
||
pickers: {
|
||
timesPerDay: 'Select Times Per Day',
|
||
dosageUnit: 'Select Dosage Unit',
|
||
cancel: 'Cancel',
|
||
confirm: 'Confirm',
|
||
},
|
||
},
|
||
// Medication Management Page
|
||
manage: {
|
||
title: 'Medication Management',
|
||
subtitle: 'Manage status and reminders for all medications',
|
||
filters: {
|
||
all: 'All',
|
||
active: 'Active',
|
||
inactive: 'Inactive',
|
||
},
|
||
loading: 'Loading medication information...',
|
||
empty: {
|
||
title: 'No Medications',
|
||
subtitle: 'No medication records yet, click the top right to add',
|
||
},
|
||
deactivate: {
|
||
title: 'Deactivate {{name}}?',
|
||
description: 'After deactivation, medication plans generated for the day will be deleted and cannot be recovered.',
|
||
confirm: 'Confirm Deactivation',
|
||
cancel: 'Cancel',
|
||
error: {
|
||
title: 'Operation Failed',
|
||
message: 'An error occurred while deactivating medication, please try again later.',
|
||
},
|
||
},
|
||
toggleError: {
|
||
title: 'Operation Failed',
|
||
message: 'An error occurred while toggling medication status, please try again later.',
|
||
},
|
||
formLabels: {
|
||
capsule: 'Capsule',
|
||
pill: 'Tablet',
|
||
tablet: 'Tablet',
|
||
injection: 'Injection',
|
||
spray: 'Spray',
|
||
drop: 'Drops',
|
||
syrup: 'Syrup',
|
||
other: 'Other',
|
||
ointment: 'Ointment',
|
||
},
|
||
frequency: {
|
||
daily: 'Daily',
|
||
weekly: 'Weekly',
|
||
custom: 'Custom',
|
||
},
|
||
cardMeta: 'Started {{date}} | Reminder: {{reminder}}',
|
||
reminderNotSet: 'Not set',
|
||
unknownDate: 'Unknown date',
|
||
},
|
||
// Medication Detail Page
|
||
detail: {
|
||
title: 'Medication Details',
|
||
notFound: {
|
||
title: 'Medication information not found',
|
||
subtitle: 'Please re-enter this page from the medication list.',
|
||
},
|
||
loading: 'Loading...',
|
||
error: {
|
||
title: 'Unable to retrieve medication information at this time, please try again later.',
|
||
subtitle: 'Please check your network and try again, or return to the previous page.',
|
||
},
|
||
sections: {
|
||
plan: 'Medication Plan',
|
||
dosage: 'Dosage & Form',
|
||
note: 'Notes',
|
||
overview: 'Medication Overview',
|
||
aiAnalysis: 'AI Medication Analysis',
|
||
},
|
||
plan: {
|
||
period: 'Medication Period',
|
||
time: 'Medication Time',
|
||
frequency: 'Frequency',
|
||
expiryDate: 'Expiry Date',
|
||
longTerm: 'Long-term',
|
||
periodMessage: 'Start date: {{startDate}}\n{{endDateInfo}}',
|
||
longTermPlan: 'Medication plan: Long-term medication',
|
||
timeMessage: 'Set times: {{times}}',
|
||
dateFormat: 'MMM D, YYYY',
|
||
periodRange: 'From {{startDate}} to {{endDate}}',
|
||
periodLongTerm: 'From {{startDate}} until indefinitely',
|
||
expiryStatus: {
|
||
notSet: 'Not set',
|
||
expired: 'Expired',
|
||
expiresToday: 'Expires today',
|
||
expiresInDays: 'Expires in {{days}} days',
|
||
},
|
||
},
|
||
dosage: {
|
||
label: 'Dosage per administration',
|
||
form: 'Form',
|
||
selectDosage: 'Select Dosage',
|
||
selectForm: 'Select Form',
|
||
dosageValue: 'Dosage Value',
|
||
unit: 'Unit',
|
||
},
|
||
note: {
|
||
label: 'Medication Notes',
|
||
placeholder: 'Record precautions, doctor instructions or custom reminders',
|
||
edit: 'Edit Notes',
|
||
noNote: 'No notes',
|
||
voiceNotSupported: 'Voice-to-text is not supported on this device, you can type notes directly',
|
||
save: 'Save',
|
||
saveError: {
|
||
title: 'Save Failed',
|
||
message: 'An error occurred while submitting notes, please try again later.',
|
||
},
|
||
},
|
||
overview: {
|
||
calculating: 'Calculating...',
|
||
takenCount: 'Taken {{count}} times in total',
|
||
calculatingDays: 'Calculating adherence days',
|
||
startedDays: 'Adhered for {{days}} days',
|
||
startDate: 'Started {{date}}',
|
||
noStartDate: 'No start date',
|
||
},
|
||
aiAnalysis: {
|
||
analyzing: 'Analyzing medication information...',
|
||
analyzingButton: 'Analyzing...',
|
||
reanalyzeButton: 'Reanalyze',
|
||
getAnalysisButton: 'Get AI Analysis',
|
||
button: 'AI Analysis',
|
||
status: {
|
||
generated: 'Generated',
|
||
memberExclusive: 'Member Exclusive',
|
||
pending: 'Pending',
|
||
},
|
||
title: 'Analysis Results',
|
||
recommendation: 'AI Recommended',
|
||
placeholder: 'Get AI analysis to quickly understand suitable populations, ingredient safety, and usage recommendations.',
|
||
categories: {
|
||
suitableFor: 'Suitable For',
|
||
unsuitableFor: 'Unsuitable For',
|
||
sideEffects: 'Possible Side Effects',
|
||
storageAdvice: 'Storage Advice',
|
||
healthAdvice: 'Health/Usage Advice',
|
||
},
|
||
membershipCard: {
|
||
title: 'Member Exclusive AI In-depth Analysis',
|
||
subtitle: 'Unlock complete medication analysis and unlimited usage',
|
||
},
|
||
error: {
|
||
title: 'Analysis Failed',
|
||
message: 'AI analysis failed, please try again later',
|
||
networkError: 'Failed to initiate analysis request, please check network connection',
|
||
unauthorized: 'Please log in first',
|
||
forbidden: 'No access to this medication',
|
||
notFound: 'Medication not found',
|
||
},
|
||
},
|
||
aiDraft: {
|
||
reshoot: 'Reshoot',
|
||
saveAndCreate: 'Save & Create',
|
||
saveError: {
|
||
title: 'Save Failed',
|
||
message: 'An error occurred while creating medication, please try again later',
|
||
},
|
||
},
|
||
status: {
|
||
enabled: 'Reminders Enabled',
|
||
disabled: 'Reminders Disabled',
|
||
},
|
||
delete: {
|
||
title: 'Delete {{name}}?',
|
||
description: 'After deletion, reminders and history related to this medication will be cleared and cannot be recovered.',
|
||
confirm: 'Delete',
|
||
cancel: 'Cancel',
|
||
error: {
|
||
title: 'Delete Failed',
|
||
message: 'An error occurred while removing this medication, please try again later.',
|
||
},
|
||
},
|
||
deactivate: {
|
||
title: 'Deactivate {{name}}?',
|
||
description: 'After deactivation, medication plans generated for the day will be deleted and cannot be recovered.',
|
||
confirm: 'Confirm Deactivation',
|
||
cancel: 'Cancel',
|
||
error: {
|
||
title: 'Operation Failed',
|
||
message: 'An error occurred while deactivating medication, please try again later.',
|
||
},
|
||
},
|
||
toggleError: {
|
||
title: 'Operation Failed',
|
||
message: 'An error occurred while toggling reminder status, please try again later.',
|
||
},
|
||
updateErrors: {
|
||
dosage: 'Update Failed',
|
||
dosageMessage: 'An error occurred while updating dosage, please try again later.',
|
||
form: 'Update Failed',
|
||
formMessage: 'An error occurred while updating form, please try again later.',
|
||
expiryDate: 'Update Failed',
|
||
expiryDateMessage: 'Failed to update expiry date, please try again later.',
|
||
},
|
||
imageViewer: {
|
||
close: 'Close',
|
||
},
|
||
pickers: {
|
||
cancel: 'Cancel',
|
||
confirm: 'Confirm',
|
||
},
|
||
},
|
||
// Edit Frequency Page
|
||
editFrequency: {
|
||
title: 'Edit Medication Frequency',
|
||
missingParams: 'Missing required parameters',
|
||
medicationName: 'Editing: {{name}}',
|
||
sections: {
|
||
frequency: 'Medication Frequency',
|
||
frequencyDescription: 'Set daily medication frequency',
|
||
time: 'Daily Reminder Times',
|
||
timeDescription: 'Add and manage daily reminder times',
|
||
},
|
||
frequency: {
|
||
repeatPattern: 'Repeat Pattern',
|
||
timesPerDay: 'Times Per Day',
|
||
daily: 'Daily',
|
||
weekly: 'Weekly',
|
||
custom: 'Custom',
|
||
timesLabel: '{{count}} times',
|
||
summary: '{{pattern}} {{count}} times',
|
||
},
|
||
time: {
|
||
addTime: 'Add Time',
|
||
editTime: 'Edit Reminder Time',
|
||
addTimeButton: 'Add Time',
|
||
},
|
||
actions: {
|
||
save: 'Save Changes',
|
||
},
|
||
error: {
|
||
title: 'Update Failed',
|
||
message: 'An error occurred while updating medication frequency, please try again later.',
|
||
},
|
||
pickers: {
|
||
cancel: 'Cancel',
|
||
confirm: 'Confirm',
|
||
},
|
||
},
|
||
aiProgress: {
|
||
title: 'Analyzing',
|
||
steps: {
|
||
analyzing_product: 'Analyzing product...',
|
||
analyzing_suitability: 'Checking suitability...',
|
||
analyzing_ingredients: 'Evaluating ingredients...',
|
||
analyzing_effects: 'Generating safety advice...',
|
||
completed: 'Completed, loading details...',
|
||
},
|
||
errors: {
|
||
default: 'Recognition failed, please retake photo',
|
||
queryFailed: 'Query failed, please try again later',
|
||
},
|
||
modal: {
|
||
title: 'Retake Required',
|
||
retry: 'Retake Photo',
|
||
},
|
||
},
|
||
aiCamera: {
|
||
title: 'AI Scan',
|
||
steps: {
|
||
front: {
|
||
title: 'Front',
|
||
subtitle: 'Ensure medication name is clearly visible',
|
||
},
|
||
side: {
|
||
title: 'Back',
|
||
subtitle: 'Include specs and ingredients info',
|
||
},
|
||
aux: {
|
||
title: 'Side',
|
||
subtitle: 'Add more details to improve accuracy',
|
||
},
|
||
stepProgress: 'Step {{current}} / {{total}}',
|
||
optional: '(Optional)',
|
||
notTaken: 'Empty',
|
||
},
|
||
buttons: {
|
||
flip: 'Flip',
|
||
capture: 'Snap',
|
||
complete: 'Done',
|
||
album: 'Album',
|
||
},
|
||
permission: {
|
||
title: 'Camera Permission Required',
|
||
description: 'Allow access to capture medication packaging for automatic recognition',
|
||
button: 'Allow Camera Access',
|
||
},
|
||
alerts: {
|
||
pickFailed: {
|
||
title: 'Selection Failed',
|
||
message: 'Please try again or choose another image',
|
||
},
|
||
captureFailed: {
|
||
title: 'Capture Failed',
|
||
message: 'Please try again',
|
||
},
|
||
insufficientPhotos: {
|
||
title: 'Photos Missing',
|
||
message: 'Please capture at least front and back sides',
|
||
},
|
||
taskFailed: {
|
||
title: 'Task Creation Failed',
|
||
defaultMessage: 'Please check network and try again',
|
||
},
|
||
},
|
||
guideModal: {
|
||
badge: 'Guide',
|
||
title: 'Keep Photos Clear',
|
||
description1: 'Please capture the product name and description on the front/back of the medication.',
|
||
description2: 'Ensure good lighting, avoid glare, and keep text legible. Photo clarity affects recognition accuracy.',
|
||
button: 'Got it!',
|
||
},
|
||
},
|
||
aiSummary: {
|
||
title: 'AI Medication Summary',
|
||
headerBadge: 'AI Insight',
|
||
subtitle: 'Adherence and safety overview',
|
||
overviewTitle: 'Adherence snapshot',
|
||
keyInsights: 'AI key insight',
|
||
refresh: 'DeepSeek is analyzing, please wait...',
|
||
stats: {
|
||
activePlans: 'Active plans',
|
||
plannedDoses: 'Planned doses',
|
||
takenDoses: 'Taken doses',
|
||
completion: 'Overall completion',
|
||
avgCompletion: 'Avg adherence',
|
||
activeDays: 'Planned days',
|
||
},
|
||
badges: {
|
||
adherence: 'Adherence',
|
||
safety: 'Monitoring',
|
||
},
|
||
doseSummary: 'Completed {{taken}} / {{planned}}',
|
||
daysLabel: '{{days}} day plan • {{times}} times/day',
|
||
completionLabel: '{{value}}% completed',
|
||
emptyTitle: 'No active medication plans',
|
||
emptyDescription: 'Activate or add a plan to generate the AI summary.',
|
||
error403: 'Free AI quota is used up, please upgrade to continue.',
|
||
genericError: 'Unable to load AI summary, please try again later.',
|
||
keyInsightPlaceholder: 'No AI insight available yet.',
|
||
listTitle: 'Plan breakdown',
|
||
updatedAt: 'Updated {{time}}',
|
||
pillChip: 'Professional advice',
|
||
retry: 'Retry',
|
||
infoModal: {
|
||
badge: 'Info',
|
||
title: 'Refresh & Adherence',
|
||
point1: '• Daily Generation: Based on active medication plans and actual check-in data, generated daily.',
|
||
point2: '• Refresh Effect: Retrieves the latest plan vs. actual completion and AI analysis, no extra quota used.',
|
||
point3: '• Adherence: Degree of following the plan (completion rate). Higher means better compliance and lower risk.',
|
||
point4: '• Statistics: Only counts plans with isActive=true and not deleted; completion only counts records with status "taken".',
|
||
button: 'Got it',
|
||
},
|
||
completionInfoModal: {
|
||
badge: 'Calculation',
|
||
title: 'Completion Calculation Logic',
|
||
point1: '• Overall completion = (Total actual doses taken ÷ Total planned doses) × 100%',
|
||
point2: '• Actual doses taken: Number of medication records marked as "taken"',
|
||
point3: '• Planned doses: Total doses calculated from the plan start date to current date based on daily frequency',
|
||
point4: '• Detailed calculation: (Current date - Start date + 1) × Daily doses, e.g.: Day 5 with 2 daily doses = 10 total planned doses',
|
||
point5: '• Individual plan completion = (Actual doses taken for that plan ÷ Planned doses for that plan) × 100%',
|
||
button: 'Understood',
|
||
},
|
||
},
|
||
aiSummaryInfo: {
|
||
title: 'AI Medication Summary',
|
||
placeholderImage: 'Intro Image',
|
||
viewImage: 'View Full Image',
|
||
features: {
|
||
intelligent: {
|
||
title: 'Intelligent Analysis',
|
||
description: 'AI deeply analyzes your medication records to provide personalized health recommendations',
|
||
},
|
||
tracking: {
|
||
title: 'Trend Tracking',
|
||
description: 'Long-term tracking of medication effects to help optimize treatment plans',
|
||
},
|
||
professional: {
|
||
title: 'Professional & Reliable',
|
||
description: 'Based on medical knowledge base, providing safe and reliable health analysis',
|
||
},
|
||
},
|
||
confirmButton: 'Subscribe Now',
|
||
},
|
||
};
|