Files
food-ai/client/lib/l10n/app_ar.arb
dbastrikin b2bdcbae6f feat: barcode scanning for shelf add + scan screen barcode option
- Add ShelfBarcodeScanScreen: scans barcode via mobile_scanner, looks up
  product via GET /products/barcode/{barcode} (Open Food Facts fallback),
  returns CatalogProduct to caller; loading overlay while looking up;
  "Add manually" fallback in AppBar for unknown products
- Extract AddToShelfSheet to add_to_shelf_sheet.dart (was private in
  product_search_screen.dart) so both search and scan screens can reuse it
- Add barcode icon button to ProductSearchScreen AppBar → opens scanner
- Add "Scan barcode" card (📷) to ScanScreen alongside receipt and photo modes
- Rename ScanScreen title: addFromReceiptOrPhoto → scanScreenTitle
  ("Сканировать" / "Scan & Recognize") to reflect all three modes
- Add 2 L10n keys (scanScreenTitle, barcodeScanSubtitle) across all 12 locales

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 15:21:56 +02:00

206 lines
8.6 KiB
Plaintext

{
"@@locale": "ar",
"appTitle": "FoodAI",
"greetingMorning": "صباح الخير",
"greetingAfternoon": "مساء الخير",
"greetingEvening": "مساء النور",
"caloriesUnit": "سعرة",
"gramsUnit": "غ",
"goalLabel": "الهدف:",
"consumed": "المستهلك",
"remaining": "المتبقي",
"exceeded": "تجاوز",
"proteinLabel": "بروتين",
"fatLabel": "دهون",
"carbsLabel": "كربوهيدرات",
"today": "اليوم",
"yesterday": "أمس",
"mealsSection": "الوجبات",
"addDish": "إضافة طبق",
"scanDish": "مسح",
"menu": "القائمة",
"dishHistory": "سجل الأطباق",
"recommendCook": "نوصي بطهي",
"camera": "الكاميرا",
"gallery": "المعرض",
"analyzingPhoto": "تحليل الصورة...",
"inQueue": "أنت في قائمة الانتظار",
"queuePosition": "الموضع {position}",
"@queuePosition": {
"placeholders": {
"position": {
"type": "int"
}
}
},
"processing": "جارٍ المعالجة...",
"upgradePrompt": "تخطي قائمة الانتظار؟ ترقية →",
"recognitionFailed": "فشل التعرف. حاول مرة أخرى.",
"dishRecognition": "التعرف على الأطباق",
"all": "الكل",
"dishRecognized": "تم التعرف على الطبق",
"recognizing": "جارٍ التعرف…",
"recognitionError": "خطأ في التعرف",
"dishResultTitle": "تم التعرف على الطبق",
"selectDish": "اختر طبقًا",
"dishNotRecognized": "لم يتم التعرف على الطبق",
"tryAgain": "حاول مرة أخرى",
"nutritionApproximate": "القيم الغذائية تقريبية — مقدَّرة من الصورة.",
"portion": "الحصة",
"mealType": "نوع الوجبة",
"dateLabel": "التاريخ",
"addToJournal": "إضافة إلى السجل",
"addFailed": "فشل الإضافة. حاول مرة أخرى.",
"historyTitle": "سجل التعرف",
"historyLoadError": "فشل تحميل السجل",
"retry": "إعادة المحاولة",
"noHistory": "لا توجد تعرفات بعد",
"profileTitle": "الملف الشخصي",
"edit": "تعديل",
"bodyParams": "معاملات الجسم",
"goalActivity": "الهدف والنشاط",
"nutrition": "التغذية",
"settings": "الإعدادات",
"height": "الطول",
"weight": "الوزن",
"age": "العمر",
"gender": "الجنس",
"genderMale": "ذكر",
"genderFemale": "أنثى",
"goalLoss": "خسارة الوزن",
"goalMaintain": "الحفاظ على الوزن",
"goalGain": "بناء العضلات",
"activityLow": "منخفض",
"activityMedium": "متوسط",
"activityHigh": "مرتفع",
"calorieGoal": "هدف السعرات",
"mealTypes": "أنواع الوجبات",
"formulaNote": "محسوب بمعادلة ميفلين سانت جيور",
"language": "اللغة",
"notSet": "غير محدد",
"calorieHint": "أدخل معاملات الجسم لحساب هدف السعرات",
"logout": "تسجيل الخروج",
"editProfile": "تعديل الملف الشخصي",
"cancel": "إلغاء",
"save": "حفظ",
"nameLabel": "الاسم",
"heightCm": "الطول (سم)",
"weightKg": "الوزن (كغ)",
"birthDate": "تاريخ الميلاد",
"nameRequired": "أدخل الاسم",
"profileUpdated": "تم تحديث الملف الشخصي",
"profileSaveFailed": "فشل الحفظ",
"mealTypeBreakfast": "الإفطار",
"mealTypeSecondBreakfast": "الإفطار الثاني",
"mealTypeLunch": "الغداء",
"mealTypeAfternoonSnack": "وجبة العصر",
"mealTypeDinner": "العشاء",
"mealTypeSnack": "وجبة خفيفة",
"navHome": "الرئيسية",
"navProducts": "المنتجات",
"navRecipes": "الوصفات",
"addFromReceiptOrPhoto": "إضافة من الإيصال أو الصورة",
"scanScreenTitle": "المسح والتعرف",
"barcodeScanSubtitle": "ابحث عن منتج بالباركود",
"chooseMethod": "اختر الطريقة",
"photoReceipt": "تصوير الإيصال",
"photoReceiptSubtitle": "التعرف على جميع المنتجات من الإيصال",
"photoProducts": "تصوير المنتجات",
"photoProductsSubtitle": "الثلاجة، الطاولة، الرف — حتى 3 صور",
"addPackagedFood": "إضافة منتج معبأ",
"scanBarcode": "مسح الباركود",
"portionWeightG": "وزن الحصة (جم)",
"productNotFound": "المنتج غير موجود",
"enterManually": "أدخل يدوياً",
"perHundredG": "لكل 100 جم",
"searchFoodHint": "البحث عن المنتجات والأطباق...",
"recentlyUsedLabel": "المستخدمة مؤخراً",
"productsSection": "المنتجات",
"dishesSection": "الأطباق",
"noResultsForQuery": "لم يتم العثور على نتائج لـ \"{query}\"",
"@noResultsForQuery": {
"placeholders": {
"query": {
"type": "String"
}
}
},
"servingsLabel": "حصص",
"addToDiary": "إضافة إلى اليومية",
"scanDishPhoto": "مسح الصورة",
"planningForDate": "",
"@planningForDate": {
"placeholders": {
"date": {
"type": "String"
}
}
},
"markAsEaten": "وضع علامة كمأكول",
"plannedMealLabel": "مخطط",
"generateWeekLabel": "تخطيط الأسبوع",
"generateWeekSubtitle": "سيقوم الذكاء الاصطناعي بإنشاء قائمة طعام تشمل الإفطار والغداء والعشاء لكامل الأسبوع",
"generatingMenu": "جارٍ إنشاء القائمة...",
"dayPlannedLabel": "تم تخطيط اليوم",
"planMenuButton": "تخطيط الوجبات",
"planMenuTitle": "ماذا تريد تخطيطه؟",
"planOptionSingleMeal": "وجبة واحدة",
"planOptionSingleMealDesc": "اختر اليوم ونوع الوجبة",
"planOptionDay": "يوم واحد",
"planOptionDayDesc": "جميع وجبات اليوم",
"planOptionDays": "عدة أيام",
"planOptionDaysDesc": "تخصيص الفترة",
"planOptionWeek": "أسبوع",
"planOptionWeekDesc": "7 أيام دفعة واحدة",
"planSelectDate": "اختر التاريخ",
"planSelectMealType": "نوع الوجبة",
"planSelectRange": "اختر الفترة",
"planGenerateButton": "تخطيط",
"planGenerating": "جارٍ إنشاء الخطة…",
"planSuccess": "تم تخطيط القائمة!",
"planProductsTitle": "مكونات القائمة",
"planProductsSubtitle": "سيأخذ الذكاء الاصطناعي المكونات المختارة بعين الاعتبار عند إنشاء الوصفات",
"planProductsEmpty": "لم يتم إضافة منتجات",
"planProductsEmptyMessage": "أضف المنتجات الموجودة لديك في المنزل — سيقترح الذكاء الاصطناعي وصفات مما لديك بالفعل",
"planProductsAddProducts": "إضافة منتجات",
"planProductsContinue": "متابعة",
"planProductsSkip": "تخطي اختيار المنتجات",
"planProductsSkipNoProducts": "التخطيط بدون منتجات",
"planProductsSelectAll": "تحديد الكل",
"planProductsDeselectAll": "إلغاء تحديد الكل",
"recentScans": "عمليات المسح الأخيرة",
"seeAllScans": "عرض الكل",
"productJobHistoryTitle": "سجل المسح",
"jobTypeReceipt": "إيصال",
"jobTypeProducts": "منتجات",
"scanSubmitting": "جارٍ الإرسال...",
"processingProducts": "جارٍ المعالجة...",
"clearAllProducts": "مسح الكل",
"clearAllConfirmTitle": "مسح جميع المنتجات؟",
"clearAllConfirmMessage": "سيتم حذف جميع المنتجات نهائياً.",
"addManually": "يدويًا",
"scan": "مسح ضوئي",
"addProduct": "إضافة",
"searchProducts": "البحث عن المنتجات",
"searchProductsHint": "اكتب اسم المنتج أو أضف يدويًا",
"noSearchResults": "لا توجد نتائج لـ\"{query}\"",
"@noSearchResults": {
"placeholders": {
"query": {
"type": "String"
}
}
},
"quantity": "الكمية",
"storageDays": "أيام التخزين",
"addToShelf": "إضافة إلى المخزن",
"errorGeneric": "حدث خطأ ما",
"nutritionOptional": "القيم الغذائية لكل 100 جم (اختياري)",
"calories": "سعرات حرارية",
"protein": "بروتين",
"fat": "دهون",
"carbs": "كربوهيدرات",
"fiber": "ألياف",
"productAddedToShelf": "تمت الإضافة إلى المخزن"
}