Files
EverShelf/translations/de.json
T
dadaloop82 8722f15aa0 i18n: Translate all hardcoded Italian labels to English & German
- Convert LOCATIONS labels to use t('locations.*')
- Convert SHOPPING_SECTIONS labels to use t('shopping_sections.*')
- Convert CATEGORY_LABELS to use t('categories.*')
- Convert MEAL_PLAN_TYPES to use t('meal_plan_types.*')
- Convert WEEK_DAYS_SHORT to use t('days.*_short')
- Convert MEAL_TYPES to use t('meal_types.*')
- Convert MEAL_SUB_TYPES to use t('meal_sub.*')
- Convert meal-plan column headers to use translated meal_types
- Replace inline locLabels/LOC_LABELS with translated LOCATIONS object
- Fix shopping action buttons: bring_add_n, bring_add_selected, bring_adding, bring_added_*
- Fix recipe archive empty state
- Fix meal plan reset success toast
- Fix meal plan suggestion hint and screensaver display
- Fix settings save status messages (saved, saved_local, saved_local_error)
- Fix product edit form title
- Fix kiosk session phrases for screensaver counter
- Add cooking.expires_chip translation for expiry date format
- Add meal_plan section (reset_success, suggested_by)
- Add error.select_items for Bring shopping validation
- All strings now properly internationalized for EN/DE languages
2026-04-28 16:03:07 +00:00

777 lines
37 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": "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_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_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 <strong>{qty}</strong>."
},
"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.<br>Scanne ein Produkt, um es hinzuzufügen!",
"empty_db": "Keine Produkte in der Datenbank.<br>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"
},
"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?",
"partial_hint": "Oder genaue Menge angeben:",
"use_all": "🗑️ ALLES verwendet / Aufgebraucht",
"submit": "📤 Diese Menge verwenden",
"available": "📦 Verfügbar:",
"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 <strong>heute</strong> ab",
"when_tomorrow": "läuft <strong>morgen</strong> ab",
"when_days": "läuft in <strong>{n} Tagen</strong> ab",
"toast_used": "📤 {qty} von {name} verwendet",
"toast_bring": "🛒 Produkt aufgebraucht → zu Bring! hinzugefügt"
},
"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!"
},
"shopping": {
"title": "🛒 Einkaufsliste",
"bring_loading": "Verbindung zu Bring!...",
"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.<br>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: <strong>{name}</strong>{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)"
},
"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.\n<small>Füge GEMINI_API_KEY in der .env Datei auf dem Server hinzu.</small>",
"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}"
},
"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"
},
"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."
},
"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!",
"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"
},
"error": {
"generic": "Fehler",
"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"
},
"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.<br>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"
}
}