From 48e175f58f7307f9be5e3c5235673684a4fdea19 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Wed, 17 Sep 2025 07:50:56 +0200 Subject: [PATCH] mealie importer working with settings --- cookbook/integration/integration.py | 14 +- cookbook/integration/mealie1.py | 211 +++++++++++++++------------- vue3/src/locales/ar.json | 5 + vue3/src/locales/bg.json | 5 + vue3/src/locales/ca.json | 5 + vue3/src/locales/cs.json | 5 + vue3/src/locales/da.json | 5 + vue3/src/locales/de.json | 5 + vue3/src/locales/el.json | 5 + vue3/src/locales/en.json | 5 + vue3/src/locales/es.json | 5 + vue3/src/locales/fi.json | 5 + vue3/src/locales/fr.json | 5 + vue3/src/locales/he.json | 5 + vue3/src/locales/hr.json | 5 + vue3/src/locales/hu.json | 5 + vue3/src/locales/hy.json | 5 + vue3/src/locales/id.json | 5 + vue3/src/locales/is.json | 5 + vue3/src/locales/it.json | 5 + vue3/src/locales/lt.json | 5 + vue3/src/locales/lv.json | 5 + vue3/src/locales/nb_NO.json | 5 + vue3/src/locales/nl.json | 5 + vue3/src/locales/pl.json | 5 + vue3/src/locales/pt.json | 5 + vue3/src/locales/pt_BR.json | 5 + vue3/src/locales/ro.json | 5 + vue3/src/locales/ru.json | 5 + vue3/src/locales/sl.json | 5 + vue3/src/locales/sv.json | 5 + vue3/src/locales/tr.json | 5 + vue3/src/locales/uk.json | 5 + vue3/src/locales/zh_Hans.json | 5 + vue3/src/locales/zh_Hant.json | 5 + vue3/src/pages/ModelListPage.vue | 4 + vue3/src/pages/RecipeImportPage.vue | 5 + vue3/src/types/Models.ts | 1 + 38 files changed, 295 insertions(+), 105 deletions(-) diff --git a/cookbook/integration/integration.py b/cookbook/integration/integration.py index f1bfa9a79..974700aea 100644 --- a/cookbook/integration/integration.py +++ b/cookbook/integration/integration.py @@ -31,7 +31,7 @@ class Integration: import_meal_plans = True import_shopping_lists = True - nutrition_per_servings = False + nutrition_per_serving = False def __init__(self, request, export_type): """ @@ -64,10 +64,7 @@ class Integration: space=request.space ) - def do_export(self, recipes, el, meal_plans=True, shopping_lists=True, nutrition_per_servings=False): - self.import_meal_plans = meal_plans - self.import_shopping_lists = shopping_lists - self.nutrition_per_servings = nutrition_per_servings + def do_export(self, recipes, el): with scope(space=self.request.space): el.total_recipes = len(recipes) @@ -111,7 +108,7 @@ class Integration: """ return True - def do_import(self, files, il, import_duplicates): + def do_import(self, files, il, import_duplicates, meal_plans=True, shopping_lists=True, nutrition_per_serving=False): """ Imports given files :param import_duplicates: if true duplicates are imported as well @@ -122,6 +119,11 @@ class Integration: with scope(space=self.request.space): self.import_log = il self.import_duplicates = import_duplicates + + self.import_meal_plans = meal_plans + self.import_shopping_lists = shopping_lists + self.nutrition_per_serving = nutrition_per_serving + try: self.files = files for f in files: diff --git a/cookbook/integration/mealie1.py b/cookbook/integration/mealie1.py index 24b4fcde8..b43bcbe4b 100644 --- a/cookbook/integration/mealie1.py +++ b/cookbook/integration/mealie1.py @@ -1,5 +1,6 @@ import json import re +from decimal import Decimal from io import BytesIO from zipfile import ZipFile from gettext import gettext as _ @@ -89,33 +90,36 @@ class Mealie1(Integration): recipes = [] recipe_keyword_relation = [] for r in mealie_database['recipes']: - recipe = Recipe.objects.create( - waiting_time=parse_time(r['perform_time']), - working_time=parse_time(r['prep_time']), - description=r['description'][:512], - name=r['name'], - source_url=r['org_url'], - servings=r['recipe_servings'] if r['recipe_servings'] and r['recipe_servings'] != 0 else 1, - servings_text=r['recipe_yield'].strip() if r['recipe_yield'] else "", - internal=True, - created_at=r['created_at'], - space=self.request.space, - created_by=self.request.user, - ) + if Recipe.objects.filter(space=self.request.space, name=r['name']).exists() and not self.import_duplicates: + self.import_log.msg += f"Ignoring {r['name']} because a recipe with this name already exists.\n" + self.import_log.save() + else: + recipe = Recipe.objects.create( + waiting_time=parse_time(r['perform_time']), + working_time=parse_time(r['prep_time']), + description=r['description'][:512], + name=r['name'], + source_url=r['org_url'], + servings=r['recipe_servings'] if r['recipe_servings'] and r['recipe_servings'] != 0 else 1, + servings_text=r['recipe_yield'].strip() if r['recipe_yield'] else "", + internal=True, + created_at=r['created_at'], + space=self.request.space, + created_by=self.request.user, + ) - if not self.nutrition_per_servings: - recipe_property_factor_dict[r['id']] = recipe.servings + if not self.nutrition_per_serving: + recipe_property_factor_dict[r['id']] = recipe.servings - self.handle_duplicates(recipe, self.import_duplicates) - self.import_log.msg += self.get_recipe_processed_msg(recipe) - self.import_log.imported_recipes += 1 - self.import_log.save() + self.import_log.msg += self.get_recipe_processed_msg(recipe) + self.import_log.imported_recipes += 1 + self.import_log.save() - recipes.append(recipe) - recipes_dict[r['id']] = recipe.pk - recipe_keyword_relation.append(Recipe.keywords.through(recipe_id=recipe.pk, keyword_id=self.keyword.pk)) + recipes.append(recipe) + recipes_dict[r['id']] = recipe.pk + recipe_keyword_relation.append(Recipe.keywords.through(recipe_id=recipe.pk, keyword_id=self.keyword.pk)) - Recipe.keywords.through.objects.bulk_create(recipe_keyword_relation) + Recipe.keywords.through.objects.bulk_create(recipe_keyword_relation, ignore_conflicts=True) self.import_log.msg +=f"Importing {len(mealie_database["recipe_instructions"])} instructions...\n" self.import_log.save() @@ -123,20 +127,22 @@ class Mealie1(Integration): steps_relation = [] first_step_of_recipe_dict = {} for s in mealie_database['recipe_instructions']: - step = Step.objects.create(instruction=(s['text'] if s['text'] else "") + (f" \n {s['summary']}" if s['summary'] else ""), - order=s['position'], - name=s['title'], - space=self.request.space) - steps_relation.append(Recipe.steps.through(recipe_id=recipes_dict[s['recipe_id']], step_id=step.pk)) - if s['recipe_id'] not in first_step_of_recipe_dict: - first_step_of_recipe_dict[s['recipe_id']] = step.pk + if s['recipe_id'] in recipes_dict: + step = Step.objects.create(instruction=(s['text'] if s['text'] else "") + (f" \n {s['summary']}" if s['summary'] else ""), + order=s['position'], + name=s['title'], + space=self.request.space) + steps_relation.append(Recipe.steps.through(recipe_id=recipes_dict[s['recipe_id']], step_id=step.pk)) + if s['recipe_id'] not in first_step_of_recipe_dict: + first_step_of_recipe_dict[s['recipe_id']] = step.pk for n in mealie_database['notes']: - step = Step.objects.create(instruction=n['text'], - name=n['title'], - order=100, - space=self.request.space) - steps_relation.append(Recipe.steps.through(recipe_id=recipes_dict[n['recipe_id']], step_id=step.pk)) + if n['recipe_id'] in recipes_dict: + step = Step.objects.create(instruction=n['text'], + name=n['title'], + order=100, + space=self.request.space) + steps_relation.append(Recipe.steps.through(recipe_id=recipes_dict[n['recipe_id']], step_id=step.pk)) Recipe.steps.through.objects.bulk_create(steps_relation) @@ -147,37 +153,38 @@ class Mealie1(Integration): ingredients_relation = [] for i in mealie_database['recipes_ingredients']: - if i['title']: - title_ingredient = Ingredient.objects.create( - note=i['title'], - is_header=True, - space=self.request.space, - ) - ingredients_relation.append(Step.ingredients.through(step_id=first_step_of_recipe_dict[i['recipe_id']], ingredient_id=title_ingredient.pk)) - if i['food_id']: - ingredient = Ingredient.objects.create( - food_id=foods_dict[i['food_id']] if i['food_id'] in foods_dict else None, - unit_id=units_dict[i['unit_id']] if i['unit_id'] in units_dict else None, - original_text=i['original_text'], - order=i['position'], - amount=i['quantity'], - note=i['note'], - space=self.request.space, - ) - ingredients_relation.append(Step.ingredients.through(step_id=first_step_of_recipe_dict[i['recipe_id']], ingredient_id=ingredient.pk)) - elif i['note'].strip(): - amount, unit, food, note = ingredient_parser.parse(i['note'].strip()) - f = ingredient_parser.get_food(food) - u = ingredient_parser.get_unit(unit) - ingredient = Ingredient.objects.create( - food=f, - unit=u, - amount=amount, - note=note, - original_text=i['original_text'], - space=self.request.space, - ) - ingredients_relation.append(Step.ingredients.through(step_id=first_step_of_recipe_dict[i['recipe_id']], ingredient_id=ingredient.pk)) + if i['recipe_id'] in recipes_dict: + if i['title']: + title_ingredient = Ingredient.objects.create( + note=i['title'], + is_header=True, + space=self.request.space, + ) + ingredients_relation.append(Step.ingredients.through(step_id=first_step_of_recipe_dict[i['recipe_id']], ingredient_id=title_ingredient.pk)) + if i['food_id']: + ingredient = Ingredient.objects.create( + food_id=foods_dict[i['food_id']] if i['food_id'] in foods_dict else None, + unit_id=units_dict[i['unit_id']] if i['unit_id'] in units_dict else None, + original_text=i['original_text'], + order=i['position'], + amount=i['quantity'], + note=i['note'], + space=self.request.space, + ) + ingredients_relation.append(Step.ingredients.through(step_id=first_step_of_recipe_dict[i['recipe_id']], ingredient_id=ingredient.pk)) + elif i['note'].strip(): + amount, unit, food, note = ingredient_parser.parse(i['note'].strip()) + f = ingredient_parser.get_food(food) + u = ingredient_parser.get_unit(unit) + ingredient = Ingredient.objects.create( + food=f, + unit=u, + amount=amount, + note=note, + original_text=i['original_text'], + space=self.request.space, + ) + ingredients_relation.append(Step.ingredients.through(step_id=first_step_of_recipe_dict[i['recipe_id']], ingredient_id=ingredient.pk)) Step.ingredients.through.objects.bulk_create(ingredients_relation) self.import_log.msg += f"Importing {len(mealie_database["recipes_to_categories"]) + len(mealie_database["recipes_to_tags"])} category and keyword relations...\n" @@ -185,10 +192,12 @@ class Mealie1(Integration): recipe_keyword_relation = [] for rC in mealie_database['recipes_to_categories']: - recipe_keyword_relation.append(Recipe.keywords.through(recipe_id=recipes_dict[rC['recipe_id']], keyword_id=keywords_categories_dict[rC['category_id']])) + if rC['recipe_id'] in recipes_dict: + recipe_keyword_relation.append(Recipe.keywords.through(recipe_id=recipes_dict[rC['recipe_id']], keyword_id=keywords_categories_dict[rC['category_id']])) for rT in mealie_database['recipes_to_tags']: - recipe_keyword_relation.append(Recipe.keywords.through(recipe_id=recipes_dict[rT['recipe_id']], keyword_id=keywords_tags_dict[rT['tag_id']])) + if rT['recipe_id'] in recipes_dict: + recipe_keyword_relation.append(Recipe.keywords.through(recipe_id=recipes_dict[rT['recipe_id']], keyword_id=keywords_tags_dict[rT['tag_id']])) Recipe.keywords.through.objects.bulk_create(recipe_keyword_relation, ignore_conflicts=True) @@ -213,13 +222,14 @@ class Mealie1(Integration): recipe_properties_relation = [] properties_relation = [] for r in mealie_database['recipe_nutrition']: - for key in property_types_dict: - if r[key]: - properties_relation.append( - Property(property_type_id=property_types_dict[key].pk, - property_amount=r[key] * recipe_property_factor_dict[r['recipe_id']] if r['recipe_id'] in recipe_property_factor_dict else 1, - open_data_food_slug=r['recipe_id'], - space=self.request.space)) + if r['recipe_id'] in recipes_dict: + for key in property_types_dict: + if r[key]: + properties_relation.append( + Property(property_type_id=property_types_dict[key].pk, + property_amount=Decimal(str(r[key])) / (Decimal(str(recipe_property_factor_dict[r['recipe_id']])) if r['recipe_id'] in recipe_property_factor_dict else 1), + open_data_food_slug=r['recipe_id'], + space=self.request.space)) properties = Property.objects.bulk_create(properties_relation) property_ids = [] for p in properties: @@ -240,24 +250,26 @@ class Mealie1(Integration): cook_log_list = [] for c in mealie_database['recipe_comments']: - cook_log_list.append(CookLog( - recipe_id=recipes_dict[c['recipe_id']], - comment=c['text'], - created_at=c['created_at'], - created_by=self.request.user, - space=self.request.space, - )) - - for c in mealie_database['recipe_timeline_events']: - if c['event_type'] == 'comment': + if c['recipe_id'] in recipes_dict: cook_log_list.append(CookLog( recipe_id=recipes_dict[c['recipe_id']], - comment=c['message'], + comment=c['text'], created_at=c['created_at'], created_by=self.request.user, space=self.request.space, )) + for c in mealie_database['recipe_timeline_events']: + if c['recipe_id'] in recipes_dict: + if c['event_type'] == 'comment': + cook_log_list.append(CookLog( + recipe_id=recipes_dict[c['recipe_id']], + comment=c['message'], + created_at=c['created_at'], + created_by=self.request.user, + space=self.request.space, + )) + CookLog.objects.bulk_create(cook_log_list) if self.import_meal_plans: @@ -267,19 +279,20 @@ class Mealie1(Integration): meal_types_dict = {} meal_plans = [] for m in mealie_database['group_meal_plans']: - if not m['entry_type'] in meal_types_dict: - meal_type = MealType.objects.get_or_create(name=m['entry_type'], created_by=self.request.user, space=self.request.space)[0] - meal_types_dict[m['entry_type']] = meal_type.pk - meal_plans.append(MealPlan( - recipe_id=recipes_dict[m['recipe_id']] if m['recipe_id'] else None, - title=m['title'] if m['title'] else "", - note=m['text'] if m['text'] else "", - from_date=m['date'], - to_date=m['date'], - meal_type_id=meal_types_dict[m['entry_type']], - created_by=self.request.user, - space=self.request.space, - )) + if m['recipe_id'] in recipes_dict: + if not m['entry_type'] in meal_types_dict: + meal_type = MealType.objects.get_or_create(name=m['entry_type'], created_by=self.request.user, space=self.request.space)[0] + meal_types_dict[m['entry_type']] = meal_type.pk + meal_plans.append(MealPlan( + recipe_id=recipes_dict[m['recipe_id']] if m['recipe_id'] else None, + title=m['title'] if m['title'] else "", + note=m['text'] if m['text'] else "", + from_date=m['date'], + to_date=m['date'], + meal_type_id=meal_types_dict[m['entry_type']], + created_by=self.request.user, + space=self.request.space, + )) MealPlan.objects.bulk_create(meal_plans) diff --git a/vue3/src/locales/ar.json b/vue3/src/locales/ar.json index a98daac61..51853e7d8 100644 --- a/vue3/src/locales/ar.json +++ b/vue3/src/locales/ar.json @@ -2,6 +2,7 @@ "AISettingsHostedHelp": "", "API_Browser": "", "API_Documentation": "", + "Active": "", "Add": "", "AddChild": "", "AddFoodToShopping": "", @@ -137,6 +138,8 @@ "Image": "", "Import": "", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "", "Import_Not_Yet_Supported": "", "Import_Result_Info": "", @@ -214,6 +217,8 @@ "NotInShopping": "", "Note": "", "Nutrition": "", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "", "Ok": "", "OnHand": "", diff --git a/vue3/src/locales/bg.json b/vue3/src/locales/bg.json index ce7d549a8..c9cad6cec 100644 --- a/vue3/src/locales/bg.json +++ b/vue3/src/locales/bg.json @@ -2,6 +2,7 @@ "AISettingsHostedHelp": "", "API_Browser": "", "API_Documentation": "", + "Active": "", "Add": "Добави", "AddChild": "", "AddFoodToShopping": "Добавете {food} към списъка си за пазаруване", @@ -134,6 +135,8 @@ "Image": "Изображение", "Import": "Импортиране", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Възникна грешка по време на импортирането ви. Моля, разгънете подробностите в долната част на страницата, за да ги видите.", "Import_Not_Yet_Supported": "Импортирането все още не се поддържа", "Import_Result_Info": "Импортирани са {imported} от {total} рецепти", @@ -207,6 +210,8 @@ "NotInShopping": "{food} не е в списъка ви за пазаруване.", "Note": "Бележка", "Nutrition": "Хранителни стойности", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Вие сте офлайн, списъкът за пазаруване може да не се синхронизира.", "Ok": "Отвори", "OnHand": "В момента под ръка", diff --git a/vue3/src/locales/ca.json b/vue3/src/locales/ca.json index 9e8556a70..11be32cf4 100644 --- a/vue3/src/locales/ca.json +++ b/vue3/src/locales/ca.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Compte", + "Active": "", "Add": "Afegir", "AddChild": "", "AddFoodToShopping": "Afegeix {food} a la llista de la compra", @@ -181,6 +182,8 @@ "Import": "Importar", "Import Recipe": "Importar Recepta", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "S'ha produït un error durant la importació. Si us plau, amplia els detalls a la part inferior de la pàgina per veure'l.", "Import_Not_Yet_Supported": "Importació encara no suportada", "Import_Result_Info": "{imported} de {total} receptes s'han importat", @@ -273,6 +276,8 @@ "Note": "Nota", "Number of Objects": "Nombre d'Objectes", "Nutrition": "Valors nutricionals", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Estàs desconnectat, la llista de la compra no pot actualitzar-se.", "Ok": "Ok", "OnHand": "Ja en tinc", diff --git a/vue3/src/locales/cs.json b/vue3/src/locales/cs.json index d2fc056f1..14ae2bc19 100644 --- a/vue3/src/locales/cs.json +++ b/vue3/src/locales/cs.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Účet", + "Active": "", "Add": "Přidat", "AddChild": "", "AddFoodToShopping": "Přidat {food} na váš nákupní seznam", @@ -180,6 +181,8 @@ "Import": "Import", "Import Recipe": "Importovat recept", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Během importu došlo k chybě. Pro více informací rozbalte Detaily na konci stránky.", "Import_Not_Yet_Supported": "Import není zatím podporován", "Import_Result_Info": "{imported} z {total} receptů naimportováno", @@ -270,6 +273,8 @@ "Note": "Poznámka", "Number of Objects": "Počet Objektů", "Nutrition": "Výživové hodnoty", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Jste offline, nákupní seznam nemusí být synchronizován.", "Ok": "Ok", "OnHand": "Momentálně k dispozici", diff --git a/vue3/src/locales/da.json b/vue3/src/locales/da.json index d61e0c63e..f8455409e 100644 --- a/vue3/src/locales/da.json +++ b/vue3/src/locales/da.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Bruger", + "Active": "", "Add": "Tilføj", "AddChild": "", "AddFoodToShopping": "Tilføj {food} til indkøbsliste", @@ -181,6 +182,8 @@ "Import": "Importer", "Import Recipe": "Importer opskrift", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Der opstod en fejl under din importering. Udvid detaljerne i bunden af siden for at se fejlen.", "Import_Not_Yet_Supported": "Import endnu ikke understøttet", "Import_Result_Info": "{imported} af {total} opskrifter blev importeret", @@ -273,6 +276,8 @@ "Note": "Note", "Number of Objects": "Antal objekter", "Nutrition": "Næring", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Du er offline, indkøbslisten er måske ikke synkroniseret.", "Ok": "Åben", "OnHand": "Til rådighed", diff --git a/vue3/src/locales/de.json b/vue3/src/locales/de.json index 71e5ce2a9..add27ccf9 100644 --- a/vue3/src/locales/de.json +++ b/vue3/src/locales/de.json @@ -10,6 +10,7 @@ "Access_Token": "Zugriffstoken", "Account": "Konto", "Actions": "Aktionen", + "Active": "Aktiv", "Activity": "Aktivität", "Add": "Hinzufügen", "AddAll": "Alle Hinzufügen", @@ -252,6 +253,8 @@ "ImportAll": "Alle importieren", "ImportFirstRecipe": "Importiere dein erstes Rezept von einer von tausenden Websites oder nutze einen der anderen Importer um bestehende Sammlungen, Dokumente oder URL Listen zu importieren. ", "ImportIntoTandoor": "In Tandoor importieren", + "ImportMealPlans": "Speisepläne importieren", + "ImportShoppingList": "Einkaufslisten importieren", "Import_Error": "Es ist ein Fehler beim Importieren aufgetreten. Bitte sieh dir die ausgeklappten Details unten auf der Seite an.", "Import_Not_Yet_Supported": "Importieren wird noch nicht unterstützt", "Import_Result_Info": "{imported} von insgesamt {total} Rezepten wurden importiert", @@ -368,6 +371,8 @@ "Note": "Notiz", "Number of Objects": "Anzahl von Objekten", "Nutrition": "Nährwerte", + "NutritionsPerServing": "Nährwerte pro Portion", + "NutritionsPerServingHelp": "Manche Anwendungen spezifizieren nicht, ob Nährwerte pro Portion oder pro Rezept anzugeben sind. Standardmäßig werden Sie daher pro Rezept importiert. Wähle diese Option um Sie als pro Portion zu behandeln.", "OfflineAlert": "Du bist offline. Deine Einkaufsliste wird nicht synchronisiert.", "Ok": "Ok", "OnHand": "Aktuell vorrätig", diff --git a/vue3/src/locales/el.json b/vue3/src/locales/el.json index baea64631..7ecbadd03 100644 --- a/vue3/src/locales/el.json +++ b/vue3/src/locales/el.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Λογαριασμός", + "Active": "", "Add": "Προσθήκη", "AddChild": "", "AddFoodToShopping": "Προσθήκη του φαγητού {food} στη λίστα αγορών σας", @@ -181,6 +182,8 @@ "Import": "Εισαγωγή", "Import Recipe": "Εισαγωγή συνταγής", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Συνέβη ένα σφάλμα κατά την εισαγωγή. Για να το δείτε, εμφανίστε τις λεπτομέρειες στο κάτω μέρος της σελίδας.", "Import_Not_Yet_Supported": "Η εισαγωγή δεν υποστηρίζεται ακόμη", "Import_Result_Info": "Έγινε εισαγωγή {imported} από τις {total} συνταγές", @@ -273,6 +276,8 @@ "Note": "Σημείωση", "Number of Objects": "Αριθμός αντικειμένων", "Nutrition": "Διατροφική αξία", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Είστε εκτός σύνδεσης, η λίστα αγορών μπορεί να μην συγχρονιστεί.", "Ok": "ΟΚ", "OnHand": "Τώρα διαθέσιμα", diff --git a/vue3/src/locales/en.json b/vue3/src/locales/en.json index 3b8a46aa9..4552ccf0b 100644 --- a/vue3/src/locales/en.json +++ b/vue3/src/locales/en.json @@ -10,6 +10,7 @@ "Access_Token": "Access Token", "Account": "Account", "Actions": "Actions", + "Active": "Active", "Activity": "Activity", "Add": "Add", "AddAll": "Add all", @@ -250,6 +251,8 @@ "ImportAll": "Import all", "ImportFirstRecipe": "Import your first recipe from one of thousands of websites or use one of the other importers to import your existing collection, documents or URL lists.", "ImportIntoTandoor": "Import into Tandoor", + "ImportMealPlans": "Import mealplans", + "ImportShoppingList": "Import shoppinglists", "Import_Error": "An Error occurred during your import. Please expand the Details at the bottom of the page to view it.", "Import_Not_Yet_Supported": "Import not yet supported", "Import_Result_Info": "{imported} of {total} recipes were imported", @@ -366,6 +369,8 @@ "Note": "Note", "Number of Objects": "Number of Objects", "Nutrition": "Nutrition", + "NutritionsPerServing": "Nutritions per Serving", + "NutritionsPerServingHelp": "Some applications do not specify if nutritions are per recipe or per serving. By default Tandoor treats them as per recipe. Check this box to treat them as per serving. ", "OfflineAlert": "You are offline, shopping list may not syncronize.", "Ok": "Ok", "OnHand": "Currently On Hand", diff --git a/vue3/src/locales/es.json b/vue3/src/locales/es.json index f83ed0a93..a2222a342 100644 --- a/vue3/src/locales/es.json +++ b/vue3/src/locales/es.json @@ -9,6 +9,7 @@ "Access_Token": "Token de acceso", "Account": "Cuenta", "Actions": "Acciones", + "Active": "", "Activity": "Actividad", "Add": "Añadir", "AddAll": "Agregar todo", @@ -241,6 +242,8 @@ "ImportAll": "Importar todo", "ImportFirstRecipe": "", "ImportIntoTandoor": "Importar a Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Ocurrió un Error ocurrió durante la importación. Por favor, expanda los Detalles al final de la página para verlo.", "Import_Not_Yet_Supported": "Importación no soportada todavía", "Import_Result_Info": "{imported} de {total} recetas fueron importadas", @@ -356,6 +359,8 @@ "Note": "Nota", "Number of Objects": "Número de Objetos", "Nutrition": "Nutrición", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Estas desconectado, la lista de la compra puede no sincronizarse.", "Ok": "Ok", "OnHand": "Actualmente en Posesión", diff --git a/vue3/src/locales/fi.json b/vue3/src/locales/fi.json index d3279ee15..ba08297ee 100644 --- a/vue3/src/locales/fi.json +++ b/vue3/src/locales/fi.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Tili", + "Active": "", "Add": "Lisää", "AddChild": "", "AddFoodToShopping": "Lisää {food} ostoslistaan", @@ -178,6 +179,8 @@ "Import": "Tuo", "Import Recipe": "Tuo Resepti", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Not_Yet_Supported": "Tuontia ei vielä tueta", "Import_Supported": "Tuonti tuettu", "Import_finished": "Tuonti valmistui", @@ -262,6 +265,8 @@ "Note": "Lisätiedot", "Number of Objects": "Objektien määrä", "Nutrition": "Ravitsemus", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Olet offline-tilassa, ostoslista ei välttämättä synkronoidu.", "Ok": "Ok", "OnHand": "Tällä hetkellä saatavilla", diff --git a/vue3/src/locales/fr.json b/vue3/src/locales/fr.json index 51e50c1e2..9e3ac0906 100644 --- a/vue3/src/locales/fr.json +++ b/vue3/src/locales/fr.json @@ -9,6 +9,7 @@ "Access_Token": "Jeton d'accès", "Account": "Compte", "Actions": "Actions", + "Active": "", "Activity": "Activité", "Add": "Ajouter", "AddAll": "Tout ajouter", @@ -250,6 +251,8 @@ "ImportAll": "Tout importer", "ImportFirstRecipe": "", "ImportIntoTandoor": "Importer dans Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Une erreur est survenue pendant votre importation. Veuillez développer les détails au bas de la page pour la consulter.", "Import_Not_Yet_Supported": "Importation pas encore prise en charge", "Import_Result_Info": "{imported} sur {total} recettes ont été importées", @@ -363,6 +366,8 @@ "Note": "Notes", "Number of Objects": "Nombre d'objets", "Nutrition": "Valeurs nutritionnelles", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Vous êtes déconnecté, votre liste de courses peut ne pas être synchronisée.", "Ok": "D'accord", "OnHand": "Disponible actuellement", diff --git a/vue3/src/locales/he.json b/vue3/src/locales/he.json index 74d3e182c..c832311c2 100644 --- a/vue3/src/locales/he.json +++ b/vue3/src/locales/he.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "חשבון", + "Active": "", "Add": "הוספה", "AddChild": "", "AddFoodToShopping": "הוסף {מזון} לרשימת הקניות", @@ -181,6 +182,8 @@ "Import": "ייבוא", "Import Recipe": "ייבא מתכון", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "שגיאה בעת ייבוא. הרחב את הפירוט בסוף עמוד זה לראות מידע נוסף.", "Import_Not_Yet_Supported": "ייבוא לא נתמך עדיין", "Import_Result_Info": "{imported} מתוך {total} מתכונים יובאו", @@ -273,6 +276,8 @@ "Note": "הערה", "Number of Objects": "מספר אובייקטים", "Nutrition": "תזונה", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "אתה במצב מנותק, רשימת הקניות לא בהכרח מסונכרנת.", "Ok": "אישור", "OnHand": "כרגע נגיש", diff --git a/vue3/src/locales/hr.json b/vue3/src/locales/hr.json index 07f26a36e..4dc40efe6 100644 --- a/vue3/src/locales/hr.json +++ b/vue3/src/locales/hr.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Korisnički račun", + "Active": "", "Add": "Dodaj", "AddChild": "", "AddFoodToShopping": "Dodaj {food} na svoj popis za kupovinu", @@ -181,6 +182,8 @@ "Import": "Uvoz", "Import Recipe": "Uvezi recept", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Došlo je do pogreške tijekom uvoza. Molimo proširite pojedinosti na dnu stranice kako bi vidjeli grešku.", "Import_Not_Yet_Supported": "Uvoz još nije podržan", "Import_Result_Info": "Uvezeno je {imported} od {total} recepata", @@ -273,6 +276,8 @@ "Note": "Bilješka", "Number of Objects": "Broj objekata", "Nutrition": "Nutritivna vrijednost", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Nisi na mreži, popis za kupnju se možda neće sinkronizirati.", "Ok": "Ok", "OnHand": "Trenutno pri ruci", diff --git a/vue3/src/locales/hu.json b/vue3/src/locales/hu.json index 642bc3b02..afef26208 100644 --- a/vue3/src/locales/hu.json +++ b/vue3/src/locales/hu.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Fiók", + "Active": "", "Add": "Hozzáadás", "AddChild": "", "AddFoodToShopping": "{food} hozzáadása bevásárlólistához", @@ -164,6 +165,8 @@ "Import": "Import", "Import Recipe": "Recept importálása", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Hiba történt az importálás során. Kérjük, a megtekintéshez bontsa ki az oldal alján található Részletek menüpontot.", "Import_Not_Yet_Supported": "", "Import_Result_Info": "{total}-ból/ből {imported} recept importálva", @@ -250,6 +253,8 @@ "Note": "Megjegyzés", "Number of Objects": "Objektumok száma", "Nutrition": "Tápérték", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Ön éppen offline állapotban van, a bevásárlólista nem biztos, hogy szinkronizálódik.", "Ok": "Ok", "OnHand": "Jelenleg készleten", diff --git a/vue3/src/locales/hy.json b/vue3/src/locales/hy.json index 746b6a51e..7fedc4eb6 100644 --- a/vue3/src/locales/hy.json +++ b/vue3/src/locales/hy.json @@ -2,6 +2,7 @@ "AISettingsHostedHelp": "", "API_Browser": "", "API_Documentation": "", + "Active": "", "Add": "", "AddChild": "", "Add_nutrition_recipe": "Ավելացնել սննդայնություն բաղադրատոմսին", @@ -79,6 +80,8 @@ "IgnoreAccentsHelp": "", "Import": "Ներմուծել", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_finished": "Ներմուծումն ավարտված է", "Information": "Տեղեկություն", "Ingredients": "", @@ -111,6 +114,8 @@ "NoUnit": "", "No_Results": "Արդյունքներ չկան", "Nutrition": "", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "Ok": "", "Open": "", "Parent": "Ծնող", diff --git a/vue3/src/locales/id.json b/vue3/src/locales/id.json index c7b45bfc5..623615326 100644 --- a/vue3/src/locales/id.json +++ b/vue3/src/locales/id.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "", + "Active": "", "Add": "Tambahkan", "AddChild": "", "AddFoodToShopping": "", @@ -151,6 +152,8 @@ "Image": "Gambar", "Import": "Impor", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "", "Import_Not_Yet_Supported": "", "Import_Result_Info": "", @@ -233,6 +236,8 @@ "NotInShopping": "", "Note": "Catatan", "Nutrition": "Nutrisi", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "", "Ok": "Membuka", "OnHand": "", diff --git a/vue3/src/locales/is.json b/vue3/src/locales/is.json index b28e38ece..bababa129 100644 --- a/vue3/src/locales/is.json +++ b/vue3/src/locales/is.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "", + "Active": "", "Add": "", "AddChild": "", "AddFoodToShopping": "", @@ -180,6 +181,8 @@ "Import": "", "Import Recipe": "", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "", "Import_Not_Yet_Supported": "", "Import_Result_Info": "", @@ -272,6 +275,8 @@ "Note": "", "Number of Objects": "", "Nutrition": "", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "", "Ok": "", "OnHand": "", diff --git a/vue3/src/locales/it.json b/vue3/src/locales/it.json index 7df3b20d5..bfd240811 100644 --- a/vue3/src/locales/it.json +++ b/vue3/src/locales/it.json @@ -9,6 +9,7 @@ "Access_Token": "Token di accesso", "Account": "Account", "Actions": "Azioni", + "Active": "", "Activity": "Attività", "Add": "Aggiungi", "AddAll": "Aggiungi tutto", @@ -250,6 +251,8 @@ "ImportAll": "Importa tutto", "ImportFirstRecipe": "", "ImportIntoTandoor": "Importa in Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Si è verificato un errore durante l'importazione. Per avere maggiori informazioni, espandi la sezione dettagli in fondo alla pagina.", "Import_Not_Yet_Supported": "Importazione non ancora supportata", "Import_Result_Info": "{imported} di {total} ricette sono state importate", @@ -365,6 +368,8 @@ "Note": "Nota", "Number of Objects": "Numero di oggetti", "Nutrition": "Nutrienti", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Sei offline, le liste della spesa potrebbero non sincronizzarsi.", "Ok": "Ok", "OnHand": "Attualmente disponibili", diff --git a/vue3/src/locales/lt.json b/vue3/src/locales/lt.json index e325beedd..eed9bf095 100644 --- a/vue3/src/locales/lt.json +++ b/vue3/src/locales/lt.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "", + "Active": "", "Add": "", "AddChild": "", "AddFoodToShopping": "", @@ -166,6 +167,8 @@ "Import": "", "Import Recipe": "", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "", "Import_Not_Yet_Supported": "", "Import_Result_Info": "", @@ -253,6 +256,8 @@ "Note": "", "Number of Objects": "", "Nutrition": "", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "", "Ok": "", "OnHand": "", diff --git a/vue3/src/locales/lv.json b/vue3/src/locales/lv.json index f1933aabe..c432b9e6b 100644 --- a/vue3/src/locales/lv.json +++ b/vue3/src/locales/lv.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "", + "Active": "", "Add": "", "AddChild": "", "AddFoodToShopping": "", @@ -181,6 +182,8 @@ "Import": "", "Import Recipe": "", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "", "Import_Not_Yet_Supported": "", "Import_Result_Info": "", @@ -273,6 +276,8 @@ "Note": "", "Number of Objects": "", "Nutrition": "", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "", "Ok": "", "OnHand": "", diff --git a/vue3/src/locales/nb_NO.json b/vue3/src/locales/nb_NO.json index 58637ad33..cf18482bf 100644 --- a/vue3/src/locales/nb_NO.json +++ b/vue3/src/locales/nb_NO.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "", + "Active": "", "Add": "Legg til", "AddChild": "", "AddFoodToShopping": "Legg til {food] i handlelisten din", @@ -172,6 +173,8 @@ "Import": "Importer", "Import Recipe": "Importer oppskrift", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "", "Import_Not_Yet_Supported": "", "Import_Result_Info": "", @@ -259,6 +262,8 @@ "Note": "Merk", "Number of Objects": "Antall objekter", "Nutrition": "Næringsinnhold", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Du er ikke koblet til internett. Det kan hende handlelisten ikke synkroniserer.", "Ok": "Ok", "OnHand": "På lager", diff --git a/vue3/src/locales/nl.json b/vue3/src/locales/nl.json index a68f34c02..e15da76d4 100644 --- a/vue3/src/locales/nl.json +++ b/vue3/src/locales/nl.json @@ -9,6 +9,7 @@ "Access_Token": "Toegangstoken", "Account": "Account", "Actions": "Acties", + "Active": "", "Activity": "Activiteit", "Add": "Voeg toe", "AddAll": "Voeg alles toe", @@ -251,6 +252,8 @@ "ImportAll": "Alles importeren", "ImportFirstRecipe": "", "ImportIntoTandoor": "Importeer in Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Er is een fout opgetreden tijdens je import. Breid de details aan de onderzijde van de pagina uit om ze te bekijken.", "Import_Not_Yet_Supported": "Import nog niet ondersteund", "Import_Result_Info": "{imported} van {total} recepten zijn geïmporteerd", @@ -366,6 +369,8 @@ "Note": "Notitie", "Number of Objects": "Aantal objecten", "Nutrition": "Voedingswaarde", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Je bent offline, boodschappenlijst synchroniseert mogelijk niet.", "Ok": "Ok", "OnHand": "Momenteel op voorraad", diff --git a/vue3/src/locales/pl.json b/vue3/src/locales/pl.json index 3ad9f5e12..cba5cb8c8 100644 --- a/vue3/src/locales/pl.json +++ b/vue3/src/locales/pl.json @@ -7,6 +7,7 @@ "Access_Token": "Token Dostępu", "Account": "Konto", "Actions": "Akcje", + "Active": "", "Activity": "Aktywność", "Add": "Dodaj", "AddAll": "Dodaj wszystkie", @@ -207,6 +208,8 @@ "Import": "Importuj", "Import Recipe": "Importuj przepis", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Podczas importowania wystąpił błąd. Rozwiń Szczegóły na dole strony, aby go wyświetlić.", "Import_Not_Yet_Supported": "Importowanie jeszcze nie wspierane", "Import_Result_Info": "{imported} z {total} przepisów zostało zaimportowanych", @@ -299,6 +302,8 @@ "Note": "Notatka", "Number of Objects": "Ilość obiektów", "Nutrition": "Odżywianie", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Jesteś offline, lista zakupów może nie być zsynchronizowana.", "Ok": "Ok", "OnHand": "Obecnie posiadane", diff --git a/vue3/src/locales/pt.json b/vue3/src/locales/pt.json index 5af034633..978ae0d7b 100644 --- a/vue3/src/locales/pt.json +++ b/vue3/src/locales/pt.json @@ -2,6 +2,7 @@ "AISettingsHostedHelp": "", "API_Browser": "", "API_Documentation": "", + "Active": "", "Add": "Adicionar", "AddChild": "", "AddFoodToShopping": "Adicionar {food} à sua lista de compras", @@ -149,6 +150,8 @@ "Image": "Image", "Import": "Importar", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_finished": "Importação terminada", "Information": "Informação", "Ingredient Editor": "Editor de Ingredientes", @@ -219,6 +222,8 @@ "Note": "Nota", "Number of Objects": "Número de objetos", "Nutrition": "Nutrição", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Está offline, lista das compras poderá não sincronizar.", "Ok": "Ok", "OnHand": "Atualmente disponível", diff --git a/vue3/src/locales/pt_BR.json b/vue3/src/locales/pt_BR.json index 1d2937b6d..d96410b22 100644 --- a/vue3/src/locales/pt_BR.json +++ b/vue3/src/locales/pt_BR.json @@ -9,6 +9,7 @@ "Access_Token": "Token de acesso", "Account": "Conta", "Actions": "Ações", + "Active": "", "Activity": "Atividade", "Add": "Adicionar", "AddAll": "Adicionar todos", @@ -249,6 +250,8 @@ "ImportAll": "Importar todos", "ImportFirstRecipe": "", "ImportIntoTandoor": "Importar para Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Ocorreu um erro durante a importação. Expanda os detalhes na parte inferior da página para visualizá-los.", "Import_Not_Yet_Supported": "Importação ainda não suportada", "Import_Result_Info": "{imported} de {total} receitas foram importadas", @@ -353,6 +356,8 @@ "Note": "Nota", "Number of Objects": "Número de Objetos", "Nutrition": "Nutrição", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Você está offline, a lista de compras não pode ser sincronizada.", "Ok": "Ok", "OnHand": "Atualmente disponível", diff --git a/vue3/src/locales/ro.json b/vue3/src/locales/ro.json index 330c00858..f5976274c 100644 --- a/vue3/src/locales/ro.json +++ b/vue3/src/locales/ro.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Cont", + "Active": "", "Add": "Adaugă", "AddChild": "", "AddFoodToShopping": "Adăugă {food} în lista de cumpărături", @@ -159,6 +160,8 @@ "Import": "Importă", "Import Recipe": "Importă rețeta", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "A apărut o eroare în timpul importului. Vă rugăm să extindeți detaliile din partea de jos a paginii pentru a le vizualiza.", "Import_Not_Yet_Supported": "Importul încă nu este compatibil", "Import_Result_Info": "{imported} din {total} rețete au fost importate", @@ -242,6 +245,8 @@ "NotInShopping": "{food} nu se află în lista de cumpărături.", "Note": "Notă", "Nutrition": "Nutriție", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Sunteți offline, este posibil ca lista de cumpărături să nu se sincronizeze.", "Ok": "Ok", "OnHand": "În prezent, la îndemână", diff --git a/vue3/src/locales/ru.json b/vue3/src/locales/ru.json index d3b97c040..17902138d 100644 --- a/vue3/src/locales/ru.json +++ b/vue3/src/locales/ru.json @@ -9,6 +9,7 @@ "Access_Token": "Токен доступа", "Account": "Аккаунт", "Actions": "Действия", + "Active": "", "Activity": "Активность", "Add": "Добавить", "AddAll": "Добавить все", @@ -250,6 +251,8 @@ "ImportAll": "Импортировать всё", "ImportFirstRecipe": "", "ImportIntoTandoor": "Импорт в Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Во время импорта произошла ошибка. Для просмотра разверните \"Подробности\" в нижней части страницы.", "Import_Not_Yet_Supported": "Импорт пока не поддерживается", "Import_Result_Info": "{imported} из {total} рецептов были импортированы", @@ -363,6 +366,8 @@ "Note": "Заметка", "Number of Objects": "Количество (шт.)", "Nutrition": "Питательность", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Вы находитесь вне сети, список покупок может не синхронизироваться.", "Ok": "Открыть", "OnHand": "В Наличии", diff --git a/vue3/src/locales/sl.json b/vue3/src/locales/sl.json index cf9b1007b..78fc82c1c 100644 --- a/vue3/src/locales/sl.json +++ b/vue3/src/locales/sl.json @@ -9,6 +9,7 @@ "Access_Token": "Dostopni žeton", "Account": "Račun", "Actions": "Dejanja", + "Active": "", "Activity": "Aktivnost", "Add": "Dodaj", "AddAll": "Dodaj vse", @@ -250,6 +251,8 @@ "ImportAll": "Uvozi vse", "ImportFirstRecipe": "", "ImportIntoTandoor": "Uvozi v Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Med uvozom je prišlo do napake. Za ogled razširite podrobnosti na dnu strani.", "Import_Not_Yet_Supported": "Uvoz še ni podprt", "Import_Result_Info": "Uvoženih je bilo {imported} od {total} receptov", @@ -365,6 +368,8 @@ "Note": "Opomba", "Number of Objects": "Število predmetov", "Nutrition": "Prehrana", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Si v načinu brez povezave, nakupovalni listek se mogoče ne bo sinhroniziral.", "Ok": "V redu", "OnHand": "Trenutno imam v roki", diff --git a/vue3/src/locales/sv.json b/vue3/src/locales/sv.json index 74e092663..c905177d8 100644 --- a/vue3/src/locales/sv.json +++ b/vue3/src/locales/sv.json @@ -8,6 +8,7 @@ "Access_Token": "Åtkomstnyckel", "Account": "Konto", "Actions": "Åtgärder", + "Active": "", "Activity": "Aktivitet", "Add": "Lägg till", "AddAll": "Lägg till alla", @@ -218,6 +219,8 @@ "Import": "Importera", "Import Recipe": "Importera recept", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "Ett fel uppstod under din import. Expandera informationen längst ner på sidan för att se den.", "Import_Not_Yet_Supported": "Import stöds inte ännu", "Import_Result_Info": "{imported} av totalt {total} recept blev importerat", @@ -310,6 +313,8 @@ "Note": "Anteckning", "Number of Objects": "Antal objekt", "Nutrition": "Näringsinnehåll", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Du är offline, inköpslistan kanske inte synkroniseras.", "Ok": "Öppna", "OnHand": "För närvarande till hands", diff --git a/vue3/src/locales/tr.json b/vue3/src/locales/tr.json index b6ffee454..f059827d3 100644 --- a/vue3/src/locales/tr.json +++ b/vue3/src/locales/tr.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "Hesap", + "Active": "", "Add": "Ekle", "AddChild": "", "AddFoodToShopping": "{food}'ı alışveriş listenize ekleyin", @@ -181,6 +182,8 @@ "Import": "İçeriye Aktar", "Import Recipe": "Tarif İçe Aktar", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "İçeri aktarma sırasında bir hata oluştu. Görüntülemek için lütfen sayfanın altındaki Ayrıntıları genişletin.", "Import_Not_Yet_Supported": "İçe aktarma henüz desteklenmiyor", "Import_Result_Info": "{total} tariften {imported} tanesi içe aktarıldı", @@ -273,6 +276,8 @@ "Note": "Not", "Number of Objects": "Nesne Sayısı", "Nutrition": "Besin Değeri", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Çevrimdışısınız, alışveriş listesi senkronize edilemeyebilir.", "Ok": "Tamam", "OnHand": "Şu anda Elinizde", diff --git a/vue3/src/locales/uk.json b/vue3/src/locales/uk.json index e39a0869d..757780eeb 100644 --- a/vue3/src/locales/uk.json +++ b/vue3/src/locales/uk.json @@ -2,6 +2,7 @@ "AISettingsHostedHelp": "", "API_Browser": "", "API_Documentation": "", + "Active": "", "Add": "Додати", "AddChild": "", "AddFoodToShopping": "Додати {food} до вашого списку покупок", @@ -159,6 +160,8 @@ "Image": "Зображення", "Import": "Імпорт", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "", "Import_Not_Yet_Supported": "", "Import_Result_Info": "", @@ -239,6 +242,8 @@ "Note": "Нотатка", "Number of Objects": "Кількість Об'єктів", "Nutrition": "Харчова цінність", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "Ви офлайн, список покупок може не синхронізуватися.", "Ok": "Відкрити", "OnHand": "Зараз На Руках", diff --git a/vue3/src/locales/zh_Hans.json b/vue3/src/locales/zh_Hans.json index ea1cdc4ae..cb7a32ac3 100644 --- a/vue3/src/locales/zh_Hans.json +++ b/vue3/src/locales/zh_Hans.json @@ -4,6 +4,7 @@ "API_Browser": "", "API_Documentation": "", "Account": "账户", + "Active": "", "Add": "添加", "AddChild": "", "AddFoodToShopping": "添加 {food} 到购物清单", @@ -181,6 +182,8 @@ "Import": "导入", "Import Recipe": "导入食谱", "ImportFirstRecipe": "", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "导入时发生错误。 请跳转至页面底部的详细信息进行查看。", "Import_Not_Yet_Supported": "导入尚未支持", "Import_Result_Info": "导入 {imported} 个,共 {total} 个食谱已导入", @@ -273,6 +276,8 @@ "Note": "笔记", "Number of Objects": "对象数量", "Nutrition": "营养", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "您处于离线状态,购物清单可能无法同步。", "Ok": "确认", "OnHand": "目前", diff --git a/vue3/src/locales/zh_Hant.json b/vue3/src/locales/zh_Hant.json index 7094a76cc..3b78ae19b 100644 --- a/vue3/src/locales/zh_Hant.json +++ b/vue3/src/locales/zh_Hant.json @@ -9,6 +9,7 @@ "Access_Token": "訪問令牌", "Account": "賬戶", "Actions": "動作", + "Active": "", "Activity": "活動", "Add": "新增", "AddAll": "增加全部", @@ -249,6 +250,8 @@ "ImportAll": "全部匯入", "ImportFirstRecipe": "", "ImportIntoTandoor": "匯入到 Tandoor", + "ImportMealPlans": "", + "ImportShoppingList": "", "Import_Error": "導入時發生錯誤。 請跳轉至頁面底部的詳細資訊進行查看。", "Import_Not_Yet_Supported": "匯入尚不支援", "Import_Result_Info": "匯入結果資訊", @@ -364,6 +367,8 @@ "Note": "備註", "Number of Objects": "對象數量", "Nutrition": "營養", + "NutritionsPerServing": "", + "NutritionsPerServingHelp": "", "OfflineAlert": "您處於離線狀態,購物清單可能無法同步。", "Ok": "確定", "OnHand": "手頭有", diff --git a/vue3/src/pages/ModelListPage.vue b/vue3/src/pages/ModelListPage.vue index 9f243cbac..082c625f0 100644 --- a/vue3/src/pages/ModelListPage.vue +++ b/vue3/src/pages/ModelListPage.vue @@ -88,6 +88,10 @@ + +
+ + + +