From ee8cc8ec20635dc4a5aec81f16dd7867b65105e0 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 9a1000dd..108d70a4 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 4fda3c80..276ce605 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 7f44b05f..f391bb56 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 dcf32214..559524ba 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 821800a8..c351dc3f 100644 --- a/src/routes/fitness/[workout=fitnessWorkout]/+page.svelte +++ b/src/routes/fitness/[workout=fitnessWorkout]/+page.svelte @@ -369,9 +369,9 @@