Files
food-ai/client/lib/l10n/app_localizations_zh.dart
dbastrikin 5096df2102 fix: fix menu generation errors and show planned meals on home screen
Backend fixes:
- migration 003: add 'menu' value to recipe_source enum (was causing SQLSTATE 22P02)
- migration 004: rename recipe_products→recipe_ingredients, product_id→ingredient_id (was causing SQLSTATE 42P01)
- dish/repository.go: fix INSERT INTO tags using $1/$1 for two columns → $1/$2 (was causing SQLSTATE 42P08)
- home/handler.go: replace non-existent saved_recipes table with correct joins (recipes→dishes→dish_translations, user_saved_recipes) so today's plan and recommendations load correctly
- reqlog: new slog.Handler wrapper that adds request_id and stack trace to ERROR-level logs
- all handlers: slog.Error→slog.ErrorContext so error logs include request context; writeError includes request_id in response body

Client:
- home_screen.dart: extend home screen to future dates, show planned meals as ghost entries
- l10n: add new localisation keys for home screen date navigation and planned meal UI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 00:35:11 +02:00

374 lines
7.1 KiB
Dart

// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for Chinese (`zh`).
class AppLocalizationsZh extends AppLocalizations {
AppLocalizationsZh([String locale = 'zh']) : super(locale);
@override
String get appTitle => 'FoodAI';
@override
String get greetingMorning => '早上好';
@override
String get greetingAfternoon => '下午好';
@override
String get greetingEvening => '晚上好';
@override
String get caloriesUnit => '千卡';
@override
String get gramsUnit => '';
@override
String get goalLabel => '目标:';
@override
String get consumed => '已摄入';
@override
String get remaining => '剩余';
@override
String get exceeded => '超出';
@override
String get proteinLabel => '蛋白质';
@override
String get fatLabel => '脂肪';
@override
String get carbsLabel => '碳水化合物';
@override
String get today => '今天';
@override
String get yesterday => '昨天';
@override
String get mealsSection => '餐食';
@override
String get addDish => '添加菜品';
@override
String get scanDish => '扫描';
@override
String get menu => '菜单';
@override
String get dishHistory => '菜品历史';
@override
String get recommendCook => '推荐烹饪';
@override
String get camera => '相机';
@override
String get gallery => '相册';
@override
String get analyzingPhoto => '正在分析照片...';
@override
String get inQueue => '您在队列中';
@override
String queuePosition(int position) {
return '位置 $position';
}
@override
String get processing => '处理中...';
@override
String get upgradePrompt => '跳过队列?升级 →';
@override
String get recognitionFailed => '识别失败。请重试。';
@override
String get dishRecognition => '菜品识别';
@override
String get all => '全部';
@override
String get dishRecognized => '菜品已识别';
@override
String get recognizing => '识别中…';
@override
String get recognitionError => '识别错误';
@override
String get dishResultTitle => '菜品已识别';
@override
String get selectDish => '选择菜品';
@override
String get dishNotRecognized => '未识别到菜品';
@override
String get tryAgain => '重试';
@override
String get nutritionApproximate => '营养值为近似值 — 根据照片估算。';
@override
String get portion => '份量';
@override
String get mealType => '餐食类型';
@override
String get dateLabel => '日期';
@override
String get addToJournal => '添加到日记';
@override
String get addFailed => '添加失败。请重试。';
@override
String get historyTitle => '识别历史';
@override
String get historyLoadError => '加载历史失败';
@override
String get retry => '重试';
@override
String get noHistory => '暂无识别记录';
@override
String get profileTitle => '个人资料';
@override
String get edit => '编辑';
@override
String get bodyParams => '身体参数';
@override
String get goalActivity => '目标与活动';
@override
String get nutrition => '营养';
@override
String get settings => '设置';
@override
String get height => '身高';
@override
String get weight => '体重';
@override
String get age => '年龄';
@override
String get gender => '性别';
@override
String get genderMale => '';
@override
String get genderFemale => '';
@override
String get goalLoss => '减重';
@override
String get goalMaintain => '保持';
@override
String get goalGain => '增肌';
@override
String get activityLow => '';
@override
String get activityMedium => '';
@override
String get activityHigh => '';
@override
String get calorieGoal => '卡路里目标';
@override
String get mealTypes => '餐食类型';
@override
String get formulaNote => '使用米夫林-圣热尔公式计算';
@override
String get language => '语言';
@override
String get notSet => '未设置';
@override
String get calorieHint => '输入身体参数以计算卡路里目标';
@override
String get logout => '退出登录';
@override
String get editProfile => '编辑资料';
@override
String get cancel => '取消';
@override
String get save => '保存';
@override
String get nameLabel => '姓名';
@override
String get heightCm => '身高(厘米)';
@override
String get weightKg => '体重(千克)';
@override
String get birthDate => '出生日期';
@override
String get nameRequired => '请输入姓名';
@override
String get profileUpdated => '资料已更新';
@override
String get profileSaveFailed => '保存失败';
@override
String get mealTypeBreakfast => '早餐';
@override
String get mealTypeSecondBreakfast => '第二早餐';
@override
String get mealTypeLunch => '午餐';
@override
String get mealTypeAfternoonSnack => '下午茶';
@override
String get mealTypeDinner => '晚餐';
@override
String get mealTypeSnack => '零食';
@override
String get navHome => '首页';
@override
String get navProducts => '食品';
@override
String get navRecipes => '食谱';
@override
String get addFromReceiptOrPhoto => '从收据或照片添加';
@override
String get chooseMethod => '选择方式';
@override
String get photoReceipt => '拍摄收据';
@override
String get photoReceiptSubtitle => '识别收据中的所有商品';
@override
String get photoProducts => '拍摄食品';
@override
String get photoProductsSubtitle => '冰箱、桌子、货架 — 最多3张照片';
@override
String get addPackagedFood => '添加包装食品';
@override
String get scanBarcode => '扫描条形码';
@override
String get portionWeightG => '份量(克)';
@override
String get productNotFound => '未找到产品';
@override
String get enterManually => '手动输入';
@override
String get perHundredG => '每100克';
@override
String get searchFoodHint => '搜索产品和菜肴...';
@override
String get recentlyUsedLabel => '最近使用';
@override
String get productsSection => '产品';
@override
String get dishesSection => '菜肴';
@override
String noResultsForQuery(String query) {
return '未找到 \"$query\" 的结果';
}
@override
String get servingsLabel => '份数';
@override
String get addToDiary => '添加到日记';
@override
String get scanDishPhoto => '扫描照片';
@override
String planningForDate(String date) {
return '';
}
@override
String get markAsEaten => '标记为已吃';
@override
String get plannedMealLabel => '已计划';
@override
String get generateWeekLabel => '规划本周';
@override
String get generateWeekSubtitle => 'AI将为整周创建含早餐、午餐和晚餐的菜单';
@override
String get generatingMenu => '正在生成菜单...';
@override
String get weekPlannedLabel => '本周已规划';
}