# Conflicts: # apps/train/halkyon_train_flutter/lib/src/app/train_paths.dart # docs/adr/0030-halkyon-train.md
2126 lines
66 KiB
Text
2126 lines
66 KiB
Text
{
|
||
"@@locale": "en",
|
||
"appTitle": "Halkyon Train",
|
||
"@appTitle": {
|
||
"description": "The app's name: the window's title, and where halkyon_app's texts name the app."
|
||
},
|
||
"launchProduct": "Train",
|
||
"@launchProduct": {
|
||
"description": "The app's word in its wordmark, under \"Halkyon\"."
|
||
},
|
||
"instanceFirstStartSubtitle": "Choose the instance to keep your workouts on. Someone runs each one; you can add others later.",
|
||
"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 Halkyon Train",
|
||
"homeRecordHint": "Record one from the Record tab.",
|
||
"recordBack": "Back to the recording",
|
||
"activityRunning": "Running",
|
||
"activityWalking": "Walking",
|
||
"activityHiking": "Hiking",
|
||
"activityCycling": "Cycling",
|
||
"activityStrength": "Strength training",
|
||
"activityIndoorRowing": "Rowing indoors",
|
||
"activityOther": "Other workout",
|
||
"recordAutoPause": "Pause by itself",
|
||
"@recordAutoPause": {
|
||
"description": "The switch for auto-pause, as the recording starts."
|
||
},
|
||
"recordAutoPauseHint": "When you stand still, and going on as you move again",
|
||
"recordStart": "Start",
|
||
"recordPlan": "Plan",
|
||
"recordNoPlan": "None",
|
||
"recordingLap": "Lap",
|
||
"recordingPlanDone": "Plan done",
|
||
"recordingStepOf": "Step {index} of {count}",
|
||
"@recordingStepOf": {
|
||
"placeholders": {
|
||
"index": {
|
||
"type": "int"
|
||
},
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"recordingNextStep": "Next: {step}",
|
||
"@recordingNextStep": {
|
||
"placeholders": {
|
||
"step": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"recordingStepTapLap": "Until you tap Lap",
|
||
"recordLocationRefused": "Train needs your location to record this. You can allow it in the system's settings.",
|
||
"recordingWaitingForGps": "Waiting for GPS",
|
||
"recordingWaitingForGpsAccuracy": "Waiting for GPS · ±{metres} m",
|
||
"@recordingWaitingForGpsAccuracy": {
|
||
"description": "Before a fix precise enough: how far off the last one may be.",
|
||
"placeholders": {
|
||
"metres": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"recordingGpsAccuracy": "GPS ±{metres} m",
|
||
"@recordingGpsAccuracy": {
|
||
"description": "How far off the last fix may be.",
|
||
"placeholders": {
|
||
"metres": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"recordingMovingTime": "moving time",
|
||
"@recordingMovingTime": {
|
||
"description": "Under the time, lower case: the time moved, pauses left out."
|
||
},
|
||
"recordingDistance": "distance",
|
||
"recordingPace": "pace",
|
||
"recordingSpeed": "speed",
|
||
"recordingDistanceValue": "{km} km",
|
||
"@recordingDistanceValue": {
|
||
"placeholders": {
|
||
"km": {
|
||
"type": "String",
|
||
"example": "5.12"
|
||
}
|
||
}
|
||
},
|
||
"recordingPaceValue": "{pace} /km",
|
||
"@recordingPaceValue": {
|
||
"description": "Minutes and seconds a kilometre takes.",
|
||
"placeholders": {
|
||
"pace": {
|
||
"type": "String",
|
||
"example": "6:18"
|
||
}
|
||
}
|
||
},
|
||
"recordingSpeedValue": "{kmh} km/h",
|
||
"@recordingSpeedValue": {
|
||
"placeholders": {
|
||
"kmh": {
|
||
"type": "String",
|
||
"example": "24.3"
|
||
}
|
||
}
|
||
},
|
||
"recordingPausedAuto": "Paused: not moving",
|
||
"@recordingPausedAuto": {
|
||
"description": "Train paused the recording by itself (auto-pause)."
|
||
},
|
||
"recordingPausedByHand": "Paused",
|
||
"recordingPause": "Pause",
|
||
"recordingResume": "Resume",
|
||
"recordingStop": "Stop",
|
||
"recordingHoldToStop": "Hold Stop to end the workout",
|
||
"recordingStoppedTitle": "Save this workout?",
|
||
"recordingSave": "Save",
|
||
"recordingDiscard": "Discard",
|
||
"recordingDiscardTitle": "Discard this workout?",
|
||
"recordingDiscardMessage": "Its time and track are deleted from this device. This can't be undone.",
|
||
"recordingSaveFailed": "It can't be saved on this device, which doesn't hold your account's keys. It stays here until it can be.",
|
||
"recordingCutOffTitle": "A recording was cut off",
|
||
"recordingCutOffMessage": "A recording from {start} was cut off. Save it up to {end}, or discard it?",
|
||
"@recordingCutOffMessage": {
|
||
"description": "A recording found unfinished as the app opened: when it started and its last sample.",
|
||
"placeholders": {
|
||
"start": {
|
||
"type": "String",
|
||
"example": "07:30"
|
||
},
|
||
"end": {
|
||
"type": "String",
|
||
"example": "08:02"
|
||
}
|
||
}
|
||
},
|
||
"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"
|
||
}
|
||
}
|
||
},
|
||
"workoutName": "{when, select, morning_strength{Morning strength} afternoon_strength{Afternoon strength} evening_strength{Evening strength} night_strength{Night strength} 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",
|
||
"workoutActivityLabel": "Activity",
|
||
"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",
|
||
"workoutSteps": "Steps of {plan}",
|
||
"@workoutSteps": {
|
||
"placeholders": {
|
||
"plan": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"workoutOnTarget": "On target",
|
||
"workoutOffTarget": "Off target",
|
||
"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"
|
||
}
|
||
}
|
||
},
|
||
"workoutMapOwn": "Map by your instance, {name}, from OpenStreetMap: it keeps nothing of the area shown.",
|
||
"@workoutMapOwn": {
|
||
"description": "Under a workout's map drawn from the instance's own tiles (D50): what it sees.",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String",
|
||
"example": "train.halkyon.eu"
|
||
}
|
||
}
|
||
},
|
||
"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.",
|
||
"workoutMapAbout": "About the map",
|
||
"@workoutMapAbout": {"description": "Title of the explanation behind the question mark on a workout's page (D63): what the map's source sees."},
|
||
"workoutShowMap": "Show the map",
|
||
"@workoutShowMap": {"description": "Tooltip of the chevron that lowers a workout's sheet, the page pulled up, so that the map shows again (D63)."},
|
||
"mapCredits": "Map credits",
|
||
"@mapCredits": {"description": "Tooltip of the button over a map that shows whose map and data it is."},
|
||
"routeHelpTitle": "Planning a route",
|
||
"@routeHelpTitle": {"description": "Title of the explanation behind the question mark over the route planner's map (D63)."},
|
||
"workoutNotFound": "This workout is gone.",
|
||
"recordHeartRate": "Heart rate",
|
||
"recordNoStrap": "No strap",
|
||
"recordHeartLoop": "From the Polar Loop",
|
||
"recordHeartStrapThenLoop": "{strap}, the Loop while it is lost",
|
||
"@recordHeartStrapThenLoop": {
|
||
"placeholders": {
|
||
"strap": {
|
||
"type": "String",
|
||
"example": "Polar H10"
|
||
}
|
||
}
|
||
},
|
||
"@recordNoStrap": {
|
||
"description": "On the Record sheet, under Heart rate, where no strap is chosen."
|
||
},
|
||
"strapSheetTitle": "Heart-rate strap",
|
||
"strapSearching": "Looking for straps nearby…",
|
||
"strapSearchingHint": "Put the strap on: most wake up only once they touch skin.",
|
||
"strapNear": "close by",
|
||
"@strapNear": {
|
||
"description": "Under a strap found: its signal is strong."
|
||
},
|
||
"strapFar": "further off",
|
||
"@strapFar": {
|
||
"description": "Under a strap found: its signal is weak."
|
||
},
|
||
"strapUnnamed": "Unnamed strap",
|
||
"@strapUnnamed": {
|
||
"description": "A strap that sends no name."
|
||
},
|
||
"strapForget": "Forget strap",
|
||
"strapRefused": "Train needs nearby devices to find your strap. You can allow it in the system's settings.",
|
||
"strapBluetoothOff": "Bluetooth is off. Turn it on to look for devices nearby.",
|
||
"recordingHeartRate": "heart rate",
|
||
"@recordingHeartRate": {
|
||
"description": "Under the heart rate, lower case."
|
||
},
|
||
"recordingStrapLost": "Strap lost",
|
||
"@recordingStrapLost": {
|
||
"description": "While recording: the strap is out of reach or off; Train keeps asking for it."
|
||
},
|
||
"workoutAverageHeartRate": "average heart rate",
|
||
"@workoutAverageHeartRate": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"workoutMaxHeartRate": "highest heart rate",
|
||
"@workoutMaxHeartRate": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"workoutBpmValue": "{bpm} bpm",
|
||
"@workoutBpmValue": {
|
||
"placeholders": {
|
||
"bpm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"workoutHeartRateChart": "Heart rate",
|
||
"recordRower": "Rowing machine",
|
||
"recordNoRower": "Choose your rowing machine",
|
||
"recordRowerRefused": "Train needs nearby devices to record from your rowing machine. You can allow it in the system's settings.",
|
||
"rowerSheetTitle": "Rowing machine",
|
||
"rowerSearching": "Looking for rowing machines nearby…",
|
||
"rowerSearchingHint": "Wake the console: most show once you pull or press a button. One another app holds (Christopeit Connect, Kinomap) can't be found: close that app first.",
|
||
"rowerUnnamed": "Unnamed rowing machine",
|
||
"rowerForget": "Forget rowing machine",
|
||
"rowerRefused": "Train needs nearby devices to find your rowing machine. You can allow it in the system's settings.",
|
||
"recordingRowerConnecting": "Looking for the rowing machine",
|
||
"@recordingRowerConnecting": {
|
||
"description": "While recording a row: the rower isn't connected yet. Another app may hold it."
|
||
},
|
||
"recordingRowerLost": "Rowing machine lost",
|
||
"@recordingRowerLost": {
|
||
"description": "While recording a row: the rower is out of reach or off; Train keeps asking for it."
|
||
},
|
||
"recordingSplit": "split",
|
||
"@recordingSplit": {
|
||
"description": "Lower case, under a figure: how long 500 m take now."
|
||
},
|
||
"recordingStrokeRate": "strokes a minute",
|
||
"@recordingStrokeRate": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"recordingWatts": "watts",
|
||
"@recordingWatts": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"workoutSplitValue": "{split} /500 m",
|
||
"@workoutSplitValue": {
|
||
"description": "Minutes and seconds 500 m take.",
|
||
"placeholders": {
|
||
"split": {
|
||
"type": "String",
|
||
"example": "2:04"
|
||
}
|
||
}
|
||
},
|
||
"workoutAverageSplit": "average split",
|
||
"@workoutAverageSplit": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"workoutAverageStrokeRate": "average stroke rate",
|
||
"@workoutAverageStrokeRate": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"workoutStrokeRateValue": "{rate} /min",
|
||
"@workoutStrokeRateValue": {
|
||
"description": "Strokes a minute.",
|
||
"placeholders": {
|
||
"rate": {
|
||
"type": "String",
|
||
"example": "24"
|
||
}
|
||
}
|
||
},
|
||
"workoutAveragePower": "average power",
|
||
"@workoutAveragePower": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"workoutMaxPower": "highest power",
|
||
"@workoutMaxPower": {
|
||
"description": "Lower case, under a figure."
|
||
},
|
||
"workoutWattsValue": "{watts} W",
|
||
"@workoutWattsValue": {
|
||
"placeholders": {
|
||
"watts": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"workoutStrokes": "strokes",
|
||
"@workoutStrokes": {
|
||
"description": "Lower case, under a figure: how many strokes."
|
||
},
|
||
"workoutSplitMetres": "{from}–{to} m",
|
||
"@workoutSplitMetres": {
|
||
"description": "A rowing split of 500 m: where it starts and ends.",
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "int"
|
||
},
|
||
"to": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"workoutSplitChart": "Split",
|
||
"workoutStrokeRateChart": "Stroke rate",
|
||
"workoutPowerChart": "Power",
|
||
"recordAutoPauseRowingHint": "When you stop rowing, going on with the next stroke",
|
||
"recordingMetres": "metres",
|
||
"healthTitle": "Health Connect",
|
||
"healthHint": "Share workouts with other apps on this phone",
|
||
"@healthHint": {
|
||
"description": "Under Health Connect in the account sheet."
|
||
},
|
||
"healthUnavailable": "Health Connect isn't on this phone. Android 14 and later have it built in; before 14, it's an app of its own.",
|
||
"healthNeedsUpdate": "Update the Health Connect app to use it with Train.",
|
||
"healthWrite": "Write my workouts",
|
||
"healthWriteHint": "Every workout on this phone, kept up to date as you edit or delete it",
|
||
"healthTakenBack": "Health Connect took this back. Allow it there to turn it on again.",
|
||
"healthRefused": "Health Connect didn't allow it. You can allow it in its settings.",
|
||
"healthOpenSettings": "Open Health Connect",
|
||
"healthWhy": "Why Train asks",
|
||
"healthRationaleTitle": "Train and Health Connect",
|
||
"healthRationaleWrite": "Train writes your workouts to Health Connect only once you turn it on: each one with its route, heart rate, speed, power, distance and climb, so that other apps on this phone can use them. A workout edited or deleted in Train is edited or deleted there too.",
|
||
"healthRationaleRead": "Train reads other apps' workouts only once you turn it on, and only from the apps you choose: their heart rate, distance and power come into Train as workouts, sealed with your key before they're synced to your instance, which can't read them.",
|
||
"healthRationaleNothingElse": "What Train reads there is shown to you and nobody else, and isn't used for anything else. Turning a switch off, or taking a permission back in Health Connect, stops it.",
|
||
"healthRead": "Read from other apps",
|
||
"healthReadHint": "Their workouts come into Train, from the apps you choose below",
|
||
"healthReadWeight": "Read my weight",
|
||
"healthReadWeightHint": "Weights other apps wrote, a scale's say, come into Train",
|
||
"healthRationaleWeight": "Train reads the weights other apps wrote only once you turn it on: each comes into Train once, sealed with your key before it's synced to your instance, which can't read it.",
|
||
"healthApps": "Apps",
|
||
"@healthApps": {
|
||
"description": "Over the apps that wrote workouts to Health Connect, each with its switch."
|
||
},
|
||
"healthAppsEmpty": "No app has written workouts to Health Connect yet.",
|
||
"workoutFromList": "from {app}",
|
||
"@workoutFromList": {
|
||
"description": "In the list, after when an imported workout was: the app it came from.",
|
||
"placeholders": {
|
||
"app": {
|
||
"type": "String",
|
||
"example": "Gadgetbridge"
|
||
}
|
||
}
|
||
},
|
||
"workoutFrom": "From {app}, through Health Connect",
|
||
"@workoutFrom": {
|
||
"description": "On an imported workout's page.",
|
||
"placeholders": {
|
||
"app": {
|
||
"type": "String",
|
||
"example": "Gadgetbridge"
|
||
}
|
||
}
|
||
},
|
||
"workoutBringTrack": "Bring in the track",
|
||
"@workoutBringTrack": {
|
||
"description": "On an imported workout's page: asks Health Connect for its route."
|
||
},
|
||
"workoutNoTrack": "Health Connect gave no track for it.",
|
||
"profileTitle": "Your body",
|
||
"profileHint": "What your band and your heart-rate zones work from",
|
||
"@profileHint": {
|
||
"description": "Under Your body in the account sheet."
|
||
},
|
||
"profileIntro": "Each figure is optional and sealed with your key, as your workouts are; your instance can't read them.",
|
||
"profileLocked": "Your profile is sealed with a key this device doesn't hold.",
|
||
"profileSex": "Sex",
|
||
"profileSexHint": "As Polar's formulas take it: the one your body's figures follow",
|
||
"profileSexFemale": "Female",
|
||
"profileSexMale": "Male",
|
||
"profileNotGiven": "Not given",
|
||
"profileBirthDate": "Birth date",
|
||
"profileHeight": "Height",
|
||
"profileHeightUnit": "cm",
|
||
"profileWeight": "Weight",
|
||
"profileWeightUnit": "kg",
|
||
"profileRestingHeartRate": "Resting heart rate",
|
||
"profileMaxHeartRate": "Highest heart rate",
|
||
"profileBpmUnit": "bpm",
|
||
"profileVo2Max": "VO2max",
|
||
"profileVo2MaxUnit": "ml/kg/min",
|
||
"profileTrainingBackground": "Training background",
|
||
"trainingOccasional": "Occasional",
|
||
"trainingRegular": "Regular",
|
||
"trainingFrequent": "Frequent",
|
||
"trainingHeavy": "Heavy",
|
||
"trainingSemiPro": "Semi-pro",
|
||
"trainingPro": "Pro",
|
||
"profileTypicalDay": "Typical day",
|
||
"typicalDaySitting": "Mostly sitting",
|
||
"typicalDayStanding": "Mostly standing",
|
||
"typicalDayMoving": "Mostly moving",
|
||
"profileSleepGoal": "Sleep goal",
|
||
"profileSave": "Save",
|
||
"profileSaved": "Saved",
|
||
"profileInvalid": "Check the figures marked.",
|
||
"profileNeeded": "Needed for your band",
|
||
"loopTitle": "Polar Loop",
|
||
"loopHint": "Your band: its setup, battery and clock",
|
||
"@loopHint": {
|
||
"description": "Under Polar Loop in the account sheet."
|
||
},
|
||
"loopNone": "Train sets up a Polar Loop and keeps it itself, without Polar Flow or a Polar account. A band used with Polar Flow needs a factory reset first.",
|
||
"loopSetUp": "Set up a Loop",
|
||
"loopSetUpAgain": "Set up again",
|
||
"loopLetGo": "Let the band go",
|
||
"loopLetGoTitle": "Let the band go?",
|
||
"loopLetGoText": "The band is reset to the factory's state, and what it holds that hasn't reached Train is lost. Afterwards it can be paired with another phone, or with Polar Flow.",
|
||
"loopLetGoConfirm": "Reset the band",
|
||
"loopConnected": "Connected",
|
||
"loopLastSeen": "Last seen {when}",
|
||
"@loopLastSeen": {
|
||
"placeholders": {
|
||
"when": {
|
||
"type": "String",
|
||
"example": "28 Oct 2026, 18:30"
|
||
}
|
||
}
|
||
},
|
||
"loopNotInReach": "Not in reach",
|
||
"loopBattery": "Battery {level} %",
|
||
"@loopBattery": {
|
||
"placeholders": {
|
||
"level": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"loopCharging": "Battery {level} %, charging",
|
||
"@loopCharging": {
|
||
"placeholders": {
|
||
"level": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"loopFirmware": "Firmware {version}",
|
||
"@loopFirmware": {
|
||
"placeholders": {
|
||
"version": {
|
||
"type": "String",
|
||
"example": "1.2.3"
|
||
}
|
||
}
|
||
},
|
||
"loopFirmwareCheck": "Check for a firmware update",
|
||
"loopFirmwareCurrent": "The band's firmware is up to date.",
|
||
"loopFirmwareOffered": "Firmware {version} available",
|
||
"@loopFirmwareOffered": {
|
||
"placeholders": {
|
||
"version": {
|
||
"type": "String",
|
||
"example": "2.1.0"
|
||
}
|
||
}
|
||
},
|
||
"loopFirmwareViaPolar": "Fetched from Polar directly: Polar learns this phone's address (or its VPN's), with the band's firmware version and hardware code.",
|
||
"loopFirmwareViaInstance": "Fetched through your instance: Polar learns the instance's address, not this phone's, with the band's firmware version and hardware code.",
|
||
"loopFirmwareErases": "The update erases the band. Train first keeps what is on it, then sets it up again with your profile.",
|
||
"loopFirmwareUpdate": "Update",
|
||
"loopFirmwareUpdateTitle": "Update the band's firmware?",
|
||
"loopFirmwareUpdateText": "Train first keeps what is on the band, as the update erases it. The band restarts, which takes a few minutes, and Train then sets it up again with your profile. Keep it near the phone until then.",
|
||
"loopFirmwareStage": "{stage, select, reading{Keeping what is on the band…} fetching{Fetching the firmware…} preparing{Preparing the band…} writing{Writing the firmware…} finalizing{Finishing the update…} done{Written} restarting{The band restarts…} other{Updating…}}",
|
||
"@loopFirmwareStage": {
|
||
"placeholders": {
|
||
"stage": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"loopFirmwareStageHint": "Keep the band near the phone, and Train open.",
|
||
"loopFirmwareUpdated": "Firmware updated; the band is set up again.",
|
||
"loopFirmwareThroughInstance": "Firmware through your instance",
|
||
"loopFirmwareThroughInstanceHint": "Polar then learns the instance's address rather than this phone's. Off, the phone asks Polar directly.",
|
||
"loopProfileChanged": "Your body changed since the band was set up",
|
||
"loopProfileChangedHint": "Sending sets the band up again with your figures as they are now.",
|
||
"loopSend": "Send to the band",
|
||
"loopSent": "Sent to the band.",
|
||
"loopFailed": "The band didn't answer. Keep it close, and try again.",
|
||
"loopSearching": "Looking for Loops nearby",
|
||
"loopSearchingHint": "Keep the band close; tap it to wake it up.",
|
||
"loopRefused": "Train can't look for your band without nearby devices. Allow them in Android's settings.",
|
||
"loopUnnamed": "Polar Loop",
|
||
"loopSettingUp": "Setting up the band…",
|
||
"loopSettingUpHint": "Android may ask you to pair it.",
|
||
"loopSetUpDone": "The band is set up.",
|
||
"loopFormTitle": "For your band",
|
||
"loopFormIntro": "Your band needs these. They're kept in Your body, sealed with your key. For a resting or highest heart rate or a VO2max you haven't given, the band takes Polar's defaults, and Your body stays as it is.",
|
||
"loopFormSave": "Set up the band",
|
||
"homeWorkouts": "Workouts",
|
||
"profileTabProgress": "Progress",
|
||
"homeDays": "Days",
|
||
"homePlans": "Plans",
|
||
"plansNew": "New plan",
|
||
"plansNewEmpty": "From nothing",
|
||
"plansEmptyTitle": "No plans yet",
|
||
"plansEmptyHint": "A plan's steps lead you through intervals as you record, with a tone, a vibration and a voice at each change. Start from a template, or from nothing.",
|
||
"planLocked": "A plan that doesn't open here",
|
||
"planTemplateFourByFour": "4×4 minutes",
|
||
"planTemplateTabata": "Tabata",
|
||
"planTemplateFourHundreds": "10×400 m",
|
||
"planTitle": "Plan",
|
||
"planNewTitle": "New plan",
|
||
"planName": "Name",
|
||
"planActivity": "For",
|
||
"planActivityAny": "Any activity",
|
||
"planOffTarget": "Tell me when I'm off target",
|
||
"planOffTargetHint": "A short cue at most every 30 seconds.",
|
||
"planSave": "Save",
|
||
"planNotSaved": "The plan wasn't saved.",
|
||
"planAddStep": "Add a step",
|
||
"planAddRepeat": "Add a repeat",
|
||
"planRepeat": "{count}×",
|
||
"@planRepeat": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"planFewer": "Fewer rounds",
|
||
"planMore": "More rounds",
|
||
"planBlockMenu": "More",
|
||
"planMoveUp": "Move up",
|
||
"planMoveDown": "Move down",
|
||
"planRemove": "Remove",
|
||
"planDelete": "Delete",
|
||
"planDeleteTitle": "Delete this plan?",
|
||
"planDeleteMessage": "It's deleted on all your devices; workouts recorded with it keep their steps.",
|
||
"planDeleted": "Plan deleted",
|
||
"planSteps": "{count, plural, =1{1 step} other{{count} steps}}",
|
||
"@planSteps": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"planSayRound": "{round} of {rounds}",
|
||
"@planSayRound": {
|
||
"placeholders": {
|
||
"round": {
|
||
"type": "int"
|
||
},
|
||
"rounds": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"planSayMinutes": "{count, plural, =1{1 minute} other{{count} minutes}}",
|
||
"@planSayMinutes": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"planSaySeconds": "{count, plural, =1{1 second} other{{count} seconds}}",
|
||
"@planSaySeconds": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"planSayMetres": "{count, plural, =1{1 metre} other{{count} metres}}",
|
||
"@planSayMetres": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"planSayKilometres": "{km} kilometres",
|
||
"@planSayKilometres": {
|
||
"placeholders": {
|
||
"km": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"planSayUntilLap": "until you tap Lap",
|
||
"planSayPace": "{from} to {to} a kilometre",
|
||
"@planSayPace": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"planSaySpeed": "{from} to {to} kilometres an hour",
|
||
"@planSaySpeed": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"planSayHeartRate": "{from} to {to} beats a minute",
|
||
"@planSayHeartRate": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"planSayZone": "zone {zone}",
|
||
"@planSayZone": {
|
||
"placeholders": {
|
||
"zone": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"planSaySplit": "{from} to {to} per 500 metres",
|
||
"@planSaySplit": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"planSayWatts": "{from} to {to} watts",
|
||
"@planSayWatts": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"planSayStrokeRate": "{from} to {to} strokes a minute",
|
||
"@planSayStrokeRate": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"planSayHarder": "Push a little",
|
||
"planSayEasier": "Ease off a little",
|
||
"planSayDone": "Plan done",
|
||
"stepTitle": "Step",
|
||
"stepKind": "Kind",
|
||
"stepWarmUp": "Warm-up",
|
||
"stepWork": "Work",
|
||
"stepRecovery": "Recovery",
|
||
"stepCoolDown": "Cool-down",
|
||
"stepEnds": "Ends",
|
||
"stepEndTime": "After a time",
|
||
"stepEndDistance": "After a distance",
|
||
"stepEndLap": "With a lap tap",
|
||
"stepTimeLabel": "Time (min:s)",
|
||
"stepMetresLabel": "Metres",
|
||
"stepTarget": "Target",
|
||
"stepZone": "Zone",
|
||
"stepDone": "Done",
|
||
"stepMinutes": "{minutes} min",
|
||
"@stepMinutes": {
|
||
"placeholders": {
|
||
"minutes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"stepSeconds": "{seconds} s",
|
||
"@stepSeconds": {
|
||
"placeholders": {
|
||
"seconds": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"stepMinutesSeconds": "{minutes} min {seconds} s",
|
||
"@stepMinutesSeconds": {
|
||
"placeholders": {
|
||
"minutes": {
|
||
"type": "int"
|
||
},
|
||
"seconds": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"stepMetres": "{metres} m",
|
||
"@stepMetres": {
|
||
"placeholders": {
|
||
"metres": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"stepKilometres": "{km} km",
|
||
"@stepKilometres": {
|
||
"placeholders": {
|
||
"km": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"stepUntilLap": "until a lap tap",
|
||
"targetNone": "None",
|
||
"targetFrom": "From",
|
||
"targetTo": "To",
|
||
"targetKindPace": "Pace (per km)",
|
||
"targetKindSpeed": "Speed (km/h)",
|
||
"targetKindHeartRate": "Heart rate (bpm)",
|
||
"targetKindHeartZone": "Heart-rate zone",
|
||
"targetKindSplit": "Split (per 500 m)",
|
||
"targetKindWatts": "Power (W)",
|
||
"targetKindStrokeRate": "Stroke rate (per min)",
|
||
"targetPace": "{from}–{to} per km",
|
||
"@targetPace": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"targetSpeed": "{from}–{to} km/h",
|
||
"@targetSpeed": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"targetHeartRate": "{from}–{to} bpm",
|
||
"@targetHeartRate": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"targetZone": "Zone {zone}",
|
||
"@targetZone": {
|
||
"placeholders": {
|
||
"zone": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"targetSplit": "{from}–{to} per 500 m",
|
||
"@targetSplit": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"targetWatts": "{from}–{to} W",
|
||
"@targetWatts": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"targetStrokeRate": "{from}–{to} strokes/min",
|
||
"@targetStrokeRate": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String"
|
||
},
|
||
"to": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"daysEmptyTitle": "No days yet",
|
||
"daysEmptyHint": "The days and nights your Polar Loop counts show here.",
|
||
"daysSteps": "{steps, plural, =1{1 step} other{{steps} steps}}",
|
||
"@daysSteps": {
|
||
"placeholders": {
|
||
"steps": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"daysActive": "{time} active",
|
||
"@daysActive": {
|
||
"placeholders": {
|
||
"time": {
|
||
"type": "String",
|
||
"example": "1 h 20 min"
|
||
}
|
||
}
|
||
},
|
||
"daysAsleep": "{time} asleep",
|
||
"@daysAsleep": {
|
||
"placeholders": {
|
||
"time": {
|
||
"type": "String",
|
||
"example": "7 h 10 min"
|
||
}
|
||
}
|
||
},
|
||
"daysRecharge": "Recharge {level} of 6",
|
||
"@daysRecharge": {
|
||
"placeholders": {
|
||
"level": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayHoursMinutes": "{hours} h {minutes} min",
|
||
"@dayHoursMinutes": {
|
||
"placeholders": {
|
||
"hours": {
|
||
"type": "int"
|
||
},
|
||
"minutes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayMinutes": "{minutes} min",
|
||
"@dayMinutes": {
|
||
"placeholders": {
|
||
"minutes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayCalories": "{calories} kcal",
|
||
"@dayCalories": {
|
||
"placeholders": {
|
||
"calories": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayGoal": "{percent} % of the day's goal",
|
||
"@dayGoal": {
|
||
"placeholders": {
|
||
"percent": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayNothing": "The band has given nothing for this day yet.",
|
||
"dayTimes": "The day's time",
|
||
"dayTimeNonWear": "Not worn",
|
||
"dayTimeSleep": "Asleep",
|
||
"dayTimeSedentary": "Sitting still",
|
||
"dayTimeLight": "Light activity",
|
||
"dayTimeModerate": "Moderate activity",
|
||
"dayTimeVigorous": "Vigorous activity",
|
||
"dayHeartRate": "Heart rate",
|
||
"dayBpm": "{bpm} bpm",
|
||
"@dayBpm": {
|
||
"placeholders": {
|
||
"bpm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayNight": "The night",
|
||
"dayNightSpan": "{from} – {to}",
|
||
"@dayNightSpan": {
|
||
"placeholders": {
|
||
"from": {
|
||
"type": "String",
|
||
"example": "23:15"
|
||
},
|
||
"to": {
|
||
"type": "String",
|
||
"example": "07:05"
|
||
}
|
||
}
|
||
},
|
||
"daySleepWake": "Awake",
|
||
"daySleepRem": "REM",
|
||
"daySleepLight": "Light",
|
||
"daySleepDeep": "Deep",
|
||
"dayRatingPoorly": "You slept poorly",
|
||
"dayRatingSomewhatPoorly": "You slept somewhat poorly",
|
||
"dayRatingNeither": "You slept neither poorly nor well",
|
||
"dayRatingSomewhatWell": "You slept somewhat well",
|
||
"dayRatingWell": "You slept well",
|
||
"dayRecharge": "Nightly Recharge",
|
||
"dayRecovery": "Recovery",
|
||
"dayRecoveryOf": "{level} of 6",
|
||
"@dayRecoveryOf": {
|
||
"placeholders": {
|
||
"level": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayAns": "Autonomic nervous system",
|
||
"dayHrvName": "Heart rate variability",
|
||
"dayBreathingName": "Breathing",
|
||
"dayPerMinute": "{rate} a minute",
|
||
"@dayPerMinute": {
|
||
"placeholders": {
|
||
"rate": {
|
||
"type": "String",
|
||
"example": "13.7"
|
||
}
|
||
}
|
||
},
|
||
"dayMs": "{ms} ms",
|
||
"@dayMs": {
|
||
"placeholders": {
|
||
"ms": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"dayUsual": "usually {value}",
|
||
"@dayUsual": {
|
||
"description": "Below a figure of the night: the person's own usual, as Polar learnt it.",
|
||
"placeholders": {
|
||
"value": {
|
||
"type": "String",
|
||
"example": "45 ms"
|
||
}
|
||
}
|
||
},
|
||
"dayRechargeHelp": "Nightly Recharge is Polar's measure of how your body recovered in the first hours of sleep, against your own usual. Recovery runs from 1 to 6. The autonomic nervous system's status runs from −10 to +10: above 0, it settled better than usual. Heart rate variability is how much the time between heartbeats varies; higher than usual tends to mean a better recovery. Breathing counts your breaths a minute. A figure the band has none of yet is left out.",
|
||
"daySkin": "Skin temperature",
|
||
"dayCelsius": "{value} °C",
|
||
"@dayCelsius": {
|
||
"placeholders": {
|
||
"value": {
|
||
"type": "String",
|
||
"example": "33.4"
|
||
}
|
||
}
|
||
},
|
||
"daySkinDeviation": "{value} °C from your usual at night",
|
||
"@daySkinDeviation": {
|
||
"placeholders": {
|
||
"value": {
|
||
"type": "String",
|
||
"example": "−0.2"
|
||
}
|
||
}
|
||
},
|
||
"homeRoutes": "Routes",
|
||
"routesNew": "New route",
|
||
"routesEmptyTitle": "No routes yet",
|
||
"routesEmptyHint": "Tap the map to set waypoints, and your instance plans the way between them on paths and roads, with its climb and surfaces.",
|
||
"routeLocked": "A route that doesn't open here",
|
||
"routeTitle": "Route",
|
||
"routeNewTitle": "New route",
|
||
"routeName": "Name",
|
||
"routeActivity": "For",
|
||
"routeActivityAny": "Any activity",
|
||
"routeProfile": "Planned for",
|
||
"routeProfileRun": "Running",
|
||
"routeProfileHike": "Hiking",
|
||
"routeProfileRoadBike": "Road bike",
|
||
"routeProfileTrekkingBike": "Trekking bike",
|
||
"routeProfileGravel": "Gravel bike",
|
||
"routeProfileMtb": "Mountain bike",
|
||
"routeTapHint": "Tap the map to add a waypoint, tap one to take it off. Hold one to drag it, or hold the line to pull out another.",
|
||
"routeWaypointRemove": "Take this waypoint off",
|
||
"@routeWaypointRemove": {
|
||
"description": "The menu of a waypoint tapped on the planner's map (D59)."
|
||
},
|
||
"routeUndo": "Take the last waypoint off",
|
||
"routeSearchHint": "Search for a place",
|
||
"@routeSearchHint": {
|
||
"description": "The planner's search field over the map (D50)."
|
||
},
|
||
"routeSearchClear": "Clear the search",
|
||
"routeSearchNothing": "Nothing found.",
|
||
"@routeSearchNothing": {
|
||
"description": "Under the planner's search: the instance found no place."
|
||
},
|
||
"routeSearchTooOften": "Too many searches for now; try again in a minute.",
|
||
"routeSearchUnreachable": "The search can't be reached now.",
|
||
"routePlanning": "Planning…",
|
||
"routeRefusedInvalid": "A waypoint too many, or one off the map.",
|
||
"routeRefusedTooOften": "Planned too often: try again in a minute.",
|
||
"routeRefusedNoRoute": "No way found there: a waypoint may be off the paths, or outside the region your instance plans in.",
|
||
"routeRefusedUnreachable": "Your instance can't be reached to plan the way.",
|
||
"routeNotOffered": "Your instance doesn't plan routes.",
|
||
"routeAscent": "{metres} m up",
|
||
"@routeAscent": {
|
||
"placeholders": {
|
||
"metres": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"routeDescent": "{metres} m down",
|
||
"@routeDescent": {
|
||
"placeholders": {
|
||
"metres": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"routeSummary": "{distance} · {ascent}",
|
||
"@routeSummary": {
|
||
"description": "A route in the list: its distance and climb.",
|
||
"placeholders": {
|
||
"distance": {
|
||
"type": "String",
|
||
"example": "12.3 km"
|
||
},
|
||
"ascent": {
|
||
"type": "String",
|
||
"example": "120 m up"
|
||
}
|
||
}
|
||
},
|
||
"routesBringIn": "Bring in a GPX file",
|
||
"@routesBringIn": {
|
||
"description": "In the Routes tab: a route brought in from a GPX file (ADR 0030, D45)."
|
||
},
|
||
"routeBringInTitle": "Bring in {name}",
|
||
"@routeBringInTitle": {
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String",
|
||
"example": "Isar loop"
|
||
}
|
||
}
|
||
},
|
||
"routeBringInSnap": "Plan it along the paths",
|
||
"routeBringInSnapHint": "Through its points, with the profile you choose; its turns told",
|
||
"routeBringInDrawn": "Keep it as drawn",
|
||
"routeBringInDrawnHint": "Its way as the file has it, no turns told",
|
||
"routeNotGpx": "This file holds no route Train can read",
|
||
"routeShareGpx": "Share as GPX",
|
||
"routeSaveGpx": "Save as GPX",
|
||
"routeOffline": "Keep the map offline",
|
||
"@routeOffline": {
|
||
"description": "A switch on a saved route: its map kept on this device (ADR 0030, D45)."
|
||
},
|
||
"routeOfflineOff": "Its map along the way, 2 km either side, on this device for when there's no network",
|
||
"routeOfflineLoading": "Keeping the map: {done} of {total} tiles",
|
||
"@routeOfflineLoading": {
|
||
"placeholders": {
|
||
"done": {
|
||
"type": "int"
|
||
},
|
||
"total": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"routeOfflineKept": "Kept on this device: {size} MB",
|
||
"@routeOfflineKept": {
|
||
"placeholders": {
|
||
"size": {
|
||
"type": "String",
|
||
"example": "12.4"
|
||
}
|
||
}
|
||
},
|
||
"routeOfflineMissing": "{missing} of {total} tiles didn't come: asked for again when the app next opens online",
|
||
"@routeOfflineMissing": {
|
||
"placeholders": {
|
||
"missing": {
|
||
"type": "int"
|
||
},
|
||
"total": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"routeOfflineNoMap": "The map can't be reached now: try again online",
|
||
"routeOfflineSaveFirst": "Save the route to keep its map offline",
|
||
"routeKeptOffline": "Map kept offline",
|
||
"routeSurfaces": "Surfaces",
|
||
"surfacePaved": "Paved",
|
||
"surfaceCompacted": "Compacted",
|
||
"surfaceGravel": "Gravel",
|
||
"surfaceNatural": "Natural ground",
|
||
"surfaceUnknown": "Not known",
|
||
"routeSave": "Save",
|
||
"routeNotSaved": "The route wasn't saved.",
|
||
"routeDelete": "Delete",
|
||
"routeDeleteTitle": "Delete this route?",
|
||
"routeDeleteMessage": "It's deleted on all your devices.",
|
||
"routeDeleted": "Route deleted",
|
||
"turnStraight": "Go straight on",
|
||
"turnLeft": "Turn left",
|
||
"turnSlightLeft": "Bear left",
|
||
"turnSharpLeft": "Turn sharp left",
|
||
"turnRight": "Turn right",
|
||
"turnSlightRight": "Bear right",
|
||
"turnSharpRight": "Turn sharp right",
|
||
"turnKeepLeft": "Keep left",
|
||
"turnKeepRight": "Keep right",
|
||
"turnAround": "Turn around",
|
||
"turnRoundabout": "At the roundabout, take exit {exit}",
|
||
"@turnRoundabout": {
|
||
"placeholders": {
|
||
"exit": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"turnExitLeft": "Take the exit on the left",
|
||
"turnExitRight": "Take the exit on the right",
|
||
"routeSayIn": "In {metres} metres: {turn}",
|
||
"@routeSayIn": {
|
||
"description": "Spoken before a turn while following a route.",
|
||
"placeholders": {
|
||
"metres": {
|
||
"type": "int"
|
||
},
|
||
"turn": {
|
||
"type": "String",
|
||
"example": "Turn left"
|
||
}
|
||
}
|
||
},
|
||
"routeSayOff": "Off the route. It lies {metres} metres {direction}.",
|
||
"@routeSayOff": {
|
||
"description": "Spoken off the route; the recorder puts the figures in.",
|
||
"placeholders": {
|
||
"metres": {
|
||
"type": "String",
|
||
"example": "80"
|
||
},
|
||
"direction": {
|
||
"type": "String",
|
||
"example": "to the north-east"
|
||
}
|
||
}
|
||
},
|
||
"routeSayOn": "Back on the route",
|
||
"routeSayArrived": "End of the route",
|
||
"directionNorth": "to the north",
|
||
"directionNorthEast": "to the north-east",
|
||
"directionEast": "to the east",
|
||
"directionSouthEast": "to the south-east",
|
||
"directionSouth": "to the south",
|
||
"directionSouthWest": "to the south-west",
|
||
"directionWest": "to the west",
|
||
"directionNorthWest": "to the north-west",
|
||
"recordRoute": "Route",
|
||
"recordNoRoute": "None",
|
||
"recordingNextTurn": "In {distance}",
|
||
"@recordingNextTurn": {
|
||
"placeholders": {
|
||
"distance": {
|
||
"type": "String",
|
||
"example": "320 m"
|
||
}
|
||
}
|
||
},
|
||
"recordingOffRoute": "Off the route: {distance} {direction}",
|
||
"@recordingOffRoute": {
|
||
"placeholders": {
|
||
"distance": {
|
||
"type": "String",
|
||
"example": "80 m"
|
||
},
|
||
"direction": {
|
||
"type": "String",
|
||
"example": "to the north-east"
|
||
}
|
||
}
|
||
},
|
||
"recordingRouteEnd": "End of the route",
|
||
"recordingFollowRoute": "Following {name}",
|
||
"@recordingFollowRoute": {
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"recordingMapHint": "Swipe for the map",
|
||
"recordingFiguresHint": "Swipe back for the figures",
|
||
"recordingNorthUp": "North up",
|
||
"recordingHeadingUp": "Heading up",
|
||
"musicTitle": "Music",
|
||
"@musicTitle": {
|
||
"description": "The music screen's title, and its tile in the account sheet."
|
||
},
|
||
"musicHint": "Jellyfin playlists to run to",
|
||
"@musicHint": {
|
||
"description": "Under Music in the account sheet."
|
||
},
|
||
"musicIntro": "Train plays music from your Jellyfin server, choosing tracks whose beat fits your steps. Your account and music stay on this phone.",
|
||
"musicServer": "Jellyfin server",
|
||
"@musicServer": {
|
||
"description": "The label of the server's address."
|
||
},
|
||
"musicConnect": "Connect",
|
||
"musicBadAddress": "Enter the server's address, such as jellyfin.example.org.",
|
||
"musicInClear": "Train connects to Jellyfin over https only: http would send the password unencrypted. Use the server's https address.",
|
||
"musicUnreachable": "The server can't be reached. Check the address and the connection.",
|
||
"musicNotJellyfin": "There is no Jellyfin server at this address.",
|
||
"musicRefused": "Jellyfin refused. Check the user name and password.",
|
||
"musicCodeExpired": "The code has expired.",
|
||
"musicFailed": "Jellyfin answered with an error. Try again later.",
|
||
"musicQuickConnect": "To sign in to {server}, enter this code in Jellyfin on another device, under Settings, Quick Connect.",
|
||
"@musicQuickConnect": {
|
||
"placeholders": {
|
||
"server": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"musicNewCode": "New code",
|
||
"musicBack": "Back",
|
||
"musicUsePassword": "Use a password",
|
||
"musicPasswordIntro": "Sign in to {server} with your Jellyfin user name and password.",
|
||
"@musicPasswordIntro": {
|
||
"placeholders": {
|
||
"server": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"musicUserName": "User name",
|
||
"musicPassword": "Password",
|
||
"musicSignIn": "Sign in",
|
||
"musicSignedInAs": "Signed in as {name}",
|
||
"@musicSignedInAs": {
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"musicSignOut": "Sign out",
|
||
"musicPlaylists": "Playlists for running",
|
||
"musicPlaylistsHint": "Train chooses from the tracks of the playlists you mark, and keeps them on this phone.",
|
||
"musicNoPlaylists": "There are no music playlists on this server yet.",
|
||
"musicRetry": "Try again",
|
||
"musicTracks": "{count, plural, =1{1 track} other{{count} tracks}}",
|
||
"@musicTracks": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"musicKept": "On this phone",
|
||
"musicKeptWaiting": "{done} of {total} tracks: the rest waits for Wi-Fi",
|
||
"@musicKeptWaiting": {
|
||
"placeholders": {
|
||
"done": {
|
||
"type": "int"
|
||
},
|
||
"total": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"musicKeptLoading": "Downloading: {done} of {total} tracks",
|
||
"@musicKeptLoading": {
|
||
"placeholders": {
|
||
"done": {
|
||
"type": "int"
|
||
},
|
||
"total": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"musicKeptDone": "{count} tracks, {size} MB, {tempo} with a tempo",
|
||
"@musicKeptDone": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
},
|
||
"size": {
|
||
"type": "String",
|
||
"example": "230.4"
|
||
},
|
||
"tempo": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"musicKeptDelete": "Delete",
|
||
"musicKeptDeleteTitle": "Delete the music on this phone?",
|
||
"musicKeptDeleteText": "Every playlist is unmarked, and its tracks deleted from this phone. They stay on your Jellyfin server.",
|
||
"musicSmaller": "Smaller copies",
|
||
"musicSmallerHint": "Lossless files such as FLAC kept as Opus at 128 kbps, which your server makes. MP3 and AAC stay as they are.",
|
||
"recordMusic": "Music",
|
||
"recordMusicOn": "Music",
|
||
"@recordMusicOn": {
|
||
"description": "The segment playing the kept tracks by cadence."
|
||
},
|
||
"recordMetronome": "Metronome",
|
||
"recordMusicOff": "Off",
|
||
"recordAnnounce": "Announcements",
|
||
"recordAnnounceFoot": "Every kilometre: time, pace and heart rate",
|
||
"@recordAnnounceFoot": {
|
||
"description": "The switch's hint on foot (D49)."
|
||
},
|
||
"recordAnnounceBike": "Every 5 km: time, speed and heart rate",
|
||
"@recordAnnounceBike": {
|
||
"description": "The switch's hint on a bike (D49)."
|
||
},
|
||
"announceKilometres": "{count, plural, =1{1 kilometre} other{{count} kilometres}}",
|
||
"@announceKilometres": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"announceHours": "{count, plural, =1{1 hour} other{{count} hours}}",
|
||
"@announceHours": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"announceTime": "Time {time}",
|
||
"@announceTime": {
|
||
"placeholders": {
|
||
"time": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"announcePace": "Pace {pace} a kilometre",
|
||
"@announcePace": {
|
||
"placeholders": {
|
||
"pace": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"announceSpeed": "Speed {speed} kilometres an hour",
|
||
"@announceSpeed": {
|
||
"placeholders": {
|
||
"speed": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"announceHeartRate": "Heart rate {bpm}",
|
||
"@announceHeartRate": {
|
||
"placeholders": {
|
||
"bpm": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"workoutExport": "Export",
|
||
"workoutExportTitle": "Export the workout",
|
||
"workoutExportGpxHint": "The track, for maps and other apps",
|
||
"workoutExportTcxHint": "Laps, heart rate and cadence, for most training sites",
|
||
"workoutExportFitHint": "What Strava, Garmin and intervals.icu read best",
|
||
"recordSpeedSensor": "Speed and cadence sensor",
|
||
"recordNoSpeedSensor": "None chosen",
|
||
"recordPowerMeter": "Power meter",
|
||
"recordNoPowerMeter": "None chosen",
|
||
"speedSensorSheetTitle": "Speed and cadence sensor",
|
||
"speedSensorSearching": "Looking for speed and cadence sensors nearby…",
|
||
"speedSensorSearchingHint": "Turn the wheel or the crank to wake it. One another app holds can't be found: close that app first.",
|
||
"speedSensorUnnamed": "Unnamed sensor",
|
||
"speedSensorForget": "Forget sensor",
|
||
"speedSensorRefused": "Train needs nearby devices to find your sensor. You can allow it in the system's settings.",
|
||
"powerMeterSheetTitle": "Power meter",
|
||
"powerMeterSearching": "Looking for power meters nearby…",
|
||
"powerMeterSearchingHint": "Turn the crank to wake it. One another app holds can't be found: close that app first.",
|
||
"powerMeterUnnamed": "Unnamed power meter",
|
||
"powerMeterForget": "Forget power meter",
|
||
"powerMeterRefused": "Train needs nearby devices to find your power meter. You can allow it in the system's settings.",
|
||
"recordingCadence": "turns a minute",
|
||
"workoutPedalling": "Cadence",
|
||
"workoutAverageCadence": "average cadence",
|
||
"workoutNormalisedPower": "normalised power",
|
||
"workoutRpmValue": "{rpm} rpm",
|
||
"@workoutRpmValue": {
|
||
"placeholders": {
|
||
"rpm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"recordWheel": "Wheel circumference",
|
||
"recordWheelMeasured": "{mm} mm, measured by GPS",
|
||
"@recordWheelMeasured": {
|
||
"placeholders": {
|
||
"mm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"recordWheelTyped": "{mm} mm, as you typed it",
|
||
"@recordWheelTyped": {
|
||
"placeholders": {
|
||
"mm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"recordWheelDefault": "{mm} mm until GPS has measured it on a ride of 2 km",
|
||
"@recordWheelDefault": {
|
||
"placeholders": {
|
||
"mm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"recordWheelHint": "In millimetres, as the tyre says (700×25C: 2105); empty to have GPS measure it",
|
||
"recordWheelSave": "Save",
|
||
"shellTabHome": "Home",
|
||
"shellTabMaps": "Maps",
|
||
"shellTabRecord": "Record",
|
||
"shellTabGroups": "Groups",
|
||
"shellTabProfile": "Profile",
|
||
"groupsLaterTitle": "Groups come later",
|
||
"groupsLaterHint": "Training with others, in groups of your own, comes in a later version of Train.",
|
||
"settingsTitle": "Settings",
|
||
"settingsTraining": "Training",
|
||
"settingsVersion": "Version {version} (build {build})",
|
||
"@settingsVersion": {
|
||
"placeholders": {
|
||
"version": {
|
||
"type": "String"
|
||
},
|
||
"build": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"recordingBarStopped": "Stopped: save or discard it",
|
||
"recordingBarDistance": "{km} km",
|
||
"@recordingBarDistance": {
|
||
"placeholders": {
|
||
"km": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"homeWeekTitle": "This week",
|
||
"homeWeekTime": "Time",
|
||
"homeWeekDistance": "Distance",
|
||
"homeWeekWorkouts": "Workouts",
|
||
"recordPlansHeading": "Interval plans",
|
||
"profileWeeksTitle": "Last 12 weeks",
|
||
"profileWeekOf": "Week of {date}",
|
||
"@profileWeekOf": {
|
||
"placeholders": {
|
||
"date": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"profileWorkouts": "{count, plural, =1{1 workout} other{{count} workouts}}",
|
||
"@profileWorkouts": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"profileYearEmpty": "No workouts this year yet.",
|
||
"bodyWeight": "{kg} kg",
|
||
"weightTitle": "Weight",
|
||
"weightAdd": "Add weight",
|
||
"weightAll": "All",
|
||
"weightEmpty": "Add your weight to follow it here; the latest is also your body's weight.",
|
||
"weightOverTime": "Over time",
|
||
"weightField": "Weight",
|
||
"weightInvalid": "A weight between 20 and 400 kg",
|
||
"weightWhen": "Measured",
|
||
"weightDelete": "Delete",
|
||
"weightFromHealth": "from {app}",
|
||
"@weightFromHealth": {
|
||
"description": "A weight read from Health Connect: the package of the app that wrote it.",
|
||
"placeholders": {
|
||
"app": {
|
||
"type": "String",
|
||
"example": "com.example.scale"
|
||
}
|
||
}
|
||
},
|
||
"@bodyWeight": {
|
||
"placeholders": {
|
||
"kg": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"bodyResting": "resting {bpm} bpm",
|
||
"@bodyResting": {
|
||
"placeholders": {
|
||
"bpm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"bodyMax": "max {bpm} bpm",
|
||
"@bodyMax": {
|
||
"placeholders": {
|
||
"bpm": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"homeToday": "Today",
|
||
"equipmentTitle": "Equipment",
|
||
"@equipmentTitle": {
|
||
"description": "Settings' entry and the screen of the places the person trains at, with what each has (ADR 0034)."
|
||
},
|
||
"equipmentHint": "Where you train, and what's there",
|
||
"equipmentEmptyTitle": "No places yet",
|
||
"equipmentEmptyHint": "Add the places you train at, such as your home and your gym, with what each has. Start from what a home or a gym usually has, or from nothing.",
|
||
"equipmentAddPlace": "Add a place",
|
||
"equipmentItems": "{count, plural, =0{Nothing yet} =1{1 piece of equipment} other{{count} pieces of equipment}}",
|
||
"@equipmentItems": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"equipmentChosen": "Where you train now",
|
||
"@equipmentChosen": {
|
||
"description": "Marks the place chosen, which the plate calculator and plans use (ADR 0034, D4)."
|
||
},
|
||
"equipmentChoose": "Train here",
|
||
"equipmentLocked": "Can't be opened on this device",
|
||
"placeNewTitle": "New place",
|
||
"placeName": "Name",
|
||
"placeStartFrom": "Start from",
|
||
"placeStartHome": "A home",
|
||
"placeStartGym": "A gym",
|
||
"placeStartNothing": "Nothing",
|
||
"placeDefaultHome": "Home",
|
||
"placeDefaultGym": "Gym",
|
||
"placeAdd": "Add",
|
||
"placeRename": "Rename",
|
||
"placeSave": "Save",
|
||
"placeDelete": "Delete place",
|
||
"placeDeleteMessage": "The place and its equipment are deleted on all your devices.",
|
||
"placeAddEquipment": "Add equipment",
|
||
"placeEmptyHint": "Nothing here yet. Add the equipment this place has.",
|
||
"equipmentKind": "{kind, select, barbell{Barbell} ezBar{EZ bar} trapBar{Trap bar} dumbbellHandle{Dumbbell handles} plates{Weight plates} fixedDumbbells{Dumbbells} kettlebells{Kettlebells} bench{Bench} rack{Rack} pullUpBar{Pull-up bar} dipBars{Dip bars} cableMachine{Cable machine} bands{Resistance bands} other{Your own}}",
|
||
"@equipmentKind": {
|
||
"placeholders": {
|
||
"kind": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"itemName": "What it is",
|
||
"itemHowMany": "How many",
|
||
"itemOwnWeight": "Its own weight",
|
||
"itemWeights": "Weights",
|
||
"itemAddWeight": "Add a weight",
|
||
"itemDone": "Done",
|
||
"itemRemove": "Remove",
|
||
"itemWeightInvalid": "A weight in kilograms, above 0",
|
||
"weightKg": "{weight} kg",
|
||
"@weightKg": {
|
||
"placeholders": {
|
||
"weight": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weightCount": "{count} × {weight} kg",
|
||
"@weightCount": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
},
|
||
"weight": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"plateCalculatorTitle": "Plate calculator",
|
||
"plateCalculatorHint": "What to load, and what changes between sets",
|
||
"platePlace": "Place",
|
||
"plateBar": "Bar",
|
||
"plateDumbbellPair": "Two dumbbell handles",
|
||
"plateTargets": "Weights, kg",
|
||
"plateTargetsHelper": "One for each set, such as 60, 80, 100",
|
||
"plateNoPlace": "Add a place you train at, with its plates, first.",
|
||
"plateNoBar": "This place has nothing that takes plates. Add a barbell or dumbbell handles to it.",
|
||
"plateBelowBar": "Below the bar's {weight} kg",
|
||
"@plateBelowBar": {
|
||
"placeholders": {
|
||
"weight": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"plateShort": "{weight} kg below what you asked for: the plates make no closer weight",
|
||
"@plateShort": {
|
||
"placeholders": {
|
||
"weight": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"plateSide": "Each side, from the inside: {plates}",
|
||
"@plateSide": {
|
||
"placeholders": {
|
||
"plates": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"plateBarAlone": "The bar alone",
|
||
"plateOff": "Take off {plates}",
|
||
"@plateOff": {
|
||
"placeholders": {
|
||
"plates": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"plateOn": "Put on {plates}",
|
||
"@plateOn": {
|
||
"placeholders": {
|
||
"plates": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"plateNoChange": "Nothing changes",
|
||
"plateMoves": "{count, plural, =0{No plate moves} =1{1 plate moves on each side} other{{count} plates move on each side}}",
|
||
"@plateMoves": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"plateSet": "Set {number}",
|
||
"@plateSet": {
|
||
"placeholders": {
|
||
"number": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"exerciseName": "{id, select, backSquat{Back squat} frontSquat{Front squat} gobletSquat{Goblet squat} kettlebellGobletSquat{Kettlebell goblet squat} bodyweightSquat{Bodyweight squat} lunge{Lunge} bulgarianSplitSquat{Bulgarian split squat} bodyweightLunge{Bodyweight lunge} deadlift{Deadlift} romanianDeadlift{Romanian deadlift} trapBarDeadlift{Trap bar deadlift} dumbbellRomanianDeadlift{Dumbbell Romanian deadlift} kettlebellSwing{Kettlebell swing} hipThrust{Hip thrust} gluteBridge{Glute bridge} benchPress{Bench press} inclineBenchPress{Incline bench press} dumbbellBenchPress{Dumbbell bench press} pushUp{Push-up} dip{Dip} overheadPress{Overhead press} dumbbellShoulderPress{Dumbbell shoulder press} pikePushUp{Pike push-up} barbellRow{Barbell row} dumbbellRow{One-arm dumbbell row} cableRow{Seated cable row} invertedRow{Inverted row} bandPullApart{Band pull-apart} facePull{Face pull} pullUp{Pull-up} chinUp{Chin-up} latPulldown{Lat pulldown} bandPulldown{Band pulldown} barbellCurl{Barbell curl} ezBarCurl{EZ bar curl} dumbbellCurl{Dumbbell curl} hammerCurl{Hammer curl} tricepsPushdown{Triceps pushdown} skullCrusher{Skull crusher} overheadTricepsExtension{Overhead triceps extension} benchDip{Bench dip} lateralRaise{Lateral raise} cableLateralRaise{Cable lateral raise} calfRaise{Calf raise} plank{Plank} sidePlank{Side plank} hangingLegRaise{Hanging leg raise} crunch{Crunch} farmersCarry{Farmer's carry} other{Exercise}}",
|
||
"@exerciseName": {
|
||
"placeholders": {
|
||
"id": {
|
||
"type": "String"
|
||
}
|
||
},
|
||
"description": "A catalogue exercise's name, by its id (ADR 0035, D1)."
|
||
},
|
||
"exerciseNeed": "{need, select, barbell{a barbell} ezBar{an EZ bar} trapBar{a trap bar} dumbbells{dumbbells} kettlebell{a kettlebell} bench{a bench} rack{a rack} pullUpBar{a pull-up bar} dipBars{dip bars} cableMachine{a cable machine} bands{bands} other{something}}",
|
||
"@exerciseNeed": {
|
||
"placeholders": {
|
||
"need": {
|
||
"type": "String"
|
||
}
|
||
},
|
||
"description": "What an exercise needs, as in \"Missing here: a rack, dip bars\"."
|
||
},
|
||
"exercisePattern": "{pattern, select, squat{Squats} lunge{Lunges} hinge{Hinges} horizontalPush{Pushes} verticalPush{Pushes overhead} horizontalPull{Rows} verticalPull{Pull-ups and pulldowns} curl{Curls} extension{Triceps} raise{Raises} calf{Calves} core{Core} carry{Carries} other{Other}}",
|
||
"@exercisePattern": {
|
||
"placeholders": {
|
||
"pattern": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"exerciseLoad": "{load, select, barbell{Barbell with plates} ezBar{EZ bar with plates} trapBar{Trap bar with plates} dumbbellPair{A dumbbell in each hand} dumbbell{One dumbbell} kettlebell{Kettlebell} cable{Cable stack} band{Band} body{Body weight} other{Other}}",
|
||
"@exerciseLoad": {
|
||
"placeholders": {
|
||
"load": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"activityStrengthCard": "Strength",
|
||
"strengthPlansHeading": "Strength plans",
|
||
"strengthPlansNew": "New strength plan",
|
||
"strengthPlansEmpty": "Strength plans list exercises with their sets, repetitions, weights and rests, alone or as supersets and circuits.",
|
||
"strengthPlanLocked": "Can't be opened on this device",
|
||
"strengthPlanDeleted": "Strength plan deleted",
|
||
"strengthStart": "Start",
|
||
"strengthChoosePlan": "Which plan?",
|
||
"strengthNoPlans": "Make a strength plan first: the list below has New strength plan.",
|
||
"strengthPlanTitle": "Strength plan",
|
||
"strengthPlanName": "Name",
|
||
"strengthPlanSave": "Save",
|
||
"strengthPlanDelete": "Delete",
|
||
"strengthAddExercise": "Add exercise",
|
||
"strengthAddToBlock": "Add an exercise to do in turn",
|
||
"strengthOwnExercise": "Your own exercise",
|
||
"strengthOwnExercises": "Your own",
|
||
"strengthExerciseName": "What it is",
|
||
"strengthExerciseNeeds": "What it needs",
|
||
"strengthExerciseLoad": "What it is done with",
|
||
"strengthExercisePattern": "How it moves",
|
||
"strengthExerciseTimed": "Held for a time",
|
||
"strengthExerciseDone": "Done",
|
||
"strengthAddSet": "Add a set",
|
||
"strengthReps": "Reps",
|
||
"strengthSeconds": "Seconds",
|
||
"strengthKg": "kg",
|
||
"strengthRemoveExercise": "Remove exercise",
|
||
"strengthRemoveSet": "Remove set",
|
||
"strengthMoveUp": "Move up",
|
||
"strengthMoveDown": "Move down",
|
||
"strengthRest": "Rest",
|
||
"strengthRestBetween": "Rest between exercises",
|
||
"strengthDiscardTitle": "Discard changes?",
|
||
"strengthDiscard": "Discard",
|
||
"strengthDiscardMessage": "What you changed in this plan is not kept.",
|
||
"strengthAbandon": "End without saving",
|
||
"strengthAbandonMessage": "The sets done so far are deleted from this device. This can't be undone.",
|
||
"strengthFinish": "Finish and save",
|
||
"strengthAllDone": "Every set is through.",
|
||
"strengthSetDone": "Done",
|
||
"strengthSkip": "Skip set",
|
||
"strengthSwap": "Swap exercise",
|
||
"strengthSwapTitle": "Do instead",
|
||
"strengthNoSwaps": "Nothing else here moves this way.",
|
||
"strengthRestSkip": "Skip rest",
|
||
"strengthResting": "Rest",
|
||
"strengthCarryOn": "A session is under way",
|
||
"strengthCarryOnAction": "Carry on",
|
||
"strengthWeightNotMadeUp": "Nothing here makes this weight up.",
|
||
"strengthFixed": "{weight} kg, nearest at or below",
|
||
"strengthNoPlace": "No place chosen: weights as planned.",
|
||
"strengthTrainsAt": "At {place}",
|
||
"strengthWorkoutVolume": "{weight} kg moved",
|
||
"strengthWorkoutSets": "{count, plural, =1{1 set} other{{count} sets}}",
|
||
"strengthMissing": "Missing here: {needs}",
|
||
"@strengthMissing": {
|
||
"placeholders": {
|
||
"needs": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"strengthPlanSummary": "{exercises, plural, =1{1 exercise} other{{exercises} exercises}} · {sets, plural, =1{1 set} other{{sets} sets}}",
|
||
"@strengthPlanSummary": {
|
||
"placeholders": {
|
||
"exercises": {
|
||
"type": "int"
|
||
},
|
||
"sets": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"strengthBlockKind": "{kind, select, superset{Superset} circuit{Circuit} other{Exercise}}",
|
||
"@strengthBlockKind": {
|
||
"placeholders": {
|
||
"kind": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"strengthSetOf": "Set {set} of {sets}",
|
||
"@strengthSetOf": {
|
||
"placeholders": {
|
||
"set": {
|
||
"type": "int"
|
||
},
|
||
"sets": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"strengthRoundOf": "Round {round} of {rounds}",
|
||
"@strengthRoundOf": {
|
||
"placeholders": {
|
||
"round": {
|
||
"type": "int"
|
||
},
|
||
"rounds": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"strengthTarget": "{reps} × {weight} kg",
|
||
"@strengthTarget": {
|
||
"placeholders": {
|
||
"reps": {
|
||
"type": "int"
|
||
},
|
||
"weight": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"strengthTargetReps": "{reps, plural, =1{1 rep} other{{reps} reps}}",
|
||
"@strengthTargetReps": {
|
||
"placeholders": {
|
||
"reps": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"strengthTargetSeconds": "{seconds} s",
|
||
"@strengthTargetSeconds": {
|
||
"placeholders": {
|
||
"seconds": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"strengthNextUp": "Next: {exercise}",
|
||
"@strengthNextUp": {
|
||
"placeholders": {
|
||
"exercise": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"strengthBarAndPlates": "{bar} kg bar, each side: {plates}",
|
||
"@strengthBarAndPlates": {
|
||
"placeholders": {
|
||
"bar": {
|
||
"type": "String"
|
||
},
|
||
"plates": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"strengthHandlesAndPlates": "{bar} kg handles, each side: {plates}",
|
||
"@strengthHandlesAndPlates": {
|
||
"placeholders": {
|
||
"bar": {
|
||
"type": "String"
|
||
},
|
||
"plates": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"strengthWeightShort": "{weight} kg below what was planned",
|
||
"@strengthWeightShort": {
|
||
"placeholders": {
|
||
"weight": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherHeading": "Weather",
|
||
"weatherConditions": "{conditions, select, clear{Clear} partlyCloudy{Partly cloudy} cloudy{Overcast} fog{Fog} drizzle{Drizzle} rain{Rain} freezingRain{Freezing rain} snow{Snow} rainShowers{Showers} snowShowers{Snow showers} thunderstorm{Thunderstorm} other{Weather}}",
|
||
"@weatherConditions": {
|
||
"placeholders": {
|
||
"conditions": {
|
||
"type": "String"
|
||
}
|
||
},
|
||
"description": "What the sky did over a workout, from Open-Meteo's weather code."
|
||
},
|
||
"weatherTemperature": "{temperature} °C",
|
||
"@weatherTemperature": {
|
||
"placeholders": {
|
||
"temperature": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherTemperatureRange": "{low}–{high} °C",
|
||
"@weatherTemperatureRange": {
|
||
"placeholders": {
|
||
"low": {
|
||
"type": "String"
|
||
},
|
||
"high": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherFeelsLike": "Felt like {temperature} °C",
|
||
"@weatherFeelsLike": {
|
||
"placeholders": {
|
||
"temperature": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherWind": "Wind {speed} km/h from the {direction}",
|
||
"@weatherWind": {
|
||
"placeholders": {
|
||
"speed": {
|
||
"type": "String"
|
||
},
|
||
"direction": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherWindNoDirection": "Wind {speed} km/h",
|
||
"@weatherWindNoDirection": {
|
||
"placeholders": {
|
||
"speed": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherCalm": "Hardly any wind",
|
||
"weatherGusts": "gusts up to {speed} km/h",
|
||
"@weatherGusts": {
|
||
"placeholders": {
|
||
"speed": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherDirection": "{direction, select, n{north} ne{north-east} e{east} se{south-east} s{south} sw{south-west} w{west} nw{north-west} other{wind}}",
|
||
"@weatherDirection": {
|
||
"placeholders": {
|
||
"direction": {
|
||
"type": "String"
|
||
}
|
||
},
|
||
"description": "Where the wind came from, as in \"from the south-west\"."
|
||
},
|
||
"weatherPrecipitation": "{amount} mm fell",
|
||
"@weatherPrecipitation": {
|
||
"placeholders": {
|
||
"amount": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"weatherDry": "Nothing fell",
|
||
"weatherBy": "Weather data by Open-Meteo.com",
|
||
"movementTitle": "Moving more",
|
||
"movementHint": "Reminders to get up, and workouts suggested as you move",
|
||
"movementRemind": "Remind me to move",
|
||
"movementRemindHint": "When the phone counted hardly a step for a while; never while recording or in a car.",
|
||
"movementIdle": "After",
|
||
"movementIdleMinutes": "{minutes} min still",
|
||
"@movementIdleMinutes": {
|
||
"placeholders": {
|
||
"minutes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"movementHours": "Hours",
|
||
"movementBreak": "Break",
|
||
"movementBreakHint": "No reminders over it.",
|
||
"movementDays": "Days",
|
||
"movementSuggest": "Suggest workouts",
|
||
"movementSuggestHint": "When your steps look like a walk or a run and nothing records: tap to record the rest of it. Your Loop's own detection is on its screen.",
|
||
"movementUnavailable": "This phone doesn't count steps, so it can neither remind nor suggest.",
|
||
"movementRefused": "Train needs the physical activity and notification permissions for this.",
|
||
"movementLate": "The steps are counted every 15 minutes, so a reminder can come a little late.",
|
||
"movementChannel": "Moving more",
|
||
"movementRemindTitle": "Time to move",
|
||
"movementRemindText": "{minutes} minutes with hardly a step. Up for a short walk?",
|
||
"@movementRemindText": {
|
||
"placeholders": {
|
||
"minutes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"movementWalkingTitle": "Out for a walk?",
|
||
"movementRunningTitle": "Out for a run?",
|
||
"movementSuggestText": "Tap to record the rest of it.",
|
||
"loopDetection": "Detect training by itself",
|
||
"loopDetectionHint": "The band notices a session you didn't record, and it comes in as a workout.",
|
||
"loopDetectionMinimum": "Keeps sessions from",
|
||
"loopDetectionMinutes": "{minutes} min",
|
||
"@loopDetectionMinutes": {
|
||
"placeholders": {
|
||
"minutes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
}
|
||
}
|