fix: barcode EAN checksum validation + recipe persons dialog conflict

- Manual barcode input now blocks on invalid EAN checksum (was warning-only)
- Native BarcodeDetector now validates EAN/UPC checksum before confirming
- Renamed duplicate adjustRecipePersons (rescaler) to scaleRecipePersons
  to restore +/- buttons in the recipe generation dialog
- Added error.barcode_checksum translation key (all 5 languages)
- Bump version to v1.7.35
This commit is contained in:
dadaloop82
2026-06-02 08:58:48 +00:00
parent 94e98bc79f
commit 7104483dac
9 changed files with 442 additions and 78 deletions
+21 -1
View File
@@ -149,6 +149,12 @@
"banner_anomaly_untracked_detail": "Tienes <strong>{inv_qty} {unit}</strong> en inventario, pero las salidas registradas superan las entradas — el stock inicial probablemente nunca se añadió como transacción «entrada». Puedes corregir la cantidad o registrar las entradas faltantes.",
"banner_anomaly_ghost_title": "tienes menos stock del esperado",
"banner_anomaly_ghost_detail": "Según las operaciones registradas deberías tener {expected_qty} {unit} de {name}, pero el inventario solo muestra {inv_qty} {unit}. ¿Tomaste stock sin registrarlo?",
"banner_dup_loss_title": "Control de doble salida: {name}",
"banner_dup_loss_detail": "Posible registro duplicado en {location}: dos salidas seguidas ({qty_pair}) en ~{seconds}s. Revisa y corrige si hace falta.",
"banner_dup_loss_action_fix": "Corregir cantidad",
"banner_dup_loss_action_open": "Abrir ficha del producto",
"banner_dup_loss_action_done": "Ya revisado",
"banner_dup_loss_toast_done": "Control marcado como revisado",
"consumed": "Consumido: {n} ({pct}%)",
"wasted": "Desperdiciado: {n} ({pct}%)",
"more_opened": "y {n} más abiertos...",
@@ -218,10 +224,23 @@
"status_invalid": "Inválido: {code} — reintentando",
"status_confirmed": "Confirmado!",
"status_parallel": "Escaneo combinado activo...",
"status_ocr_searching": "Estoy leyendo los números del código de barras...",
"status_ai_visual_searching": "Ahora intento reconocer el producto...",
"method_ai_ocr": "Gemini OCR",
"method_ai_vision": "Gemini Vision",
"ai_fallback_searching": "Identificación de IA en curso...",
"ai_fallback_found": "Producto identificado por IA",
"ai_fallback_not_found": "IA: producto no reconocido",
"ai_fallback_exhausted": "IA: producto no reconocido — prueba a escanear el código"
"ai_fallback_exhausted": "IA: producto no reconocido — prueba a escanear el código",
"ai_overlay_msg": "Gemini Vision está analizando el producto...",
"ai_retry_btn": "Reintentar con IA",
"ai_match_title": "Producto reconocido por IA",
"ai_match_subtitle": "Elige un producto ya en despensa o agrega el detectado.",
"ai_match_existing": "Posibles coincidencias en despensa",
"ai_match_none": "No se encontraron productos similares en despensa.",
"ai_match_use_btn": "Usar este",
"ai_match_add_btn": "Agregar \"{name}\"",
"ai_detected_label": "IA detecto"
},
"action": {
"title": "¿Qué quieres hacer?",
@@ -1020,6 +1039,7 @@
"ai_quota": "Cuota de IA agotada. Inténtalo de nuevo en unos minutos.",
"barcode_empty": "Introduce un código de barras",
"barcode_format": "El código de barras solo puede contener números (4-14 dígitos)",
"barcode_checksum": "Suma de comprobación EAN inválida — verifica los dígitos del código",
"min_chars": "Escribe al menos 2 caracteres",
"not_in_inventory": "Producto no en inventario",
"appliance_exists": "El electrodoméstico ya existe",