Files
food-ai/client/lib/l10n/app_ja.arb
dbastrikin 78f1c8bf76 feat: food search sheet with FTS+trgm, dish/recent endpoints, multilingual aliases
Backend:
- GET /dishes/search — hybrid FTS (english + simple) + trgm + ILIKE search
- GET /diary/recent — recently used dishes and products for the current user
- product search upgraded: FTS on canonical_name and product_aliases, ranked by GREATEST(ts_rank, similarity)
- importoff: collect product_name_ru/de/fr/... as product_aliases for multilingual search (e.g. "сникерс" → "Snickers")
- migrations: FTS + trgm indexes merged into 001_initial_schema.sql (002 removed)

Flutter:
- FoodSearchSheet: debounced search field, recently-used section, product/dish results, scan-photo and barcode chips
- DishPortionSheet: quick ½/1/1½/2 buttons + custom input
- + button in meal card now opens FoodSearchSheet instead of going directly to AI scan
- 7 new l10n keys across all 12 languages

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

128 lines
4.4 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": "ja",
"appTitle": "FoodAI",
"greetingMorning": "おはようございます",
"greetingAfternoon": "こんにちは",
"greetingEvening": "こんばんは",
"caloriesUnit": "kcal",
"gramsUnit": "g",
"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": "身長cm",
"weightKg": "体重kg",
"birthDate": "生年月日",
"nameRequired": "名前を入力してください",
"profileUpdated": "プロフィールを更新しました",
"profileSaveFailed": "保存に失敗しました",
"mealTypeBreakfast": "朝食",
"mealTypeSecondBreakfast": "第二朝食",
"mealTypeLunch": "昼食",
"mealTypeAfternoonSnack": "おやつ",
"mealTypeDinner": "夕食",
"mealTypeSnack": "間食",
"navHome": "ホーム",
"navProducts": "食品",
"navRecipes": "レシピ",
"addFromReceiptOrPhoto": "レシートや写真から追加",
"chooseMethod": "方法を選択",
"photoReceipt": "レシートを撮影",
"photoReceiptSubtitle": "レシートから全商品を認識",
"photoProducts": "食品を撮影",
"photoProductsSubtitle": "冷蔵庫・テーブル・棚 — 最大3枚",
"addPackagedFood": "パッケージ食品を追加",
"scanBarcode": "バーコードをスキャン",
"portionWeightG": "1食分の重さg",
"productNotFound": "商品が見つかりません",
"enterManually": "手動で入力",
"perHundredG": "100gあたり",
"searchFoodHint": "食品と料理を検索...",
"recentlyUsedLabel": "最近使用",
"productsSection": "食品",
"dishesSection": "料理",
"noResultsForQuery": "「{query}」の検索結果はありません",
"@noResultsForQuery": {
"placeholders": {
"query": { "type": "String" }
}
},
"servingsLabel": "人前",
"addToDiary": "日記に追加",
"scanDishPhoto": "写真をスキャン"
}