Files
food-ai/client/lib/l10n/app_ja.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

115 lines
4.0 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あたり"
}