Files
food-ai/client/lib/l10n/app_ru.arb
dbastrikin 205edbdade feat: rename ingredients→products, products→user_products; add barcode/OFF import
- Rename catalog: ingredient/* → product/* (canonical_name, barcode, nutrition per 100g)
- Rename pantry: product/* → userproduct/* (user-owned items with expiry)
- Squash migrations into single 001_initial_schema.sql (clean-db baseline)
- product_categories: add English canonical name column; fix COALESCE in queries
- Remove product_translations: product names are stored in their original language
- Add default_unit_name to product API responses via unit_translations JOIN
- Add cmd/importoff: bulk import from OpenFoodFacts JSONL dump (COPY + ON CONFLICT)
- Diary: support product_id entries alongside dish_id (CHECK num_nonnulls = 1)
- Home: getLoggedCalories joins both recipes and catalog products
- Flutter: rename models/providers/services to match backend rename
- Flutter: add barcode scan flow for diary (mobile_scanner, product_portion_sheet)
- Flutter: localise 6 new keys across 12 languages (barcode scan, portion weight)
- Routes: GET /products/search, GET /products/barcode/{barcode}, /user-products

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 12:45:48 +02:00

113 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"@@locale": "ru",
"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": "Хотите без очереди? Upgrade →",
"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": "Добавить из чека или фото",
"chooseMethod": "Выберите способ",
"photoReceipt": "Сфотографировать чек",
"photoReceiptSubtitle": "Распознаем все продукты из чека",
"photoProducts": "Сфотографировать продукты",
"photoProductsSubtitle": "Холодильник, стол, полка — до 3 фото",
"addPackagedFood": "Добавить готовый продукт",
"scanBarcode": "Сканировать штрихкод",
"portionWeightG": "Вес порции (г)",
"productNotFound": "Продукт не найден",
"enterManually": "Ввести вручную",
"perHundredG": "на 100 г"
}