Merge branch 'dev' into alternate_weather_api

This commit is contained in:
Sam
2022-12-28 10:25:13 +01:00
252 changed files with 13980 additions and 4458 deletions

View File

@ -1,6 +1,6 @@
{
"name": "fittrackee_client",
"version": "0.7.3",
"version": "0.7.10",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
@ -11,22 +11,26 @@
"i18n:report": "vue-cli-service i18n:report --src \"./src/**/*.?(js|vue)\" --locales \"./src/locales/**/*.json\""
},
"dependencies": {
"@tmcw/togeojson": "^5.4.0",
"@vue-leaflet/vue-leaflet": "^0.6.1",
"@tmcw/togeojson": "^5.5.0",
"@vue-leaflet/vue-leaflet": "^0.7.0",
"@zxcvbn-ts/core": "^2.0.5",
"@zxcvbn-ts/language-common": "^2.0.1",
"@zxcvbn-ts/language-de": "^2.1.0",
"@zxcvbn-ts/language-en": "^2.1.0",
"@zxcvbn-ts/language-fr": "^2.2.0",
"axios": "^0.26.1",
"chart.js": "^3.9.1",
"chartjs-plugin-datalabels": "^2.1.0",
"core-js": "^3.26.0",
"@zxcvbn-ts/language-it": "^2.1.0",
"axios": "^1.2.1",
"chart.js": "^4.1.1",
"chartjs-plugin-datalabels": "^2.2.0",
"core-js": "^3.26.1",
"date-fns": "^2.29.3",
"date-fns-tz": "^1.3.7",
"leaflet": "^1.9.2",
"leaflet": "^1.9.3",
"linkify-html": "^4.0.2",
"linkifyjs": "^4.0.2",
"register-service-worker": "^1.7.1",
"vue": "^3.2.41",
"sanitize-html": "^2.8.0",
"vue": "^3.2.45",
"vue-chart-3": "3.1.1",
"vue-fullscreen": "^3.1.1",
"vue-i18n": "^9.2.2",
@ -35,10 +39,11 @@
},
"devDependencies": {
"@intlify/vue-i18n-loader": "^4.2.0",
"@types/chai": "^4.3.3",
"@types/mocha": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^5.42.0",
"@typescript-eslint/parser": "^5.42.0",
"@types/chai": "^4.3.4",
"@types/mocha": "^10.0.1",
"@types/sanitize-html": "^2.8.0",
"@typescript-eslint/eslint-plugin": "^5.47.0",
"@typescript-eslint/parser": "^5.47.0",
"@vue/cli-plugin-babel": "~5.0.8",
"@vue/cli-plugin-eslint": "~5.0.8",
"@vue/cli-plugin-pwa": "~5.0.8",
@ -48,18 +53,18 @@
"@vue/cli-plugin-vuex": "~5.0.8",
"@vue/cli-service": "~5.0.8",
"@vue/eslint-config-typescript": "^11.0.2",
"@vue/test-utils": "^2.2.1",
"chai": "^4.3.6",
"eslint": "8.26.0",
"@vue/test-utils": "^2.2.6",
"chai": "^4.3.7",
"eslint": "8.30.0",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.7.0",
"prettier": "^2.7.1",
"sass": "^1.55.0",
"sass-loader": "^13.1.0",
"typescript": "^4.8.4",
"eslint-plugin-vue": "^9.8.0",
"prettier": "^2.8.1",
"sass": "^1.57.1",
"sass-loader": "^13.2.0",
"typescript": "^4.9.4",
"vue-cli-plugin-i18n": "~2.3.1"
},
"eslintConfig": {

View File

@ -54,7 +54,7 @@
.dropdown-list {
list-style-type: none;
background-color: #ffffff;
padding: 0;
padding: 0 !important;
margin-top: 5px;
margin-left: -20px !important;
position: absolute;
@ -64,16 +64,12 @@
width: auto !important;
li {
padding-top: 5px;
padding-right: 5px;
}
li:last-child {
padding-bottom: 5px;
padding: 3px 8px;
}
}
.dropdown-item {
cursor: default;
cursor: pointer;
&.selected {
font-weight: bold;
@ -82,5 +78,9 @@
&.selected::after {
content: ' ✔';
}
&:hover {
background-color: var(--dropdown-hover-color);
}
}
</style>

View File

@ -0,0 +1,57 @@
<template>
<svg
version="1.1"
id="Capa_1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px"
y="0px"
viewBox="0 0 495.017 495.017"
style="enable-background: new 0 0 495.017 495.017"
xml:space="preserve"
>
<desc id="mountaineeringDescription">
silhouette of a person doing mountaineering
</desc>
<g>
<path
d="M271.32,78.354c21.633,0,39.192-17.54,39.192-39.182C310.513,17.541,292.953,0,271.32,0
c-21.633,0-39.175,17.541-39.175,39.173C232.146,60.814,249.688,78.354,271.32,78.354z"
/>
<path
d="M312.763,349.373l-47.021-43.163l2.087-15.884l-70.055-4.301c-4.173,6.412-9.963,14.482-17.193,23.104l-19.17,72.416
l-54.928,73.797c-8.185,11.007-5.92,26.567,5.095,34.76c4.449,3.314,9.658,4.916,14.817,4.916c7.583,0,15.058-3.461,19.941-10.011
l57.794-77.641c1.893-2.539,3.284-5.417,4.092-8.475l16.625-62.781l45.518,41.786l-6.211,90.579
c-0.938,13.691,9.381,25.548,23.083,26.485c0.565,0.041,1.146,0.057,1.73,0.057c12.938,0,23.859-10.035,24.748-23.146
l7.036-102.498C321.269,361.843,318.325,354.477,312.763,349.373z"
/>
<path
d="M398.667,183.428h-70.005l-39.482-56.053l0.13-0.956c1.405-10.708-1.506-21.537-8.091-30.101
c-6.581-8.564-16.288-14.16-26.994-15.567c-11.858-1.545-23.1,2.271-31.54,9.429V43.548c0-8.022-6.503-14.532-14.542-14.532
h-40.277c-8.038,0-14.542,6.51-14.542,14.532v22.637h-12.033c-8.586,0-16.628,4.255-21.463,11.363
c-4.836,7.108-5.838,16.149-2.684,24.149l36.18,91.856v22.718c0,11.152,4.58,21.125,11.876,28.427
c5.046-6.082,12.743-9.713,20.526-9.195l88.571,5.443l6.938-52.94l19.767,28.047c3.881,5.507,10.19,8.783,16.921,8.783h80.744
c11.437,0,20.701-9.268,20.701-20.702C419.367,192.696,410.104,183.428,398.667,183.428z"
/>
<path
d="M191.093,273.166l82.25,5.055c7.117,0.55,12.748-4.789,13.166-11.64c0.422-6.849-4.786-12.737-11.643-13.157l-89.903-5.523
c-5.015-0.348-9.573,2.352-11.805,6.737c-2.039,3.97-50.771,96.822-143.537,83.768c-6.662-0.906-13.068,3.777-14.023,10.569
c-0.954,6.794,3.768,13.078,10.563,14.032c7.198,1.011,14.169,1.488,20.895,1.488C128.224,364.487,177.119,295.915,191.093,273.166
z"
/>
<path
d="M476.659,251.313c-14.223-9.793-36.401-18.891-66.555-18.488c-35.468,0.473-68.598,27.748-69.198,28.412
c-6.13,6.835-5.562,17.348,1.278,23.478c6.824,6.139,17.339,5.564,23.469-1.268l0.114-0.13c0,0,19.495-20.418,36.814-24.925
l-5.822,215.844c0,0.307,0,0.678,0,0.994c0.289,10.198,8.765,18.236,18.955,17.963c10.206-0.276,18.245-8.759,17.985-18.957
l-5.951-221.215c27.271,0.444,43.739,8.938,43.739,8.938c2.65,1.035,5.741,0.022,7.242-2.501
C480.414,256.635,479.359,253.172,476.659,251.313z"
/>
</g>
</svg>
</template>
<script>
export default {
name: 'Mountaineering',
}
</script>

View File

@ -12,6 +12,7 @@
<MountainBikingElectric
v-if="sportLabel === 'Mountain Biking (Electric)'"
/>
<Mountaineering v-if="sportLabel === 'Mountaineering'" />
<Rowing v-if="sportLabel === 'Rowing'" />
<Running v-if="sportLabel === 'Running'" />
<SkiingAlpine v-if="sportLabel === 'Skiing (Alpine)'" />
@ -31,6 +32,7 @@
import Hiking from '@/components/Common/Images/SportImage/Hiking.vue'
import MountainBiking from '@/components/Common/Images/SportImage/MountainBiking.vue'
import MountainBikingElectric from '@/components/Common/Images/SportImage/MountainBikingElectric.vue'
import Mountaineering from '@/components/Common/Images/SportImage/Mountaineering.vue'
import Rowing from '@/components/Common/Images/SportImage/Rowing.vue'
import Running from '@/components/Common/Images/SportImage/Running.vue'
import SkiingAlpine from '@/components/Common/Images/SportImage/SkiingAlpine.vue'

View File

@ -5,8 +5,8 @@
</template>
<script lang="ts">
import { ChartData, ChartOptions, LayoutItem } from 'chart.js'
import { ComputedRef, PropType, computed, defineComponent } from 'vue'
import { ChartOptions, LayoutItem } from 'chart.js'
import { PropType, computed, defineComponent } from 'vue'
import { BarChart, useBarChart } from 'vue-chart-3'
import { useI18n } from 'vue-i18n'
@ -60,7 +60,7 @@
? 'm'
: 'km'
}
const chartData: ComputedRef<ChartData<'bar'>> = computed(() => ({
const chartData = computed(() => ({
labels: props.labels,
// workaround to avoid dataset modification
datasets: JSON.parse(JSON.stringify(props.datasets)),

View File

@ -197,14 +197,9 @@
.nav-item {
padding: 0 10px;
&.dropdown-wrapper {
width: 60px;
}
::v-deep(.dropdown-list) {
margin-left: -10px;
padding-left: 10px;
width: 75px;
margin-left: -95px !important;
width: 115px !important;
}
}
@ -294,6 +289,11 @@
.nav-item {
padding: 7px 25px;
::v-deep(.dropdown-list) {
margin-left: initial !important;
width: auto !important;
}
}
.nav-profile-img {

View File

@ -242,5 +242,10 @@
}
}
}
#language,
#date_format {
padding: $default-padding * 0.5;
}
}
</style>

View File

@ -114,7 +114,7 @@
/>
</div>
</div>
<div class="data altitude" v-if="workout && workout.with_gpx">
<div class="data altitude" v-if="hasElevation(workout)">
<i class="fa fa-location-arrow" aria-hidden="true" />
<div class="data-values">
+<Distance
@ -167,6 +167,10 @@
const locale: ComputedRef<Locale> = computed(
() => store.getters[ROOT_STORE.GETTERS.LOCALE]
)
function hasElevation(workout: IWorkout): boolean {
return workout && workout.ascent !== null && workout.descent !== null
}
</script>
<style lang="scss" scoped>

View File

@ -108,7 +108,7 @@
},
},
scales: {
[displayDistance.value ? 'xDistance' : 'xDuration']: {
x: {
grid: {
drawOnChartArea: false,
},

View File

@ -3,7 +3,13 @@
<Card>
<template #title>{{ $t('workouts.NOTES') }}</template>
<template #content>
{{ notes && notes !== '' ? notes : $t('workouts.NO_NOTES') }}
<span
v-html="
notes && notes !== ''
? linkifyAndClean(notes)
: $t('workouts.NO_NOTES')
"
/>
</template>
</Card>
</div>
@ -12,6 +18,8 @@
<script setup lang="ts">
import { toRefs, withDefaults } from 'vue'
import { linkifyAndClean } from '@/utils/inputs'
interface Props {
notes?: string | null
}

View File

@ -37,7 +37,7 @@
</div>
</div>
<div class="form-item">
<label> {{ $t('workouts.SPORT', 1) }}: </label>
<label> {{ $t('workouts.SPORT', 1) }}*: </label>
<select
id="sport"
required
@ -57,7 +57,7 @@
<div class="form-item" v-if="isCreation && withGpx">
<label for="gpxFile">
{{ $t('workouts.GPX_FILE') }}
{{ $t('workouts.ZIP_ARCHIVE_DESCRIPTION') }}:
{{ $t('workouts.ZIP_ARCHIVE_DESCRIPTION') }}*:
</label>
<input
id="gpxFile"
@ -105,7 +105,7 @@
<div v-if="!withGpx">
<div class="workout-date-duration">
<div class="form-item">
<label>{{ $t('workouts.WORKOUT_DATE') }}:</label>
<label>{{ $t('workouts.WORKOUT_DATE') }}*:</label>
<div class="workout-date-time">
<input
id="workout-date"
@ -129,12 +129,13 @@
</div>
</div>
<div class="form-item">
<label>{{ $t('workouts.DURATION') }}:</label>
<label>{{ $t('workouts.DURATION') }}*:</label>
<div>
<input
id="workout-duration-hour"
name="workout-duration-hour"
class="workout-duration"
:class="{ errored: isDurationInvalid() }"
type="text"
placeholder="HH"
minlength="1"
@ -150,6 +151,7 @@
id="workout-duration-minutes"
name="workout-duration-minutes"
class="workout-duration"
:class="{ errored: isDurationInvalid() }"
type="text"
pattern="^([0-5][0-9])$"
minlength="2"
@ -165,6 +167,7 @@
id="workout-duration-seconds"
name="workout-duration-seconds"
class="workout-duration"
:class="{ errored: isDurationInvalid() }"
type="text"
pattern="^([0-5][0-9])$"
minlength="2"
@ -178,22 +181,59 @@
</div>
</div>
</div>
<div class="form-item">
<label>
{{ $t('workouts.DISTANCE') }} ({{
authUser.imperial_units ? 'mi' : 'km'
}}):
</label>
<input
name="workout-distance"
type="number"
min="0"
step="0.001"
required
@invalid="invalidateForm"
:disabled="loading"
v-model="workoutForm.workoutDistance"
/>
<div class="workout-data">
<div class="form-item">
<label>
{{ $t('workouts.DISTANCE') }} ({{
authUser.imperial_units ? 'mi' : 'km'
}})*:
</label>
<input
:class="{ errored: isDistanceInvalid() }"
name="workout-distance"
type="number"
min="0"
step="0.001"
required
@invalid="invalidateForm"
:disabled="loading"
v-model="workoutForm.workoutDistance"
/>
</div>
<div class="form-item">
<label>
{{ $t('workouts.ASCENT') }} ({{
authUser.imperial_units ? 'ft' : 'm'
}}):
</label>
<input
:class="{ errored: isElevationInvalid() }"
name="workout-ascent"
type="number"
min="0"
step="0.01"
@invalid="invalidateForm"
:disabled="loading"
v-model="workoutForm.workoutAscent"
/>
</div>
<div class="form-item">
<label>
{{ $t('workouts.DESCENT') }} ({{
authUser.imperial_units ? 'ft' : 'm'
}}):
</label>
<input
:class="{ errored: isElevationInvalid() }"
name="workout-descent"
type="number"
min="0"
step="0.01"
@invalid="invalidateForm"
:disabled="loading"
v-model="workoutForm.workoutDescent"
/>
</div>
</div>
</div>
<div class="form-item">
@ -228,6 +268,7 @@
<script setup lang="ts">
import {
ComputedRef,
Ref,
computed,
reactive,
ref,
@ -300,12 +341,15 @@
workoutDurationMinutes: '',
workoutDurationSeconds: '',
workoutDistance: '',
workoutAscent: '',
workoutDescent: '',
})
const withGpx = ref(
props.workout.id ? props.workout.with_gpx : props.isCreation
)
let gpxFile: File | null = null
const formErrors = ref(false)
const payloadErrorMessages: Ref<string[]> = ref([])
onMounted(() => {
if (props.workout.id) {
@ -337,26 +381,78 @@
const duration = workout.duration.split(':')
workoutForm.workoutDistance = `${
authUser.value.imperial_units
? convertDistance(workout.distance, 'km', 'mi', 2)
: parseFloat(workout.distance.toFixed(2))
? convertDistance(workout.distance, 'km', 'mi', 3)
: parseFloat(workout.distance.toFixed(3))
}`
workoutForm.workoutDate = workoutDateTime.workout_date
workoutForm.workoutTime = workoutDateTime.workout_time
workoutForm.workoutDurationHour = duration[0]
workoutForm.workoutDurationMinutes = duration[1]
workoutForm.workoutDurationSeconds = duration[2]
workoutForm.workoutAscent =
workout.ascent === null
? ''
: `${
authUser.value.imperial_units
? convertDistance(workout.ascent, 'm', 'ft', 2)
: parseFloat(workout.ascent.toFixed(2))
}`
workoutForm.workoutDescent =
workout.descent === null
? ''
: `${
authUser.value.imperial_units
? convertDistance(workout.descent, 'm', 'ft', 2)
: parseFloat(workout.descent.toFixed(2))
}`
}
}
function isDistanceInvalid() {
return payloadErrorMessages.value.includes('workouts.INVALID_DISTANCE')
}
function isDurationInvalid() {
return payloadErrorMessages.value.includes('workouts.INVALID_DURATION')
}
function isElevationInvalid() {
return payloadErrorMessages.value.includes(
'workouts.INVALID_ASCENT_OR_DESCENT'
)
}
function formatPayload(payload: IWorkoutForm) {
payloadErrorMessages.value = []
payload.title = workoutForm.title
payload.distance = authUser.value.imperial_units
? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)
: +workoutForm.workoutDistance
payload.duration =
+workoutForm.workoutDurationHour * 3600 +
+workoutForm.workoutDurationMinutes * 60 +
+workoutForm.workoutDurationSeconds
if (payload.duration <= 0) {
payloadErrorMessages.value.push('workouts.INVALID_DURATION')
}
payload.distance = authUser.value.imperial_units
? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)
: +workoutForm.workoutDistance
if (payload.distance <= 0) {
payloadErrorMessages.value.push('workouts.INVALID_DISTANCE')
}
payload.workout_date = `${workoutForm.workoutDate} ${workoutForm.workoutTime}`
payload.ascent =
workoutForm.workoutAscent === ''
? null
: authUser.value.imperial_units
? convertDistance(+workoutForm.workoutAscent, 'ft', 'm', 3)
: +workoutForm.workoutAscent
payload.descent =
workoutForm.workoutDescent === ''
? null
: authUser.value.imperial_units
? convertDistance(+workoutForm.workoutDescent, 'ft', 'm', 3)
: +workoutForm.workoutDescent
if (
(payload.ascent !== null && payload.descent === null) ||
(payload.ascent === null && payload.descent !== null)
) {
payloadErrorMessages.value.push('workouts.INVALID_ASCENT_OR_DESCENT')
}
}
function updateWorkout() {
const payload: IWorkoutForm = {
@ -369,10 +465,17 @@
} else {
formatPayload(payload)
}
store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {
workoutId: props.workout.id,
data: payload,
})
if (payloadErrorMessages.value.length > 0) {
store.commit(
ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,
payloadErrorMessages.value
)
} else {
store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {
workoutId: props.workout.id,
data: payload,
})
}
} else {
if (withGpx.value) {
if (!gpxFile) {
@ -384,7 +487,17 @@
store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)
} else {
formatPayload(payload)
store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX, payload)
if (payloadErrorMessages.value.length > 0) {
store.commit(
ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,
payloadErrorMessages.value
)
} else {
store.dispatch(
WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,
payload
)
}
}
}
}
@ -507,6 +620,22 @@
}
}
}
.workout-data {
display: flex;
flex-direction: row;
justify-content: space-between;
.form-item {
width: 30%;
}
@media screen and (max-width: $medium-limit) {
flex-direction: column;
.form-item {
width: initial;
}
}
}
}
}
}
@ -521,5 +650,9 @@
margin-top: 0;
}
}
.errored {
outline: 2px solid var(--input-error-color);
}
}
</style>

View File

