1
0
Fork 0
mirror of https://github.com/mealie-recipes/mealie.git synced 2025-07-19 13:19:41 +02:00

feat: Update seeding to use new foods list format - round 2 (#5189)

This commit is contained in:
Cameronwyatt 2025-03-12 20:30:03 -04:00 committed by GitHub
parent 9e47ade475
commit 72668e2881
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
46 changed files with 46702 additions and 28347 deletions

View file

@ -0,0 +1,70 @@
import glob
import json
import pathlib
def get_seed_locale_names() -> set[str]:
"""Find all locales in the seed/resources/ folder
Returns:
A set of every file name where there's both a seed label and seed food file
"""
LABELS_PATH = "/workspaces/mealie/mealie/repos/seed/resources/labels/locales/"
FOODS_PATH = "/workspaces/mealie/mealie/repos/seed/resources/foods/locales/"
label_locales = glob.glob("*.json", root_dir=LABELS_PATH)
foods_locales = glob.glob("*.json", root_dir=FOODS_PATH)
# ensure that a locale has both a label and a food seed file
return set(label_locales).intersection(foods_locales)
def get_labels_from_file(locale: str) -> list[str]:
"""Query a locale to get all of the labels so that they can be added to the new foods seed format
Returns:
All of the labels found within the seed file for a given locale
"""
locale_path = pathlib.Path("/workspaces/mealie/mealie/repos/seed/resources/labels/locales/" + locale)
label_names = [label["name"] for label in json.loads(locale_path.read_text(encoding="utf-8"))]
return label_names
def transform_foods(locale: str):
"""
Convert the current food seed file for a locale into a new format which maps each food to a label
Existing format of foods seed file is a dictionary where each key is a food name and the values are a dictionary
of attributes such as name and plural_name
New format maps each food to a label. The top-level dictionary has each key as a label e.g. "Fruits".
Each label key as a value that is a dictionary with an element called "foods"
"Foods" is a dictionary of each food for that label, with a key of the english food name e.g. "baking-soda"
and a value of attributes, including the translated name of the item e.g. "bicarbonate of soda" for en-GB.
"""
locale_path = pathlib.Path("/workspaces/mealie/mealie/repos/seed/resources/foods/locales/" + locale)
with open(locale_path, encoding="utf-8") as infile:
data = json.load(infile)
transformed_data = {"": {"foods": dict(data.items())}}
# Seeding for labels now pulls from the foods file and parses the labels from there (as top-level keys),
# thus we need to add all of the existing labels to the new food seed file and give them an empty foods dictionary
label_names = get_labels_from_file(locale)
for label in label_names:
transformed_data[label] = {"foods": {}}
with open(locale_path, "w", encoding="utf-8") as outfile:
json.dump(transformed_data, outfile, indent=4, ensure_ascii=False)
def main():
for locale in get_seed_locale_names():
transform_foods(locale)
if __name__ == "__main__":
main()

View file

@ -1048,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Combining the selected foods will merge the source food and target food into a single food. The source food will be deleted and all of the references to the source food will be updated to point to the target food.",
"merge-food-example": "Merging {food1} into {food2}",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create ~2700 common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You already have some items in your database. A new item will not be added if an item with the same name already exists.",
"combine-food": "Combine Food",
"source-food": "Source Food",
"target-food": "Target Food",

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "akkersap"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Produkte": {
"foods": {}
},
"Graankosse": {
"foods": {}
},
"Vrugte": {
"foods": {}
},
"Groente": {
"foods": {}
},
"Vleis": {
"foods": {}
},
"Seekos": {
"foods": {}
},
"Drinkgoed": {
"foods": {}
},
"Gebakte goedere": {
"foods": {}
},
"Geblikte goedere": {
"foods": {}
},
"Geurmiddels": {
"foods": {}
},
"Soetgoed": {
"foods": {}
},
"Suiwelprodukte": {
"foods": {}
},
"Bevrore kosse": {
"foods": {}
},
"Gesondheidskos": {
"foods": {}
},
"Huishouding": {
"foods": {}
},
"Vleis produkte": {
"foods": {}
},
"Peuselhappies": {
"foods": {}
},
"Speserye": {
"foods": {}
},
"Lekkers": {
"foods": {}
},
"Drank": {
"foods": {}
},
"Ander": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,65 @@
"plural_name": "zucchinis"
}
}
},
"المنتج": {
"foods": {}
},
"الحبوب": {
"foods": {}
},
"آلفواكه": {
"foods": {}
},
"الخضراوات": {
"foods": {}
},
"اللحوم": {
"foods": {}
},
"المأكولات البحرية": {
"foods": {}
},
"المشروبات": {
"foods": {}
},
"المخبوزات": {
"foods": {}
},
"المعلبات": {
"foods": {}
},
"الباهرات": {
"foods": {}
},
"الحَلْوَيَات": {
"foods": {}
},
"منتجات الألبان": {
"foods": {}
},
"الأطعمة المجمدة": {
"foods": {}
},
"الأغذية الصحية": {
"foods": {}
},
"المنزل": {
"foods": {}
},
"منتجات اللحوم": {
"foods": {}
},
"الوجبات الخفيفة": {
"foods": {}
},
"التوابل": {
"foods": {}
},
"الكحول": {
"foods": {}
},
"أخرى": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "цикория"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Пресни плодове&зеленчуци": {
"foods": {}
},
"Зърнени култури": {
"foods": {}
},
"Плодове": {
"foods": {}
},
"Зеленчуци": {
"foods": {}
},
"Месо": {
"foods": {}
},
"Морски дарове": {
"foods": {}
},
"Напитки": {
"foods": {}
},
"Печива": {
"foods": {}
},
"Консерви": {
"foods": {}
},
"Допълнения": {
"foods": {}
},
"Сладкарски изделия": {
"foods": {}
},
"Млечни продукти": {
"foods": {}
},
"Замразени храни": {
"foods": {}
},
"Здравословни храни": {
"foods": {}
},
"Домакинство": {
"foods": {}
},
"Местни продукти": {
"foods": {}
},
"Лека закуски": {
"foods": {}
},
"Подправки": {
"foods": {}
},
"Сладко": {
"foods": {}
},
"Алкохол": {
"foods": {}
},
"Други": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "carabassa de pelegrí"
},
@ -690,3 +692,68 @@
"plural_name": "carabassots"
}
}
},
"Producte fresc": {
"foods": {}
},
"Cereals": {
"foods": {}
},
"Fruita": {
"foods": {}
},
"Verdures": {
"foods": {}
},
"Carn": {
"foods": {}
},
"Pescateria": {
"foods": {}
},
"Begudes": {
"foods": {}
},
"Forn": {
"foods": {}
},
"Conserves": {
"foods": {}
},
"Condiments": {
"foods": {}
},
"Llepolies": {
"foods": {}
},
"Productes lactis": {
"foods": {}
},
"Congelats": {
"foods": {}
},
"Menjars saludables": {
"foods": {}
},
"Llar": {
"foods": {}
},
"Productes càrnics": {
"foods": {}
},
"Entremesos": {
"foods": {}
},
"Espècies": {
"foods": {}
},
"Dolços": {
"foods": {}
},
"Celler": {
"foods": {}
},
"Altres": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "tykev"
},
@ -690,3 +692,65 @@
"plural_name": "cukety"
}
}
},
"Ovoce a Zelenina": {
"foods": {}
},
"Zrna": {
"foods": {}
},
"Ovoce": {
"foods": {}
},
"Zelenina": {
"foods": {}
},
"Maso": {
"foods": {}
},
"Mořské plody": {
"foods": {}
},
"Nápoje": {
"foods": {}
},
"Pečené jídlo": {
"foods": {}
},
"Konzervované jídlo": {
"foods": {}
},
"Koření": {
"foods": {}
},
"Cukrovinky": {
"foods": {}
},
"Mléčné Výrobky": {
"foods": {}
},
"Mražené Potraviny": {
"foods": {}
},
"Zdravá Strava": {
"foods": {}
},
"Domácí": {
"foods": {}
},
"Masné Výrobky": {
"foods": {}
},
"Svačiny": {
"foods": {}
},
"Sladkosti": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Jiné": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "agern squash"
},
@ -690,3 +692,68 @@
"plural_name": "courgette"
}
}
},
"Landbrugsprodukt": {
"foods": {}
},
"Gryn": {
"foods": {}
},
"Frugter": {
"foods": {}
},
"Grøntsager": {
"foods": {}
},
"Kød": {
"foods": {}
},
"Fisk og skaldyr": {
"foods": {}
},
"Drikkevarer": {
"foods": {}
},
"Bagværk": {
"foods": {}
},
"Dåsemad": {
"foods": {}
},
"Tilbehør": {
"foods": {}
},
"Konfekt": {
"foods": {}
},
"Mejeriprodukter": {
"foods": {}
},
"Frostvarer": {
"foods": {}
},
"Helseprodukter": {
"foods": {}
},
"Husholdning": {
"foods": {}
},
"Kødprodukter": {
"foods": {}
},
"Snacks": {
"foods": {}
},
"Krydderier": {
"foods": {}
},
"Søde sager": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Andet": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "Eichelkürbis"
},
@ -690,3 +692,68 @@
"plural_name": "Zucchini"
}
}
},
"Obst & Gemüse": {
"foods": {}
},
"Getreide": {
"foods": {}
},
"Obst": {
"foods": {}
},
"Gemüse": {
"foods": {}
},
"Fleisch": {
"foods": {}
},
"Meeresfrüchte": {
"foods": {}
},
"Getränke": {
"foods": {}
},
"Backwaren": {
"foods": {}
},
"Konserven": {
"foods": {}
},
"Würzmittel": {
"foods": {}
},
"Konditorwaren": {
"foods": {}
},
"Milchprodukte": {
"foods": {}
},
"Tiefkühlware": {
"foods": {}
},
"Bio-Lebensmittel": {
"foods": {}
},
"Haushalt": {
"foods": {}
},
"Fleischprodukte": {
"foods": {}
},
"Snacks": {
"foods": {}
},
"Gewürze": {
"foods": {}
},
"Süßwaren": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Sonstiges": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "βελανίδι σκουός"
},
@ -690,3 +692,68 @@
"plural_name": "κολοκύθια"
}
}
},
"Παραγωγής": {
"foods": {}
},
"Σιτηρά": {
"foods": {}
},
"Φρούτα": {
"foods": {}
},
"Λαχανικά": {
"foods": {}
},
"Κρέας": {
"foods": {}
},
"Θαλασσινά": {
"foods": {}
},
"Ποτά": {
"foods": {}
},
"Αρτοσκευάσματα": {
"foods": {}
},
"Κονσερβοποιημένα Αγαθά": {
"foods": {}
},
"Καρυκεύματα": {
"foods": {}
},
"Ζαχαροπλαστική": {
"foods": {}
},
"Γαλακτοκομικά": {
"foods": {}
},
"Κατεψυγμένα Τρόφιμα": {
"foods": {}
},
"Υγιεινά τρόφιμα": {
"foods": {}
},
"Νοικοκυριό": {
"foods": {}
},
"Κρεατικά": {
"foods": {}
},
"Σνακ": {
"foods": {}
},
"Μπαχαρικά": {
"foods": {}
},
"Γλυκά": {
"foods": {}
},
"Αλκοόλ": {
"foods": {}
},
"Άλλα": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Fresh Produce": {
"foods": {}
},
"Grains": {
"foods": {}
},
"Fruits": {
"foods": {}
},
"Vegetables": {
"foods": {}
},
"Meat": {
"foods": {}
},
"Seafood": {
"foods": {}
},
"Beverages": {
"foods": {}
},
"Baked Goods": {
"foods": {}
},
"Canned Goods": {
"foods": {}
},
"Condiments": {
"foods": {}
},
"Confectionery": {
"foods": {}
},
"Dairy Products": {
"foods": {}
},
"Frozen Foods": {
"foods": {}
},
"Health Foods": {
"foods": {}
},
"Household": {
"foods": {}
},
"Meat Products": {
"foods": {}
},
"Snacks": {
"foods": {}
},
"Spices": {
"foods": {}
},
"Sweets": {
"foods": {}
},
"Alcohol": {
"foods": {}
},
"Other": {
"foods": {}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "calabaza bellota"
},
@ -690,3 +692,68 @@
"plural_name": "calabacines"
}
}
},
"Frutas y verduras": {
"foods": {}
},
"Cereales": {
"foods": {}
},
"Frutas": {
"foods": {}
},
"Verduras": {
"foods": {}
},
"Carne": {
"foods": {}
},
"Pescado y marisco": {
"foods": {}
},
"Bebidas": {
"foods": {}
},
"Panadería y bollería": {
"foods": {}
},
"Productos enlatados": {
"foods": {}
},
"Condimentos": {
"foods": {}
},
"Repostería": {
"foods": {}
},
"Productos lácteos": {
"foods": {}
},
"Alimentos congelados": {
"foods": {}
},
"Alimentos saludables": {
"foods": {}
},
"Limpieza": {
"foods": {}
},
"Productos cárnicos": {
"foods": {}
},
"Aperitivos": {
"foods": {}
},
"Especias": {
"foods": {}
},
"Dulces": {
"foods": {}
},
"Bodega": {
"foods": {}
},
"Otros": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "koristekurpitsa"
},
@ -690,3 +692,68 @@
"plural_name": "kesäkurpitsaa"
}
}
},
"HeVi": {
"foods": {}
},
"Viljat": {
"foods": {}
},
"Hedelmät": {
"foods": {}
},
"Vihannekset": {
"foods": {}
},
"Liha": {
"foods": {}
},
"Merenelävät": {
"foods": {}
},
"Juomat": {
"foods": {}
},
"Leivonnaiset": {
"foods": {}
},
"Säilykkeet": {
"foods": {}
},
"Maustekastikkeet": {
"foods": {}
},
"Konditoriatuotteet": {
"foods": {}
},
"Maitotuotteet": {
"foods": {}
},
"Pakasteet": {
"foods": {}
},
"Terveysruoka": {
"foods": {}
},
"Kotitalous": {
"foods": {}
},
"Lihatuotteet": {
"foods": {}
},
"Välipalat": {
"foods": {}
},
"Mausteet": {
"foods": {}
},
"Makeiset": {
"foods": {}
},
"Alkoholi": {
"foods": {}
},
"Muu": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "courge poivrée"
},
@ -690,3 +692,68 @@
"plural_name": "courgettes"
}
}
},
"Produits": {
"foods": {}
},
"Céréales": {
"foods": {}
},
"Fruits": {
"foods": {}
},
"Légumes": {
"foods": {}
},
"Viande": {
"foods": {}
},
"Produits de la mer": {
"foods": {}
},
"Boissons": {
"foods": {}
},
"Produits cuisinés": {
"foods": {}
},
"Conserves": {
"foods": {}
},
"Condiments": {
"foods": {}
},
"Confiseries": {
"foods": {}
},
"Produits laitiers": {
"foods": {}
},
"Produits surgelés": {
"foods": {}
},
"Produits healthy": {
"foods": {}
},
"Foyer": {
"foods": {}
},
"Viandes": {
"foods": {}
},
"Collations": {
"foods": {}
},
"Épices": {
"foods": {}
},
"Sucrerie": {
"foods": {}
},
"Alcool": {
"foods": {}
},
"Autre": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "courge poivrée"
},
@ -690,3 +692,68 @@
"plural_name": "courgettes"
}
}
},
"Produits": {
"foods": {}
},
"Céréales": {
"foods": {}
},
"Fruits": {
"foods": {}
},
"Légumes": {
"foods": {}
},
"Viande": {
"foods": {}
},
"Fruits de mer": {
"foods": {}
},
"Boissons": {
"foods": {}
},
"Produits cuisinés": {
"foods": {}
},
"Conserves": {
"foods": {}
},
"Condiments": {
"foods": {}
},
"Confiseries": {
"foods": {}
},
"Produits laitiers": {
"foods": {}
},
"Aliments congelés": {
"foods": {}
},
"Aliments Santé": {
"foods": {}
},
"Foyer": {
"foods": {}
},
"Viandes": {
"foods": {}
},
"Collations": {
"foods": {}
},
"Épices": {
"foods": {}
},
"Sucrerie": {
"foods": {}
},
"Alcool": {
"foods": {}
},
"Autre": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "courge poivrée"
},
@ -690,3 +692,68 @@
"plural_name": "courgettes"
}
}
},
"Produits": {
"foods": {}
},
"Céréales": {
"foods": {}
},
"Fruits": {
"foods": {}
},
"Légumes": {
"foods": {}
},
"Viande": {
"foods": {}
},
"Produits de la mer": {
"foods": {}
},
"Boissons": {
"foods": {}
},
"Produits cuisinés": {
"foods": {}
},
"Conserves": {
"foods": {}
},
"Condiments": {
"foods": {}
},
"Confiseries": {
"foods": {}
},
"Produits laitiers": {
"foods": {}
},
"Produits surgelés": {
"foods": {}
},
"Produits sains": {
"foods": {}
},
"Foyer": {
"foods": {}
},
"Viandes": {
"foods": {}
},
"Collations": {
"foods": {}
},
"Épices": {
"foods": {}
},
"Sucrerie": {
"foods": {}
},
"Alcool": {
"foods": {}
},
"Autre": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "cabaza de landra"
},
@ -690,3 +692,68 @@
"plural_name": "cabaciñas"
}
}
},
"Froitas e verduras": {
"foods": {}
},
"Grans": {
"foods": {}
},
"Froitas": {
"foods": {}
},
"Vexetais": {
"foods": {}
},
"Carne": {
"foods": {}
},
"Marisco": {
"foods": {}
},
"Bebidas": {
"foods": {}
},
"Padaría": {
"foods": {}
},
"Latas": {
"foods": {}
},
"Condimentos": {
"foods": {}
},
"Repostería": {
"foods": {}
},
"Lácteos": {
"foods": {}
},
"Conxelados": {
"foods": {}
},
"Alimentos saudables": {
"foods": {}
},
"Casa": {
"foods": {}
},
"Produtos cárnicos": {
"foods": {}
},
"Petiscos": {
"foods": {}
},
"Especias": {
"foods": {}
},
"Doces": {
"foods": {}
},
"Alcol": {
"foods": {}
},
"Outros": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "דלעת ערמונים"
},
@ -690,3 +692,68 @@
"plural_name": "זוקיני"
}
}
},
"מוצר": {
"foods": {}
},
"דגנים": {
"foods": {}
},
"פירות": {
"foods": {}
},
"ירקות": {
"foods": {}
},
"בשר": {
"foods": {}
},
"מאכלי ים": {
"foods": {}
},
"משקאות": {
"foods": {}
},
"מאפים": {
"foods": {}
},
"פחיות שימורים": {
"foods": {}
},
"רטבים": {
"foods": {}
},
"מתוקים": {
"foods": {}
},
"מוצרי חלב": {
"foods": {}
},
"אוכל קפוא": {
"foods": {}
},
"אוכל בריאותי": {
"foods": {}
},
"משק בית": {
"foods": {}
},
"מוצרי בשר": {
"foods": {}
},
"חטיפים": {
"foods": {}
},
"תבלינים": {
"foods": {}
},
"ממתקים": {
"foods": {}
},
"אלכוהול": {
"foods": {}
},
"אחר": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "kupusnjača"
},
@ -690,3 +692,65 @@
"plural_name": "zucchinis"
}
}
},
"Svježe namirnice": {
"foods": {}
},
"Žitarice": {
"foods": {}
},
"Voće": {
"foods": {}
},
"Povrće": {
"foods": {}
},
"Meso": {
"foods": {}
},
"Plodovi mora": {
"foods": {}
},
"Piće": {
"foods": {}
},
"Pečeni proizvodi": {
"foods": {}
},
"Konzervirani proizvodi": {
"foods": {}
},
"Začini": {
"foods": {}
},
"Konditorski proizvodi": {
"foods": {}
},
"Mliječni proizvod": {
"foods": {}
},
"Smrznuta hrana": {
"foods": {}
},
"Zdrava Hrana": {
"foods": {}
},
"Kućanstvo": {
"foods": {}
},
"Mesni proizvodi": {
"foods": {}
},
"Grickalice": {
"foods": {}
},
"Slatkiši": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Ostalo": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "makktök"
},
@ -690,3 +692,68 @@
"plural_name": "cukkini"
}
}
},
"Termesztett növények": {
"foods": {}
},
"Gabonafélék": {
"foods": {}
},
"Gyümölcsök": {
"foods": {}
},
"Zöldségek": {
"foods": {}
},
"Hús": {
"foods": {}
},
"Tenger gyümölcsei": {
"foods": {}
},
"Italok": {
"foods": {}
},
"Péksütemény": {
"foods": {}
},
"Konzervek": {
"foods": {}
},
"Ételízesítők": {
"foods": {}
},
"Cukrászat": {
"foods": {}
},
"Tejtermékek": {
"foods": {}
},
"Fagyasztott Ételek": {
"foods": {}
},
"Egészséges Ételek": {
"foods": {}
},
"Háztartás": {
"foods": {}
},
"Húskészítmények": {
"foods": {}
},
"Nassolnivalók": {
"foods": {}
},
"Fűszerek": {
"foods": {}
},
"Édességek": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Egyéb": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Produce": {
"foods": {}
},
"Grains": {
"foods": {}
},
"Fruits": {
"foods": {}
},
"Vegetables": {
"foods": {}
},
"Meat": {
"foods": {}
},
"Seafood": {
"foods": {}
},
"Beverages": {
"foods": {}
},
"Baked Goods": {
"foods": {}
},
"Canned Goods": {
"foods": {}
},
"Condiments": {
"foods": {}
},
"Confectionary": {
"foods": {}
},
"Dairy Products": {
"foods": {}
},
"Frozen Foods": {
"foods": {}
},
"Health Foods": {
"foods": {}
},
"Household": {
"foods": {}
},
"Meat Products": {
"foods": {}
},
"Snacks": {
"foods": {}
},
"Spices": {
"foods": {}
},
"Sweets": {
"foods": {}
},
"Alcohol": {
"foods": {}
},
"Other": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "zucca di ghianda"
},
@ -690,3 +692,68 @@
"plural_name": "zucchine"
}
}
},
"Prodotti": {
"foods": {}
},
"Cereali": {
"foods": {}
},
"Frutta": {
"foods": {}
},
"Verdure": {
"foods": {}
},
"Carne": {
"foods": {}
},
"Frutti di Mare": {
"foods": {}
},
"Bevande": {
"foods": {}
},
"Prodotti da Forno": {
"foods": {}
},
"Cibi in Scatola": {
"foods": {}
},
"Condimenti": {
"foods": {}
},
"Pasticceria": {
"foods": {}
},
"Latticini": {
"foods": {}
},
"Alimenti Congelati": {
"foods": {}
},
"Alimenti Per La Salute": {
"foods": {}
},
"Prodotti per la Casa": {
"foods": {}
},
"Prodotti Di Carne": {
"foods": {}
},
"Spuntini": {
"foods": {}
},
"Spezie": {
"foods": {}
},
"Dolci": {
"foods": {}
},
"Alcol": {
"foods": {}
},
"Altro": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "どんぐりかぼちゃ"
},
@ -690,3 +692,68 @@
"plural_name": "ズッキーニ"
}
}
},
"青果物": {
"foods": {}
},
"穀物": {
"foods": {}
},
"果物": {
"foods": {}
},
"野菜": {
"foods": {}
},
"肉": {
"foods": {}
},
"魚介類": {
"foods": {}
},
"飲料": {
"foods": {}
},
"焼き物": {
"foods": {}
},
"缶詰": {
"foods": {}
},
"調味料": {
"foods": {}
},
"砂糖菓子": {
"foods": {}
},
"乳製品": {
"foods": {}
},
"冷凍食品": {
"foods": {}
},
"健康食品": {
"foods": {}
},
"家庭": {
"foods": {}
},
"食肉製品": {
"foods": {}
},
"おやつ": {
"foods": {}
},
"香辛料": {
"foods": {}
},
"お菓子": {
"foods": {}
},
"お酒": {
"foods": {}
},
"その他": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,65 @@
"plural_name": "zucchinis"
}
}
},
"Produce": {
"foods": {}
},
"곡물": {
"foods": {}
},
"과일류": {
"foods": {}
},
"채소": {
"foods": {}
},
"육류": {
"foods": {}
},
"해산물": {
"foods": {}
},
"음료": {
"foods": {}
},
"제빵 음식": {
"foods": {}
},
"Canned Goods": {
"foods": {}
},
"조미료": {
"foods": {}
},
"Confectionary": {
"foods": {}
},
"유제품": {
"foods": {}
},
"Frozen Foods": {
"foods": {}
},
"Health Foods": {
"foods": {}
},
"Household": {
"foods": {}
},
"Meat Products": {
"foods": {}
},
"간식": {
"foods": {}
},
"Sweets": {
"foods": {}
},
"주류": {
"foods": {}
},
"기타": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Produktai": {
"foods": {}
},
"Grūdai": {
"foods": {}
},
"Vaisiai": {
"foods": {}
},
"Daržovės": {
"foods": {}
},
"Mėsa": {
"foods": {}
},
"Jūros gėrybės": {
"foods": {}
},
"Gėrimai": {
"foods": {}
},
"Kepiniai": {
"foods": {}
},
"Konservuoti produktai": {
"foods": {}
},
"Padažai": {
"foods": {}
},
"Konditerijos gaminiai": {
"foods": {}
},
"Pieno produktai": {
"foods": {}
},
"Šaldyti produktai": {
"foods": {}
},
"Sveikas maistas": {
"foods": {}
},
"Buitinės prekės": {
"foods": {}
},
"Mėsos produktai": {
"foods": {}
},
"Užkandžiai": {
"foods": {}
},
"Prieskoniai": {
"foods": {}
},
"Saldumynai": {
"foods": {}
},
"Alkoholiniai gėrimai": {
"foods": {}
},
"Kita": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "ozolzīles skvošs"
},
@ -690,3 +692,65 @@
"plural_name": "cukini"
}
}
},
"Gatavot": {
"foods": {}
},
"Labība": {
"foods": {}
},
"Augļi": {
"foods": {}
},
"Dārzeņi": {
"foods": {}
},
"Gaļa": {
"foods": {}
},
"Jūras veltes": {
"foods": {}
},
"Dzērieni": {
"foods": {}
},
"Ceptas preces": {
"foods": {}
},
"Konservētas preces": {
"foods": {}
},
"Garšvielas": {
"foods": {}
},
"Konditorejas izstrādājumi": {
"foods": {}
},
"Piena produkti": {
"foods": {}
},
"Saldēti pārtikas produkti": {
"foods": {}
},
"Veselīga pārtika": {
"foods": {}
},
"Mājsaimniecība": {
"foods": {}
},
"Gaļas produkti": {
"foods": {}
},
"Uzkodas": {
"foods": {}
},
"Saldumi": {
"foods": {}
},
"Alkohols": {
"foods": {}
},
"Cits": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "eikelpompoen"
},
@ -690,3 +692,68 @@
"plural_name": "courgettes"
}
}
},
"Groenten en fruit": {
"foods": {}
},
"Granen": {
"foods": {}
},
"Fruit": {
"foods": {}
},
"Groenten": {
"foods": {}
},
"Vlees": {
"foods": {}
},
"Zeevruchten": {
"foods": {}
},
"Dranken": {
"foods": {}
},
"Gebakken producten": {
"foods": {}
},
"Ingeblikt eten": {
"foods": {}
},
"Specerijen": {
"foods": {}
},
"Zoetigheden": {
"foods": {}
},
"Zuivelproducten": {
"foods": {}
},
"Bevroren eten": {
"foods": {}
},
"Gezond eten": {
"foods": {}
},
"Huishouden": {
"foods": {}
},
"Vleesproducten": {
"foods": {}
},
"Snacks": {
"foods": {}
},
"Kruiden": {
"foods": {}
},
"Snoepgoed": {
"foods": {}
},
"Alcohol": {
"foods": {}
},
"Anders": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "pepper squash"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Jordbruksprodukt": {
"foods": {}
},
"Korn": {
"foods": {}
},
"Frukt": {
"foods": {}
},
"Grønnsaker": {
"foods": {}
},
"Kjøtt": {
"foods": {}
},
"Sjømat": {
"foods": {}
},
"Drikkevarer": {
"foods": {}
},
"Bakevarer": {
"foods": {}
},
"Hermetikk": {
"foods": {}
},
"Tilbehør": {
"foods": {}
},
"Konfekt": {
"foods": {}
},
"Meieriprodukter": {
"foods": {}
},
"Frossen mat": {
"foods": {}
},
"Helsekost": {
"foods": {}
},
"Husholdning": {
"foods": {}
},
"Kjøttprodukter": {
"foods": {}
},
"Snacks": {
"foods": {}
},
"Krydder": {
"foods": {}
},
"Søtsaker": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Annet": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "dynia żołędziowa"
},
@ -690,3 +692,65 @@
"plural_name": "cukinie"
}
}
},
"Wyroby": {
"foods": {}
},
"Ziarna": {
"foods": {}
},
"Owoce": {
"foods": {}
},
"Warzywa": {
"foods": {}
},
"Mięso": {
"foods": {}
},
"Owoce morza": {
"foods": {}
},
"Napoje": {
"foods": {}
},
"Wyroby piekarnicze": {
"foods": {}
},
"Wyroby puszkowe": {
"foods": {}
},
"Przyprawy": {
"foods": {}
},
"Wyroby cukiernicze": {
"foods": {}
},
"Nabiał": {
"foods": {}
},
"Mrożona żywność": {
"foods": {}
},
"Żywność zdrowotna": {
"foods": {}
},
"Wyroby gospodarstwa domowego": {
"foods": {}
},
"Produkty mięsne": {
"foods": {}
},
"Przekąski": {
"foods": {}
},
"Słodycze": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Inne": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "abóbora-bolota"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Verdura": {
"foods": {}
},
"Grãos": {
"foods": {}
},
"Frutas": {
"foods": {}
},
"Legumes": {
"foods": {}
},
"Carne": {
"foods": {}
},
"Frutos do mar": {
"foods": {}
},
"Bebidas": {
"foods": {}
},
"Produtos cozidos": {
"foods": {}
},
"Enlatados": {
"foods": {}
},
"Condimentos": {
"foods": {}
},
"Confeitaria": {
"foods": {}
},
"Lacticínios": {
"foods": {}
},
"Alimentos Congelados": {
"foods": {}
},
"Alimentos saudáveis": {
"foods": {}
},
"Casa": {
"foods": {}
},
"Produtos de carne": {
"foods": {}
},
"Lanches": {
"foods": {}
},
"Temperos": {
"foods": {}
},
"Doces": {
"foods": {}
},
"Álcool": {
"foods": {}
},
"Outros": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "abóbora-bolota"
},
@ -690,3 +692,68 @@
"plural_name": "curgetes"
}
}
},
"Produto": {
"foods": {}
},
"Grãos": {
"foods": {}
},
"Frutas": {
"foods": {}
},
"Vegetais": {
"foods": {}
},
"Carne": {
"foods": {}
},
"Marisco": {
"foods": {}
},
"Bebidas": {
"foods": {}
},
"Produtos de pastelaria": {
"foods": {}
},
"Enlatados": {
"foods": {}
},
"Condimentos": {
"foods": {}
},
"Confeitaria": {
"foods": {}
},
"Lacticínios": {
"foods": {}
},
"Congelados": {
"foods": {}
},
"Alimentos para Saúde": {
"foods": {}
},
"Casa": {
"foods": {}
},
"Produtos à base de carne": {
"foods": {}
},
"Petiscos": {
"foods": {}
},
"Especiarias": {
"foods": {}
},
"Doces": {
"foods": {}
},
"Álcool": {
"foods": {}
},
"Outros": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "dovleac ghindă"
},
@ -690,3 +692,65 @@
"plural_name": "dovlecei"
}
}
},
"Produs": {
"foods": {}
},
"Cereale": {
"foods": {}
},
"Fructe": {
"foods": {}
},
"Legume": {
"foods": {}
},
"Carne": {
"foods": {}
},
"Fructe de Mare": {
"foods": {}
},
"Băuturi": {
"foods": {}
},
"Produse coapte": {
"foods": {}
},
"Produse conservate": {
"foods": {}
},
"Condimente": {
"foods": {}
},
"Cofetărie": {
"foods": {}
},
"Produse lactate": {
"foods": {}
},
"Alimente înghețate": {
"foods": {}
},
"Mâncare Sănătoasă": {
"foods": {}
},
"Gospodărie": {
"foods": {}
},
"Produse din carne": {
"foods": {}
},
"Gustări": {
"foods": {}
},
"Dulciuri": {
"foods": {}
},
"Alcool": {
"foods": {}
},
"Altele": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "желудевый сквош"
},
@ -690,3 +692,68 @@
"plural_name": "цуккини"
}
}
},
"Свежие Овощи&фрукты": {
"foods": {}
},
"Крупы": {
"foods": {}
},
"Фрукты": {
"foods": {}
},
"Овощи": {
"foods": {}
},
"Мясо": {
"foods": {}
},
"Морепродукты": {
"foods": {}
},
"Напитки": {
"foods": {}
},
"Выпечка": {
"foods": {}
},
"Консервы": {
"foods": {}
},
"Приправы": {
"foods": {}
},
"Кондитерские изделия": {
"foods": {}
},
"Молочные продукты": {
"foods": {}
},
"Замороженные продукты": {
"foods": {}
},
"Здоровая еда": {
"foods": {}
},
"Домашняя": {
"foods": {}
},
"Мясные продукты": {
"foods": {}
},
"Закуски": {
"foods": {}
},
"Специи": {
"foods": {}
},
"Сладости": {
"foods": {}
},
"Алкоголь": {
"foods": {}
},
"Другое": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "žaluďová tekvica"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Produkovať": {
"foods": {}
},
"Zrná": {
"foods": {}
},
"Ovocie": {
"foods": {}
},
"Zelenina": {
"foods": {}
},
"Mäso": {
"foods": {}
},
"Morské plody": {
"foods": {}
},
"Nápoje": {
"foods": {}
},
"Pečivo": {
"foods": {}
},
"Konzervy": {
"foods": {}
},
"Koreniny": {
"foods": {}
},
"Cukrovinky": {
"foods": {}
},
"Mliečne výrobky": {
"foods": {}
},
"Mrazené jedlá": {
"foods": {}
},
"Zdravé jedlá": {
"foods": {}
},
"Domácnosť": {
"foods": {}
},
"Mäsové výrobky": {
"foods": {}
},
"Občerstvenie": {
"foods": {}
},
"Korenie": {
"foods": {}
},
"Sladkosti": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Ostatné": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "želodova buča"
},
@ -690,3 +692,65 @@
"plural_name": "bučke"
}
}
},
"Pridelek": {
"foods": {}
},
"Zrna": {
"foods": {}
},
"Sadje": {
"foods": {}
},
"Zelenjava": {
"foods": {}
},
"Meso": {
"foods": {}
},
"Morska hrana": {
"foods": {}
},
"Pijače": {
"foods": {}
},
"Pečene dobrote": {
"foods": {}
},
"Konzervirana hrana": {
"foods": {}
},
"Začimbe": {
"foods": {}
},
"Slaščičarna": {
"foods": {}
},
"Mlečni produkti": {
"foods": {}
},
"Zmrznjena hrana": {
"foods": {}
},
"Zdrava hrana": {
"foods": {}
},
"Gospodinjstvo": {
"foods": {}
},
"Mesni produkti": {
"foods": {}
},
"Priboljški": {
"foods": {}
},
"Sladkarije": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Drugo": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,65 @@
"plural_name": "zucchinis"
}
}
},
"Домаћи производи": {
"foods": {}
},
"Житарице": {
"foods": {}
},
"Воће": {
"foods": {}
},
"Поврће": {
"foods": {}
},
"Месо": {
"foods": {}
},
"Морски плодови": {
"foods": {}
},
"Пића": {
"foods": {}
},
"Пецива": {
"foods": {}
},
"Конзервирана храна": {
"foods": {}
},
"Зачини": {
"foods": {}
},
"Кондиторски производи": {
"foods": {}
},
"Млечни производи": {
"foods": {}
},
"Смрзнута храна": {
"foods": {}
},
"Здрава храна": {
"foods": {}
},
"Домаћинство": {
"foods": {}
},
"Месни производи": {
"foods": {}
},
"Грицкалице": {
"foods": {}
},
"Слаткиши": {
"foods": {}
},
"Алкохол": {
"foods": {}
},
"Остало": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "peppar squash"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinins"
}
}
},
"Jordbruksprodukter": {
"foods": {}
},
"Spannmål": {
"foods": {}
},
"Frukter": {
"foods": {}
},
"Grönsaker": {
"foods": {}
},
"Kött": {
"foods": {}
},
"Fisk- och skaldjur": {
"foods": {}
},
"Drycker": {
"foods": {}
},
"Bakverk": {
"foods": {}
},
"Konserver": {
"foods": {}
},
"Smaktillsatser": {
"foods": {}
},
"Konfektyr": {
"foods": {}
},
"Mejeriprodukter": {
"foods": {}
},
"Frysta livsmedel": {
"foods": {}
},
"Hälsolivsmedel": {
"foods": {}
},
"Hushåll": {
"foods": {}
},
"Köttprodukter": {
"foods": {}
},
"Tilltugg": {
"foods": {}
},
"Kryddor": {
"foods": {}
},
"Sötsaker": {
"foods": {}
},
"Alkohol": {
"foods": {}
},
"Övrigt": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "meşe palamudu kabağı"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"Sebze-Meyve": {
"foods": {}
},
"Hububat": {
"foods": {}
},
"Meyveler": {
"foods": {}
},
"Sebzeler": {
"foods": {}
},
"Et": {
"foods": {}
},
"Deniz Ürünleri": {
"foods": {}
},
"İçecekler": {
"foods": {}
},
"Unlu Mamüller": {
"foods": {}
},
"Konserve Ürünleri": {
"foods": {}
},
"Çeşniler": {
"foods": {}
},
"Şekerleme": {
"foods": {}
},
"Süt Ürünleri": {
"foods": {}
},
"Donmuş Gıdalar": {
"foods": {}
},
"Sağlıklı Gıdalar": {
"foods": {}
},
"Ev Halkı": {
"foods": {}
},
"Et Ürünleri": {
"foods": {}
},
"Atıştırmalıklar": {
"foods": {}
},
"Baharatlar": {
"foods": {}
},
"Tatlılar": {
"foods": {}
},
"Alkol": {
"foods": {}
},
"Diğer": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "гарбуз акорн"
},
@ -690,3 +692,68 @@
"plural_name": "цукіні"
}
}
},
"Продукти": {
"foods": {}
},
"Зерна": {
"foods": {}
},
"Фрукти": {
"foods": {}
},
"Овочі": {
"foods": {}
},
"М’ясо": {
"foods": {}
},
"Морепродукти": {
"foods": {}
},
"Напої": {
"foods": {}
},
"Печені страви": {
"foods": {}
},
"Консерви": {
"foods": {}
},
"Приправи": {
"foods": {}
},
"Солодощі": {
"foods": {}
},
"Молочні продукти": {
"foods": {}
},
"Заморожені продукти": {
"foods": {}
},
"Здорова їжа": {
"foods": {}
},
"Сім'я": {
"foods": {}
},
"М'ясні Продукти": {
"foods": {}
},
"Закуски": {
"foods": {}
},
"Спеції": {
"foods": {}
},
"Cолодощі": {
"foods": {}
},
"Алкоголь": {
"foods": {}
},
"Інше": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,65 @@
"plural_name": "zucchinis"
}
}
},
"Rau củ": {
"foods": {}
},
"Các loại hạt": {
"foods": {}
},
"Trái cây": {
"foods": {}
},
"Thịt": {
"foods": {}
},
"Hải sản": {
"foods": {}
},
"Đồ uống": {
"foods": {}
},
"Bánh": {
"foods": {}
},
"Đồ hộp": {
"foods": {}
},
"Đồ gia vị": {
"foods": {}
},
"Kẹo": {
"foods": {}
},
"Sản phẩm từ sữa": {
"foods": {}
},
"Đồ đông lạnh": {
"foods": {}
},
"Đồ tốt cho sức khỏe": {
"foods": {}
},
"Gia đình": {
"foods": {}
},
"Sản phẩm thịt": {
"foods": {}
},
"Đồ ăn vặt": {
"foods": {}
},
"Gia vị": {
"foods": {}
},
"Đồ ngọt": {
"foods": {}
},
"Cồn": {
"foods": {}
},
"Khác": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "橡果南瓜"
},
@ -690,3 +692,65 @@
"plural_name": "zucchinis"
}
}
},
"农产品": {
"foods": {}
},
"谷物": {
"foods": {}
},
"水果": {
"foods": {}
},
"蔬菜": {
"foods": {}
},
"肉类": {
"foods": {}
},
"海鲜": {
"foods": {}
},
"饮料": {
"foods": {}
},
"烘焙食品": {
"foods": {}
},
"罐头食品": {
"foods": {}
},
"调味品": {
"foods": {}
},
"糖果类": {
"foods": {}
},
"乳制品": {
"foods": {}
},
"冷冻食品": {
"foods": {}
},
"健康食品": {
"foods": {}
},
"家庭": {
"foods": {}
},
"肉制品": {
"foods": {}
},
"零食": {
"foods": {}
},
"甜食": {
"foods": {}
},
"酒类": {
"foods": {}
},
"其它": {
"foods": {}
}
}

