{ "app": { "name": "EverShelf", "loading": "Laden..." }, "nav": { "title": "EverShelf", "home": "Home", "inventory": "Vorrat", "recipes": "Rezepte", "shopping": "Einkauf", "log": "Verlauf" }, "btn": { "back": "← Zurück", "save": "💾 Speichern", "cancel": "✕ Abbrechen", "close": "Schließen", "add": "✅ Hinzufügen", "delete": "Löschen", "edit": "✏️ Bearbeiten", "search": "🔍 Suchen", "go": "✅ Los", "toggle_password": "👁️ Anzeigen/Ausblenden", "load_more": "Mehr laden...", "save_config": "💾 Konfiguration speichern", "save_product": "💾 Produkt speichern", "restart": "↺ Neustart", "reset_default": "↺ Standard wiederherstellen", "save_info": "💾 Info speichern", "retry": "🔄 Erneut versuchen" }, "locations": { "dispensa": "Vorratskammer", "frigo": "Kühlschrank", "freezer": "Gefrierschrank", "altro": "Sonstiges" }, "categories": { "latticini": "Milchprodukte", "carne": "Fleisch", "pesce": "Fisch", "frutta": "Obst", "verdura": "Gemüse", "pasta": "Pasta & Reis", "pane": "Brot & Backwaren", "surgelati": "Tiefkühl", "bevande": "Getränke", "condimenti": "Gewürze", "snack": "Snacks & Süßes", "conserve": "Konserven", "cereali": "Getreide & Hülsenfrüchte", "igiene": "Hygiene", "pulizia": "Reinigung", "altro": "Sonstiges", "select": "-- Auswählen --" }, "units": { "pz": "Stk", "conf": "Pkg", "g": "g", "ml": "ml", "pieces": "Stück", "grams": "Gramm", "box": "Packung", "boxes": "Packungen" }, "shopping_sections": { "frutta_verdura": "Obst & Gemüse", "carne_pesce": "Fleisch & Fisch", "latticini": "Milchprodukte & Frisches", "pane_dolci": "Brot & Süßes", "pasta": "Pasta & Getreide", "conserve": "Konserven & Soßen", "surgelati": "Tiefkühl", "bevande": "Getränke", "pulizia_igiene": "Reinigung & Hygiene", "altro": "Sonstiges" }, "dashboard": { "expired_title": "🚫 Abgelaufen", "expiring_title": "⏰ Bald ablaufend", "stats_period": "📊 Letzte 30 Tage", "opened_title": "📦 Geöffnete Produkte", "review_title": "🔍 Zu prüfen", "review_hint": "Mengen, die ungewöhnlich erscheinen. Bestätigen oder ändern.", "quick_recipe": "🍳 Schnelles Rezept mit ablaufenden Produkten", "banner_review_title": "Ungewöhnliche Menge", "banner_review_action_ok": "Ist korrekt", "banner_review_action_finish": "🗑️ Alles aufgebraucht", "banner_review_action_edit": "Korrigieren", "banner_review_action_weigh": "Wiegen", "banner_review_dismiss": "Ignorieren", "banner_prediction_title": "Ungewöhnlicher Verbrauch", "banner_prediction_hint": "Laut Vorhersage stimmt diese Menge nicht mit dem erwarteten Verbrauch überein.", "banner_prediction_action_confirm": "{qty} {unit} bestätigen", "banner_prediction_action_weigh": "Jetzt wiegen", "banner_prediction_action_edit": "Menge aktualisieren", "banner_expired_title": "Abgelaufenes Produkt", "banner_expired_today": "Heute abgelaufen", "banner_expired_days": "Seit {days} Tagen abgelaufen", "banner_expired_action_use": "Trotzdem verwenden", "banner_expired_action_throw": "Habe ich weggeworfen", "banner_expired_action_edit": "Datum korrigieren", "banner_anomaly_action_edit": "Bestand korrigieren", "banner_anomaly_action_dismiss": "Menge ist korrekt", "banner_expiring_title": "Bald ablaufend", "banner_expiring_today": "Läuft heute ab!", "banner_expiring_tomorrow": "Läuft morgen ab", "banner_expiring_days": "Läuft in {days} Tagen ab", "banner_expiring_action_use": "Jetzt verwenden", "banner_finished_title": "aufgebraucht?", "banner_finished_detail": "Ich habe vermerkt, dass {name} auf null gesunken ist. Ist es wirklich leer, oder hast du noch welches?", "banner_finished_action_yes": "Ja, aufgebraucht", "banner_finished_action_no": "Nein, ich habe noch welches", "banner_review_unusual_pkg_title": "Ungewöhnliche Packungsgröße", "banner_review_unusual_pkg_detail": "Du hast eine Packung von {qty} {unit} eingestellt — die Größe scheint sehr groß. Überprüfe ob es korrekt ist.", "banner_review_low_qty_title": "Sehr geringe Menge", "banner_review_low_qty_detail": "Du hast nur {qty} im Bestand — das scheint sehr wenig, möglicherweise ein Eingabefehler. Bestätige wenn korrekt.", "banner_review_high_qty_title": "Ungewöhnlich hohe Menge", "banner_review_high_qty_detail": "Du hast {qty} im Bestand — die Zahl scheint sehr hoch. Bestätige wenn korrekt oder korrigiere.", "banner_prediction_rate_day": "Durchschnitt ~{n} {unit}/Tag", "banner_prediction_rate_week": "Durchschnitt ~{n} {unit}/Woche", "banner_prediction_days_ago": "Vor {n} Tagen aufgefüllt", "banner_prediction_more": "Ich erwartete {expected} {unit}{time}, du hast aber {actual} {unit}. Hast du Bestand ohne Buchung hinzugefügt?", "banner_prediction_less": "Ich erwartete {expected} {unit}{time}, du hast aber nur {actual} {unit}. Hast du mehr als üblich verbraucht?", "banner_finished_zero": "Bestand zeigt null, aber gespeicherte Buchungen deuten an, dass es nicht leer sein sollte.", "banner_finished_expected": "Laut Aufzeichnungen solltest du noch {qty} {unit} haben.", "banner_finished_check": "Kannst du nachschauen?", "banner_anomaly_phantom_title": "mehr Bestand als erwartet", "banner_anomaly_phantom_detail": "Bestand zeigt {inv_qty} {unit}, aber laut Buchungen solltest du nur {expected_qty} {unit} haben. Hast du Bestand ohne Buchung hinzugefügt?", "banner_anomaly_untracked_title": "Anfangsbestand nicht als Eingang gebucht", "banner_anomaly_untracked_detail": "Du hast {inv_qty} {unit} im Bestand, aber die gebuchten Abgänge übersteigen die Eingänge — der Anfangsbestand wurde wahrscheinlich nie als \"Eingang\" erfasst. Bitte korrigiere die Menge oder trage die fehlenden Eingänge nach." , "banner_anomaly_ghost_title": "weniger Bestand als erwartet", "banner_anomaly_ghost_detail": "Laut Buchungen solltest du {expected_qty} {unit} von {name} haben, aber der Bestand zeigt nur {inv_qty} {unit}. Hast du etwas ohne Buchung entnommen?", "consumed": "Verbraucht: {n} ({pct}%)", "wasted": "Weggeworfen: {n} ({pct}%)", "more_opened": "und {n} weitere geöffnet...", "banner_expired_detail": "{when} · du hast noch {qty}." }, "inventory": { "title": "Vorrat", "filter_all": "Alle", "search_placeholder": "🔍 Produkt suchen...", "recent_title": "🕐 Zuletzt verwendet", "popular_title": "⭐ Meistverwendet", "empty": "Keine Produkte hier.\nScanne ein Produkt, um es hinzuzufügen!", "no_items_found": "Keine Bestandseinträge gefunden", "qty_remainder_suffix": "übrig", "vacuum_badge": "🫙 Vakuumiert", "opened_badge": "📭 Geöffnet", "label_expiry": "📅 Ablaufdatum", "label_storage": "🫙 Aufbewahrung", "label_status": "📭 Status", "opened_since": "Geöffnet seit {date}", "label_position": "📍 Standort", "label_quantity": "📦 Menge", "label_added": "📅 Hinzugefügt", "empty_text": "Keine Produkte hier.
Scanne ein Produkt, um es hinzuzufügen!", "empty_db": "Keine Produkte in der Datenbank.
Scanne ein Produkt, um loszulegen!" }, "scan": { "title": "Produkt scannen", "mode_shopping": "🛒 Einkaufsmodus", "mode_shopping_end": "✅ Einkauf beenden", "zoom": "Zoom", "barcode_placeholder": "Barcode eingeben...", "quick_name_divider": "oder Name eingeben", "quick_name_placeholder": "z.B.: Äpfel, Zucchini, Brot...", "manual_entry": "✏️ Manuelle Eingabe", "ai_identify": "🤖 Mit KI identifizieren", "hint": "Barcode scannen, Produktname eingeben oder KI zur Identifikation nutzen", "debug_toggle": "🐛 Debug Log", "barcode_acquired": "🔖 Barcode gescannt: {code}", "scan_barcode": "🔖 Barcode scannen", "create_named": "{name} erstellen", "new_without_barcode": "Neues Produkt ohne Barcode" }, "action": { "title": "Was möchtest du tun?", "add_btn": "📥 HINZUFÜGEN", "add_sub": "in Vorrat/Kühlschrank", "use_btn": "📤 VERWENDEN / VERBRAUCHEN", "use_sub": "aus Vorrat/Kühlschrank", "have_title": "📦 Schon auf Lager!", "add_more_sub": "weitere Menge", "use_qty_sub": "wie viel verwendet", "throw_btn": "🗑️ ENTSORGEN", "throw_sub": "wegwerfen", "edit_sub": "Ablauf, Ort…" }, "add": { "title": "Zum Vorrat hinzufügen", "location_label": "📍 Wohin?", "quantity_label": "📦 Menge", "conf_size_label": "📦 Jede Packung enthält:", "conf_size_placeholder": "z.B. 300", "vacuum_label": "🫙 Vakuumiert", "vacuum_hint": "Ablaufdatum wird automatisch verlängert", "submit": "✅ Hinzufügen", "purchase_type_label": "🛒 Dieses Produkt ist...", "new_btn": "🆕 Gerade gekauft", "existing_btn": "📦 Hatte ich schon", "remaining_label": "📦 Verbleibende Menge", "remaining_hint": "Ungefähr wie viel ist noch übrig?", "remaining_full": "🟢 Voll", "remaining_half": "🟠 Halb", "estimated_expiry": "Geschätzte Haltbarkeit:", "suffix_freezer": "(Tiefkühler)", "suffix_vacuum": "(vakuumversiegelt)", "hint_modify": "📝 Du kannst das Datum ändern oder mit der Kamera scannen", "scan_expiry_title": "📷 Ablaufdatum scannen", "product_added": "✅ {name} hinzugefügt!{qty}", "suffix_freezer_vacuum": "(Tiefkühler + vakuumversiegelt)" }, "use": { "title": "Verwenden / Verbrauchen", "location_label": "📍 Woher?", "quantity_label": "Wie viel hast du benutzt?", "change": "ändern", "partial_hint": "Oder genaue Menge angeben:", "partial_piece_hint": "Hast du nur einen Teil verwendet?", "piece": "Stück", "one_whole": "1 ganzes", "use_all": "🗑️ ALLES verwendet / Aufgebraucht", "submit": "📤 Diese Menge verwenden", "available": "📦 Verfügbar:", "opened_badge": "GEOEFFNET", "not_in_inventory": "⚠️ Produkt nicht im Bestand.", "expiry_warning": "⚠️ Verwende zuerst die{loc}, die am {date} abläuft — {when}!", "throw_title": "🗑️ Produkt entsorgen", "throw_all": "🗑️ ALLES entsorgen ({qty})", "throw_qty_label": "Wie viel wegwerfen?", "throw_qty_hint": "oder Menge angeben:", "throw_partial_btn": "🗑️ Diese Menge entsorgen", "when_expired": "seit {n} Tagen abgelaufen", "when_today": "läuft heute ab", "when_tomorrow": "läuft morgen ab", "when_days": "läuft in {n} Tagen ab", "toast_used": "📤 {qty} von {name} verwendet", "toast_bring": "🛒 Produkt aufgebraucht → zu Bring! hinzugefügt", "toast_opened_finished": "🔓 Geöffnete Packung von {name} aufgebraucht!", "disambiguation_hint": "Was meinst du mit \"alles aufgebraucht\"?", "disambiguation_all": "🗑️ ALLES verbraucht ({qty})", "error_exceeds_stock": "⚠️ Du kannst nicht mehr verwenden als du verfügbar hast!" }, "product": { "title_new": "Neues Produkt", "title_edit": "Produkt bearbeiten", "ai_fill": "📷 Foto machen und mit KI identifizieren", "ai_fill_hint": "KI füllt die Produktfelder automatisch aus", "name_label": "🏷️ Produktname *", "name_placeholder": "z.B.: Vollmilch, Penne Nudeln...", "brand_label": "🏢 Marke", "brand_placeholder": "z.B.: Barilla, Müller, Knorr...", "category_label": "📂 Kategorie", "unit_label": "📏 Maßeinheit", "default_qty_label": "🔢 Standardmenge", "conf_size_label": "📦 Jede Packung enthält:", "conf_size_placeholder": "z.B. 300", "notes_label": "📝 Notizen", "notes_placeholder": "z.B.: laktosefrei, bio, nach dem Öffnen im Kühlschrank aufbewahren...", "barcode_label": "🔖 Barcode", "barcode_placeholder": "Barcode (falls vorhanden)", "barcode_hint": "⚠️ Barcode hinzufügen, damit du beim nächsten Einkauf nur scannen musst!", "submit": "💾 Produkt speichern", "name_required": "Produktname eingeben", "conf_size_required": "Packungsinhalt angeben", "expiry_estimated": "Geschätztes Ablaufdatum:", "scan_expiry": "Ablaufdatum scannen", "expiry_hint": "📝 Du kannst das Datum ändern oder mit der Kamera scannen", "add_batch": "📦 + Charge mit anderem Ablaufdatum", "package_info": "📦 Packung: {info}", "edit_catalog": "⚙️ Produktinfo bearbeiten (Name, Marke, Kategorie…)", "not_recognized": "⚠️ Produkt nicht erkannt", "edit_info": "✏️ Informationen bearbeiten", "modify_details": "BEARBEITEN\nAblauf, Ort…", "already_in_pantry": "📋 Bereits im Vorratsschrank", "no_barcode": "Kein Barcode" }, "products": { "title": "📦 Alle Produkte", "search_placeholder": "🔍 Produkt suchen...", "empty": "Keine Produkte in der Datenbank.\nScanne ein Produkt zum Starten!", "no_category": "Keine Produkte in dieser Kategorie" }, "recipes": { "title": "🍳 Rezepte", "generate": "✨ Neues Rezept generieren", "archive_empty": "Keine Rezepte gespeichert. Erstelle dein erstes Rezept!", "dialog_title": "🍳 Rezept", "dialog_desc": "Ich erstelle ein gesundes Rezept mit Zutaten aus dem Vorrat und priorisiere Produkte mit nahendem Ablaufdatum.", "meal_label": "🕐 Für welche Mahlzeit?", "persons_label": "👥 Für wie viele Personen?", "meal_type_label": "🎯 Art der Mahlzeit", "opt_fast": "⚡ Schnelle Mahlzeit", "opt_light": "🥗 Kleiner Hunger", "opt_expiry": "⏰ Ablaufdaten priorisieren", "opt_healthy": "💚 Extra gesund", "opt_opened": "📦 Geöffnete Produkte priorisieren", "opt_zero_waste": "♻️ Zero Waste", "generate_btn": "✨ Rezept generieren", "loading_msg": "Rezept wird vorbereitet...", "start_cooking": "👨‍🍳 Kochmodus", "regenerate": "🔄 Noch eins generieren", "close_btn": "✅ Schließen", "ingredients_title": "🧾 Zutaten", "steps_title": "👨‍🍳 Zubereitung", "no_steps": "Keine Zubereitungsschritte verfügbar", "generate_error": "Fehler bei der Generierung", "persons_short": "Pers.", "use_ingredient_title": "Zutat verwenden", "recipe_qty_label": "Rezept", "from_where_label": "Von wo?", "amount_label": "Wie viel", "use_amount_btn": "Diese Menge verwenden", "use_all_btn": "ALLES verwenden / Aufgebraucht", "packs_label": "Packungen", "quantity_in_total": "Menge in {unit} (gesamt: {total})", "packs_of_have": "Packungen à {size} (du hast {count} Pack.)", "scale_wait_stable": "10s stabiles Gewicht für Auto-Ausfüllen abwarten…", "ingredient_scaled_toast": "📦 Zutat vom Vorrat abgezogen!", "finished_added_bring_toast": "🛒 Produkt aufgebraucht → zu Bring! hinzugefügt!", "load_error": "Fehler beim Laden" }, "shopping": { "title": "🛒 Einkaufsliste", "bring_loading": "Verbindung zu Bring!...", "bring_not_configured": "Bring! ist nicht konfiguriert. Füge E-Mail und Passwort in den Einstellungen hinzu.", "tab_to_buy": "🛍️ Zu kaufen", "tab_forecast": "🧠 Vorhersage", "total_label": "💰 Geschätzter Gesamtbetrag", "section_to_buy": "🛍️ Zu kaufen", "suggestions_title": "💡 KI-Vorschläge", "suggestions_add": "✅ Ausgewählte zu Bring! hinzufügen", "search_prices": "🔍 Alle Preise suchen", "suggest_btn": "🤖 Einkaufsvorschläge", "smart_title": "🧠 Intelligente Vorhersagen", "smart_empty": "Keine Vorhersagen verfügbar.
Füge Produkte zur Vorratskammer hinzu, um intelligente Vorhersagen zu erhalten.", "smart_filter_all": "Alle", "smart_filter_critical": "🔴 Dringend", "smart_filter_high": "🟠 Bald", "smart_filter_medium": "🟡 Planen", "smart_filter_low": "🟢 Vorhersage", "smart_add": "🛒 Ausgewählte zu Bring! hinzufügen", "empty": "Einkaufsliste leer!\nNutze den Button unten, um Vorschläge zu generieren.", "already_in_list": "🛒 \"{name}\" ist bereits in der Einkaufsliste", "already_in_list_short": "ℹ️ Bereits in der Einkaufsliste", "add_prompt": "Möchtest du es zur Einkaufsliste hinzufügen?", "smart_already": "📊 Intelligenter Einkauf sagt bereits {name} voraus", "all_searched": "Alle Produkte wurden bereits gesucht. Nutze 🔄 für einzelne Suchen.", "search_complete": "Suche abgeschlossen: {count} Produkte", "removed_sufficient": "🧹 {removed} Produkt(e) mit ausreichendem Bestand von der Liste entfernt", "bring_badge": "🛒 Schon auf Bring!", "add_urgent_toast": "🔴 {n} dringende(s) Produkt(e) automatisch zu Bring! hinzugefügt", "migration_done": "✅ {migrated} aktualisiert, {skipped} bereits ok", "added_to_bring": "🛒 {n} Produkte zu Bring! hinzugefügt", "added_to_bring_skip": "{n} bereits vorhanden", "all_on_bring": "Alle Produkte waren bereits auf Bring!", "freq_high": "📈 Häufig", "freq_regular": "📊 Regelmäßig", "freq_occasional": "📉 Gelegentlich", "out_of_stock": "Ausverkauft", "scan_toast": "📷 Scannen: {name}", "empty_category": "Keine Produkte in dieser Kategorie", "session_empty": "🛒 Noch keine Produkte", "urgency_critical": "Dringend", "urgency_high": "Bald", "urgency_medium": "Planen", "urgency_low": "Vorschau", "urgency_medium_short": "Mittel", "urgency_low_short": "Ok", "tag_urgent": "🔴 Dringend", "tag_priority": "⭐ Priorität", "tag_check": "✅ Prüfen", "smart_already_predicted": "📊 Einkauf wird bereits vorhergesagt: {name}{urgency}.", "item_removed": "✅ {name} von der Liste entfernt!", "urgency_spec_critical": "⚡ Dringend", "urgency_spec_high": "🟠 Bald", "bring_add_n": "{n} zu Bring! hinzufügen", "bring_add_selected": "Ausgewählte zu Bring! hinzufügen", "bring_adding": "Wird hinzugefügt...", "bring_added_one": "1 Produkt zu Bring! hinzugefügt", "bring_added_many": "{n} Produkte zu Bring! hinzugefügt", "bring_skipped": "({n} bereits in Liste)", "force_sync": "Bring!-Synchronisierung erzwingen", "scan_target_label": "Du suchst", "scan_target_found": "Gefunden! Aus Liste entfernen", "bring_add_one": "1 Produkt zu Bring! hinzufügen", "bring_add_many": "{n} Produkte zu Bring! hinzufügen", "syncing": "Synchronisiere…", "sync_done": "Synchronisierung abgeschlossen", "price_searching": "Suche...", "search_action": "Suchen", "open_action": "Öffnen", "not_found": "Nicht gefunden", "search_price": "Preis suchen", "tap_to_scan": "Zum Scannen tippen", "tag_title": "Tag", "remove_title": "Entfernen", "found_count": "{found}/{total} Produkte gefunden", "savings_offers": "· 🏷️ Du sparst €{amount} mit Angeboten", "searching_progress": "Suche {current}/{total}...", "remove_error": "Fehler beim Entfernen", "suggest_loading": "Analyse läuft...", "suggest_error": "Fehler bei der Vorschlagserstellung", "priority_high": "Hoch", "priority_medium": "Mittel", "priority_low": "Niedrig" }, "ai": { "title": "🤖 KI-Identifikation", "capture": "📸 Foto aufnehmen", "retake": "🔄 Neu aufnehmen", "hint": "Mache ein Foto des Produkts und die KI versucht es zu identifizieren", "identifying": "🤖 Identifiziere Produkt...", "no_api_key": "⚠️ Gemini API-Schlüssel nicht konfiguriert.\nFüge GEMINI_API_KEY in der .env Datei auf dem Server hinzu.", "fields_filled": "✅ Felder von KI ausgefüllt", "use_data": "✅ KI-Daten verwenden", "use_data_no_barcode": "✅ KI-Daten verwenden (ohne Barcode)" }, "log": { "title": "� Verlauf", "type_added": "Hinzugefügt", "type_waste": "Entsorgt", "type_used": "Verwendet", "type_bring": "Zu Bring! hinzugefügt", "undone_badge": "Rückgängig", "undo_title": "Diese Operation rückgängig machen", "load_error": "Fehler beim Laden des Verlaufs", "empty": "Keine Operationen aufgezeichnet.", "undo_action_remove": "Entfernen von", "undo_action_restore": "Wiederherstellen von", "undo_confirm": "Vorgang rückgängig machen?\n→ {action} {name}", "undo_success": "↩ Vorgang rückgängig gemacht für {name}", "already_undone": "Vorgang bereits rückgängig gemacht", "too_old": "Vorgänge älter als 24 Stunden können nicht rückgängig gemacht werden", "undo_error": "Fehler beim Rückgängigmachen" }, "chat": { "title": "Gemini Chef", "welcome": "Hallo! Ich bin dein Küchenassistent", "welcome_desc": "Frag mich, dir einen Saft, einen Snack, ein schnelles Gericht zu machen... Ich kenne deinen Vorrat, deine Geräte und deine Vorlieben!", "suggestion_snack": "🍿 Schneller Snack", "suggestion_juice": "🥤 Saft/Smoothie", "suggestion_light": "🥗 Etwas Leichtes", "suggestion_expiry": "⏰ Ablaufende nutzen", "clear": "Neues Gespräch", "placeholder": "Frag etwas...", "cleared": "Chat geleert", "suggestion_snack_text": "Was kann ich als schnellen Snack machen?", "suggestion_juice_text": "Mach mir einen Saft oder Smoothie mit dem was ich habe", "suggestion_light_text": "Ich habe Hunger, möchte aber etwas Leichtes", "suggestion_expiry_text": "Was läuft bald ab und wie kann ich es verwenden?" }, "cooking": { "close": "Schließen", "tts_btn": "Vorlesen", "restart": "↺ Neustart", "replay": "🔊 Nochmal", "timer": "⏱️ {time} · Timer", "prev": "◀ Zurück", "next": "Weiter ▶", "ingredient_used": "✔️ Abgezogen", "ingredient_use_btn": "📦 Verwenden", "ingredient_deduct_title": "Von Vorrat abziehen", "timer_expired_tts": "Timer {label} abgelaufen!", "timer_warning_tts": "Achtung! {label}: noch 10 Sekunden!", "recipe_done_tts": "Rezept abgeschlossen! Guten Appetit!", "expires_chip": "läuft ab {date}", "finish": "✅ Fertig" }, "settings": { "title": "⚙️ Einstellungen", "tab_api": "API Keys", "tab_bring": "Bring!", "tab_recipe": "Rezepte", "tab_mealplan": "Wochenplan", "tab_appliances": "Geräte", "tab_spesa": "Online-Einkauf", "tab_camera": "Kamera", "tab_security": "Sicherheit", "tab_tts": "Sprache (TTS)", "tab_language": "Sprache", "tab_scale": "Smart-Waage", "gemini": { "title": "🤖 Google Gemini AI", "hint": "API-Schlüssel für Produkterkennung, Ablaufdaten und Rezepte.", "key_label": "Gemini API Key" }, "bring": { "title": "🛒 Bring! Einkaufsliste", "hint": "Zugangsdaten für die Bring! Einkaufslisten-Integration.", "email_label": "📧 Bring! E-Mail", "password_label": "🔒 Bring! Passwort" }, "recipe": { "title": "🍳 Rezept-Einstellungen", "hint": "Konfiguriere die Standardoptionen für die Rezeptgenerierung.", "persons_label": "👥 Standard-Portionen", "options_label": "🎯 Standard-Rezeptoptionen", "fast": "⚡ Schnelles Gericht", "light": "🥗 Leichte Mahlzeit", "expiry": "⏰ Ablauf-Priorität", "healthy": "💚 Extra Gesund", "opened": "📦 Offene Produkte zuerst", "zerowaste": "♻️ Keine Verschwendung", "dietary_label": "🚫 Unverträglichkeiten / Einschränkungen", "dietary_placeholder": "z.B.: glutenfrei, laktosefrei, vegetarisch..." }, "mealplan": { "title": "📅 Wöchentlicher Essensplan", "hint": "Lege die Mahlzeitenart für jeden Tag fest. Wird als Leitfaden bei der Rezeptgenerierung verwendet.", "enabled": "✅ Wöchentlichen Essensplan aktivieren", "legend": "🌤️ = Mittagessen · 🌙 = Abendessen · Tippe auf ein Badge, um es zu ändern.", "types_title": "📋 Verfügbare Typen" }, "appliances": { "title": "🔌 Verfügbare Geräte", "hint": "Gib an, welche Geräte du hast. Sie werden bei der Rezeptgenerierung berücksichtigt.", "new_placeholder": "z.B.: Brotbackmaschine, Thermomix, Heißluftfritteuse...", "quick_title": "Schnell hinzufügen:", "oven": "🔥 Backofen", "microwave": "📡 Mikrowelle", "air_fryer": "🍟 Heißluftfritteuse", "bread_maker": "🍞 Brotbackmaschine", "bimby": "🤖 Thermomix/Cookeo", "mixer": "🌀 Küchenmaschine", "steamer": "♨️ Dampfgarer", "pressure_cooker": "🫕 Schnellkochtopf", "toaster": "🍞 Toaster", "blender": "🍹 Mixer", "empty": "Keine Geräte hinzugefügt" }, "spesa": { "title": "🛍️ Online-Einkauf", "hint": "Online-Einkaufsanbieter konfigurieren.", "provider_label": "🏪 Anbieter", "email_label": "📧 E-Mail", "password_label": "🔒 Passwort", "login_btn": "🔐 Anmelden", "ai_prompt_label": "🤖 KI-Produktauswahl Prompt", "ai_prompt_placeholder": "Anweisungen für die KI bei der Auswahl zwischen mehreren Produkten...", "ai_prompt_hint": "Die KI verwendet diesen Prompt zur Auswahl des passendsten Produkts. Leer lassen für Standardverhalten.", "configure_first": "Konfiguriere zuerst den Online-Einkauf in den Einstellungen", "missing_credentials": "E-Mail und Passwort eingeben", "login_in_progress": "Anmeldung läuft...", "login_error_prefix": "Fehler:", "login_network_error_prefix": "Netzwerkfehler:", "login_success_default": "Anmeldung erfolgreich!", "result_name_label": "Name", "result_card_label": "Karte", "result_pickup_label": "Abholpunkt", "result_points_label": "Treuepunkte", "connected_relogin": "✅ Verbunden — Erneut anmelden", "connected_as": "Verbunden als {name}" }, "camera": { "title": "📷 Kamera", "hint": "Wähle die Kamera für Barcode-Scanning und KI-Identifikation.", "device_label": "📸 Standardkamera", "back": "📱 Rückkamera (Standard)", "front": "🤳 Frontkamera", "devices_hint": "Bei mehreren Kameras kannst du nach Freigabe der Berechtigungen eine bestimmte aus der Liste oben wählen.", "detect_btn": "🔄 Kameras erkennen" }, "security": { "title": "🔒 HTTPS-Zertifikat", "hint": "Wenn der Browser den Fehler \"Verbindung nicht sicher\" (ERR_CERT_AUTHORITY_INVALID) zeigt, installiere das CA-Zertifikat auf dem Gerät.", "download_btn": "📥 CA-Zertifikat herunterladen" }, "tts": { "title": "🔊 Sprache & TTS", "hint": "Sprachsynthese über externe REST-API konfigurieren. Rezeptschritte und abgelaufene Timer werden an den Endpunkt gesendet.", "enabled": "✅ TTS aktivieren", "url_label": "🌐 Endpunkt-URL", "method_label": "📡 HTTP-Methode", "auth_label": "🔐 Authentifizierung", "auth_bearer": "Bearer Token", "auth_custom": "Benutzerdefinierter Header", "auth_none": "Keine", "token_label": "🔑 Bearer Token", "custom_header_name": "📋 Header-Name", "custom_header_value": "📋 Header-Wert", "content_type_label": "📄 Content-Type", "payload_key_label": "🗝️ Textfeld im Payload", "payload_key_hint": "Name des JSON-Feldes für den zu lesenden Text (z.B.: message, text).", "extra_fields_label": "➕ Zusätzliche Felder (JSON)", "extra_fields_placeholder": "{\"entity_id\": \"media_player.living_room\"}", "extra_fields_hint": "Zusätzliche Felder im Payload, im JSON-Format. Leer lassen wenn nicht benötigt.", "test_btn": "🔊 Testansage senden" }, "language": { "title": "🌐 Sprache", "hint": "Wähle die Sprache der Benutzeroberfläche.", "label": "🌐 Sprache", "restart_notice": "Die Seite wird neu geladen, um die neue Sprache anzuwenden." }, "screensaver": { "label": "Bildschirmschoner aktivieren", "card_title": "🌙 Bildschirmschoner", "card_hint": "Zeigt nach 5 Minuten Inaktivität eine Uhr mit nützlichen Fakten. Standardmäßig deaktiviert." }, "scale": { "title": "⚖️ Smart-Waage", "hint": "Verbinde eine Bluetooth-Waage über das Android-Gateway, um das Gewicht automatisch auszulesen.", "tab": "Smart-Waage", "enabled": "✅ Smart-Waage aktivieren", "url_label": "🌐 WebSocket-Gateway-URL", "url_placeholder": "ws://192.168.1.x:8765", "url_hint": "URL der Android-App (gleiches WLAN). z.B.:", "test_btn": "🔗 Verbindung testen", "download_btn": "📥 Android-Gateway herunterladen (APK)", "download_hint": "Android-App als Brücke zwischen BLE-Waage und EverShelf.", "download_sub": "Quellcode: evershelf-scale-gateway/ im Projektstamm" }, "kiosk": { "hint": "Verwandeln Sie ein Android-Tablet in ein EverShelf-Panel mit integriertem BLE-Waagen-Gateway.", "download_btn": "📥 EverShelf Kiosk herunterladen (APK)", "download_sub": "Vollbild-Kioskmodus + integriertes Waagen-Gateway. Quellcode: evershelf-kiosk/" }, "saved": "✅ Konfiguration gespeichert!", "saved_local": "✅ Konfiguration lokal gespeichert", "saved_local_error": "⚠️ Lokal gespeichert, Serverfehler: {error}" }, "expiry": { "today": "HEUTE", "tomorrow": "Morgen", "days": "{days} Tage", "expired_days": "Seit {days}T", "expired_yesterday": "Seit gestern", "expired_today": "Heute", "badge_today": "⚠️ Läuft heute ab!", "badge_tomorrow": "⏰ Morgen", "badge_tomorrow_long": "⏰ Läuft morgen ab", "badge_days": "⏰ {n} Tage", "badge_expired_ago": "⚠️ Seit {n}T abgel.", "badge_expired": "⛔ Abgelaufen!", "badge_stable": "✅ Stabil", "badge_expiring_short": "⏰ Läuft in {n}T ab", "badge_ok_still": "✅ Noch {n}T", "badge_expires_red": "🔴 In {n}T", "badge_expires_yellow": "🟡 In {n}T", "badge_expired_bare": "⚠️ Abgelaufen", "badge_expires_warn": "⚠️ In {n}T", "badge_days_left": "⏳ ~{n}T übrig", "days_approx": "~{n} Tage", "weeks_approx": "~{n} Wochen", "months_approx": "~{n} Monate", "years_approx": "~{n} Jahre", "expired_today_long": "Heute abgelaufen", "expired_ago_long": "Seit {n} Tagen abgelaufen", "expired_suffix": "— Abgelaufen!", "expired_suffix_ok": "— Abgelaufen (noch ok)", "expired_suffix_warning": "— Abgelaufen (erst prüfen)", "days_compact": "{n}T" }, "status": { "ok": "OK", "check": "Prüfen", "discard": "Entsorgen", "tip_freezer_ok": "Im Gefrierschrank: noch sicher (~{n}T Puffer)", "tip_freezer_check": "Seit langem im Gefrierschrank, könnte an Qualität verloren haben. Bald verbrauchen", "tip_freezer_danger": "Zu lange im Gefrierschrank, Gefrierbrand- und Qualitätsverlust-Risiko", "tip_highRisk_check": "Kürzlich abgelaufen, Geruch und Aussehen vor dem Verzehr prüfen", "tip_highRisk_danger": "Verderbliches Produkt abgelaufen: aus Sicherheitsgründen entsorgen", "tip_medRisk_check1": "Aussehen und Geruch vor dem Verzehr prüfen", "tip_medRisk_check2": "Schon eine Weile abgelaufen, vor dem Verzehr gut prüfen", "tip_medRisk_danger": "Zu lange seit dem Ablaufdatum, lieber entsorgen", "tip_lowRisk_ok": "Haltbares Produkt, noch sicher zu verzehren", "tip_lowRisk_check": "Seit über einem Monat abgelaufen, Verpackungsintegrität prüfen", "tip_lowRisk_danger": "Zu lange abgelaufen, besser kein Risiko eingehen" }, "toast": { "product_saved": "Produkt gespeichert!", "product_created": "Produkt erstellt!", "product_updated": "✅ Produkt aktualisiert!", "product_removed": "Produkt entfernt", "updated": "Aktualisiert!", "quantity_confirmed": "✓ Menge bestätigt", "added_to_inventory": "✅ {name} hinzugefügt!", "removed_from_list": "✅ {name} von der Liste entfernt!", "removed_from_list_short": "Von der Liste entfernt", "added_to_shopping": "🛒 Zur Einkaufsliste hinzugefügt!", "removed_from_shopping": "🛒 Von der Einkaufsliste entfernt", "finished_to_bring": "🛒 Produkt aufgebraucht → zu Bring! hinzugefügt", "thrown_away": "🗑️ {name} weggeworfen!", "thrown_away_partial": "🗑️ {qty} {unit} von {name} weggeworfen", "product_finished_confirmed": "✅ Entfernt — wieder hinzufügen, wenn du nachkaufst", "appliance_added": "Gerät hinzugefügt", "item_added": "{name} hinzugefügt" }, "antiwaste": { "title": "🌱 Anti-Verschwendungs-Bericht", "grade_label": "Note", "you": "Du", "avg_label": "Ø", "better": "🎉 Du verlierst {diff}% weniger als der {country}!", "worse": "⚠️ Du verlierst mehr als der {country}. Verbesserungspotenzial!", "on_par": "→ Du liegst beim {country}. Du kannst noch besser werden!", "saved_money": "~{amount}/Monat gespart", "saved_meals": "~{n} Mahlzeiten gerettet", "saved_co2": "{n} kg CO₂ eingespart", "trend_title": "Trend (letzte 3 Monate)", "months_ago_2": "-60 Tage", "months_ago_1": "-30 Tage", "this_month": "Jetzt", "country_it": "ital. Durchschnitt", "country_de": "dt. Durchschnitt", "country_en": "US-Durchschnitt", "source": "Quellen: REDUCE, Eurostat, USDA 2021", "live_on": "Live-Daten", "live_off": "Offline", "meals": "Mahlzeiten", "annual_info": "📅 Du ~{you} kg/Jahr · Ø ~{avg} kg/Jahr", "badge_rate": "Verlustquote", "badge_saved_money": "gespart vs Ø", "badge_wasted": "verloren", "badge_better": "weniger als Ø" }, "error": { "generic": "Fehler", "network": "Netzwerkfehler", "no_api_key": "API-Schluessel in den Einstellungen konfigurieren", "loading": "Fehler beim Laden des Produkts", "not_found": "Produkt nicht gefunden", "not_found_manual": "Produkt nicht gefunden. Manuell eingeben.", "search": "Suchfehler. Nochmal versuchen.", "search_short": "Suchfehler", "save": "Fehler beim Speichern", "connection": "Verbindungsfehler", "camera": "Kamera nicht verfügbar", "bring_add": "Fehler beim Hinzufügen zu Bring!", "bring_connection": "Bring! Verbindungsfehler", "identification": "Identifikationsfehler", "ai_quota": "KI-Kontingent erschöpft. Bitte in ein paar Minuten erneut versuchen.", "barcode_empty": "Barcode eingeben", "barcode_format": "Barcode darf nur Zahlen enthalten (4-14 Ziffern)", "min_chars": "Mindestens 2 Zeichen eingeben", "not_in_inventory": "Produkt nicht im Bestand", "appliance_exists": "Gerät bereits vorhanden", "already_exists": "Bereits vorhanden", "network_retry": "Verbindungsfehler. Erneut versuchen.", "select_items": "Wähle mindestens ein Produkt aus" }, "confirm": { "remove_item": "Möchtest du dieses Produkt wirklich aus dem Bestand entfernen?", "kiosk_exit": "Kioskmodus verlassen?" }, "edit": { "title": "{name} bearbeiten", "unknown_hint": "Produktname und Informationen eingeben", "label_name": "🏷️ Produktname" }, "screensaver": { "recipe_btn": "Rezepte", "scan_btn": "Produkt scannen" }, "days": { "mon": "Montag", "tue": "Dienstag", "wed": "Mittwoch", "thu": "Donnerstag", "fri": "Freitag", "sat": "Samstag", "sun": "Sonntag", "mon_short": "Mo", "tue_short": "Di", "wed_short": "Mi", "thu_short": "Do", "fri_short": "Fr", "sat_short": "Sa", "sun_short": "So" }, "meal_types": { "lunch": "Mittagessen", "dinner": "Abendessen", "colazione": "Frühstück", "merenda": "Nachmittagssnack", "dolce": "Dessert", "succo": "Fruchtsaft", "pranzo": "Mittagessen", "cena": "Abendessen" }, "scale": { "status_connected": "Waage verbunden", "status_searching": "Gateway verbunden, warte auf Waage…", "status_disconnected": "Waagen-Gateway nicht erreichbar", "status_error": "Verbindungsfehler zum Gateway", "not_connected": "Waagen-Gateway nicht verbunden", "read_btn": "⚖️ Von Waage lesen", "reading_title": "Waage lesen", "place_on_scale": "Produkt auf die Waage legen…", "waiting_stable": "Das Gewicht wird automatisch erfasst, wenn die Messung stabil ist.", "no_url": "Gateway-URL eingeben", "testing": "⏳ Verbindung wird getestet…", "connected_ok": "Gateway-Verbindung erfolgreich!", "timeout": "Timeout: keine Antwort vom Gateway", "error_connect": "Verbindung zum Gateway nicht möglich", "tab": "Smart-Waage", "low_weight": "Gewicht < 10 g · manuell eingeben\n(Auto-Erkennung erfordert mind. 10 g)", "density_hint": "(Dichte {density} g/ml)", "ml_hint": "(wird in ml umgerechnet)", "weight_detected": "Gewicht erkannt — 10s Stabilität abwarten…", "weight_too_low": "Gewicht zu niedrig — warten…", "stable": "✓ Stabil", "auto_confirm": "✅ {val} {unit} — Auto-Bestätigung in 5s (tippen zum Abbrechen)", "cancelled_replace": "Abgebrochen — lege die Zutat wieder auf die Waage, um fortzufahren" }, "prediction": { "expected_qty": "Erwartet: {expected} {unit}", "actual_qty": "Aktuell: {actual} {unit}", "check_suggestion": "Überprüfe oder wiege die Restmenge" }, "date": { "today": "📅 Heute", "yesterday": "📅 Gestern" }, "scanner": { "title_barcode": "🔖 Barcode scannen", "barcode_hint": "Produktbarcode einrahmen", "barcode_manual_placeholder": "Oder manuell eingeben...", "barcode_use_btn": "✅ Diesen Code verwenden", "ai_identifying": "🤖 Produkt wird erkannt...", "ai_analyzing": "🤖 KI-Analyse läuft...", "product_label_hint": "Produktetikett einrahmen", "expiry_label_hint": "Ablaufdatum auf dem Produkt einrahmen", "capture_btn": "📸 Aufnehmen", "capture_photo_btn": "📸 Foto aufnehmen", "retake_btn": "🔄 Erneut aufnehmen", "camera_error_hint": "Stelle sicher, dass du HTTPS verwendest und Kameraberechtigungen erteilt hast.
Du kannst den Barcode manuell eingeben oder die KI-Identifikation verwenden.", "no_barcode": "Kein Barcode" }, "lowstock": { "title": "⚠️ Wird knapp!", "message": "{name} wird knapp — nur noch {qty} übrig.", "question": "Möchtest du es zur Einkaufsliste hinzufügen?", "yes": "🛒 Ja, zu Bring! hinzufügen", "no": "Nein, passt für jetzt" }, "move": { "title": "📦 Den Rest bewegen?", "question": "Möchtest du {thing} von {name} an einen anderen Ort bewegen?", "question_short": "Möchtest du {thing} an einen anderen Ort bewegen?", "thing_opened": "die offene Packung", "thing_rest": "den Rest", "stay_btn": "Nein, bleibt in {location}", "moved_toast": "📦 Offene Packung bewegt nach {location}", "vacuum_restore": "🫙 Vakuum wiederherstellen" }, "nova": { "1": "Unverarbeitet", "2": "Kulinarische Zutat", "3": "Verarbeitet", "4": "Hochverarbeitet" }, "meal_plan_types": { "pasta": "Pasta", "riso": "Reis", "carne": "Fleisch", "pesce": "Fisch", "legumi": "Hülsenfrüchte", "uova": "Eier", "formaggio": "Käse", "pizza": "Pizza", "affettati": "Aufschnitt", "verdure": "Gemüse", "zuppa": "Suppe", "insalata": "Salat", "pane": "Brot/Sandwich", "dolce": "Dessert", "libero": "Frei" }, "meal_sub": { "dolce_torta": "Kuchen", "dolce_crema": "Creme / Pudding", "dolce_crumble": "Crumble / Tarte", "dolce_biscotti": "Kekse / Gebäck", "dolce_frutta": "Fruchtdessert", "succo_dolce": "Süß / Fruchtig", "succo_energizzante": "Energetisierend", "succo_detox": "Detox / Grün", "succo_rinfrescante": "Erfrischend", "succo_vitaminico": "Vitamin / Zitrus" }, "meal_plan": { "reset_success": "Wochenplan zurückgesetzt", "suggested_by": "vom Wochenplan vorgeschlagen" }, "kiosk_session": { "first_item": "Erstes Produkt: {name}!", "items_two_four": "{n} Artikel — Trägheit überwinden 🚀", "items_five_nine": "{n} Artikel — super Tempo! 💪", "items_ten_twenty": "{n} Artikel — fast Rekord 🏆", "items_twenty_plus": "{n} Artikel — epischer Einkauf! 🛒🔥", "duplicates_one": "1 Duplikat (gleiches Produkt zweimal)", "duplicates_many": "{n} Duplikate (mehrfach genommen)", "top_category": "Top-Kategorie: {cat} ({count}×)", "items_fallback": "{n} Artikel hinzugefügt" } }