@ -134,7 +134,7 @@
{{ $t('workouts.ASCENT') }}
</span>
<Distance
v-if="workout.with_gpx"
v-if="workout.ascent !== null"
:distance="workout.ascent"
unitFrom="m"
:useImperialUnits="user.imperial_units"
@ -145,7 +145,7 @@
{{ $t('workouts.DESCENT') }}
</span>
<Distance
v-if="workout.with_gpx"
v-if="workout.descent !== null"
:distance="workout.descent"
unitFrom="m"
:useImperialUnits="user.imperial_units"

View File

@ -6,7 +6,7 @@ import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'
* The loaded `JSON` locale messages is pre-compiled by `@intlify/vue-i18n-loader`, which is integrated into `vue-cli-plugin-i18n`.
* See: https://github.com/intlify/vue-i18n-loader#rocket-i18n-resource-pre-compilation
*/
const disabledLanguages = ['nb'] // to remove after norwegian translations release
const disabledLanguages = ['nb'] // to update after translations release
function loadLocaleMessages(): Record<string, LocaleMessages<VueMessageType>> {
const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.ts$/i)

View File

@ -2,5 +2,5 @@
"CONTACT_ADMIN": "Kontaktiere den Administrator",
"FITTRACKEE_DESCRIPTION": "<strong>FitTrackee</strong> ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker.",
"FITTRACKEE_LICENSE": "unter {0} Lizenz ",
"SOURCE_CODE": "Quellkode"
"SOURCE_CODE": "Quellcode"
}

View File

