Some checks failed
Nouvelle route /parametres/application + entrée dans SETTINGS_ITEMS (desktop et sheet mobile, un seul tableau partagé). Thème et "rejouer un tutoriel" restent inchangés dans /parametres/preferences-utilisateur (décision explicite du chantier). Le contenu affiché diffère réellement selon la plateforme, pas par simple choix cosmétique — chaque moitié de la page est inerte sur l'autre plateforme, pas juste hors-sujet : - Version installée + "Vérifier les mises à jour" (natif seulement) : useAppUpdateCheck (déjà utilisé par la bannière silencieuse existante) gagne un checkNow() qui relance la même comparaison sans attendre le throttle de 6h, réutilisant la logique existante plutôt que de la dupliquer (fetchLatestVersionResult extraite en fonction partagée). Nouveau hook useInstalledVersion (App.getInfo() natif, __APP_VERSION__ web). - "Toujours rester sur le site web" (web seulement, tout appareil) : pilote STAY_ON_WEB_PREFERENCE_KEY (déjà exporté par mobile-app-redirect.ts, ticket #84). Volontairement masqué côté natif : le WebView Capacitor tourne sur sa propre origine https://localhost, un localStorage totalement séparé de celui du vrai site web que lit attemptOpenNativeApp — modifier la préférence depuis l'app ne changerait donc jamais rien pour un visiteur mobile réel. Documenté explicitement dans le commentaire de la page pour ne pas réintroduire ce contrôle-fantôme plus tard. Couverture Cypress : nouveau app-settings-page.cy.ts (contenu web, persistance du toggle après reload) ; sidebar.cy.ts étendu pour couvrir le nouveau lien. Le déclenchement natif réel (App.getInfo(), l'appel réseau de checkNow) n'a pas de point d'entrée testable depuis un run Cypress web — même posture déjà acceptée pour useAppUpdateCheck/ UpdateBanner, la logique de comparaison pure reste couverte par version-compare.cy.tsx (inchangé). Suite complète : biome check, tsc -b --force, build, 146/146 e2e, 71/71 composants — tous verts. Closes #86 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1412 lines
49 KiB
JSON
1412 lines
49 KiB
JSON
{
|
||
"common": {
|
||
"saving": "Enregistrement…",
|
||
"saved": "Enregistré ✓",
|
||
"loadError": "Impossible de charger le planning, réessayez plus tard",
|
||
"weekNav": {
|
||
"thisWeek": "Cette semaine",
|
||
"prevWeek": "Semaine précédente",
|
||
"nextWeek": "Semaine suivante",
|
||
"label": "Semaine du {{range}}"
|
||
},
|
||
"calendar": {
|
||
"title": "Choisir une semaine",
|
||
"prevMonth": "Mois précédent",
|
||
"nextMonth": "Mois suivant"
|
||
},
|
||
"days": {
|
||
"lundi": "Lundi",
|
||
"mardi": "Mardi",
|
||
"mercredi": "Mercredi",
|
||
"jeudi": "Jeudi",
|
||
"vendredi": "Vendredi",
|
||
"samedi": "Samedi",
|
||
"dimanche": "Dimanche"
|
||
}
|
||
},
|
||
"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",
|
||
"STEP_NOT_FOUND": "Cette étape n'existe pas",
|
||
"TECH_STEP_NOT_FOUND": "Cette technique n'existe pas",
|
||
"UTENSIL_NOT_FOUND": "Un des ustensiles sélectionnés n'existe pas",
|
||
"TOUR_NOT_FOUND": "Ce didacticiel n'existe pas",
|
||
"TOUR_TARGET_NOT_FOUND": "Cette cible de surlignage n'existe pas",
|
||
"TOUR_KEY_ALREADY_IN_USE": "Un scénario utilise déjà cette clé",
|
||
"INVALID_CORRECTION_SPAN": "La sélection ne correspond plus au texte de l'étape",
|
||
"INTERNAL_ERROR": "Une erreur est survenue, réessayez plus tard",
|
||
"RETRAIN_ALREADY_RUNNING": "Un ré-entraînement est déjà en cours",
|
||
"LEFTOVER_QUANTITY_EXCEEDED": "Il ne reste plus assez de portions disponibles"
|
||
},
|
||
"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",
|
||
"more": "Plus"
|
||
},
|
||
"settings": {
|
||
"toggle": "Paramètres",
|
||
"nav": {
|
||
"account": "Compte",
|
||
"preferences": "Préférences alimentaires",
|
||
"household": "Foyer",
|
||
"userPreferences": "Préférences utilisateur",
|
||
"application": "Paramètres d'application",
|
||
"credits": "Crédits"
|
||
}
|
||
},
|
||
"accountMenu": {
|
||
"myAccount": "Mon compte"
|
||
},
|
||
"greeting": "Bonjour {{firstName}} 👋",
|
||
"logout": "Se déconnecter"
|
||
},
|
||
"planning": {
|
||
"title": "Planning de la semaine",
|
||
"startCooking": "Commencer à cuisiner",
|
||
"loading": "Chargement du planning…",
|
||
"leftovers": {
|
||
"tooltip": "Restes de la semaine",
|
||
"title": "Restes disponibles",
|
||
"empty": "Aucun reste cette semaine.",
|
||
"origin": "{{day}} · {{meal}}",
|
||
"available": "{{count}} en restes",
|
||
"discard": "Jeter",
|
||
"dragHandle": "Glisser les restes de {{recipe}} vers un créneau",
|
||
"chipBadge": "Restes d'un autre créneau",
|
||
"assignTitle": "Servir des restes de {{recipe}}",
|
||
"assignPortionsLabel": "Portions à servir (max {{max}})",
|
||
"assignCancel": "Annuler",
|
||
"assignConfirm": "Ajouter au planning"
|
||
},
|
||
"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}}",
|
||
"portionsRequestedLabel": "Portions demandées",
|
||
"batchedHint": "→ {{prepared}} portions préparées, {{leftover}} en restes",
|
||
"backButton": "Retour",
|
||
"confirmButton": "Ajouter au planning",
|
||
"adding": "Ajout…",
|
||
"footerClose": "Fermer",
|
||
"footerConfirm": "Confirmer"
|
||
}
|
||
},
|
||
"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",
|
||
"temperature": {
|
||
"celsius": "{{value}} °C",
|
||
"gasMark": "Thermostat {{value}}",
|
||
"qualitative": {
|
||
"low": "Feu doux",
|
||
"medium": "Feu moyen",
|
||
"high": "Feu vif"
|
||
}
|
||
},
|
||
"techStepCorrection": {
|
||
"selectionLabel": "« {{text}} »",
|
||
"removeMatch": "Aucune technique ici",
|
||
"cancel": "Annuler",
|
||
"manualTooltip": "{{technique}} (correction manuelle)",
|
||
"discoverabilityHint": "💡 Sélectionnez du texte, ou cliquez sur une technique surlignée, pour la corriger.",
|
||
"confirm": "Valider",
|
||
"techniqueSection": "Technique",
|
||
"changeTechnique": "Changer",
|
||
"noTechniqueSelected": "Aucune technique sélectionnée.",
|
||
"searchTechniquePlaceholder": "Rechercher une technique…",
|
||
"noTechniqueFound": "Aucune technique trouvée.",
|
||
"ingredientsSection": "Ingrédients",
|
||
"utensilsSection": "Ustensiles",
|
||
"temperatureSection": "Température",
|
||
"addIngredient": "Ajouter un ingrédient",
|
||
"addUtensil": "Ajouter un ustensile",
|
||
"addTemperature": "Ajouter une température",
|
||
"removeIngredient": "Retirer cet ingrédient",
|
||
"removeUtensil": "Retirer cet ustensile",
|
||
"removeTemperature": "Retirer cette température",
|
||
"selectSpanHint": "Sélectionnez le passage de texte concerné dans la description ci-dessus…",
|
||
"cancelSpanSelection": "Annuler la sélection",
|
||
"searchUtensilPlaceholder": "Rechercher un ustensile…",
|
||
"noUtensilFound": "Aucun ustensile trouvé.",
|
||
"addToList": "Ajouter",
|
||
"temperatureMode": {
|
||
"celsius": "°C",
|
||
"gasMark": "Thermostat",
|
||
"qualitative": "Qualitatif"
|
||
}
|
||
},
|
||
"tabs": {
|
||
"favoris": "Favoris",
|
||
"perso": "Perso",
|
||
"foyer": "Foyer",
|
||
"publique": "Publique"
|
||
},
|
||
"table": {
|
||
"name": "Nom",
|
||
"allergens": "Allergènes / intolérances",
|
||
"diets": "Régime associé"
|
||
},
|
||
"sources": {
|
||
"searchPlaceholder": "Rechercher…",
|
||
"empty": "Aucune recette trouvée.",
|
||
"alreadyImported": "Déjà importée",
|
||
"loading": "Chargement…",
|
||
"loadError": "Impossible de charger cette source pour le moment.",
|
||
"loadMoreError": "Impossible de charger la suite pour le moment.",
|
||
"retry": "Réessayer",
|
||
"detail": {
|
||
"viewSource": "Voir sur le site d'origine"
|
||
},
|
||
"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, gardez le texte tel quel à compléter plus tard, ou retirez-les.",
|
||
"resolveButton": "Choisir un ingrédient",
|
||
"keepAsPlaceholderButton": "Garder tel quel",
|
||
"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é.",
|
||
"addPlaceholderButton": "Ajouter « {{name}} » comme ingrédient à compléter",
|
||
"placeholderBadge": "à compléter",
|
||
"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": "Oeufs",
|
||
"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é",
|
||
"unitMissingHint": "Choisissez une unité pour cet ingrédient.",
|
||
"duplicateIngredientHint": "Cet ingrédient apparaît plusieurs fois — retirez les doublons.",
|
||
"incompleteIngredientsHint": "Complétez la quantité et l'unité des ingrédients surlignés ci-dessus avant de continuer.",
|
||
"duplicateIngredientsHint": "Retirez les doublons parmi les ingrédients surlignés ci-dessus avant de continuer.",
|
||
"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",
|
||
"loading": "Chargement de la liste de courses…",
|
||
"empty": "Aucun ingrédient à acheter pour cette semaine — ajoutez des recettes à votre planning."
|
||
},
|
||
"cookingSession": {
|
||
"title": "Cuisiner cette semaine",
|
||
"subtitle": "Toutes les étapes de la semaine, regroupées et réordonnées pour cuisiner efficacement.",
|
||
"loading": "Optimisation du plan de cuisine…",
|
||
"empty": "Rien de planifié cette semaine à cuisiner — ajoutez des recettes à votre planning.",
|
||
"recipesLegend": "Recettes de la semaine",
|
||
"tabs": {
|
||
"plan": "Plan",
|
||
"recipes": "Recettes"
|
||
},
|
||
"phase": {
|
||
"mise-en-place": "Mise en place",
|
||
"cooking": "Cuisson",
|
||
"finishing": "Dressage"
|
||
},
|
||
"stepper": {
|
||
"prev": "Étape précédente",
|
||
"next": "Étape suivante",
|
||
"position": "Étape {{current}} / {{total}}"
|
||
},
|
||
"progress": {
|
||
"tasks": "{{done}} / {{total}} tâches"
|
||
},
|
||
"background": {
|
||
"title": "Pendant ce temps"
|
||
},
|
||
"note": {
|
||
"applianceTemperatureConflict": "Four requis à {{count}} températures — enchaîner {{sequence}}",
|
||
"sequenceSeparator": "puis"
|
||
},
|
||
"task": {
|
||
"mergedPrepLabel": "{{technique}} : {{items}}",
|
||
"mergedSetupLabel": "{{technique}} · {{temperature}}",
|
||
"utensils": "Ustensiles",
|
||
"sharedBadge": "Mutualisé"
|
||
},
|
||
"recipesTab": {
|
||
"portions": "{{n}} portions"
|
||
}
|
||
},
|
||
"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",
|
||
"baste": "Arroser",
|
||
"appertize": "Appertiser",
|
||
"whiskPale": "Blanchir (jaunes d'œufs)",
|
||
"goldenBrown": "Blondir",
|
||
"braise": "Braiser",
|
||
"truss": "Brider",
|
||
"caramelize": "Caraméliser",
|
||
"score": "Cerner",
|
||
"lineMold": "Chemiser",
|
||
"clarify": "Clarifier",
|
||
"compote": "Compoter",
|
||
"concasse": "Concasser",
|
||
"confit": "Confire",
|
||
"julienne": "Couper en julienne",
|
||
"brunoise": "Couper en brunoise",
|
||
"mirepoix": "Couper en mirepoix",
|
||
"paysanne": "Couper en paysanne",
|
||
"blindBake": "Cuire à blanc",
|
||
"bainMarie": "Cuire au bain-marie",
|
||
"smother": "Cuire à l'étouffée",
|
||
"decant": "Décanter",
|
||
"dilute": "Délayer",
|
||
"punchDown": "Dégazer",
|
||
"disgorge": "Dégorger",
|
||
"loosen": "Détendre",
|
||
"shellEgg": "Écaler",
|
||
"scald": "Échauder",
|
||
"pod": "Écosser",
|
||
"emulsify": "Émulsionner",
|
||
"hollowOut": "Évider",
|
||
"shock": "Frapper",
|
||
"setGel": "Gélifier",
|
||
"glaze": "Glacer",
|
||
"thicken": "Lier",
|
||
"filet": "Lever les filets",
|
||
"proof": "Laisser pousser",
|
||
"peelBlanch": "Monder",
|
||
"whipUp": "Monter",
|
||
"moisten": "Mouiller",
|
||
"pasteurize": "Pasteuriser",
|
||
"poach": "Pocher",
|
||
"reduce": "Réduire",
|
||
"rubIn": "Sabler",
|
||
"dustWithFlour": "Singer",
|
||
"sweat": "Suer",
|
||
"sift": "Tamiser",
|
||
"toast": "Torréfier",
|
||
"zest": "Zester"
|
||
},
|
||
"utensils": {
|
||
"pan": "Poêle",
|
||
"saucepan": "Casserole",
|
||
"pot": "Marmite",
|
||
"knife": "Couteau",
|
||
"whisk": "Fouet",
|
||
"bowl": "Saladier",
|
||
"bakingSheet": "Plaque de cuisson",
|
||
"mold": "Moule",
|
||
"colander": "Passoire",
|
||
"cuttingBoard": "Planche à découper",
|
||
"oven": "Four",
|
||
"blender": "Blender",
|
||
"mixer": "Batteur",
|
||
"spatula": "Spatule",
|
||
"ladle": "Louche",
|
||
"grater": "Râpe",
|
||
"rollingPin": "Rouleau à pâtisserie",
|
||
"lid": "Couvercle",
|
||
"tongs": "Pince de cuisine",
|
||
"peeler": "Économe",
|
||
"sieve": "Tamis",
|
||
"foodProcessor": "Robot ménager",
|
||
"steamerBasket": "Panier vapeur",
|
||
"skewer": "Brochette",
|
||
"pastryBrush": "Pinceau de cuisine",
|
||
"ramekin": "Ramequin",
|
||
"dish": "Plat",
|
||
"wok": "Wok",
|
||
"thermometer": "Thermomètre",
|
||
"mandoline": "Mandoline"
|
||
},
|
||
"allergens": {
|
||
"gluten": "Gluten",
|
||
"crustaceans": "Crustacés",
|
||
"eggs": "Oeufs",
|
||
"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",
|
||
"groundVeal": "Veau haché",
|
||
"groundPork": "Porc haché",
|
||
"groundLamb": "Agneau haché",
|
||
"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",
|
||
"groundChicken": "Poulet haché",
|
||
"turkey": "Dinde",
|
||
"groundTurkey": "Dinde hachée",
|
||
"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": "Oeuf",
|
||
"eggYolk": "Jaune d'oeuf",
|
||
"eggWhite": "Blanc d'oeuf",
|
||
"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",
|
||
"groundCoriander": "Coriandre en poudre",
|
||
"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"
|
||
}
|
||
},
|
||
"admin": {
|
||
"common": {
|
||
"comingSoon": "Section à venir.",
|
||
"loading": "Chargement…",
|
||
"loadError": "Impossible de charger les données, réessayez plus tard."
|
||
},
|
||
"login": {
|
||
"title": "Administration",
|
||
"emailLabel": "Email",
|
||
"passwordLabel": "Mot de passe",
|
||
"submit": "Se connecter",
|
||
"submitting": "Connexion…"
|
||
},
|
||
"nav": {
|
||
"dashboard": "Tableau de bord",
|
||
"monitoring": "Monitoring",
|
||
"corrections": "Corrections",
|
||
"catalog": "Catalogue",
|
||
"tours": "Didacticiels"
|
||
},
|
||
"layout": {
|
||
"logout": "Se déconnecter"
|
||
},
|
||
"dashboard": {
|
||
"title": "Tableau de bord",
|
||
"lead": "Métriques d'utilisation de l'application.",
|
||
"windowTotal": "{{n}} sur 30 j",
|
||
"recipesBySource": "Recettes importées par source",
|
||
"noImports": "Aucune recette importée.",
|
||
"events": "Évènements enregistrés (30 j)",
|
||
"kpi": {
|
||
"users": "Utilisateurs",
|
||
"households": "Foyers",
|
||
"activeHouseholds": "Foyers actifs",
|
||
"recipes": "Recettes",
|
||
"recipesImported": "Recettes importées",
|
||
"plannings": "Plannings",
|
||
"planningItems": "Créneaux planifiés",
|
||
"favorites": "Favoris",
|
||
"corrections": "Corrections",
|
||
"correctionsUnconsumed": "Corrections à traiter",
|
||
"trainingSuggestions": "Suggestions d'entraînement",
|
||
"admins": "Administrateurs"
|
||
},
|
||
"series": {
|
||
"signups": "Inscriptions",
|
||
"recipesCreated": "Recettes créées",
|
||
"planningItemsAdded": "Ajouts au planning",
|
||
"correctionsSubmitted": "Corrections soumises",
|
||
"trainingSuggestions": "Suggestions générées"
|
||
}
|
||
},
|
||
"monitoring": {
|
||
"title": "Monitoring",
|
||
"lead": "Santé des microservices et de la base de données.",
|
||
"lastChecked": "Dernière vérification à {{time}}",
|
||
"latency": "Latence",
|
||
"detail": "Détail",
|
||
"lastRun": "Dernier job",
|
||
"never": "jamais",
|
||
"jobFailed": "échec",
|
||
"connectionState": {
|
||
"connecting": "Connexion en cours…",
|
||
"reconnecting": "Connexion perdue, reconnexion en cours…",
|
||
"error": "Connexion impossible"
|
||
},
|
||
"status": {
|
||
"up": "OK",
|
||
"degraded": "Dégradé",
|
||
"down": "Hors service",
|
||
"unknown": "Inconnu"
|
||
},
|
||
"service": {
|
||
"postgres": "Base de données",
|
||
"api": "API",
|
||
"intent-service": "Service NLP (spaCy)",
|
||
"tech-step-llm-worker": "Worker LLM"
|
||
}
|
||
},
|
||
"corrections": {
|
||
"title": "Corrections",
|
||
"lead": "Tri des corrections utilisateur pour le ré-entraînement NLP.",
|
||
"caveat": "Le gate F1 + backfill n'a de sens qu'APRÈS avoir édité training_data.py à la main et redémarré le service NLP (il ne s'entraîne qu'au démarrage). Cet écran ne peut faire ni l'un ni l'autre.",
|
||
"noSuggestions": "Aucune suggestion pour ces filtres.",
|
||
"synonyms": "Synonymes proposés (un par ligne)",
|
||
"utterances": "Phrases proposées (une par ligne)",
|
||
"save": "Enregistrer",
|
||
"apply": "Appliquer",
|
||
"reject": "Rejeter",
|
||
"tab": {
|
||
"suggestions": "Suggestions",
|
||
"corrections": "Corrections brutes"
|
||
},
|
||
"filter": {
|
||
"status": "Statut",
|
||
"source": "Source",
|
||
"consumed": "Consommée",
|
||
"hasCorrected": "Technique corrigée",
|
||
"any": "Toutes",
|
||
"yes": "Oui",
|
||
"no": "Non"
|
||
},
|
||
"snippet": {
|
||
"title": "Snippet training_data.py",
|
||
"help": "Agrège les synonymes/phrases des suggestions « applied » d'une technique, au format à coller dans training_data.py.",
|
||
"keyPlaceholder": "clé de technique (ex. simmer)",
|
||
"generate": "Générer"
|
||
},
|
||
"retrain": {
|
||
"title": "Gate F1 + backfill",
|
||
"help": "Lance l'évaluation de régression F1 puis, si elle passe, recalcule les techniques de toutes les étapes.",
|
||
"run": "Lancer",
|
||
"running": "En cours…",
|
||
"passed": "OK — {{changed}}/{{total}} étape(s) recalculée(s)",
|
||
"failed": "Échec du gate — aucun backfill"
|
||
},
|
||
"col": {
|
||
"clause": "Clause",
|
||
"change": "Changement",
|
||
"created": "Créée",
|
||
"consumed": "Consommée"
|
||
}
|
||
},
|
||
"catalog": {
|
||
"title": "Ingrédients hors-catalogue",
|
||
"lead": "Ingrédients saisis en texte libre par les utilisateurs parce que le catalogue ne les couvrait pas. Regroupés par nom normalisé — à promouvoir dans reference-seed-data.ts + les locales, à la main.",
|
||
"empty": "Aucun ingrédient hors-catalogue.",
|
||
"tab": {
|
||
"pending": "À traiter",
|
||
"reviewed": "Traités"
|
||
},
|
||
"recipeCount": "{{count}} recette(s)",
|
||
"alsoWritten": "Aussi écrit : {{variants}}",
|
||
"seenIn": "Vu dans :",
|
||
"firstSeen": "Première fois le {{date}}",
|
||
"markReviewed": "Marquer comme traité",
|
||
"marking": "…",
|
||
"pruneOrphans": "Purger les orphelins",
|
||
"pruning": "Purge…",
|
||
"prunedNone": "Aucun placeholder orphelin à purger.",
|
||
"pruned": "{{count}} placeholder(s) orphelin(s) supprimé(s)."
|
||
}
|
||
},
|
||
"landing": {
|
||
"hero": {
|
||
"title": "Cuisinez une fois, mangez toute la semaine",
|
||
"lede": "Planifiez vos repas, importez des recettes depuis vos sites préférés, et générez la liste de courses qui va avec — pour tout le foyer, sans y penser deux fois.",
|
||
"ctaSignup": "Créer un compte",
|
||
"ctaLogin": "Se connecter",
|
||
"mobileDownload": "Télécharger pour Android",
|
||
"mobileHint": "Fichier .apk à installer soi-même : Android demandera d'autoriser l'installation depuis une source inconnue. Ce n'est pas une version du Play Store, et un compte reste nécessaire."
|
||
},
|
||
"features": {
|
||
"title": "Ce que batchCooking fait pour vous",
|
||
"planning": {
|
||
"title": "Planning de la semaine",
|
||
"body": "Une grille 7 jours × 5 repas : glissez vos recettes dans les créneaux, ajustez les portions, et laissez les restes se recaser tout seuls."
|
||
},
|
||
"import": {
|
||
"title": "Import de recettes",
|
||
"body": "Parcourez TheMealDB, Marmiton, 750g, Manger Bouger, Quitoque ou Oh mon Bento et importez une recette en un geste, ingrédients et techniques déjà reconnus."
|
||
},
|
||
"health": {
|
||
"title": "Allergies et régimes",
|
||
"body": "Déclarez allergènes, régime alimentaire et ingrédients que vous n'aimez pas : les recettes qui coincent sont signalées avant que vous ne les planifiiez."
|
||
},
|
||
"household": {
|
||
"title": "Foyer partagé",
|
||
"body": "Invitez les autres membres du foyer avec un code : planning, liste de courses et préférences de chacun, au même endroit."
|
||
}
|
||
},
|
||
"preview": {
|
||
"title": "Un aperçu",
|
||
"planningAlt": "Capture d'écran du planning hebdomadaire de batchCooking",
|
||
"planningCaption": "Le planning de la semaine, repas par repas.",
|
||
"recipeAlt": "Capture d'écran d'une fiche recette avec les techniques de cuisson surlignées",
|
||
"recipeCaption": "Chaque recette, avec ses techniques repérées dans le texte.",
|
||
"cookingSessionAlt": "Capture d'écran de la séance de cuisine optimisée",
|
||
"cookingSessionCaption": "La séance de cuisine, réorganisée en étapes groupées."
|
||
},
|
||
"finalCta": {
|
||
"title": "Prêt à arrêter d'improviser le dîner ?",
|
||
"button": "Créer un compte"
|
||
}
|
||
},
|
||
"download": {
|
||
"title": "Installer l'application Android",
|
||
"lede": "Téléchargez le fichier .apk, ou réessayez d'ouvrir l'application si elle est déjà installée sur cet appareil.",
|
||
"downloadButton": "Télécharger l'APK",
|
||
"retryButton": "Réessayer d'ouvrir l'application",
|
||
"backLink": "Retour à l'accueil"
|
||
},
|
||
"tour": {
|
||
"controls": {
|
||
"next": "Suivant",
|
||
"prev": "Précédent",
|
||
"done": "Terminé"
|
||
},
|
||
"replay": {
|
||
"title": "Revoir un tutoriel",
|
||
"button": "Revoir"
|
||
}
|
||
},
|
||
"appUpdate": {
|
||
"banner": {
|
||
"text": "Une nouvelle version ({{version}}) est disponible.",
|
||
"update": "Mettre à jour",
|
||
"dismiss": "Plus tard"
|
||
}
|
||
},
|
||
"appSettings": {
|
||
"title": "Paramètres d'application",
|
||
"version": {
|
||
"title": "Version installée",
|
||
"installed": "Version {{version}}",
|
||
"checkButton": "Vérifier les mises à jour",
|
||
"checking": "Vérification…",
|
||
"upToDate": "L'application est à jour.",
|
||
"checkError": "Impossible de vérifier les mises à jour pour le moment.",
|
||
"webHint": "La vérification des mises à jour n'est disponible que dans l'application mobile — sur le web, actualiser la page charge toujours la dernière version."
|
||
},
|
||
"redirect": {
|
||
"title": "Ouverture de l'application",
|
||
"stayOnWebLabel": "Toujours rester sur le site web",
|
||
"stayOnWebHint": "Par défaut, ouvrir batchCooking sur votre téléphone propose de basculer vers l'application si elle est installée. Activez cette option pour rester sur le site web à chaque fois."
|
||
}
|
||
}
|
||
}
|