{ "nav": { "diary": "Diary", "foods": "Foods", "wellness": "Wellness", "statistics": "Statistics", "goals": "Goals", "settings": "Settings" }, "routes": { "diary": { "title": "Diary" }, "foods": { "title": "Foods" }, "wellness": { "title": "Wellness" }, "statistics": { "title": "Statistics" }, "goals": { "title": "Goals" }, "settings": { "title": "Settings" } }, "common": { "sign_out": "Sign Out", "log_out": "Log Out", "signing_out": "Signing out…", "experimental": "Experimental", "hide": "Hide", "save": "Save", "saving": "Saving…", "cancel": "Cancel", "back": "Back", "close": "Close", "delete": "Delete", "signed_in": "Signed in", "signed_out": "Signed out", "linked": "Linked", "unlinked": "Unlinked", "admin": "admin", "errors": { "cant_reach_server": "Could not reach server", "failed": "Failed", "unlink_failed": "Could not unlink", "save_failed": "Save failed", "delete_failed": "Delete failed", "name_required": "Name is required", "network_error_upload": "Network error during upload", "voice_unsupported": "Voice input not supported in this browser", "cant_start_mic": "Couldn't start microphone" } }, "settings": { "appearance": { "section": "Appearance", "theme": "Theme", "accent_color": "Accent Color", "navigation_style": "Navigation Style" }, "regional": { "section": "Regional & Units", "language": "Language" }, "diary": { "section": "Diary", "show_quick_calories": "Show Quick Calories Button", "show_quick_calories_desc": "Adds a bolt icon on each meal section for fast calorie-only entry (no food, no portion). Useful when you know the calories but don't want to model the food, or when you're coming from Fitbit-style quick calories.", "quick_calories_display": "Quick Calories Display", "quick_calories_display_desc":"How multiple Quick Calorie entries in the same meal appear in the diary. Summed collapses them into one row; Separate shows each entry on its own line.", "quick_calories_summed": "Summed", "quick_calories_separate": "Separate" }, "water": { "section": "Water" }, "foods": { "section": "Foods" }, "categories": { "section": "Categories" }, "nutrients": { "section": "Nutrients" }, "goals": { "section": "Calorie Goals" }, "body_stats": { "section": "Body Stats" }, "statistics": { "section": "Statistics" }, "connected_services": { "section": "Food Sources", "off": { "header": "Open Food Facts", "enable": "Enable Open Food Facts", "enable_desc": "Search the global crowd-sourced food database when adding foods. No account needed for searches; one is only required to upload edits.", "search_language": "Search Language", "search_country": "Search Country", "upload_country": "Upload Country", "upload_country_auto": "Auto", "import_portion": "Import Portion As", "import_portion_100g": "Per 100g", "import_portion_serving": "Per Serving", "import_portion_desc": "When the scanned product has serving data, prefill the food with per-serving values instead of per-100g. Products without serving data on OFF always fall back to per-100g.", "account_username": "Account Username", "account_password": "Account Password", "account_note": "Optional, only needed to upload edits.", "account_create_link": "Create an OFF account →", "username_placeholder": "OFF account username", "password_placeholder": "OFF account password", "auto_refresh": "Auto-Refresh", "auto_refresh_desc": "How often to re-download the mirror from Open Food Facts. Each refresh pulls the full snapshot (~4 GB).", "auto_refresh_off": "Off", "auto_refresh_daily": "Daily", "auto_refresh_weekly": "Weekly", "auto_refresh_monthly": "Monthly" } }, "ai": { "section": "AI Assistant" }, "notifications": { "section": "Notifications" }, "wellness": { "section": "Wellness" }, "sharing": { "section": "Food Sharing" }, "profile_hero": { "label_fallback": "My Profile", "subtitle_empty": "Tap to add your name and photo" }, "authentication": { "section": "Authentication" }, "users": { "section": "Users", "users_heading": "Users", "add_user": "+ Add User", "username": "Username", "username_required": "Username *", "full_name": "Full Name (Optional)", "password_required": "Password *", "confirm_required": "Confirm *", "role": "Role", "role_admin": "admin", "role_user": "user", "role_self_suffix": "(you)", "create": "Create", "creating": "Creating…", "delete_user_title": "Delete {name}?", "delete_user_message": "All of this user’s data — foods, meals, diary entries, settings — will be removed. This cannot be undone.", "delete": "Delete", "promote_title": "Promote {name}?", "promote_message": "They’ll be able to manage users, sharing, email config, and OIDC providers.", "promote_confirm": "Promote", "demote_title": "Demote {name}?", "demote_message": "They’ll lose admin access. You can promote them back later.", "demote_confirm": "Demote", "reset_password": "Reset Password", "reset_password_prompt": "Set new password for {name}\n\n(Must be 8+ chars with upper, lower, number, and special character.)", "invite_user": "Invite User", "invite_user_explainer": "Send a sign-up link so the user picks their own password. Provide an email to send it directly (requires SMTP), or leave blank to generate a copyable link you can share any way you like.", "email_optional": "Email (Optional)", "send_invite": "Send Invite", "generate_link": "Generate Invite Link", "invite_sent": "Invite sent", "invite_sent_to": "Invite sent to {email}", "user_fallback": "user", "share_link_intro": "Share this link:", "copy": "Copy", "copy_link": "Copy Link", "add_user_show": "Add User Manually", "add_user_hide": "Hide Manual Add", "add_user_explainer": "You set the username and password yourself, then share them with the user. Useful when SMTP isn’t configured or for offline setups.", "create_directly": "Create User", "session_duration": "Session Duration", "session_never": "Never expires", "session_8h": "8 hours", "session_1d": "1 day", "session_7d": "7 days", "session_30d": "30 days", "session_90d": "90 days", "session_1y": "1 year", "save": "Save", "disable_um": "Disable User Management", "disable_um_subtitle": "Removes all user accounts and returns to single-user mode", "disable_um_title": "Disable User Management?", "disable_um_message": "This will remove all user accounts and their data cannot be recovered. The app will return to single-user mode.", "disable_um_confirm": "Disable & delete all", "enable_um": "Enable User Management", "enable_um_subtitle": "Add multiple user accounts with separate data & settings", "create_admin_account": "Create Admin Account", "create_admin_explainer": "The first account is always admin. All existing food, meal, and diary data on this server will be assigned to it.", "enable_create": "Enable & Create Admin", "enabling": "Enabling…", "toast_user_created": "User added", "toast_user_deleted": "User deleted", "toast_password_reset": "Password reset", "toast_role_changed": "{name} is now {role}", "toast_um_enabled": "User management enabled", "toast_um_disabled": "User management disabled", "toast_invite_sent": "Invite sent", "toast_link_copied": "Copied!", "err_username_required": "Username is required", "err_passwords_mismatch": "Passwords do not match", "err_username_password_required": "Username and password required", "err_registration_failed": "Registration failed", "err_failed_to_add": "Failed to add user", "err_could_not_change_role": "Could not change role", "err_could_not_reset_password": "Could not reset password", "err_could_not_reach_server": "Could not reach server" }, "email": { "section": "Email (SMTP)" }, "backup": { "section": "Backup & Restore" }, "importExport": { "section": "Import & Export" }, "server": { "section": "Server Connection" }, "diagnostics": { "section": "Diagnostics" }, "about": { "section": "About" } }, "login": { "subtitle": "Sign in to your account", "username": "Username", "username_placeholder": "Enter username", "password": "Password", "password_placeholder": "Enter password", "sign_in": "Sign In", "signing_in": "Signing in…", "forgot_password": "Forgot Password?", "locked_out": "Locked Out?", "sso_sign_in_with": "Sign In With {provider}", "sso_or": "or", "no_signin_methods": "No sign-in methods available. Ask your administrator.", "errors": { "failed": "Login failed" }, "recovery": { "confirm": "This will delete all user accounts. Your food & diary data will be kept. Continue?", "explainer": "If you never set up user accounts intentionally, you can disable user management. This will delete all user accounts. Your food & diary data will be kept.", "token_prompt": "Enter the RECOVERY_TOKEN from your server environment:", "token_placeholder": "Recovery token", "action": "Disable User Management & Reset", "disabling": "Disabling…", "failed": "Recovery failed", "success": "User management disabled — you are now in single-user mode", "done": "User management has been disabled.
Redirecting…" } }, "forgot_password": { "title": "Reset Password", "intro": "Enter your email address and we'll send you a link to reset your password.", "email_label": "Email address", "send_link": "Send Reset Link", "sending": "Sending…", "back_to_signin": "Back to Sign In", "sent": "If an account exists for {email}, a reset link has been sent. Check your inbox." }, "reset_password": { "title": "New Password", "verifying": "Verifying link…", "invalid_link": "This reset link is invalid or has expired.", "request_new": "Request a New Link", "success": "Password updated. Redirecting…", "set_for": "Set a new password for {username}", "new_password": "New password", "confirm_password": "Confirm password", "password_placeholder": "8+ chars, upper, lower, number, symbol", "submit": "Set New Password", "saving": "Saving…", "errors": { "required": "Password is required", "mismatch": "Passwords do not match", "failed": "Reset failed" } }, "profile": { "title": "Profile", "personal_info": "Personal Info", "security": "Security", "change_photo": "Change Photo", "full_name": "Full Name", "full_name_placeholder": "Your full name", "email_placeholder": "Used for password resets", "nickname": "Nickname / Display Name", "nickname_placeholder": "What should we call you?", "birthday": "Birthday", "gender": "Gender", "gender_unset": "Prefer not to say", "change_password": "Change Password", "set_password": "Set Password", "current_password": "Current Password", "confirm_new_password": "Confirm New Password", "saved": "Profile saved", "password_changed": "Password changed", "linked_accounts": "Linked Accounts", "no_linked_accounts": "No identity providers linked yet.", "link_with": "Link with", "unlink": "Unlink", "danger_zone": "Danger Zone", "delete_account": "Delete My Account", "delete_account_explainer": "Permanently remove your account and all associated data — foods, meals, diary, wellness, settings.", "delete_account_title": "Delete Your Account?", "delete_account_message": "Your foods, meals, diary, settings, and wellness data will be permanently removed. This cannot be undone.", "delete_account_confirm": "Delete Account", "deleting": "Deleting…", "account_deleted": "Account deleted", "errors": { "save_failed": "Could not save profile", "upload_failed": "Upload failed", "password_change_failed": "Could not change password", "delete_account_failed": "Could not delete account" } }, "wizard": { "nav": { "skip": "Skip", "get_started": "Get Started", "next": "Next", "finish": "Finish" }, "welcome": { "title": "Welcome to NutriTrace", "desc": "Your personal nutrition tracker. Let's get you set up in about a minute." }, "name": { "title": "What should we call you?", "desc": "Used in greetings, the side menu, and your AI assistant. You can change it later in Settings.", "placeholder": "Your name (optional)" }, "usermgmt": { "create_account_title": "Create Your Account", "create_account_desc": "Set up your admin account to secure your NutriTrace instance. You can invite other users later from Settings.", "multi_user_title": "Multi-User Support", "multi_user_desc": "NutriTrace can run in single-user mode (default) or multi-user mode with separate logins and password resets. You can always enable this later in Settings." }, "units": { "title": "Measurement System", "desc": "How do you measure things?" }, "gender": { "title": "What is your gender?", "desc": "Used to calculate your calorie needs." }, "dob": { "title": "When were you born?", "desc": "Your age affects your metabolic rate." }, "height": { "title": "What is your height?", "desc": "Used to estimate your calorie needs." }, "weight": { "title": "What is your weight?" }, "target": { "title": "What is your target weight?" }, "activity": { "title": "How active are you?", "desc": "Affects your daily calorie needs." }, "integrations": { "title": "Integrations", "desc": "Connect optional services. Skip anything you don't need — you can configure these later in Settings." }, "notifications": { "title": "Stay on Track", "desc": "Get helpful reminders and celebrate your wins. You can customize all of these later in Settings." }, "summary": { "title": "Your Daily Goals", "desc": "Calculated from your stats using the Mifflin-St Jeor formula." }, "skip_modal": { "title": "Skip Setup?", "desc": "You can set up your goals, units, and integrations any time from Settings. Until then, calorie targets won't be calculated automatically.", "continue": "Continue Setup", "skip_now": "Skip for Now" } }, "diary": { "add_food": "Add Food", "notes_placeholder": "How did today feel? Sleep, energy, hunger, cravings…", "quick_calories": { "title": "Quick Calories", "title_meal": "Quick Calories: {meal}", "default_name": "Quick Calories", "help": "Log just the {unit} when you don't have full nutrition info, or when you don't want to model the food. Adds straight to the diary; no food entry is created.", "name_label": "Name (optional)", "name_placeholder": "Office snack, hotel breakfast...", "value_label": "{unit}", "add": "Add", "adding": "Adding…", "cancel": "Cancel", "summed_hint": "switch to Separate to edit individual entries" }, "nav": { "previous_day": "Previous Day", "next_day": "Next Day", "jump_to_date": "Jump to Date" }, "actions": { "cancel_selection": "Cancel Selection", "delete_selected": "Delete Selected", "log_water": "Log Water", "log_water_long": "Water — log your water intake", "nutrition_summary": "Nutrition Summary", "nutrition_summary_long": "Nutrition Summary — full breakdown of today's nutrients", "body_stats": "Body Stats", "body_stats_long": "Body Stats — log weight, body fat, and measurements" }, "toast": { "body_stats_saved": "Body stats saved", "updated": "Updated", "item_removed": "Item removed", "activity_removed": "Activity removed" }, "errors": { "note_save_failed": "Note save failed", "name_required": "Please enter a name", "nothing_to_save": "Nothing to save", "activity_save_failed": "Could not save activity", "activity_delete_failed": "Could not delete activity" }, "activity": { "section": "Activity", "tap_to_add": "Tap to Add Activity", "add": "Add Activity", "add_to_diary": "Add to Diary", "save_changes": "Save Changes", "title_add": "Add Activity", "title_edit": "Edit Activity", "field_name": "Activity", "field_name_placeholder": "e.g. Morning hike", "field_kcal": "Calories Burned", "field_kcal_placeholder": "kcal", "field_duration": "Duration", "field_duration_placeholder": "minutes", "field_distance": "Distance", "field_distance_placeholder": "e.g. 10 mi", "field_optional": "(optional)", "saving": "Adding…", "estimated_short": "est.", "wellness_hint": "Synced workouts from your device live in Wellness", "not_counted": "not counted — using wearable", "policy_chip": "Policy: wearable wins. Toggle in Settings → Diary.", "actions": { "edit": "Edit", "delete": "Delete" }, "errors": { "name_required": "Name required", "kcal_required": "Calories required" } } }, "foods": { "search_placeholder": "Search foods or scan barcode...", "scan_barcode": "Scan Barcode", "add_new": "Add New", "n_selected": "{n} selected", "add_n": "Add {n}", "adding": "Adding…", "add_selected_to_diary": "Add Selected to Diary", "search_in": "Search {source}", "searching_in": "Searching {source}…", "no_results_in": "No results in {source}", "looking_up_barcode": "Looking up barcode", "detail": { "edit": "Edit", "edit_aria": "Edit food", "add_to_diary": "Add to Diary", "add_to_diary_aria": "Add to diary", "add_to_which_meal": "Add to which meal?", "per_serving": "per serving", "barcode": "Barcode", "added_to": "Added to {meal}", "delete_aria": "Delete food", "delete_confirm_title": "Delete this food?", "delete_confirm_body": "\"{name}\" will be removed from your foods. Existing diary entries that reference this food are kept.", "deleted": "Food deleted" }, "sources": { "local": "Local", "from_others": "From Others" }, "toast": { "deleted": "Deleted", "cloned": "Cloned" } }, "trace": { "panel_label": "AI Coach Chat", "ask_placeholder": "Ask me anything…", "clear_conversation": "Clear Conversation", "attach_image": "Attach Image" }, "smart_log": { "placeholder": "for breakfast I had 2 eggs and toast" }, "goals": { "save_goal": "Save Goal", "toast": { "goal_saved": "Goal saved", "water_goal_saved": "Water goal saved", "template_saved": "Template saved", "template_applied": "\"{name}\" applied" } }, "food_editor": { "name_placeholder": "Food name", "brand_placeholder": "Brand (optional)", "saved": "Saved", "added_to_diary": "Added to diary", "errors": { "name_required": "Please enter a name" } }, "meal_editor": { "meal_name_placeholder": "Meal name", "recipe_name_placeholder": "Recipe name", "servings": { "title": "Servings", "amount_placeholder": "Auto from ingredients", "total_weight_hint": "Total weight. Auto from ingredients; override for cooking changes (e.g. boil-off).", "yields_unit": "servings", "yields_hint": "Number of servings this recipe makes.", "per_serving_label": "Per serving:" }, "errors": { "no_ingredients": "Please add at least one ingredient" } }, "accept_invite": { "title": "Create Account", "verifying": "Verifying invite…", "invalid_link": "This invite link is invalid or has expired. Ask your admin for a new one.", "success": "Account created! Redirecting…", "intro": "You've been invited to NutriTrace. Choose a username and password to get started.", "intro_with_email": "You were invited as {email}. Choose a username and password to get started.", "username_label": "Username *", "username_placeholder": "Choose a username", "full_name_label": "Full name (optional)", "full_name_placeholder": "Your name", "password_label": "Password *", "confirm_label": "Confirm password *", "submit": "Create account", "creating": "Creating account…", "errors": { "username_required": "Username is required", "failed": "Failed to create account" } } }