@ -1,59 +1,59 @@
{
"ACTION": "Aktion",
"ACTIVATE_USER_ACCOUNT": "Aktiviere Konto",
"ACTIVE": "Aktiv",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.",
"ADMIN": "Admin",
"ADMINISTRATION": "Administration",
"APPLICATION": "Anwendung",
"APP_CONFIG": {
"ADMIN_CONTACT": "Kontakt-E-Mail des Administrators",
"MAX_USERS_LABEL": "Max. Anzahl aktiver Nutzer",
"MAX_USERS_HELP": "Wenn 0, gibt es keine Registrierungslimitierung..",
"MAX_FILES_IN_ZIP_LABEL": "Max. Dateianzahl im zip Archiv",
"NO_CONTACT_EMAIL": "keine Kontakt-E-Mail",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Max. Größe der hochgeladenen Dateien (in Mb)",
"TITLE": "Anwendungskonfiguration",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Max. Größe des zip Archives (in Mb)"
},
"BACK_TO_ADMIN": "Zurück zu Admin",
"CONFIRM_USER_ACCOUNT_DELETION": "Möchtest du wirklich das {0} Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.",
"CONFIRM_USER_PASSWORD_RESET": "Möchtest du wirklich das {0} Passwort zurücksetzen?",
"CURRENT_EMAIL": "Aktuelle E-Mail",
"DELETE_USER": "Lösche Nutzer",
"EMAIL_SENDING_DISABLED": "E-Mail-Versand ist deaktiviert.",
"ENABLE_DISABLE_SPORTS": "Aktivieren/Deaktivieren von Sportarten.",
"NEW_EMAIL": "Neue E-Mail",
"PASSWORD_RESET_SUCCESSFUL": "Das wasswort wurde zurückgesetzt.",
"REGISTRATION_DISABLED": "Registrierung ist derzeit deaktiviert.",
"REGISTRATION_ENABLED": "Registrierung ist derzeit aktiviert.",
"RESET_USER_PASSWORD": "Passwort zurücksetzen",
"SPORTS": {
"TABLE": {
"ACTIVE": "Aktiv",
"HAS_WORKOUTS": "Trainings existieren",
"IMAGE": "Bild",
"LABEL": "Titel"
"ACTION": "Aktion",
"ACTIVATE_USER_ACCOUNT": "Aktiviere Konto",
"ACTIVE": "Aktiv",
"ADMIN": "Admin",
"ADMINISTRATION": "Administration",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.",
"APPLICATION": "Anwendung",
"APP_CONFIG": {
"ADMIN_CONTACT": "Kontakt-E-Mail des Administrators",
"MAX_FILES_IN_ZIP_LABEL": "Max. Dateianzahl im zip Archiv",
"MAX_USERS_HELP": "Wenn 0, gibt es keine Registrierungslimitierung..",
"MAX_USERS_LABEL": "Max. Anzahl aktiver Nutzer",
"NO_CONTACT_EMAIL": "keine Kontakt-E-Mail",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Max. Größe der hochgeladenen Dateien (in Mb)",
"TITLE": "Anwendungskonfiguration",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Max. Größe des zip Archives (in Mb)"
},
"TITLE": "Sportarten Administration"
},
"UPDATE_APPLICATION_DESCRIPTION": "Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).",
"UPDATE_USER_EMAIL": "Aktualisiere E-Mail",
"USER": "Nutzer",
"USER_EMAIL_UPDATE_SUCCESSFUL": "Die E-Mail Adresse wurde aktualisiert.",
"USERS": {
"TABLE": {
"ADD_ADMIN_RIGHTS": "Administratorrechte hinzufügen",
"REMOVE_ADMIN_RIGHTS": "Administratorrechte entfernen"
"BACK_TO_ADMIN": "Zurück zu Admin",
"CONFIRM_USER_ACCOUNT_DELETION": "Möchtest du wirklich das {0} Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.",
"CONFIRM_USER_PASSWORD_RESET": "Möchtest du wirklich das {0} Passwort zurücksetzen?",
"CURRENT_EMAIL": "Aktuelle E-Mail",
"DELETE_USER": "Lösche Nutzer",
"EMAIL_SENDING_DISABLED": "E-Mail-Versand ist deaktiviert.",
"ENABLE_DISABLE_SPORTS": "Aktivieren/Deaktivieren von Sportarten.",
"NEW_EMAIL": "Neue E-Mail",
"PASSWORD_RESET_SUCCESSFUL": "Das wasswort wurde zurückgesetzt.",
"REGISTRATION_DISABLED": "Registrierung ist derzeit deaktiviert.",
"REGISTRATION_ENABLED": "Registrierung ist derzeit aktiviert.",
"RESET_USER_PASSWORD": "Passwort zurücksetzen",
"SPORTS": {
"TABLE": {
"ACTIVE": "Aktiv",
"HAS_WORKOUTS": "Trainings existieren",
"IMAGE": "Bild",
"LABEL": "Titel"
},
"TITLE": "Sportarten Administration"
},
"SELECTS": {
"ORDER_BY": {
"ADMIN": "Adminstatus",
"CREATED_AT": "Registrierungsdatum",
"IS_ACTIVE": "Accountstatus",
"USERNAME": "Nutzername",
"WORKOUTS_COUNT": "Trainingsanzahl"
}
}
}
"UPDATE_APPLICATION_DESCRIPTION": "Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).",
"UPDATE_USER_EMAIL": "Aktualisiere E-Mail",
"USER": "Nutzer",
"USERS": {
"SELECTS": {
"ORDER_BY": {
"ADMIN": "Adminstatus",
"CREATED_AT": "Registrierungsdatum",
"IS_ACTIVE": "Accountstatus",
"USERNAME": "Nutzername",
"WORKOUTS_COUNT": "Trainingsanzahl"
}
},
"TABLE": {
"ADD_ADMIN_RIGHTS": "Administratorrechte hinzufügen",
"REMOVE_ADMIN_RIGHTS": "Administratorrechte entfernen"
}
},
"USER_EMAIL_UPDATE_SUCCESSFUL": "Die E-Mail Adresse wurde aktualisiert."
}

View File

@ -1,9 +1,11 @@
{
"ERROR": {
"Network Error": "Netzwerkfehler.",
"UNKNOWN": "Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.",
"at least one file in zip archive exceeds size limit, please check the archive": "Mindestens eine Datei im ZIP-Archiv überschreitet das Größenlimit, bitte überprüfe das Archiv.",
"email: valid email must be provided": "E-Mail: Eine gültige E-Mail muss angegeben werden.",
"error during gpx processing": "Fehler bei der GPX-Verarbeitung.",
"error during gpx file parsing": "Fehler beim Einlesen der GPX-Datei",
"error during gpx processing": "Fehler bei der GPX-Verarbeitung.",
"error on getting configuration": "Fehler beim Abrufen der Konfiguration.",
"error when updating configuration": "Fehler beim Aktualisieren der Konfiguration",
"error, please try again or contact the administrator": "Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.",
@ -14,16 +16,16 @@
"invalid payload": "Die bereitgestellten Daten sind ungültig.",
"invalid token, please log in again": "Ungültiges Token, bitte erneut anmelden.",
"invalid token, please request a new token": "Ungültiges Token, bitte erneut anmelden.",
"Network Error": "Netzwerkfehler.",
"new email must be different than curent email": "Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden",
"no file part": "Keine Datei angegeben.",
"no selected file": "Keine Datei ausgewählt.",
"password: password and password confirmation do not match": "Passwort: Passwort und Passwortbestätigung stimmen nicht überein.",
"provide a valid auth token": "Gebe ein gültiges Authentifizierungstoken an.",
"signature expired, please log in again": "Die Signatur ist abgelaufen. Bitte melde dich erneut an.",
"sorry, that username is already taken": "Es tut mir leid, der Benutzername ist schon vergeben.",
"sport does not exist": "Sportart existiert nicht.",
"signature expired, please log in again": "Die Signatur ist abgelaufen. Bitte melde dich erneut an.",
"successfully registered": "Registrierung erfolgreich.",
"the number of files in the archive exceeds the limit": "Die Anzahl der Dateien im Archiv überschreitet die Begrenzung.",
"user does not exist": "Der Nutzer existiert nicht.",
"valid email must be provided for admin contact": "Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden",
"you can not delete your account, no other user has admin rights": "Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt.",

View File

@ -9,14 +9,14 @@
"HIDDEN": "Versteckt",
"HOME": "Startseite",
"SELECTS": {
"ORDER": {
"ASC": "aufsteigend",
"DESC": "absteigend",
"LABEL": "sortieren"
},
"ORDER_BY": {
"LABEL": "sortiert nach"
},
"ORDER": {
"LABEL": "sortieren",
"ASC": "aufsteigend",
"DESC": "absteigend"
},
"PER_PAGE": {
"LABEL": "pro Seite"
}

View File

@ -1,4 +1,4 @@
{
"DASHBOARD": "Dashboard",
"THIS_MONTH": "Dieser Monat"
"DASHBOARD": "Dashboard",
"THIS_MONTH": "Dieser Monat"
}

View File

@ -1,9 +1,9 @@
{
"UNKNOWN": "Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.",
"APP_ERROR": "Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.<br />Bitte versuche es später noch einmal oder kontaktiere den Administrator.",
"NOT_FOUND": {
"PAGE": "Seite nicht gefunden",
"WORKOUT": "Training nicht gefunden"
},
"SOMETHING_WRONG": "Etwas lief schief"
"APP_ERROR": "Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.<br />Bitte versuche es später noch einmal oder kontaktiere den Administrator.",
"NOT_FOUND": {
"PAGE": "Seite nicht gefunden",
"WORKOUT": "Training nicht gefunden"
},
"SOMETHING_WRONG": "Etwas lief schief",
"UNKNOWN": "Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."
}

View File

@ -9,20 +9,20 @@
"REDIRECT_URL": "Weiterleitungs-URL",
"SCOPE": {
"LABEL": "Geltungsbereich",
"profile:write_DESCRIPTION": "erlaubt Schreibzugriff auf <code>auth</code>-Endpunkte",
"application:write_DESCRIPTION": "erlaubt Schreibzugriff auf die Anwendungskonfiguration",
"profile:read_DESCRIPTION": "erlaubt Lesezugriff auf <code>auth</code>-Endpunkte",
"profile:write_DESCRIPTION": "erlaubt Schreibzugriff auf <code>auth</code>-Endpunkte",
"users:read_DESCRIPTION": "erlaubt Lesezugriff auf <code>users</code>-Endpunkte",
"users:write_DESCRIPTION": "erlaubt Schreibzugriff auf <code>users</code>-Endpunkte",
"workouts:read_DESCRIPTION": "erlaubt Lesezugriff auf <code>workouts</code>-Endpunkte",
"workouts:write_DESCRIPTION": "erlaubt Schreibzugriff auf <code>workouts</code>-Endpunkte",
"application:write_DESCRIPTION": "erlaubt Schreibzugriff auf die Anwendungskonfiguration"
"workouts:write_DESCRIPTION": "erlaubt Schreibzugriff auf <code>workouts</code>-Endpunkte"
},
"URL": "Anwendungs-URL"
},
"APPS_LIST": "OAuth2-Anwendungen",
"APP_CREATED_SUCCESSFULLY": "Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen.",
"APP_DELETION_CONFIRMATION": "Bist sicher, dass du diese App löschen willst?",
"APP_REQUESTING_ACCESS": "Die Anwendung {0} fragt an:",
"APPS_LIST": "OAuth2-Anwendungen",
"AUTHORIZE_APP": "{0} den Zugriff auf deinen Account erlauben?",
"COPY_TO_CLIPBOARD": "in Zwischenablage kopieren",
"DELETE_APP": "Anwendung löschen",

View File

@ -17,6 +17,9 @@
"Mountain Biking (Electric)": {
"LABEL": "Mountainbiken (elektrisch)"
},
"Mountaineering": {
"LABEL": "Bergsteigen"
},
"Rowing": {
"LABEL": "Rudern"
},

View File

@ -1,8 +1,8 @@
{
"STATISTICS": "Statistik",
"TIME_FRAMES": {
"week": "Woche",
"month": "Monat",
"year": "Jahr"
}
"STATISTICS": "Statistik",
"TIME_FRAMES": {
"month": "Monat",
"week": "Woche",
"year": "Jahr"
}
}

View File

@ -12,38 +12,38 @@
"HIDE_PASSWORD": "Passwort verbergen",
"INVALID_TOKEN": "Ungültiges Token, bitte fordere ein neues Passworts an.",
"LANGUAGE": "Sprache",
"LOG_IN": "Anmelden",
"LOGIN": "Anmeldung",
"LOGOUT": "Abmelden",
"LOG_IN": "Anmelden",
"NEW_PASSWORD": "Neues Passwort",
"NO_USERS_FOUND": "Keine Nutzer gefunden.",
"PASSWORD": "Passwort",
"PASSWORD_INFO": "Mindestens 8 Zeichen sind erforderlich.",
"PASSWORD_FORGOTTEN": "Passwort vergessen?",
"PASSWORD_INFO": "Mindestens 8 Zeichen sind erforderlich.",
"PASSWORD_RESET": "Passwort zurücksetzen",
"PASSWORD_SENT_EMAIL_TEXT": "Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen.",
"PASSWORD_STRENGTH": {
"WEAK": "schwach",
"AVERAGE": "mittel",
"GOOD": "gut",
"STRONG": "start",
"LABEL": "Passwortstärke",
"STRONG": "start",
"SUGGESTIONS": {
"l33t": "Vermeide vorhersehbare Buchstabenersetzungen wie {'@'} für a.",
"reverseWords": "Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.",
"allUppercase": "Schreibe einige, aber nicht alle Buchstaben groß.",
"anotherWord": "Füge weitere weniger gebräuchliche Wörter hinzu.",
"associatedYears": "Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.",
"capitalization": "Schreibe mehr als nur den ersten Buchstaben groß.",
"dates": "Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden.",
"recentYears": "Vermeide Angabe von letzten Jahreszahlen.",
"associatedYears": "Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.",
"sequences": "Vermeide gebräuchliche Zeichenfolgen.",
"repeated": "Vermeide wiederholungen von Wörtern und Zeichen.",
"l33t": "Vermeide vorhersehbare Buchstabenersetzungen wie {'@'} für a.",
"longerKeyboardPattern": "Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung.",
"anotherWord": "Füge weitere weniger gebräuchliche Wörter hinzu.",
"useWords": "Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke.",
"noNeed": "Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.",
"pwned": "Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern."
}
"pwned": "Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern.",
"recentYears": "Vermeide Angabe von letzten Jahreszahlen.",
"repeated": "Vermeide wiederholungen von Wörtern und Zeichen.",
"reverseWords": "Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.",
"sequences": "Vermeide gebräuchliche Zeichenfolgen.",
"useWords": "Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke."
},
"WEAK": "schwach"
},
"PASSWORD_UPDATED": "Dein Passwort wurde aktualisiert. Klicke {0} um dich anzumelden.",
"PROFILE": {
@ -57,20 +57,32 @@
"EDIT_PREFERENCES": "Einstellungen ändern",
"EDIT_SPORTS_PREFERENCES": "Einstellungen für Sportarten ändern",
"ERRORED_EMAIL_UPDATE": "Bitte {0} um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator",
"FIRST_NAME": "Vorname",
"FIRST_DAY_OF_WEEK": "Erster Tag der Woche",
"FIRST_NAME": "Vorname",
"LANGUAGE": "Sprache",
"LAST_NAME": "Nachname",
"LOCATION": "Ort",
"MONDAY": "Montag",
"PICTURE": "Bild",
"PICTURE_EDITION": "Bildausgabe",
"PICTURE_UPDATE": "Bild aktualisieren",
"PICTURE_REMOVE": "Bild entfernen",
"PICTURE_UPDATE": "Bild aktualisieren",
"PREFERENCES_EDITION": "Einstellungsausgabe",
"PROFILE_EDITION": "Profil-Ausgabe",
"REGISTRATION_DATE": "Regirierungsdatum",
"REGISTRATION_DATE": "Registrierungsdatum",
"SPORT": {
"ACTION": "Aktion",
"COLOR": "Farbe",
"DISABLED_BY_ADMIN": "vom Admin deaktiviert",
"IS_ACTIVE": "aktiv",
"LABEL": "Titel",
"STOPPED_SPEED_THRESHOLD": "Geschwindigkeitsschwellenwert für Stopp"
},
"SPORTS_EDITION": "Sportarten-Einstellungsausgabe",
"SUCCESSFUL_EMAIL_UPDATE": "Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.",
"SUCCESSFUL_REGISTRATION": "Dein Konto wurde erfolgreich erstellt.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.",
"SUCCESSFUL_UPDATE": "Dein Konto wurde erfolgreich aktualisiert.",
"SUNDAY": "Sontag",
"TABS": {
"ACCOUNT": "Konto",
@ -80,32 +92,20 @@
"PROFILE": "Profil",
"SPORTS": "Sportarten"
},
"SPORT": {
"ACTION": "Aktion",
"COLOR": "Farbe",
"DISABLED_BY_ADMIN": "vom Admin deaktiviert",
"IS_ACTIVE": "aktiv",
"LABEL": "Titel",
"STOPPED_SPEED_THRESHOLD": "Geschwindigkeitsschwellenwert für Stopp"
},
"SUCCESSFUL_EMAIL_UPDATE": "Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.",
"SUCCESSFUL_REGISTRATION": "Dein Konto wurde erfolgreich erstellt.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.",
"SUCCESSFUL_UPDATE": "Dein Konto wurde erfolgreich aktualisiert.",
"TIMEZONE": "Zeitzone",
"UNITS": {
"LABEL": "Einheiten für die Distanz",
"IMPERIAL": "Imperiales System (ft, mi, mph, °F)",
"LABEL": "Einheiten für die Distanz",
"METRIC": "Metrisches System (m, km, m/s, °C)"
},
"TIMEZONE": "Zeitzone"
}
},
"REGISTER": "Registrieren",
"RESENT_ACCOUNT_CONFIRMATION": "E-Mail zur Kontobestätigung erneut senden",
"REGISTER_DISABLED": "Entschuldigung, die Registrierung ist deaktiviert.",
"RESENT_ACCOUNT_CONFIRMATION": "E-Mail zur Kontobestätigung erneut senden",
"RESET_PASSWORD": "Passwort zurücksetzen",
"SHOW_PASSWORD": "Passwort anzeigen",
"THIS_USER_ACCOUNT_IS_INACTIVE": "Dieser Account ist inaktiv.",
"USER_PICTURE": "Benutzerbild",
"USERNAME": "Nutzername",
"USERNAME_INFO": "3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt."
"USERNAME_INFO": "3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt.",
"USER_PICTURE": "Benutzerbild"
}

View File

@ -2,8 +2,8 @@
"ADD_WORKOUT": "Training hinzufügen",
"ANALYSIS": "Analyse",
"ASCENT": "Aufstieg",
"AVE_SPEED": "Durchschn. Geschwindigkeit",
"AVERAGE_SPEED": "Durchschnittsgeschwindigkeit",
"AVE_SPEED": "Durchschn. Geschwindigkeit",
"BACK_TO_WORKOUT": "zurück zum Training",
"DATE": "Datum",
"DESCENT": "Abstieg",
@ -16,6 +16,8 @@
"FROM": "Von",
"GPX_FILE": ".gpx Datei",
"HIDE_FILTERS": "verberge Filter",
"INVALID_DISTANCE": "Die Distanz muss größer als 0 sein",
"INVALID_DURATION": "Die Dauer muss größer als 0 Sekunden sein",
"LATEST_WORKOUTS": "Letzte Trainings",
"LOAD_MORE_WORKOUT": "Lade mehr Trainings",
"MAX_ALTITUDE": "maximale Höhe",
@ -25,6 +27,7 @@
"MIN_ALTITUDE": "minimale Höhe",
"NEXT_SEGMENT": "Nächstes Segment",
"NEXT_WORKOUT": "Nächstes Training",
"NOTES": "Anmerkungen",
"NO_DATA_CLEANING": "Daten aus gpx, ohne Bereinigung",
"NO_FILE_PROVIDED": "Keine Datei angegeben",
"NO_FOLDER": "enthält keinen Ordner",
@ -36,7 +39,6 @@
"NO_PREVIOUS_WORKOUT": "Kein vorheriges Training",
"NO_RECORDS": "Keine Aufzeichnungen.",
"NO_WORKOUTS": "Keine Trainings.",
"NOTES": "Anmerkungen",
"PAUSES": "Pausen",
"PREVIOUS_SEGMENT": "Vorheriges Segment",
"PREVIOUS_WORKOUT": "Vorheriges Training",
@ -58,27 +60,6 @@
"TOTAL_DURATION": "Gesamtdauer",
"UPLOAD_FIRST_WORKOUT": "Füge erstes Training hinzu!",
"WEATHER": {
"HUMIDITY": "Luftfeuchtigkeit",
"TEMPERATURE": "Temperatur",
"WIND": "Wind",
"WIND_DIRECTIONS": {
"N": "N",
"NNE": "NNO",
"NE": "NO",
"ENE": "ONO",
"E": "O",
"ESE": "OSO",
"SE": "SO",
"SSE": "SSO",
"S": "S",
"SSW": "SSW",
"SW": "SW",
"WSW": "WSW",
"W": "W",
"WNW": "WNW",
"NW": "NW",
"NNW": "NNW"
},
"DARK_SKY": {
"clear-day": "klarer Tag",
"clear-night": "klare Nacht",
@ -90,10 +71,31 @@
"sleet": "Schneeregen",
"snow": "Schnee",
"wind": "Wind"
},
"HUMIDITY": "Luftfeuchtigkeit",
"TEMPERATURE": "Temperatur",
"WIND": "Wind",
"WIND_DIRECTIONS": {
"E": "O",
"ENE": "ONO",
"ESE": "OSO",
"N": "N",
"NE": "NO",
"NNE": "NNO",
"NNW": "NNW",
"NW": "NW",
"S": "S",
"SE": "SO",
"SSE": "SSO",
"SSW": "SSW",
"SW": "SW",
"W": "W",
"WNW": "WNW",
"WSW": "WSW"
}
},
"WITH_GPX": "mit .gpx Datei",
"WITHOUT_GPX": "ohne .gpx Datei",
"WITH_GPX": "mit .gpx Datei",
"WORKOUT": "Training | Trainings",
"WORKOUT_DATE": "Trainingsdatum",
"WORKOUT_DELETION_CONFIRMATION": "Bist du sicher, dass du dieses Training löschen möchtest?",

View File

@ -1,6 +1,6 @@
{
"CONTACT_ADMIN": "Contact the administrator",
"FITTRACKEE_DESCRIPTION": "<strong>FitTrackee</strong> is a self-hosted outdoor activity tracker.",
"FITTRACKEE_LICENSE": "under {0} license ",
"SOURCE_CODE": "Source code"
"CONTACT_ADMIN": "Contact the administrator",
"FITTRACKEE_DESCRIPTION": "<strong>FitTrackee</strong> is a self-hosted outdoor activity tracker.",
"FITTRACKEE_LICENSE": "under {0} license ",
"SOURCE_CODE": "Source code"
}

View File

@ -1,59 +1,59 @@
{
"ACTION": "Action",
"ACTIVATE_USER_ACCOUNT": "Activate account",
"ACTIVE": "Active",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Add/remove admin rights, delete user account.",
"ADMIN": "Admin",
"ADMINISTRATION": "Administration",
"APPLICATION": "Application",
"APP_CONFIG": {
"ADMIN_CONTACT": "Administrator email for contact",
"MAX_USERS_LABEL": "Max. number of active users",
"MAX_USERS_HELP": "If 0, no limitation on registration.",
"MAX_FILES_IN_ZIP_LABEL": "Max. files of zip archive",
"NO_CONTACT_EMAIL": "no contact email",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Max. size of uploaded files (in Mb)",
"TITLE": "Application configuration",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Max. size of zip archive (in Mb)"
},
"BACK_TO_ADMIN": "Back to admin",
"CONFIRM_USER_ACCOUNT_DELETION": "Are you sure you want to delete {0} account? All data will be deleted, this cannot be undone.",
"CONFIRM_USER_PASSWORD_RESET": "Are you sure you want to reset {0} password?",
"CURRENT_EMAIL": "Current email",
"DELETE_USER": "Delete user",
"EMAIL_SENDING_DISABLED": "Email sending is disabled.",
"ENABLE_DISABLE_SPORTS": "Enable/disable sports.",
"NEW_EMAIL": "New email",
"PASSWORD_RESET_SUCCESSFUL": "The password has been reset.",
"REGISTRATION_DISABLED": "Registration is currently disabled.",
"REGISTRATION_ENABLED": "Registration is currently enabled.",
"RESET_USER_PASSWORD": "Reset password",
"SPORTS": {
"TABLE": {
"ACTIVE": "Active",
"HAS_WORKOUTS": "workouts exist",
"IMAGE": "Image",
"LABEL": "Label"
"ACTION": "Action",
"ACTIVATE_USER_ACCOUNT": "Activate account",
"ACTIVE": "Active",
"ADMIN": "Admin",
"ADMINISTRATION": "Administration",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Add/remove admin rights, delete user account.",
"APPLICATION": "Application",
"APP_CONFIG": {
"ADMIN_CONTACT": "Administrator email for contact",
"MAX_FILES_IN_ZIP_LABEL": "Max. files of zip archive",
"MAX_USERS_HELP": "If 0, no limitation on registration.",
"MAX_USERS_LABEL": "Max. number of active users",
"NO_CONTACT_EMAIL": "no contact email",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Max. size of uploaded files (in Mb)",
"TITLE": "Application configuration",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Max. size of zip archive (in Mb)"
},
"TITLE": "Sports administration"
},
"UPDATE_APPLICATION_DESCRIPTION": "Update application configuration (maximum number of registered users, maximum files size).",
"UPDATE_USER_EMAIL": "Update email",
"USER": "user | users",
"USER_EMAIL_UPDATE_SUCCESSFUL": "The email address has been updated.",
"USERS": {
"TABLE": {
"ADD_ADMIN_RIGHTS": "Add admin rights",
"REMOVE_ADMIN_RIGHTS": "Remove admin rights"
"BACK_TO_ADMIN": "Back to admin",
"CONFIRM_USER_ACCOUNT_DELETION": "Are you sure you want to delete {0} account? All data will be deleted, this cannot be undone.",
"CONFIRM_USER_PASSWORD_RESET": "Are you sure you want to reset {0} password?",
"CURRENT_EMAIL": "Current email",
"DELETE_USER": "Delete user",
"EMAIL_SENDING_DISABLED": "Email sending is disabled.",
"ENABLE_DISABLE_SPORTS": "Enable/disable sports.",
"NEW_EMAIL": "New email",
"PASSWORD_RESET_SUCCESSFUL": "The password has been reset.",
"REGISTRATION_DISABLED": "Registration is currently disabled.",
"REGISTRATION_ENABLED": "Registration is currently enabled.",
"RESET_USER_PASSWORD": "Reset password",
"SPORTS": {
"TABLE": {
"ACTIVE": "Active",
"HAS_WORKOUTS": "workouts exist",
"IMAGE": "Image",
"LABEL": "Label"
},
"TITLE": "Sports administration"
},
"SELECTS": {
"ORDER_BY": {
"ADMIN": "admin status",
"CREATED_AT": "registration date",
"IS_ACTIVE": "account status",
"USERNAME": "username",
"WORKOUTS_COUNT": "workout count"
}
}
}
"UPDATE_APPLICATION_DESCRIPTION": "Update application configuration (maximum number of registered users, maximum files size).",
"UPDATE_USER_EMAIL": "Update email",
"USER": "user | users",
"USERS": {
"SELECTS": {
"ORDER_BY": {
"ADMIN": "admin status",
"CREATED_AT": "registration date",
"IS_ACTIVE": "account status",
"USERNAME": "username",
"WORKOUTS_COUNT": "workout count"
}
},
"TABLE": {
"ADD_ADMIN_RIGHTS": "Add admin rights",
"REMOVE_ADMIN_RIGHTS": "Remove admin rights"
}
},
"USER_EMAIL_UPDATE_SUCCESSFUL": "The email address has been updated."
}

View File

@ -1,36 +1,38 @@
{
"ERROR": {
"UNKNOWN": "Error. Please try again or contact the administrator.",
"email: valid email must be provided": "Email: valid email must be provided.",
"error during gpx processing": "Error during gpx processing.",
"error during gpx file parsing": "Error during gpx file parsing.",
"error on getting configuration": "Error on getting configuration.",
"error when updating configuration": "Error when updating configuration",
"error, please try again or contact the administrator": "Error, please try again or contact the administrator.",
"error, registration is disabled": "Error, registration is disabled.",
"file extension not allowed": "File extension not allowed.",
"file size is greater than the allowed size": "File size is greater than the allowed size.",
"invalid credentials": "Invalid credentials.",
"invalid payload": "Provided data are invalid.",
"invalid token, please log in again": "Invalid token, please log in again.",
"invalid token, please request a new token": "Invalid token, please log in again.",
"Network Error": "Network Error.",
"new email must be different than curent email": "The new email must be different than curent email",
"no file part": "No file provided.",
"no selected file": "No selected file.",
"password: password and password confirmation do not match": "Password: password and password confirmation don't match.",
"provide a valid auth token": "Provide a valid auth token.",
"sorry, that username is already taken": "Sorry, that username is already taken.",
"sport does not exist": "Sport does not exist.",
"signature expired, please log in again": "Signature expired. Please log in again.",
"successfully registered": "Successfully registered.",
"user does not exist": "User does not exist.",
"valid email must be provided for admin contact": "A valid email must be provided for administrator contact",
"you can not delete your account, no other user has admin rights": "You can not delete your account, no other user has admin rights.",
"you do not have permissions": "You do not have permissions."
},
"PAGINATION": {
"PREVIOUS": "previous",
"NEXT": "next"
}
"ERROR": {
"Network Error": "Network Error.",
"UNKNOWN": "Error. Please try again or contact the administrator.",
"at least one file in zip archive exceeds size limit, please check the archive": "At least one file in zip archive exceeds size limit, please check the archive.",
"email: valid email must be provided": "Email: valid email must be provided.",
"error during gpx file parsing": "Error during gpx file parsing.",
"error during gpx processing": "Error during gpx processing.",
"error on getting configuration": "Error on getting configuration.",
"error when updating configuration": "Error when updating configuration",
"error, please try again or contact the administrator": "Error, please try again or contact the administrator.",
"error, registration is disabled": "Error, registration is disabled.",
"file extension not allowed": "File extension not allowed.",
"file size is greater than the allowed size": "File size is greater than the allowed size.",
"invalid credentials": "Invalid credentials.",
"invalid payload": "Provided data are invalid.",
"invalid token, please log in again": "Invalid token, please log in again.",
"invalid token, please request a new token": "Invalid token, please log in again.",
"new email must be different than curent email": "The new email must be different than curent email",
"no file part": "No file provided.",
"no selected file": "No selected file.",
"password: password and password confirmation do not match": "Password: password and password confirmation don't match.",
"provide a valid auth token": "Provide a valid auth token.",
"signature expired, please log in again": "Signature expired. Please log in again.",
"sorry, that username is already taken": "Sorry, that username is already taken.",
"sport does not exist": "Sport does not exist.",
"successfully registered": "Successfully registered.",
"the number of files in the archive exceeds the limit": "The number of files in the archive exceeds the limit.",
"user does not exist": "User does not exist.",
"valid email must be provided for admin contact": "A valid email must be provided for administrator contact",
"you can not delete your account, no other user has admin rights": "You can not delete your account, no other user has admin rights.",
"you do not have permissions": "You do not have permissions."
},
"PAGINATION": {
"NEXT": "next",
"PREVIOUS": "previous"
}
}

View File

@ -1,18 +1,18 @@
{
"ACCOUNT-CONFIRMATION-RESEND": "Resend confirmation email",
"AUTHORIZE": "Authorize",
"BACK": "Back",
"CANCEL": "Cancel",
"CLEAR_FILTER": "Clear filters",
"DELETE_MY_ACCOUNT": "Delete my account",
"DISABLE": "Disable",
"EDIT": "Edit",
"ENABLE": "Enable",
"FILTER": "Filter",
"LOGIN": "Log in",
"NO": "No",
"REGISTER": "Register",
"RESET": "Reset",
"SUBMIT": "Submit",
"YES": "Yes"
"ACCOUNT-CONFIRMATION-RESEND": "Resend confirmation email",
"AUTHORIZE": "Authorize",
"BACK": "Back",
"CANCEL": "Cancel",
"CLEAR_FILTER": "Clear filters",
"DELETE_MY_ACCOUNT": "Delete my account",
"DISABLE": "Disable",
"EDIT": "Edit",
"ENABLE": "Enable",
"FILTER": "Filter",
"LOGIN": "Log in",
"NO": "No",
"REGISTER": "Register",
"RESET": "Reset",
"SUBMIT": "Submit",
"YES": "Yes"
}

View File

@ -1,25 +1,25 @@
{
"ABOUT": "about",
"CONFIRMATION": "Confirmation",
"CONTACT": "contact",
"DAY": "day | days",
"DISPLAYED": "Displayed",
"DOCUMENTATION": "documentation",
"HERE": "here",
"HIDDEN": "Hidden",
"HOME": "Home",
"SELECTS": {
"ORDER_BY": {
"LABEL": "order by"
"ABOUT": "about",
"CONFIRMATION": "Confirmation",
"CONTACT": "contact",
"DAY": "day | days",
"DISPLAYED": "Displayed",
"DOCUMENTATION": "documentation",
"HERE": "here",
"HIDDEN": "Hidden",
"HOME": "Home",
"SELECTS": {
"ORDER": {
"ASC": "ascending",
"DESC": "descending",
"LABEL": "sort"
},
"ORDER_BY": {
"LABEL": "order by"
},
"PER_PAGE": {
"LABEL": "par page"
}
},
"ORDER": {
"LABEL": "sort",
"ASC": "ascending",
"DESC": "descending"
},
"PER_PAGE": {
"LABEL": "par page"
}
},
"TOTAL": "Total"
"TOTAL": "Total"
}

View File

@ -1,4 +1,4 @@
{
"DASHBOARD": "Dashboard",
"THIS_MONTH": "This month"
"DASHBOARD": "Dashboard",
"THIS_MONTH": "This month"
}

View File

@ -1,9 +1,9 @@
{
"UNKNOWN": "Error. Please try again or contact the administrator.",
"APP_ERROR": "The application seems to have encountered some issues.<br />Please try again later or contact the administrator.",
"NOT_FOUND": {
"PAGE": "Page not found",
"WORKOUT": "Workout not found"
},
"SOMETHING_WRONG": "Something went wrong"
}
"APP_ERROR": "The application seems to have encountered some issues.<br />Please try again later or contact the administrator.",
"NOT_FOUND": {
"PAGE": "Page not found",
"WORKOUT": "Workout not found"
},
"SOMETHING_WRONG": "Something went wrong",
"UNKNOWN": "Error. Please try again or contact the administrator."
}

View File

@ -1,36 +1,36 @@
{
"ADD_A_NEW_APP": "Add a new OAuth2 application",
"APP": {
"CLIENT_ID": "Id",
"CLIENT_SECRET": "Secret",
"DESCRIPTION": "Application description",
"ISSUE_AT": "Issue at",
"NAME": "Application name",
"REDIRECT_URL": "Redirect URL",
"SCOPE": {
"LABEL": "Scope",
"application:write_DESCRIPTION": "grants write access to application configuration.",
"profile:read_DESCRIPTION": "grants read access to <code>auth</code> endpoints.",
"profile:write_DESCRIPTION": "grants write access to <code>auth</code> endpoints.",
"users:read_DESCRIPTION": "grants read access to <code>users</code> endpoints.",
"users:write_DESCRIPTION": "grants write access to <code>users</code> endpoints.",
"workouts:read_DESCRIPTION": "grants read access to <code>workouts</code> endpoints.",
"workouts:write_DESCRIPTION": "grants write access to <code>workouts</code> endpoints."
"ADD_A_NEW_APP": "Add a new OAuth2 application",
"APP": {
"CLIENT_ID": "Id",
"CLIENT_SECRET": "Secret",
"DESCRIPTION": "Application description",
"ISSUE_AT": "Issue at",
"NAME": "Application name",
"REDIRECT_URL": "Redirect URL",
"SCOPE": {
"LABEL": "Scope",
"application:write_DESCRIPTION": "grants write access to application configuration.",
"profile:read_DESCRIPTION": "grants read access to <code>auth</code> endpoints.",
"profile:write_DESCRIPTION": "grants write access to <code>auth</code> endpoints.",
"users:read_DESCRIPTION": "grants read access to <code>users</code> endpoints.",
"users:write_DESCRIPTION": "grants write access to <code>users</code> endpoints.",
"workouts:read_DESCRIPTION": "grants read access to <code>workouts</code> endpoints.",
"workouts:write_DESCRIPTION": "grants write access to <code>workouts</code> endpoints."
},
"URL": "Application URL"
},
"URL": "Application URL"
},
"APP_CREATED_SUCCESSFULLY": "Application created successfully. Make sure to copy the secret now, it won't show up again.",
"APP_DELETION_CONFIRMATION": "Are you sure you want to delete this app?",
"APP_REQUESTING_ACCESS": "The application {0} is requesting:",
"APPS_LIST": "OAuth2 applications",
"AUTHORIZE_APP": "Authorize {0} to use your account?",
"COPY_TO_CLIPBOARD": "copy to the clipboard",
"DELETE_APP": "Delete application",
"NEW_APP": "Add an application",
"NO_APP": "Application not found!",
"NO_APPS": "no applications",
"NO_DESCRIPTION": "no description",
"REVOKE_ALL_TOKENS": "Revoke all tokens",
"TOKENS_REVOCATION_CONFIRMATION": "Are you sure you want to revoke all tokens?",
"TOKENS_REVOKED": "All existing associated tokens have been revoked."
}
"APPS_LIST": "OAuth2 applications",
"APP_CREATED_SUCCESSFULLY": "Application created successfully. Make sure to copy the secret now, it won't show up again.",
"APP_DELETION_CONFIRMATION": "Are you sure you want to delete this app?",
"APP_REQUESTING_ACCESS": "The application {0} is requesting:",
"AUTHORIZE_APP": "Authorize {0} to use your account?",
"COPY_TO_CLIPBOARD": "copy to the clipboard",
"DELETE_APP": "Delete application",
"NEW_APP": "Add an application",
"NO_APP": "Application not found!",
"NO_APPS": "no applications",
"NO_DESCRIPTION": "no description",
"REVOKE_ALL_TOKENS": "Revoke all tokens",
"TOKENS_REVOCATION_CONFIRMATION": "Are you sure you want to revoke all tokens?",
"TOKENS_REVOKED": "All existing associated tokens have been revoked."
}

View File

@ -1,41 +1,44 @@
{
"Cycling (Sport)": {
"LABEL": "Cycling (Sport)"
},
"Cycling (Transport)": {
"LABEL": "Cycling (Transport)"
},
"Cycling (Virtual)": {
"LABEL": "Cycling (Virtual)"
},
"Hiking": {
"LABEL": "Hiking"
},
"Mountain Biking": {
"LABEL": "Mountain Biking"
},
"Mountain Biking (Electric)": {
"LABEL": "Mountain Biking (Electric)"
},
"Rowing": {
"LABEL": "Rowing"
},
"Running": {
"LABEL": "Running"
},
"Skiing (Alpine)": {
"LABEL": "Skiing (Alpine)"
},
"Skiing (Cross Country)": {
"LABEL": "Skiing (Cross Country)"
},
"Snowshoes": {
"LABEL": "Snowshoes"
},
"Trail": {
"LABEL": "Trail"
},
"Walking": {
"LABEL": "Walking"
}
}
"Cycling (Sport)": {
"LABEL": "Cycling (Sport)"
},
"Cycling (Transport)": {
"LABEL": "Cycling (Transport)"
},
"Cycling (Virtual)": {
"LABEL": "Cycling (Virtual)"
},
"Hiking": {
"LABEL": "Hiking"
},
"Mountain Biking": {
"LABEL": "Mountain Biking"
},
"Mountain Biking (Electric)": {
"LABEL": "Mountain Biking (Electric)"
},
"Mountaineering": {
"LABEL": "Mountaineering"
},
"Rowing": {
"LABEL": "Rowing"
},
"Running": {
"LABEL": "Running"
},
"Skiing (Alpine)": {
"LABEL": "Skiing (Alpine)"
},
"Skiing (Cross Country)": {
"LABEL": "Skiing (Cross Country)"
},
"Snowshoes": {
"LABEL": "Snowshoes"
},
"Trail": {
"LABEL": "Trail"
},
"Walking": {
"LABEL": "Walking"
}
}

View File

@ -1,8 +1,8 @@
{
"STATISTICS": "Statistics",
"TIME_FRAMES": {
"week": "week",
"month": "month",
"year": "year"
}
"STATISTICS": "Statistics",
"TIME_FRAMES": {
"month": "month",
"week": "week",
"year": "year"
}
}

View File

@ -1,111 +1,111 @@
{
"ACCOUNT_CONFIRMATION_NOT_RECEIVED": "Didn't received instructions?",
"ACCOUNT_CONFIRMATION_SENT": "Check your email. A new confirmation email has been sent to the address provided.",
"ADMIN": "Admin",
"ALREADY_HAVE_ACCOUNT": "Already have an account?",
"CONFIRM_ACCOUNT_DELETION": "Are you sure you want to delete your account? All data will be deleted, this cannot be undone",
"CURRENT_PASSWORD": "Current password",
"EMAIL": "Email",
"EMAIL_INFO": "Enter a valid email address.",
"ENTER_PASSWORD": "Enter a password",
"FILTER_ON_USERNAME": "Filter on username",
"HIDE_PASSWORD": "hide password",
"INVALID_TOKEN": "Invalid token, please request a new password reset.",
"LANGUAGE": "Language",
"LOG_IN": "log in",
"LOGIN": "Login",
"LOGOUT": "Logout",
"NEW_PASSWORD": "New password",
"NO_USERS_FOUND": "No users found.",
"PASSWORD": "Password",
"PASSWORD_INFO": "At least 8 characters required.",
"PASSWORD_FORGOTTEN": "Forgot password?",
"PASSWORD_RESET": "Password reset",
"PASSWORD_SENT_EMAIL_TEXT": "Check your email. If your address is in our database, you'll received an email with a link to reset your password.",
"PASSWORD_STRENGTH": {
"WEAK": "weak",
"AVERAGE": "average",
"GOOD": "good",
"STRONG": "strong",
"LABEL": "password strength",
"SUGGESTIONS": {
"l33t": "Avoid predictable letter substitutions like {'@'} for a.",
"reverseWords": "Avoid reversed spellings of common words.",
"allUppercase": "Capitalize some, but not all letters.",
"capitalization": "Capitalize more than the first letter.",
"dates": "Avoid dates and years that are associated with you.",
"recentYears": "Avoid recent years.",
"associatedYears": "Avoid years that are associated with you.",
"sequences": "Avoid common character sequences.",
"repeated": "Avoid repeated words and characters.",
"longerKeyboardPattern": "Use longer keyboard patterns and change typing direction multiple times.",
"anotherWord": "Add more words that are less common.",
"useWords": "Use multiple words, but avoid common phrases.",
"noNeed": "You can create strong passwords without using symbols, numbers, or uppercase letters.",
"pwned": "If you use this password elsewhere, you should change it."
}
},
"PASSWORD_UPDATED": "Your password have been updated. Click {0} to log in.",
"PROFILE": {
"ACCOUNT_EDITION": "Account edition",
"ASCENT_DATA": "Ascent-related data (records, total)",
"BACK_TO_PROFILE": "Back to profile",
"BIO": "Bio",
"BIRTH_DATE": "Birth date",
"DATE_FORMAT": "Date display format",
"EDIT": "Edit profile",
"EDIT_PREFERENCES": "Edit preferences",
"EDIT_SPORTS_PREFERENCES": "Edit sports preferences",
"ERRORED_EMAIL_UPDATE": "Please {0} to change your email address again or contact the administrator",
"FIRST_NAME": "First name",
"FIRST_DAY_OF_WEEK": "First day of week",
"ACCOUNT_CONFIRMATION_NOT_RECEIVED": "Didn't received instructions?",
"ACCOUNT_CONFIRMATION_SENT": "Check your email. A new confirmation email has been sent to the address provided.",
"ADMIN": "Admin",
"ALREADY_HAVE_ACCOUNT": "Already have an account?",
"CONFIRM_ACCOUNT_DELETION": "Are you sure you want to delete your account? All data will be deleted, this cannot be undone",
"CURRENT_PASSWORD": "Current password",
"EMAIL": "Email",
"EMAIL_INFO": "Enter a valid email address.",
"ENTER_PASSWORD": "Enter a password",
"FILTER_ON_USERNAME": "Filter on username",
"HIDE_PASSWORD": "hide password",
"INVALID_TOKEN": "Invalid token, please request a new password reset.",
"LANGUAGE": "Language",
"LAST_NAME": "Last name",
"LOCATION": "Location",
"MONDAY": "Monday",
"PICTURE": "Picture",
"PICTURE_EDITION": "Picture edition",
"PICTURE_UPDATE": "Update picture",
"PICTURE_REMOVE": "Remove picture",
"PREFERENCES_EDITION": "Preferences edition",
"PROFILE_EDITION": "Profile edition",
"REGISTRATION_DATE": "Registration date",
"SPORTS_EDITION": "Sports preferences edition",
"SUNDAY": "Sunday",
"TABS": {
"ACCOUNT": "account",
"APPS": "apps",
"PICTURE": "picture",
"PREFERENCES": "preferences",
"PROFILE": "profile",
"SPORTS": "sports"
"LOGIN": "Login",
"LOGOUT": "Logout",
"LOG_IN": "log in",
"NEW_PASSWORD": "New password",
"NO_USERS_FOUND": "No users found.",
"PASSWORD": "Password",
"PASSWORD_FORGOTTEN": "Forgot password?",
"PASSWORD_INFO": "At least 8 characters required.",
"PASSWORD_RESET": "Password reset",
"PASSWORD_SENT_EMAIL_TEXT": "Check your email. If your address is in our database, you'll received an email with a link to reset your password.",
"PASSWORD_STRENGTH": {
"AVERAGE": "average",
"GOOD": "good",
"LABEL": "password strength",
"STRONG": "strong",
"SUGGESTIONS": {
"allUppercase": "Capitalize some, but not all letters.",
"anotherWord": "Add more words that are less common.",
"associatedYears": "Avoid years that are associated with you.",
"capitalization": "Capitalize more than the first letter.",
"dates": "Avoid dates and years that are associated with you.",
"l33t": "Avoid predictable letter substitutions like {'@'} for a.",
"longerKeyboardPattern": "Use longer keyboard patterns and change typing direction multiple times.",
"noNeed": "You can create strong passwords without using symbols, numbers, or uppercase letters.",
"pwned": "If you use this password elsewhere, you should change it.",
"recentYears": "Avoid recent years.",
"repeated": "Avoid repeated words and characters.",
"reverseWords": "Avoid reversed spellings of common words.",
"sequences": "Avoid common character sequences.",
"useWords": "Use multiple words, but avoid common phrases."
},
"WEAK": "weak"
},
"SPORT": {
"ACTION": "action",
"COLOR": "color",
"DISABLED_BY_ADMIN": "disabled by admin",
"IS_ACTIVE": "active",
"LABEL": "label",
"STOPPED_SPEED_THRESHOLD": "stopped speed threshold"
"PASSWORD_UPDATED": "Your password have been updated. Click {0} to log in.",
"PROFILE": {
"ACCOUNT_EDITION": "Account edition",
"ASCENT_DATA": "Ascent-related data (records, total)",
"BACK_TO_PROFILE": "Back to profile",
"BIO": "Bio",
"BIRTH_DATE": "Birth date",
"DATE_FORMAT": "Date display format",
"EDIT": "Edit profile",
"EDIT_PREFERENCES": "Edit preferences",
"EDIT_SPORTS_PREFERENCES": "Edit sports preferences",
"ERRORED_EMAIL_UPDATE": "Please {0} to change your email address again or contact the administrator",
"FIRST_DAY_OF_WEEK": "First day of week",
"FIRST_NAME": "First name",
"LANGUAGE": "Language",
"LAST_NAME": "Last name",
"LOCATION": "Location",
"MONDAY": "Monday",
"PICTURE": "Picture",
"PICTURE_EDITION": "Picture edition",
"PICTURE_REMOVE": "Remove picture",
"PICTURE_UPDATE": "Update picture",
"PREFERENCES_EDITION": "Preferences edition",
"PROFILE_EDITION": "Profile edition",
"REGISTRATION_DATE": "Registration date",
"SPORT": {
"ACTION": "action",
"COLOR": "color",
"DISABLED_BY_ADMIN": "disabled by admin",
"IS_ACTIVE": "active",
"LABEL": "label",
"STOPPED_SPEED_THRESHOLD": "stopped speed threshold"
},
"SPORTS_EDITION": "Sports preferences edition",
"SUCCESSFUL_EMAIL_UPDATE": "Your account has been updated successfully. Please check your email to confirm your new email address.",
"SUCCESSFUL_REGISTRATION": "Your account has been created successfully.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "A link to activate your account has been emailed to the address provided.",
"SUCCESSFUL_UPDATE": "Your account has been updated successfully.",
"SUNDAY": "Sunday",
"TABS": {
"ACCOUNT": "account",
"APPS": "apps",
"PICTURE": "picture",
"PREFERENCES": "preferences",
"PROFILE": "profile",
"SPORTS": "sports"
},
"TIMEZONE": "Timezone",
"UNITS": {
"IMPERIAL": "Imperial system (ft, mi, mph, °F)",
"LABEL": "Units for distance",
"METRIC": "Metric system (m, km, m/s, °C)"
}
},
"SUCCESSFUL_EMAIL_UPDATE": "Your account has been updated successfully. Please check your email to confirm your new email address.",
"SUCCESSFUL_REGISTRATION": "Your account has been created successfully.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "A link to activate your account has been emailed to the address provided.",
"SUCCESSFUL_UPDATE": "Your account has been updated successfully.",
"UNITS": {
"LABEL": "Units for distance",
"IMPERIAL": "Imperial system (ft, mi, mph, °F)",
"METRIC": "Metric system (m, km, m/s, °C)"
},
"TIMEZONE": "Timezone"
},
"REGISTER": "Register",
"RESENT_ACCOUNT_CONFIRMATION": "Resend account confirmation email",
"REGISTER_DISABLED": "Sorry, registration is disabled.",
"RESET_PASSWORD": "Reset your password",
"SHOW_PASSWORD": "show password",
"THIS_USER_ACCOUNT_IS_INACTIVE": "This user account is inactive.",
"USER_PICTURE": "user picture",
"USERNAME": "Username",
"USERNAME_INFO": "3 to 30 characters required, only alphanumeric characters and the underscore character \"_\" allowed."
"REGISTER": "Register",
"REGISTER_DISABLED": "Sorry, registration is disabled.",
"RESENT_ACCOUNT_CONFIRMATION": "Resend account confirmation email",
"RESET_PASSWORD": "Reset your password",
"SHOW_PASSWORD": "show password",
"THIS_USER_ACCOUNT_IS_INACTIVE": "This user account is inactive.",
"USERNAME": "Username",
"USERNAME_INFO": "3 to 30 characters required, only alphanumeric characters and the underscore character \"_\" allowed.",
"USER_PICTURE": "user picture"
}

View File

@ -1,102 +1,105 @@
{
"ADD_WORKOUT": "Add a workout",
"ANALYSIS": "analysis",
"ASCENT": "ascent",
"AVE_SPEED": "ave. speed",
"AVERAGE_SPEED": "average speed",
"BACK_TO_WORKOUT": "back to workout",
"DATE": "date",
"DESCENT": "descent",
"DISPLAY_FILTERS": "display filters",
"DISTANCE": "distance",
"DURATION": "duration",
"EDIT_WORKOUT": "Edit the workout",
"ELEVATION": "elevation",
"END": "end",
"FROM": "from",
"GPX_FILE": ".gpx file",
"HIDE_FILTERS": "hide filters",
"LATEST_WORKOUTS": "Latest workouts",
"LOAD_MORE_WORKOUT": "Load more workouts",
"MAX_ALTITUDE": "max. altitude",
"MAX_FILES": "max files",
"MAX_SIZE": "max size",
"MAX_SPEED": "max. speed",
"MIN_ALTITUDE": "min. altitude",
"NEXT_SEGMENT": "No next segment",
"NEXT_WORKOUT": "Next workout",
"NO_DATA_CLEANING": "data from gpx, without any cleaning",
"NO_FILE_PROVIDED": "No file provided",
"NO_FOLDER": "no folder inside",
"NO_MAP": "No map",
"NO_NEXT_SEGMENT": "No next segment",
"NO_NEXT_WORKOUT": "No next workout",
"NO_NOTES": "No notes",
"NO_PREVIOUS_SEGMENT": "No previous segment",
"NO_PREVIOUS_WORKOUT": "No previous workout",
"NO_RECORDS": "No records.",
"NO_WORKOUTS": "No workouts.",
"NOTES": "notes",
"PAUSES": "pauses",
"PREVIOUS_SEGMENT": "Previous segment",
"PREVIOUS_WORKOUT": "Previous workout",
"RECORD": "record | records",
"RECORD_AS": "Ave. speed",
"RECORD_FD": "Farthest distance",
"RECORD_HA": "Highest ascent",
"RECORD_LD": "Longest duration",
"RECORD_MS": "Max. speed",
"REMAINING_CHARS": "remaining characters",
"SEGMENT": "segment | segments",
"SPEED": "speed",
"SPORT": "sport | sports",
"START": "start",
"START_AND_FINISH": "Start and finish",
"START_ELEVATION_AT_ZERO": "start elevation axis at zero",
"TITLE": "title",
"TO": "to",
"TOTAL_DURATION": "total duration",
"UPLOAD_FIRST_WORKOUT": "Upload one!",
"WEATHER": {
"HUMIDITY": "humidity",
"TEMPERATURE": "temperature",
"WIND": "wind",
"WIND_DIRECTIONS": {
"N": "N",
"NNE": "NNE",
"NE": "NE",
"ENE": "ENE",
"E": "E",
"ESE": "ESE",
"SE": "SE",
"SSE": "SSE",
"S": "S",
"SSW": "SSW",
"SW": "SW",
"WSW": "WSW",
"W": "W",
"WNW": "WNW",
"NW": "NW",
"NNW": "NNW"
"ADD_WORKOUT": "Add a workout",
"ANALYSIS": "analysis",
"ASCENT": "ascent",
"AVERAGE_SPEED": "average speed",
"AVE_SPEED": "ave. speed",
"BACK_TO_WORKOUT": "back to workout",
"DATE": "date",
"DESCENT": "descent",
"DISPLAY_FILTERS": "display filters",
"DISTANCE": "distance",
"DURATION": "duration",
"EDIT_WORKOUT": "Edit the workout",
"ELEVATION": "elevation",
"END": "end",
"FROM": "from",
"GPX_FILE": ".gpx file",
"HIDE_FILTERS": "hide filters",
"INVALID_ASCENT_OR_DESCENT": "Both elevation values must be provided and be greater than or equal to 0.",
"INVALID_DISTANCE": "The distance must be greater than 0",
"INVALID_DURATION": "The duration must be greater than 0 seconds",
"LATEST_WORKOUTS": "Latest workouts",
"LOAD_MORE_WORKOUT": "Load more workouts",
"MAX_ALTITUDE": "max. altitude",
"MAX_FILES": "max files",
"MAX_SIZE": "max size",
"MAX_SPEED": "max. speed",
"MIN_ALTITUDE": "min. altitude",
"NEXT_SEGMENT": "No next segment",
"NEXT_WORKOUT": "Next workout",
"NOTES": "notes",
"NO_DATA_CLEANING": "data from gpx, without any cleaning",
"NO_FILE_PROVIDED": "No file provided",
"NO_FOLDER": "no folder inside",
"NO_MAP": "No map",
"NO_NEXT_SEGMENT": "No next segment",
"NO_NEXT_WORKOUT": "No next workout",
"NO_NOTES": "No notes",
"NO_PREVIOUS_SEGMENT": "No previous segment",
"NO_PREVIOUS_WORKOUT": "No previous workout",
"NO_RECORDS": "No records.",
"NO_WORKOUTS": "No workouts.",
"PAUSES": "pauses",
"PREVIOUS_SEGMENT": "Previous segment",
"PREVIOUS_WORKOUT": "Previous workout",
"RECORD": "record | records",
"RECORD_AS": "Ave. speed",
"RECORD_FD": "Farthest distance",
"RECORD_HA": "Highest ascent",
"RECORD_LD": "Longest duration",
"RECORD_MS": "Max. speed",
"REMAINING_CHARS": "remaining characters",
"SEGMENT": "segment | segments",
"SPEED": "speed",
"SPORT": "sport | sports",
"START": "start",
"START_AND_FINISH": "Start and finish",
"START_ELEVATION_AT_ZERO": "start elevation axis at zero",
"TITLE": "title",
"TO": "to",
"TOTAL_DURATION": "total duration",
"UPLOAD_FIRST_WORKOUT": "Upload one!",
"WEATHER": {
"DARK_SKY": {
"clear-day": "clear day",
"clear-night": "clear night",
"cloudy": "cloudy",
"fog": "fog",
"partly-cloudy-day": "partly cloudy day",
"partly-cloudy-night": "partly cloudy night",
"rain": "rain",
"sleet": "sleet",
"snow": "snow",
"wind": "wind"
},
"HUMIDITY": "humidity",
"TEMPERATURE": "temperature",
"WIND": "wind",
"WIND_DIRECTIONS": {
"E": "E",
"ENE": "ENE",
"ESE": "ESE",
"N": "N",
"NE": "NE",
"NNE": "NNE",
"NNW": "NNW",
"NW": "NW",
"S": "S",
"SE": "SE",
"SSE": "SSE",
"SSW": "SSW",
"SW": "SW",
"W": "W",
"WNW": "WNW",
"WSW": "WSW"
}
},
"DARK_SKY": {
"clear-day": "clear day",
"clear-night": "clear night",
"cloudy": "cloudy",
"fog": "fog",
"partly-cloudy-day": "partly cloudy day",
"partly-cloudy-night": "partly cloudy night",
"rain": "rain",
"sleet": "sleet",
"snow": "snow",
"wind": "wind"
}
},
"WITH_GPX": "with .gpx file",
"WITHOUT_GPX": "without .gpx file",
"WORKOUT": "workout | workouts",
"WORKOUT_DATE": "workout date",
"WORKOUT_DELETION_CONFIRMATION": "Are you sure you want to delete this workout?",
"ZIP_ARCHIVE": ".zip file",
"ZIP_ARCHIVE_DESCRIPTION": "or .zip file containing .gpx files"
"WITHOUT_GPX": "without .gpx file",
"WITH_GPX": "with .gpx file",
"WORKOUT": "workout | workouts",
"WORKOUT_DATE": "workout date",
"WORKOUT_DELETION_CONFIRMATION": "Are you sure you want to delete this workout?",
"ZIP_ARCHIVE": ".zip file",
"ZIP_ARCHIVE_DESCRIPTION": "or .zip file containing .gpx files"
}

View File

@ -1,59 +1,59 @@
{
"ACTION": "Action",
"ACTIVATE_USER_ACCOUNT": "Activer le compte",
"ACTIVE": "Actif",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.",
"ADMIN": "Admin",
"ADMINISTRATION": "Administration",
"APPLICATION": "Application",
"APP_CONFIG": {
"ADMIN_CONTACT": "Email de l'administrateur pour contact ",
"MAX_USERS_LABEL": "Nombre maximum d'utilisateurs actifs ",
"MAX_USERS_HELP": "Si égal à 0, pas limite d'inscription",
"MAX_FILES_IN_ZIP_LABEL": "Taille max. des archives zip (en Mo) ",
"NO_CONTACT_EMAIL": "non renseigné",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Taille max. des fichiers (en Mo) ",
"TITLE": "Configuration de l'application",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Nombre max. de fichiers dans une archive zip "
},
"BACK_TO_ADMIN": "Revenir à l'admin",
"CONFIRM_USER_ACCOUNT_DELETION": "Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur {0} ? Toutes les données seront définitivement.",
"CONFIRM_USER_PASSWORD_RESET": "Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur {0} ?",
"CURRENT_EMAIL": "Adresse email actuelle",
"DELETE_USER": "Supprimer l'utilisateur",
"EMAIL_SENDING_DISABLED": "L'envoi d'emails est désactivé.",
"ENABLE_DISABLE_SPORTS": "Activer/désactiver des sports.",
"NEW_EMAIL": "Nouvelle adresse email",
"PASSWORD_RESET_SUCCESSFUL": "Le mot de passe a été réinitialisé.",
"REGISTRATION_DISABLED": "Les inscriptions sont actuellement désactivées.",
"REGISTRATION_ENABLED": "Les inscriptions sont actuellement activées.",
"RESET_USER_PASSWORD": "Réinit. le mot de passe",
"SPORTS": {
"TABLE": {
"ACTIVE": "Actif",
"HAS_WORKOUTS": "des séances existent",
"IMAGE": "Image",
"LABEL": "Label"
"ACTION": "Action",
"ACTIVATE_USER_ACCOUNT": "Activer le compte",
"ACTIVE": "Actif",
"ADMIN": "Admin",
"ADMINISTRATION": "Administration",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.",
"APPLICATION": "Application",
"APP_CONFIG": {
"ADMIN_CONTACT": "Email de l'administrateur pour contact ",
"MAX_FILES_IN_ZIP_LABEL": "Nombre max. de fichiers dans une archive zip ",
"MAX_USERS_HELP": "Si égal à 0, pas limite d'inscription",
"MAX_USERS_LABEL": "Nombre maximum d'utilisateurs actifs ",
"NO_CONTACT_EMAIL": "non renseigné",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Taille max. des fichiers (en Mo) ",
"TITLE": "Configuration de l'application",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Taille max. des archives zip (en Mo) "
},
"TITLE": "Administration - Sports"
},
"UPDATE_APPLICATION_DESCRIPTION": "Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).",
"UPDATE_USER_EMAIL": "Changer l'email",
"USER": "utilisateur | utilisateurs",
"USER_EMAIL_UPDATE_SUCCESSFUL": "L'adresse email a été mise à jour.",
"USERS": {
"TABLE": {
"ADD_ADMIN_RIGHTS": "Ajouter les droits d'admin",
"REMOVE_ADMIN_RIGHTS": "Retirer les droits d'admin"
"BACK_TO_ADMIN": "Revenir à l'admin",
"CONFIRM_USER_ACCOUNT_DELETION": "Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur {0} ? Toutes les données seront définitivement.",
"CONFIRM_USER_PASSWORD_RESET": "Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur {0} ?",
"CURRENT_EMAIL": "Adresse email actuelle",
"DELETE_USER": "Supprimer l'utilisateur",
"EMAIL_SENDING_DISABLED": "L'envoi d'emails est désactivé.",
"ENABLE_DISABLE_SPORTS": "Activer/désactiver des sports.",
"NEW_EMAIL": "Nouvelle adresse email",
"PASSWORD_RESET_SUCCESSFUL": "Le mot de passe a été réinitialisé.",
"REGISTRATION_DISABLED": "Les inscriptions sont actuellement désactivées.",
"REGISTRATION_ENABLED": "Les inscriptions sont actuellement activées.",
"RESET_USER_PASSWORD": "Réinit. le mot de passe",
"SPORTS": {
"TABLE": {
"ACTIVE": "Actif",
"HAS_WORKOUTS": "des séances existent",
"IMAGE": "Image",
"LABEL": "Label"
},
"TITLE": "Administration - Sports"
},
"SELECTS": {
"ORDER_BY": {
"ADMIN": "status administrateur",
"CREATED_AT": "date d'inscription",
"IS_ACTIVE": "statut du compte",
"USERNAME": "nom d'utilisateur",
"WORKOUTS_COUNT": "nombre de séances"
}
}
}
"UPDATE_APPLICATION_DESCRIPTION": "Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).",
"UPDATE_USER_EMAIL": "Changer l'email",
"USER": "utilisateur | utilisateurs",
"USERS": {
"SELECTS": {
"ORDER_BY": {
"ADMIN": "status administrateur",
"CREATED_AT": "date d'inscription",
"IS_ACTIVE": "statut du compte",
"USERNAME": "nom d'utilisateur",
"WORKOUTS_COUNT": "nombre de séances"
}
},
"TABLE": {
"ADD_ADMIN_RIGHTS": "Ajouter les droits d'admin",
"REMOVE_ADMIN_RIGHTS": "Retirer les droits d'admin"
}
},
"USER_EMAIL_UPDATE_SUCCESSFUL": "L'adresse email a été mise à jour."
}

View File

@ -1,9 +1,11 @@
{
"ERROR": {
"Network Error": "Erreur réseau.",
"UNKNOWN": "Erreur. Veuillez réessayer ou contacter l'administrateur.",
"at least one file in zip archive exceeds size limit, please check the archive": "Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive.",
"email: valid email must be provided": "Courriel : une adresse électronique valide doit être fournie.",
"error during gpx processing": "Erreur lors du traitement du fichier gpx.",
"error during gpx file parsing": "Erreur lors de l'analyse du fichier.",
"error during gpx processing": "Erreur lors du traitement du fichier gpx.",
"error on getting configuration": "Erreur lors de la récupération de la configuration.",
"error when updating configuration": "Erreur lors de la mise à jour de la configuration",
"error, please try again or contact the administrator": "Erreur, veuillez réessayer ou contacter l'administrateur.",
@ -14,23 +16,23 @@
"invalid payload": "Données fournies incorrectes.",
"invalid token, please log in again": "Jeton de connexion invalide, merci de vous reconnecter.",
"invalid token, please request a new token": "Jeton de connexion, merci de vous reconnecter.",
"new email must be different than curent email": "La nouvelle addresse électronique doit être differente de l'adresse actuelle",
"no file part": "Pas de fichier fourni.",
"no selected file": "Pas de fichier sélectionné.",
"Network Error": "Erreur réseau.",
"new email must be different than curent email": "La nouvelle addresse électronique doit être differente de l'adresse actuelle",
"password: password and password confirmation do not match": "Mot de passe : les mots de passe saisis sont différents.",
"provide a valid auth token": "Merci de fournir un jeton de connexion valide.",
"sport does not exist": "Ce sport n'existe pas.",
"signature expired, please log in again": "Signature expirée. Merci de vous reconnecter.",
"sorry, that username is already taken": "Désolé, ce nom d'utilisateur est déjà utilisé.",
"sport does not exist": "Ce sport n'existe pas.",
"successfully registered": "Inscription validée.",
"the number of files in the archive exceeds the limit": "Le nombre de fichiers de l'archive dépasse la limite.",
"user does not exist": "L'utilisateur n'existe pas.",
"valid email must be provided for admin contact": "Une adresse électronique doit être fournie pour le contact de l'administrateur",
"you can not delete your account, no other user has admin rights": "Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.",
"you do not have permissions": "Vous n'avez pas les permissions nécessaires."
},
"PAGINATION": {
"PREVIOUS": "précédent",
"NEXT": "suivant"
"NEXT": "suivant",
"PREVIOUS": "précédent"
}
}

View File

@ -1,25 +1,25 @@
{
"ABOUT": "à propos",
"CONFIRMATION": "Confirmation",
"CONTACT": "contact",
"DAY": "jour | jours",
"DISPLAYED": "Affiché",
"DOCUMENTATION": "documentation (en)",
"HERE": "ici",
"HIDDEN": "Masqué",
"HOME": "Accueil",
"SELECTS": {
"ORDER_BY": {
"LABEL": "trier par "
"ABOUT": "à propos",
"CONFIRMATION": "Confirmation",
"CONTACT": "contact",
"DAY": "jour | jours",
"DISPLAYED": "Affiché",
"DOCUMENTATION": "documentation (en)",
"HERE": "ici",
"HIDDEN": "Masqué",
"HOME": "Accueil",
"SELECTS": {
"ORDER": {
"ASC": "ascendant",
"DESC": "descendant",
"LABEL": "tri"
},
"ORDER_BY": {
"LABEL": "trier par "
},
"PER_PAGE": {
"LABEL": "par page"
}
},
"ORDER": {
"LABEL": "tri",
"ASC": "ascendant",
"DESC": "descendant"
},
"PER_PAGE": {
"LABEL": "par page"
}
},
"TOTAL": "Total"
"TOTAL": "Total"
}

View File

@ -1,9 +1,9 @@
{
"UNKNOWN": "Erreur. Veuillez réessayer ou contacter l'administrateur.",
"APP_ERROR": "L'application semble rencontrer quelques problèmes.<br />Veuillez réessayer plus tard ou contacter l'administrateur.",
"NOT_FOUND": {
"PAGE": "Page introuvable",
"WORKOUT": "Séance introuvable"
},
"SOMETHING_WRONG": "Une erreur s'est produite"
}
"APP_ERROR": "L'application semble rencontrer quelques problèmes.<br />Veuillez réessayer plus tard ou contacter l'administrateur.",
"NOT_FOUND": {
"PAGE": "Page introuvable",
"WORKOUT": "Séance introuvable"
},
"SOMETHING_WRONG": "Une erreur s'est produite",
"UNKNOWN": "Erreur. Veuillez réessayer ou contacter l'administrateur."
}

View File

@ -1,36 +1,36 @@
{
"ADD_A_NEW_APP": "Ajouter une nouvelle application OAuth2",
"APP": {
"CLIENT_ID": "Identifiant",
"CLIENT_SECRET": "Secret",
"DESCRIPTION": "Description de l'application",
"ISSUE_AT": "Créée le",
"NAME": "Nom de l'application",
"REDIRECT_URL": "URL de redirection",
"SCOPE": {
"LABEL": "Scope",
"application:write_DESCRIPTION": "donne les droits en écriture à la configuration de l'application.",
"profile:read_DESCRIPTION": "donne les droits en lecture aux routes <code>auth</code>.",
"profile:write_DESCRIPTION": "donne les droits en écriture aux routes <code>auth</code>.",
"users:read_DESCRIPTION": "donne les droits en lecture aux routes <code>users</code>.",
"users:write_DESCRIPTION": "donne les droits en écriture aux routes <code>users</code>.",
"workouts:read_DESCRIPTION": "donne les droits en lecture aux routes <code>workouts</code>.",
"workouts:write_DESCRIPTION": "donne les droits en écriture aux routes <code>workouts</code>."
"ADD_A_NEW_APP": "Ajouter une nouvelle application OAuth2",
"APP": {
"CLIENT_ID": "Identifiant",
"CLIENT_SECRET": "Secret",
"DESCRIPTION": "Description de l'application",
"ISSUE_AT": "Créée le",
"NAME": "Nom de l'application",
"REDIRECT_URL": "URL de redirection",
"SCOPE": {
"LABEL": "Scope",
"application:write_DESCRIPTION": "donne les droits en écriture à la configuration de l'application.",
"profile:read_DESCRIPTION": "donne les droits en lecture aux routes <code>auth</code>.",
"profile:write_DESCRIPTION": "donne les droits en écriture aux routes <code>auth</code>.",
"users:read_DESCRIPTION": "donne les droits en lecture aux routes <code>users</code>.",
"users:write_DESCRIPTION": "donne les droits en écriture aux routes <code>users</code>.",
"workouts:read_DESCRIPTION": "donne les droits en lecture aux routes <code>workouts</code>.",
"workouts:write_DESCRIPTION": "donne les droits en écriture aux routes <code>workouts</code>."
},
"URL": "URL de l'application"
},
"URL": "URL de l'application"
},
"APP_CREATED_SUCCESSFULLY": "Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.",
"APP_DELETION_CONFIRMATION": "Êtes-vous sûr de vouloir supprimer cette application ?",
"APP_REQUESTING_ACCESS": "L'application {0} demande les accès suivants :",
"APPS_LIST": "Applications OAuth2",
"AUTHORIZE_APP": "Autoriser {0} à utiliser votre compte ?",
"COPY_TO_CLIPBOARD": "copier dans le presse papier",
"DELETE_APP": "Supprimer l'application",
"NEW_APP": "Ajouter une application",
"NO_APP": "Application introuvable !",
"NO_APPS": "pas de applications",
"NO_DESCRIPTION": "pas de description",
"REVOKE_ALL_TOKENS": "Révoquer tous les jetons",
"TOKENS_REVOCATION_CONFIRMATION": "Êtes-vous sûr de vouloir révoquer tous les jetons ?",
"TOKENS_REVOKED": "Tous les jetons associés existants ont été révoqués."
}
"APPS_LIST": "Applications OAuth2",
"APP_CREATED_SUCCESSFULLY": "Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.",
"APP_DELETION_CONFIRMATION": "Êtes-vous sûr de vouloir supprimer cette application ?",
"APP_REQUESTING_ACCESS": "L'application {0} demande les accès suivants :",
"AUTHORIZE_APP": "Autoriser {0} à utiliser votre compte ?",
"COPY_TO_CLIPBOARD": "copier dans le presse papier",
"DELETE_APP": "Supprimer l'application",
"NEW_APP": "Ajouter une application",
"NO_APP": "Application introuvable !",
"NO_APPS": "pas de applications",
"NO_DESCRIPTION": "pas de description",
"REVOKE_ALL_TOKENS": "Révoquer tous les jetons",
"TOKENS_REVOCATION_CONFIRMATION": "Êtes-vous sûr de vouloir révoquer tous les jetons ?",
"TOKENS_REVOKED": "Tous les jetons associés existants ont été révoqués."
}

View File

@ -17,6 +17,9 @@
"Mountain Biking (Electric)": {
"LABEL": "VTT (Électrique)"
},
"Mountaineering": {
"LABEL": "Alpinisme"
},
"Rowing": {
"LABEL": "Aviron"
},

View File

@ -1,8 +1,8 @@
{
"STATISTICS": "Statistiques",
"TIME_FRAMES": {
"week": "semaine",
"month": "mois",
"year": "année"
}
"STATISTICS": "Statistiques",
"TIME_FRAMES": {
"month": "mois",
"week": "semaine",
"year": "année"
}
}

View File

@ -12,38 +12,38 @@
"HIDE_PASSWORD": "masquer le mot de passe",
"INVALID_TOKEN": "Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe.",
"LANGUAGE": "Langue",
"LOG_IN": "connecter",
"LOGIN": "Se connecter",
"LOGOUT": "Se déconnecter",
"LOG_IN": "connecter",
"NEW_PASSWORD": "Nouveau mot de passe",
"NO_USERS_FOUND": "Aucun utilisateur trouvé.",
"PASSWORD": "Mot de passe",
"PASSWORD_INFO": "8 caractères minimum.",
"PASSWORD_FORGOTTEN": "Mot de passe oublié ?",
"PASSWORD_INFO": "8 caractères minimum.",
"PASSWORD_RESET": "Réinitialisation du mot de passe",
"PASSWORD_SENT_EMAIL_TEXT": "Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe.",
"PASSWORD_STRENGTH": {
"WEAK": "faible",
"AVERAGE": "moyenne",
"GOOD": "bonne",
"STRONG": "forte",
"LABEL": "robustesse du mot de passe",
"STRONG": "forte",
"SUGGESTIONS": {
"l33t": "Évitez les substitutions de lettres prévisibles comme {'@'} pour a.",
"reverseWords": "Évitez les orthographes inversées des mots courants.",
"allUppercase": "Mettez quelques lettres en majuscules, mais pas toutes.",
"anotherWord": "Ajoutez des mots moins courants.",
"associatedYears": "Évitez les années qui vous sont associées. (ex : date de naissance).",
"capitalization": "Capitalisez mais pas seulement la première lettre.",
"dates": "Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance).",
"recentYears": "Évitez les dernières années.",
"associatedYears": "Évitez les années qui vous sont associées. (ex : date de naissance).",
"sequences": "Évitez les séquences de caractères courantes.",
"repeated": "Évitez les mots et les caractères répétés.",
"l33t": "Évitez les substitutions de lettres prévisibles comme {'@'} pour a.",
"longerKeyboardPattern": "Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois.",
"anotherWord": "Ajoutez des mots moins courants.",
"useWords": "Utilisez plusieurs mots, mais évitez les phrases courantes.",
"noNeed": "Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules.",
"pwned": "Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier."
}
"pwned": "Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier.",
"recentYears": "Évitez les dernières années.",
"repeated": "Évitez les mots et les caractères répétés.",
"reverseWords": "Évitez les orthographes inversées des mots courants.",
"sequences": "Évitez les séquences de caractères courantes.",
"useWords": "Utilisez plusieurs mots, mais évitez les phrases courantes."
},
"WEAK": "faible"
},
"PASSWORD_UPDATED": "Votre mot de passe a été mis à jour. Cliquez {0} pour vous connecter.",
"PROFILE": {
@ -65,12 +65,24 @@
"MONDAY": "Lundi",
"PICTURE": "Image de profil",
"PICTURE_EDITION": "Mise à jour de l'image de profil",
"PICTURE_UPDATE": "Mettre à jour l'image",
"PICTURE_REMOVE": "Supprimer",
"PICTURE_UPDATE": "Mettre à jour l'image",
"PREFERENCES_EDITION": "Mise à jour des préférences",
"PROFILE_EDITION": "Mise à jour du profil",
"REGISTRATION_DATE": "Date d'inscription",
"SPORT": {
"ACTION": "action",
"COLOR": "couleur",
"DISABLED_BY_ADMIN": "désactivé par l'administrateur",
"IS_ACTIVE": "actif",
"LABEL": "label",
"STOPPED_SPEED_THRESHOLD": "seuil de vitesse arrêtée"
},
"SPORTS_EDITION": "Mise à jour des préférences des sports",
"SUCCESSFUL_EMAIL_UPDATE": "Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.",
"SUCCESSFUL_REGISTRATION": "Votre compte a été créé avec succès.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.",
"SUCCESSFUL_UPDATE": "Votre compte a été modifié avec succès.",
"SUNDAY": "Dimanche",
"TABS": {
"ACCOUNT": "compte",
@ -80,24 +92,12 @@
"PROFILE": "profil",
"SPORTS": "sports"
},
"TIMEZONE": "Fuseau horaire",
"UNITS": {
"LABEL": "Unités pour les distances",
"IMPERIAL": "Système impérial (ft, mi, mph, °F)",
"LABEL": "Unités pour les distances",
"METRIC": "Système métrique (m, km, m/s, °C)"
},
"SPORT": {
"ACTION": "action",
"COLOR": "couleur",
"DISABLED_BY_ADMIN": "désactivé par l'administrateur",
"IS_ACTIVE": "actif",
"LABEL": "label",
"STOPPED_SPEED_THRESHOLD": "seuil de vitesse arrêtée"
},
"SUCCESSFUL_EMAIL_UPDATE": "Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.",
"SUCCESSFUL_REGISTRATION": "Votre compte a été créé avec succès.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.",
"SUCCESSFUL_UPDATE": "Votre compte a été modifié avec succès.",
"TIMEZONE": "Fuseau horaire"
}
},
"REGISTER": "S'inscrire",
"REGISTER_DISABLED": "Désolé, les inscriptions sont désactivées.",
@ -105,7 +105,7 @@
"RESET_PASSWORD": "Réinitialiser votre mot de passe",
"SHOW_PASSWORD": "afficher le mot de passe",
"THIS_USER_ACCOUNT_IS_INACTIVE": "Le compte de cet utilisateur est inactif.",
"USER_PICTURE": "photo de l'utilisateur",
"USERNAME": "Nom d'utilisateur",
"USERNAME_INFO": "3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés."
"USERNAME_INFO": "3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés.",
"USER_PICTURE": "photo de l'utilisateur"
}

View File

@ -16,6 +16,9 @@
"FROM": "à partir de",
"GPX_FILE": "fichier .gpx",
"HIDE_FILTERS": "masquer les filtres",
"INVALID_ASCENT_OR_DESCENT": "Les 2 valeurs pour l'élévation doivent être renseignées et être supérieures ou égales à 0.",
"INVALID_DISTANCE": "La distance doit être supérieure à 0",
"INVALID_DURATION": "La durée doit être supérieure à 0 secondes",
"LATEST_WORKOUTS": "Séances récentes",
"LOAD_MORE_WORKOUT": "Charger les séances suivantes",
"MAX_ALTITUDE": "altitude max",
@ -25,6 +28,7 @@
"MIN_ALTITUDE": "altitude min",
"NEXT_SEGMENT": "Segment suivant",
"NEXT_WORKOUT": "Séance suivante",
"NOTES": "notes",
"NO_DATA_CLEANING": "données issues du fichier gpx, sans correction",
"NO_FILE_PROVIDED": "Pas de fichier fourni",
"NO_FOLDER": "pas de répertoire",
@ -36,7 +40,6 @@
"NO_PREVIOUS_WORKOUT": "Pas de séance précédente",
"NO_RECORDS": "Pas de records.",
"NO_WORKOUTS": "Pas de séances.",
"NOTES": "notes",
"PAUSES": "pauses",
"PREVIOUS_SEGMENT": "Segment précédent",
"PREVIOUS_WORKOUT": "Séance précédente",
@ -58,27 +61,6 @@
"TOTAL_DURATION": "durée totale",
"UPLOAD_FIRST_WORKOUT": "Ajoutez votre première séance !",
"WEATHER": {
"HUMIDITY": "humidité",
"TEMPERATURE": "température",
"WIND": "vent",
"WIND_DIRECTIONS": {
"N": "N",
"NNE": "NNE",
"NE": "NE",
"ENE": "ENE",
"E": "E",
"ESE": "ESE",
"SE": "SE",
"SSE": "SSE",
"S": "S",
"SSW": "SSO",
"SW": "SO",
"WSW": "OSO",
"W": "O",
"WNW": "ONO",
"NW": "NO",
"NNW": "NNO"
},
"DARK_SKY": {
"clear-day": "ensoleillé",
"clear-night": "nuit claire",
@ -90,10 +72,31 @@
"sleet": "neige fondue",
"snow": "neige",
"wind": "venteux"
},
"HUMIDITY": "humidité",
"TEMPERATURE": "température",
"WIND": "vent",
"WIND_DIRECTIONS": {
"E": "E",
"ENE": "ENE",
"ESE": "ESE",
"N": "N",
"NE": "NE",
"NNE": "NNE",
"NNW": "NNO",
"NW": "NO",
"S": "S",
"SE": "SE",
"SSE": "SSE",
"SSW": "SSO",
"SW": "SO",
"W": "O",
"WNW": "ONO",
"WSW": "OSO"
}
},
"WITH_GPX": "avec un fichier .gpx",
"WITHOUT_GPX": "sans fichier .gpx",
"WITH_GPX": "avec un fichier .gpx",
"WORKOUT": "séance | séances",
"WORKOUT_DATE": "date de la séance",
"WORKOUT_DELETION_CONFIRMATION": "Etes-vous sûr de vouloir supprimer cette séance ?",

View File

@ -0,0 +1,6 @@
{
"CONTACT_ADMIN": "Contatta l'amministratore",
"FITTRACKEE_DESCRIPTION": "<strong>FitTrackee</strong> è un tracker self-hosted per attività outdoor.",
"FITTRACKEE_LICENSE": "Sotto licenza {0} ",
"SOURCE_CODE": "Codice sorgente"
}

View File

@ -0,0 +1,59 @@
{
"ACTION": "Azione",
"ACTIVATE_USER_ACCOUNT": "Attiva account",
"ACTIVE": "Attivo",
"ADMIN": "Admin",
"ADMINISTRATION": "Amministrazione",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Aggiungi/rimuovi permessi, elimina account utente.",
"APPLICATION": "Applicazione",
"APP_CONFIG": {
"ADMIN_CONTACT": "Email di contatto dell'amministratore",
"MAX_FILES_IN_ZIP_LABEL": "Numero massimo di files zip",
"MAX_USERS_HELP": "Se settato a 0, non ci sono limiti per le registrazioni.",
"MAX_USERS_LABEL": "Numero massimo di utenti attivi",
"NO_CONTACT_EMAIL": "nessuna mail di contatto",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Dimensione massima dei file caricabili (in Mb)",
"TITLE": "Configurazione applicazione",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Dimensione massima dell'archivio zip (in Mb)"
},
"BACK_TO_ADMIN": "Ritorna ad amministrazione",
"CONFIRM_USER_ACCOUNT_DELETION": "Sei sicuro di voler eliminare {0} account? Tutti i dati verranno persi, quest'azione non può essere annullata.",
"CONFIRM_USER_PASSWORD_RESET": "Sei sicuro di voler resettare {0} password?",
"CURRENT_EMAIL": "Email corrente",
"DELETE_USER": "Elimina utente",
"EMAIL_SENDING_DISABLED": "L'invio di email è disabilitato.",
"ENABLE_DISABLE_SPORTS": "Attiva/Disattiva sports.",
"NEW_EMAIL": "Nuova email",
"PASSWORD_RESET_SUCCESSFUL": "La password è stata reimpostata.",
"REGISTRATION_DISABLED": "La registrazione è al momento disabilitata.",
"REGISTRATION_ENABLED": "La registrazione è al momento abilitata.",
"RESET_USER_PASSWORD": "Reset password",
"SPORTS": {
"TABLE": {
"ACTIVE": "Attivo",
"HAS_WORKOUTS": "workout esistono",
"IMAGE": "Immagine",
"LABEL": "Etichetta"
},
"TITLE": "Amministrazione sport"
},
"UPDATE_APPLICATION_DESCRIPTION": "Aggiorna configurazione applicazione (numero massimo di utenti registrati, dimensione massima dei files).",
"UPDATE_USER_EMAIL": "Aggiorna email",
"USER": "utente | utenti",
"USERS": {
"SELECTS": {
"ORDER_BY": {
"ADMIN": "stato admin",
"CREATED_AT": "data di registrazione",
"IS_ACTIVE": "stato account",
"USERNAME": "nome utente",
"WORKOUTS_COUNT": "numero di workout"
}
},
"TABLE": {
"ADD_ADMIN_RIGHTS": "Aggiungi permessi di amministratore",
"REMOVE_ADMIN_RIGHTS": "Rimuovi permessi di amministratore"
}
},
"USER_EMAIL_UPDATE_SUCCESSFUL": "L'indirizzo email è stato aggiornato."
}

View File

@ -0,0 +1,38 @@
{
"ERROR": {
"Network Error": "Errore di rete.",
"UNKNOWN": "Errore. Per favore riprova o contatta l'amminstratore.",
"at least one file in zip archive exceeds size limit, please check the archive": "Almeno un file nell'archivio zip supera il limite di dimensione, per favore controlla.",
"email: valid email must be provided": "Email: dev'essere inserita un'email valida.",
"error during gpx file parsing": "Errore nella lettura del file gpx.",
"error during gpx processing": "Errore nell'elaborazione del file gpx.",
"error on getting configuration": "Errore nella lettura della configurazione.",
"error when updating configuration": "Errore nell'aggiornamento della configurazione",
"error, please try again or contact the administrator": "Errore, per favore riprova o contatta l'amministratore.",
"error, registration is disabled": "Errore, la registrazione è disabilitata.",
"file extension not allowed": "File con estensione non permessa.",
"file size is greater than the allowed size": "La dimensione del file è maggiore di quella massima permessa.",
"invalid credentials": "Credenziali errate.",
"invalid payload": "I dati inseriti non sono validi.",
"invalid token, please log in again": "Token scaduto, per favore ripeti il log in.",
"invalid token, please request a new token": "Token scaduto, per favore ripeti il log in.",
"new email must be different than curent email": "La nuova email dev'essere diversa dalla vecchia mail",
"no file part": "Nessun file scelto.",
"no selected file": "Nessun file scelto.",
"password: password and password confirmation do not match": "Password: la password inserita e la conferma non combaciano.",
"provide a valid auth token": "Insersci un token di autenticazione valido.",
"signature expired, please log in again": "Token scaduto. Per favore ripeti il log in.",
"sorry, that username is already taken": "Mi dispiace, quell'username è già esistente.",
"sport does not exist": "Questo sport non esiste.",
"successfully registered": "Registrato con successo.",
"the number of files in the archive exceeds the limit": "Il numero di files nell'archivio supera il limite massimo permesso.",
"user does not exist": "L'utente non esiste.",
"valid email must be provided for admin contact": "Dev'essere inserita un'email valida",
"you can not delete your account, no other user has admin rights": "Non puoi eliminare questo account, nessun'altro account ha permessi di amministratore.",
"you do not have permissions": "Non hai i permessi necessari."
},
"PAGINATION": {
"NEXT": "avanti",
"PREVIOUS": "precedente"
}
}

View File

@ -0,0 +1,18 @@
{
"ACCOUNT-CONFIRMATION-RESEND": "Re-invia email di conferma",
"AUTHORIZE": "Autorizza",
"BACK": "Indietro",
"CANCEL": "Annulla",
"CLEAR_FILTER": "Resetta filtri",
"DELETE_MY_ACCOUNT": "Elimina il mio account",
"DISABLE": "Disattiva",
"EDIT": "Modifica",
"ENABLE": "Attiva",
"FILTER": "Filtra",
"LOGIN": "Log in",
"NO": "No",
"REGISTER": "Registra",
"RESET": "Reset",
"SUBMIT": "Invia",
"YES": "Si"
}

View File

@ -0,0 +1,25 @@
{
"ABOUT": "about",
"CONFIRMATION": "Conferma",
"CONTACT": "contatto",
"DAY": "giorno | giorni",
"DISPLAYED": "Mostrato",
"DOCUMENTATION": "documentazione",
"HERE": "qui",
"HIDDEN": "Nascosto",
"HOME": "Home",
"SELECTS": {
"ORDER": {
"ASC": "Dal più basso al più alto",
"DESC": "Dal più alto al più basso",
"LABEL": "ordina"
},
"ORDER_BY": {
"LABEL": "ordina per"
},
"PER_PAGE": {
"LABEL": "per pagina"
}
},
"TOTAL": "Totale"
}

View File

@ -0,0 +1,4 @@
{
"DASHBOARD": "Dashboard",
"THIS_MONTH": "Questo mese"
}

View File

@ -0,0 +1,9 @@
{
"APP_ERROR": "L'applicazione ha riscontrato dei problemi. <br /> Per favore riprova più tardi o contatta l'amministratore.",
"NOT_FOUND": {
"PAGE": "Pagina non trovata",
"WORKOUT": "Workout non trovato"
},
"SOMETHING_WRONG": "Qualcosa è andato storto",
"UNKNOWN": "Errore. Per favore riprova o contatta l'amministratore."
}

View File

@ -0,0 +1,27 @@
import AboutTranslations from './about.json'
import AdministrationTranslations from './administration.json'
import ApiTranslations from './api.json'
import ButtonsTranslations from './buttons.json'
import CommonTranslations from './common.json'
import DashboardTranslations from './dashboard.json'
import ErrorTranslations from './error.json'
import OAuth2Translations from './oauth2.json'
import SportsTranslations from './sports.json'
import StatisticsTranslations from './statistics.json'
import UserTranslations from './user.json'
import WorkoutsTranslations from './workouts.json'
export default {
about: AboutTranslations,
admin: AdministrationTranslations,
api: ApiTranslations,
buttons: ButtonsTranslations,
common: CommonTranslations,
dashboard: DashboardTranslations,
error: ErrorTranslations,
oauth2: OAuth2Translations,
sports: SportsTranslations,
statistics: StatisticsTranslations,
user: UserTranslations,
workouts: WorkoutsTranslations,
}

View File

@ -0,0 +1,36 @@
{
"ADD_A_NEW_APP": "Aggiungi una nuova applicazione OAuth2",
"APP": {
"CLIENT_ID": "Id",
"CLIENT_SECRET": "Secret",
"DESCRIPTION": "Descrizione applicazione",
"ISSUE_AT": "Issue at",
"NAME": "Nome applicazione",
"REDIRECT_URL": "URL redirect",
"SCOPE": {
"LABEL": "Scope",
"application:write_DESCRIPTION": "da permessi di scrittura alla configurazioen dell'applicazione.",
"profile:read_DESCRIPTION": "da permessi di lettura a <code>auth</code> endpoints.",
"profile:write_DESCRIPTION": "da permessi di scrittura a <code>auth</code> endpoints.",
"users:read_DESCRIPTION": "da permessi di lettura a <code>users</code> endpoints.",
"users:write_DESCRIPTION": "da permessi di scrittura a <code>users</code>endpoints.",
"workouts:read_DESCRIPTION": "da permessi di lettura a <code>workouts</code> endpoints.",
"workouts:write_DESCRIPTION": "da permessi di scrittura a <code>workouts</code> endpoints."
},
"URL": "URL applicazione"
},
"APPS_LIST": "Applicazioni OAuth2",
"APP_CREATED_SUCCESSFULLY": "Applicazione creata. Sii certo di copiare il secret ora, non lo rivedrai più.",
"APP_DELETION_CONFIRMATION": "Sei sicuro di voler eliminare quest'app?",
"APP_REQUESTING_ACCESS": "L'applicazione {0} sta chiedendo:",
"AUTHORIZE_APP": "Autorizzi {0} ad utilizzare il tuo account?",
"COPY_TO_CLIPBOARD": "copia nella clipboard",
"DELETE_APP": "Elimina applicazione",
"NEW_APP": "Aggiungi applicazione",
"NO_APP": "Applicazione non trovata!",
"NO_APPS": "nessuna applicazione",
"NO_DESCRIPTION": "nessuna descrizione",
"REVOKE_ALL_TOKENS": "Rimuovi tutti i tokens",
"TOKENS_REVOCATION_CONFIRMATION": "Sei sicuro di voler rimuovere tutti i token?",
"TOKENS_REVOKED": "Tutti i token esistenti associati sono stati rimossi."
}

View File

@ -0,0 +1,44 @@
{
"Cycling (Sport)": {
"LABEL": "Ciclismo (Sport)"
},
"Cycling (Transport)": {
"LABEL": "Ciclismo (Trasporto)"
},
"Cycling (Virtual)": {
"LABEL": "Cicliscmo (Virtuale)"
},
"Hiking": {
"LABEL": "Escursioni"
},
"Mountain Biking": {
"LABEL": "Mountain Biking"
},
"Mountain Biking (Electric)": {
"LABEL": "Mountain Biking (Elettrica)"
},
"Mountaineering": {
"LABEL": "Alpinismo"
},
"Rowing": {
"LABEL": "Canottaggio"
},
"Running": {
"LABEL": "Corsa"
},
"Skiing (Alpine)": {
"LABEL": "Sci (Alpino)"
},
"Skiing (Cross Country)": {
"LABEL": "Sci (Cross Country)"
},
"Snowshoes": {
"LABEL": "Racchette da neve"
},
"Trail": {
"LABEL": "Sentieri"
},
"Walking": {
"LABEL": "Camminata"
}
}

View File

@ -0,0 +1,8 @@
{
"STATISTICS": "Statistiche",
"TIME_FRAMES": {
"month": "mese",
"week": "settimana",
"year": "anno"
}
}

View File

@ -0,0 +1,111 @@
{
"ACCOUNT_CONFIRMATION_NOT_RECEIVED": "Non hai ricevuto istruzioni?",
"ACCOUNT_CONFIRMATION_SENT": "Controlla la tua email. Una nuova email di conferma è stata inviata all'indirizzo specificato.",
"ADMIN": "Admin",
"ALREADY_HAVE_ACCOUNT": "Hai già un account?",
"CONFIRM_ACCOUNT_DELETION": "Sei sicuro di voler eliminare il tuo account? Tutti i dati saranno eliminati, quest'azione non può essere annullata",
"CURRENT_PASSWORD": "Password corrente",
"EMAIL": "Email",
"EMAIL_INFO": "Inserisci un indirizzo email valido.",
"ENTER_PASSWORD": "Inserisci una password",
"FILTER_ON_USERNAME": "Filtra per username",
"HIDE_PASSWORD": "nascondi password",
"INVALID_TOKEN": "Token invalido, per favore richiedi un nuovo reset della password.",
"LANGUAGE": "Lingua",
"LOGIN": "Login",
"LOGOUT": "Logout",
"LOG_IN": "log in",
"NEW_PASSWORD": "Nuova password",
"NO_USERS_FOUND": "Nessun utente trovato.",
"PASSWORD": "Password",
"PASSWORD_FORGOTTEN": "Password dimenticata?",
"PASSWORD_INFO": "Inserisci almeno 8 caratteri.",
"PASSWORD_RESET": "Reset password",
"PASSWORD_SENT_EMAIL_TEXT": "Controlla la tua email. Se l'indirizzo inserito è nel nostro database, riceverai un'email con un link per resettare la tua password.",
"PASSWORD_STRENGTH": {
"AVERAGE": "media",
"GOOD": "buona",
"LABEL": "sicurezza password",
"STRONG": "forte",
"SUGGESTIONS": {
"allUppercase": "Inserisci qualche maiuscola.",
"anotherWord": "Aggiungi più parole che sono meno comuni.",
"associatedYears": "Evita date che possono essere associate a te.",
"capitalization": "Inserisci maiuscole oltre alla prima lettera.",
"dates": "Evita date che possono essere associate a te.",
"l33t": "Evita sostituzioni prevedibili, per esempio, {'@'} per la a.",
"longerKeyboardPattern": "Usa patterns più lunghi e cambia direzione di scrittura più volte.",
"noNeed": "Puoi creare password sicure senza utilizzare simboli, numeri, o maiuscole.",
"pwned": "È consigliabile cambiare questa password se è utilizzata per altro.",
"recentYears": "Evita date recenti.",
"repeated": "Evita di ripetere lettere e parole.",
"reverseWords": "Evita di scrivere parole al contrario.",
"sequences": "Evita sequenze di caratteri comuni.",
"useWords": "Usa più parole, ma evita frasi comuni."
},
"WEAK": "bassa"
},
"PASSWORD_UPDATED": "La tua password è stata aggiornata. Clicca {0} per effettuare il login.",
"PROFILE": {
"ACCOUNT_EDITION": "Tipo di account",
"ASCENT_DATA": "Dati relativi alle salite (singoli, totale)",
"BACK_TO_PROFILE": "Ritorna al profilo",
"BIO": "Bio",
"BIRTH_DATE": "Data di nascita",
"DATE_FORMAT": "Formato data",
"EDIT": "Modifica profilo",
"EDIT_PREFERENCES": "Modifica preferenze",
"EDIT_SPORTS_PREFERENCES": "Modifica preferenze sport",
"ERRORED_EMAIL_UPDATE": "Per favore {0} per cambiare di nuovo la tua mail o contatta l'amministratore",
"FIRST_DAY_OF_WEEK": "Primo giorno della settimana",
"FIRST_NAME": "Nome",
"LANGUAGE": "Lingua",
"LAST_NAME": "Cognome",
"LOCATION": "Posizione",
"MONDAY": "Lunedì",
"PICTURE": "Foto",
"PICTURE_EDITION": "Foto",
"PICTURE_REMOVE": "Rimuovi foto",
"PICTURE_UPDATE": "Aggiorna foto",
"PREFERENCES_EDITION": "Preferenze",
"PROFILE_EDITION": "Profilo",
"REGISTRATION_DATE": "Data di registrazione",
"SPORT": {
"ACTION": "azione",
"COLOR": "colore",
"DISABLED_BY_ADMIN": "disattivato dall'amministratore",
"IS_ACTIVE": "attivo",
"LABEL": "etichetta",
"STOPPED_SPEED_THRESHOLD": "Limite minimo di velocità"
},
"SPORTS_EDITION": "Preferenze sport",
"SUCCESSFUL_EMAIL_UPDATE": "Il tuo account è stato aggiornato con successo. Per favore controlla la tua email per confermare il tuo indirizzo email.",
"SUCCESSFUL_REGISTRATION": "Il tuo account è stato creato con successo.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "Un link per attivare il tuo account è stato inviato all'indirizzo specificato.",
"SUCCESSFUL_UPDATE": "Il tuo account è stato aggiornato con successo.",
"SUNDAY": "Domenica",
"TABS": {
"ACCOUNT": "account",
"APPS": "apps",
"PICTURE": "foto",
"PREFERENCES": "preferenze",
"PROFILE": "profilo",
"SPORTS": "sports"
},
"TIMEZONE": "Timezone",
"UNITS": {
"IMPERIAL": "Sistema imperiale (ft, mi, mph, °F)",
"LABEL": "Unità per la distanza",
"METRIC": "Sistema metrico (m, km, m/s, °C)"
}
},
"REGISTER": "Registra",
"REGISTER_DISABLED": "Mi dispiace, la registrazione è disabilitata.",
"RESENT_ACCOUNT_CONFIRMATION": "Re-invia email di conferma dell'account",
"RESET_PASSWORD": "Resetta password",
"SHOW_PASSWORD": "mostra password",
"THIS_USER_ACCOUNT_IS_INACTIVE": "Questo account è inattivo.",
"USERNAME": "Username",
"USERNAME_INFO": "Sono richiesti da 3 a 30 caratteri, è permesso utilizzare solo caratteri alfanumerici ed il simbolo \"_\".",
"USER_PICTURE": "foto profilo"
}

View File

@ -0,0 +1,104 @@
{
"ADD_WORKOUT": "Aggiungi un workout",
"ANALYSIS": "analisi",
"ASCENT": "salita",
"AVERAGE_SPEED": "velocità media",
"AVE_SPEED": "vel. media",
"BACK_TO_WORKOUT": "ritorna al workout",
"DATE": "data",
"DESCENT": "discesa",
"DISPLAY_FILTERS": "mostra filtri",
"DISTANCE": "distanza",
"DURATION": "durata",
"EDIT_WORKOUT": "Modifica il workout",
"ELEVATION": "elevazione",
"END": "fine",
"FROM": "da",
"GPX_FILE": "file .gpx",
"HIDE_FILTERS": "nascondi filtri",
"INVALID_DISTANCE": "La distanza dev'essere maggiore di 0",
"INVALID_DURATION": "La durata dev'essere maggiore di 0",
"LATEST_WORKOUTS": "Ultimi workout",
"LOAD_MORE_WORKOUT": "Carica più workout",
"MAX_ALTITUDE": "altitudine massima",
"MAX_FILES": "file massimi",
"MAX_SIZE": "dimensione massima",
"MAX_SPEED": "velocità massima",
"MIN_ALTITUDE": "altitudine minima",
"NEXT_SEGMENT": "Nessun segmento successivo",
"NEXT_WORKOUT": "Prossimo workout",
"NOTES": "note",
"NO_DATA_CLEANING": "data dal file gpx, senza \"pulizia\"",
"NO_FILE_PROVIDED": "Nessun file scelto",
"NO_FOLDER": "nessuna cartella all'interno",
"NO_MAP": "Nessuna mappa",
"NO_NEXT_SEGMENT": "Nessun segmento successivo",
"NO_NEXT_WORKOUT": "Nessun workout successivo",
"NO_NOTES": "Nessuna nota",
"NO_PREVIOUS_SEGMENT": "Nessun segmento precedente",
"NO_PREVIOUS_WORKOUT": "Nessun workout precedente",
"NO_RECORDS": "Nessun record.",
"NO_WORKOUTS": "Nessun workout.",
"PAUSES": "pause",
"PREVIOUS_SEGMENT": "Segmento precedente",
"PREVIOUS_WORKOUT": "Workout precedente",
"RECORD": "record | records",
"RECORD_AS": "Vel. media",
"RECORD_FD": "Distanza più lunga",
"RECORD_HA": "Salita più alta",
"RECORD_LD": "Durata più lunga",
"RECORD_MS": "Vel. massima",
"REMAINING_CHARS": "caratteri rimanenti",
"SEGMENT": "segmento | segmenti",
"SPEED": "velocità",
"SPORT": "sport | sports",
"START": "inizio",
"START_AND_FINISH": "Inizio e fine",
"START_ELEVATION_AT_ZERO": "partenza asse elevazione a 0",
"TITLE": "titolo",
"TO": "a",
"TOTAL_DURATION": "durata totale",
"UPLOAD_FIRST_WORKOUT": "Carica file!",
"WEATHER": {
"DARK_SKY": {
"clear-day": "cielo chiaro",
"clear-night": "notte chiara",
"cloudy": "nuvoloso",
"fog": "nebbia",
"partly-cloudy-day": "parzialmente nuvoloso",
"partly-cloudy-night": "notte parzialmente nuvolosa",
"rain": "pioggia",
"sleet": "nevischio",
"snow": "neve",
"wind": "vento"
},
"HUMIDITY": "umidità",
"TEMPERATURE": "temperatura",
"WIND": "vento",
"WIND_DIRECTIONS": {
"E": "E",
"ENE": "ENE",
"ESE": "ESE",
"N": "N",
"NE": "NE",
"NNE": "NNE",
"NNW": "NNW",
"NW": "NW",
"S": "S",
"SE": "SE",
"SSE": "SSE",
"SSW": "SSW",
"SW": "SW",
"W": "W",
"WNW": "WNW",
"WSW": "WSW"
}
},
"WITHOUT_GPX": "senza file .gpx",
"WITH_GPX": "con file .gpx",
"WORKOUT": "workout | workouts",
"WORKOUT_DATE": "data workout",
"WORKOUT_DELETION_CONFIRMATION": "Sei sicuro di voler eliminare questo workout?",
"ZIP_ARCHIVE": "file .zip",
"ZIP_ARCHIVE_DESCRIPTION": "o file .zip contenente files .gpx"
}

View File

@ -1,2 +1,2 @@
{
}
}

View File

@ -1,2 +1,2 @@
{
}
}

View File

@ -1,2 +1,2 @@
{
}
}

View File

@ -1,2 +1,2 @@
{
}
}

