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
This commit is contained in:
+71
-7
@@ -272,7 +272,8 @@
|
||||
},
|
||||
"recipes": {
|
||||
"title": "🍳 Rezepte",
|
||||
"generate": "✨ Neues Rezept generieren"
|
||||
"generate": "✨ Neues Rezept generieren",
|
||||
"archive_empty": "Keine Rezepte gespeichert. Erstelle dein erstes Rezept!"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "🛒 Einkaufsliste",
|
||||
@@ -326,7 +327,13 @@
|
||||
"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"
|
||||
"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",
|
||||
@@ -386,7 +393,8 @@
|
||||
"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!"
|
||||
"recipe_done_tts": "Rezept abgeschlossen! Guten Appetit!",
|
||||
"expires_chip": "läuft ab {date}"
|
||||
},
|
||||
"settings": {
|
||||
"title": "⚙️ Einstellungen",
|
||||
@@ -610,7 +618,8 @@
|
||||
"not_in_inventory": "Produkt nicht im Bestand",
|
||||
"appliance_exists": "Gerät bereits vorhanden",
|
||||
"already_exists": "Bereits vorhanden",
|
||||
"network_retry": "Verbindungsfehler. Erneut versuchen."
|
||||
"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?",
|
||||
@@ -632,11 +641,22 @@
|
||||
"thu": "Donnerstag",
|
||||
"fri": "Freitag",
|
||||
"sat": "Samstag",
|
||||
"sun": "Sonntag"
|
||||
"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"
|
||||
"dinner": "Abendessen",
|
||||
"colazione": "Frühstück",
|
||||
"merenda": "Nachmittagssnack",
|
||||
"dolce": "Dessert",
|
||||
"succo": "Fruchtsaft"
|
||||
},
|
||||
"scale": {
|
||||
"status_connected": "Waage verbunden",
|
||||
@@ -709,5 +729,49 @@
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
+71
-7
@@ -272,7 +272,8 @@
|
||||
},
|
||||
"recipes": {
|
||||
"title": "🍳 Recipes",
|
||||
"generate": "✨ Generate new recipe"
|
||||
"generate": "✨ Generate new recipe",
|
||||
"archive_empty": "No recipes saved. Generate your first recipe!"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "🛒 Shopping List",
|
||||
@@ -326,7 +327,13 @@
|
||||
"smart_already_predicted": "📊 Smart shopping already predicts <strong>{name}</strong>{urgency}.",
|
||||
"item_removed": "✅ {name} removed from list!",
|
||||
"urgency_spec_critical": "⚡ Urgent",
|
||||
"urgency_spec_high": "🟠 Soon"
|
||||
"urgency_spec_high": "🟠 Soon",
|
||||
"bring_add_n": "Add {n} to Bring!",
|
||||
"bring_add_selected": "Add selected to Bring!",
|
||||
"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)"
|
||||
},
|
||||
"ai": {
|
||||
"title": "🤖 AI Identification",
|
||||
@@ -386,7 +393,8 @@
|
||||
"ingredient_deduct_title": "Deduct from pantry",
|
||||
"timer_expired_tts": "Timer {label} expired!",
|
||||
"timer_warning_tts": "Heads up! {label}: 10 seconds left!",
|
||||
"recipe_done_tts": "Recipe complete! Enjoy your meal!"
|
||||
"recipe_done_tts": "Recipe complete! Enjoy your meal!",
|
||||
"expires_chip": "exp. {date}"
|
||||
},
|
||||
"settings": {
|
||||
"title": "⚙️ Settings",
|
||||
@@ -610,7 +618,8 @@
|
||||
"not_in_inventory": "Product not in inventory",
|
||||
"appliance_exists": "Appliance already exists",
|
||||
"already_exists": "Already exists",
|
||||
"network_retry": "Connection error. Try again."
|
||||
"network_retry": "Connection error. Try again.",
|
||||
"select_items": "Select at least one product"
|
||||
},
|
||||
"confirm": {
|
||||
"remove_item": "Do you really want to remove this product from inventory?",
|
||||
@@ -632,11 +641,22 @@
|
||||
"thu": "Thursday",
|
||||
"fri": "Friday",
|
||||
"sat": "Saturday",
|
||||
"sun": "Sunday"
|
||||
"sun": "Sunday",
|
||||
"mon_short": "Mon",
|
||||
"tue_short": "Tue",
|
||||
"wed_short": "Wed",
|
||||
"thu_short": "Thu",
|
||||
"fri_short": "Fri",
|
||||
"sat_short": "Sat",
|
||||
"sun_short": "Sun"
|
||||
},
|
||||
"meal_types": {
|
||||
"lunch": "Lunch",
|
||||
"dinner": "Dinner"
|
||||
"dinner": "Dinner",
|
||||
"colazione": "Breakfast",
|
||||
"merenda": "Snack",
|
||||
"dolce": "Dessert",
|
||||
"succo": "Fruit Juice"
|
||||
},
|
||||
"scale": {
|
||||
"status_connected": "Scale connected",
|
||||
@@ -709,5 +729,49 @@
|
||||
"2": "Culinary ingredient",
|
||||
"3": "Processed",
|
||||
"4": "Ultra-processed"
|
||||
},
|
||||
"meal_plan_types": {
|
||||
"pasta": "Pasta",
|
||||
"riso": "Rice",
|
||||
"carne": "Meat",
|
||||
"pesce": "Fish",
|
||||
"legumi": "Legumes",
|
||||
"uova": "Eggs",
|
||||
"formaggio": "Cheese",
|
||||
"pizza": "Pizza",
|
||||
"affettati": "Cold Cuts",
|
||||
"verdure": "Veggies",
|
||||
"zuppa": "Soup",
|
||||
"insalata": "Salad",
|
||||
"pane": "Bread/Sandwich",
|
||||
"dolce": "Dessert",
|
||||
"libero": "Free"
|
||||
},
|
||||
"meal_sub": {
|
||||
"dolce_torta": "Cake",
|
||||
"dolce_crema": "Cream / Pudding",
|
||||
"dolce_crumble": "Crumble / Tart",
|
||||
"dolce_biscotti": "Cookies / Pastries",
|
||||
"dolce_frutta": "Fruit Dessert",
|
||||
"succo_dolce": "Sweet / Fruity",
|
||||
"succo_energizzante": "Energizing",
|
||||
"succo_detox": "Detox / Green",
|
||||
"succo_rinfrescante": "Refreshing",
|
||||
"succo_vitaminico": "Vitamin / Citrus"
|
||||
},
|
||||
"meal_plan": {
|
||||
"reset_success": "Weekly plan reset",
|
||||
"suggested_by": "suggested by weekly plan"
|
||||
},
|
||||
"kiosk_session": {
|
||||
"first_item": "First item: {name}!",
|
||||
"items_two_four": "{n} items — warming up 🚀",
|
||||
"items_five_nine": "{n} items — great pace! 💪",
|
||||
"items_ten_twenty": "{n} items — almost a record 🏆",
|
||||
"items_twenty_plus": "{n} items — epic shopping! 🛒🔥",
|
||||
"duplicates_one": "1 duplicate (same thing twice)",
|
||||
"duplicates_many": "{n} duplicates (picked multiple times)",
|
||||
"top_category": "Top category: {cat} ({count}×)",
|
||||
"items_fallback": "{n} item{plural} added"
|
||||
}
|
||||
}
|
||||
}
|
||||
+71
-7
@@ -272,7 +272,8 @@
|
||||
},
|
||||
"recipes": {
|
||||
"title": "🍳 Ricette",
|
||||
"generate": "✨ Genera nuova ricetta"
|
||||
"generate": "✨ Genera nuova ricetta",
|
||||
"archive_empty": "Nessuna ricetta salvata. Genera la tua prima ricetta!"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "🛒 Lista della Spesa",
|
||||
@@ -326,7 +327,13 @@
|
||||
"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"
|
||||
"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)"
|
||||
},
|
||||
"ai": {
|
||||
"title": "🤖 Identificazione AI",
|
||||
@@ -386,7 +393,8 @@
|
||||
"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!"
|
||||
"recipe_done_tts": "Ricetta completata! Buon appetito!",
|
||||
"expires_chip": "scade {date}"
|
||||
},
|
||||
"settings": {
|
||||
"title": "⚙️ Configurazione",
|
||||
@@ -610,7 +618,8 @@
|
||||
"not_in_inventory": "Prodotto non nell'inventario",
|
||||
"appliance_exists": "Elettrodomestico già presente",
|
||||
"already_exists": "Già presente",
|
||||
"network_retry": "Errore di connessione. Riprova."
|
||||
"network_retry": "Errore di connessione. Riprova.",
|
||||
"select_items": "Seleziona almeno un prodotto"
|
||||
},
|
||||
"confirm": {
|
||||
"remove_item": "Vuoi davvero rimuovere questo prodotto dall'inventario?",
|
||||
@@ -632,11 +641,22 @@
|
||||
"thu": "Giovedì",
|
||||
"fri": "Venerdì",
|
||||
"sat": "Sabato",
|
||||
"sun": "Domenica"
|
||||
"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"
|
||||
"dinner": "Cena",
|
||||
"colazione": "Colazione",
|
||||
"merenda": "Merenda",
|
||||
"dolce": "Dolce",
|
||||
"succo": "Succo di Frutta"
|
||||
},
|
||||
"scale": {
|
||||
"status_connected": "Bilancia connessa",
|
||||
@@ -709,5 +729,49 @@
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user