batchCooking/apps/web/src/locales/fr/translation.json
Nicolas 991f91bc0e feat(planning): ajouter au planning déclenche l'import si besoin (étape 4/4)
Dernière étape du plan « onglet Sources » : le sélecteur de recette du
planning (`RecipePickerDialog`) gagne l'onglet « Sources », jusqu'ici
volontairement exclu faute d'écran de revue à qui transmettre un item
choisi (voir étape 3, #47).

- Sélectionner un item déjà importé se comporte exactement comme
  choisir cette même recette depuis un onglet normal (résolue via
  `GET /recipes/:id`, direction vers l'étape « combien de portions ? »
  du dialogue, sans navigation).
- Sélectionner un item pas encore importé bascule vers l'écran de
  revue existant (`ImportRecipePage`), avec le créneau du planning
  porté par la query string (`?planningDate=&planningWeekDay=&planningMeal=`).
  Un import réussi y ajoute alors automatiquement la recette
  fraîchement créée à ce créneau (`POST /planning/items`, avec les
  portions du formulaire) avant de revenir sur le planning — plutôt que
  d'atterrir sur la page de la recette comme le fait un import « classique ».
- `RecipeSourcesPanel`/`SourceItemPreviewPanel` généralisés en
  conséquence : la première ne navigue plus elle-même vers la recette
  déjà importée (`onSelectImportedRecipe` renvoie l'id, chaque appelant
  décide), la seconde propage le créneau optionnel sur son lien
  d'import.

Aucun changement backend : `POST /sources/:sourceKey/import/:externalId`
et `POST /planning/items` existaient déjà et suffisent tels quels — une
fois la recette importée, `GET /sources/:sourceKey/browse` la marque
déjà `alreadyImported` automatiquement (logique déjà couverte par
`sources.test.ts`). 282 tests API toujours au vert, aucune régression.

Tests :
- Cypress : nouveau scénario Gherkin bout-en-bout
  (`cypress/e2e/planning.feature`/`planning.ts`) — ouvrir le
  sélecteur depuis un créneau vide, parcourir Sources, importer un
  item non résolu (ingrédient à compléter compris), vérifier que la
  requête d'ajout au planning porte bien le bon créneau/les bonnes
  portions, que la recette apparaît dans la bonne case de la grille
  après le retour sur "/", puis que rebrowser la source la marque
  désormais comme déjà importée.

Suite : plan « onglet Sources » terminé (étapes 1 à 4).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 17:42:43 +02:00

990 lines
33 KiB
JSON

{
"common": {
"saving": "Enregistrement…",
"saved": "Enregistré ✓",
"loadError": "Impossible de charger le planning, réessayez plus tard"
},
"errors": {
"VALIDATION_ERROR": "Erreur de validation",
"EMAIL_ALREADY_IN_USE": "Cet email est déjà utilisé",
"INVALID_CREDENTIALS": "Email ou mot de passe incorrect",
"NOT_AUTHENTICATED": "Vous devez être connecté",
"ALREADY_HAS_HOUSE": "Vous appartenez déjà à un foyer",
"NOT_HOUSE_ADMIN": "Seul l'administrateur du foyer peut faire ça",
"NOT_RECIPE_AUTHOR": "Seul l'auteur de la recette peut faire ça",
"NOT_FOUND": "Ressource introuvable",
"HOUSE_NOT_FOUND": "Votre profil n'a pas de foyer",
"DIET_NOT_FOUND": "Ce régime alimentaire n'existe pas",
"ALLERGY_NOT_FOUND": "Un des allergènes sélectionnés n'existe pas",
"INVITE_CODE_NOT_FOUND": "Ce code d'invitation ne correspond à aucun foyer",
"RECIPE_NOT_FOUND": "Cette recette n'existe pas",
"RECIPE_IN_USE": "Cette recette est encore utilisée dans un planning",
"RECIPE_ALREADY_IMPORTED": "Cette recette a déjà été importée",
"INGREDIENT_NOT_FOUND": "Un des ingrédients sélectionnés n'existe pas",
"UNIT_NOT_FOUND": "Une des unités sélectionnées n'existe pas",
"SOURCE_NOT_FOUND": "Une des sources sélectionnées n'existe pas",
"INTERNAL_ERROR": "Une erreur est survenue, réessayez plus tard"
},
"auth": {
"login": {
"title": "Se connecter",
"emailLabel": "Email",
"passwordLabel": "Mot de passe",
"submit": "Se connecter",
"submitting": "Connexion…",
"noAccount": "Pas encore de compte ?",
"createProfileLink": "Créer un profil"
},
"signup": {
"title": "Créer un profil",
"firstNameLabel": "Prénom",
"lastNameLabel": "Nom",
"emailLabel": "Email",
"passwordLabel": "Mot de passe",
"submit": "Créer mon profil",
"submitting": "Création…",
"hasAccount": "Déjà un compte ?",
"loginLink": "Se connecter"
}
},
"onboarding": {
"step": "Étape {{current}} sur {{total}}",
"continue": "Continuer",
"finish": "Terminer",
"loading": "Chargement…",
"diet": {
"title": "Un régime alimentaire particulier ?"
},
"household": {
"title": "Rejoignez ou créez un foyer",
"subtitle": "Optionnel — vous pourrez le faire plus tard depuis les paramètres.",
"skip": "Passer cette étape",
"alreadyHasHouse": "Vous faites déjà partie du foyer « {{name}} »."
},
"sources": {
"title": "Sources de recettes",
"subtitle": "Choisissez les sources dont vous voulez voir les recettes dans le catalogue de votre foyer.",
"legend": "Sources disponibles"
},
"allergens": {
"title": "Des allergies ou intolérances ?"
}
},
"layout": {
"sidebar": {
"collapse": "Replier le menu",
"expand": "Déplier le menu"
},
"nav": {
"planning": "Planning",
"recipes": "Recettes",
"shoppingList": "Liste de courses"
},
"settings": {
"toggle": "Paramètres",
"nav": {
"account": "Compte",
"preferences": "Préférences alimentaires",
"household": "Foyer",
"userPreferences": "Préférences utilisateur",
"credits": "Crédits"
}
},
"accountMenu": {
"myAccount": "Mon compte"
},
"greeting": "Bonjour {{firstName}} 👋",
"logout": "Se déconnecter"
},
"planning": {
"title": "Planning de la semaine",
"loading": "Chargement du planning…",
"weekNav": {
"thisWeek": "Cette semaine",
"prevWeek": "Semaine précédente",
"nextWeek": "Semaine suivante",
"label": "Semaine du {{range}}"
},
"calendar": {
"prevMonth": "Mois précédent",
"nextMonth": "Mois suivant"
},
"days": {
"lundi": "Lundi",
"mardi": "Mardi",
"mercredi": "Mercredi",
"jeudi": "Jeudi",
"vendredi": "Vendredi",
"samedi": "Samedi",
"dimanche": "Dimanche"
},
"meals": {
"petit-dejeuner": "Petit-déjeuner",
"collation": "Collation",
"dejeuner": "Déjeuner",
"gouter": "Goûter",
"diner": "Dîner"
},
"grid": {
"addRecipe": "Ajouter une recette",
"removeRecipe": "Retirer cette recette"
},
"picker": {
"title": "Choisir une recette",
"searchPlaceholder": "Rechercher une recette…",
"ingredientsFilterLabel": "Ingrédients",
"addIngredientFilter": "Ajouter un ingrédient",
"hideIngredientPicker": "Masquer",
"suitableForHouseholdLabel": "Convient à tout le foyer",
"loading": "Chargement des recettes…",
"empty": "Aucune recette ne correspond à ces filtres.",
"confirmTitle": "Ajouter {{recipe}}",
"portionsLabel": "Nombre de portions",
"backButton": "Retour",
"confirmButton": "Ajouter au planning",
"adding": "Ajout…"
}
},
"recipes": {
"title": "Recettes",
"searchPlaceholder": "Rechercher une recette…",
"newButton": "Nouvelle recette",
"loading": "Chargement…",
"empty": "Aucune recette pour le moment.",
"notFound": "Cette recette n'existe pas.",
"editButton": "Modifier",
"deleteButton": "Supprimer",
"confirmDeleteButton": "Confirmer la suppression",
"cancelDeleteButton": "Annuler",
"ingredientsTitle": "Ingrédients",
"stepsTitle": "Préparation",
"tabs": {
"favoris": "Favoris",
"perso": "Perso",
"foyer": "Foyer",
"publique": "Publique",
"sources": "Sources"
},
"table": {
"name": "Nom",
"allergens": "Allergènes / intolérances",
"diets": "Régime associé"
},
"sources": {
"sourceLabel": "Source",
"noneEnabled": "Aucune source n'est activée pour votre foyer.",
"noneEnabledLink": "Activez-en une dans les paramètres du foyer",
"searchPlaceholder": "Rechercher…",
"empty": "Aucune recette trouvée.",
"loadMore": "Voir plus",
"alreadyImported": "Déjà importée",
"loading": "Chargement…",
"loadError": "Impossible de charger cette source pour le moment.",
"detail": {
"empty": "Sélectionnez une recette dans la liste pour voir son aperçu ici.",
"loading": "Chargement de l'aperçu…",
"loadError": "Impossible de charger l'aperçu de cette recette.",
"viewSource": "Voir sur le site d'origine",
"importButton": "Importer cette recette",
"ingredientsCount_one": "{{count}} ingrédient",
"ingredientsCount_other": "{{count}} ingrédients",
"unresolvedIngredientsHint": "Certains ingrédients n'ont pas été reconnus automatiquement — ils pourront être corrigés à l'import.",
"stepsCount_one": "{{count}} étape",
"stepsCount_other": "{{count}} étapes"
},
"import": {
"title": "Revoir l'import",
"planningHint": "Cette recette sera automatiquement ajoutée à votre planning une fois importée.",
"loadError": "Impossible de charger cette recette pour le moment.",
"unresolvedTitle": "Ingrédients à compléter",
"unresolvedHint": "Ces lignes n'ont pas été reconnues automatiquement — choisissez le bon ingrédient, ou retirez-les.",
"resolveButton": "Choisir un ingrédient",
"discardButton": "Retirer cette ligne",
"submit": "Importer",
"submitting": "Import en cours…",
"genericError": "Le formulaire contient des erreurs"
}
},
"detail": {
"empty": "Sélectionnez une recette dans le tableau pour voir son détail ici.",
"favorite": "Ajouter aux favoris",
"unfavorite": "Retirer des favoris",
"portions": "{{count}} portion(s)"
},
"form": {
"newTitle": "Nouvelle recette",
"editTitle": "Modifier la recette",
"nameLabel": "Nom de la recette",
"descriptionLabel": "Description",
"pictureLabel": "Photo (URL)",
"portionsLabel": "Nombre de portions",
"visibilityLabel": "Visible par",
"visibility": {
"PERSONAL": "Moi uniquement",
"HOUSE": "Mon foyer",
"PUBLIC": "Tout le monde"
},
"dietsLabel": "Régime(s) associé(s)",
"searchIngredientPlaceholder": "Rechercher un ingrédient…",
"displayOptions": "Options d'affichage",
"showDietsLabel": "Régimes alimentaires",
"showAllergensLabel": "Allergènes",
"showReproducibleLabel": "Faisable maison",
"reproducibleBadge": "Faisable maison",
"reproducibleBadgeHint": "Chercher une recette pour {{name}}",
"allCategories": "Tout",
"allSubcategories": "Tout",
"noIngredientFound": "Aucun ingrédient trouvé.",
"category": {
"freshProduce": "Produits frais",
"meatAndSeafood": "Boucherie & poissonnerie",
"dryGoods": "Épicerie sèche",
"bakery": "Boulangerie",
"dairyAndCheese": "Crémerie & fromage",
"condimentsAndSpices": "Condiments & épices",
"cookingEssentials": "Aides culinaires"
},
"subcategory": {
"vegetables": "Légumes",
"fruits": "Fruits",
"freshHerbs": "Herbes fraîches",
"meats": "Viandes",
"poultry": "Volailles",
"fish": "Poissons",
"shellfish": "Crustacés & fruits de mer",
"starches": "Féculents",
"legumes": "Légumineuses",
"nutsAndSeeds": "Graines & fruits secs",
"other": "Autres",
"breads": "Pains",
"rawDough": "Pâtes à cuire",
"dairy": "Produits laitiers",
"eggs": "Œufs",
"plantBasedAlternatives": "Alternatives végétales",
"spices": "Épices",
"sauces": "Sauces",
"seasonings": "Assaisonnements",
"bases": "Bases",
"thickeners": "Épaississants",
"sugars": "Sucres"
},
"quantityLabel": "Quantité",
"unitLabel": "Unité",
"unitPlaceholder": "Choisir une unité",
"removeIngredient": "Retirer cet ingrédient",
"stepDescriptionPlaceholder": "Décrivez cette étape…",
"stepPicturePlaceholder": "Photo de l'étape (URL, optionnel)",
"moveStepUp": "Monter cette étape",
"moveStepDown": "Descendre cette étape",
"removeStep": "Supprimer cette étape",
"addStep": "Ajouter une étape",
"submit": "Enregistrer",
"submitting": "Enregistrement…",
"genericError": "Le formulaire contient des erreurs"
}
},
"shoppingList": {
"title": "Liste de courses",
"comingSoon": "Cette section arrive bientôt."
},
"account": {
"title": "Compte",
"identity": {
"firstNameLabel": "Prénom",
"lastNameLabel": "Nom",
"emailLabel": "Email"
},
"dangerZone": {
"title": "Zone dangereuse",
"description": "Supprimer votre compte est définitif et irréversible.",
"deleteButton": "Supprimer mon compte",
"passwordLabel": "Confirmez avec votre mot de passe",
"confirmButton": "Confirmer la suppression",
"cancelButton": "Annuler"
}
},
"preferences": {
"title": "Préférences alimentaires",
"form": {
"dietLabel": "Régime alimentaire",
"dietNone": "Aucun régime particulier",
"allergiesLabel": "Allergies",
"intolerancesLabel": "Intolérances",
"dislikedIngredientsLabel": "Aliments que vous n'aimez pas",
"removeDislikedIngredient": "Retirer cet aliment"
}
},
"userPreferences": {
"title": "Préférences utilisateur",
"themeLabel": "Thème",
"theme": {
"LIGHT": "Clair",
"DARK": "Sombre",
"SYSTEM": "Système"
}
},
"credits": {
"title": "Crédits",
"icons": {
"title": "Icônes d'ingrédients",
"description": "La plupart des icônes d'ingrédients de l'application proviennent des collections gratuites « Common ingredient icons » et « Common Utensils » de Food Icon Pack, sous licence Creative Commons Attribution 4.0. Elles ont été recolorées pour s'adapter aux thèmes clair et sombre de l'application.",
"licenseLabel": "Licence CC BY 4.0"
}
},
"household": {
"title": "Foyer",
"form": {
"nameLabel": "Nom du foyer"
},
"noHouse": {
"intro": "Vous n'appartenez à aucun foyer pour le moment.",
"createTitle": "Créer un foyer",
"createButton": "Créer",
"joinTitle": "Rejoindre un foyer",
"joinLabel": "Code d'invitation",
"joinButton": "Rejoindre"
},
"inviteCodeLabel": "Code d'invitation",
"copyButton": "Copier",
"copied": "Copié ✓",
"membersTitle": "Membres",
"adminBadge": "Admin",
"youSuffix": " (vous)",
"removeButton": "Retirer",
"leaveButton": "Quitter le foyer",
"sources": {
"title": "Sources de recettes",
"hint": "Les sources activées ci-dessous sont celles dont les recettes apparaissent dans le catalogue de votre foyer.",
"legend": "Sources disponibles",
"official": "Officielle",
"unofficial": "Non officielle"
},
"dangerZone": {
"title": "Zone dangereuse",
"description": "Supprimer le foyer le supprime pour tous ses membres, ainsi que son planning.",
"deleteButton": "Supprimer le foyer",
"confirmButton": "Confirmer la suppression",
"cancelButton": "Annuler"
}
},
"catalog": {
"units": {
"gram": "g",
"kilogram": "kg",
"milliliter": "ml",
"centiliter": "cl",
"liter": "l",
"tablespoon": "cuillère à soupe",
"teaspoon": "cuillère à café",
"piece": "unité",
"pinch": "pincée",
"slice": "tranche",
"clove": "gousse",
"bunch": "botte",
"sachet": "sachet",
"sprig": "brin",
"cup": "tasse",
"ounce": "once",
"pound": "livre"
},
"diets": {
"omnivore": "Omnivore",
"vegetarian": "Végétarien",
"vegan": "Végan",
"pescatarian": "Pescétarien",
"glutenFree": "Sans gluten"
},
"techSteps": {
"cook": "Cuire",
"fry": "Frire",
"melt": "Faire fondre",
"deglaze": "Déglacer",
"simmer": "Mijoter",
"boil": "Bouillir",
"roast": "Rôtir",
"grill": "Griller",
"panFry": "Sauter",
"blanch": "Blanchir",
"marinate": "Mariner",
"chop": "Hacher",
"peel": "Éplucher",
"mince": "Émincer",
"mix": "Mélanger",
"whisk": "Fouetter",
"foldIn": "Incorporer",
"setAside": "Réserver",
"season": "Assaisonner",
"drain": "Égoutter",
"brown": "Faire revenir",
"rest": "Laisser reposer",
"preheat": "Préchauffer",
"bake": "Cuire au four",
"plate": "Dresser",
"coat": "Napper"
},
"allergens": {
"gluten": "Gluten",
"crustaceans": "Crustacés",
"eggs": "Œufs",
"fish": "Poissons",
"peanuts": "Arachides",
"soy": "Soja",
"milk": "Lait",
"treeNuts": "Fruits à coque",
"celery": "Céleri",
"mustard": "Moutarde",
"sesameSeeds": "Graines de sésame",
"sulfites": "Sulfites",
"lupin": "Lupin",
"molluscs": "Mollusques"
},
"ingredients": {
"tomato": "Tomate",
"onion": "Oignon",
"shallot": "Échalote",
"garlic": "Ail",
"carrot": "Carotte",
"zucchini": "Courgette",
"cucumber": "Concombre",
"gherkins": "Cornichons",
"bellPepper": "Poivron",
"mushroom": "Champignon",
"porcini": "Cèpes",
"eggplant": "Aubergine",
"broccoli": "Brocoli",
"cauliflower": "Chou-fleur",
"whiteCabbage": "Chou blanc",
"redCabbage": "Chou rouge",
"brusselsSprouts": "Chou de Bruxelles",
"spinach": "Épinard",
"swissChard": "Blette",
"lettuce": "Salade",
"arugula": "Roquette",
"watercress": "Cresson",
"leek": "Poireau",
"celery": "Céleri",
"radish": "Radis",
"beetroot": "Betterave",
"turnip": "Navet",
"parsnip": "Panais",
"greenBean": "Haricot vert",
"pea": "Petit pois",
"corn": "Maïs",
"artichoke": "Artichaut",
"fennel": "Fenouil",
"endive": "Endive",
"pumpkin": "Potiron",
"butternutSquash": "Butternut",
"asparagus": "Asperge",
"avocado": "Avocat",
"potato": "Pomme de terre",
"sweetPotato": "Patate douce",
"cherryTomato": "Tomates cerises",
"bokChoy": "Pak-choï",
"soybeanSprouts": "Germes de soja",
"shiitake": "Shiitake",
"daikon": "Daikon",
"freshGreenChili": "Piment vert frais",
"cardoon": "Cardon",
"radicchio": "Chicorée rouge",
"romanesco": "Chou romanesco",
"kohlrabi": "Chou-rave",
"napaCabbage": "Chou chinois",
"celeriac": "Céleri-rave",
"okra": "Gombo",
"springOnion": "Oignon nouveau",
"redKuriSquash": "Potimarron",
"rutabaga": "Rutabaga",
"samphire": "Salicorne",
"salsify": "Salsifis",
"lambsLettuce": "Mâche",
"escarole": "Scarole",
"lemon": "Citron",
"lime": "Citron vert",
"apple": "Pomme",
"pear": "Poire",
"banana": "Banane",
"orange": "Orange",
"clementine": "Clémentine",
"grapefruit": "Pamplemousse",
"strawberry": "Fraise",
"raspberry": "Framboise",
"blueberry": "Myrtille",
"blackberry": "Mûre",
"cherry": "Cerise",
"apricot": "Abricot",
"peach": "Pêche",
"plum": "Prune",
"grape": "Raisin",
"melon": "Melon",
"watermelon": "Pastèque",
"pineapple": "Ananas",
"mango": "Mangue",
"kiwi": "Kiwi",
"fig": "Figue",
"date": "Datte",
"lychee": "Litchi",
"pomegranate": "Grenade",
"rhubarb": "Rhubarbe",
"quince": "Coing",
"blackcurrant": "Cassis",
"cranberry": "Canneberge",
"redcurrant": "Groseille",
"persimmon": "Kaki",
"nectarine": "Nectarine",
"tamarind": "Tamarin",
"basil": "Basilic",
"parsley": "Persil",
"thyme": "Thym",
"rosemary": "Romarin",
"bayLeaf": "Laurier",
"chives": "Ciboulette",
"freshCilantro": "Coriandre fraîche",
"mint": "Menthe",
"oregano": "Origan",
"dill": "Aneth",
"tarragon": "Estragon",
"savory": "Sarriette",
"marjoram": "Marjolaine",
"sage": "Sauge",
"chervil": "Cerfeuil",
"ginger": "Gingembre",
"lemongrass": "Citronnelle",
"kaffirLime": "Combava",
"rabbit": "Lapin",
"groundBeef": "Bœuf haché",
"beefSteak": "Steak de bœuf",
"beefRoast": "Rôti de bœuf",
"vealCutlet": "Escalope de veau",
"porkTenderloin": "Filet mignon de porc",
"porkChop": "Côte de porc",
"lamb": "Agneau",
"legOfLamb": "Gigot d'agneau",
"baconLardons": "Lardons",
"bacon": "Bacon",
"ham": "Jambon blanc",
"curedHam": "Jambon cru",
"sausage": "Saucisse",
"chorizo": "Chorizo",
"merguez": "Merguez",
"prosciutto": "Prosciutto",
"pancetta": "Pancetta",
"mortadella": "Mortadelle",
"salami": "Salami",
"andouille": "Andouille",
"andouillette": "Andouillette",
"whitePudding": "Boudin blanc",
"blackPudding": "Boudin noir",
"cervelat": "Cervelas",
"rillettes": "Rillettes",
"dryCuredSausage": "Saucisson sec",
"bayonneHam": "Jambon de Bayonne",
"coppa": "Coppa",
"rosetteSausage": "Rosette (saucisson)",
"vealLiver": "Foie de veau",
"vealKidneys": "Rognons de veau",
"vealBrain": "Cervelle de veau",
"vealSweetbread": "Ris de veau",
"beefTongue": "Langue de bœuf",
"tripe": "Tripes",
"venison": "Cerf",
"roeDeer": "Chevreuil",
"wildBoar": "Sanglier",
"horseMeat": "Cheval",
"beefHeart": "Cœur de bœuf",
"foieGras": "Foie gras",
"beefMuzzle": "Museau de bœuf",
"grisonsDriedBeef": "Viande des Grisons",
"chicken": "Poulet",
"turkey": "Dinde",
"duck": "Canard",
"duckBreast": "Magret de canard",
"quail": "Caille",
"guineaFowl": "Pintade",
"goose": "Oie",
"poultryLiver": "Foie de volaille",
"capon": "Chapon",
"pigeon": "Pigeon",
"pheasant": "Faisan",
"salmon": "Saumon",
"tuna": "Thon",
"cod": "Cabillaud",
"trout": "Truite",
"sardine": "Sardine",
"anchovy": "Anchois",
"whiting": "Merlan",
"surimi": "Surimi",
"seaBass": "Bar (loup de mer)",
"seaBream": "Dorade",
"sole": "Sole",
"turbot": "Turbot",
"hake": "Merlu",
"pollock": "Colin",
"saithe": "Lieu noir",
"haddock": "Églefin",
"mackerel": "Maquereau",
"herring": "Hareng",
"redMullet": "Rouget",
"skate": "Raie",
"monkfish": "Lotte",
"halibut": "Flétan",
"swordfish": "Espadon",
"carp": "Carpe",
"pike": "Brochet",
"perch": "Perche",
"tilapia": "Tilapia",
"pangasius": "Panga",
"smokedSalmon": "Saumon fumé",
"driedFish": "Poisson séché",
"eel": "Anguille",
"plaice": "Carrelet (ou plie)",
"saltCod": "Morue",
"lemonSole": "Limande",
"scorpionfish": "Rascasse",
"shrimp": "Crevettes",
"langoustine": "Langoustines",
"lobster": "Homard",
"crab": "Crabe",
"spinyLobster": "Langouste",
"mussels": "Moules",
"oysters": "Huîtres",
"scallops": "Saint-Jacques",
"squid": "Calamar",
"octopus": "Poulpe",
"clams": "Palourdes",
"whelks": "Bulots",
"spiderCrab": "Araignée de mer",
"periwinkle": "Bigorneau",
"crayfish": "Écrevisse",
"greyShrimp": "Crevette grise",
"cockle": "Coque",
"snail": "Escargot",
"cuttlefish": "Seiche",
"semolina": "Semoule",
"couscous": "Couscous",
"bulgur": "Boulgour",
"polenta": "Polenta",
"quinoa": "Quinoa",
"pasta": "Pâtes",
"wholeWheatPasta": "Pâtes complètes",
"rice": "Riz",
"basmatiRice": "Riz basmati",
"brownRice": "Riz complet",
"oats": "Flocons d'avoine",
"spaghetti": "Spaghetti",
"penne": "Penne",
"tagliatelle": "Tagliatelles",
"lasagnaSheets": "Lasagnes (feuilles)",
"gnocchi": "Gnocchi",
"arborioRice": "Riz arborio",
"riceNoodles": "Nouilles de riz",
"udonNoodles": "Nouilles udon",
"sobaNoodles": "Nouilles soba",
"chineseNoodles": "Nouilles chinoises",
"riceVermicelli": "Vermicelles de riz",
"soyVermicelli": "Vermicelles de soja",
"stickyRice": "Riz gluant",
"sushiRice": "Riz à sushi",
"jasmineRice": "Riz jasmin",
"greenLentils": "Lentilles vertes",
"redLentils": "Lentilles corail",
"chickpeas": "Pois chiches",
"whiteBeans": "Haricots blancs",
"kidneyBeans": "Haricots rouges",
"blackBeans": "Haricots noirs",
"splitPeas": "Pois cassés",
"favaBeans": "Fèves",
"edamame": "Edamame",
"pintoBeans": "Haricots pinto",
"flageoletBeans": "Haricots flageolets",
"goldenLentils": "Lentilles blondes",
"peanutsShelled": "Cacahuètes",
"almonds": "Amandes",
"walnuts": "Noix",
"hazelnuts": "Noisettes",
"cashews": "Noix de cajou",
"pistachios": "Pistaches",
"pecans": "Noix de pécan",
"almondPowder": "Poudre d'amande",
"pineNuts": "Pignons de pin",
"sunflowerSeeds": "Graines de tournesol",
"pumpkinSeeds": "Graines de courge",
"shreddedCoconut": "Noix de coco râpée",
"raisins": "Raisins secs",
"prunes": "Pruneaux",
"driedApricots": "Abricots secs",
"sesameSeeds": "Graines de sésame",
"blackMushrooms": "Champignons noirs",
"noriSeaweed": "Algue nori",
"wakameSeaweed": "Algue wakamé",
"kombuSeaweed": "Algue kombu",
"bambooShoots": "Pousses de bambou",
"waterChestnuts": "Châtaignes d'eau",
"bread": "Pain",
"sandwichBread": "Pain de mie",
"wholeWheatBread": "Pain complet",
"baguette": "Baguette",
"ryeBread": "Pain de seigle",
"breadcrumbs": "Chapelure",
"burgerBun": "Pain à burger",
"briocheBun": "Pain brioché",
"hotDogBun": "Pain à hot-dog",
"pitaBread": "Pain pita",
"bagel": "Pain bagel",
"naan": "Naan",
"wrapBread": "Pain wrap",
"vienneseBread": "Pain viennois",
"countryBread": "Pain de campagne",
"multigrainBread": "Pain aux céréales",
"breadRoll": "Petit pain",
"swedishBread": "Pain suédois",
"glutenFreeBread": "Pain sans gluten",
"rusk": "Biscotte",
"croutons": "Croûtons",
"focaccia": "Focaccia",
"ciabatta": "Ciabatta",
"cornTortilla": "Tortilla de maïs",
"wheatTortilla": "Tortilla de blé",
"breadstick": "Gressin",
"puffPastry": "Pâte feuilletée",
"shortcrustPastry": "Pâte brisée",
"pizzaDough": "Pâte à pizza",
"sweetShortcrustPastry": "Pâte à tarte sablée",
"milk": "Lait",
"butter": "Beurre",
"cremeFraiche": "Crème fraîche",
"liquidCream": "Crème liquide",
"cheese": "Fromage",
"emmental": "Emmental",
"gruyere": "Gruyère",
"parmesan": "Parmesan",
"mozzarella": "Mozzarella",
"goatCheese": "Chèvre (fromage)",
"feta": "Feta",
"comte": "Comté",
"fromageBlanc": "Fromage blanc",
"mascarpone": "Mascarpone",
"yogurt": "Yaourt",
"burrata": "Burrata",
"ricotta": "Ricotta",
"pecorino": "Pecorino",
"gorgonzola": "Gorgonzola",
"cheddar": "Cheddar",
"brie": "Brie",
"camembert": "Camembert",
"roquefort": "Roquefort",
"munster": "Munster",
"reblochon": "Reblochon",
"cantal": "Cantal",
"beaufort": "Beaufort",
"saintNectaire": "Saint-Nectaire",
"blueCheese": "Bleu (fromage)",
"cancoillotte": "Cancoillotte",
"tomme": "Tomme",
"epoisses": "Époisses",
"chaource": "Chaource",
"livarot": "Livarot",
"pontLeveque": "Pont-l'Évêque",
"morbier": "Morbier",
"racletteCheese": "Raclette (fromage)",
"fourmeDAmbert": "Fourme d'Ambert",
"salers": "Salers",
"ossauIraty": "Ossau-Iraty",
"vacherin": "Vacherin",
"saintMarcellin": "Saint-Marcellin",
"neufchatel": "Neufchâtel",
"crottinDeChavignol": "Crottin de Chavignol",
"abondanceCheese": "Abondance",
"carreDeLEst": "Carré de l'Est",
"edam": "Edam",
"gouda": "Gouda",
"mimolette": "Mimolette",
"maroilles": "Maroilles",
"montDor": "Mont d'or",
"kefir": "Kéfir",
"greekYogurt": "Yaourt à la grecque",
"egg": "Œuf",
"coconutMilk": "Lait de coco",
"coconutCream": "Crème de coco",
"almondMilk": "Lait d'amande",
"oatMilk": "Lait d'avoine",
"tofu": "Tofu",
"silkenTofu": "Tofu soyeux",
"herbesDeProvence": "Herbes de Provence",
"blackPepper": "Poivre noir",
"paprika": "Paprika",
"espelettePepper": "Piment d'Espelette",
"cayennePepper": "Piment de Cayenne",
"cumin": "Cumin",
"curryPowder": "Curry (poudre)",
"turmeric": "Curcuma",
"cinnamon": "Cannelle",
"nutmeg": "Muscade",
"saffron": "Safran",
"clove": "Clou de girofle",
"vanillaBean": "Vanille (gousse)",
"whitePepper": "Poivre blanc",
"pinkPepper": "Poivre rose",
"sichuanPepper": "Poivre du Sichuan",
"smokedPaprika": "Paprika fumé",
"birdEyeChili": "Piment oiseau",
"juniperBerries": "Baies de genièvre",
"starAnise": "Anis étoilé (badiane)",
"greenAnise": "Anis vert",
"fennelSeeds": "Graines de fenouil",
"sumac": "Sumac",
"nigella": "Nigelle",
"allspice": "Quatre épices",
"colomboPowder": "Colombo (poudre)",
"baharat": "Baharat",
"horseradish": "Raifort",
"herbSalt": "Sel aux herbes",
"celerySalt": "Sel de céleri",
"fleurDeSel": "Fleur de sel",
"salt": "Sel",
"fiveSpice": "Cinq épices",
"garamMasala": "Garam masala",
"corianderSeeds": "Graines de coriandre",
"cardamom": "Cardamome",
"fenugreek": "Fenugrec",
"jalapeno": "Piment jalapeño",
"chipotle": "Piment chipotle",
"poblanoPepper": "Piment poblano",
"habanero": "Piment habanero",
"rasElHanout": "Ras el hanout",
"zaatar": "Za'atar",
"soySauce": "Sauce soja",
"mustard": "Moutarde",
"mayonnaise": "Mayonnaise",
"ketchup": "Ketchup",
"tabasco": "Tabasco",
"worcestershireSauce": "Sauce Worcestershire",
"fishSauce": "Sauce nuoc-mâm",
"wasabi": "Wasabi",
"harissa": "Harissa",
"curryPaste": "Pâte de curry",
"peanutButter": "Beurre de cacahuète",
"dijonMustard": "Moutarde de Dijon",
"wholegrainMustard": "Moutarde à l'ancienne",
"barbecueSauce": "Sauce barbecue",
"tartarSauce": "Sauce tartare",
"cocktailSauce": "Sauce cocktail",
"bearnaiseSauce": "Sauce béarnaise",
"hollandaiseSauce": "Sauce hollandaise",
"bechamelSauce": "Sauce béchamel",
"teriyakiSauce": "Sauce teriyaki",
"ponzuSauce": "Sauce ponzu",
"chimichurri": "Chimichurri",
"redPesto": "Pesto rouge (tomates séchées)",
"pesto": "Pesto",
"oysterSauce": "Sauce huître",
"hoisinSauce": "Sauce hoisin",
"sriracha": "Sauce sriracha",
"sweetChiliSauce": "Sauce sweet chili",
"miso": "Miso",
"shrimpPaste": "Pâte de crevettes",
"redCurryPaste": "Pâte de curry rouge (thaï)",
"greenCurryPaste": "Pâte de curry vert (thaï)",
"tahini": "Tahini",
"aioli": "Aïoli",
"vinaigrette": "Sauce vinaigrette",
"hummus": "Houmous",
"oliveOil": "Huile d'olive",
"sunflowerOil": "Huile de tournesol",
"rapeseedOil": "Huile de colza",
"coconutOil": "Huile de coco",
"sesameOil": "Huile de sésame",
"ciderVinegar": "Vinaigre de cidre",
"whiteVinegar": "Vinaigre blanc",
"balsamicVinegar": "Vinaigre balsamique",
"capers": "Câpres",
"olives": "Olives",
"blackOlives": "Olives noires",
"greenOlives": "Olives vertes",
"whiteWine": "Vin blanc (cuisine)",
"redWine": "Vin rouge (cuisine)",
"roseWine": "Vin rosé (cuisine)",
"redWineVinegar": "Vinaigre de vin rouge",
"whiteWineVinegar": "Vinaigre de vin blanc",
"sherryVinegar": "Vinaigre de xérès",
"walnutOil": "Huile de noix",
"hazelnutOil": "Huile de noisette",
"peanutOil": "Huile d'arachide",
"chiliOil": "Huile pimentée",
"riceVinegar": "Vinaigre de riz",
"cornOil": "Huile de maïs",
"grapeseedOil": "Huile de pépins de raisin",
"soybeanOil": "Huile de soja",
"palmOil": "Huile de palme",
"mirin": "Mirin",
"sake": "Saké (cuisine)",
"lemonJuice": "Jus de citron",
"limeJuice": "Jus de citron vert",
"orangeJuice": "Jus d'orange",
"appleJuice": "Jus de pomme",
"grapeJuice": "Jus de raisin",
"tomatoJuice": "Jus de tomate",
"cranberryJuice": "Jus de cranberry",
"coffee": "Café",
"tea": "Thé",
"beer": "Bière (cuisine)",
"cider": "Cidre (cuisine)",
"champagne": "Champagne / vin pétillant (cuisine)",
"portWine": "Porto (cuisine)",
"vinJaune": "Vin jaune (cuisine)",
"cognac": "Cognac",
"rum": "Rhum",
"whisky": "Whisky",
"vodka": "Vodka",
"wheatFlour": "Farine de blé",
"wholeWheatFlour": "Farine complète",
"cornFlour": "Farine de maïs",
"buckwheatFlour": "Farine de sarrasin",
"riceFlour": "Farine de riz",
"vegetableStockCube": "Bouillon cube légumes",
"chickenStockCube": "Bouillon cube volaille",
"tomatoPaste": "Concentré de tomate",
"tomatoCoulis": "Coulis de tomate",
"cannedPeeledTomatoes": "Tomates pelées (conserve)",
"sunDriedTomatoes": "Tomates séchées",
"vealStock": "Fond de veau",
"chickenStock": "Fond de volaille",
"beefStockCube": "Bouillon cube bœuf",
"fishStockCube": "Bouillon cube poisson",
"vegetableBroth": "Bouillon de légumes",
"chickenBroth": "Bouillon de volaille",
"beefBroth": "Bouillon de bœuf",
"courtBouillon": "Court-bouillon",
"dashi": "Dashi (bouillon japonais)",
"shellfishBisque": "Bisque de crustacés",
"tapiocaFlour": "Farine de tapioca",
"masaHarina": "Masa harina",
"water": "Eau",
"sparklingWater": "Eau gazeuse",
"orangeBlossomWater": "Eau de fleur d'oranger",
"roseWater": "Eau de rose",
"fishFumet": "Fumet de poisson",
"bakersYeast": "Levure boulangère",
"bakingPowder": "Levure chimique",
"cornstarch": "Maïzena",
"lupinFlour": "Farine de lupin",
"gelatin": "Gélatine",
"bakingSoda": "Bicarbonate de soude",
"potatoStarch": "Fécule de pomme de terre",
"sugar": "Sucre",
"honey": "Miel",
"mapleSyrup": "Sirop d'érable",
"brownSugar": "Sucre roux",
"powderedSugar": "Sucre glace",
"demeraraSugar": "Cassonade",
"darkChocolate": "Chocolat noir",
"milkChocolate": "Chocolat au lait",
"whiteChocolate": "Chocolat blanc",
"chocolateChips": "Pépites de chocolat",
"cocoaPowder": "Cacao en poudre",
"vanillaExtract": "Extrait de vanille",
"palmSugar": "Sucre de palme",
"caneSyrup": "Sirop de sucre de canne"
}
}
}