Files
EverShelf/translations/it.json
T
dadaloop82 ed89e74b94 fix: split Bimby/Cookeo appliances, add missing i18n keys, improve use_all dialog
- .env: split 'Bimby/Moulinex Cookeo' into 'Bimby' and 'Moulinex Cookeo'
- translations (it/en/de): add use_all_confirm_*, throw_all_confirm_*,
  confirm.cancel, confirm.proceed, location.dispensa/frigo/freezer
- app.js: when ANY opened package exists, always show disambiguation
  dialog ('solo questa confezione?' vs 'tutto?') instead of silently
  finishing one — was previously showing dialog only for 2+ opened packages
2026-05-06 05:22:49 +00:00

914 lines
44 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"app": {
"name": "EverShelf",
"loading": "Caricamento..."
},
"nav": {
"title": "EverShelf",
"home": "Home",
"inventory": "Dispensa",
"recipes": "Ricette",
"shopping": "Spesa",
"log": "Storico"
},
"btn": {
"back": "← Indietro",
"save": "💾 Salva",
"cancel": "✕ Annulla",
"close": "Chiudi",
"add": "✅ Aggiungi",
"delete": "Elimina",
"edit": "✏️ Modifica",
"search": "🔍 Cerca",
"go": "✅ Vai",
"toggle_password": "👁️ Mostra/Nascondi",
"load_more": "Carica altri...",
"save_config": "💾 Salva Configurazione",
"save_product": "💾 Salva Prodotto",
"restart": "↺ Ricomincia",
"reset_default": "↺ Ripristina default",
"save_info": "💾 Salva informazioni",
"retry": "🔄 Riprova"
},
"locations": {
"dispensa": "Dispensa",
"frigo": "Frigo",
"freezer": "Freezer",
"altro": "Altro"
},
"categories": {
"latticini": "Latticini",
"carne": "Carne",
"pesce": "Pesce",
"frutta": "Frutta",
"verdura": "Verdura",
"pasta": "Pasta & Riso",
"pane": "Pane & Forno",
"surgelati": "Surgelati",
"bevande": "Bevande",
"condimenti": "Condimenti",
"snack": "Snack & Dolci",
"conserve": "Conserve",
"cereali": "Cereali & Legumi",
"igiene": "Igiene",
"pulizia": "Pulizia Casa",
"altro": "Altro",
"select": "-- Seleziona --"
},
"units": {
"pz": "pz",
"conf": "conf",
"g": "g",
"ml": "ml",
"pieces": "Pezzi",
"grams": "Grammi",
"box": "Confezione",
"boxes": "Confezioni"
},
"shopping_sections": {
"frutta_verdura": "Frutta & Verdura",
"carne_pesce": "Carne & Pesce",
"latticini": "Latticini & Fresco",
"pane_dolci": "Pane & Dolci",
"pasta": "Pasta & Cereali",
"conserve": "Conserve & Salse",
"surgelati": "Surgelati",
"bevande": "Bevande",
"pulizia_igiene": "Pulizia & Igiene",
"altro": "Altro"
},
"dashboard": {
"expired_title": "🚫 Scaduti",
"expiring_title": "⏰ Prossime Scadenze",
"stats_period": "📊 Ultimi 30 giorni",
"opened_title": "📦 Prodotti Aperti",
"review_title": "🔍 Da revisionare",
"review_hint": "Quantità che sembrano anomale. Conferma se corrette o modifica.",
"quick_recipe": "🍳 Ricetta veloce con prodotti in scadenza",
"banner_review_title": "Quantità anomala",
"banner_review_action_ok": "È corretto",
"banner_review_action_finish": "🗑️ È finito tutto",
"banner_review_action_edit": "Correggi",
"banner_review_action_weigh": "Pesa",
"banner_review_dismiss": "Ignora",
"banner_prediction_title": "Consumo anomalo",
"banner_prediction_hint": "Secondo le previsioni, questa quantità non corrisponde al consumo previsto.",
"banner_prediction_action_confirm": "Confermo la quantità di {qty} {unit}",
"banner_prediction_action_weigh": "Pesa ora",
"banner_prediction_action_edit": "Aggiorna quantità",
"banner_expired_title": "Prodotto scaduto",
"banner_expired_today": "Scaduto oggi",
"banner_expired_days": "Scaduto da {days} giorni",
"banner_expired_action_use": "Usa comunque",
"banner_expired_action_throw": "L'ho buttato",
"banner_expired_action_edit": "Correggi data",
"banner_anomaly_action_edit": "Correggi inventario",
"banner_anomaly_action_dismiss": "La quantità è giusta",
"banner_expiring_title": "In scadenza",
"banner_expiring_today": "Scade oggi!",
"banner_expiring_tomorrow": "Scade domani",
"banner_expiring_days": "Scade tra {days} giorni",
"banner_expiring_action_use": "Usa ora",
"banner_finished_title": "è finito?",
"banner_finished_detail": "Ho registrato che {name} ha toccato quota zero. È davvero finito o hai ancora delle scorte?",
"banner_finished_action_yes": "Sì, è finito",
"banner_finished_action_no": "No, ne ho ancora",
"banner_review_unusual_pkg_title": "Confezione insolita",
"banner_review_unusual_pkg_detail": "Hai impostato una confezione da {qty} {unit} — la dimensione sembra molto alta. Controlla se è corretta o modifica.",
"banner_review_low_qty_title": "Quantità molto bassa",
"banner_review_low_qty_detail": "Hai solo {qty} in inventario — sembra poco, potrebbe essere un errore. Conferma se è corretto.",
"banner_review_high_qty_title": "Quantità insolitamente alta",
"banner_review_high_qty_detail": "Hai {qty} in inventario — la cifra sembra molto alta. Conferma se è corretto o correggi.",
"banner_prediction_rate_day": "Media ~{n} {unit}/giorno",
"banner_prediction_rate_week": "Media ~{n} {unit}/settimana",
"banner_prediction_days_ago": "{n} giorni fa hai rifornito",
"banner_prediction_more": "mi aspettavo {expected} {unit}{time}, ne hai invece {actual} {unit}. Hai aggiunto scorte senza registrarle?",
"banner_prediction_less": "mi aspettavo {expected} {unit}{time}, ne hai solo {actual} {unit}. Hai consumato di più del solito?",
"banner_finished_zero": "L'inventario segna zero, ma i movimenti registrati dicono che non dovrebbe essere finito.",
"banner_finished_expected": "Secondo le registrazioni dovresti averne ancora {qty} {unit}.",
"banner_finished_check": "Puoi controllare?",
"banner_anomaly_phantom_title": "hai più scorte del previsto",
"banner_anomaly_phantom_detail": "L'inventario segna {inv_qty} {unit}, ma in base alle registrazioni ne dovresti avere solo {expected_qty} {unit}. Hai aggiunto scorte senza registrarle?",
"banner_anomaly_untracked_title": "scorte non registrate come entrata",
"banner_anomaly_untracked_detail": "Hai <strong>{inv_qty} {unit}</strong> in inventario, ma le uscite registrate superano le entrate — le scorte iniziali probabilmente non sono mai state aggiunte come entrata. Puoi correggere la quantità o registrare le entrate mancanti.",
"banner_anomaly_ghost_title": "hai meno scorte del previsto",
"banner_anomaly_ghost_detail": "In base alle operazioni registrate dovresti avere {expected_qty} {unit} di {name}, ma l'inventario mostra solo {inv_qty} {unit}. Hai prelevato senza registrarlo?",
"consumed": "Consumati: {n} ({pct}%)",
"wasted": "Buttati: {n} ({pct}%)",
"more_opened": "e altri {n} prodotti aperti...",
"banner_expired_detail": "{when} · hai ancora <strong>{qty}</strong>."
},
"inventory": {
"title": "Dispensa",
"filter_all": "Tutti",
"search_placeholder": "🔍 Cerca prodotto...",
"recent_title": "🕐 Ultimi usati",
"popular_title": "⭐ Più usati",
"empty": "Nessun prodotto qui.\nScansiona un prodotto per aggiungerlo!",
"no_items_found": "Nessuna voce di inventario trovata",
"qty_remainder_suffix": "rimasti",
"vacuum_badge": "🫙 Sotto vuoto",
"opened_badge": "📭 Aperto",
"label_expiry": "📅 Scadenza",
"label_storage": "🫙 Conservazione",
"label_status": "📭 Stato",
"opened_since": "Aperto dal {date}",
"label_position": "📍 Posizione",
"label_quantity": "📦 Quantità",
"label_added": "📅 Aggiunto",
"empty_text": "Nessun prodotto qui.<br>Scansiona un prodotto per aggiungerlo!",
"empty_db": "Nessun prodotto nel database.<br>Scansiona un prodotto per iniziare!"
},
"scan": {
"title": "Scansiona Prodotto",
"mode_shopping": "🛒 Modalità Spesa",
"mode_shopping_end": "✅ Fine spesa",
"zoom": "Zoom",
"barcode_placeholder": "Inserisci codice a barre...",
"quick_name_divider": "oppure scrivi il nome",
"quick_name_placeholder": "Es: Mele, Zucchine, Pane...",
"manual_entry": "✏️ Inserimento Manuale",
"ai_identify": "🤖 Identifica con AI",
"hint": "Scansiona il barcode, scrivi il nome del prodotto, oppure usa l'AI per identificarlo",
"debug_toggle": "🐛 Debug Log",
"barcode_acquired": "🔖 Barcode acquisito: {code}",
"scan_barcode": "🔖 Scansiona Barcode",
"create_named": "Crea {name}",
"new_without_barcode": "Nuovo prodotto senza barcode"
},
"action": {
"title": "Cosa vuoi fare?",
"add_btn": "📥 AGGIUNGI",
"add_sub": "in dispensa/frigo",
"use_btn": "📤 USA / CONSUMA",
"use_sub": "dalla dispensa/frigo",
"have_title": "📦 Ce l'hai già!",
"add_more_sub": "altra quantità",
"use_qty_sub": "quanto ne hai usato",
"throw_btn": "🗑️ BUTTA",
"throw_sub": "butta il prodotto",
"edit_sub": "scadenza, luogo…"
},
"add": {
"title": "Aggiungi alla Dispensa",
"location_label": "📍 Dove lo metti?",
"quantity_label": "📦 Quantità",
"conf_size_label": "📦 Ogni confezione contiene:",
"conf_size_placeholder": "es. 300",
"vacuum_label": "🫙 Sotto vuoto",
"vacuum_hint": "La scadenza verrà estesa automaticamente",
"submit": "✅ Aggiungi",
"purchase_type_label": "🛒 Questo prodotto è...",
"new_btn": "🆕 Appena comprato",
"existing_btn": "📦 Ce l'avevo già",
"remaining_label": "📦 Quantità rimasta",
"remaining_hint": "Quanto è rimasto approssimativamente?",
"remaining_full": "🟢 Pieno",
"remaining_half": "🟠 Metà",
"estimated_expiry": "Scadenza stimata:",
"suffix_freezer": "(freezer)",
"suffix_vacuum": "(sotto vuoto)",
"hint_modify": "📝 Puoi modificare la data o scansionarla con la fotocamera",
"scan_expiry_title": "📷 Scansiona Data Scadenza",
"product_added": "✅ {name} aggiunto!{qty}",
"suffix_freezer_vacuum": "(freezer + sotto vuoto)"
},
"use": {
"title": "Usa / Consuma",
"location_label": "📍 Da dove?",
"quantity_label": "Quanto hai usato?",
"change": "cambia",
"partial_hint": "Oppure specifica la quantità usata:",
"partial_piece_hint": "Hai usato solo una parte?",
"piece": "pezzo",
"one_whole": "1 intero",
"use_all": "🗑️ Usato TUTTO / Finito",
"submit": "📤 Usa questa quantità",
"available": "📦 Disponibile:",
"opened_badge": "APERTO",
"not_in_inventory": "⚠️ Prodotto non presente nell'inventario.",
"expiry_warning": "⚠️ Usa prima quella{loc} che scade il {date} — {when}!",
"throw_title": "🗑️ Butta Prodotto",
"throw_all": "🗑️ Butta TUTTO ({qty})",
"throw_qty_label": "Quanto butti?",
"throw_qty_hint": "oppure specifica la quantità:",
"throw_partial_btn": "🗑️ Butta questa quantità",
"when_expired": "scaduta da {n} giorni",
"when_today": "scade <strong>oggi</strong>",
"when_tomorrow": "scade <strong>domani</strong>",
"when_days": "scade tra <strong>{n} giorni</strong>",
"toast_used": "📤 Usato {qty} di {name}",
"toast_bring": "🛒 Prodotto finito → aggiunto a Bring!",
"toast_opened_finished": "🔓 Confezione aperta di {name} finita!",
"disambiguation_hint": "Cosa intendi con \"finito tutto\"?",
"disambiguation_all": "🗑️ Finito TUTTO ({qty})",
"error_exceeds_stock": "⚠️ Non puoi usare più di quanto hai disponibile!",
"use_all_confirm_title": "✅ Finisci tutto",
"use_all_confirm_msg": "Conferma che hai finito tutto il prodotto:",
"use_all_confirm_btn": "✅ Sì, finito",
"throw_all_confirm_title": "🗑️ Butta tutto",
"throw_all_confirm_msg": "Vuoi davvero buttare via tutto il prodotto?",
"throw_all_confirm_btn": "🗑️ Sì, butta"
},
"product": {
"title_new": "Nuovo Prodotto",
"title_edit": "Modifica Prodotto",
"ai_fill": "📷 Scatta foto e identifica con AI",
"ai_fill_hint": "L'AI compilerà automaticamente i campi del prodotto",
"name_label": "🏷️ Nome Prodotto *",
"name_placeholder": "Es: Latte intero, Pasta penne rigate...",
"brand_label": "🏢 Marca",
"brand_placeholder": "Es: Barilla, Granarolo, Mutti...",
"category_label": "📂 Categoria",
"unit_label": "📏 Unità di misura",
"default_qty_label": "🔢 Quantità default",
"conf_size_label": "📦 Ogni confezione contiene:",
"conf_size_placeholder": "es. 300",
"notes_label": "📝 Note",
"notes_placeholder": "Es: senza lattosio, bio, conservare in frigo dopo apertura...",
"barcode_label": "🔖 Barcode",
"barcode_placeholder": "Codice a barre (se disponibile)",
"barcode_hint": "⚠️ Aggiungi il barcode così al prossimo acquisto basta scansionarlo!",
"submit": "💾 Salva Prodotto",
"name_required": "Inserisci il nome del prodotto",
"conf_size_required": "Specifica il contenuto di ogni confezione",
"expiry_estimated": "Scadenza stimata:",
"scan_expiry": "Scansiona data scadenza",
"expiry_hint": "📝 Puoi modificare la data o scansionarla con la fotocamera",
"add_batch": "📦 + Lotto con scadenza diversa",
"package_info": "📦 Confezione: {info}",
"edit_catalog": "⚙️ Modifica scheda prodotto (nome, marca, categoria…)",
"not_recognized": "⚠️ Prodotto non riconosciuto",
"edit_info": "✏️ Modifica informazioni",
"modify_details": "MODIFICA\nscadenza, luogo…",
"already_in_pantry": "📋 Già in dispensa",
"no_barcode": "Senza barcode"
},
"products": {
"title": "📦 Tutti i Prodotti",
"search_placeholder": "🔍 Cerca prodotto...",
"empty": "Nessun prodotto nel database.\nScansiona un prodotto per iniziare!",
"no_category": "Nessun prodotto in questa categoria"
},
"recipes": {
"title": "🍳 Ricette",
"generate": "✨ Genera nuova ricetta",
"archive_empty": "Nessuna ricetta salvata. Genera la tua prima ricetta!",
"dialog_title": "🍳 Ricetta",
"dialog_desc": "Genero una ricetta sana con gli ingredienti in dispensa, dando priorità a quelli in scadenza.",
"meal_label": "🕐 Per quale pasto?",
"persons_label": "👥 Quante persone?",
"meal_type_label": "🎯 Tipo di pasto",
"opt_fast": "⚡ Pasto Veloce",
"opt_light": "🥗 Poca Fame",
"opt_expiry": "⏰ Priorità Scadenze",
"opt_healthy": "💚 Extra Salutare",
"opt_opened": "📦 Priorità Cose Aperte",
"opt_zero_waste": "♻️ Zero Sprechi",
"generate_btn": "✨ Genera Ricetta",
"loading_msg": "Sto preparando la ricetta...",
"start_cooking": "👨‍🍳 Modalità Cucina",
"regenerate": "🔄 Generane un'altra",
"close_btn": "✅ Chiudi",
"ingredients_title": "🧾 Ingredienti",
"steps_title": "👨‍🍳 Procedimento",
"no_steps": "Nessun procedimento disponibile",
"generate_error": "Errore nella generazione",
"persons_short": "pers.",
"use_ingredient_title": "Usa ingrediente",
"recipe_qty_label": "Ricetta",
"from_where_label": "Da dove?",
"amount_label": "Quanto",
"use_amount_btn": "Usa questa quantità",
"use_all_btn": "Usa TUTTO / Finito",
"packs_label": "Confezioni",
"quantity_in_total": "Quantità in {unit} (totale: {total})",
"packs_of_have": "Confezioni da {size} (hai {count} conf)",
"scale_wait_stable": "Attendi 10s di stabilità per la compilazione automatica…",
"ingredient_scaled_toast": "📦 Ingrediente scalato dalla dispensa!",
"finished_added_bring_toast": "🛒 Prodotto finito → aggiunto a Bring!",
"load_error": "Errore nel caricamento"
},
"shopping": {
"title": "🛒 Lista della Spesa",
"bring_loading": "Connessione a Bring!...",
"bring_not_configured": "Bring! non è configurato. Aggiungi email e password nelle <a href='#' onclick=\"showPage('settings');return false;\">impostazioni</a>.",
"tab_to_buy": "🛍️ Da comprare",
"tab_forecast": "🧠 In previsione",
"total_label": "💰 Totale stimato",
"section_to_buy": "🛍️ Da comprare",
"suggestions_title": "💡 Suggerimenti AI",
"suggestions_add": "✅ Aggiungi selezionati a Bring!",
"search_prices": "🔍 Cerca tutti i prezzi",
"suggest_btn": "🤖 Suggerisci cosa comprare",
"smart_title": "🧠 Previsioni intelligenti",
"smart_empty": "Nessuna previsione disponibile.<br>Aggiungi prodotti alla dispensa per ricevere previsioni intelligenti.",
"smart_filter_all": "Tutti",
"smart_filter_critical": "🔴 Urgenti",
"smart_filter_high": "🟠 Presto",
"smart_filter_medium": "🟡 Pianifica",
"smart_filter_low": "🟢 Previsione",
"smart_add": "🛒 Aggiungi selezionati a Bring!",
"empty": "Lista della spesa vuota!\nUsa il pulsante sotto per generare suggerimenti.",
"already_in_list": "🛒 \"{name}\" già nella lista della spesa",
"already_in_list_short": "️ Già nella lista della spesa",
"add_prompt": "Vuoi aggiungerlo alla lista della spesa?",
"smart_already": "📊 La spesa intelligente prevede già {name}",
"all_searched": "Tutti i prodotti sono già stati cercati. Usa 🔄 per ricercare singoli.",
"search_complete": "Ricerca completata: {count} prodotti",
"removed_sufficient": "🧹 {removed} prodotto/i con scorte sufficienti rimosso/i dalla lista",
"bring_badge": "🛒 Già su Bring!",
"add_urgent_toast": "🔴 {n} prodotto/i urgente/i aggiunto/i automaticamente a Bring!",
"migration_done": "✅ {migrated} aggiornati, {skipped} già ok",
"added_to_bring": "🛒 {n} prodotti aggiunti a Bring!",
"added_to_bring_skip": "{n} già presenti",
"all_on_bring": "Tutti i prodotti erano già su Bring!",
"freq_high": "📈 Uso frequente",
"freq_regular": "📊 Uso regolare",
"freq_occasional": "📉 Uso occasionale",
"out_of_stock": "Esaurito",
"scan_toast": "📷 Scansiona: {name}",
"empty_category": "Nessun prodotto in questa categoria",
"session_empty": "🛒 Nessun prodotto ancora",
"urgency_critical": "Urgente",
"urgency_high": "Presto",
"urgency_medium": "Pianifica",
"urgency_low": "Previsione",
"urgency_medium_short": "Medio",
"urgency_low_short": "Ok",
"tag_urgent": "🔴 Urgente",
"tag_priority": "⭐ Priorità",
"tag_check": "✅ Verificare",
"smart_already_predicted": "📊 La spesa intelligente prevede già <strong>{name}</strong>{urgency}.",
"item_removed": "✅ {name} rimosso dalla lista!",
"urgency_spec_critical": "⚡ Urgente",
"urgency_spec_high": "🟠 Presto",
"bring_add_n": "Aggiungi {n} a Bring!",
"bring_add_selected": "Aggiungi selezionati a Bring!",
"bring_adding": "Aggiunta in corso...",
"bring_added_one": "1 prodotto aggiunto a Bring!",
"bring_added_many": "{n} prodotti aggiunti a Bring!",
"bring_skipped": "({n} già in lista)",
"force_sync": "Forza sincronizzazione Bring!",
"scan_target_label": "Stai cercando",
"scan_target_found": "Trovato! Rimuovi dalla lista",
"bring_add_one": "Aggiungi 1 prodotto a Bring!",
"bring_add_many": "Aggiungi {n} prodotti a Bring!",
"syncing": "Sincronizzazione…",
"sync_done": "Sincronizzazione completata",
"price_searching": "Cerco...",
"search_action": "Ricerca",
"open_action": "Apri",
"not_found": "Non trovato",
"search_price": "Cerca prezzo",
"tap_to_scan": "Tocca per scansionare",
"tag_title": "Tag",
"remove_title": "Rimuovi",
"found_count": "{found}/{total} prodotti trovati",
"savings_offers": "· 🏷️ Risparmi €{amount} con le offerte",
"searching_progress": "Cerco {current}/{total}...",
"remove_error": "Errore nella rimozione",
"suggest_loading": "Analisi in corso...",
"suggest_error": "Errore nella generazione",
"priority_high": "Alta",
"priority_medium": "Media",
"priority_low": "Bassa"
},
"ai": {
"title": "🤖 Identificazione AI",
"capture": "📸 Scatta Foto",
"retake": "🔄 Riscatta",
"hint": "Scatta una foto del prodotto e l'AI cercherà di identificarlo",
"identifying": "🤖 Identifico il prodotto...",
"no_api_key": "⚠️ Chiave API Gemini non configurata.\n<small>Aggiungi GEMINI_API_KEY nel file .env sul server.</small>",
"fields_filled": "✅ Campi compilati dall'AI",
"use_data": "✅ Usa dati AI",
"use_data_no_barcode": "✅ Usa dati AI (senza barcode)"
},
"log": {
"title": " Storico",
"type_added": "Aggiunto",
"type_waste": "Buttato",
"type_used": "Usato",
"type_bring": "Aggiunto a Bring!",
"undone_badge": "Annullato",
"undo_title": "Annulla questa operazione",
"load_error": "Errore nel caricamento log",
"empty": "Nessuna operazione registrata.",
"undo_action_remove": "rimozione di",
"undo_action_restore": "ripristino di",
"undo_confirm": "Annullare questa operazione?\n→ {action} {name}",
"undo_success": "↩ Operazione annullata per {name}",
"already_undone": "Operazione già annullata",
"too_old": "Non è possibile annullare operazioni più vecchie di 24 ore",
"undo_error": "Errore durante l'annullamento"
},
"chat": {
"title": "Gemini Chef",
"welcome": "Ciao! Sono il tuo assistente cucina",
"welcome_desc": "Chiedimi di prepararti un succo, uno spuntino, un piatto veloce... Conosco la tua dispensa, i tuoi elettrodomestici e le tue preferenze!",
"suggestion_snack": "🍿 Spuntino veloce",
"suggestion_juice": "🥤 Succo/Frullato",
"suggestion_light": "🥗 Qualcosa di leggero",
"suggestion_expiry": "⏰ Usa le scadenze",
"clear": "Nuova conversazione",
"placeholder": "Chiedi qualcosa...",
"cleared": "Chat cancellata",
"suggestion_snack_text": "Cosa posso preparare per uno spuntino veloce?",
"suggestion_juice_text": "Fammi un succo o frullato con quello che ho",
"suggestion_light_text": "Ho fame ma voglio qualcosa di leggero",
"suggestion_expiry_text": "Cosa sta per scadere e come posso usarlo?"
},
"cooking": {
"close": "Chiudi",
"tts_btn": "Leggi ad alta voce",
"restart": "↺ Ricomincia",
"replay": "🔊 Rileggi",
"timer": "⏱️ {time} · Timer",
"prev": "◀ Precedente",
"next": "Successivo ▶",
"ingredient_used": "✔️ Scalato",
"ingredient_use_btn": "📦 Usa",
"ingredient_deduct_title": "Scala dalla dispensa",
"timer_expired_tts": "Timer {label} scaduto!",
"timer_warning_tts": "Attenzione! {label}: mancano 10 secondi!",
"recipe_done_tts": "Ricetta completata! Buon appetito!",
"expires_chip": "scade {date}",
"finish": "✅ Fine"
},
"settings": {
"title": "⚙️ Configurazione",
"tab_api": "API Keys",
"tab_bring": "Bring!",
"tab_recipe": "Ricette",
"tab_mealplan": "Piano Settimanale",
"tab_appliances": "Elettrodomestici",
"tab_spesa": "Spesa Online",
"tab_camera": "Fotocamera",
"tab_security": "Sicurezza",
"tab_tts": "Voce (TTS)",
"tab_language": "Lingua",
"tab_scale": "Bilancia Smart",
"gemini": {
"title": "🤖 Google Gemini AI",
"hint": "Chiave API per identificazione prodotti, scadenze e ricette.",
"key_label": "API Key Gemini"
},
"bring": {
"title": "🛒 Bring! Shopping List",
"hint": "Credenziali per l'integrazione con la lista della spesa Bring!",
"email_label": "📧 Email Bring!",
"password_label": "🔒 Password Bring!"
},
"recipe": {
"title": "🍳 Preferenze Ricette",
"hint": "Configura le opzioni predefinite per la generazione delle ricette.",
"persons_label": "👥 Persone predefinite",
"options_label": "🎯 Opzioni ricetta predefinite",
"fast": "⚡ Pasto Veloce",
"light": "🥗 Poca Fame",
"expiry": "⏰ Priorità Scadenze",
"healthy": "💚 Extra Salutare",
"opened": "📦 Priorità Cose Aperte",
"zerowaste": "♻️ Zero Sprechi",
"dietary_label": "🚫 Intolleranze / Restrizioni",
"dietary_placeholder": "Es: senza glutine, senza lattosio, vegetariano..."
},
"mealplan": {
"title": "📅 Piano Pasti Settimanale",
"hint": "Imposta la tipologia di pasto per ogni giorno. Sarà usata come guida nella generazione delle ricette.",
"enabled": "✅ Attiva piano pasti settimanale",
"legend": "🌤️ = Pranzo · 🌙 = Cena · Tocca un badge per cambiarlo.",
"types_title": "📋 Tipologie disponibili"
},
"appliances": {
"title": "🔌 Elettrodomestici Disponibili",
"hint": "Indica gli elettrodomestici che hai a disposizione. Saranno considerati nella generazione delle ricette.",
"new_placeholder": "Es: Macchina del pane, Bimby, Friggitrice ad aria...",
"quick_title": "Aggiungi velocemente:",
"oven": "🔥 Forno",
"microwave": "📡 Microonde",
"air_fryer": "🍟 Friggitrice ad aria",
"bread_maker": "🍞 Macchina pane",
"bimby": "🤖 Bimby/Cookeo",
"mixer": "🌀 Planetaria",
"steamer": "♨️ Vaporiera",
"pressure_cooker": "🫕 Pentola pressione",
"toaster": "🍞 Tostapane",
"blender": "🍹 Frullatore",
"empty": "Nessun elettrodomestico aggiunto"
},
"spesa": {
"title": "🛍️ Spesa Online",
"hint": "Configura il provider per la spesa online.",
"provider_label": "🏪 Provider",
"email_label": "📧 Email",
"password_label": "🔒 Password",
"login_btn": "🔐 Accedi",
"ai_prompt_label": "🤖 Prompt AI selezione prodotto",
"ai_prompt_placeholder": "Istruzioni per l'AI quando deve scegliere tra più prodotti...",
"ai_prompt_hint": "L'AI usa questo prompt per scegliere il prodotto più appropriato tra i risultati. Lascia vuoto per il comportamento predefinito.",
"configure_first": "Configura prima la Spesa Online nelle impostazioni",
"missing_credentials": "Inserisci email e password",
"login_in_progress": "Accesso in corso...",
"login_error_prefix": "Errore:",
"login_network_error_prefix": "Errore di rete:",
"login_success_default": "Login effettuato!",
"result_name_label": "Nome",
"result_card_label": "Tessera",
"result_pickup_label": "Punto Ritiro",
"result_points_label": "Punti Fedeltà",
"connected_relogin": "✅ Connesso — Riaccedi",
"connected_as": "Connesso come {name}"
},
"camera": {
"title": "📷 Fotocamera",
"hint": "Scegli quale fotocamera utilizzare per la scansione barcode e l'identificazione AI.",
"device_label": "📸 Fotocamera predefinita",
"back": "📱 Posteriore (default)",
"front": "🤳 Anteriore",
"devices_hint": "Se hai più fotocamere, puoi selezionarne una specifica dall'elenco sopra dopo aver concesso i permessi.",
"detect_btn": "🔄 Rileva fotocamere"
},
"security": {
"title": "🔒 Certificato HTTPS",
"hint": "Se il browser mostra l'errore \"La connessione non è privata\" (ERR_CERT_AUTHORITY_INVALID), devi installare il certificato CA nel dispositivo.",
"download_btn": "📥 Scarica Certificato CA"
},
"tts": {
"title": "🔊 Voce & TTS",
"hint": "Configura la sintesi vocale tramite qualsiasi API REST esterna. I passi della ricetta e i timer scaduti verranno inviati all'endpoint configurato.",
"enabled": "✅ Attiva TTS",
"url_label": "🌐 URL Endpoint",
"method_label": "📡 Metodo HTTP",
"auth_label": "🔐 Autenticazione",
"auth_bearer": "Bearer Token",
"auth_custom": "Header personalizzato",
"auth_none": "Nessuna",
"token_label": "🔑 Bearer Token",
"custom_header_name": "📋 Nome header",
"custom_header_value": "📋 Valore header",
"content_type_label": "📄 Content-Type",
"payload_key_label": "🗝️ Campo testo nel payload",
"payload_key_hint": "Nome del campo JSON che conterrà il testo da leggere (es: message, text).",
"extra_fields_label": " Campi extra (JSON)",
"extra_fields_placeholder": "{\"entity_id\": \"media_player.living_room\"}",
"extra_fields_hint": "Campi aggiuntivi da includere nel payload, in formato JSON. Lascia vuoto se non necessario.",
"test_btn": "🔊 Invia Test Vocale"
},
"language": {
"title": "🌐 Lingua / Language",
"hint": "Seleziona la lingua dell'interfaccia. Select the interface language.",
"label": "🌐 Lingua",
"restart_notice": "La pagina verrà ricaricata per applicare la nuova lingua."
},
"screensaver": {
"label": "Attiva salvaschermo",
"card_title": "🌙 Salvaschermo",
"card_hint": "Mostra un orologio con fatti utili dopo 5 minuti di inattività. Di default è disattivato."
},
"scale": {
"title": "⚖️ Bilancia Smart",
"hint": "Collega una bilancia Bluetooth tramite il gateway Android per leggere il peso automaticamente.",
"tab": "Bilancia Smart",
"enabled": "✅ Abilita bilancia smart",
"url_label": "🌐 URL Gateway WebSocket",
"url_placeholder": "ws://192.168.1.x:8765",
"url_hint": "URL mostrato dall'app Android (stessa rete Wi-Fi). Es:",
"test_btn": "🔗 Testa connessione",
"download_btn": "📥 Scarica Gateway Android (APK)",
"download_hint": "App Android che fa da ponte tra la bilancia BLE e questo sito.",
"download_sub": "Sorgente: evershelf-scale-gateway/ nella root del progetto"
},
"kiosk": {
"hint": "Trasforma un tablet Android in un pannello EverShelf sempre acceso, con bilancia BLE integrata.",
"download_btn": "📥 Scarica EverShelf Kiosk (APK)",
"download_sub": "Modalità kiosk full-screen + gateway bilancia integrato. Sorgente: evershelf-kiosk/"
},
"saved": "✅ Configurazione salvata!",
"saved_local": "✅ Configurazione salvata localmente",
"saved_local_error": "⚠️ Salvato localmente, errore server: {error}"
},
"expiry": {
"today": "OGGI",
"tomorrow": "Domani",
"days": "{days} giorni",
"expired_days": "Da {days}g",
"expired_yesterday": "Da ieri",
"expired_today": "Oggi",
"badge_today": "⚠️ Scade oggi!",
"badge_tomorrow": "⏰ Domani",
"badge_tomorrow_long": "⏰ Scade domani",
"badge_days": "⏰ {n} giorni",
"badge_expired_ago": "⚠️ Scaduto da {n}g",
"badge_expired": "⛔ Scaduto!",
"badge_stable": "✅ Stabile",
"badge_expiring_short": "⏰ Scade fra {n}gg",
"badge_ok_still": "✅ Ancora {n}gg",
"badge_expires_red": "🔴 Scade tra {n}g",
"badge_expires_yellow": "🟡 Scade tra {n}g",
"badge_expired_bare": "⚠️ Scaduto",
"badge_expires_warn": "⚠️ Scade tra {n}gg",
"badge_days_left": "⏳ ~{n}gg rimasti",
"days_approx": "~{n} giorni",
"weeks_approx": "~{n} settimane",
"months_approx": "~{n} mesi",
"years_approx": "~{n} anni",
"expired_today_long": "Scaduto oggi",
"expired_ago_long": "Scaduto da {n} giorni",
"expired_suffix": "— Scaduto!",
"expired_suffix_ok": "— Scaduto (ancora ok)",
"expired_suffix_warning": "— Scaduto (controlla)",
"days_compact": "{n}gg"
},
"status": {
"ok": "OK",
"check": "Controlla",
"discard": "Buttare",
"tip_freezer_ok": "In freezer: ancora sicuro (~{n}g di margine)",
"tip_freezer_check": "In freezer da molto, potrebbe aver perso qualità. Consumare presto",
"tip_freezer_danger": "In freezer da troppo tempo, rischio di bruciatura da gelo e degrado",
"tip_highRisk_check": "Scaduto da poco, controlla odore e aspetto prima di consumare",
"tip_highRisk_danger": "Prodotto deperibile scaduto: da buttare per sicurezza",
"tip_medRisk_check1": "Controlla aspetto e odore prima di consumare",
"tip_medRisk_check2": "Scaduto da un po', verificare bene prima dell'uso",
"tip_medRisk_danger": "Troppo tempo dalla scadenza, meglio buttare",
"tip_lowRisk_ok": "Prodotto a lunga conservazione, ancora sicuro da consumare",
"tip_lowRisk_check": "Scaduto da oltre un mese, controllare integrità confezione",
"tip_lowRisk_danger": "Scaduto da troppo tempo, meglio non rischiare"
},
"toast": {
"product_saved": "Prodotto salvato!",
"product_created": "Prodotto creato!",
"product_updated": "✅ Prodotto aggiornato!",
"product_removed": "Prodotto rimosso",
"updated": "Aggiornato!",
"quantity_confirmed": "✓ Quantità confermata",
"added_to_inventory": "✅ {name} aggiunto!",
"removed_from_list": "✅ {name} rimosso dalla lista!",
"removed_from_list_short": "Rimosso dalla lista",
"added_to_shopping": "🛒 Aggiunto alla lista della spesa!",
"removed_from_shopping": "🛒 Rimosso dalla lista della spesa",
"finished_to_bring": "🛒 Prodotto finito → aggiunto a Bring!",
"thrown_away": "🗑️ {name} buttato!",
"thrown_away_partial": "🗑️ Buttato {qty} {unit} di {name}",
"product_finished_confirmed": "✅ Rimosso — riaggiungi quando ne ricompri",
"appliance_added": "Elettrodomestico aggiunto",
"item_added": "{name} aggiunto"
},
"antiwaste": {
"title": "🌱 Rapporto Anti-Spreco",
"grade_label": "Voto",
"you": "Tu",
"avg_label": "Media",
"better": "🎉 Perdi il {diff}% in meno della {country}!",
"worse": "⚠️ Perdi più della media {country}. Puoi migliorare!",
"on_par": "→ Sei nella media {country}. Prova a fare ancora meglio!",
"saved_money": "~{amount}/mese risparmiati",
"saved_meals": "~{n} pasti salvati",
"saved_co2": "{n} kg CO₂ evitata",
"trend_title": "Andamento (ultimi 3 mesi)",
"months_ago_2": "-60 gg",
"months_ago_1": "-30 gg",
"this_month": "Ora",
"country_it": "media italiana",
"country_de": "media tedesca",
"country_en": "media USA",
"source": "Fonti: REDUCE, Eurostat, USDA 2021",
"live_on": "Dati in tempo reale",
"live_off": "Offline",
"meals": "pasti",
"annual_info": "📅 Tu ~{you} kg/anno · media ~{avg} kg/anno",
"badge_rate": "tasso perdita",
"badge_saved_money": "risparmio vs media",
"badge_wasted": "prod. persi",
"badge_better": "in meno vs media"
},
"error": {
"generic": "Errore",
"network": "Errore di rete",
"no_api_key": "Configura la chiave API nelle impostazioni",
"loading": "Errore nel caricamento del prodotto",
"not_found": "Prodotto non trovato",
"not_found_manual": "Prodotto non trovato. Inseriscilo manualmente.",
"search": "Errore nella ricerca. Riprova.",
"search_short": "Errore nella ricerca",
"save": "Errore nel salvataggio",
"connection": "Errore di connessione",
"camera": "Impossibile accedere alla fotocamera",
"bring_add": "Errore nell'aggiunta a Bring!",
"bring_connection": "Errore connessione Bring!",
"identification": "Errore nell'identificazione",
"ai_quota": "Quota AI esaurita. Riprova tra qualche minuto.",
"barcode_empty": "Inserisci un codice a barre",
"barcode_format": "Il codice a barre deve contenere solo numeri (4-14 cifre)",
"min_chars": "Scrivi almeno 2 caratteri",
"not_in_inventory": "Prodotto non nell'inventario",
"appliance_exists": "Elettrodomestico già presente",
"already_exists": "Già presente",
"network_retry": "Errore di connessione. Riprova.",
"select_items": "Seleziona almeno un prodotto"
},
"confirm": {
"remove_item": "Vuoi davvero rimuovere questo prodotto dall'inventario?",
"kiosk_exit": "Uscire dalla modalità kiosk?",
"cancel": "Annulla",
"proceed": "Conferma"
},
"location": {
"dispensa": "Dispensa",
"frigo": "Frigo",
"freezer": "Freezer"
},
"edit": {
"title": "Modifica {name}",
"unknown_hint": "Inserisci il nome e le informazioni del prodotto",
"label_name": "🏷️ Nome prodotto"
},
"screensaver": {
"recipe_btn": "Ricette",
"scan_btn": "Scansiona prodotto"
},
"days": {
"mon": "Lunedì",
"tue": "Martedì",
"wed": "Mercoledì",
"thu": "Giovedì",
"fri": "Venerdì",
"sat": "Sabato",
"sun": "Domenica",
"mon_short": "Lun",
"tue_short": "Mar",
"wed_short": "Mer",
"thu_short": "Gio",
"fri_short": "Ven",
"sat_short": "Sab",
"sun_short": "Dom"
},
"meal_types": {
"lunch": "Pranzo",
"dinner": "Cena",
"colazione": "Colazione",
"merenda": "Merenda",
"dolce": "Dolce",
"succo": "Succo di Frutta",
"pranzo": "Pranzo",
"cena": "Cena"
},
"scale": {
"status_connected": "Bilancia connessa",
"status_searching": "Connesso al gateway, attesa bilancia…",
"status_disconnected": "Gateway bilancia non raggiungibile",
"status_error": "Errore connessione gateway",
"not_connected": "Gateway bilancia non connesso",
"read_btn": "⚖️ Leggi dalla bilancia",
"reading_title": "Lettura bilancia",
"place_on_scale": "Metti il prodotto sulla bilancia…",
"waiting_stable": "Il peso venire rilevato automaticamente quando la lettura sarà stabile.",
"no_url": "Inserisci l'URL del gateway",
"testing": "⏳ Test connessione…",
"connected_ok": "Connessione gateway riuscita!",
"timeout": "Timeout: nessuna risposta dal gateway",
"error_connect": "Impossibile connettersi al gateway",
"tab": "Bilancia Smart",
"low_weight": "Peso < 10 g · inserisci manualmente\n(la lettura automatica richiede almeno 10 g)",
"density_hint": "(densità {density} g/ml)",
"ml_hint": "(verrà convertito in ml)",
"weight_detected": "Peso rilevato — attendi 10s di stabilità…",
"weight_too_low": "Peso troppo basso — attendi…",
"stable": "✓ Stabile",
"auto_confirm": "✅ {val} {unit} — conferma automatica tra 5s (tocca per annullare)",
"cancelled_replace": "Annullato — rimetti l'ingrediente sulla bilancia per riprendere"
},
"prediction": {
"expected_qty": "Previsto: {expected} {unit}",
"actual_qty": "Attuale: {actual} {unit}",
"check_suggestion": "Verifica o pesa la quantità residua"
},
"date": {
"today": "📅 Oggi",
"yesterday": "📅 Ieri"
},
"scanner": {
"title_barcode": "🔖 Scansiona Barcode",
"barcode_hint": "Inquadra il codice a barre del prodotto",
"barcode_manual_placeholder": "O inserisci manualmente...",
"barcode_use_btn": "✅ Usa questo codice",
"ai_identifying": "🤖 Identifico il prodotto...",
"ai_analyzing": "🤖 Analisi AI in corso...",
"product_label_hint": "Inquadra l'etichetta del prodotto",
"expiry_label_hint": "Inquadra la data di scadenza stampata sul prodotto",
"capture_btn": "📸 Scatta",
"capture_photo_btn": "📸 Scatta Foto",
"retake_btn": "🔄 Riscatta",
"camera_error_hint": "Assicurati di usare HTTPS e di aver concesso i permessi della fotocamera.<br>Puoi inserire il barcode manualmente o usare l'identificazione AI.",
"no_barcode": "Senza barcode"
},
"lowstock": {
"title": "⚠️ Sta per finire!",
"message": "{name} sta per finire — rimangono solo {qty}.",
"question": "Vuoi aggiungerlo alla lista della spesa?",
"yes": "🛒 Sì, aggiungi a Bring!",
"no": "No, per ora va bene"
},
"move": {
"title": "📦 Spostare il resto?",
"question": "Vuoi spostare {thing} di {name} in un'altra posizione?",
"question_short": "Vuoi spostare {thing} in un'altra posizione?",
"thing_opened": "la confezione aperta",
"thing_rest": "il resto",
"stay_btn": "No, resta in {location}",
"moved_toast": "📦 Confezione aperta spostata in {location}",
"vacuum_restore": "🫙 Torna sotto vuoto"
},
"nova": {
"1": "Non trasformato",
"2": "Ingrediente culinario",
"3": "Trasformato",
"4": "Ultra-trasformato"
},
"meal_plan_types": {
"pasta": "Pasta",
"riso": "Riso",
"carne": "Carne",
"pesce": "Pesce",
"legumi": "Legumi",
"uova": "Uova",
"formaggio": "Formaggio",
"pizza": "Pizza",
"affettati": "Affettati",
"verdure": "Verdure",
"zuppa": "Zuppa",
"insalata": "Insalata",
"pane": "Pane/Sandwich",
"dolce": "Dolce",
"libero": "Libero"
},
"meal_sub": {
"dolce_torta": "Torta",
"dolce_crema": "Crema / Budino",
"dolce_crumble": "Crumble / Crostata",
"dolce_biscotti": "Biscotti / Pasticcini",
"dolce_frutta": "Dolce alla Frutta",
"succo_dolce": "Dolce / Fruttato",
"succo_energizzante": "Energizzante",
"succo_detox": "Detox / Verde",
"succo_rinfrescante": "Rinfrescante",
"succo_vitaminico": "Vitaminico / Agrumi"
},
"meal_plan": {
"reset_success": "Piano settimanale ripristinato",
"suggested_by": "suggerito dal piano settimanale"
},
"kiosk_session": {
"first_item": "Primo prodotto: {name}!",
"items_two_four": "{n} prodotti — stai scaldando i motori 🚀",
"items_five_nine": "{n} prodotti — ottimo ritmo! 💪",
"items_ten_twenty": "{n} prodotti — quasi un recordman 🏆",
"items_twenty_plus": "{n} prodotti — spesa epica! 🛒🔥",
"duplicates_one": "1 bis (stessa cosa due volte)",
"duplicates_many": "{n} bis (roba presa più volte)",
"top_category": "Categoria top: {cat} ({count}×)",
"items_fallback": "{n} prodott{n} aggiunti"
}
}