Initial commit (unpacked platform)

This commit is contained in:
Sven (AAMOS AI)
2026-08-05 19:21:11 +07:00
commit ac5340195a
314 changed files with 57584 additions and 0 deletions
+338
View File
@@ -0,0 +1,338 @@
{
"common.loading": "Chargement …",
"common.error": "Un problème est survenu. Réessayez.",
"common.retry": "Réessayer",
"common.save": "Enregistrer",
"common.cancel": "Annuler",
"common.next": "Suivant",
"common.back": "Retour",
"common.done": "Terminé",
"common.skip": "Passer",
"common.offline": "Hors ligne dernières données chargées",
"common.estimate": "Estimation",
"tabs.whatToEat": "On mange quoi ?",
"tabs.scan": "Scanner",
"tabs.myDay": "Ma journée",
"tabs.home": "À la maison",
"auth.login": "Se connecter",
"auth.register": "Créer un compte",
"auth.email": "E-mail",
"auth.password": "Mot de passe",
"auth.displayName": "Comment vous appeler ?",
"auth.noAccount": "Nouveau ? Créez un compte",
"auth.hasAccount": "Déjà un compte ? Connectez-vous",
"auth.trialNote": "7 jours d'accès complet sans carte.",
"auth.forgotLink": "Mot de passe oublié ?",
"auth.forgotTitle": "Réinitialiser le mot de passe",
"auth.forgotBody": "Saisissez votre e-mail : nous enverrons un lien si le compte existe.",
"auth.forgotSubmit": "Envoyer le lien",
"auth.forgotSentTitle": "Vérifiez votre boîte mail",
"auth.forgotSentBody": "Si l'adresse possède un compte, un lien valable 30 minutes a été envoyé. Ouvrez-le sur cet appareil.",
"auth.backToLogin": "Retour à la connexion",
"auth.resetTitle": "Choisissez un nouveau mot de passe",
"auth.resetBody": "Le lien est valable 30 minutes et à usage unique. Tous les appareils seront déconnectés.",
"auth.resetTokenPlaceholder": "Collez le code reçu par e-mail",
"auth.newPassword": "Nouveau mot de passe (10 caractères min.)",
"auth.resetSubmit": "Changer le mot de passe",
"auth.resetDoneTitle": "C'est fait !",
"auth.resetDoneBody": "Votre mot de passe a été changé. Connectez-vous avec le nouveau.",
"auth.verifyDoneTitle": "E-mail confirmé",
"auth.verifyDoneBody": "Merci ! Votre compte est vérifié.",
"auth.verifyFailedTitle": "Le lien n'a pas fonctionné",
"auth.verifyFailedBody": "Le lien est invalide ou expiré. Demandez-en un nouveau depuis votre profil.",
"onboarding.title": "Parlez-nous un peu de vous",
"onboarding.subtitle": "Tout est facultatif et modifiable à tout moment. Plus vous en dites, meilleures sont les suggestions.",
"onboarding.goal": "Quel est votre objectif principal ?",
"onboarding.diet": "Comment mangez-vous ?",
"onboarding.allergies": "Allergies et intolérances",
"onboarding.allergyNote": "Le filtre allergies est toujours strict : les plats contenant vos allergènes ne sont jamais affichés.",
"onboarding.household": "Votre foyer",
"onboarding.householdCreate": "Créer un foyer",
"onboarding.householdJoin": "Rejoindre avec un code",
"onboarding.householdName": "Nom du foyer",
"onboarding.inviteCode": "Code d'invitation",
"onboarding.mode": "Quel niveau de précision ?",
"onboarding.modeSimple": "Mode simple",
"onboarding.modeSimpleDesc": "Photographiez vos aliments, acceptez les estimations, zéro prise de tête.",
"onboarding.modeExact": "Mode exact",
"onboarding.modeExactDesc": "Pesez, saisissez les grammes, contrôle total des chiffres.",
"onboarding.notMedical": "{brand} fournit des repères, pas un avis médical.",
"wte.title": "On mange quoi ?",
"wte.subtitle": "Selon ce que vous avez chez vous, ce qu'il faut consommer vite et vos goûts.",
"wte.cravingPlaceholder": "J'ai envie de … (ex. crémeux, asiatique, moins de 500 kcal)",
"wte.mealBoxFirst": "Plats prêts à la maison",
"wte.whyTitle": "Pourquoi cette suggestion ?",
"wte.coverage": "{pct} % à la maison",
"wte.missing": "Il manque : {items}",
"wte.empty": "Pas encore de suggestions : ajoutez des aliments ou assouplissez les filtres.",
"wte.refresh": "Nouvelles suggestions",
"scan.title": "Scanner",
"scan.subtitle": "Remplissez votre stock ou enregistrez un repas avec l'appareil photo.",
"scan.fridge": "Frigo",
"scan.freezer": "Congélateur",
"scan.pantry": "Placard",
"scan.ingredients": "Ingrédients",
"scan.plate": "Assiette",
"scan.receipt": "Ticket de caisse",
"scan.barcode": "Code-barres",
"scan.expiry": "Date limite",
"scan.nutrition": "Étiquette nutritionnelle",
"scan.takePhoto": "Prendre une photo",
"scan.tips.title": "Pour une analyse optimale",
"scan.tips.overview": "Commencez par une vue d'ensemble",
"scan.tips.shelf": "Photographiez étagère par étagère",
"scan.tips.light": "Évitez l'obscurité et les ombres",
"scan.tips.move": "Écartez les produits qui se cachent",
"scan.analyzing": "Analyse en cours …",
"scan.quotaLeft_one": "1 scan IA restant ce mois-ci",
"scan.quotaLeft_other": "{count} scans IA restants ce mois-ci",
"scan.review.title": "Vérifiez le résultat",
"scan.review.subtitle": "L'IA doute parfois : c'est vous qui décidez. Modifiez, supprimez ou ajoutez avant d'enregistrer.",
"scan.review.uncertain": "Incertain à vérifier",
"scan.review.approveAll": "Enregistrer dans le stock",
"scan.review.rejected": "Supprimé",
"scan.failed": "L'analyse a échoué. Réessayez ou saisissez manuellement.",
"myday.title": "Ma journée",
"myday.calories": "Calories",
"myday.protein": "Protéines",
"myday.carbs": "Glucides",
"myday.fat": "Lipides",
"myday.fiber": "Fibres",
"myday.salt": "Sel",
"myday.remaining": "{kcal} kcal restantes",
"myday.over": "{kcal} kcal au-dessus de l'objectif",
"myday.logMeal": "Enregistrer un repas",
"myday.noMeals": "Aucun repas enregistré aujourd'hui.",
"myday.estimateNote": "Les valeurs avec ~ sont des estimations ajustables.",
"myday.targetsNote": "Les objectifs sont des repères, pas un avis médical.",
"home.title": "À la maison",
"home.inventory": "Stock",
"home.useSoon": "À consommer vite",
"home.mealBoxes": "Lunchbox",
"home.shopping": "Liste de courses",
"home.budget": "Budget",
"home.household": "Foyer",
"home.waste": "Gaspillage",
"home.emptyInventory": "Le stock est vide. Scannez le frigo ou ajoutez manuellement.",
"home.expiresIn_one": "1 jour restant",
"home.expiresIn_other": "{days} jours restants",
"home.expiresToday": "Expire aujourd'hui",
"home.expired": "Expiré",
"home.pastBestBefore": "DLUO dépassée : sentez et goûtez d'abord",
"recipe.portions_one": "1 portion",
"recipe.portions_other": "{count} portions",
"recipe.time": "{min} min",
"recipe.perPortion": "par portion",
"recipe.ingredients": "Ingrédients",
"recipe.steps": "Préparation",
"recipe.cook": "Cuisiner maintenant",
"recipe.notSafe": "Incompatible avec vos réglages alimentaires",
"recipe.substitutions": "Remplacer",
"recipe.iCookedThis": "Je l'ai cuisiné",
"recipe.cost": "env. {amount}/portion",
"cooking.step": "Étape {current} sur {total}",
"cooking.timer": "Lancer le minuteur",
"cooking.timerRunning": "{time} restants",
"cooking.finish": "Terminé enregistrer le repas",
"cooking.scale": "Portions",
"cooking.keepAwake": "L'écran reste allumé pendant que vous cuisinez",
"cooked.title": "Alors, verdict ?",
"cooked.portionsCooked": "Portions cuisinées",
"cooked.whoAte": "Qui a mangé ?",
"cooked.mealBoxes": "Portions en lunchbox",
"cooked.deductPantry": "Déduire les ingrédients du stock",
"cooked.rate": "Noter",
"shopping.title": "Liste de courses",
"shopping.addPlaceholder": "Ajouter un article …",
"shopping.complete": "Terminer les courses",
"shopping.completeNote": "Les articles cochés rejoignent le stock.",
"shopping.empty": "La liste est vide.",
"shopping.estimated": "env. {amount}",
"shopping.estimatedTotal": "Total estimé : env. {amount}",
"mealbox.title": "Lunchbox",
"mealbox.eatBy": "À consommer avant le {date}",
"mealbox.portionsLeft_one": "1 portion restante",
"mealbox.portionsLeft_other": "{count} portions restantes",
"mealbox.eat": "Manger maintenant",
"mealbox.empty": "Aucune lunchbox pour l'instant. En cuisinant, gardez des portions ici.",
"household.members": "Membres",
"household.invite": "Inviter avec le code : {code}",
"household.shared": "Partagé dans le foyer : stock, liste de courses, plan de semaine, lunchbox et budget.",
"household.private": "Privé par personne : objectifs, allergies, données de santé et historique des repas.",
"memory.title": "Ce que {brand} sait de moi",
"memory.subtitle": "Transparence totale. Corrigez, mettez en pause ou supprimez : votre mémoire vous appartient.",
"memory.paused": "En pause",
"memory.verify": "Exact",
"memory.pause": "Pause",
"memory.delete": "Supprimer",
"memory.deleteAll": "Supprimer toute la mémoire",
"memory.empty": "{brand} n'a encore rien appris sur vous.",
"memory.origin.user_stated": "Vous nous l'avez dit",
"memory.origin.observed": "Habitude observée",
"memory.origin.ai_inferred": "Hypothèse de l'IA",
"paywall.title": "{brand} Premium",
"paywall.subtitle": "L'OS alimentaire de tout le foyer : stock illimité, plan de semaine et partage.",
"paywall.trialActive_one": "1 jour d'essai restant",
"paywall.trialActive_other": "{days} jours d'essai restants",
"paywall.household": "Household · jusqu'à 3 personnes",
"paywall.family": "Family · jusqu'à 6 personnes",
"paywall.large": "Large Household · jusqu'à 12 personnes",
"paywall.perMonth": "{price}/mois",
"paywall.fairUse": "Quota d'usage raisonnable de scans IA inclus.",
"paywall.restore": "Restaurer les achats",
"paywall.freeNote": "Gratuit : 10 scans IA/mois, stock manuel, recettes enregistrées et suivi simple.",
"profile.title": "Profil",
"profile.goals": "Objectifs & alimentation",
"profile.consents": "Consentements & données",
"profile.memory": "Ce que {brand} sait de moi",
"profile.subscription": "Abonnement",
"profile.logout": "Se déconnecter",
"profile.export": "Exporter mes données",
"profile.deleteAccount": "Supprimer le compte",
"profile.language": "Langue",
"profile.language.sv": "Svenska",
"profile.language.en": "English",
"profile.emailUnverified": "Adresse e-mail non confirmée",
"profile.resendVerification": "Renvoyer l'e-mail de confirmation",
"profile.verificationSent": "Envoyé ! Vérifiez votre boîte mail.",
"profile.language.es": "Español",
"profile.language.it": "Italiano",
"profile.language.de": "Deutsch",
"profile.language.fr": "Français",
"profile.language.da": "Dansk",
"profile.language.nb": "Norsk",
"profile.language.fi": "Suomi",
"profile.language.nl": "Nederlands",
"profile.language.pl": "Polski",
"profile.language.pt": "Português",
"common.oops": "Oups",
"common.undo": "Rétablir",
"common.remove": "Retirer",
"common.add": "Ajouter",
"common.on": "Activé",
"common.off": "Désactivé",
"home.thisWeek": "Cette semaine",
"home.wasteWeek": "Gaspillage cette semaine",
"home.useSoonHint": "La DDM (à consommer de préférence) concerne la qualité : sentez, regardez et goûtez avant de jeter. La DLC doit en revanche être respectée.",
"scan.review.itemPlaceholder": "Article",
"scan.review.quantityPlaceholder": "Quantité",
"scan.review.unitPlaceholder": "Unité (g, l, pcs …)",
"scan.review.datePlaceholder": "AAAA-MM-JJ (facultatif)",
"scan.review.dateKindBestBefore": "DDM de préférence",
"scan.review.dateKindUseBy": "DLC à consommer jusqu'au",
"scan.review.bestBeforeNote": "Date de qualité : l'aliment peut rester bon après. Sentez et goûtez avant de jeter.",
"scan.review.useByNote": "Date de sécurité : ne pas consommer après cette date.",
"scan.review.addItem": "+ Ajouter un article",
"scan.review.unknownItem": "Article inconnu",
"barcode.aim": "Visez le code-barres avec l'appareil photo",
"barcode.addPrompt": "Ajouter au stock ?",
"barcode.kcalPer100": "{kcal} kcal/100 g",
"barcode.noNutrition": "Pas de données nutritionnelles",
"barcode.unknownTitle": "Produit inconnu",
"barcode.unknownBody": "Ce produit n'est pas encore dans la base. Photographiez l'avant et l'étiquette nutritionnelle et nous l'ajouterons.",
"barcode.photoPackage": "Photographier l'emballage",
"barcode.needHousehold": "Il vous faut d'abord un foyer.",
"barcode.noLocation": "Aucun lieu de stockage trouvé.",
"barcode.cameraTitle": "Appareil photo requis",
"barcode.cameraBody": "{brand} a besoin de l'appareil photo pour scanner les codes-barres.",
"barcode.allowCamera": "Autoriser l'appareil photo",
"onboarding.goal.lose_weight": "Perdre du poids",
"onboarding.goal.build_muscle": "Prendre du muscle",
"onboarding.goal.maintain_weight": "Maintenir mon poids",
"onboarding.goal.more_protein": "Manger plus de protéines",
"onboarding.goal.less_waste": "Réduire le gaspillage",
"onboarding.goal.lower_cost": "Dépenser moins en courses",
"onboarding.goal.cook_more": "Cuisiner plus à la maison",
"onboarding.diet.omnivore": "Omnivore",
"onboarding.diet.flexitarian": "Flexitarien",
"onboarding.diet.pescatarian": "Pescétarien",
"onboarding.diet.vegetarian": "Végétarien",
"onboarding.diet.vegan": "Végane",
"onboarding.allergen.gluten": "Gluten",
"onboarding.allergen.milk": "Lait/lactose",
"onboarding.allergen.eggs": "Œufs",
"onboarding.allergen.tree_nuts": "Fruits à coque",
"onboarding.allergen.peanuts": "Arachides",
"onboarding.allergen.fish": "Poisson",
"onboarding.allergen.crustaceans": "Crustacés",
"onboarding.allergen.soy": "Soja",
"onboarding.allergen.sesame": "Sésame",
"onboarding.bodyTitle": "Pour des objectifs caloriques personnalisés (facultatif)",
"onboarding.weightPlaceholder": "Poids (kg)",
"onboarding.heightPlaceholder": "Taille (cm)",
"onboarding.birthYearPlaceholder": "Année de naissance",
"onboarding.householdDefaultName": "Maison",
"onboarding.modesCombine": "Les modes se combinent : simple au quotidien, précis quand vous voulez.",
"myday.mealType.breakfast": "Petit-déjeuner",
"myday.mealType.lunch": "Déjeuner",
"myday.mealType.dinner": "Dîner",
"myday.mealType.snack": "Encas",
"myday.mealType.dessert": "Dessert",
"myday.overRecommended": "Au-dessus du recommandé",
"myday.todaysMeals": "Repas du jour",
"myday.estimateRange": "{min}{max} kcal, probablement {kcal}",
"myday.kcalProtein": "{kcal} kcal · {protein} g de protéines",
"logmeal.mealTypeTitle": "Type de repas",
"logmeal.quickTitle": "Enregistrement rapide",
"logmeal.quickSubtitle": "Enregistre les mêmes valeurs nutritionnelles que la dernière fois.",
"logmeal.manualTitle": "Manuel",
"logmeal.whatPlaceholder": "Qu'avez-vous mangé ?",
"logmeal.proteinPlaceholder": "protéines (g)",
"logmeal.validationTitle": "Infos manquantes",
"logmeal.validationBody": "Le nom et les calories sont requis pour un enregistrement manuel.",
"logmeal.photoTip": "Astuce : photographiez l'assiette dans Scanner, l'app estime pour vous vous confirmez toujours.",
"shopping.section.frukt_gront": "Fruits & légumes",
"shopping.section.brod": "Pain",
"shopping.section.mejeri": "Produits laitiers",
"shopping.section.kott_fagel": "Viande & volaille",
"shopping.section.fisk": "Poisson",
"shopping.section.chark": "Charcuterie",
"shopping.section.frys": "Surgelés",
"shopping.section.skafferi": "Épicerie",
"shopping.section.konserver": "Conserves",
"shopping.section.kryddor_bak": "Épices & pâtisserie",
"shopping.section.dryck": "Boissons",
"shopping.section.snacks": "Snacks",
"shopping.section.hygien_ovrigt": "Divers",
"shopping.completedTitle": "Terminé !",
"household.role.owner": "Propriétaire",
"household.role.adult": "Adulte",
"household.role.member": "Membre",
"household.role.child": "Enfant",
"household.empty": "Vous n'avez pas encore de foyer. Créez-en un lors de l'intégration ou rejoignez-en un avec un code.",
"household.shareCode": "Partagez le code avec votre famille pour partager stock, liste et planning.",
"household.locations": "Lieux de stockage",
"household.portionFactor": "×{factor} portion",
"mealbox.enjoyTitle": "Bon appétit !",
"mealbox.enjoyBody": "La portion est enregistrée dans Ma journée.",
"mealbox.guidanceNote": "Le délai recommandé est indicatif : fiez-vous à l'odeur et au goût.",
"paywall.soonTitle": "Bientôt !",
"paywall.soonBody": "Les achats s'activeront via l'App Store/Google Play quand l'intégration boutique sera lancée (phase 7). Le backend est déjà prêt.",
"paywall.popular": "Le plus populaire",
"paywall.choose": "Choisir",
"recipe.saved": "Enregistrée",
"recipe.save": "Enregistrer",
"recipe.avgRating": "Moyenne {avg} sur {count} avis",
"memory.verified": "Vérifié",
"memory.resume": "Reprendre",
"memory.deleteAllTitle": "Supprimer toute la mémoire ?",
"memory.irreversible": "Cette action est irréversible.",
"profile.consent.personalization": "Fonctions personnelles (mémoire & profil de goûts)",
"profile.consent.anonymized_improvement": "Amélioration anonymisée de l'IA",
"profile.consent.image_training": "Mes photos peuvent servir à l'entraînement",
"profile.consent.health_integration": "Données de santé (Apple Health / Health Connect)",
"profile.consent.location_weather": "Position pour des suggestions selon la météo",
"profile.consent.push_notifications": "Notifications push",
"profile.modeLabel": "Mode :",
"profile.memorySubtitle": "Voyez, corrigez, mettez en pause ou supprimez ce que la plateforme a appris.",
"profile.consentsNote": "Les consentements sont distincts : les fonctions personnelles n'exigent jamais le consentement d'entraînement.",
"profile.aiScansUsed": "Scans IA : {used} / {total} ce mois-ci",
"profile.deleteTitle": "Supprimer le compte ?",
"profile.deleteBody": "Toutes vos données seront supprimées définitivement conformément au RGPD.",
"cooking.timerDone": "Terminé !",
"cooked.deductPantryNote": "Les ingrédients sont déduits du stock, en commençant par ceux qui expirent en premier.",
"home.moreItems_one": "+ 1 autre …",
"home.moreItems_other": "+ {count} autres …",
"shopping.completedBody_one": "1 article a été ajouté au stock.",
"shopping.completedBody_other": "{count} articles ont été ajoutés au stock."
}