{ "message": { "hello": "Hello" }, "loginPage": { "emailLabel": "Email", "passwordLabel": "Password", "togglePasswordVisibilityLabel": "Toggle password visibility", "loginButton": "Login", "signupLink": "Don't have an account? Sign up", "errors": { "emailRequired": "Email is required", "emailInvalid": "Invalid email format", "passwordRequired": "Password is required", "loginFailed": "Login failed. Please check your credentials." }, "notifications": { "loginSuccess": "Login successful" } }, "listsPage": { "retryButton": "Retry", "emptyState": { "noListsForGroup": "No lists found for this group.", "noListsYet": "You have no lists yet.", "personalGlobalInfo": "Create a personal list or join a group to see shared lists.", "groupSpecificInfo": "This group doesn't have any lists yet." }, "createNewListButton": "Create New List", "loadingLists": "Loading lists...", "noDescription": "No description", "addItemPlaceholder": "Add new item...", "createCard": { "title": "+ Create a new list" }, "pageTitle": { "forGroup": "Lists for {groupName}", "forGroupId": "Lists for Group {groupId}", "myLists": "My Lists" }, "errors": { "fetchFailed": "Failed to fetch lists." } }, "groupsPage": { "retryButton": "Retry", "emptyState": { "title": "No Groups Yet!", "description": "You are not a member of any groups yet. Create one or join using an invite code.", "createButton": "Create New Group" }, "groupCard": { "newListButton": "List" }, "createCard": { "title": "+ Group" }, "joinGroup": { "title": "Join a Group with Invite Code", "inputLabel": "Enter Invite Code", "inputPlaceholder": "Enter Invite Code", "joinButton": "Join" }, "createDialog": { "title": "Create New Group", "closeButtonLabel": "Close", "groupNameLabel": "Group Name", "cancelButton": "Cancel", "createButton": "Create" }, "errors": { "fetchFailed": "Failed to load groups", "groupNameRequired": "Group name is required", "createFailed": "Failed to create group. Please try again.", "inviteCodeRequired": "Invite code is required", "joinFailed": "Failed to join group. Please check the invite code and try again." }, "notifications": { "groupCreatedSuccess": "Group '{groupName}' created successfully.", "joinSuccessNamed": "Successfully joined group '{groupName}'.", "joinSuccessGeneric": "Successfully joined group.", "listCreatedSuccess": "List '{listName}' created successfully." } }, "authCallbackPage": { "redirecting": "Redirecting...", "errors": { "authenticationFailed": "Authentication failed" } }, "choresPage": { "title": "Chores", "tabs": { "overdue": "Overdue", "today": "Today", "upcoming": "Upcoming", "allPending": "All Pending", "completed": "Completed" }, "viewToggle": { "calendarLabel": "Calendar View", "calendarText": "Calendar", "listLabel": "List View", "listText": "List" }, "newChoreButtonLabel": "New Chore", "newChoreButtonText": "New Chore", "loadingState": { "loadingChores": "Loading chores..." }, "calendar": { "prevMonthLabel": "Previous month", "nextMonthLabel": "Next month", "weekdays": { "sun": "Sun", "mon": "Mon", "tue": "Tue", "wed": "Wed", "thu": "Thu", "fri": "Fri", "sat": "Sat" }, "addChoreToDayLabel": "Add chore to this day", "emptyState": "No chores to display for this period." }, "listView": { "choreTypePersonal": "Personal", "choreTypeGroupFallback": "Group", "completedDatePrefix": "Completed:", "actions": { "doneTitle": "Mark as Done", "doneText": "Done", "undoTitle": "Mark as Not Done", "undoText": "Undo", "editTitle": "Edit", "editLabel": "Edit chore", "editText": "Edit", "deleteTitle": "Delete", "deleteLabel": "Delete chore", "deleteText": "Delete" }, "emptyState": { "message": "No chores in this view. Well done!", "viewAllButton": "View All Pending" } }, "choreModal": { "editTitle": "Edit Chore", "newTitle": "New Chore", "closeButtonLabel": "Close modal", "nameLabel": "Name", "namePlaceholder": "Enter chore name", "typeLabel": "Type", "typePersonal": "Personal", "typeGroup": "Group", "groupLabel": "Group", "groupSelectDefault": "Select a group", "descriptionLabel": "Description", "descriptionPlaceholder": "Add a description (optional)", "frequencyLabel": "Frequency", "intervalLabel": "Interval (days)", "intervalPlaceholder": "e.g. 3", "dueDateLabel": "Due Date", "quickDueDateToday": "Today", "quickDueDateTomorrow": "Tomorrow", "quickDueDateNextWeek": "Next Week", "cancelButton": "Cancel", "saveButton": "Save" }, "deleteDialog": { "title": "Delete Chore", "confirmationText": "Are you sure you want to delete this chore? This action cannot be undone.", "deleteButton": "Delete" }, "shortcutsModal": { "title": "Keyboard Shortcuts", "descNewChore": "New Chore", "descToggleView": "Toggle View (List/Calendar)", "descToggleShortcuts": "Show/Hide Shortcuts", "descCloseModal": "Close any open Modal/Dialog" }, "frequencyOptions": { "oneTime": "One Time", "daily": "Daily", "weekly": "Weekly", "monthly": "Monthly", "custom": "Custom" }, "formatters": { "noDueDate": "No due date", "dueToday": "Due Today", "dueTomorrow": "Due Tomorrow", "overdueFull": "Overdue: {date}", "dueFull": "Due {date}", "invalidDate": "Invalid Date" }, "notifications": { "loadFailed": "Failed to load chores", "updateSuccess": "Chore '{name}' updated successfully", "createSuccess": "Chore '{name}' created successfully", "updateFailed": "Failed to update chore", "createFailed": "Failed to create chore", "deleteSuccess": "Chore '{name}' deleted successfully", "deleteFailed": "Failed to delete chore", "markedDone": "{name} marked as done.", "markedNotDone": "{name} marked as not done.", "statusUpdateFailed": "Failed to update chore status." }, "validation": { "nameRequired": "Chore name is required.", "groupRequired": "Please select a group for group chores.", "intervalRequired": "Custom interval must be at least 1 day.", "dueDateRequired": "Due date is required.", "invalidDueDate": "Invalid due date format." }, "unsavedChangesConfirmation": "You have unsaved changes in the chore form. Are you sure you want to leave?" }, "errorNotFoundPage": { "errorCode": "404", "errorMessage": "Oops. Nothing here...", "goHomeButton": "Go Home" }, "groupDetailPage": { "loadingLabel": "Loading group details...", "retryButton": "Retry", "groupNotFound": "Group not found or an error occurred.", "members": { "title": "Group Members", "defaultRole": "Member", "removeButton": "Remove", "emptyState": "No members found." }, "invites": { "title": "Invite Members", "regenerateButton": "Regenerate Invite Code", "generateButton": "Generate Invite Code", "activeCodeLabel": "Current Active Invite Code:", "copyButtonLabel": "Copy invite code", "copySuccess": "Invite code copied to clipboard!", "emptyState": "No active invite code. Click the button above to generate one.", "errors": { "newDataInvalid": "New invite code data is invalid." } }, "chores": { "title": "Group Chores", "manageButton": "Manage Chores", "duePrefix": "Due:", "emptyState": "No chores scheduled. Click \"Manage Chores\" to create some!" }, "expenses": { "title": "Group Expenses", "manageButton": "Manage Expenses", "emptyState": "No expenses recorded. Click \"Manage Expenses\" to add some!", "splitTypes": { "equal": "Equal", "exactAmounts": "Exact Amounts", "percentage": "Percentage", "shares": "Shares", "itemBased": "Item Based" } }, "notifications": { "fetchDetailsFailed": "Failed to fetch group details.", "fetchInviteFailed": "Failed to fetch active invite code.", "generateInviteSuccess": "New invite code generated successfully!", "generateInviteError": "Failed to generate invite code.", "clipboardNotSupported": "Clipboard not supported or no code to copy.", "copyInviteFailed": "Failed to copy invite code.", "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." } }