feat: Flutter client localisation (12 languages)
Add flutter_localizations + intl, 12 ARB files (en/ru/es/de/fr/it/pt/zh/ja/ko/ar/hi), replace all hardcoded Russian UI strings with AppLocalizations, detect system locale on first launch, localise bottom nav bar labels, document rule in CLAUDE.md. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
288
client/lib/l10n/app_localizations_zh.dart
Normal file
288
client/lib/l10n/app_localizations_zh.dart
Normal file
@@ -0,0 +1,288 @@
|
||||
// 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 => '食谱';
|
||||
}
|
||||
Reference in New Issue
Block a user