View File

@ -1,2 +1,2 @@
{
}
}

View File

@ -1,2 +1,2 @@
{
}
}

View File

@ -1,2 +1,2 @@
{
}
}

View File

@ -0,0 +1,6 @@
{
"CONTACT_ADMIN": "Contacteer uw administrator",
"FITTRACKEE_DESCRIPTION": "<strong>FitTrackee</strong> is zelf-gehoste buitenshuis activiteiten tracker.",
"FITTRACKEE_LICENSE": "Onder {0} licentie ",
"SOURCE_CODE": "Broncode"
}

View File

@ -0,0 +1,59 @@
{
"ACTION": "Actie",
"ACTIVATE_USER_ACCOUNT": "Activeer account",
"ACTIVE": "Ingeschakeld",
"ADMIN": "Beheer",
"ADMINISTRATION": "Instellingen",
"ADMIN_RIGHTS_DELETE_USER_ACCOUNT": "Toevoegen/verwijderen van administrator rechten, verwijder gebruikersaccount.",
"APPLICATION": "Applicatie",
"APP_CONFIG": {
"ADMIN_CONTACT": "Administrator email voor contact",
"MAX_FILES_IN_ZIP_LABEL": "Max. aantal bestanden in zip archief",
"MAX_USERS_HELP": "Bij 0, geen limiet op registratie.",
"MAX_USERS_LABEL": "Max. aantal actieve gebruikers",
"NO_CONTACT_EMAIL": "geen contact email",
"SINGLE_UPLOAD_MAX_SIZE_LABEL": "Max. grootte van bestanden voor upload (in Mb)",
"TITLE": "Applicatie configureren",
"ZIP_UPLOAD_MAX_SIZE_LABEL": "Max. grootte van zip archief (in Mb)"
},
"BACK_TO_ADMIN": "Terug naar beheer",
"CONFIRM_USER_ACCOUNT_DELETION": "Weet u zeker dat u de account {0} wilt wissen? Alle gegevens worden verwijderd, dit kan niet ongedaan gemaakt worden.",
"CONFIRM_USER_PASSWORD_RESET": "Weet u zeker dat u het wachtwoord voor {0} wilt resetten?",
"CURRENT_EMAIL": "Huidige email",
"DELETE_USER": "Verwijder gebruiker",
"EMAIL_SENDING_DISABLED": "Emails verzenden is uitgeschakeld.",
"ENABLE_DISABLE_SPORTS": "Aan- of uitzetten van sporten.",
"NEW_EMAIL": "Nieuwe email",
"PASSWORD_RESET_SUCCESSFUL": "Het wachtwoord werd gereset.",
"REGISTRATION_DISABLED": "Registratie is momenteel uitgeschakeld.",
"REGISTRATION_ENABLED": "Registratie is momenteel ingeschakeld.",
"RESET_USER_PASSWORD": "Reset wachtwoord",
"SPORTS": {
"TABLE": {
"ACTIVE": "Ingeschakeld",
"HAS_WORKOUTS": "Trainingen aanwezig",
"IMAGE": "Afbeelding",
"LABEL": "Label"
},
"TITLE": "Beheer sporten"
},
"UPDATE_APPLICATION_DESCRIPTION": "De applicatie configureren (maximum aantal geregistreerde gebruikers, maximum bestandsgrootte).",
"UPDATE_USER_EMAIL": "Update email",
"USER": "gebruiker | gebruikers",
"USERS": {
"SELECTS": {
"ORDER_BY": {
"ADMIN": "admin status",
"CREATED_AT": "Registratie datum",
"IS_ACTIVE": "Account status",
"USERNAME": "gebruikersnaam",
"WORKOUTS_COUNT": "aantal trainingen"
}
},
"TABLE": {
"ADD_ADMIN_RIGHTS": "Admin rechten toevoegen",
"REMOVE_ADMIN_RIGHTS": "Verwijder admin rechten"
}
},
"USER_EMAIL_UPDATE_SUCCESSFUL": "Het emailadres werd bijgewerkt."
}

