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": "Vous avez <strong>{inv_qty} {unit}</strong> en inventaire, mais les sorties enregistrées dépassent les entrées — le stock initial n'a probablement jamais été ajouté comme transaction « entrée ». Vous pouvez corriger la quantité ou saisir les entrées manquantes.",
"banner_anomaly_ghost_title": "vous avez moins de stock que prévu",
"banner_anomaly_ghost_detail": "D'après les opérations enregistrées vous devriez avoir {expected_qty} {unit} de {name}, mais l'inventaire n'en montre que {inv_qty} {unit}. Avez-vous pris du stock sans l'enregistrer ?",
"banner_dup_loss_title": "Vérification double sortie : {name}",
"banner_dup_loss_detail": "Doublon possible dans {location} : deux sorties rapprochées ({qty_pair}) en ~{seconds}s. Vérifiez et corrigez si besoin.",
"banner_dup_loss_action_fix": "Corriger la quantité",
"banner_dup_loss_action_open": "Ouvrir la fiche produit",
"banner_dup_loss_action_done": "Déjà vérifié",
"banner_dup_loss_toast_done": "Contrôle marqué comme vérifié",
"consumed": "Consommé : {n} ({pct}%)",
"wasted": "Gaspillé : {n} ({pct}%)",
"more_opened": "et {n} autres ouverts...",
@@ -218,10 +224,23 @@
"status_invalid": "Invalide : {code} — nouvel essai",
"status_confirmed": "Confirmé !",
"status_parallel": "Scan combiné actif...",
"status_ocr_searching": "Je lis les chiffres du code-barres...",
"status_ai_visual_searching": "J'essaie maintenant de reconnaître le produit...",
"method_ai_ocr": "Gemini OCR",
"method_ai_vision": "Gemini Vision",
"ai_fallback_searching": "Identification IA en cours...",
"ai_fallback_found": "Produit identifié par l'IA",
"ai_fallback_not_found": "IA : produit non reconnu",
"ai_fallback_exhausted": "IA : produit non reconnu — réessayez avec le code-barres"
"ai_fallback_exhausted": "IA : produit non reconnu — réessayez avec le code-barres",
"ai_overlay_msg": "Gemini Vision analyse le produit...",
"ai_retry_btn": "Reessayer avec l'IA",
"ai_match_title": "Produit reconnu par l'IA",
"ai_match_subtitle": "Choisissez un produit deja en stock ou ajoutez celui detecte.",
"ai_match_existing": "Correspondances possibles dans le stock",
"ai_match_none": "Aucun produit similaire trouve dans le stock.",
"ai_match_use_btn": "Utiliser celui-ci",
"ai_match_add_btn": "Ajouter \"{name}\"",
"ai_detected_label": "IA a detecte"
},
"action": {
"title": "Que voulez-vous faire ?",
@@ -1020,6 +1039,7 @@
"ai_quota": "Quota IA épuisé. Réessayez dans quelques minutes.",
"barcode_empty": "Entrez un code-barres",
"barcode_format": "Le code-barres ne doit contenir que des chiffres (4-14 chiffres)",
"barcode_checksum": "Somme de contrôle EAN invalide — vérifiez les chiffres du code-barres",
"min_chars": "Tapez au moins 2 caractères",
"not_in_inventory": "Produit absent de l'inventaire",
"appliance_exists": "L'appareil existe déjà",