Merge pull request #1089 from MBombeck/feat/manual-workout-entry

Log a workout by hand
This commit is contained in:
Marc-André Bombeck authored and GitHub committed 2026-10-02 23:59:11 +02:00
commit 2473d52f19
31 files changed
+2579 -61

No files matched your search

+34 -3
View File
@@ -403,7 +403,9 @@
"medication": "Medikament",
"medicationDescription": "Eine Dosis als genommen markieren",
"mood": "Stimmung",
"moodDescription": "Stimmung und Tags erfassen"
"moodDescription": "Stimmung und Tags erfassen",
"workout": "Workout",
"workoutDescription": "Eine Einheit, die kein Gerät aufgezeichnet hat"
},
"cycle": "Zyklus",
"labs": "Laborwerte",
@@ -520,6 +522,7 @@
"quickAddMeasurement": "Messung erfassen",
"quickAddMood": "Stimmung erfassen",
"quickAddMedicationIntake": "Einnahme erfassen",
"quickAddWorkout": "Workout erfassen",
"customizeDashboard": "Dashboard anpassen",
"medicationIntakeQuickAdd": {
"sheetTitle": "Medikamenteneinnahme erfassen",
@@ -3359,7 +3362,7 @@
"description": "Letzte Läufe, Touren, Spaziergänge und Krafteinheiten — quellenübergreifend entdoppelt zwischen Apple Watch und Withings.",
"emptyState": {
"title": "Noch keine Workouts",
"description": "Öffne die Apple-Health-App auf dem iPhone, damit Workouts hier synchronisiert werden. Withings-Aktivitätsimport pflegt Geh- und Radtouren mit ein."
"description": "Workouts kommen per Apple Health vom iPhone und von Withings. Du kannst eins auch von Hand erfassen."
},
"detail": {
"backToList": "Zurück zu Workouts",
@@ -3437,7 +3440,35 @@
"countFew": "{count} Workouts",
"filterLabel": "Nach Sportart filtern",
"filterAll": "Alle Sportarten",
"filterEmpty": "Keine Einheiten dieser Sportart in deinem Verlauf."
"filterEmpty": "Keine Einheiten dieser Sportart in deinem Verlauf.",
"manual": {
"logWorkout": "Workout erfassen",
"sheetTitle": "Workout erfassen",
"sheetDescription": "Trag eine Einheit von Hand ein: was, wann und wie lange.",
"sportLabel": "Aktivität",
"sportPlaceholder": "Aktivität wählen",
"startLabel": "Beginn",
"durationLabel": "Dauer",
"distanceLabel": "Distanz ({unit})",
"energyLabel": "Aktive Energie (kcal)",
"alreadySaved": "Dieses Workout ist schon gespeichert",
"saveError": "Das Workout konnte nicht gespeichert werden",
"deleteLabel": "Workout löschen",
"deleteConfirmTitle": "Dieses Workout löschen?",
"deleteConfirmDescription": "Dieses von Hand eingetragene Workout wird endgültig entfernt.",
"deleted": "Workout gelöscht",
"deleteError": "Das Workout konnte nicht gelöscht werden",
"errors": {
"sportRequired": "Wähle eine Aktivität.",
"startRequired": "Gib Datum und Uhrzeit ein.",
"startInFuture": "Der Beginn darf nicht in der Zukunft liegen.",
"durationRequired": "Gib an, wie lange das Workout gedauert hat.",
"durationInvalid": "Gib ganze Stunden und Minuten von 0 bis 59 ein.",
"durationTooLong": "Ein Workout dauert höchstens 24 Stunden.",
"distanceInvalid": "Gib die Distanz als Zahl in einem realistischen Bereich ein.",
"energyInvalid": "Gib die aktive Energie als Zahl bis 20.000 kcal ein."
}
}
},
"bloodGlucose": {
"title": "Blutzucker",
+34 -3
View File
@@ -403,7 +403,9 @@
"medication": "Medication",
"medicationDescription": "Mark a dose as taken",
"mood": "Mood",
"moodDescription": "Log your mood and tags"
"moodDescription": "Log your mood and tags",
"workout": "Workout",
"workoutDescription": "A session your devices did not record"
},
"cycle": "Cycle",
"labs": "Labs",
@@ -520,6 +522,7 @@
"quickAddMeasurement": "Log measurement",
"quickAddMood": "Log mood",
"quickAddMedicationIntake": "Log medication intake",
"quickAddWorkout": "Log workout",
"customizeDashboard": "Customize dashboard",
"medicationIntakeQuickAdd": {
"sheetTitle": "Log medication intake",
@@ -3359,7 +3362,7 @@
"description": "Recent runs, rides, walks and strength sessions, deduped across Apple Watch and Withings sources.",
"emptyState": {
"title": "No workouts yet",
"description": "Open the Apple Health app on your iPhone to sync workouts here. Withings activity import keeps walking and cycling sessions flowing in too."
"description": "Workouts sync from Apple Health on your iPhone and from Withings. You can also log one by hand."
},
"detail": {
"backToList": "Back to workouts",
@@ -3437,7 +3440,35 @@
"countFew": "{count} workouts",
"filterLabel": "Filter by sport",
"filterAll": "All sports",
"filterEmpty": "No sessions of this sport in your history."
"filterEmpty": "No sessions of this sport in your history.",
"manual": {
"logWorkout": "Log workout",
"sheetTitle": "Log workout",
"sheetDescription": "Enter a session by hand: what you did, when, and for how long.",
"sportLabel": "Activity",
"sportPlaceholder": "Choose an activity",
"startLabel": "Start",
"durationLabel": "Duration",
"distanceLabel": "Distance ({unit})",
"energyLabel": "Active energy (kcal)",
"alreadySaved": "This workout is already saved",
"saveError": "The workout could not be saved",
"deleteLabel": "Delete workout",
"deleteConfirmTitle": "Delete this workout?",
"deleteConfirmDescription": "This workout you entered by hand will be removed for good.",
"deleted": "Workout deleted",
"deleteError": "The workout could not be deleted",
"errors": {
"sportRequired": "Choose an activity.",
"startRequired": "Enter a date and time.",
"startInFuture": "The start cannot be in the future.",
"durationRequired": "Enter how long the workout lasted.",
"durationInvalid": "Enter whole hours, and minutes from 0 to 59.",
"durationTooLong": "A workout can last at most 24 hours.",
"distanceInvalid": "Enter the distance as a number within a realistic range.",
"energyInvalid": "Enter active energy as a number up to 20,000 kcal."
}
}
},
"bloodGlucose": {
"title": "Blood Glucose",
+34 -3
View File
@@ -403,7 +403,9 @@
"medication": "Medicamento",
"medicationDescription": "Marcar una dosis como tomada",
"mood": "Estado de ánimo",
"moodDescription": "Registra tu estado de ánimo y etiquetas"
"moodDescription": "Registra tu estado de ánimo y etiquetas",
"workout": "Entrenamiento",
"workoutDescription": "Una sesión que tus dispositivos no registraron"
},
"cycle": "Ciclo",
"labs": "Análisis",
@@ -520,6 +522,7 @@
"quickAddMeasurement": "Registrar medición",
"quickAddMood": "Registrar estado de ánimo",
"quickAddMedicationIntake": "Registrar toma",
"quickAddWorkout": "Registrar entrenamiento",
"customizeDashboard": "Personalizar panel",
"medicationIntakeQuickAdd": {
"sheetTitle": "Registrar toma de medicación",
@@ -3359,7 +3362,7 @@
"description": "Carreras, salidas en bici, paseos y sesiones de fuerza recientes, deduplicados entre Apple Watch y Withings.",
"emptyState": {
"title": "Aún no hay entrenamientos",
"description": "Abre la app Apple Salud en el iPhone para sincronizar tus entrenamientos. La importación de actividad de Withings también incorpora caminatas y rutas en bici."
"description": "Los entrenamientos llegan desde Apple Salud en el iPhone y desde Withings. También puedes registrar uno a mano."
},
"detail": {
"backToList": "Volver a entrenamientos",
@@ -3437,7 +3440,35 @@
"countFew": "{count} entrenamientos",
"filterLabel": "Filtrar por deporte",
"filterAll": "Todos los deportes",
"filterEmpty": "No hay sesiones de este deporte en tu historial."
"filterEmpty": "No hay sesiones de este deporte en tu historial.",
"manual": {
"logWorkout": "Registrar entrenamiento",
"sheetTitle": "Registrar entrenamiento",
"sheetDescription": "Introduce una sesión a mano: qué hiciste, cuándo y durante cuánto tiempo.",
"sportLabel": "Actividad",
"sportPlaceholder": "Elige una actividad",
"startLabel": "Inicio",
"durationLabel": "Duración",
"distanceLabel": "Distancia ({unit})",
"energyLabel": "Energía activa (kcal)",
"alreadySaved": "Este entrenamiento ya está guardado",
"saveError": "No se pudo guardar el entrenamiento",
"deleteLabel": "Eliminar entrenamiento",
"deleteConfirmTitle": "¿Eliminar este entrenamiento?",
"deleteConfirmDescription": "Este entrenamiento que introdujiste a mano se eliminará de forma definitiva.",
"deleted": "Entrenamiento eliminado",
"deleteError": "No se pudo eliminar el entrenamiento",
"errors": {
"sportRequired": "Elige una actividad.",
"startRequired": "Introduce una fecha y una hora.",
"startInFuture": "El inicio no puede estar en el futuro.",
"durationRequired": "Indica cuánto duró el entrenamiento.",
"durationInvalid": "Introduce horas enteras y minutos de 0 a 59.",
"durationTooLong": "Un entrenamiento puede durar como máximo 24 horas.",
"distanceInvalid": "Introduce la distancia como un número dentro de un rango realista.",
"energyInvalid": "Introduce la energía activa como un número de hasta 20.000 kcal."
}
}
},
"bloodGlucose": {
"title": "Glucosa en sangre",
+34 -3
View File
@@ -403,7 +403,9 @@
"medication": "Médicament",
"medicationDescription": "Marquer une dose comme prise",
"mood": "Humeur",
"moodDescription": "Enregistrez votre humeur et des étiquettes"
"moodDescription": "Enregistrez votre humeur et des étiquettes",
"workout": "Entraînement",
"workoutDescription": "Une séance que vos appareils n’ont pas enregistrée"
},
"cycle": "Cycle",
"labs": "Analyses",
@@ -520,6 +522,7 @@
"quickAddMeasurement": "Saisir une mesure",
"quickAddMood": "Saisir une humeur",
"quickAddMedicationIntake": "Saisir une prise",
"quickAddWorkout": "Saisir un entraînement",
"customizeDashboard": "Personnaliser le tableau de bord",
"medicationIntakeQuickAdd": {
"sheetTitle": "Saisir une prise de médicament",
@@ -3359,7 +3362,7 @@
"description": "Courses, sorties à vélo, marches et séances de musculation récentes, dédupliquées entre Apple Watch et Withings.",
"emptyState": {
"title": "Aucun entraînement",
"description": "Ouvre l'app Apple Santé sur ton iPhone pour synchroniser tes entraînements. L'import d'activité Withings alimente également la marche et le vélo."
"description": "Tes entraînements arrivent d'Apple Santé sur l'iPhone et de Withings. Tu peux aussi en saisir un à la main."
},
"detail": {
"backToList": "Retour aux entraînements",
@@ -3437,7 +3440,35 @@
"countFew": "{count} séances",
"filterLabel": "Filtrer par sport",
"filterAll": "Tous les sports",
"filterEmpty": "Aucune séance de ce sport dans votre historique."
"filterEmpty": "Aucune séance de ce sport dans votre historique.",
"manual": {
"logWorkout": "Saisir un entraînement",
"sheetTitle": "Saisir un entraînement",
"sheetDescription": "Saisissez une séance à la main : ce que vous avez fait, quand et combien de temps.",
"sportLabel": "Activité",
"sportPlaceholder": "Choisir une activité",
"startLabel": "Début",
"durationLabel": "Durée",
"distanceLabel": "Distance ({unit})",
"energyLabel": "Énergie active (kcal)",
"alreadySaved": "Cet entraînement est déjà enregistré",
"saveError": "L’entraînement n’a pas pu être enregistré",
"deleteLabel": "Supprimer l’entraînement",
"deleteConfirmTitle": "Supprimer cet entraînement ?",
"deleteConfirmDescription": "Cet entraînement saisi à la main sera supprimé définitivement.",
"deleted": "Entraînement supprimé",
"deleteError": "L’entraînement n’a pas pu être supprimé",
"errors": {
"sportRequired": "Choisissez une activité.",
"startRequired": "Saisissez une date et une heure.",
"startInFuture": "Le début ne peut pas être dans le futur.",
"durationRequired": "Indiquez la durée de l’entraînement.",
"durationInvalid": "Saisissez des heures entières et des minutes de 0 à 59.",
"durationTooLong": "Un entraînement dure au maximum 24 heures.",
"distanceInvalid": "Saisissez la distance sous forme de nombre, dans une plage réaliste.",
"energyInvalid": "Saisissez l’énergie active sous forme de nombre, jusqu’à 20 000 kcal."
}
}
},
"bloodGlucose": {
"title": "Glycémie",
+34 -3
View File
@@ -403,7 +403,9 @@
"medication": "Farmaco",
"medicationDescription": "Segna una dose come assunta",
"mood": "Umore",
"moodDescription": "Registra umore e tag"
"moodDescription": "Registra umore e tag",
"workout": "Allenamento",
"workoutDescription": "Una sessione che i tuoi dispositivi non hanno registrato"
},
"cycle": "Ciclo",
"labs": "Esami",
@@ -520,6 +522,7 @@
"quickAddMeasurement": "Registra misurazione",
"quickAddMood": "Registra umore",
"quickAddMedicationIntake": "Registra assunzione",
"quickAddWorkout": "Registra allenamento",
"customizeDashboard": "Personalizza dashboard",
"medicationIntakeQuickAdd": {
"sheetTitle": "Registra assunzione del farmaco",
@@ -3359,7 +3362,7 @@
"description": "Corse, uscite in bici, camminate e sessioni di forza recenti, deduplicati tra Apple Watch e Withings.",
"emptyState": {
"title": "Nessun allenamento",
"description": "Apri l'app Salute di Apple sull'iPhone per sincronizzare gli allenamenti. L'import di attività di Withings porta dentro anche camminate e uscite in bici."
"description": "Gli allenamenti arrivano da Salute di Apple sull'iPhone e da Withings. Puoi anche registrarne uno a mano."
},
"detail": {
"backToList": "Torna agli allenamenti",
@@ -3437,7 +3440,35 @@
"countFew": "{count} allenamenti",
"filterLabel": "Filtra per sport",
"filterAll": "Tutti gli sport",
"filterEmpty": "Nessuna sessione di questo sport nella tua cronologia."
"filterEmpty": "Nessuna sessione di questo sport nella tua cronologia.",
"manual": {
"logWorkout": "Registra allenamento",
"sheetTitle": "Registra allenamento",
"sheetDescription": "Inserisci una sessione a mano: cosa hai fatto, quando e per quanto tempo.",
"sportLabel": "Attività",
"sportPlaceholder": "Scegli un’attività",
"startLabel": "Inizio",
"durationLabel": "Durata",
"distanceLabel": "Distanza ({unit})",
"energyLabel": "Energia attiva (kcal)",
"alreadySaved": "Questo allenamento è già salvato",
"saveError": "Non è stato possibile salvare l’allenamento",
"deleteLabel": "Elimina allenamento",
"deleteConfirmTitle": "Eliminare questo allenamento?",
"deleteConfirmDescription": "Questo allenamento inserito a mano verrà rimosso definitivamente.",
"deleted": "Allenamento eliminato",
"deleteError": "Non è stato possibile eliminare l’allenamento",
"errors": {
"sportRequired": "Scegli un’attività.",
"startRequired": "Inserisci data e ora.",
"startInFuture": "L’inizio non può essere nel futuro.",
"durationRequired": "Indica quanto è durato l’allenamento.",
"durationInvalid": "Inserisci ore intere e minuti da 0 a 59.",
"durationTooLong": "Un allenamento può durare al massimo 24 ore.",
"distanceInvalid": "Inserisci la distanza come numero in un intervallo realistico.",
"energyInvalid": "Inserisci l’energia attiva come numero fino a 20.000 kcal."
}
}
},
"bloodGlucose": {
"title": "Glicemia",
+34 -3
View File
@@ -403,7 +403,9 @@
"medication": "약",
"medicationDescription": "복용으로 표시하기",
"mood": "기분",
"moodDescription": "기분과 태그 기록하기"
"moodDescription": "기분과 태그 기록하기",
"workout": "운동",
"workoutDescription": "기기가 기록하지 못한 운동"
},
"cycle": "생리 주기",
"labs": "검사",
@@ -520,6 +522,7 @@
"quickAddMeasurement": "측정 기록",
"quickAddMood": "기분 기록",
"quickAddMedicationIntake": "복용 기록",
"quickAddWorkout": "운동 기록",
"customizeDashboard": "대시보드 맞춤 설정",
"medicationIntakeQuickAdd": {
"sheetTitle": "복용 기록",
@@ -3359,7 +3362,7 @@
"description": "최근 달리기, 자전거, 걷기, 근력 운동 세션이에요. Apple Watch와 Withings 소스 사이 중복은 정리했어요.",
"emptyState": {
"title": "아직 운동 기록이 없어요",
"description": "iPhone에서 Apple Health 앱을 열면 운동이 여기로 동기화돼요. Withings 활동 불러오기로 걷기와 자전거 세션도 계속 들어와요."
"description": "운동은 iPhone의 Apple Health와 Withings에서 동기화돼요. 직접 기록할 수도 있어요."
},
"detail": {
"backToList": "운동으로 돌아가기",
@@ -3437,7 +3440,35 @@
"countFew": "운동 {count}개",
"filterLabel": "종목별 필터",
"filterAll": "전체 종목",
"filterEmpty": "기록에 이 종목의 세션이 없어요."
"filterEmpty": "기록에 이 종목의 세션이 없어요.",
"manual": {
"logWorkout": "운동 기록",
"sheetTitle": "운동 기록",
"sheetDescription": "무엇을, 언제, 얼마나 했는지 직접 입력하세요.",
"sportLabel": "활동",
"sportPlaceholder": "활동 선택",
"startLabel": "시작",
"durationLabel": "시간",
"distanceLabel": "거리({unit})",
"energyLabel": "활동 에너지(kcal)",
"alreadySaved": "이미 저장된 운동입니다",
"saveError": "운동을 저장하지 못했습니다",
"deleteLabel": "운동 삭제",
"deleteConfirmTitle": "이 운동을 삭제할까요?",
"deleteConfirmDescription": "직접 입력한 이 운동이 영구적으로 삭제됩니다.",
"deleted": "운동을 삭제했습니다",
"deleteError": "운동을 삭제하지 못했습니다",
"errors": {
"sportRequired": "활동을 선택하세요.",
"startRequired": "날짜와 시간을 입력하세요.",
"startInFuture": "시작 시간은 미래일 수 없습니다.",
"durationRequired": "운동한 시간을 입력하세요.",
"durationInvalid": "시간은 정수로, 분은 0에서 59 사이로 입력하세요.",
"durationTooLong": "운동은 최대 24시간까지 입력할 수 있습니다.",
"distanceInvalid": "거리를 현실적인 범위의 숫자로 입력하세요.",
"energyInvalid": "활동 에너지는 20,000kcal 이하의 숫자로 입력하세요."
}
}
},
"bloodGlucose": {
"title": "혈당",
+34 -3
View File
@@ -403,7 +403,9 @@
"medication": "Lek",
"medicationDescription": "Oznacz dawkę jako przyjętą",
"mood": "Nastrój",
"moodDescription": "Zapisz nastrój i tagi"
"moodDescription": "Zapisz nastrój i tagi",
"workout": "Trening",
"workoutDescription": "Sesja, której nie zapisały twoje urządzenia"
},
"cycle": "Cykl",
"labs": "Wyniki badań",
@@ -520,6 +522,7 @@
"quickAddMeasurement": "Zarejestruj pomiar",
"quickAddMood": "Zarejestruj nastrój",
"quickAddMedicationIntake": "Zarejestruj przyjęcie",
"quickAddWorkout": "Zarejestruj trening",
"customizeDashboard": "Dostosuj pulpit",
"medicationIntakeQuickAdd": {
"sheetTitle": "Zarejestruj przyjęcie leku",
@@ -3359,7 +3362,7 @@
"description": "Ostatnie biegi, jazdy, marsze i treningi siłowe — zdeduplikowane między Apple Watch a Withings.",
"emptyState": {
"title": "Brak treningów",
"description": "Otwórz aplikację Apple Zdrowie na iPhonie, aby zsynchronizować treningi. Import aktywności z Withings także dorzuca marsze i przejażdżki."
"description": "Treningi trafiają tu z Apple Zdrowie na iPhonie i z Withings. Możesz też wpisać trening ręcznie."
},
"detail": {
"backToList": "Powrót do treningów",
@@ -3437,7 +3440,35 @@
"countFew": "{count} treningi",
"filterLabel": "Filtruj według sportu",
"filterAll": "Wszystkie sporty",
"filterEmpty": "Brak treningów tego sportu w Twojej historii."
"filterEmpty": "Brak treningów tego sportu w Twojej historii.",
"manual": {
"logWorkout": "Zarejestruj trening",
"sheetTitle": "Zarejestruj trening",
"sheetDescription": "Wpisz sesję ręcznie: rodzaj aktywności, początek i czas trwania.",
"sportLabel": "Aktywność",
"sportPlaceholder": "Wybierz aktywność",
"startLabel": "Początek",
"durationLabel": "Czas trwania",
"distanceLabel": "Dystans ({unit})",
"energyLabel": "Energia czynna (kcal)",
"alreadySaved": "Ten trening jest już zapisany",
"saveError": "Nie udało się zapisać treningu",
"deleteLabel": "Usuń trening",
"deleteConfirmTitle": "Usunąć ten trening?",
"deleteConfirmDescription": "Ten ręcznie wpisany trening zostanie trwale usunięty.",
"deleted": "Trening usunięty",
"deleteError": "Nie udało się usunąć treningu",
"errors": {
"sportRequired": "Wybierz aktywność.",
"startRequired": "Podaj datę i godzinę.",
"startInFuture": "Początek nie może być w przyszłości.",
"durationRequired": "Podaj, jak długo trwał trening.",
"durationInvalid": "Podaj pełne godziny i minuty od 0 do 59.",
"durationTooLong": "Trening może trwać najwyżej 24 godziny.",
"distanceInvalid": "Podaj dystans jako liczbę w realistycznym zakresie.",
"energyInvalid": "Podaj energię czynną jako liczbę do 20 000 kcal."
}
}
},
"bloodGlucose": {
"title": "Poziom glukozy",