feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each with its activity's icon, its name (else the time of day's and the activity's), when it started, its distance, moving time and pace or speed; those this device can't open come last, locked. A workout's page shows its track on the instance's map source (flutter_map with vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its pauses, start and end marked; its totals with the elevation gained; its splits per kilometre on foot, per 5 km cycling; pace or speed and elevation over the distance, drawn by the app's own painter; and what the map's source sees. Its name and notes are edited there; deleting asks first and can be undone for a moment from home (halkyon_app's DelayedDeletions, TrainPerson.deletions). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
c7acec3a05
commit
405577050d
5 changed files with 2672 additions and 45 deletions
|
|
@ -6,15 +6,15 @@
|
|||
|
||||
"instanceFirstStartSubtitle": "Wähle die Instanz, auf der deine Trainings liegen sollen. Jede betreibt jemand; weitere kannst du später hinzufügen.",
|
||||
|
||||
"homeEmptyTitle": "Hier ist noch nichts",
|
||||
"homeEmptyHint": "Trainings kommen mit einer späteren Version von Halkyon Train.",
|
||||
"homeEmptyTitle": "Noch keine Trainings",
|
||||
"homeEmptyHint": "Trainings, die du auf deinem Telefon aufzeichnest, erscheinen hier.",
|
||||
|
||||
"accountTitle": "Konto",
|
||||
"accountDeleteMessage": "Dein Konto wird auf dem Server und auf all deinen Geräten gelöscht. Dies kann nicht rückgängig gemacht werden.",
|
||||
|
||||
"aboutTitle": "Über",
|
||||
|
||||
"homeRecordHint": "Zeichne mit dem Knopf unten ein Training auf. Die Liste deiner Trainings kommt mit der nächsten Version von Halkyon Train.",
|
||||
"homeRecordHint": "Zeichne eins mit dem Knopf unten auf.",
|
||||
"recordAction": "Aufzeichnen",
|
||||
"recordBack": "Zurück zur Aufzeichnung",
|
||||
"recordSheetTitle": "Training aufzeichnen",
|
||||
|
|
@ -52,5 +52,35 @@
|
|||
"recordingCutOffTitle": "Eine Aufzeichnung wurde abgebrochen",
|
||||
"recordingCutOffMessage": "Eine Aufzeichnung von {start} wurde abgebrochen. Bis {end} speichern oder verwerfen?",
|
||||
"recordingNotificationChannel": "Aufzeichnung",
|
||||
"recordingNotificationPaused": "{activity} · pausiert"
|
||||
"recordingNotificationPaused": "{activity} · pausiert",
|
||||
|
||||
"workoutName": "{when, select, morning_running{Morgenlauf} morning_walking{Morgenspaziergang} morning_hiking{Morgenwanderung} morning_cycling{Morgenradfahrt} morning_indoorRowing{Rudern am Morgen} afternoon_running{Nachmittagslauf} afternoon_walking{Nachmittagsspaziergang} afternoon_hiking{Nachmittagswanderung} afternoon_cycling{Nachmittagsradfahrt} afternoon_indoorRowing{Rudern am Nachmittag} evening_running{Abendlauf} evening_walking{Abendspaziergang} evening_hiking{Abendwanderung} evening_cycling{Abendradfahrt} evening_indoorRowing{Rudern am Abend} night_running{Nachtlauf} night_walking{Nachtspaziergang} night_hiking{Nachtwanderung} night_cycling{Nachtradfahrt} night_indoorRowing{Rudern in der Nacht} other{Training}}",
|
||||
"workoutLocked": "Gesperrtes Training",
|
||||
"workoutLockedHint": "Dieses Gerät hat den Schlüssel nicht, mit dem es versiegelt ist.",
|
||||
"workoutEdit": "Bearbeiten",
|
||||
"workoutEditTitle": "Training bearbeiten",
|
||||
"workoutNameLabel": "Name",
|
||||
"workoutNotesLabel": "Notizen",
|
||||
"workoutSave": "Speichern",
|
||||
"workoutDelete": "Löschen",
|
||||
"workoutDeleteTitle": "Dieses Training löschen?",
|
||||
"workoutDeleteMessage": "Es wird auf all deinen Geräten gelöscht.",
|
||||
"workoutDeleted": "Training gelöscht",
|
||||
"workoutMovingTime": "Zeit in Bewegung",
|
||||
"workoutTotalTime": "ganze Zeit",
|
||||
"workoutDistance": "Strecke",
|
||||
"workoutPace": "Tempo",
|
||||
"workoutSpeed": "Geschwindigkeit",
|
||||
"workoutClimb": "Aufstieg",
|
||||
"workoutClimbValue": "{metres} m",
|
||||
"workoutSplits": "Abschnitte",
|
||||
"workoutSplitKm": "km {number}",
|
||||
"workoutSplitFiveKm": "{from}–{to} km",
|
||||
"workoutPaceChart": "Tempo",
|
||||
"workoutSpeedChart": "Geschwindigkeit",
|
||||
"workoutElevationChart": "Höhe",
|
||||
"workoutMapSource": "Karte von {name}: sieht die Adresse deines Geräts und den gezeigten Ausschnitt, nicht deine Strecke.",
|
||||
"workoutMapSourceAbout": "Was {name} speichert",
|
||||
"workoutMapUnavailable": "Die Karte kann gerade nicht geladen werden.",
|
||||
"workoutNotFound": "Dieses Training gibt es nicht mehr."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,15 +8,15 @@
|
|||
|
||||
"instanceFirstStartSubtitle": "Choose the instance to keep your workouts on. Someone runs each one; you can add others later.",
|
||||
|
||||
"homeEmptyTitle": "Nothing here yet",
|
||||
"homeEmptyHint": "Workouts come with a later version of Halkyon Train.",
|
||||
"homeEmptyTitle": "No workouts yet",
|
||||
"homeEmptyHint": "Workouts recorded on your phone show here.",
|
||||
|
||||
"accountTitle": "Account",
|
||||
"accountDeleteMessage": "Your account is deleted on the server and on all your devices. This can't be undone.",
|
||||
|
||||
"aboutTitle": "About",
|
||||
|
||||
"homeRecordHint": "Record a workout with the button below. The list of your workouts comes with the next version of Halkyon Train.",
|
||||
"homeRecordHint": "Record one with the button below.",
|
||||
"recordAction": "Record",
|
||||
"recordBack": "Back to the recording",
|
||||
"recordSheetTitle": "Record a workout",
|
||||
|
|
@ -65,5 +65,44 @@
|
|||
"recordingNotificationChannel": "Recording",
|
||||
"@recordingNotificationChannel": {"description": "The name of the recording's notification channel, in the system's settings."},
|
||||
"recordingNotificationPaused": "{activity} · paused",
|
||||
"@recordingNotificationPaused": {"description": "The notification's title while paused.", "placeholders": {"activity": {"type": "String", "example": "Running"}}}
|
||||
"@recordingNotificationPaused": {"description": "The notification's title while paused.", "placeholders": {"activity": {"type": "String", "example": "Running"}}},
|
||||
|
||||
"workoutName": "{when, select, morning_running{Morning run} morning_walking{Morning walk} morning_hiking{Morning hike} morning_cycling{Morning ride} morning_indoorRowing{Morning row} afternoon_running{Afternoon run} afternoon_walking{Afternoon walk} afternoon_hiking{Afternoon hike} afternoon_cycling{Afternoon ride} afternoon_indoorRowing{Afternoon row} evening_running{Evening run} evening_walking{Evening walk} evening_hiking{Evening hike} evening_cycling{Evening ride} evening_indoorRowing{Evening row} night_running{Night run} night_walking{Night walk} night_hiking{Night hike} night_cycling{Night ride} night_indoorRowing{Night row} other{Workout}}",
|
||||
"@workoutName": {"description": "A workout's name where the person gave none: the time of day it started (morning 5–12, afternoon 12–17, evening 17–22, night) and its activity, as Strava names them.", "placeholders": {"when": {"type": "String"}}},
|
||||
"workoutLocked": "Locked workout",
|
||||
"workoutLockedHint": "This device doesn't hold the key it's sealed with.",
|
||||
"@workoutLockedHint": {"description": "Under a workout this device can't open (its key is missing here)."},
|
||||
"workoutEdit": "Edit",
|
||||
"workoutEditTitle": "Edit workout",
|
||||
"workoutNameLabel": "Name",
|
||||
"workoutNotesLabel": "Notes",
|
||||
"workoutSave": "Save",
|
||||
"workoutDelete": "Delete",
|
||||
"workoutDeleteTitle": "Delete this workout?",
|
||||
"workoutDeleteMessage": "It's deleted on all your devices.",
|
||||
"workoutDeleted": "Workout deleted",
|
||||
"workoutMovingTime": "moving time",
|
||||
"workoutTotalTime": "whole time",
|
||||
"@workoutTotalTime": {"description": "Lower case, under a figure: from start to end, pauses included."},
|
||||
"workoutDistance": "distance",
|
||||
"workoutPace": "pace",
|
||||
"workoutSpeed": "speed",
|
||||
"workoutClimb": "climbed",
|
||||
"@workoutClimb": {"description": "Lower case, under a figure: the elevation gained."},
|
||||
"workoutClimbValue": "{metres} m",
|
||||
"@workoutClimbValue": {"placeholders": {"metres": {"type": "int"}}},
|
||||
"workoutSplits": "Splits",
|
||||
"workoutSplitKm": "km {number}",
|
||||
"@workoutSplitKm": {"description": "A kilometre's split, its number.", "placeholders": {"number": {"type": "int"}}},
|
||||
"workoutSplitFiveKm": "{from}–{to} km",
|
||||
"@workoutSplitFiveKm": {"description": "A cycling split of 5 km: where it starts and ends.", "placeholders": {"from": {"type": "int"}, "to": {"type": "int"}}},
|
||||
"workoutPaceChart": "Pace",
|
||||
"workoutSpeedChart": "Speed",
|
||||
"workoutElevationChart": "Elevation",
|
||||
"workoutMapSource": "Map by {name}: it sees your device's address and the area shown, not your track.",
|
||||
"@workoutMapSource": {"description": "Under a workout's map: what the map's source sees.", "placeholders": {"name": {"type": "String", "example": "OpenFreeMap"}}},
|
||||
"workoutMapSourceAbout": "What {name} keeps",
|
||||
"@workoutMapSourceAbout": {"description": "A link to the map source's page about what it keeps.", "placeholders": {"name": {"type": "String", "example": "OpenFreeMap"}}},
|
||||
"workoutMapUnavailable": "The map can't be loaded now.",
|
||||
"workoutNotFound": "This workout is gone."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,13 +121,13 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @homeEmptyTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Nothing here yet'**
|
||||
/// **'No workouts yet'**
|
||||
String get homeEmptyTitle;
|
||||
|
||||
/// No description provided for @homeEmptyHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Workouts come with a later version of Halkyon Train.'**
|
||||
/// **'Workouts recorded on your phone show here.'**
|
||||
String get homeEmptyHint;
|
||||
|
||||
/// No description provided for @accountTitle.
|
||||
|
|
@ -151,7 +151,7 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @homeRecordHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Record a workout with the button below. The list of your workouts comes with the next version of Halkyon Train.'**
|
||||
/// **'Record one with the button below.'**
|
||||
String get homeRecordHint;
|
||||
|
||||
/// No description provided for @recordAction.
|
||||
|
|
@ -381,6 +381,180 @@ abstract class AppLocalizations {
|
|||
/// In en, this message translates to:
|
||||
/// **'{activity} · paused'**
|
||||
String recordingNotificationPaused(String activity);
|
||||
|
||||
/// A workout's name where the person gave none: the time of day it started (morning 5–12, afternoon 12–17, evening 17–22, night) and its activity, as Strava names them.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{when, select, morning_running{Morning run} morning_walking{Morning walk} morning_hiking{Morning hike} morning_cycling{Morning ride} morning_indoorRowing{Morning row} afternoon_running{Afternoon run} afternoon_walking{Afternoon walk} afternoon_hiking{Afternoon hike} afternoon_cycling{Afternoon ride} afternoon_indoorRowing{Afternoon row} evening_running{Evening run} evening_walking{Evening walk} evening_hiking{Evening hike} evening_cycling{Evening ride} evening_indoorRowing{Evening row} night_running{Night run} night_walking{Night walk} night_hiking{Night hike} night_cycling{Night ride} night_indoorRowing{Night row} other{Workout}}'**
|
||||
String workoutName(String when);
|
||||
|
||||
/// No description provided for @workoutLocked.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Locked workout'**
|
||||
String get workoutLocked;
|
||||
|
||||
/// Under a workout this device can't open (its key is missing here).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This device doesn\'t hold the key it\'s sealed with.'**
|
||||
String get workoutLockedHint;
|
||||
|
||||
/// No description provided for @workoutEdit.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Edit'**
|
||||
String get workoutEdit;
|
||||
|
||||
/// No description provided for @workoutEditTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Edit workout'**
|
||||
String get workoutEditTitle;
|
||||
|
||||
/// No description provided for @workoutNameLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Name'**
|
||||
String get workoutNameLabel;
|
||||
|
||||
/// No description provided for @workoutNotesLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Notes'**
|
||||
String get workoutNotesLabel;
|
||||
|
||||
/// No description provided for @workoutSave.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Save'**
|
||||
String get workoutSave;
|
||||
|
||||
/// No description provided for @workoutDelete.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Delete'**
|
||||
String get workoutDelete;
|
||||
|
||||
/// No description provided for @workoutDeleteTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Delete this workout?'**
|
||||
String get workoutDeleteTitle;
|
||||
|
||||
/// No description provided for @workoutDeleteMessage.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'It\'s deleted on all your devices.'**
|
||||
String get workoutDeleteMessage;
|
||||
|
||||
/// No description provided for @workoutDeleted.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Workout deleted'**
|
||||
String get workoutDeleted;
|
||||
|
||||
/// No description provided for @workoutMovingTime.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'moving time'**
|
||||
String get workoutMovingTime;
|
||||
|
||||
/// Lower case, under a figure: from start to end, pauses included.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'whole time'**
|
||||
String get workoutTotalTime;
|
||||
|
||||
/// No description provided for @workoutDistance.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'distance'**
|
||||
String get workoutDistance;
|
||||
|
||||
/// No description provided for @workoutPace.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'pace'**
|
||||
String get workoutPace;
|
||||
|
||||
/// No description provided for @workoutSpeed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'speed'**
|
||||
String get workoutSpeed;
|
||||
|
||||
/// Lower case, under a figure: the elevation gained.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'climbed'**
|
||||
String get workoutClimb;
|
||||
|
||||
/// No description provided for @workoutClimbValue.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{metres} m'**
|
||||
String workoutClimbValue(int metres);
|
||||
|
||||
/// No description provided for @workoutSplits.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Splits'**
|
||||
String get workoutSplits;
|
||||
|
||||
/// A kilometre's split, its number.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'km {number}'**
|
||||
String workoutSplitKm(int number);
|
||||
|
||||
/// A cycling split of 5 km: where it starts and ends.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{from}–{to} km'**
|
||||
String workoutSplitFiveKm(int from, int to);
|
||||
|
||||
/// No description provided for @workoutPaceChart.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Pace'**
|
||||
String get workoutPaceChart;
|
||||
|
||||
/// No description provided for @workoutSpeedChart.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Speed'**
|
||||
String get workoutSpeedChart;
|
||||
|
||||
/// No description provided for @workoutElevationChart.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Elevation'**
|
||||
String get workoutElevationChart;
|
||||
|
||||
/// Under a workout's map: what the map's source sees.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Map by {name}: it sees your device\'s address and the area shown, not your track.'**
|
||||
String workoutMapSource(String name);
|
||||
|
||||
/// A link to the map source's page about what it keeps.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'What {name} keeps'**
|
||||
String workoutMapSourceAbout(String name);
|
||||
|
||||
/// No description provided for @workoutMapUnavailable.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The map can\'t be loaded now.'**
|
||||
String get workoutMapUnavailable;
|
||||
|
||||
/// No description provided for @workoutNotFound.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This workout is gone.'**
|
||||
String get workoutNotFound;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
|
|
|||
|
|
@ -20,11 +20,11 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
'Wähle die Instanz, auf der deine Trainings liegen sollen. Jede betreibt jemand; weitere kannst du später hinzufügen.';
|
||||
|
||||
@override
|
||||
String get homeEmptyTitle => 'Hier ist noch nichts';
|
||||
String get homeEmptyTitle => 'Noch keine Trainings';
|
||||
|
||||
@override
|
||||
String get homeEmptyHint =>
|
||||
'Trainings kommen mit einer späteren Version von Halkyon Train.';
|
||||
'Trainings, die du auf deinem Telefon aufzeichnest, erscheinen hier.';
|
||||
|
||||
@override
|
||||
String get accountTitle => 'Konto';
|
||||
|
|
@ -37,8 +37,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
String get aboutTitle => 'Über';
|
||||
|
||||
@override
|
||||
String get homeRecordHint =>
|
||||
'Zeichne mit dem Knopf unten ein Training auf. Die Liste deiner Trainings kommt mit der nächsten Version von Halkyon Train.';
|
||||
String get homeRecordHint => 'Zeichne eins mit dem Knopf unten auf.';
|
||||
|
||||
@override
|
||||
String get recordAction => 'Aufzeichnen';
|
||||
|
|
@ -172,4 +171,131 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
String recordingNotificationPaused(String activity) {
|
||||
return '$activity · pausiert';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutName(String when) {
|
||||
String _temp0 = intl.Intl.selectLogic(
|
||||
when,
|
||||
{
|
||||
'morning_running': 'Morgenlauf',
|
||||
'morning_walking': 'Morgenspaziergang',
|
||||
'morning_hiking': 'Morgenwanderung',
|
||||
'morning_cycling': 'Morgenradfahrt',
|
||||
'morning_indoorRowing': 'Rudern am Morgen',
|
||||
'afternoon_running': 'Nachmittagslauf',
|
||||
'afternoon_walking': 'Nachmittagsspaziergang',
|
||||
'afternoon_hiking': 'Nachmittagswanderung',
|
||||
'afternoon_cycling': 'Nachmittagsradfahrt',
|
||||
'afternoon_indoorRowing': 'Rudern am Nachmittag',
|
||||
'evening_running': 'Abendlauf',
|
||||
'evening_walking': 'Abendspaziergang',
|
||||
'evening_hiking': 'Abendwanderung',
|
||||
'evening_cycling': 'Abendradfahrt',
|
||||
'evening_indoorRowing': 'Rudern am Abend',
|
||||
'night_running': 'Nachtlauf',
|
||||
'night_walking': 'Nachtspaziergang',
|
||||
'night_hiking': 'Nachtwanderung',
|
||||
'night_cycling': 'Nachtradfahrt',
|
||||
'night_indoorRowing': 'Rudern in der Nacht',
|
||||
'other': 'Training',
|
||||
},
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutLocked => 'Gesperrtes Training';
|
||||
|
||||
@override
|
||||
String get workoutLockedHint =>
|
||||
'Dieses Gerät hat den Schlüssel nicht, mit dem es versiegelt ist.';
|
||||
|
||||
@override
|
||||
String get workoutEdit => 'Bearbeiten';
|
||||
|
||||
@override
|
||||
String get workoutEditTitle => 'Training bearbeiten';
|
||||
|
||||
@override
|
||||
String get workoutNameLabel => 'Name';
|
||||
|
||||
@override
|
||||
String get workoutNotesLabel => 'Notizen';
|
||||
|
||||
@override
|
||||
String get workoutSave => 'Speichern';
|
||||
|
||||
@override
|
||||
String get workoutDelete => 'Löschen';
|
||||
|
||||
@override
|
||||
String get workoutDeleteTitle => 'Dieses Training löschen?';
|
||||
|
||||
@override
|
||||
String get workoutDeleteMessage => 'Es wird auf all deinen Geräten gelöscht.';
|
||||
|
||||
@override
|
||||
String get workoutDeleted => 'Training gelöscht';
|
||||
|
||||
@override
|
||||
String get workoutMovingTime => 'Zeit in Bewegung';
|
||||
|
||||
@override
|
||||
String get workoutTotalTime => 'ganze Zeit';
|
||||
|
||||
@override
|
||||
String get workoutDistance => 'Strecke';
|
||||
|
||||
@override
|
||||
String get workoutPace => 'Tempo';
|
||||
|
||||
@override
|
||||
String get workoutSpeed => 'Geschwindigkeit';
|
||||
|
||||
@override
|
||||
String get workoutClimb => 'Aufstieg';
|
||||
|
||||
@override
|
||||
String workoutClimbValue(int metres) {
|
||||
return '$metres m';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutSplits => 'Abschnitte';
|
||||
|
||||
@override
|
||||
String workoutSplitKm(int number) {
|
||||
return 'km $number';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutSplitFiveKm(int from, int to) {
|
||||
return '$from–$to km';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutPaceChart => 'Tempo';
|
||||
|
||||
@override
|
||||
String get workoutSpeedChart => 'Geschwindigkeit';
|
||||
|
||||
@override
|
||||
String get workoutElevationChart => 'Höhe';
|
||||
|
||||
@override
|
||||
String workoutMapSource(String name) {
|
||||
return 'Karte von $name: sieht die Adresse deines Geräts und den gezeigten Ausschnitt, nicht deine Strecke.';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutMapSourceAbout(String name) {
|
||||
return 'Was $name speichert';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutMapUnavailable =>
|
||||
'Die Karte kann gerade nicht geladen werden.';
|
||||
|
||||
@override
|
||||
String get workoutNotFound => 'Dieses Training gibt es nicht mehr.';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,11 +20,10 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
'Choose the instance to keep your workouts on. Someone runs each one; you can add others later.';
|
||||
|
||||
@override
|
||||
String get homeEmptyTitle => 'Nothing here yet';
|
||||
String get homeEmptyTitle => 'No workouts yet';
|
||||
|
||||
@override
|
||||
String get homeEmptyHint =>
|
||||
'Workouts come with a later version of Halkyon Train.';
|
||||
String get homeEmptyHint => 'Workouts recorded on your phone show here.';
|
||||
|
||||
@override
|
||||
String get accountTitle => 'Account';
|
||||
|
|
@ -37,8 +36,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
String get aboutTitle => 'About';
|
||||
|
||||
@override
|
||||
String get homeRecordHint =>
|
||||
'Record a workout with the button below. The list of your workouts comes with the next version of Halkyon Train.';
|
||||
String get homeRecordHint => 'Record one with the button below.';
|
||||
|
||||
@override
|
||||
String get recordAction => 'Record';
|
||||
|
|
@ -171,6 +169,132 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
String recordingNotificationPaused(String activity) {
|
||||
return '$activity · paused';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutName(String when) {
|
||||
String _temp0 = intl.Intl.selectLogic(
|
||||
when,
|
||||
{
|
||||
'morning_running': 'Morning run',
|
||||
'morning_walking': 'Morning walk',
|
||||
'morning_hiking': 'Morning hike',
|
||||
'morning_cycling': 'Morning ride',
|
||||
'morning_indoorRowing': 'Morning row',
|
||||
'afternoon_running': 'Afternoon run',
|
||||
'afternoon_walking': 'Afternoon walk',
|
||||
'afternoon_hiking': 'Afternoon hike',
|
||||
'afternoon_cycling': 'Afternoon ride',
|
||||
'afternoon_indoorRowing': 'Afternoon row',
|
||||
'evening_running': 'Evening run',
|
||||
'evening_walking': 'Evening walk',
|
||||
'evening_hiking': 'Evening hike',
|
||||
'evening_cycling': 'Evening ride',
|
||||
'evening_indoorRowing': 'Evening row',
|
||||
'night_running': 'Night run',
|
||||
'night_walking': 'Night walk',
|
||||
'night_hiking': 'Night hike',
|
||||
'night_cycling': 'Night ride',
|
||||
'night_indoorRowing': 'Night row',
|
||||
'other': 'Workout',
|
||||
},
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutLocked => 'Locked workout';
|
||||
|
||||
@override
|
||||
String get workoutLockedHint =>
|
||||
'This device doesn\'t hold the key it\'s sealed with.';
|
||||
|
||||
@override
|
||||
String get workoutEdit => 'Edit';
|
||||
|
||||
@override
|
||||
String get workoutEditTitle => 'Edit workout';
|
||||
|
||||
@override
|
||||
String get workoutNameLabel => 'Name';
|
||||
|
||||
@override
|
||||
String get workoutNotesLabel => 'Notes';
|
||||
|
||||
@override
|
||||
String get workoutSave => 'Save';
|
||||
|
||||
@override
|
||||
String get workoutDelete => 'Delete';
|
||||
|
||||
@override
|
||||
String get workoutDeleteTitle => 'Delete this workout?';
|
||||
|
||||
@override
|
||||
String get workoutDeleteMessage => 'It\'s deleted on all your devices.';
|
||||
|
||||
@override
|
||||
String get workoutDeleted => 'Workout deleted';
|
||||
|
||||
@override
|
||||
String get workoutMovingTime => 'moving time';
|
||||
|
||||
@override
|
||||
String get workoutTotalTime => 'whole time';
|
||||
|
||||
@override
|
||||
String get workoutDistance => 'distance';
|
||||
|
||||
@override
|
||||
String get workoutPace => 'pace';
|
||||
|
||||
@override
|
||||
String get workoutSpeed => 'speed';
|
||||
|
||||
@override
|
||||
String get workoutClimb => 'climbed';
|
||||
|
||||
@override
|
||||
String workoutClimbValue(int metres) {
|
||||
return '$metres m';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutSplits => 'Splits';
|
||||
|
||||
@override
|
||||
String workoutSplitKm(int number) {
|
||||
return 'km $number';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutSplitFiveKm(int from, int to) {
|
||||
return '$from–$to km';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutPaceChart => 'Pace';
|
||||
|
||||
@override
|
||||
String get workoutSpeedChart => 'Speed';
|
||||
|
||||
@override
|
||||
String get workoutElevationChart => 'Elevation';
|
||||
|
||||
@override
|
||||
String workoutMapSource(String name) {
|
||||
return 'Map by $name: it sees your device\'s address and the area shown, not your track.';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutMapSourceAbout(String name) {
|
||||
return 'What $name keeps';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutMapUnavailable => 'The map can\'t be loaded now.';
|
||||
|
||||
@override
|
||||
String get workoutNotFound => 'This workout is gone.';
|
||||
}
|
||||
|
||||
/// The translations for English, as used in the United Kingdom (`en_GB`).
|
||||
|
|
|
|||
Loading…
Reference in a new issue