Complete i18n pass for recipes and meal plan labels

This commit is contained in:
dadaloop82
2026-04-28 17:28:54 +00:00
parent 8722f15aa0
commit 8558db1925
7 changed files with 645 additions and 249 deletions
+86 -6
View File
@@ -169,7 +169,9 @@
"hint": "Barcode scannen, Produktname eingeben oder KI zur Identifikation nutzen",
"debug_toggle": "🐛 Debug Log",
"barcode_acquired": "🔖 Barcode gescannt: {code}",
"scan_barcode": "🔖 Barcode scannen"
"scan_barcode": "🔖 Barcode scannen",
"create_named": "{name} erstellen",
"new_without_barcode": "Neues Produkt ohne Barcode"
},
"action": {
"title": "Was möchtest du tun?",
@@ -212,7 +214,11 @@
"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:",
@@ -273,7 +279,41 @@
"recipes": {
"title": "🍳 Rezepte",
"generate": "✨ Neues Rezept generieren",
"archive_empty": "Keine Rezepte gespeichert. Erstelle dein erstes Rezept!"
"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",
@@ -333,7 +373,31 @@
"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)"
"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",
@@ -394,7 +458,8 @@
"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}"
"expires_chip": "läuft ab {date}",
"finish": "✅ Fertig"
},
"settings": {
"title": "⚙️ Einstellungen",
@@ -468,7 +533,18 @@
"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"
"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",
@@ -600,6 +676,8 @@
},
"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.",
@@ -656,7 +734,9 @@
"colazione": "Frühstück",
"merenda": "Nachmittagssnack",
"dolce": "Dessert",
"succo": "Fruchtsaft"
"succo": "Fruchtsaft",
"pranzo": "Mittagessen",
"cena": "Abendessen"
},
"scale": {
"status_connected": "Waage verbunden",
+86 -6
View File
@@ -169,7 +169,9 @@
"hint": "Scan the barcode, type the product name, or use AI to identify it",
"debug_toggle": "🐛 Debug Log",
"barcode_acquired": "🔖 Barcode scanned: {code}",
"scan_barcode": "🔖 Scan Barcode"
"scan_barcode": "🔖 Scan Barcode",
"create_named": "Create {name}",
"new_without_barcode": "New product without barcode"
},
"action": {
"title": "What do you want to do?",
@@ -212,7 +214,11 @@
"title": "Use / Consume",
"location_label": "📍 From where?",
"quantity_label": "How much did you use?",
"change": "change",
"partial_hint": "Or specify the quantity used:",
"partial_piece_hint": "Did you use only a part?",
"piece": "piece",
"one_whole": "1 whole",
"use_all": "🗑️ Used ALL / Finished",
"submit": "📤 Use this quantity",
"available": "📦 Available:",
@@ -273,7 +279,41 @@
"recipes": {
"title": "🍳 Recipes",
"generate": "✨ Generate new recipe",
"archive_empty": "No recipes saved. Generate your first recipe!"
"archive_empty": "No recipes saved. Generate your first recipe!",
"dialog_title": "🍳 Recipe",
"dialog_desc": "I will generate a healthy recipe using pantry ingredients, prioritizing expiring items.",
"meal_label": "🕐 Which meal?",
"persons_label": "👥 How many people?",
"meal_type_label": "🎯 Meal type",
"opt_fast": "⚡ Quick meal",
"opt_light": "🥗 Light appetite",
"opt_expiry": "⏰ Prioritize expiring items",
"opt_healthy": "💚 Extra healthy",
"opt_opened": "📦 Prioritize opened items",
"opt_zero_waste": "♻️ Zero waste",
"generate_btn": "✨ Generate Recipe",
"loading_msg": "Preparing your recipe...",
"start_cooking": "👨‍🍳 Cooking Mode",
"regenerate": "🔄 Generate another one",
"close_btn": "✅ Close",
"ingredients_title": "🧾 Ingredients",
"steps_title": "👨‍🍳 Steps",
"no_steps": "No steps available",
"generate_error": "Generation error",
"persons_short": "serv.",
"use_ingredient_title": "Use ingredient",
"recipe_qty_label": "Recipe",
"from_where_label": "From where?",
"amount_label": "How much",
"use_amount_btn": "Use this amount",
"use_all_btn": "Use ALL / Finished",
"packs_label": "Packs",
"quantity_in_total": "Quantity in {unit} (total: {total})",
"packs_of_have": "Packs of {size} (you have {count} packs)",
"scale_wait_stable": "Wait 10s of stable weight for auto-fill…",
"ingredient_scaled_toast": "📦 Ingredient deducted from pantry!",
"finished_added_bring_toast": "🛒 Finished product → added to Bring!",
"load_error": "Loading error"
},
"shopping": {
"title": "🛒 Shopping List",
@@ -333,7 +373,31 @@
"bring_adding": "Adding...",
"bring_added_one": "1 product added to Bring!",
"bring_added_many": "{n} products added to Bring!",
"bring_skipped": "({n} already in list)"
"bring_skipped": "({n} already in list)",
"force_sync": "Force Bring! sync",
"scan_target_label": "You are looking for",
"scan_target_found": "Found! Remove from list",
"bring_add_one": "Add 1 product to Bring!",
"bring_add_many": "Add {n} products to Bring!",
"syncing": "Syncing…",
"sync_done": "Sync completed",
"price_searching": "Searching...",
"search_action": "Search",
"open_action": "Open",
"not_found": "Not found",
"search_price": "Search price",
"tap_to_scan": "Tap to scan",
"tag_title": "Tag",
"remove_title": "Remove",
"found_count": "{found}/{total} products found",
"savings_offers": "· 🏷️ You save €{amount} with offers",
"searching_progress": "Searching {current}/{total}...",
"remove_error": "Removal error",
"suggest_loading": "Analyzing...",
"suggest_error": "Suggestion generation error",
"priority_high": "High",
"priority_medium": "Medium",
"priority_low": "Low"
},
"ai": {
"title": "🤖 AI Identification",
@@ -394,7 +458,8 @@
"timer_expired_tts": "Timer {label} expired!",
"timer_warning_tts": "Heads up! {label}: 10 seconds left!",
"recipe_done_tts": "Recipe complete! Enjoy your meal!",
"expires_chip": "exp. {date}"
"expires_chip": "exp. {date}",
"finish": "✅ Finish"
},
"settings": {
"title": "⚙️ Settings",
@@ -468,7 +533,18 @@
"ai_prompt_label": "🤖 AI product selection prompt",
"ai_prompt_placeholder": "Instructions for AI when choosing between multiple products...",
"ai_prompt_hint": "AI uses this prompt to choose the most appropriate product from results. Leave empty for default behavior.",
"configure_first": "Configure Online Shopping in settings first"
"configure_first": "Configure Online Shopping in settings first",
"missing_credentials": "Enter email and password",
"login_in_progress": "Signing in...",
"login_error_prefix": "Error:",
"login_network_error_prefix": "Network error:",
"login_success_default": "Login successful!",
"result_name_label": "Name",
"result_card_label": "Card",
"result_pickup_label": "Pickup point",
"result_points_label": "Loyalty points",
"connected_relogin": "✅ Connected — Sign in again",
"connected_as": "Connected as {name}"
},
"camera": {
"title": "📷 Camera",
@@ -600,6 +676,8 @@
},
"error": {
"generic": "Error",
"network": "Network error",
"no_api_key": "Configure the API key in settings",
"loading": "Error loading product",
"not_found": "Product not found",
"not_found_manual": "Product not found. Enter it manually.",
@@ -656,7 +734,9 @@
"colazione": "Breakfast",
"merenda": "Snack",
"dolce": "Dessert",
"succo": "Fruit Juice"
"succo": "Fruit Juice",
"pranzo": "Lunch",
"cena": "Dinner"
},
"scale": {
"status_connected": "Scale connected",
+86 -6
View File
@@ -169,7 +169,9 @@
"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"
"scan_barcode": "🔖 Scansiona Barcode",
"create_named": "Crea {name}",
"new_without_barcode": "Nuovo prodotto senza barcode"
},
"action": {
"title": "Cosa vuoi fare?",
@@ -212,7 +214,11 @@
"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:",
@@ -273,7 +279,41 @@
"recipes": {
"title": "🍳 Ricette",
"generate": "✨ Genera nuova ricetta",
"archive_empty": "Nessuna ricetta salvata. Genera la tua prima 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",
@@ -333,7 +373,31 @@
"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)"
"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",
@@ -394,7 +458,8 @@
"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}"
"expires_chip": "scade {date}",
"finish": "✅ Fine"
},
"settings": {
"title": "⚙️ Configurazione",
@@ -468,7 +533,18 @@
"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"
"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",
@@ -600,6 +676,8 @@
},
"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.",
@@ -656,7 +734,9 @@
"colazione": "Colazione",
"merenda": "Merenda",
"dolce": "Dolce",
"succo": "Succo di Frutta"
"succo": "Succo di Frutta",
"pranzo": "Pranzo",
"cena": "Cena"
},
"scale": {
"status_connected": "Bilancia connessa",