diff --git a/fe/src/i18n/de.json b/fe/src/i18n/de.json index 838bc94..ab6a3ff 100644 --- a/fe/src/i18n/de.json +++ b/fe/src/i18n/de.json @@ -270,5 +270,292 @@ "removeMemberSuccess": "DE: Member removed successfully", "removeMemberFailed": "DE: Failed to remove member" } + }, + "accountPage": { + "title": "Account Settings", + "loadingProfile": "Loading profile...", + "retryButton": "Retry", + "profileSection": { + "header": "Profile Information", + "nameLabel": "Name", + "emailLabel": "Email", + "saveButton": "Save Changes" + }, + "passwordSection": { + "header": "Change Password", + "currentPasswordLabel": "Current Password", + "newPasswordLabel": "New Password", + "changeButton": "Change Password" + }, + "notificationsSection": { + "header": "Notification Preferences", + "emailNotificationsLabel": "Email Notifications", + "emailNotificationsDescription": "Receive email notifications for important updates", + "listUpdatesLabel": "List Updates", + "listUpdatesDescription": "Get notified when lists are updated", + "groupActivitiesLabel": "Group Activities", + "groupActivitiesDescription": "Receive notifications for group activities" + }, + "notifications": { + "profileLoadFailed": "Failed to load profile", + "profileUpdateSuccess": "Profile updated successfully", + "profileUpdateFailed": "Failed to update profile", + "passwordFieldsRequired": "Please fill in both current and new password fields.", + "passwordTooShort": "New password must be at least 8 characters long.", + "passwordChangeSuccess": "Password changed successfully", + "passwordChangeFailed": "Failed to change password", + "preferencesUpdateSuccess": "Preferences updated successfully", + "preferencesUpdateFailed": "Failed to update preferences" + }, + "saving": "Saving..." + }, + "signupPage": { + "header": "Sign Up", + "fullNameLabel": "Full Name", + "emailLabel": "Email", + "passwordLabel": "Password", + "confirmPasswordLabel": "Confirm Password", + "togglePasswordVisibility": "Toggle password visibility", + "submitButton": "Sign Up", + "loginLink": "Already have an account? Login", + "validation": { + "nameRequired": "Name is required", + "emailRequired": "Email is required", + "emailInvalid": "Invalid email format", + "passwordRequired": "Password is required", + "passwordLength": "Password must be at least 8 characters", + "confirmPasswordRequired": "Please confirm your password", + "passwordsNoMatch": "Passwords do not match" + }, + "notifications": { + "signupFailed": "Signup failed. Please try again.", + "signupSuccess": "Account created successfully. Please login." + } + }, + "listDetailPage": { + "loading": { + "list": "Loading list...", + "items": "Loading items...", + "ocrProcessing": "Processing image...", + "addingOcrItems": "Adding OCR items...", + "costSummary": "Loading summary...", + "expenses": "Loading expenses...", + "settlement": "Processing settlement..." + }, + "errors": { + "fetchFailed": "Failed to load list details.", + "genericLoadFailure": "Group not found or an error occurred.", + "ocrNoItems": "No items extracted from the image.", + "ocrFailed": "Failed to process image.", + "addItemFailed": "Failed to add item.", + "updateItemFailed": "Failed to update item.", + "updateItemPriceFailed": "Failed to update item price.", + "deleteItemFailed": "Failed to delete item.", + "addOcrItemsFailed": "Failed to add OCR items.", + "fetchItemsFailed": "Failed to load items: {errorMessage}", + "loadCostSummaryFailed": "Failed to load cost summary." + }, + "retryButton": "Retry", + "buttons": { + "addViaOcr": "Add via OCR", + "addItem": "Add", + "addItems": "Add Items", + "cancel": "Cancel", + "confirm": "Confirm", + "saveChanges": "Save Changes", + "close": "Close", + "costSummary": "Cost Summary" + }, + "badges": { + "groupList": "Group List", + "personalList": "Personal List" + }, + "items": { + "emptyState": { + "title": "No Items Yet!", + "message": "Add some items using the form below." + }, + "addItemForm": { + "placeholder": "Add a new item", + "quantityPlaceholder": "Qty", + "itemNameSrLabel": "New item name", + "quantitySrLabel": "Quantity" + }, + "pricePlaceholder": "Price", + "editItemAriaLabel": "Edit item", + "deleteItemAriaLabel": "Delete item" + }, + "modals": { + "ocr": { + "title": "Add Items via OCR", + "uploadLabel": "Upload Image" + }, + "confirmation": { + "title": "Confirmation" + }, + "editItem": { + "title": "Edit Item", + "nameLabel": "Item Name", + "quantityLabel": "Quantity" + }, + "costSummary": { + "title": "List Cost Summary", + "totalCostLabel": "Total List Cost:", + "equalShareLabel": "Equal Share Per User:", + "participantsLabel": "Participating Users:", + "userBalancesHeader": "User Balances", + "tableHeaders": { + "user": "User", + "itemsAddedValue": "Items Added Value", + "amountDue": "Amount Due", + "balance": "Balance" + }, + "emptyState": "No cost summary available." + }, + "settleShare": { + "title": "Settle Share", + "settleAmountFor": "Settle amount for {userName}:", + "amountLabel": "Amount", + "errors": { + "enterAmount": "Please enter an amount.", + "positiveAmount": "Please enter a positive amount.", + "exceedsRemaining": "Amount cannot exceed remaining: {amount}.", + "noSplitSelected": "Error: No split selected." + } + } + }, + "confirmations": { + "updateMessage": "Mark '{itemName}' as {status}?", + "statusComplete": "complete", + "statusIncomplete": "incomplete", + "deleteMessage": "Delete '{itemName}'? This cannot be undone." + }, + "notifications": { + "itemAddedSuccess": "Item added successfully.", + "itemsAddedSuccessOcr": "{count} item(s) added successfully from OCR.", + "itemUpdatedSuccess": "Item updated successfully.", + "itemDeleteSuccess": "Item deleted successfully.", + "enterItemName": "Please enter an item name.", + "costSummaryLoadFailed": "Failed to load cost summary.", + "cannotSettleOthersShares": "You can only settle your own shares.", + "settlementDataMissing": "Cannot process settlement: missing data.", + "settleShareSuccess": "Share settled successfully!", + "settleShareFailed": "Failed to settle share." + }, + "expensesSection": { + "title": "Expenses", + "addExpenseButton": "Add Expense", + "loading": "Loading expenses...", + "emptyState": "No expenses recorded for this list yet.", + "paidBy": "Paid by:", + "onDate": "on", + "owes": "owes", + "paidAmount": "Paid:", + "activityLabel": "Activity:", + "byUser": "by", + "settleShareButton": "Settle My Share", + "retryButton": "Retry" + }, + "status": { + "settled": "Settled", + "partiallySettled": "Partially Settled", + "unsettled": "Unsettled", + "paid": "Paid", + "partiallyPaid": "Partially Paid", + "unpaid": "Unpaid", + "unknown": "Unknown Status" + } + }, + "myChoresPage": { + "title": "My Assigned Chores", + "showCompletedToggle": "Show Completed", + "timelineHeaders": { + "overdue": "Overdue", + "today": "Due Today", + "thisWeek": "This Week", + "later": "Later", + "completed": "Completed" + }, + "choreCard": { + "personal": "Personal", + "group": "Group", + "duePrefix": "Due", + "completedPrefix": "Completed", + "dueToday": "Due Today", + "markCompleteButton": "Mark Complete" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "unknownDate": "Unknown Date" + }, + "emptyState": { + "title": "No Assignments Yet!", + "noAssignmentsPending": "You have no pending chore assignments.", + "noAssignmentsAll": "You have no chore assignments (completed or pending).", + "viewAllChoresButton": "View All Chores" + }, + "notifications": { + "loadFailed": "Failed to load assignments", + "markedComplete": "Marked \"{choreName}\" as complete!", + "markCompleteFailed": "Failed to mark assignment as complete" + } + }, + "personalChoresPage": { + "title": "Personal Chores", + "newChoreButton": "New Chore", + "editButton": "Edit", + "deleteButton": "Delete", + "cancelButton": "Cancel", + "saveButton": "Save", + "modals": { + "editChoreTitle": "Edit Chore", + "newChoreTitle": "New Chore", + "deleteChoreTitle": "Delete Chore" + }, + "form": { + "nameLabel": "Name", + "descriptionLabel": "Description", + "frequencyLabel": "Frequency", + "intervalLabel": "Interval (days)", + "dueDateLabel": "Next Due Date" + }, + "deleteDialog": { + "confirmationText": "Are you sure you want to delete this chore?" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "duePrefix": "Due" + }, + "notifications": { + "loadFailed": "Failed to load personal chores", + "updateSuccess": "Personal chore updated successfully", + "createSuccess": "Personal chore created successfully", + "saveFailed": "Failed to save personal chore", + "deleteSuccess": "Personal chore deleted successfully", + "deleteFailed": "Failed to delete personal chore" + } + }, + "indexPage": { + "welcomeMessage": "Welcome to Valerie UI App", + "mainPageInfo": "This is the main index page.", + "sampleTodosHeader": "Sample Todos (from IndexPage data)", + "totalCountLabel": "Total count from meta:", + "noTodos": "No todos to display." } } diff --git a/fe/src/i18n/en.json b/fe/src/i18n/en.json index 133984c..8e85b52 100644 --- a/fe/src/i18n/en.json +++ b/fe/src/i18n/en.json @@ -270,5 +270,292 @@ "removeMemberSuccess": "Member removed successfully", "removeMemberFailed": "Failed to remove member" } + }, + "accountPage": { + "title": "Account Settings", + "loadingProfile": "Loading profile...", + "retryButton": "Retry", + "profileSection": { + "header": "Profile Information", + "nameLabel": "Name", + "emailLabel": "Email", + "saveButton": "Save Changes" + }, + "passwordSection": { + "header": "Change Password", + "currentPasswordLabel": "Current Password", + "newPasswordLabel": "New Password", + "changeButton": "Change Password" + }, + "notificationsSection": { + "header": "Notification Preferences", + "emailNotificationsLabel": "Email Notifications", + "emailNotificationsDescription": "Receive email notifications for important updates", + "listUpdatesLabel": "List Updates", + "listUpdatesDescription": "Get notified when lists are updated", + "groupActivitiesLabel": "Group Activities", + "groupActivitiesDescription": "Receive notifications for group activities" + }, + "notifications": { + "profileLoadFailed": "Failed to load profile", + "profileUpdateSuccess": "Profile updated successfully", + "profileUpdateFailed": "Failed to update profile", + "passwordFieldsRequired": "Please fill in both current and new password fields.", + "passwordTooShort": "New password must be at least 8 characters long.", + "passwordChangeSuccess": "Password changed successfully", + "passwordChangeFailed": "Failed to change password", + "preferencesUpdateSuccess": "Preferences updated successfully", + "preferencesUpdateFailed": "Failed to update preferences" + }, + "saving": "Saving..." + }, + "signupPage": { + "header": "Sign Up", + "fullNameLabel": "Full Name", + "emailLabel": "Email", + "passwordLabel": "Password", + "confirmPasswordLabel": "Confirm Password", + "togglePasswordVisibility": "Toggle password visibility", + "submitButton": "Sign Up", + "loginLink": "Already have an account? Login", + "validation": { + "nameRequired": "Name is required", + "emailRequired": "Email is required", + "emailInvalid": "Invalid email format", + "passwordRequired": "Password is required", + "passwordLength": "Password must be at least 8 characters", + "confirmPasswordRequired": "Please confirm your password", + "passwordsNoMatch": "Passwords do not match" + }, + "notifications": { + "signupFailed": "Signup failed. Please try again.", + "signupSuccess": "Account created successfully. Please login." + } + }, + "listDetailPage": { + "loading": { + "list": "Loading list...", + "items": "Loading items...", + "ocrProcessing": "Processing image...", + "addingOcrItems": "Adding OCR items...", + "costSummary": "Loading summary...", + "expenses": "Loading expenses...", + "settlement": "Processing settlement..." + }, + "errors": { + "fetchFailed": "Failed to load list details.", + "genericLoadFailure": "Group not found or an error occurred.", + "ocrNoItems": "No items extracted from the image.", + "ocrFailed": "Failed to process image.", + "addItemFailed": "Failed to add item.", + "updateItemFailed": "Failed to update item.", + "updateItemPriceFailed": "Failed to update item price.", + "deleteItemFailed": "Failed to delete item.", + "addOcrItemsFailed": "Failed to add OCR items.", + "fetchItemsFailed": "Failed to load items: {errorMessage}", + "loadCostSummaryFailed": "Failed to load cost summary." + }, + "retryButton": "Retry", + "buttons": { + "addViaOcr": "Add via OCR", + "addItem": "Add", + "addItems": "Add Items", + "cancel": "Cancel", + "confirm": "Confirm", + "saveChanges": "Save Changes", + "close": "Close", + "costSummary": "Cost Summary" + }, + "badges": { + "groupList": "Group List", + "personalList": "Personal List" + }, + "items": { + "emptyState": { + "title": "No Items Yet!", + "message": "Add some items using the form below." + }, + "addItemForm": { + "placeholder": "Add a new item", + "quantityPlaceholder": "Qty", + "itemNameSrLabel": "New item name", + "quantitySrLabel": "Quantity" + }, + "pricePlaceholder": "Price", + "editItemAriaLabel": "Edit item", + "deleteItemAriaLabel": "Delete item" + }, + "modals": { + "ocr": { + "title": "Add Items via OCR", + "uploadLabel": "Upload Image" + }, + "confirmation": { + "title": "Confirmation" + }, + "editItem": { + "title": "Edit Item", + "nameLabel": "Item Name", + "quantityLabel": "Quantity" + }, + "costSummary": { + "title": "List Cost Summary", + "totalCostLabel": "Total List Cost:", + "equalShareLabel": "Equal Share Per User:", + "participantsLabel": "Participating Users:", + "userBalancesHeader": "User Balances", + "tableHeaders": { + "user": "User", + "itemsAddedValue": "Items Added Value", + "amountDue": "Amount Due", + "balance": "Balance" + }, + "emptyState": "No cost summary available." + }, + "settleShare": { + "title": "Settle Share", + "settleAmountFor": "Settle amount for {userName}:", + "amountLabel": "Amount", + "errors": { + "enterAmount": "Please enter an amount.", + "positiveAmount": "Please enter a positive amount.", + "exceedsRemaining": "Amount cannot exceed remaining: {amount}.", + "noSplitSelected": "Error: No split selected." + } + } + }, + "confirmations": { + "updateMessage": "Mark '{itemName}' as {status}?", + "statusComplete": "complete", + "statusIncomplete": "incomplete", + "deleteMessage": "Delete '{itemName}'? This cannot be undone." + }, + "notifications": { + "itemAddedSuccess": "Item added successfully.", + "itemsAddedSuccessOcr": "{count} item(s) added successfully from OCR.", + "itemUpdatedSuccess": "Item updated successfully.", + "itemDeleteSuccess": "Item deleted successfully.", + "enterItemName": "Please enter an item name.", + "costSummaryLoadFailed": "Failed to load cost summary.", + "cannotSettleOthersShares": "You can only settle your own shares.", + "settlementDataMissing": "Cannot process settlement: missing data.", + "settleShareSuccess": "Share settled successfully!", + "settleShareFailed": "Failed to settle share." + }, + "expensesSection": { + "title": "Expenses", + "addExpenseButton": "Add Expense", + "loading": "Loading expenses...", + "emptyState": "No expenses recorded for this list yet.", + "paidBy": "Paid by:", + "onDate": "on", + "owes": "owes", + "paidAmount": "Paid:", + "activityLabel": "Activity:", + "byUser": "by", + "settleShareButton": "Settle My Share", + "retryButton": "Retry" + }, + "status": { + "settled": "Settled", + "partiallySettled": "Partially Settled", + "unsettled": "Unsettled", + "paid": "Paid", + "partiallyPaid": "Partially Paid", + "unpaid": "Unpaid", + "unknown": "Unknown Status" + } + }, + "myChoresPage": { + "title": "My Assigned Chores", + "showCompletedToggle": "Show Completed", + "timelineHeaders": { + "overdue": "Overdue", + "today": "Due Today", + "thisWeek": "This Week", + "later": "Later", + "completed": "Completed" + }, + "choreCard": { + "personal": "Personal", + "group": "Group", + "duePrefix": "Due", + "completedPrefix": "Completed", + "dueToday": "Due Today", + "markCompleteButton": "Mark Complete" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "unknownDate": "Unknown Date" + }, + "emptyState": { + "title": "No Assignments Yet!", + "noAssignmentsPending": "You have no pending chore assignments.", + "noAssignmentsAll": "You have no chore assignments (completed or pending).", + "viewAllChoresButton": "View All Chores" + }, + "notifications": { + "loadFailed": "Failed to load assignments", + "markedComplete": "Marked \"{choreName}\" as complete!", + "markCompleteFailed": "Failed to mark assignment as complete" + } + }, + "personalChoresPage": { + "title": "Personal Chores", + "newChoreButton": "New Chore", + "editButton": "Edit", + "deleteButton": "Delete", + "cancelButton": "Cancel", + "saveButton": "Save", + "modals": { + "editChoreTitle": "Edit Chore", + "newChoreTitle": "New Chore", + "deleteChoreTitle": "Delete Chore" + }, + "form": { + "nameLabel": "Name", + "descriptionLabel": "Description", + "frequencyLabel": "Frequency", + "intervalLabel": "Interval (days)", + "dueDateLabel": "Next Due Date" + }, + "deleteDialog": { + "confirmationText": "Are you sure you want to delete this chore?" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "duePrefix": "Due" + }, + "notifications": { + "loadFailed": "Failed to load personal chores", + "updateSuccess": "Personal chore updated successfully", + "createSuccess": "Personal chore created successfully", + "saveFailed": "Failed to save personal chore", + "deleteSuccess": "Personal chore deleted successfully", + "deleteFailed": "Failed to delete personal chore" + } + }, + "indexPage": { + "welcomeMessage": "Welcome to Valerie UI App", + "mainPageInfo": "This is the main index page.", + "sampleTodosHeader": "Sample Todos (from IndexPage data)", + "totalCountLabel": "Total count from meta:", + "noTodos": "No todos to display." } } diff --git a/fe/src/i18n/es.json b/fe/src/i18n/es.json index b57d2e5..665870e 100644 --- a/fe/src/i18n/es.json +++ b/fe/src/i18n/es.json @@ -270,5 +270,292 @@ "removeMemberSuccess": "ES: Member removed successfully", "removeMemberFailed": "ES: Failed to remove member" } + }, + "accountPage": { + "title": "Account Settings", + "loadingProfile": "Loading profile...", + "retryButton": "Retry", + "profileSection": { + "header": "Profile Information", + "nameLabel": "Name", + "emailLabel": "Email", + "saveButton": "Save Changes" + }, + "passwordSection": { + "header": "Change Password", + "currentPasswordLabel": "Current Password", + "newPasswordLabel": "New Password", + "changeButton": "Change Password" + }, + "notificationsSection": { + "header": "Notification Preferences", + "emailNotificationsLabel": "Email Notifications", + "emailNotificationsDescription": "Receive email notifications for important updates", + "listUpdatesLabel": "List Updates", + "listUpdatesDescription": "Get notified when lists are updated", + "groupActivitiesLabel": "Group Activities", + "groupActivitiesDescription": "Receive notifications for group activities" + }, + "notifications": { + "profileLoadFailed": "Failed to load profile", + "profileUpdateSuccess": "Profile updated successfully", + "profileUpdateFailed": "Failed to update profile", + "passwordFieldsRequired": "Please fill in both current and new password fields.", + "passwordTooShort": "New password must be at least 8 characters long.", + "passwordChangeSuccess": "Password changed successfully", + "passwordChangeFailed": "Failed to change password", + "preferencesUpdateSuccess": "Preferences updated successfully", + "preferencesUpdateFailed": "Failed to update preferences" + }, + "saving": "Saving..." + }, + "signupPage": { + "header": "Sign Up", + "fullNameLabel": "Full Name", + "emailLabel": "Email", + "passwordLabel": "Password", + "confirmPasswordLabel": "Confirm Password", + "togglePasswordVisibility": "Toggle password visibility", + "submitButton": "Sign Up", + "loginLink": "Already have an account? Login", + "validation": { + "nameRequired": "Name is required", + "emailRequired": "Email is required", + "emailInvalid": "Invalid email format", + "passwordRequired": "Password is required", + "passwordLength": "Password must be at least 8 characters", + "confirmPasswordRequired": "Please confirm your password", + "passwordsNoMatch": "Passwords do not match" + }, + "notifications": { + "signupFailed": "Signup failed. Please try again.", + "signupSuccess": "Account created successfully. Please login." + } + }, + "listDetailPage": { + "loading": { + "list": "Loading list...", + "items": "Loading items...", + "ocrProcessing": "Processing image...", + "addingOcrItems": "Adding OCR items...", + "costSummary": "Loading summary...", + "expenses": "Loading expenses...", + "settlement": "Processing settlement..." + }, + "errors": { + "fetchFailed": "Failed to load list details.", + "genericLoadFailure": "Group not found or an error occurred.", + "ocrNoItems": "No items extracted from the image.", + "ocrFailed": "Failed to process image.", + "addItemFailed": "Failed to add item.", + "updateItemFailed": "Failed to update item.", + "updateItemPriceFailed": "Failed to update item price.", + "deleteItemFailed": "Failed to delete item.", + "addOcrItemsFailed": "Failed to add OCR items.", + "fetchItemsFailed": "Failed to load items: {errorMessage}", + "loadCostSummaryFailed": "Failed to load cost summary." + }, + "retryButton": "Retry", + "buttons": { + "addViaOcr": "Add via OCR", + "addItem": "Add", + "addItems": "Add Items", + "cancel": "Cancel", + "confirm": "Confirm", + "saveChanges": "Save Changes", + "close": "Close", + "costSummary": "Cost Summary" + }, + "badges": { + "groupList": "Group List", + "personalList": "Personal List" + }, + "items": { + "emptyState": { + "title": "No Items Yet!", + "message": "Add some items using the form below." + }, + "addItemForm": { + "placeholder": "Add a new item", + "quantityPlaceholder": "Qty", + "itemNameSrLabel": "New item name", + "quantitySrLabel": "Quantity" + }, + "pricePlaceholder": "Price", + "editItemAriaLabel": "Edit item", + "deleteItemAriaLabel": "Delete item" + }, + "modals": { + "ocr": { + "title": "Add Items via OCR", + "uploadLabel": "Upload Image" + }, + "confirmation": { + "title": "Confirmation" + }, + "editItem": { + "title": "Edit Item", + "nameLabel": "Item Name", + "quantityLabel": "Quantity" + }, + "costSummary": { + "title": "List Cost Summary", + "totalCostLabel": "Total List Cost:", + "equalShareLabel": "Equal Share Per User:", + "participantsLabel": "Participating Users:", + "userBalancesHeader": "User Balances", + "tableHeaders": { + "user": "User", + "itemsAddedValue": "Items Added Value", + "amountDue": "Amount Due", + "balance": "Balance" + }, + "emptyState": "No cost summary available." + }, + "settleShare": { + "title": "Settle Share", + "settleAmountFor": "Settle amount for {userName}:", + "amountLabel": "Amount", + "errors": { + "enterAmount": "Please enter an amount.", + "positiveAmount": "Please enter a positive amount.", + "exceedsRemaining": "Amount cannot exceed remaining: {amount}.", + "noSplitSelected": "Error: No split selected." + } + } + }, + "confirmations": { + "updateMessage": "Mark '{itemName}' as {status}?", + "statusComplete": "complete", + "statusIncomplete": "incomplete", + "deleteMessage": "Delete '{itemName}'? This cannot be undone." + }, + "notifications": { + "itemAddedSuccess": "Item added successfully.", + "itemsAddedSuccessOcr": "{count} item(s) added successfully from OCR.", + "itemUpdatedSuccess": "Item updated successfully.", + "itemDeleteSuccess": "Item deleted successfully.", + "enterItemName": "Please enter an item name.", + "costSummaryLoadFailed": "Failed to load cost summary.", + "cannotSettleOthersShares": "You can only settle your own shares.", + "settlementDataMissing": "Cannot process settlement: missing data.", + "settleShareSuccess": "Share settled successfully!", + "settleShareFailed": "Failed to settle share." + }, + "expensesSection": { + "title": "Expenses", + "addExpenseButton": "Add Expense", + "loading": "Loading expenses...", + "emptyState": "No expenses recorded for this list yet.", + "paidBy": "Paid by:", + "onDate": "on", + "owes": "owes", + "paidAmount": "Paid:", + "activityLabel": "Activity:", + "byUser": "by", + "settleShareButton": "Settle My Share", + "retryButton": "Retry" + }, + "status": { + "settled": "Settled", + "partiallySettled": "Partially Settled", + "unsettled": "Unsettled", + "paid": "Paid", + "partiallyPaid": "Partially Paid", + "unpaid": "Unpaid", + "unknown": "Unknown Status" + } + }, + "myChoresPage": { + "title": "My Assigned Chores", + "showCompletedToggle": "Show Completed", + "timelineHeaders": { + "overdue": "Overdue", + "today": "Due Today", + "thisWeek": "This Week", + "later": "Later", + "completed": "Completed" + }, + "choreCard": { + "personal": "Personal", + "group": "Group", + "duePrefix": "Due", + "completedPrefix": "Completed", + "dueToday": "Due Today", + "markCompleteButton": "Mark Complete" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "unknownDate": "Unknown Date" + }, + "emptyState": { + "title": "No Assignments Yet!", + "noAssignmentsPending": "You have no pending chore assignments.", + "noAssignmentsAll": "You have no chore assignments (completed or pending).", + "viewAllChoresButton": "View All Chores" + }, + "notifications": { + "loadFailed": "Failed to load assignments", + "markedComplete": "Marked \"{choreName}\" as complete!", + "markCompleteFailed": "Failed to mark assignment as complete" + } + }, + "personalChoresPage": { + "title": "Personal Chores", + "newChoreButton": "New Chore", + "editButton": "Edit", + "deleteButton": "Delete", + "cancelButton": "Cancel", + "saveButton": "Save", + "modals": { + "editChoreTitle": "Edit Chore", + "newChoreTitle": "New Chore", + "deleteChoreTitle": "Delete Chore" + }, + "form": { + "nameLabel": "Name", + "descriptionLabel": "Description", + "frequencyLabel": "Frequency", + "intervalLabel": "Interval (days)", + "dueDateLabel": "Next Due Date" + }, + "deleteDialog": { + "confirmationText": "Are you sure you want to delete this chore?" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "duePrefix": "Due" + }, + "notifications": { + "loadFailed": "Failed to load personal chores", + "updateSuccess": "Personal chore updated successfully", + "createSuccess": "Personal chore created successfully", + "saveFailed": "Failed to save personal chore", + "deleteSuccess": "Personal chore deleted successfully", + "deleteFailed": "Failed to delete personal chore" + } + }, + "indexPage": { + "welcomeMessage": "Welcome to Valerie UI App", + "mainPageInfo": "This is the main index page.", + "sampleTodosHeader": "Sample Todos (from IndexPage data)", + "totalCountLabel": "Total count from meta:", + "noTodos": "No todos to display." } } diff --git a/fe/src/i18n/fr.json b/fe/src/i18n/fr.json index 0251c52..cf8c4fc 100644 --- a/fe/src/i18n/fr.json +++ b/fe/src/i18n/fr.json @@ -270,5 +270,292 @@ "removeMemberSuccess": "FR: Member removed successfully", "removeMemberFailed": "FR: Failed to remove member" } + }, + "accountPage": { + "title": "Account Settings", + "loadingProfile": "Loading profile...", + "retryButton": "Retry", + "profileSection": { + "header": "Profile Information", + "nameLabel": "Name", + "emailLabel": "Email", + "saveButton": "Save Changes" + }, + "passwordSection": { + "header": "Change Password", + "currentPasswordLabel": "Current Password", + "newPasswordLabel": "New Password", + "changeButton": "Change Password" + }, + "notificationsSection": { + "header": "Notification Preferences", + "emailNotificationsLabel": "Email Notifications", + "emailNotificationsDescription": "Receive email notifications for important updates", + "listUpdatesLabel": "List Updates", + "listUpdatesDescription": "Get notified when lists are updated", + "groupActivitiesLabel": "Group Activities", + "groupActivitiesDescription": "Receive notifications for group activities" + }, + "notifications": { + "profileLoadFailed": "Failed to load profile", + "profileUpdateSuccess": "Profile updated successfully", + "profileUpdateFailed": "Failed to update profile", + "passwordFieldsRequired": "Please fill in both current and new password fields.", + "passwordTooShort": "New password must be at least 8 characters long.", + "passwordChangeSuccess": "Password changed successfully", + "passwordChangeFailed": "Failed to change password", + "preferencesUpdateSuccess": "Preferences updated successfully", + "preferencesUpdateFailed": "Failed to update preferences" + }, + "saving": "Saving..." + }, + "signupPage": { + "header": "Sign Up", + "fullNameLabel": "Full Name", + "emailLabel": "Email", + "passwordLabel": "Password", + "confirmPasswordLabel": "Confirm Password", + "togglePasswordVisibility": "Toggle password visibility", + "submitButton": "Sign Up", + "loginLink": "Already have an account? Login", + "validation": { + "nameRequired": "Name is required", + "emailRequired": "Email is required", + "emailInvalid": "Invalid email format", + "passwordRequired": "Password is required", + "passwordLength": "Password must be at least 8 characters", + "confirmPasswordRequired": "Please confirm your password", + "passwordsNoMatch": "Passwords do not match" + }, + "notifications": { + "signupFailed": "Signup failed. Please try again.", + "signupSuccess": "Account created successfully. Please login." + } + }, + "listDetailPage": { + "loading": { + "list": "Loading list...", + "items": "Loading items...", + "ocrProcessing": "Processing image...", + "addingOcrItems": "Adding OCR items...", + "costSummary": "Loading summary...", + "expenses": "Loading expenses...", + "settlement": "Processing settlement..." + }, + "errors": { + "fetchFailed": "Failed to load list details.", + "genericLoadFailure": "Group not found or an error occurred.", + "ocrNoItems": "No items extracted from the image.", + "ocrFailed": "Failed to process image.", + "addItemFailed": "Failed to add item.", + "updateItemFailed": "Failed to update item.", + "updateItemPriceFailed": "Failed to update item price.", + "deleteItemFailed": "Failed to delete item.", + "addOcrItemsFailed": "Failed to add OCR items.", + "fetchItemsFailed": "Failed to load items: {errorMessage}", + "loadCostSummaryFailed": "Failed to load cost summary." + }, + "retryButton": "Retry", + "buttons": { + "addViaOcr": "Add via OCR", + "addItem": "Add", + "addItems": "Add Items", + "cancel": "Cancel", + "confirm": "Confirm", + "saveChanges": "Save Changes", + "close": "Close", + "costSummary": "Cost Summary" + }, + "badges": { + "groupList": "Group List", + "personalList": "Personal List" + }, + "items": { + "emptyState": { + "title": "No Items Yet!", + "message": "Add some items using the form below." + }, + "addItemForm": { + "placeholder": "Add a new item", + "quantityPlaceholder": "Qty", + "itemNameSrLabel": "New item name", + "quantitySrLabel": "Quantity" + }, + "pricePlaceholder": "Price", + "editItemAriaLabel": "Edit item", + "deleteItemAriaLabel": "Delete item" + }, + "modals": { + "ocr": { + "title": "Add Items via OCR", + "uploadLabel": "Upload Image" + }, + "confirmation": { + "title": "Confirmation" + }, + "editItem": { + "title": "Edit Item", + "nameLabel": "Item Name", + "quantityLabel": "Quantity" + }, + "costSummary": { + "title": "List Cost Summary", + "totalCostLabel": "Total List Cost:", + "equalShareLabel": "Equal Share Per User:", + "participantsLabel": "Participating Users:", + "userBalancesHeader": "User Balances", + "tableHeaders": { + "user": "User", + "itemsAddedValue": "Items Added Value", + "amountDue": "Amount Due", + "balance": "Balance" + }, + "emptyState": "No cost summary available." + }, + "settleShare": { + "title": "Settle Share", + "settleAmountFor": "Settle amount for {userName}:", + "amountLabel": "Amount", + "errors": { + "enterAmount": "Please enter an amount.", + "positiveAmount": "Please enter a positive amount.", + "exceedsRemaining": "Amount cannot exceed remaining: {amount}.", + "noSplitSelected": "Error: No split selected." + } + } + }, + "confirmations": { + "updateMessage": "Mark '{itemName}' as {status}?", + "statusComplete": "complete", + "statusIncomplete": "incomplete", + "deleteMessage": "Delete '{itemName}'? This cannot be undone." + }, + "notifications": { + "itemAddedSuccess": "Item added successfully.", + "itemsAddedSuccessOcr": "{count} item(s) added successfully from OCR.", + "itemUpdatedSuccess": "Item updated successfully.", + "itemDeleteSuccess": "Item deleted successfully.", + "enterItemName": "Please enter an item name.", + "costSummaryLoadFailed": "Failed to load cost summary.", + "cannotSettleOthersShares": "You can only settle your own shares.", + "settlementDataMissing": "Cannot process settlement: missing data.", + "settleShareSuccess": "Share settled successfully!", + "settleShareFailed": "Failed to settle share." + }, + "expensesSection": { + "title": "Expenses", + "addExpenseButton": "Add Expense", + "loading": "Loading expenses...", + "emptyState": "No expenses recorded for this list yet.", + "paidBy": "Paid by:", + "onDate": "on", + "owes": "owes", + "paidAmount": "Paid:", + "activityLabel": "Activity:", + "byUser": "by", + "settleShareButton": "Settle My Share", + "retryButton": "Retry" + }, + "status": { + "settled": "Settled", + "partiallySettled": "Partially Settled", + "unsettled": "Unsettled", + "paid": "Paid", + "partiallyPaid": "Partially Paid", + "unpaid": "Unpaid", + "unknown": "Unknown Status" + } + }, + "myChoresPage": { + "title": "My Assigned Chores", + "showCompletedToggle": "Show Completed", + "timelineHeaders": { + "overdue": "Overdue", + "today": "Due Today", + "thisWeek": "This Week", + "later": "Later", + "completed": "Completed" + }, + "choreCard": { + "personal": "Personal", + "group": "Group", + "duePrefix": "Due", + "completedPrefix": "Completed", + "dueToday": "Due Today", + "markCompleteButton": "Mark Complete" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "unknownDate": "Unknown Date" + }, + "emptyState": { + "title": "No Assignments Yet!", + "noAssignmentsPending": "You have no pending chore assignments.", + "noAssignmentsAll": "You have no chore assignments (completed or pending).", + "viewAllChoresButton": "View All Chores" + }, + "notifications": { + "loadFailed": "Failed to load assignments", + "markedComplete": "Marked \"{choreName}\" as complete!", + "markCompleteFailed": "Failed to mark assignment as complete" + } + }, + "personalChoresPage": { + "title": "Personal Chores", + "newChoreButton": "New Chore", + "editButton": "Edit", + "deleteButton": "Delete", + "cancelButton": "Cancel", + "saveButton": "Save", + "modals": { + "editChoreTitle": "Edit Chore", + "newChoreTitle": "New Chore", + "deleteChoreTitle": "Delete Chore" + }, + "form": { + "nameLabel": "Name", + "descriptionLabel": "Description", + "frequencyLabel": "Frequency", + "intervalLabel": "Interval (days)", + "dueDateLabel": "Next Due Date" + }, + "deleteDialog": { + "confirmationText": "Are you sure you want to delete this chore?" + }, + "frequencies": { + "one_time": "One Time", + "daily": "Daily", + "weekly": "Weekly", + "monthly": "Monthly", + "custom": "Custom", + "unknown": "Unknown Frequency" + }, + "dates": { + "invalidDate": "Invalid Date", + "duePrefix": "Due" + }, + "notifications": { + "loadFailed": "Failed to load personal chores", + "updateSuccess": "Personal chore updated successfully", + "createSuccess": "Personal chore created successfully", + "saveFailed": "Failed to save personal chore", + "deleteSuccess": "Personal chore deleted successfully", + "deleteFailed": "Failed to delete personal chore" + } + }, + "indexPage": { + "welcomeMessage": "Welcome to Valerie UI App", + "mainPageInfo": "This is the main index page.", + "sampleTodosHeader": "Sample Todos (from IndexPage data)", + "totalCountLabel": "Total count from meta:", + "noTodos": "No todos to display." } } diff --git a/fe/src/pages/AccountPage.vue b/fe/src/pages/AccountPage.vue index dff3ff0..101f600 100644 --- a/fe/src/pages/AccountPage.vue +++ b/fe/src/pages/AccountPage.vue @@ -1,32 +1,32 @@