From 9a27e504954f481055a1f3a22b4b97f0b74e3386 Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Mon, 23 Mar 2026 07:44:31 +0100 Subject: [PATCH] fitness: add German translations for all 77 exercises Add per-exercise de property with translated name and instructions. Add shared term translation map for bodyPart, equipment, target, and muscle names. Add localizeExercise() and translateTerm() helpers. Update all display components to use localized fields (localName, localBodyPart, localEquipment, etc.) and pass lang to search/lookup. --- .../components/fitness/ExerciseName.svelte | 7 +- .../components/fitness/ExercisePicker.svelte | 13 +- src/lib/components/fitness/SessionCard.svelte | 13 +- .../components/fitness/TemplateCard.svelte | 4 +- src/lib/data/exercises.ts | 858 ++++++++++++++++-- .../[exercises=fitnessExercises]/+page.svelte | 13 +- .../[id]/+page.svelte | 25 +- .../[id]/+page.svelte | 8 +- .../[workout=fitnessWorkout]/+page.svelte | 8 +- .../[active=fitnessActive]/+page.svelte | 10 +- 10 files changed, 828 insertions(+), 131 deletions(-) diff --git a/src/lib/components/fitness/ExerciseName.svelte b/src/lib/components/fitness/ExerciseName.svelte index 9a1000d..108d70a 100644 --- a/src/lib/components/fitness/ExerciseName.svelte +++ b/src/lib/components/fitness/ExerciseName.svelte @@ -5,12 +5,13 @@ let { exerciseId } = $props(); - const exercise = $derived(getExerciseById(exerciseId)); - const sl = $derived(fitnessSlugs(detectFitnessLang($page.url.pathname))); + const lang = $derived(detectFitnessLang($page.url.pathname)); + const exercise = $derived(getExerciseById(exerciseId, lang)); + const sl = $derived(fitnessSlugs(lang)); {#if exercise} - {exercise.name} + {exercise.localName} {:else} Unknown Exercise {/if} diff --git a/src/lib/components/fitness/ExercisePicker.svelte b/src/lib/components/fitness/ExercisePicker.svelte index 4fda3c8..276ce60 100644 --- a/src/lib/components/fitness/ExercisePicker.svelte +++ b/src/lib/components/fitness/ExercisePicker.svelte @@ -1,5 +1,5 @@ @@ -37,13 +38,13 @@ @@ -53,8 +54,8 @@
  • - {exercise.name} - {exercise.bodyPart} · {exercise.equipment} + {exercise.localName} + {exercise.localBodyPart} · {exercise.localEquipment}
  • diff --git a/src/routes/fitness/[exercises=fitnessExercises]/[id]/+page.svelte b/src/routes/fitness/[exercises=fitnessExercises]/[id]/+page.svelte index 7f44b05..f391bb5 100644 --- a/src/routes/fitness/[exercises=fitnessExercises]/[id]/+page.svelte +++ b/src/routes/fitness/[exercises=fitnessExercises]/[id]/+page.svelte @@ -1,6 +1,6 @@ -{exercise?.name ?? (lang === 'en' ? 'Exercise' : 'Übung')} - Fitness +{exercise?.localName ?? (lang === 'en' ? 'Exercise' : 'Übung')} - Fitness
    -

    {exercise?.name ?? 'Exercise'}

    +

    {exercise?.localName ?? 'Exercise'}

    {#each tabs as tab} @@ -182,20 +183,20 @@ {#if activeTab === 'about'}
    {#if exercise?.imageUrl} - {exercise.name} + {exercise.localName} {/if}
    - {exercise?.bodyPart} - {exercise?.equipment} - {exercise?.target} + {exercise?.localBodyPart} + {exercise?.localEquipment} + {exercise?.localTarget}
    - {#if exercise?.secondaryMuscles?.length} -

    Also works: {exercise.secondaryMuscles.join(', ')}

    + {#if exercise?.localSecondaryMuscles?.length} +

    {lang === 'en' ? 'Also works' : 'Trainiert auch'}: {exercise.localSecondaryMuscles.join(', ')}

    {/if} - {#if exercise?.instructions?.length} + {#if exercise?.localInstructions?.length}

    {t('instructions', lang)}

      - {#each exercise.instructions as step} + {#each exercise.localInstructions as step}
    1. {step}
    2. {/each}
    diff --git a/src/routes/fitness/[history=fitnessHistory]/[id]/+page.svelte b/src/routes/fitness/[history=fitnessHistory]/[id]/+page.svelte index dcf3221..559524b 100644 --- a/src/routes/fitness/[history=fitnessHistory]/[id]/+page.svelte +++ b/src/routes/fitness/[history=fitnessHistory]/[id]/+page.svelte @@ -99,12 +99,12 @@ /** @param {string} exerciseId */ function addExerciseToEdit(exerciseId) { - const exercise = getExerciseById(exerciseId); + const exercise = getExerciseById(exerciseId, lang); editData.exercises = [ ...editData.exercises, { exerciseId, - name: exercise?.name ?? exerciseId, + name: exercise?.localName ?? exerciseId, restTime: 120, sets: [{ completed: true }] } @@ -666,10 +666,10 @@

    {t('personal_records', lang)}

    {#each session.prs as pr (pr.exerciseId + pr.type)} - {@const exercise = getExerciseById(pr.exerciseId)} + {@const exercise = getExerciseById(pr.exerciseId, lang)}
    - {exercise?.name ?? pr.exerciseId} + {exercise?.localName ?? pr.exerciseId} {#if pr.type === 'est1rm'}Est. 1RM {:else if pr.type === 'maxWeight'}Max Weight diff --git a/src/routes/fitness/[workout=fitnessWorkout]/+page.svelte b/src/routes/fitness/[workout=fitnessWorkout]/+page.svelte index 821800a..c351dc3 100644 --- a/src/routes/fitness/[workout=fitnessWorkout]/+page.svelte +++ b/src/routes/fitness/[workout=fitnessWorkout]/+page.svelte @@ -369,9 +369,9 @@