Merge branch 'mealie-next' into openai-mime-type-fix

This commit is contained in:
Will Ratner 2025-08-04 21:51:43 -04:00 committed by GitHub
commit 86126c335e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 195 additions and 191 deletions

View file

@ -12,7 +12,7 @@ repos:
exclude: ^tests/data/ exclude: ^tests/data/
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version. # Ruff version.
rev: v0.12.5 rev: v0.12.7
hooks: hooks:
- id: ruff - id: ruff
- id: ruff-format - id: ruff-format

View file

@ -1,5 +1,8 @@
# Installing with PostgreSQL # Installing with PostgreSQL
!!! Warning
When upgrading postgresql major versions, manual steps are required [Postgres#37](https://github.com/docker-library/postgres/issues/37).
PostgreSQL might be considered if you need to support many concurrent users. In addition, some features are only enabled on PostgreSQL, such as fuzzy search. PostgreSQL might be considered if you need to support many concurrent users. In addition, some features are only enabled on PostgreSQL, such as fuzzy search.
**For Environment Variable Configuration, see** [Backend Configuration](./backend-config.md) **For Environment Variable Configuration, see** [Backend Configuration](./backend-config.md)
@ -38,7 +41,7 @@ services:
postgres: postgres:
container_name: postgres container_name: postgres
image: postgres:15 image: postgres:17
restart: always restart: always
volumes: volumes:
- mealie-pgdata:/var/lib/postgresql/data - mealie-pgdata:/var/lib/postgresql/data
@ -46,6 +49,7 @@ services:
POSTGRES_PASSWORD: mealie POSTGRES_PASSWORD: mealie
POSTGRES_USER: mealie POSTGRES_USER: mealie
PGUSER: mealie PGUSER: mealie
POSTGRES_DB: mealie
healthcheck: healthcheck:
test: ["CMD", "pg_isready"] test: ["CMD", "pg_isready"]
interval: 30s interval: 30s

View file

@ -69,7 +69,7 @@ export const LOCALES = [
{ {
name: "Português (Portuguese)", name: "Português (Portuguese)",
value: "pt-PT", value: "pt-PT",
progress: 37, progress: 38,
dir: "ltr", dir: "ltr",
}, },
{ {
@ -81,7 +81,7 @@ export const LOCALES = [
{ {
name: "Polski (Polish)", name: "Polski (Polish)",
value: "pl-PL", value: "pl-PL",
progress: 37, progress: 39,
dir: "ltr", dir: "ltr",
}, },
{ {
@ -147,7 +147,7 @@ export const LOCALES = [
{ {
name: "עברית (Hebrew)", name: "עברית (Hebrew)",
value: "he-IL", value: "he-IL",
progress: 67, progress: 73,
dir: "rtl", dir: "rtl",
}, },
{ {
@ -159,7 +159,7 @@ export const LOCALES = [
{ {
name: "Français (French)", name: "Français (French)",
value: "fr-FR", value: "fr-FR",
progress: 49, progress: 50,
dir: "ltr", dir: "ltr",
}, },
{ {
@ -189,7 +189,7 @@ export const LOCALES = [
{ {
name: "Español (Spanish)", name: "Español (Spanish)",
value: "es-ES", value: "es-ES",
progress: 40, progress: 41,
dir: "ltr", dir: "ltr",
}, },
{ {
@ -207,25 +207,25 @@ export const LOCALES = [
{ {
name: "Ελληνικά (Greek)", name: "Ελληνικά (Greek)",
value: "el-GR", value: "el-GR",
progress: 38, progress: 39,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Deutsch (German)", name: "Deutsch (German)",
value: "de-DE", value: "de-DE",
progress: 64, progress: 65,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Dansk (Danish)", name: "Dansk (Danish)",
value: "da-DK", value: "da-DK",
progress: 38, progress: 39,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Čeština (Czech)", name: "Čeština (Czech)",
value: "cs-CZ", value: "cs-CZ",
progress: 39, progress: 40,
dir: "ltr", dir: "ltr",
}, },
{ {

View file

@ -113,7 +113,7 @@
"get": "Envoyer", "get": "Envoyer",
"home": "Accueil", "home": "Accueil",
"image": "Image", "image": "Image",
"image-upload-failed": "Le téléchargement de limage a échoué", "image-upload-failed": "Le téléversement de limage a échoué",
"import": "Importer", "import": "Importer",
"json": "JSON", "json": "JSON",
"keyword": "Mot-clé", "keyword": "Mot-clé",
@ -207,7 +207,7 @@
"selected-count": "Sélectionné : {count}", "selected-count": "Sélectionné : {count}",
"export-all": "Exporter tout", "export-all": "Exporter tout",
"refresh": "Actualiser", "refresh": "Actualiser",
"upload-file": "Transférer un fichier", "upload-file": "Téléverser un fichier",
"created-on-date": "Créé le {0}", "created-on-date": "Créé le {0}",
"unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de partir? OK pour enregistrer, Annuler pour ignorer les modifications.", "unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de partir? OK pour enregistrer, Annuler pour ignorer les modifications.",
"clipboard-copy-failure": "Échec de la copie dans le presse-papiers.", "clipboard-copy-failure": "Échec de la copie dans le presse-papiers.",
@ -472,7 +472,7 @@
"comment": "Commentaire", "comment": "Commentaire",
"comments": "Commentaires", "comments": "Commentaires",
"delete-confirmation": "Voulez-vous vraiment supprimer cette recette?", "delete-confirmation": "Voulez-vous vraiment supprimer cette recette?",
"admin-delete-confirmation": "You're about to delete a recipe that isn't yours using admin permissions. Are you sure?", "admin-delete-confirmation": "Vous êtes sur le point de supprimer une recette qui n'est pas la vôtre en utilisant les permissions d'administrateur. Êtes-vous sûr(e) ?",
"delete-recipe": "Supprimer la recette", "delete-recipe": "Supprimer la recette",
"description": "Description", "description": "Description",
"disable-amount": "Désactiver les quantités des ingrédients", "disable-amount": "Désactiver les quantités des ingrédients",
@ -587,7 +587,7 @@
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.", "api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.",
"message-key": "Clé de message", "message-key": "Clé de message",
"parse": "Analyser", "parse": "Analyser",
"ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.", "ingredients-not-parsed-description": "Il semble que vos ingrédients ne soient pas encore analysés. Cliquez sur le bouton \"{parse}\" ci-dessous pour analyser vos ingrédients en aliments structurés.",
"attach-images-hint": "Ajouter des images en les glissant-déposant dans l'éditeur", "attach-images-hint": "Ajouter des images en les glissant-déposant dans l'éditeur",
"drop-image": "Déposer l'image", "drop-image": "Déposer l'image",
"enable-ingredient-amounts-to-use-this-feature": "Activez les quantités d'ingrédients pour utiliser cette fonctionnalité", "enable-ingredient-amounts-to-use-this-feature": "Activez les quantités d'ingrédients pour utiliser cette fonctionnalité",
@ -664,8 +664,8 @@
"no-unit": "Pas d'unité", "no-unit": "Pas d'unité",
"missing-unit": "Créer une unité manquante : {unit}", "missing-unit": "Créer une unité manquante : {unit}",
"missing-food": "Créer un aliment manquant : {food}", "missing-food": "Créer un aliment manquant : {food}",
"this-unit-could-not-be-parsed-automatically": "This unit could not be parsed automatically", "this-unit-could-not-be-parsed-automatically": "Cette unité n'a pas pu être analysée automatiquement",
"this-food-could-not-be-parsed-automatically": "This food could not be parsed automatically", "this-food-could-not-be-parsed-automatically": "Cet aliment n'a pas pu être analysé automatiquement",
"no-food": "Aucun aliment" "no-food": "Aucun aliment"
}, },
"reset-servings-count": "Réinitialiser le nombre de portions", "reset-servings-count": "Réinitialiser le nombre de portions",

View file

@ -47,7 +47,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "oignon rouge", "name": "oignon rouge",
"plural_name": "oignons rouge" "plural_name": "oignons rouges"
}, },
"yellow onion": { "yellow onion": {
"aliases": [], "aliases": [],
@ -105,7 +105,7 @@
}, },
"chile pepper": { "chile pepper": {
"aliases": [ "aliases": [
"poivron" "capsicum"
], ],
"description": "", "description": "",
"name": "piment", "name": "piment",
@ -162,8 +162,8 @@
"kale": { "kale": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chou frisé", "name": "chou kale",
"plural_name": "choux frisés" "plural_name": "choux kale"
}, },
"arugula": { "arugula": {
"aliases": [], "aliases": [],
@ -193,7 +193,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "courge butternut", "name": "courge butternut",
"plural_name": "courge butternut" "plural_name": "courges butternut"
}, },
"romaine": { "romaine": {
"aliases": [], "aliases": [],
@ -235,7 +235,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chou rouge", "name": "chou rouge",
"plural_name": "choux rouge" "plural_name": "choux rouges"
}, },
"artichoke": { "artichoke": {
"aliases": [], "aliases": [],
@ -252,7 +252,7 @@
"summer squash": { "summer squash": {
"aliases": [ "aliases": [
"courgette", "courgette",
"gem squash" "courge gem"
], ],
"description": "", "description": "",
"name": "courge d'été", "name": "courge d'été",
@ -261,8 +261,8 @@
"mixed green": { "mixed green": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed green", "name": "mesclun",
"plural_name": "mixed greens" "plural_name": "mesclun"
}, },
"parsnip": { "parsnip": {
"aliases": [], "aliases": [],
@ -303,7 +303,7 @@
"cayenne pepper": { "cayenne pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pimment de Cayenne", "name": "piment de Cayenne",
"plural_name": "piments de Cayenne" "plural_name": "piments de Cayenne"
}, },
"green tomato": { "green tomato": {
@ -352,7 +352,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "courge spaghetti", "name": "courge spaghetti",
"plural_name": "courges spaghettis" "plural_name": "courges spaghetti"
}, },
"butter lettuce": { "butter lettuce": {
"aliases": [], "aliases": [],
@ -413,8 +413,8 @@
"acorn squash": { "acorn squash": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "acorn squash", "name": "courgeron",
"plural_name": "acorn squashes" "plural_name": "courgerons"
}, },
"corn cob": { "corn cob": {
"aliases": [], "aliases": [],
@ -437,8 +437,8 @@
"tenderstem broccoli": { "tenderstem broccoli": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "tenderstem broccoli", "name": "broccolini",
"plural_name": "tenderstem broccolis" "plural_name": "broccolini"
}, },
"plantain": { "plantain": {
"aliases": [], "aliases": [],
@ -541,14 +541,14 @@
"ancho chile pepper": { "ancho chile pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "ancho chile pepper", "name": "piment ancho",
"plural_name": "ancho chile peppers" "plural_name": "piments ancho"
}, },
"microgreen": { "microgreen": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "microgreen", "name": "micropousse",
"plural_name": "microgreens" "plural_name": "micropousses"
}, },
"boston lettuce": { "boston lettuce": {
"aliases": [], "aliases": [],
@ -565,8 +565,8 @@
"fresno chile": { "fresno chile": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "fresno chile", "name": "piment fresno",
"plural_name": "fresno chiles" "plural_name": "piments fresno"
}, },
"delicata squash": { "delicata squash": {
"aliases": [], "aliases": [],
@ -589,8 +589,8 @@
"cres": { "cres": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cres", "name": "cresson",
"plural_name": "cress" "plural_name": "cressons"
}, },
"broccoli slaw": { "broccoli slaw": {
"aliases": [], "aliases": [],
@ -619,8 +619,8 @@
"alfalfa": { "alfalfa": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "alfalfa", "name": "luzerne",
"plural_name": "alfalfas" "plural_name": "luzernes"
} }
} }
}, },
@ -917,8 +917,8 @@
"jackfruit": { "jackfruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "jackfruit", "name": "jacquier",
"plural_name": "jackfruits" "plural_name": "jacquiers"
}, },
"dragon fruit": { "dragon fruit": {
"aliases": [], "aliases": [],
@ -1007,8 +1007,8 @@
"apple chip": { "apple chip": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "apple chip", "name": "chips de pomme",
"plural_name": "apple chips" "plural_name": "chips de pomme"
}, },
"mixed peel": { "mixed peel": {
"aliases": [], "aliases": [],
@ -1043,8 +1043,8 @@
"sweet lime": { "sweet lime": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sweet lime", "name": "citron doux",
"plural_name": "sweet limes" "plural_name": "citrons doux"
}, },
"custard-apple": { "custard-apple": {
"aliases": [], "aliases": [],
@ -1061,8 +1061,8 @@
"young jackfruit": { "young jackfruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "young jackfruit", "name": "jeune jacquier",
"plural_name": "young jackfruits" "plural_name": "jeunes jacquiers"
}, },
"durian": { "durian": {
"aliases": [], "aliases": [],
@ -1085,7 +1085,7 @@
"honey date": { "honey date": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "honey date", "name": "sirop de datte",
"plural_name": "honey dates" "plural_name": "honey dates"
}, },
"physali": { "physali": {
@ -1121,8 +1121,8 @@
"bitter orange": { "bitter orange": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "bitter orange", "name": "orange amère",
"plural_name": "bitter oranges" "plural_name": "orange amères"
}, },
"feijoa": { "feijoa": {
"aliases": [], "aliases": [],
@ -1133,8 +1133,8 @@
"dried persimmon": { "dried persimmon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried persimmon", "name": "kaki séché",
"plural_name": "dried persimmons" "plural_name": "kakis séchés"
}, },
"rambutan": { "rambutan": {
"aliases": [], "aliases": [],
@ -1157,8 +1157,8 @@
"loquat": { "loquat": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "loquat", "name": "nèfle",
"plural_name": "loquats" "plural_name": "nèfles"
}, },
"crabapple": { "crabapple": {
"aliases": [], "aliases": [],
@ -1187,8 +1187,8 @@
"soursop": { "soursop": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "soursop", "name": "corossolier",
"plural_name": "soursops" "plural_name": "corossoliers"
}, },
"hog plum": { "hog plum": {
"aliases": [], "aliases": [],
@ -1199,14 +1199,14 @@
"bergamot orange": { "bergamot orange": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "bergamot orange", "name": "bergamote orange",
"plural_name": "bergamot oranges" "plural_name": "bergamotes oranges"
}, },
"luo han guo": { "luo han guo": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "luo han guo", "name": "fruit de moine",
"plural_name": "luo han guos" "plural_name": "fruits de moine"
}, },
"mamey": { "mamey": {
"aliases": [], "aliases": [],
@ -1230,7 +1230,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kiwano", "name": "kiwano",
"plural_name": "kiwanoes" "plural_name": "kiwanos"
} }
} }
}, },
@ -1269,14 +1269,14 @@
"mixed mushroom": { "mixed mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed mushroom", "name": "champignon (mélange)",
"plural_name": "mixed mushrooms" "plural_name": "champignons (mélange)"
}, },
"oyster mushroom": { "oyster mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "oyster mushroom", "name": "pleurote en huître",
"plural_name": "oyster mushrooms" "plural_name": "pleurotes en huître"
}, },
"chestnut mushroom": { "chestnut mushroom": {
"aliases": [], "aliases": [],
@ -1419,8 +1419,8 @@
"puffball": { "puffball": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "puffball", "name": "vesse-de-loup",
"plural_name": "puffballs" "plural_name": "vesses-de-loup"
}, },
"honey fungu": { "honey fungu": {
"aliases": [], "aliases": [],
@ -1568,7 +1568,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "", "name": "",
"plural_name": "acai berries" "plural_name": "açai"
}, },
"canned cherry": { "canned cherry": {
"aliases": [], "aliases": [],
@ -1769,8 +1769,8 @@
"flax": { "flax": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "flax", "name": "lin",
"plural_name": "flaxes" "plural_name": "lins"
}, },
"slivered almond": { "slivered almond": {
"aliases": [], "aliases": [],
@ -1811,8 +1811,8 @@
"roasted peanut": { "roasted peanut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "roasted peanut", "name": "cacahuète grillée",
"plural_name": "roasted peanuts" "plural_name": "cacahuètes grillées"
}, },
"chopped nut": { "chopped nut": {
"aliases": [], "aliases": [],
@ -1835,14 +1835,14 @@
"mixed nut": { "mixed nut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed nut", "name": "noix (mélange)",
"plural_name": "mixed nuts" "plural_name": "noix (mélange)"
}, },
"brazil nut": { "brazil nut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "brazil nut", "name": "noix du Brésil",
"plural_name": "brazil nuts" "plural_name": "noix du Brésil"
}, },
"mixed seed": { "mixed seed": {
"aliases": [], "aliases": [],
@ -1895,8 +1895,8 @@
"basil seed": { "basil seed": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "basil seed", "name": "graine de basilic",
"plural_name": "basil seeds" "plural_name": "graines de basilic"
}, },
"candlenut": { "candlenut": {
"aliases": [], "aliases": [],
@ -1913,8 +1913,8 @@
"jackfruit seed": { "jackfruit seed": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "jackfruit seed", "name": "graine de jacquier",
"plural_name": "jackfruit seeds" "plural_name": "graines de jacquier"
}, },
"honey-roasted almond": { "honey-roasted almond": {
"aliases": [], "aliases": [],
@ -2088,7 +2088,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pecorino", "name": "pecorino",
"plural_name": "pecorinoes" "plural_name": "pecorinos"
}, },
"gruyere": { "gruyere": {
"aliases": [], "aliases": [],
@ -2111,8 +2111,8 @@
"american cheese": { "american cheese": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "american cheese", "name": "fromage américain",
"plural_name": "american cheeses" "plural_name": "fromages américains"
}, },
"provolone": { "provolone": {
"aliases": [], "aliases": [],
@ -2723,8 +2723,8 @@
"frosting": { "frosting": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "frosting", "name": "glaçage",
"plural_name": "frostings" "plural_name": "glaçages"
}, },
"milk powder": { "milk powder": {
"aliases": [], "aliases": [],
@ -2850,7 +2850,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "lait de chèvre", "name": "lait de chèvre",
"plural_name": "goat milks" "plural_name": "laits de chèvre"
}, },
"cheese curd": { "cheese curd": {
"aliases": [], "aliases": [],
@ -2879,8 +2879,8 @@
"duck egg": { "duck egg": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "duck egg", "name": "œuf de canard",
"plural_name": "duck eggs" "plural_name": "œufs de canard"
}, },
"salted egg": { "salted egg": {
"aliases": [], "aliases": [],
@ -5527,8 +5527,8 @@
"mussel": { "mussel": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mussel", "name": "moule",
"plural_name": "mussels" "plural_name": "moules"
}, },
"clam": { "clam": {
"aliases": [], "aliases": [],
@ -5886,13 +5886,13 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "paprika", "name": "paprika",
"plural_name": "paprikas" "plural_name": "paprika"
}, },
"cayenne": { "cayenne": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cayenne", "name": "piment de Cayenne",
"plural_name": "cayennes" "plural_name": "piments de Cayenne"
}, },
"rosemary": { "rosemary": {
"aliases": [], "aliases": [],
@ -5939,20 +5939,20 @@
"dill": { "dill": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dill", "name": "aneth",
"plural_name": "dills" "plural_name": "aneths"
}, },
"chive": { "chive": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chive", "name": "ciboulette",
"plural_name": "chives" "plural_name": "ciboulettes"
}, },
"mint": { "mint": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mint", "name": "menthe",
"plural_name": "mints" "plural_name": "menthes"
}, },
"green cardamom": { "green cardamom": {
"aliases": [], "aliases": [],
@ -5969,26 +5969,26 @@
"fresh mint": { "fresh mint": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "fresh mint", "name": "menthe fraiche",
"plural_name": "fresh mints" "plural_name": "menthes fraiches"
}, },
"coriander powder": { "coriander powder": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "coriander powder", "name": "poudre de coriandre",
"plural_name": "coriander powders" "plural_name": "poudres de coriandre"
}, },
"sage": { "sage": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sage", "name": "sauge",
"plural_name": "sages" "plural_name": "sauges"
}, },
"coriander": { "coriander": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "coriander", "name": "coriandre",
"plural_name": "corianders" "plural_name": "coriandres"
}, },
"allspice": { "allspice": {
"aliases": [], "aliases": [],
@ -6011,8 +6011,8 @@
"mustard seed": { "mustard seed": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mustard seed", "name": "graine de moutarde",
"plural_name": "mustard seeds" "plural_name": "graines de moutarde"
}, },
"white pepper": { "white pepper": {
"aliases": [], "aliases": [],
@ -6041,8 +6041,8 @@
"saffron": { "saffron": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "saffron", "name": "safran",
"plural_name": "saffrons" "plural_name": "safrans"
}, },
"asafoetida": { "asafoetida": {
"aliases": [], "aliases": [],
@ -6423,29 +6423,29 @@
"sugar": { "sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sugar", "name": "sucre",
"plural_name": "sugars" "plural_name": "sucres"
}, },
"brown sugar": { "brown sugar": {
"aliases": [ "aliases": [
"turbinado sugar" "turbinado sugar"
], ],
"description": "", "description": "",
"name": "brown sugar", "name": "sucre de canne",
"plural_name": "brown sugars" "plural_name": "sucres de canne"
}, },
"confectioners sugar": { "confectioners sugar": {
"aliases": [ "aliases": [
"powdered sugar", "sucre glace",
"icing sugar" "sucre glace"
], ],
"description": "", "description": "",
"name": "confectioners sugar", "name": "sucre glace",
"plural_name": "confectioners sugars" "plural_name": "sucres glace"
}, },
"bar sugar": { "bar sugar": {
"aliases": [ "aliases": [
"castor sugar" "sucre semoule"
], ],
"description": "", "description": "",
"name": "bar sugar", "name": "bar sugar",
@ -6461,13 +6461,13 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sirop de maïs", "name": "sirop de maïs",
"plural_name": "corn syrups" "plural_name": "sirop de maïs"
}, },
"coconut sugar": { "coconut sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "coconut sugar", "name": "sucre de coco",
"plural_name": "coconut sugars" "plural_name": "sucres de coco"
}, },
"molass": { "molass": {
"aliases": [], "aliases": [],
@ -6484,14 +6484,14 @@
"agave nectar": { "agave nectar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "agave nectar", "name": "sirop d'agave",
"plural_name": "agave nectars" "plural_name": "sirops d'agave"
}, },
"sugar syrup": { "sugar syrup": {
"aliases": [], "aliases": [],
"description": "sugar free sweetner", "description": "édulcorant sans sucre",
"name": "sugar syrup", "name": "sirop de sucre",
"plural_name": "sugar syrups" "plural_name": "sirops de sucre"
}, },
"isomalt": { "isomalt": {
"aliases": [], "aliases": [],
@ -6514,50 +6514,50 @@
"demerara sugar": { "demerara sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "demerara sugar", "name": "sucre demerara",
"plural_name": "demerara sugars" "plural_name": "sucres demerara"
}, },
"caramel syrup": { "caramel syrup": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "caramel syrup", "name": "sirop de caramel",
"plural_name": "caramel syrups" "plural_name": "sirops de caramel"
}, },
"chocolate syrup": { "chocolate syrup": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chocolate syrup", "name": "sirop de chocolat",
"plural_name": "chocolate syrups" "plural_name": "sirops de chocolat"
}, },
"jaggery": { "jaggery": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "jaggery", "name": "jagre",
"plural_name": "jaggeries" "plural_name": "jagres"
}, },
"raw sugar": { "raw sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "raw sugar", "name": "sucre brut",
"plural_name": "raw sugars" "plural_name": "sucres bruts"
}, },
"golden syrup": { "golden syrup": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "golden syrup", "name": "mélasse claire",
"plural_name": "golden syrups" "plural_name": "mélasses claires"
}, },
"cinnamon sugar": { "cinnamon sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cinnamon sugar", "name": "sucre à la cannelle",
"plural_name": "cinnamon sugars" "plural_name": "sucre à la cannelle"
}, },
"liquid stevia": { "liquid stevia": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "liquid stevia", "name": "stevia liquide",
"plural_name": "liquid stevias" "plural_name": "stevias liquides"
}, },
"grenadine": { "grenadine": {
"aliases": [], "aliases": [],
@ -6568,26 +6568,26 @@
"coarse sugar": { "coarse sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "coarse sugar", "name": "sucre brut",
"plural_name": "coarse sugars" "plural_name": "sucres bruts"
}, },
"salted caramel syrup": { "salted caramel syrup": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "salted caramel syrup", "name": "sirop de caramel salé",
"plural_name": "salted caramel syrups" "plural_name": "sirops de caramel salé"
}, },
"sanding sugar": { "sanding sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sanding sugar", "name": "sucre cruistal",
"plural_name": "sanding sugars" "plural_name": "sucres cristaux"
}, },
"dark corn syrup": { "dark corn syrup": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dark corn syrup", "name": "mélasse",
"plural_name": "dark corn syrups" "plural_name": "mélasses"
}, },
"sucralose": { "sucralose": {
"aliases": [], "aliases": [],
@ -6598,14 +6598,14 @@
"monk fruit sweetener": { "monk fruit sweetener": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "monk fruit sweetener", "name": "fruit de moine",
"plural_name": "monk fruit sweeteners" "plural_name": "fruits de moine"
}, },
"maple sugar": { "maple sugar": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "maple sugar", "name": "sucre d'érable",
"plural_name": "maple sugars" "plural_name": "sucres d'érable"
}, },
"blackstrap molass": { "blackstrap molass": {
"aliases": [], "aliases": [],
@ -7650,8 +7650,8 @@
"flour": { "flour": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "flour", "name": "farine",
"plural_name": "flours" "plural_name": "farines"
}, },
"vanilla extract": { "vanilla extract": {
"aliases": [ "aliases": [
@ -7677,14 +7677,14 @@
"cornstarch": { "cornstarch": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cornstarch", "name": "maïzena",
"plural_name": "cornstarches" "plural_name": "maïzena"
}, },
"yeast": { "yeast": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "yeast", "name": "levure",
"plural_name": "yeasts" "plural_name": "levures"
}, },
"chocolate chip": { "chocolate chip": {
"aliases": [], "aliases": [],
@ -7769,8 +7769,8 @@
"corn flour": { "corn flour": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "corn flour", "name": "farine de maïs",
"plural_name": "corn flours" "plural_name": "farines de maïs"
}, },
"cream of tartar": { "cream of tartar": {
"aliases": [], "aliases": [],
@ -10646,8 +10646,8 @@
"extra virgin olive oil": { "extra virgin olive oil": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "extra virgin olive oil", "name": "huile d'olive vierge extra",
"plural_name": "extra virgin olive oils" "plural_name": "huiles d'olive vierge extra"
}, },
"canola oil": { "canola oil": {
"aliases": [], "aliases": [],
@ -11496,8 +11496,8 @@
"dijon mustard": { "dijon mustard": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dijon mustard", "name": "moutarde de Dijon",
"plural_name": "dijon mustards" "plural_name": "moutardes de Dijon"
}, },
"worcestershire": { "worcestershire": {
"aliases": [], "aliases": [],
@ -11526,8 +11526,8 @@
"mustard": { "mustard": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mustard", "name": "moutarde",
"plural_name": "mustards" "plural_name": "moutardes"
}, },
"fish sauce": { "fish sauce": {
"aliases": [], "aliases": [],
@ -12112,8 +12112,8 @@
"green olive": { "green olive": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "green olive", "name": "olive verte",
"plural_name": "green olives" "plural_name": "olives vertes"
}, },
"canned chickpea": { "canned chickpea": {
"aliases": [], "aliases": [],
@ -12124,8 +12124,8 @@
"black olive": { "black olive": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "black olive", "name": "olive noire",
"plural_name": "black olives" "plural_name": "olives noires"
}, },
"canned black bean": { "canned black bean": {
"aliases": [], "aliases": [],
@ -12148,8 +12148,8 @@
"canned tuna": { "canned tuna": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "canned tuna", "name": "thon en conserve",
"plural_name": "canned tuna" "plural_name": "thon en conserve"
}, },
"pickle": { "pickle": {
"aliases": [], "aliases": [],
@ -12562,8 +12562,8 @@
"canned jackfruit": { "canned jackfruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "canned jackfruit", "name": "jacquier en boîte",
"plural_name": "canned jackfruits" "plural_name": "jacquiers en boîte"
}, },
"taggiasca olive": { "taggiasca olive": {
"aliases": [], "aliases": [],
@ -12728,8 +12728,8 @@
"tahini": { "tahini": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "tahini", "name": "tahin",
"plural_name": "tahinis" "plural_name": "tahins"
}, },
"pesto": { "pesto": {
"aliases": [], "aliases": [],
@ -13210,8 +13210,8 @@
"green olive tapenade": { "green olive tapenade": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "green olive tapenade", "name": "tapenade d'olives vertes",
"plural_name": "green olive tapenades" "plural_name": "tapenades d'olives vertes"
}, },
"schezwan chutney": { "schezwan chutney": {
"aliases": [], "aliases": [],
@ -13992,8 +13992,8 @@
"raw cacao powder": { "raw cacao powder": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "raw cacao powder", "name": "poudre de cacao brut",
"plural_name": "raw cacao powders" "plural_name": "poudres de cacao crues"
}, },
"strawberry jam": { "strawberry jam": {
"aliases": [], "aliases": [],
@ -14073,8 +14073,8 @@
"cacao nib": { "cacao nib": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cacao nib", "name": "nib de cacao",
"plural_name": "cacao nibs" "plural_name": "nibs de cacao"
}, },
"lady finger": { "lady finger": {
"aliases": [], "aliases": [],
@ -14767,8 +14767,8 @@
"creme de cacao": { "creme de cacao": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "creme de cacao", "name": "crème de cacao",
"plural_name": "creme de cacao" "plural_name": "crème de cacao"
}, },
"schnapp": { "schnapp": {
"aliases": [], "aliases": [],