{ "app": { "name": "EverShelf", "loading": "Loading..." }, "nav": { "title": "🏠 Pantry", "home": "Home", "inventory": "Pantry", "recipes": "Recipes", "shopping": "Shopping", "log": "Log" }, "btn": { "back": "← Back", "save": "πŸ’Ύ Save", "cancel": "βœ• Cancel", "close": "Close", "add": "βœ… Add", "delete": "Delete", "edit": "✏️ Edit", "search": "πŸ” Search", "go": "βœ… Go", "toggle_password": "πŸ‘οΈ Show/Hide", "load_more": "Load more...", "save_config": "πŸ’Ύ Save Configuration", "save_product": "πŸ’Ύ Save Product", "restart": "β†Ί Restart", "reset_default": "β†Ί Reset to default" }, "locations": { "dispensa": "Pantry", "frigo": "Fridge", "freezer": "Freezer", "altro": "Other" }, "categories": { "latticini": "Dairy", "carne": "Meat", "pesce": "Fish", "frutta": "Fruit", "verdura": "Vegetables", "pasta": "Pasta & Rice", "pane": "Bread & Bakery", "surgelati": "Frozen", "bevande": "Beverages", "condimenti": "Condiments", "snack": "Snacks & Sweets", "conserve": "Canned Goods", "cereali": "Cereals & Legumes", "igiene": "Hygiene", "pulizia": "Household", "altro": "Other", "select": "-- Select --" }, "units": { "pz": "pcs", "conf": "pkg", "g": "g", "ml": "ml", "pieces": "Pieces", "grams": "Grams", "box": "Package", "boxes": "Packages" }, "shopping_sections": { "frutta_verdura": "Fruits & Vegetables", "carne_pesce": "Meat & Fish", "latticini": "Dairy & Fresh", "pane_dolci": "Bread & Sweets", "pasta": "Pasta & Cereals", "conserve": "Canned & Sauces", "surgelati": "Frozen", "bevande": "Beverages", "pulizia_igiene": "Cleaning & Hygiene", "altro": "Other" }, "dashboard": { "expired_title": "🚫 Expired", "expiring_title": "⏰ Expiring Soon", "stats_period": "πŸ“Š Last 30 days", "opened_title": "πŸ“¦ Opened Products", "review_title": "πŸ” To Review", "review_hint": "Quantities that seem unusual. Confirm if correct or modify.", "quick_recipe": "🍳 Quick recipe with expiring products" }, "inventory": { "title": "Pantry", "filter_all": "All", "search_placeholder": "πŸ” Search product...", "empty": "No products here.\nScan a product to add it!", "no_items_found": "No inventory items found" }, "scan": { "title": "Scan Product", "mode_shopping": "πŸ›’ Shopping Mode", "mode_shopping_end": "βœ… End shopping", "zoom": "Zoom", "barcode_placeholder": "Enter barcode...", "quick_name_divider": "or type the name", "quick_name_placeholder": "E.g.: Apples, Zucchini, Bread...", "manual_entry": "✏️ Manual Entry", "ai_identify": "πŸ€– Identify with AI", "hint": "Scan the barcode, type the product name, or use AI to identify it", "debug_toggle": "πŸ› Debug Log", "barcode_acquired": "πŸ”– Barcode scanned: {code}", "scan_barcode": "πŸ”– Scan Barcode" }, "action": { "title": "What do you want to do?", "add_btn": "πŸ“₯ ADD", "add_sub": "to pantry/fridge", "use_btn": "πŸ“€ USE / CONSUME", "use_sub": "from pantry/fridge" }, "add": { "title": "Add to Pantry", "location_label": "πŸ“ Where do you put it?", "quantity_label": "πŸ“¦ Quantity", "conf_size_label": "πŸ“¦ Each package contains:", "conf_size_placeholder": "e.g. 300", "vacuum_label": "πŸ«™ Vacuum sealed", "vacuum_hint": "Expiry date will be extended automatically", "submit": "βœ… Add" }, "use": { "title": "Use / Consume", "location_label": "πŸ“ From where?", "quantity_label": "How much did you use?", "partial_hint": "Or specify the quantity used:", "use_all": "πŸ—‘οΈ Used ALL / Finished", "submit": "πŸ“€ Use this quantity", "available": "πŸ“¦ Available:", "not_in_inventory": "⚠️ Product not in inventory.", "expiry_warning": "⚠️ Use first the one{loc} that expires on {date} β€” {when}!" }, "product": { "title_new": "New Product", "title_edit": "Edit Product", "ai_fill": "πŸ“· Take photo and identify with AI", "ai_fill_hint": "AI will automatically fill in the product fields", "name_label": "🏷️ Product Name *", "name_placeholder": "E.g.: Whole milk, Penne pasta...", "brand_label": "🏒 Brand", "brand_placeholder": "E.g.: Barilla, Granarolo, Mutti...", "category_label": "πŸ“‚ Category", "unit_label": "πŸ“ Unit of measure", "default_qty_label": "πŸ”’ Default quantity", "conf_size_label": "πŸ“¦ Each package contains:", "conf_size_placeholder": "e.g. 300", "notes_label": "πŸ“ Notes", "notes_placeholder": "E.g.: lactose free, organic, store in fridge after opening...", "barcode_label": "πŸ”– Barcode", "barcode_placeholder": "Barcode (if available)", "barcode_hint": "⚠️ Add the barcode so next time you just need to scan it!", "submit": "πŸ’Ύ Save Product", "name_required": "Enter the product name", "conf_size_required": "Specify the package content", "expiry_estimated": "Estimated expiry:", "scan_expiry": "Scan expiry date", "expiry_hint": "πŸ“ You can edit the date or scan it with the camera", "add_batch": "πŸ“¦ + Batch with different expiry", "package_info": "πŸ“¦ Package: {info}", "edit_catalog": "βš™οΈ Edit product info (name, brand, category…)", "not_recognized": "⚠️ Product not recognized", "edit_info": "✏️ Edit information", "modify_details": "EDIT\nexpiry, location…" }, "products": { "title": "πŸ“¦ All Products", "search_placeholder": "πŸ” Search product...", "empty": "No products in database.\nScan a product to get started!", "no_category": "No products in this category" }, "recipes": { "title": "🍳 Recipes", "generate": "✨ Generate new recipe" }, "shopping": { "title": "πŸ›’ Shopping List", "bring_loading": "Connecting to Bring!...", "tab_to_buy": "πŸ›οΈ To buy", "tab_forecast": "🧠 Forecast", "total_label": "πŸ’° Estimated total", "section_to_buy": "πŸ›οΈ To buy", "suggestions_title": "πŸ’‘ AI Suggestions", "suggestions_add": "βœ… Add selected to Bring!", "search_prices": "πŸ” Search all prices", "suggest_btn": "πŸ€– Suggest what to buy", "smart_title": "🧠 Smart Predictions", "smart_empty": "No predictions available.
Add products to your pantry to receive smart predictions.", "smart_filter_all": "All", "smart_filter_critical": "πŸ”΄ Urgent", "smart_filter_high": "🟠 Soon", "smart_filter_medium": "🟑 Plan", "smart_filter_low": "🟒 Forecast", "smart_add": "πŸ›’ Add selected to Bring!", "empty": "Shopping list empty!\nUse the button below to generate suggestions.", "already_in_list": "πŸ›’ \"{name}\" is already in the shopping list", "already_in_list_short": "ℹ️ Already in the shopping list", "add_prompt": "Do you want to add it to the shopping list?", "smart_already": "πŸ“Š Smart shopping already predicts {name}", "all_searched": "All products have already been searched. Use πŸ”„ to search individual ones.", "search_complete": "Search complete: {count} products", "removed_sufficient": "🧹 {removed} product(s) with sufficient stock removed from the list" }, "ai": { "title": "πŸ€– AI Identification", "capture": "πŸ“Έ Take Photo", "retake": "πŸ”„ Retake", "hint": "Take a photo of the product and AI will try to identify it", "identifying": "πŸ€– Identifying product...", "no_api_key": "⚠️ Gemini API key not configured.\nAdd GEMINI_API_KEY to the .env file on the server.", "fields_filled": "βœ… Fields filled by AI" }, "log": { "title": "πŸ“’ Operations Log" }, "chat": { "title": "Gemini Chef", "welcome": "Hi! I'm your kitchen assistant", "welcome_desc": "Ask me to make you a juice, a snack, a quick dish... I know your pantry, your appliances and your preferences!", "suggestion_snack": "🍿 Quick snack", "suggestion_juice": "πŸ₯€ Juice/Smoothie", "suggestion_light": "πŸ₯— Something light", "suggestion_expiry": "⏰ Use expiring items", "clear": "New conversation", "placeholder": "Ask something..." }, "cooking": { "close": "Close", "tts_btn": "Read aloud", "restart": "β†Ί Restart", "replay": "πŸ”Š Replay", "timer": "⏱️ {time} Β· Timer", "prev": "β—€ Previous", "next": "Next β–Ά" }, "settings": { "title": "βš™οΈ Settings", "tab_api": "API Keys", "tab_bring": "Bring!", "tab_recipe": "Recipes", "tab_mealplan": "Weekly Plan", "tab_appliances": "Appliances", "tab_spesa": "Online Shopping", "tab_camera": "Camera", "tab_security": "Security", "tab_tts": "Voice (TTS)", "tab_language": "Language", "gemini": { "title": "πŸ€– Google Gemini AI", "hint": "API key for product identification, expiry dates and recipes.", "key_label": "Gemini API Key" }, "bring": { "title": "πŸ›’ Bring! Shopping List", "hint": "Credentials for the Bring! shopping list integration.", "email_label": "πŸ“§ Bring! Email", "password_label": "πŸ”’ Bring! Password" }, "recipe": { "title": "🍳 Recipe Preferences", "hint": "Configure the default options for recipe generation.", "persons_label": "πŸ‘₯ Default servings", "options_label": "🎯 Default recipe options", "fast": "⚑ Quick Meal", "light": "πŸ₯— Light Meal", "expiry": "⏰ Expiry Priority", "healthy": "πŸ’š Extra Healthy", "opened": "πŸ“¦ Open Items Priority", "zerowaste": "♻️ Zero Waste", "dietary_label": "🚫 Intolerances / Restrictions", "dietary_placeholder": "E.g.: gluten free, lactose free, vegetarian..." }, "mealplan": { "title": "πŸ“… Weekly Meal Plan", "hint": "Set the meal type for each day. It will be used as a guide in recipe generation.", "enabled": "βœ… Enable weekly meal plan", "legend": "🌀️ = Lunch Β· πŸŒ™ = Dinner Β· Tap a badge to change it.", "types_title": "πŸ“‹ Available types" }, "appliances": { "title": "πŸ”Œ Available Appliances", "hint": "Indicate the appliances you have. They will be considered in recipe generation.", "new_placeholder": "E.g.: Bread machine, Thermomix, Air fryer...", "quick_title": "Quick add:", "oven": "πŸ”₯ Oven", "microwave": "πŸ“‘ Microwave", "air_fryer": "🍟 Air fryer", "bread_maker": "🍞 Bread maker", "bimby": "πŸ€– Thermomix/Cookeo", "mixer": "πŸŒ€ Stand mixer", "steamer": "♨️ Steamer", "pressure_cooker": "πŸ«• Pressure cooker", "toaster": "🍞 Toaster", "blender": "🍹 Blender", "empty": "No appliances added" }, "spesa": { "title": "πŸ›οΈ Online Shopping", "hint": "Configure the online shopping provider.", "provider_label": "πŸͺ Provider", "email_label": "πŸ“§ Email", "password_label": "πŸ”’ Password", "login_btn": "πŸ” Login", "ai_prompt_label": "πŸ€– AI product selection prompt", "ai_prompt_placeholder": "Instructions for AI when choosing between multiple products...", "ai_prompt_hint": "AI uses this prompt to choose the most appropriate product from results. Leave empty for default behavior.", "configure_first": "Configure Online Shopping in settings first" }, "camera": { "title": "πŸ“· Camera", "hint": "Choose which camera to use for barcode scanning and AI identification.", "device_label": "πŸ“Έ Default camera", "back": "πŸ“± Rear (default)", "front": "🀳 Front", "devices_hint": "If you have multiple cameras, you can select a specific one from the list above after granting permissions.", "detect_btn": "πŸ”„ Detect cameras" }, "security": { "title": "πŸ”’ HTTPS Certificate", "hint": "If the browser shows the error \"Your connection is not private\" (ERR_CERT_AUTHORITY_INVALID), you need to install the CA certificate on the device.", "download_btn": "πŸ“₯ Download CA Certificate" }, "tts": { "title": "πŸ”Š Voice & TTS", "hint": "Configure text-to-speech via any external REST API. Recipe steps and expired timers will be sent to the configured endpoint.", "enabled": "βœ… Enable TTS", "url_label": "🌐 Endpoint URL", "method_label": "πŸ“‘ HTTP Method", "auth_label": "πŸ” Authentication", "auth_bearer": "Bearer Token", "auth_custom": "Custom Header", "auth_none": "None", "token_label": "πŸ”‘ Bearer Token", "custom_header_name": "πŸ“‹ Header name", "custom_header_value": "πŸ“‹ Header value", "content_type_label": "πŸ“„ Content-Type", "payload_key_label": "πŸ—οΈ Text field in payload", "payload_key_hint": "Name of the JSON field that will contain the text to read (e.g.: message, text).", "extra_fields_label": "βž• Extra fields (JSON)", "extra_fields_placeholder": "{\"entity_id\": \"media_player.living_room\"}", "extra_fields_hint": "Additional fields to include in the payload, in JSON format. Leave empty if not needed.", "test_btn": "πŸ”Š Send Test Voice" }, "language": { "title": "🌐 Language", "hint": "Select the interface language.", "label": "🌐 Language", "restart_notice": "The page will reload to apply the new language." }, "saved": "βœ… Configuration saved!", "saved_local": "βœ… Configuration saved locally", "saved_local_error": "⚠️ Saved locally, server error: {error}" }, "expiry": { "today": "TODAY", "tomorrow": "Tomorrow", "days": "{days} days", "expired_days": "{days}d ago", "expired_yesterday": "Yesterday", "expired_today": "Today" }, "status": { "ok": "OK", "check": "Check", "discard": "Discard" }, "toast": { "product_saved": "Product saved!", "product_created": "Product created!", "product_updated": "βœ… Product updated!", "product_removed": "Product removed", "updated": "Updated!", "quantity_confirmed": "βœ“ Quantity confirmed", "added_to_inventory": "βœ… {name} added!", "removed_from_list": "βœ… {name} removed from the list!", "removed_from_list_short": "Removed from the list", "added_to_shopping": "πŸ›’ Added to the shopping list!", "removed_from_shopping": "πŸ›’ Removed from the shopping list", "finished_to_bring": "πŸ›’ Product finished β†’ added to Bring!", "thrown_away": "πŸ—‘οΈ {name} thrown away!", "thrown_away_partial": "πŸ—‘οΈ Thrown away {qty} {unit} of {name}", "appliance_added": "Appliance added", "item_added": "{name} added" }, "error": { "generic": "Error", "loading": "Error loading product", "not_found": "Product not found", "not_found_manual": "Product not found. Enter it manually.", "search": "Search error. Try again.", "search_short": "Search error", "save": "Error saving", "connection": "Connection error", "camera": "Cannot access camera", "bring_add": "Error adding to Bring!", "bring_connection": "Bring! connection error", "identification": "Identification error", "barcode_empty": "Enter a barcode", "barcode_format": "Barcode must contain only numbers (4-14 digits)", "min_chars": "Type at least 2 characters", "not_in_inventory": "Product not in inventory", "appliance_exists": "Appliance already exists", "already_exists": "Already exists" }, "confirm": { "remove_item": "Do you really want to remove this product from inventory?" }, "edit": { "title": "Edit {name}" }, "screensaver": { "recipe_btn": "Recipes", "scan_btn": "Scan product" }, "days": { "mon": "Monday", "tue": "Tuesday", "wed": "Wednesday", "thu": "Thursday", "fri": "Friday", "sat": "Saturday", "sun": "Sunday" }, "meal_types": { "lunch": "Lunch", "dinner": "Dinner" } }