View File

@ -0,0 +1,38 @@
{
"ERROR": {
"Network Error": "Netwerk fout.",
"UNKNOWN": "Fout. Probeer opnieuw of contacteer de administrator.",
"at least one file in zip archive exceeds size limit, please check the archive": "Ten minste 1 bestand in het zip archief is groter dan toegelaten, gelieve de bestanden te controleren.",
"email: valid email must be provided": "Email: een geldige email is vereist.",
"error during gpx file parsing": "Fout bij het verwerken van het gpx bestand.",
"error during gpx processing": "Fout bij verwerken van gpx.",
"error on getting configuration": "Fout bij ophalen van configuratie.",
"error when updating configuration": "Fout bij het updaten van de configuratie",
"error, please try again or contact the administrator": "Fout, probeer opnieuw of contacteer de administrator.",
"error, registration is disabled": "Fout, registratie is uitgeschakeld.",
"file extension not allowed": "Bestandsformaat niet toegelaten.",
"file size is greater than the allowed size": "Bestandsgrootte is groter dan toegestaan.",
"invalid credentials": "Ongeldige inloggegevens.",
"invalid payload": "Ingegeven data is ongeldig.",
"invalid token, please log in again": "Ongeldige token, log opnieuw in.",
"invalid token, please request a new token": "Ongeldige token, log opnieuw in.",
"new email must be different than curent email": "Het nieuwe email adres dient te verschillen van het oude",
"no file part": "Geen bestand opgegeven.",
"no selected file": "Geen bestand geselecteerd.",
"password: password and password confirmation do not match": "Wachtwoord: het wachtwoord en de bevestiging komen niet overeen.",
"provide a valid auth token": "Geef een geldig auth token.",
"signature expired, please log in again": "Signatuur verlopen. Log opnieuw in.",
"sorry, that username is already taken": "Sorry, deze gebruikersnaam is al in gebruik.",
"sport does not exist": "Deze sport bestaat niet.",
"successfully registered": "Succesvol geregistreerd.",
"the number of files in the archive exceeds the limit": "Het aantal bestanden in het zip archief overschrijdt de limiet.",
"user does not exist": "Gebruiker bestaat niet.",
"valid email must be provided for admin contact": "Een geldige email is vereist voor admin contact informatie",
"you can not delete your account, no other user has admin rights": "U kunt uw account niet verwijderen, geen andere gebruiker heeft admin rechten.",
"you do not have permissions": "U hebt geen machtigingen."
},
"PAGINATION": {
"NEXT": "volgende",
"PREVIOUS": "vorige"
}
}

