feat: German translations for TheMealDB recipes + recipe detail view

- Add GermanTranslator service with 200+ ingredient and meal name mappings
- Translate titles and ingredients when fetching from TheMealDB
- Add click-to-view recipe detail modal on week plan meal cards
- Import RecipeDetail component in WeekPlanView

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-16 07:20:08 +00:00
parent 2004883e02
commit 165acc9d22
4 changed files with 203 additions and 3 deletions

View File

@@ -65,6 +65,7 @@
:day-name="getDayName(entry.date)"
@swap="openSwapModal(entry)"
@reroll="handleReroll(entry)"
@click="selectedRecipe = entry.recipe"
/>
</div>
@@ -98,6 +99,13 @@
</div>
</div>
<!-- Recipe detail modal -->
<RecipeDetail
v-if="selectedRecipe"
:recipe="selectedRecipe"
@close="selectedRecipe = null"
/>
<!-- Swap modal -->
<SwapModal
v-if="swapEntry && recipesStore.recipes.length"
@@ -110,14 +118,16 @@
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue'
import MealCard from '../components/MealCard.vue'
import RecipeDetail from '../components/RecipeDetail.vue'
import SwapModal from '../components/SwapModal.vue'
import { useMealPlanStore, useRecipesStore } from '../stores/mealPlan'
import type { MealPlanEntry } from '../stores/mealPlan'
import type { MealPlanEntry, Recipe } from '../stores/mealPlan'
const store = useMealPlanStore()
const recipesStore = useRecipesStore()
const swapEntry = ref<MealPlanEntry | null>(null)
const selectedRecipe = ref<Recipe | null>(null)
const DAY_NAMES = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']