View file

@ -1,4 +1,6 @@
{
"": {
"foods": {
"acorn-squash": {
"name": "acorn squash"
},
@ -690,3 +692,68 @@
"plural_name": "zucchinis"
}
}
},
"生產": {
"foods": {}
},
"穀物": {
"foods": {}
},
"水果": {
"foods": {}
},
"蔬菜": {
"foods": {}
},
"肉類": {
"foods": {}
},
"海鮮": {
"foods": {}
},
"飲料": {
"foods": {}
},
"烘培食品": {
"foods": {}
},
"罐頭食品": {
"foods": {}
},
"調料": {
"foods": {}
},
"甜品": {
"foods": {}
},
"奶類": {
"foods": {}
},
"冷凍食物": {
"foods": {}
},
"健康食品": {
"foods": {}
},
"家庭": {
"foods": {}
},
"肉類食品": {
"foods": {}
},
"零食": {
"foods": {}
},
"香料": {
"foods": {}
},
"甜食": {
"foods": {}
},
"酒精類": {
"foods": {}
},
"其它": {
"foods": {}
}
}

View file

@ -3,12 +3,17 @@ import pathlib
from collections.abc import Generator
from functools import cached_property
from mealie.schema.labels import MultiPurposeLabelSave
from mealie.schema.recipe.recipe_ingredient import SaveIngredientFood, SaveIngredientUnit
from mealie.schema.labels import MultiPurposeLabelOut, MultiPurposeLabelSave
from mealie.schema.recipe.recipe_ingredient import (
IngredientFood,
IngredientUnit,
SaveIngredientFood,
SaveIngredientUnit,
)
from mealie.services.group_services.labels_service import MultiPurposeLabelService
from ._abstract_seeder import AbstractSeeder
from .resources import foods, labels, units
from .resources import foods, units
class MultiPurposeLabelSeeder(AbstractSeeder):
@ -17,20 +22,24 @@ class MultiPurposeLabelSeeder(AbstractSeeder):
return MultiPurposeLabelService(self.repos)
def get_file(self, locale: str | None = None) -> pathlib.Path:
locale_path = self.resources / "labels" / "locales" / f"{locale}.json"
return locale_path if locale_path.exists() else labels.en_US
# Get the labels from the foods seed file now
locale_path = self.resources / "foods" / "locales" / f"{locale}.json"
return locale_path if locale_path.exists() else foods.en_US
def get_all_labels(self) -> list[MultiPurposeLabelOut]:
return self.repos.group_multi_purpose_labels.get_all()
def load_data(self, locale: str | None = None) -> Generator[MultiPurposeLabelSave, None, None]:
file = self.get_file(locale)
seen_label_names = set()
for label in json.loads(file.read_text(encoding="utf-8")):
if label["name"] in seen_label_names:
continue
seen_label_names.add(label["name"])
current_label_names = {label.name for label in self.get_all_labels()}
# load from the foods locale file and remove any empty strings
seed_label_names = set(filter(None, json.loads(file.read_text(encoding="utf-8")).keys())) # type: set[str]
# only seed new labels
to_seed_labels = seed_label_names - current_label_names
for label in to_seed_labels:
yield MultiPurposeLabelSave(
name=label["name"],
name=label,
group_id=self.repos.group_id,
)
@ -48,10 +57,13 @@ class IngredientUnitsSeeder(AbstractSeeder):
locale_path = self.resources / "units" / "locales" / f"{locale}.json"
return locale_path if locale_path.exists() else units.en_US
def get_all_units(self) -> list[IngredientUnit]:
return self.repos.ingredient_units.get_all()
def load_data(self, locale: str | None = None) -> Generator[SaveIngredientUnit, None, None]:
file = self.get_file(locale)
seen_unit_names = set()
seen_unit_names = {unit.name for unit in self.get_all_units()}
for unit in json.loads(file.read_text(encoding="utf-8")).values():
if unit["name"] in seen_unit_names:
continue
@ -80,20 +92,31 @@ class IngredientFoodsSeeder(AbstractSeeder):
locale_path = self.resources / "foods" / "locales" / f"{locale}.json"
return locale_path if locale_path.exists() else foods.en_US
def get_label(self, value: str) -> MultiPurposeLabelOut | None:
return self.repos.group_multi_purpose_labels.get_one(value, "name")
def get_all_foods(self) -> list[IngredientFood]:
return self.repos.ingredient_foods.get_all()
def load_data(self, locale: str | None = None) -> Generator[SaveIngredientFood, None, None]:
file = self.get_file(locale)
seed_foods_names = set()
for food in json.loads(file.read_text(encoding="utf-8")).values():
if food["name"] in seed_foods_names:
# get all current unique foods
seen_foods_names = {food.name for food in self.get_all_foods()}
for label, values in json.loads(file.read_text(encoding="utf-8")).items():
label_out = self.get_label(label)
for food_name, attributes in values["foods"].items():
if food_name in seen_foods_names:
continue
seed_foods_names.add(food["name"])
seen_foods_names.add(food_name)
yield SaveIngredientFood(
group_id=self.repos.group_id,
name=food["name"],
plural_name=food.get("plural_name"),
description="",
name=attributes["name"],
plural_name=attributes.get("plural_name"),
description="", # description expected to be empty string by UnitFoodBase class
label_id=label_out.id if label_out and label_out.id else None,
)
def seed(self, locale: str | None = None) -> None:

View file

@ -12,7 +12,7 @@ def test_seed_invalid_locale(api_client: TestClient, unique_user: TestUser):
def test_seed_foods(api_client: TestClient, unique_user: TestUser):
CREATED_FOODS = 214
CREATED_FOODS = 2687
database = unique_user.repos
# Check that the foods was created
@ -44,7 +44,7 @@ def test_seed_units(api_client: TestClient, unique_user: TestUser):
def test_seed_labels(api_client: TestClient, unique_user: TestUser):
CREATED_LABELS = 21
CREATED_LABELS = 32
database = unique_user.repos
# Check that the foods was created

View file

@ -99,7 +99,7 @@ def test_new_label_creates_list_labels_in_all_households(
def test_seed_label_creates_list_labels(api_client: TestClient, unique_user: TestUser):
CREATED_LABELS = 21
CREATED_LABELS = 32
database = unique_user.repos
# create a list with some labels