{
"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"
}
}