Files
food-ai/client/lib/l10n/app_es.arb
dbastrikin b38190ff5b feat: add product selection step before meal planning
Inserts a new PlanProductsSheet as step 1 of the planning flow.
Users see their current products as a multi-select checklist (all
selected by default) before choosing the planning mode and dates.

- Empty state explains the benefit and offers "Add products" CTA
  while always allowing "Plan without products" to skip
- Selected product IDs flow through PlanMenuSheet →
  PlanDatePickerSheet → MenuService.generateForDates → backend
- Backend: added ProductIDs field to generate-menu request body;
  uses ListForPromptByIDs when set, ListForPrompt otherwise
- Backend: added Repository.ListForPromptByIDs (filtered SQL query)
- All 12 ARB locale files updated with planProducts* keys

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:07:28 +02:00

170 lines
5.9 KiB
Plaintext

{
"@@locale": "es",
"appTitle": "FoodAI",
"greetingMorning": "Buenos días",
"greetingAfternoon": "Buenas tardes",
"greetingEvening": "Buenas noches",
"caloriesUnit": "kcal",
"gramsUnit": "g",
"goalLabel": "meta:",
"consumed": "Consumido",
"remaining": "Restante",
"exceeded": "Excedido",
"proteinLabel": "Proteínas",
"fatLabel": "Grasas",
"carbsLabel": "Carbohidratos",
"today": "Hoy",
"yesterday": "Ayer",
"mealsSection": "Comidas",
"addDish": "Añadir plato",
"scanDish": "Escanear",
"menu": "Menú",
"dishHistory": "Historial de platos",
"recommendCook": "Recomendamos cocinar",
"camera": "Cámara",
"gallery": "Galería",
"analyzingPhoto": "Analizando foto...",
"inQueue": "Estás en la cola",
"queuePosition": "Posición {position}",
"@queuePosition": {
"placeholders": {
"position": {
"type": "int"
}
}
},
"processing": "Procesando...",
"upgradePrompt": "¿Saltar la cola? Actualiza →",
"recognitionFailed": "Reconocimiento fallido. Inténtalo de nuevo.",
"dishRecognition": "Reconocimiento de platos",
"all": "Todos",
"dishRecognized": "Plato reconocido",
"recognizing": "Reconociendo…",
"recognitionError": "Error de reconocimiento",
"dishResultTitle": "Plato reconocido",
"selectDish": "Selecciona un plato",
"dishNotRecognized": "Plato no reconocido",
"tryAgain": "Intentar de nuevo",
"nutritionApproximate": "Los valores nutricionales son aproximados — estimados a partir de la foto.",
"portion": "Porción",
"mealType": "Tipo de comida",
"dateLabel": "Fecha",
"addToJournal": "Añadir al diario",
"addFailed": "Error al añadir. Inténtalo de nuevo.",
"historyTitle": "Historial de reconocimientos",
"historyLoadError": "Error al cargar el historial",
"retry": "Reintentar",
"noHistory": "Sin reconocimientos aún",
"profileTitle": "Perfil",
"edit": "Editar",
"bodyParams": "PARÁMETROS CORPORALES",
"goalActivity": "OBJETIVO Y ACTIVIDAD",
"nutrition": "NUTRICIÓN",
"settings": "AJUSTES",
"height": "Altura",
"weight": "Peso",
"age": "Edad",
"gender": "Género",
"genderMale": "Masculino",
"genderFemale": "Femenino",
"goalLoss": "Pérdida de peso",
"goalMaintain": "Mantenimiento",
"goalGain": "Ganancia muscular",
"activityLow": "Baja",
"activityMedium": "Media",
"activityHigh": "Alta",
"calorieGoal": "Objetivo calórico",
"mealTypes": "Tipos de comida",
"formulaNote": "Calculado con la fórmula de Mifflin-St Jeor",
"language": "Idioma",
"notSet": "No establecido",
"calorieHint": "Introduce los parámetros corporales para calcular el objetivo calórico",
"logout": "Cerrar sesión",
"editProfile": "Editar perfil",
"cancel": "Cancelar",
"save": "Guardar",
"nameLabel": "Nombre",
"heightCm": "Altura (cm)",
"weightKg": "Peso (kg)",
"birthDate": "Fecha de nacimiento",
"nameRequired": "Introduce el nombre",
"profileUpdated": "Perfil actualizado",
"profileSaveFailed": "Error al guardar",
"mealTypeBreakfast": "Desayuno",
"mealTypeSecondBreakfast": "Segundo desayuno",
"mealTypeLunch": "Almuerzo",
"mealTypeAfternoonSnack": "Merienda",
"mealTypeDinner": "Cena",
"mealTypeSnack": "Aperitivo",
"navHome": "Inicio",
"navProducts": "Productos",
"navRecipes": "Recetas",
"addFromReceiptOrPhoto": "Añadir desde recibo o foto",
"chooseMethod": "Elegir método",
"photoReceipt": "Fotografiar recibo",
"photoReceiptSubtitle": "Reconocemos todos los productos del recibo",
"photoProducts": "Fotografiar productos",
"photoProductsSubtitle": "Nevera, mesa, estante — hasta 3 fotos",
"addPackagedFood": "Agregar alimento envasado",
"scanBarcode": "Escanear código de barras",
"portionWeightG": "Peso de la porción (g)",
"productNotFound": "Producto no encontrado",
"enterManually": "Ingresar manualmente",
"perHundredG": "por 100 g",
"searchFoodHint": "Buscar productos y platos...",
"recentlyUsedLabel": "Usados recientemente",
"productsSection": "Productos",
"dishesSection": "Platos",
"noResultsForQuery": "Nada encontrado para \"{query}\"",
"@noResultsForQuery": {
"placeholders": {
"query": {
"type": "String"
}
}
},
"servingsLabel": "Porciones",
"addToDiary": "Añadir al diario",
"scanDishPhoto": "Escanear foto",
"planningForDate": "",
"@planningForDate": {
"placeholders": {
"date": {
"type": "String"
}
}
},
"markAsEaten": "Marcar como comido",
"plannedMealLabel": "Planificado",
"generateWeekLabel": "Planificar la semana",
"generateWeekSubtitle": "La IA creará un menú con desayuno, comida y cena para toda la semana",
"generatingMenu": "Generando menú...",
"dayPlannedLabel": "Día planificado",
"planMenuButton": "Planificar comidas",
"planMenuTitle": "¿Qué planificar?",
"planOptionSingleMeal": "Una comida",
"planOptionSingleMealDesc": "Elegir día y tipo de comida",
"planOptionDay": "Un día",
"planOptionDayDesc": "Todas las comidas de un día",
"planOptionDays": "Varios días",
"planOptionDaysDesc": "Personalizar período",
"planOptionWeek": "Una semana",
"planOptionWeekDesc": "7 días de una vez",
"planSelectDate": "Seleccionar fecha",
"planSelectMealType": "Tipo de comida",
"planSelectRange": "Seleccionar período",
"planGenerateButton": "Planificar",
"planGenerating": "Generando plan…",
"planSuccess": "¡Menú planificado!",
"planProductsTitle": "Productos para el menú",
"planProductsSubtitle": "La IA tendrá en cuenta los productos seleccionados al generar recetas",
"planProductsEmpty": "No hay productos añadidos",
"planProductsEmptyMessage": "Añade productos que tengas en casa — la IA sugerirá recetas con lo que ya tienes",
"planProductsAddProducts": "Añadir productos",
"planProductsContinue": "Continuar",
"planProductsSkip": "Omitir selección de productos",
"planProductsSkipNoProducts": "Planificar sin productos",
"planProductsSelectAll": "Seleccionar todo",
"planProductsDeselectAll": "Deseleccionar todo"
}