View File

@ -0,0 +1,18 @@
{
"ACCOUNT-CONFIRMATION-RESEND": "Herzend bevestigings email",
"AUTHORIZE": "Toekennen",
"BACK": "Terug",
"CANCEL": "Annuleren",
"CLEAR_FILTER": "Verwijder filters",
"DELETE_MY_ACCOUNT": "Verwijder mijn account",
"DISABLE": "Uitzetten",
"EDIT": "Bewerken",
"ENABLE": "Aanzetten",
"FILTER": "Filter",
"LOGIN": "Inloggen",
"NO": "Nee",
"REGISTER": "Registreer",
"RESET": "Reset",
"SUBMIT": "Aanpassen",
"YES": "Ja"
}

View File

@ -0,0 +1,25 @@
{
"ABOUT": "over",
"CONFIRMATION": "Bevestiging",
"CONTACT": "contacteer",
"DAY": "dag | dagen",
"DISPLAYED": "Weergegeven",
"DOCUMENTATION": "documentatie",
"HERE": "hier",
"HIDDEN": "Verborgen",
"HOME": "Startscherm",
"SELECTS": {
"ORDER": {
"ASC": "oplopend",
"DESC": "aflopend",
"LABEL": "sorteer"
},
"ORDER_BY": {
"LABEL": "sorteer op"
},
"PER_PAGE": {
"LABEL": "per pagina"
}
},
"TOTAL": "Totaal"
}

View File

@ -0,0 +1,4 @@
{
"DASHBOARD": "Dashboard",
"THIS_MONTH": "Deze maand"
}

View File

@ -0,0 +1,9 @@
{
"APP_ERROR": "Er heeft zich een onbekende fout voorgedaan.<br />Probeer aub later opnieuw of contacteer de administrator.",
"NOT_FOUND": {
"PAGE": "Pagina niet gevonden",
"WORKOUT": "Training niet gevonden"
},
"SOMETHING_WRONG": "Er ging iets mis",
"UNKNOWN": "Fout. Probeer opnieuw of contacteer de administrator."
}

View File

@ -0,0 +1,27 @@
import AboutTranslations from './about.json'
import AdministrationTranslations from './administration.json'
import ApiTranslations from './api.json'
import ButtonsTranslations from './buttons.json'
import CommonTranslations from './common.json'
import DashboardTranslations from './dashboard.json'
import ErrorTranslations from './error.json'
import OAuth2Translations from './oauth2.json'
import SportsTranslations from './sports.json'
import StatisticsTranslations from './statistics.json'
import UserTranslations from './user.json'
import WorkoutsTranslations from './workouts.json'
export default {
about: AboutTranslations,
admin: AdministrationTranslations,
api: ApiTranslations,
buttons: ButtonsTranslations,
common: CommonTranslations,
dashboard: DashboardTranslations,
error: ErrorTranslations,
oauth2: OAuth2Translations,
sports: SportsTranslations,
statistics: StatisticsTranslations,
user: UserTranslations,
workouts: WorkoutsTranslations,
}

View File

@ -0,0 +1,36 @@
{
"ADD_A_NEW_APP": "Nieuwe OAuth2 app toevoegen",
"APP": {
"CLIENT_ID": "Id",
"CLIENT_SECRET": "Geheim",
"DESCRIPTION": "App omschrijving",
"ISSUE_AT": "Probleem bij",
"NAME": "Naam van de app",
"REDIRECT_URL": "Doorverwijs URL",
"SCOPE": {
"LABEL": "Omvang",
"application:write_DESCRIPTION": "geeft toestemming tot aanpassen van de applicatie instellingen.",
"profile:read_DESCRIPTION": "staat leestoegang toe aan <code>auth</code> endpoints.",
"profile:write_DESCRIPTION": "staat schrijftoegang toe aan <code>auth</code> endpoints.",
"users:read_DESCRIPTION": "staat leestoegang toe aan <code>users</code> endpoints.",
"users:write_DESCRIPTION": "staat schrijftoegang toe aan <code>users</code> endpoints.",
"workouts:read_DESCRIPTION": "staat leestoegang toe aan <code>workouts</code> endpoints.",
"workouts:write_DESCRIPTION": "staat schrijftoegang toe aan <code>workouts</code> endpoints."
},
"URL": "App URL"
},
"APPS_LIST": "OAuth2 apps",
"APP_CREATED_SUCCESSFULLY": "App succesvol aangemaakt. Kopieer zeker de geheime sleutel, deze zal later niet meer verschijnen.",
"APP_DELETION_CONFIRMATION": "Weet u zeker dat u deze app wilt verwijderen?",
"APP_REQUESTING_ACCESS": "De app {0} vraagt:",
"AUTHORIZE_APP": "Toegang geven aan {0} tot uw gebruikersaccount?",
"COPY_TO_CLIPBOARD": "kopieer naar klembord",
"DELETE_APP": "Verwijder app",
"NEW_APP": "Voeg een app toe",
"NO_APP": "App niet gevonden!",
"NO_APPS": "geen apps",
"NO_DESCRIPTION": "geen beschrijving",
"REVOKE_ALL_TOKENS": "Verwijder alle tokens",
"TOKENS_REVOCATION_CONFIRMATION": "Weet u zeker dat u alle tokens wilt intrekken?",
"TOKENS_REVOKED": "Alle bestaande tokens werden ingetrokken."
}

View File

@ -0,0 +1,44 @@
{
"Cycling (Sport)": {
"LABEL": "Fietsen (Sport)"
},
"Cycling (Transport)": {
"LABEL": "Fietsen (Transport)"
},
"Cycling (Virtual)": {
"LABEL": "Fietsen (Virtueel)"
},
"Hiking": {
"LABEL": "Trektocht"
},
"Mountain Biking": {
"LABEL": "Mountainbiken"
},
"Mountain Biking (Electric)": {
"LABEL": "Mountainbiken (Elektrisch)"
},
"Mountaineering": {
"LABEL": "Bergbeklimmen"
},
"Rowing": {
"LABEL": "Roeien"
},
"Running": {
"LABEL": "Lopen"
},
"Skiing (Alpine)": {
"LABEL": "Skiën (Alpine)"
},
"Skiing (Cross Country)": {
"LABEL": "Skiën (Cross Country)"
},
"Snowshoes": {
"LABEL": "Sneeuwschoenen"
},
"Trail": {
"LABEL": "Trail"
},
"Walking": {
"LABEL": "Wandelen"
}
}

View File

@ -0,0 +1,8 @@
{
"STATISTICS": "Statistieken",
"TIME_FRAMES": {
"month": "maand",
"week": "week",
"year": "jaar"
}
}

View File

@ -0,0 +1,111 @@
{
"ACCOUNT_CONFIRMATION_NOT_RECEIVED": "Geen instructies ontvangen?",
"ACCOUNT_CONFIRMATION_SENT": "Controleer uw email. Een nieuwe bevestigingsmail werd verzonden naar het opgegeven adres.",
"ADMIN": "Beheer",
"ALREADY_HAVE_ACCOUNT": "Al een account aangemaakt?",
"CONFIRM_ACCOUNT_DELETION": "Weet u zeker dat u uw account wilt verwijderen? Alle data wordt verwijderd, dit kan niet ongedaan worden",
"CURRENT_PASSWORD": "Huidig wachtwoord",
"EMAIL": "Email",
"EMAIL_INFO": "Geef een geldig email adres op.",
"ENTER_PASSWORD": "Geef een paswoord in",
"FILTER_ON_USERNAME": "Filter op gebruikersnaam",
"HIDE_PASSWORD": "verberg wachtwoord",
"INVALID_TOKEN": "Ongeldig token, vraag een nieuwe wachtwoord reset aan.",
"LANGUAGE": "Taal",
"LOGIN": "Inloggen",
"LOGOUT": "Uitloggen",
"LOG_IN": "inloggen",
"NEW_PASSWORD": "Nieuw wachtwoord",
"NO_USERS_FOUND": "Geen gebruikers gevonden.",
"PASSWORD": "Wachtwoord",
"PASSWORD_FORGOTTEN": "Wachtwoord vergeten?",
"PASSWORD_INFO": "Tenminste 8 karakters vereist.",
"PASSWORD_RESET": "Wachtwoord reset",
"PASSWORD_SENT_EMAIL_TEXT": "Controleer uw inbox. Als uw email adres in onze database zit, hebt u een email ontvangen om uw wachtwoord te resetten.",
"PASSWORD_STRENGTH": {
"AVERAGE": "gemiddeld",
"GOOD": "goed",
"LABEL": "wachtwoord sterkte",
"STRONG": "sterk",
"SUGGESTIONS": {
"allUppercase": "Gebruik enkele hoofdletters.",
"anotherWord": "Voeg meer niet gangbare woorden toe.",
"associatedYears": "Vermijd jaartallen met een persoonlijke betekenis.",
"capitalization": "Gebruik niet enkel voor de eerste letter een hoofdletter.",
"dates": "Vermijd persoonlijke gegevens en jaartallen.",
"l33t": "Vermijd voorspelbare vervangingen, zoals {'@'} voor de letter a.",
"longerKeyboardPattern": "Gebruik langere patronen en verander de richting van typen meerdere malen.",
"noNeed": "U kan sterke wachtwoorden maken zonder gebruik van symbolen, nummers, of hoofdletters.",
"pwned": "Als u dit wachtwoord ergens anders gebruikt zou u het beter veranderen.",
"recentYears": "Vermijd recente jaartallen.",
"repeated": "Vermijd opeenvolgende woorden en karakters.",
"reverseWords": "Vermijd gangbare woorden die achterstevoren geschreven zijn.",
"sequences": "Vermijd voorspelbare opeenvolgingen.",
"useWords": "Gebruik verschillende woorden, maar vermijd vaak gebruikte zinnen."
},
"WEAK": "zwak"
},
"PASSWORD_UPDATED": "Uw wachtwoord werd aangepast. Klik {0} om in te loggen.",
"PROFILE": {
"ACCOUNT_EDITION": "Account aanpassen",
"ASCENT_DATA": "Hoogte gerelateerde data (opnames, totaal)",
"BACK_TO_PROFILE": "Terug naar profiel",
"BIO": "Bio",
"BIRTH_DATE": "Geboortedatum",
"DATE_FORMAT": "Weergaveformaat datum",
"EDIT": "Profiel aanpassen",
"EDIT_PREFERENCES": "Voorkeuren wijzigen",
"EDIT_SPORTS_PREFERENCES": "Sport voorkeuren wijzigen",
"ERRORED_EMAIL_UPDATE": "Gelieve {0} om uw email adres opnieuw te wijzigen of contacteer uw administrator",
"FIRST_DAY_OF_WEEK": "Eerste dag van de week",
"FIRST_NAME": "Voornaam",
"LANGUAGE": "Taal",
"LAST_NAME": "Achternaam",
"LOCATION": "Locatie",
"MONDAY": "Maandag",
"PICTURE": "Afbeelding",
"PICTURE_EDITION": "Afbeelding aanpassen",
"PICTURE_REMOVE": "Afbeelding verwijderen",
"PICTURE_UPDATE": "Afbeelding veranderen",
"PREFERENCES_EDITION": "Voorkeuren aanpassen",
"PROFILE_EDITION": "Profiel aanpassen",
"REGISTRATION_DATE": "Datum registratie",
"SPORT": {
"ACTION": "actie",
"COLOR": "kleur",
"DISABLED_BY_ADMIN": "uitgeschakeld door admin",
"IS_ACTIVE": "actief",
"LABEL": "label",
"STOPPED_SPEED_THRESHOLD": "snelheidsgrens voor stilstand"
},
"SPORTS_EDITION": "Sport voorkeuren aanpassen",
"SUCCESSFUL_EMAIL_UPDATE": "Uw account werd succesvol bijgewerkt. Controleer uw inbox om uw nieuw email adres te bevestigen.",
"SUCCESSFUL_REGISTRATION": "Uw account werd succesvol aangemaakt.",
"SUCCESSFUL_REGISTRATION_WITH_EMAIL": "Een link om uw account te activeren werd doorgestuurd naar opgegeven email adres.",
"SUCCESSFUL_UPDATE": "Uw account werd succesvol bijgewerkt.",
"SUNDAY": "Zondag",
"TABS": {
"ACCOUNT": "account",
"APPS": "apps",
"PICTURE": "afbeelding",
"PREFERENCES": "voorkeuren",
"PROFILE": "profiel",
"SPORTS": "sporten"
},
"TIMEZONE": "Tijdzone",
"UNITS": {
"IMPERIAL": "Imperialistisch systeem (ft, mi, mph, °F)",
"LABEL": "Eenheid voor afstand",
"METRIC": "Metrisch systeem (m, km, m/s, °C)"
}
},
"REGISTER": "Registreren",
"REGISTER_DISABLED": "Sorry, registreren is uitgeschakeld.",
"RESENT_ACCOUNT_CONFIRMATION": "Opnieuw zenden van account bevestigingsmail",
"RESET_PASSWORD": "Reset uw wachtwoord",
"SHOW_PASSWORD": "toon wachtwoord",
"THIS_USER_ACCOUNT_IS_INACTIVE": "Deze account is niet actief.",
"USERNAME": "Gebruikersnaam",
"USERNAME_INFO": "3 tot 30 karakters vereist, enkel alfanumerieke karakters en het underscore karakter \"_\" zijn toegestaan.",
"USER_PICTURE": "gebruikersafbeelding"
}

View File

@ -0,0 +1,104 @@
{
"ADD_WORKOUT": "Training toevoegen",
"ANALYSIS": "analyse",
"ASCENT": "geklommen",
"AVERAGE_SPEED": "gemiddelde snelheid",
"AVE_SPEED": "gem. snelheid",
"BACK_TO_WORKOUT": "Terug naar training",
"DATE": "datum",
"DESCENT": "gedaald",
"DISPLAY_FILTERS": "toon filters",
"DISTANCE": "afstand",
"DURATION": "duur",
"EDIT_WORKOUT": "Training aanpassen",
"ELEVATION": "hoogte",
"END": "einde",
"FROM": "van",
"GPX_FILE": ".gpx bestand",
"HIDE_FILTERS": "verberg filters",
"INVALID_DISTANCE": "De afstand moet groter zijn dan 0",
"INVALID_DURATION": "De duur moet langer zijn dan 0 seconden",
"LATEST_WORKOUTS": "Laatste trainingen",
"LOAD_MORE_WORKOUT": "Toon meer trainingen",
"MAX_ALTITUDE": "max. hoogte",
"MAX_FILES": "max. aantal bestanden",
"MAX_SIZE": "max. grootte",
"MAX_SPEED": "max. snelheid",
"MIN_ALTITUDE": "min. hoogte",
"NEXT_SEGMENT": "Geen volgend segment",
"NEXT_WORKOUT": "Volgende training",
"NOTES": "notities",
"NO_DATA_CLEANING": "data vanuit gpx, zonder op te schonen",
"NO_FILE_PROVIDED": "Geen bestand opgegeven",
"NO_FOLDER": "geen map aanwezig",
"NO_MAP": "Geen kaart",
"NO_NEXT_SEGMENT": "Geen volgend segment",
"NO_NEXT_WORKOUT": "Geen volgende training",
"NO_NOTES": "Geen notities",
"NO_PREVIOUS_SEGMENT": "Geen vorig segment",
"NO_PREVIOUS_WORKOUT": "Geen vorige training",
"NO_RECORDS": "Geen records.",
"NO_WORKOUTS": "Geen trainingen.",
"PAUSES": "pauzes",
"PREVIOUS_SEGMENT": "Vorig segment",
"PREVIOUS_WORKOUT": "Vorige training",
"RECORD": "record | records",
"RECORD_AS": "Gem. snelheid",
"RECORD_FD": "Langste afstand",
"RECORD_HA": "Hoogst geklommen",
"RECORD_LD": "Langste duur",
"RECORD_MS": "Max. snelheid",
"REMAINING_CHARS": "resterende karakters",
"SEGMENT": "segment | segmenten",
"SPEED": "snelheid",
"SPORT": "sport | sporten",
"START": "start",
"START_AND_FINISH": "Start en aankomst",
"START_ELEVATION_AT_ZERO": "Zet hoogte-as vast op 0",
"TITLE": "titel",
"TO": "aan",
"TOTAL_DURATION": "totale duur",
"UPLOAD_FIRST_WORKOUT": "Eén uploaden!",
"WEATHER": {
"DARK_SKY": {
"clear-day": "heldere dag",
"clear-night": "heldere nacht",
"cloudy": "bewolkt",
"fog": "mist",
"partly-cloudy-day": "gedeeltelijk bewolkte dag",
"partly-cloudy-night": "gedeeltelijk bewolkte nacht",
"rain": "regen",
"sleet": "natte sneeuw",
"snow": "sneeuw",
"wind": "wind"
},
"HUMIDITY": "vochtigheid",
"TEMPERATURE": "temperatuur",
"WIND": "wind",
"WIND_DIRECTIONS": {
"E": "O",
"ENE": "ONO",
"ESE": "OZO",
"N": "N",
"NE": "NO",
"NNE": "NNO",
"NNW": "NNW",
"NW": "NW",
"S": "Z",
"SE": "ZO",
"SSE": "ZZO",
"SSW": "ZZW",
"SW": "ZW",
"W": "W",
"WNW": "WNW",
"WSW": "WZW"
}
},
"WITHOUT_GPX": "zonder .gpx bestand",
"WITH_GPX": "met .gpx bestand",
"WORKOUT": "training | trainingen",
"WORKOUT_DATE": "datum training",
"WORKOUT_DELETION_CONFIRMATION": "Weet u zeker dat u deze training wilt verwijderen?",
"ZIP_ARCHIVE": ".zip bestand",
"ZIP_ARCHIVE_DESCRIPTION": "of .zip archief met .gpx bestanden"
}

View File

@ -162,6 +162,7 @@ button {
.view {
padding-bottom: 35px;
background-color: var(--app-background-color);
}
.fa-trophy {

View File

@ -11,7 +11,7 @@ export const mutations: MutationTree<IRootState> & TRootMutations = {
},
[ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](
state: IRootState,
errorMessages: string
errorMessages: string | string[]
) {
state.errorMessages = errorMessages
},

View File

@ -60,7 +60,7 @@ export type TRootMutations<S = IRootState> = {
[ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES](state: S): void
[ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](
state: S,
errorMessages: string
errorMessages: string | string[]
): void
[ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG](
state: S,

View File

@ -185,11 +185,12 @@ export const actions: ActionTree<IWorkoutsState, IRootState> &
if (!payload.file) {
throw new Error('No file part')
}
const notes = payload.notes.replace(/"/g, '\\"')
const form = new FormData()
form.append('file', payload.file)
form.append(
'data',
`{"sport_id": ${payload.sport_id}, "notes": "${payload.notes}"}`
`{"sport_id": ${payload.sport_id}, "notes": "${notes}"}`
)
authApi
.post('workouts', form, {

View File

@ -19,3 +19,8 @@ export interface IQueryOptions {
defaultSort?: string
query?: TPaginationPayload
}
export interface IApiErrorMessage {
error?: string
message?: string
}

View File

@ -116,6 +116,8 @@ export interface IWorkoutForm {
distance?: number
duration?: number
file?: Blob
ascent?: number | null
descent?: number | null
}
export interface IWorkoutPayload {

View File

@ -97,7 +97,9 @@ const dateStringFormats: Record<string, string> = {
de: 'do MMM yyyy',
en: 'MMM. do, yyyy',
fr: 'd MMM yyyy',
it: 'd MMM yyyy',
// nb: 'do MMM yyyy',
nl: 'd MMM yyyy',
}
export const getDateFormat = (dateFormat: string, language: string): string => {

View File

@ -9,6 +9,7 @@ import { ISportsState } from '@/store/modules/sports/types'
import { IStatisticsState } from '@/store/modules/statistics/types'
import { IUsersState } from '@/store/modules/users/types'
import { IWorkoutsState } from '@/store/modules/workouts/types'
import { IApiErrorMessage } from '@/types/api'
export const getApiUrl = (): string => {
return process.env.NODE_ENV === 'production'
@ -33,11 +34,11 @@ export const handleError = (
return
}
const errorInfo: IApiErrorMessage | null =
error?.response && error.response.data ? error.response.data : null
// if stored token is blacklisted, disconnect user
if (
error?.response?.status === 401 &&
error.response.data.error === 'invalid_token'
) {
if (error?.response?.status === 401 && errorInfo?.error === 'invalid_token') {
localStorage.removeItem('authToken')
context.dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)
return
@ -48,8 +49,8 @@ export const handleError = (
: error.response
? error.response.status === 413
? 'file size is greater than the allowed size'
: error.response.data.message
? error.response.data.message
: errorInfo?.message
? errorInfo.message
: msg
: error.message
? error.message

View File

@ -0,0 +1,9 @@
import linkifyHtml from 'linkify-html'
import sanitizeHtml from 'sanitize-html'
export const linkifyAndClean = (input: string): string => {
return sanitizeHtml(linkifyHtml(input, { target: '_blank' }), {
allowedTags: ['a'],
disallowedTagsMode: 'escape',
})
}

View File

@ -1,6 +1,6 @@
/* eslint-disable import/no-duplicates */
import { Locale } from 'date-fns'
import { de, enUS, fr } from 'date-fns/locale'
import { de, enUS, fr, it, nl } from 'date-fns/locale'
import createI18n from '@/i18n'
@ -8,14 +8,18 @@ export const localeFromLanguage: Record<string, Locale> = {
de: de,
en: enUS,
fr: fr,
it: it,
// nb: nb, // disabled for now
nl: nl,
}
export const languageLabels: Record<string, string> = {
de: 'Deutsch',
en: 'English',
fr: 'Français',
it: 'Italiano',
// nb: 'Norsk bokmål', // disabled for now
nl: 'Nederlands',
}
const { availableLocales } = createI18n.global

View File

@ -1,31 +1,38 @@
import { zxcvbnOptions } from '@zxcvbn-ts/core'
export const loadLanguagePackage = async (language: string) => {
// no package available for norwegian bokmal and dutch (Nederlands)
// fallback to english
switch (language) {
case 'fr':
return await import(
/* webpackChunkName: "password.fr" */ '@zxcvbn-ts/language-fr'
)
case 'de':
return await import(
/* webpackChunkName: "password.de" */ '@zxcvbn-ts/language-de'
)
case 'it':
return await import(
/* webpackChunkName: "password.it" */ '@zxcvbn-ts/language-it'
)
default:
return await import(
/* webpackChunkName: "password.en" */ '@zxcvbn-ts/language-en'
)
}
}
export const setZxcvbnOptions = async (language: string) => {
const zxcvbnCommonPackage = await import(
/* webpackChunkName: "password" */ '@zxcvbn-ts/language-common'
)
const zxcvbnEnPackage = await import(
/* webpackChunkName: "password" */ '@zxcvbn-ts/language-en'
)
const zxcvbnFrPackage = await import(
/* webpackChunkName: "password" */ '@zxcvbn-ts/language-fr'
)
const zxcvbnDePackage = await import(
/* webpackChunkName: "password" */ '@zxcvbn-ts/language-de'
)
const zxcvbnLangPackages: Record<string, typeof zxcvbnEnPackage> = {
de: zxcvbnDePackage,
en: zxcvbnEnPackage,
fr: zxcvbnFrPackage,
// no package available for norwegian bokmal, fallback on english
nb: zxcvbnEnPackage,
}
const zxcvbnPackage = zxcvbnLangPackages[language]
const zxcvbnLanguagePackage = await loadLanguagePackage(language)
const options = {
graphs: zxcvbnCommonPackage.default.adjacencyGraphs,
dictionary: {
...zxcvbnCommonPackage.default.dictionary,
...zxcvbnPackage.default.dictionary,
...zxcvbnLanguagePackage.default.dictionary,
},
}
zxcvbnOptions.setOptions(options)

View File

@ -8,6 +8,7 @@ export const sportColors: Record<string, string> = {
Hiking: '#bb757c',
'Mountain Biking': '#d4b371',
'Mountain Biking (Electric)': '#fc9d6f',
Mountaineering: '#48b3b7',
Rowing: '#fcce72',
Running: '#835b83',
'Skiing (Alpine)': '#67a4bd',

View File

@ -30,7 +30,6 @@
#loginOrRegister {
display: flex;
height: 100%;
.container {
display: flex;

View File

@ -1,5 +1,5 @@
<template>
<div id="profile" class="container view" v-if="authUser.username">
<div id="profile" class="view" v-if="authUser.username">
<router-view :user="authUser"></router-view>
<div id="bottom" />
</div>
@ -24,6 +24,7 @@
#profile {
display: flex;
flex-direction: column;
padding: 0 $default-padding;
::v-deep(.profile-form) {
display: flex;

View File

@ -60,8 +60,6 @@
<style lang="scss" scoped>
@import '~@/scss/vars.scss';
#workouts {
height: 100%;
.workouts-container {
display: flex;
flex-direction: row;

View File

@ -0,0 +1,71 @@
import { assert } from 'chai'
import { linkifyAndClean } from '@/utils/inputs'
describe('linkifyAndClean (clean input remains unchanged)', () => {
const testInputs = [
'just a text\nfor "test"',
'link: <a href="http://www.example.com">example</a>',
'link: <a href="http://www.example.com" target="_blank">example</a>',
]
testInputs.map((testInput) => {
it(`it returns unmodified input: '${testInput}'`, () => {
assert.equal(linkifyAndClean(testInput), testInput)
})
})
})
describe('linkifyAndClean (URL is linkified)', () => {
it('it returns URL as link with target blank', () => {
assert.equal(
linkifyAndClean('link: http://www.example.com'),
'link: <a href="http://www.example.com" target="_blank">http://www.example.com</a>'
)
})
})
describe('linkifyAndClean (input sanitization)', () => {
const testsParams = [
{
description: 'it escapes "script" tags',
inputString: "<script>alert('evil!')</script>",
expectedString: "&lt;script&gt;alert('evil!')&lt;/script&gt;",
},
{
description: 'it escapes nested tags',
inputString: '<p><b>test</b></p>',
expectedString: '&lt;p&gt;&lt;b&gt;test&lt;/b&gt;&lt;/p&gt;',
},
{
description: 'it escapes single tag',
inputString: '<p>test',
expectedString: '&lt;p&gt;test&lt;/p&gt;',
},
{
description: 'it removes css classe',
inputString: '<div class="active">test</div>',
expectedString: '&lt;div&gt;test&lt;/div&gt;',
},
{
description: 'it removes style attribute',
inputString: '<div style="display:none;">test</div>',
expectedString: '&lt;div&gt;test&lt;/div&gt;',
},
{
description: 'it keeps nested HTML link',
inputString: '<p><a href="http://www.example.com">example</a></p>',
expectedString:
'&lt;p&gt;<a href="http://www.example.com">example</a>&lt;/p&gt;',
},
]
testsParams.map((testParams) => {
it(testParams.description, () => {
assert.equal(
linkifyAndClean(testParams.inputString),
testParams.expectedString
)
})
})
})

File diff suppressed because it is too large Load Diff