Merge remote-tracking branch 'gitlab/dev' into weblate-fittrackee-fittrackee-client-administration
This commit is contained in:
@ -64,6 +64,7 @@
|
||||
padding: $default-padding;
|
||||
.record {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
span {
|
||||
padding: 2px 5px;
|
||||
@ -73,6 +74,7 @@
|
||||
}
|
||||
.record-value {
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
padding-right: $default-padding * 2;
|
||||
}
|
||||
}
|
||||
|
@ -79,7 +79,6 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ComputedRef, computed, ref, capitalize } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
import UserPicture from '@/components/User/UserPicture.vue'
|
||||
import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'
|
||||
@ -90,7 +89,6 @@
|
||||
|
||||
const emit = defineEmits(['menuInteraction'])
|
||||
|
||||
const { locale } = useI18n()
|
||||
const store = useStore()
|
||||
|
||||
const authUser: ComputedRef<IAuthUserProfile> = computed(
|
||||
@ -113,8 +111,10 @@
|
||||
emit('menuInteraction', false)
|
||||
}
|
||||
function updateLanguage(option: IDropdownOption) {
|
||||
locale.value = option.value.toString()
|
||||
store.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, option.value)
|
||||
store.dispatch(
|
||||
ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,
|
||||
option.value.toString()
|
||||
)
|
||||
}
|
||||
function logout() {
|
||||
store.dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)
|
||||
|
@ -25,7 +25,7 @@
|
||||
:query="query"
|
||||
/>
|
||||
<table>
|
||||
<thead>
|
||||
<thead :class="{ smaller: 'de' === currentLanguage }">
|
||||
<tr>
|
||||
<th class="sport-col" />
|
||||
<th>{{ capitalize($t('workouts.WORKOUT', 1)) }}</th>
|
||||
@ -79,7 +79,7 @@
|
||||
:display-hover="true"
|
||||
/>
|
||||
</td>
|
||||
<td>
|
||||
<td class="workout-date">
|
||||
<span class="cell-heading">
|
||||
{{ $t('workouts.DATE') }}
|
||||
</span>
|
||||
@ -179,7 +179,7 @@
|
||||
import Pagination from '@/components/Common/Pagination.vue'
|
||||
import StaticMap from '@/components/Common/StaticMap.vue'
|
||||
import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'
|
||||
import { WORKOUTS_STORE } from '@/store/constants'
|
||||
import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'
|
||||
import { IPagination } from '@/types/api'
|
||||
import { ITranslatedSport } from '@/types/sports'
|
||||
import { IAuthUserProfile } from '@/types/user'
|
||||
@ -214,6 +214,9 @@
|
||||
const pagination: ComputedRef<IPagination> = computed(
|
||||
() => store.getters[WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]
|
||||
)
|
||||
const currentLanguage: ComputedRef<string> = computed(
|
||||
() => store.getters[ROOT_STORE.GETTERS.LANGUAGE]
|
||||
)
|
||||
let query: TWorkoutsPayload = getWorkoutsQuery(route.query)
|
||||
const hoverWorkoutId: Ref<string | null> = ref(null)
|
||||
|
||||
@ -238,9 +241,14 @@
|
||||
}
|
||||
|
||||
function getWorkoutsQuery(newQuery: LocationQuery): TWorkoutsPayload {
|
||||
const workoutQuery = getQuery(newQuery, orderByList, defaultOrder.order_by, {
|
||||
defaultSort: defaultOrder.order,
|
||||
})
|
||||
const workoutQuery = getQuery(
|
||||
newQuery,
|
||||
orderByList,
|
||||
defaultOrder.order_by,
|
||||
{
|
||||
defaultSort: defaultOrder.order,
|
||||
}
|
||||
)
|
||||
Object.keys(newQuery)
|
||||
.filter((k) => workoutsPayloadKeys.includes(k))
|
||||
.map((k) => {
|
||||
@ -287,7 +295,7 @@
|
||||
width: 100%;
|
||||
|
||||
.box {
|
||||
padding: $default-padding $default-padding * 2;
|
||||
padding: $default-padding $default-padding * 1.5;
|
||||
@media screen and (max-width: $small-limit) {
|
||||
&.empty-table {
|
||||
display: none;
|
||||
@ -318,11 +326,22 @@
|
||||
}
|
||||
|
||||
.workouts-table {
|
||||
.smaller {
|
||||
th {
|
||||
font-size: 0.95em;
|
||||
padding: $default-padding 0;
|
||||
max-width: 100px;
|
||||
}
|
||||
}
|
||||
td {
|
||||
text-align: right;
|
||||
}
|
||||
.sport-col {
|
||||
padding-right: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.workout-title {
|
||||
max-width: 90px;
|
||||
text-align: left;
|
||||
width: 100px;
|
||||
position: relative;
|
||||
.fa-map-o {
|
||||
font-size: 0.75em;
|
||||
@ -347,14 +366,27 @@
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
.workout-date {
|
||||
max-width: 60px;
|
||||
text-align: left;
|
||||
}
|
||||
@media screen and (max-width: $small-limit) {
|
||||
td,
|
||||
.workout-date,
|
||||
.workout-title {
|
||||
text-align: center;
|
||||
}
|
||||
.sport-col {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: $default-padding;
|
||||
}
|
||||
.workout-date {
|
||||
max-width: initial;
|
||||
}
|
||||
.workout-title {
|
||||
max-width: initial;
|
||||
width: 100%;
|
||||
}
|
||||
.workout-title:hover .static-map {
|
||||
display: none;
|
||||
|
6
fittrackee_client/src/locales/de/about.json
Normal file
6
fittrackee_client/src/locales/de/about.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"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"
|
||||
}
|
59
fittrackee_client/src/locales/de/administration.json
Normal file
59
fittrackee_client/src/locales/de/administration.json
Normal file
@ -0,0 +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"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"SELECTS": {
|
||||
"ORDER_BY": {
|
||||
"ADMIN": "Adminstatus",
|
||||
"CREATED_AT": "Registrierungsdatum",
|
||||
"IS_ACTIVE": "Accountstatus",
|
||||
"USERNAME": "Nutzername",
|
||||
"WORKOUTS_COUNT": "Trainingsanzahl"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
34
fittrackee_client/src/locales/de/api.json
Normal file
34
fittrackee_client/src/locales/de/api.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"ERROR": {
|
||||
"UNKNOWN": "Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.",
|
||||
"email: valid email must be provided": "E-Mail: Eine gültige E-Mail muss angegeben werden.",
|
||||
"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.",
|
||||
"error, registration is disabled": "Fehler. Die Registrierung ist deaktiviert.",
|
||||
"file extension not allowed": "Dateierweiterung ist nicht erlaubt.",
|
||||
"file size is greater than the allowed size": "Die Datei ist größer als erlaubt.",
|
||||
"invalid credentials": "Ungültige Anmeldedaten.",
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"you do not have permissions": "Du hast keine Berechtigung."
|
||||
},
|
||||
"PAGINATION": {
|
||||
"PREVIOUS": "Vorhergehende",
|
||||
"NEXT": "Nächste"
|
||||
}
|
||||
}
|
17
fittrackee_client/src/locales/de/buttons.json
Normal file
17
fittrackee_client/src/locales/de/buttons.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"ACCOUNT-CONFIRMATION-RESEND": "Bestätigungs-E-Mail erneut senden",
|
||||
"BACK": "Zurück",
|
||||
"CANCEL": "Abbrechen",
|
||||
"CLEAR_FILTER": "Filter löschen",
|
||||
"DELETE_MY_ACCOUNT": "Lösche meinen Account",
|
||||
"DISABLE": "Deaktivieren",
|
||||
"EDIT": "Editieren",
|
||||
"ENABLE": "Aktivieren",
|
||||
"FILTER": "Filter",
|
||||
"LOGIN": "Einloggen",
|
||||
"NO": "Nein",
|
||||
"REGISTER": "Registrieren",
|
||||
"RESET": "Zurücksetzen",
|
||||
"SUBMIT": "Speichern",
|
||||
"YES": "Ja"
|
||||
}
|
23
fittrackee_client/src/locales/de/common.json
Normal file
23
fittrackee_client/src/locales/de/common.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"ABOUT": "Über",
|
||||
"CONFIRMATION": "Bestätigung",
|
||||
"CONTACT": "Kontakt",
|
||||
"DAY": "Tag | Tage",
|
||||
"DOCUMENTATION": "Dokumentation (en)",
|
||||
"HOME": "Startseite",
|
||||
"HERE": "hier",
|
||||
"SELECTS": {
|
||||
"ORDER_BY": {
|
||||
"LABEL": "sortiert nach"
|
||||
},
|
||||
"ORDER": {
|
||||
"LABEL": "sortieren",
|
||||
"ASC": "aufsteigend",
|
||||
"DESC": "absteigend"
|
||||
},
|
||||
"PER_PAGE": {
|
||||
"LABEL": "pro Seite"
|
||||
}
|
||||
},
|
||||
"TOTAL": "Insgesamt"
|
||||
}
|
4
fittrackee_client/src/locales/de/dashboard.json
Normal file
4
fittrackee_client/src/locales/de/dashboard.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"DASHBOARD": "Dashboard",
|
||||
"THIS_MONTH": "Dieser Monat"
|
||||
}
|
25
fittrackee_client/src/locales/de/de.ts
Normal file
25
fittrackee_client/src/locales/de/de.ts
Normal file
@ -0,0 +1,25 @@
|
||||
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 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,
|
||||
sports: SportsTranslations,
|
||||
statistics: StatisticsTranslations,
|
||||
user: UserTranslations,
|
||||
workouts: WorkoutsTranslations,
|
||||
}
|
9
fittrackee_client/src/locales/de/error.json
Normal file
9
fittrackee_client/src/locales/de/error.json
Normal file
@ -0,0 +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"
|
||||
}
|
38
fittrackee_client/src/locales/de/sports.json
Normal file
38
fittrackee_client/src/locales/de/sports.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"Cycling (Sport)": {
|
||||
"LABEL": "Radfahren (Sport)"
|
||||
},
|
||||
"Cycling (Transport)": {
|
||||
"LABEL": "Radfahren (Pendeln)"
|
||||
},
|
||||
"Hiking": {
|
||||
"LABEL": "Wandern"
|
||||
},
|
||||
"Mountain Biking": {
|
||||
"LABEL": "Mountainbiken"
|
||||
},
|
||||
"Mountain Biking (Electric)": {
|
||||
"LABEL": "Mountainbiken (elektrisch)"
|
||||
},
|
||||
"Rowing": {
|
||||
"LABEL": "Rudern"
|
||||
},
|
||||
"Running": {
|
||||
"LABEL": "Laufen"
|
||||
},
|
||||
"Skiing (Alpine)": {
|
||||
"LABEL": "Skifahren (Alpin)"
|
||||
},
|
||||
"Skiing (Cross Country)": {
|
||||
"LABEL": "Skifahren (Langlauf)"
|
||||
},
|
||||
"Snowshoes": {
|
||||
"LABEL": "Schneeschuhe"
|
||||
},
|
||||
"Trail": {
|
||||
"LABEL": "Trail"
|
||||
},
|
||||
"Walking": {
|
||||
"LABEL": "Walking"
|
||||
}
|
||||
}
|
8
fittrackee_client/src/locales/de/statistics.json
Normal file
8
fittrackee_client/src/locales/de/statistics.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"STATISTICS": "Statistik",
|
||||
"TIME_FRAMES": {
|
||||
"week": "Woche",
|
||||
"month": "Monat",
|
||||
"year": "Jahr"
|
||||
}
|
||||
}
|
108
fittrackee_client/src/locales/de/user.json
Normal file
108
fittrackee_client/src/locales/de/user.json
Normal file
@ -0,0 +1,108 @@
|
||||
{
|
||||
"ACCOUNT_CONFIRMATION_NOT_RECEIVED": "Hast du keine Anweisungen erhalten?",
|
||||
"ACCOUNT_CONFIRMATION_SENT": "Prüfe Deine E-Mail. Eine neue Bestätigungsemail wurde an die angegebene Adresse geschickt.",
|
||||
"ADMIN": "Admin",
|
||||
"ALREADY_HAVE_ACCOUNT": "Hast du bereits ein Konto?",
|
||||
"CONFIRM_ACCOUNT_DELETION": "Möchtest Du Dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.",
|
||||
"CURRENT_PASSWORD": "Aktuelles Passwort",
|
||||
"EMAIL": "E-Mail",
|
||||
"EMAIL_INFO": "Gebe eine gültige E-Mail-Adresse an.",
|
||||
"ENTER_PASSWORD": "Gebe ein Passwort ein",
|
||||
"FILTER_ON_USERNAME": "Nach Benutzernamen filtern",
|
||||
"HIDE_PASSWORD": "Passwort verbergen",
|
||||
"INVALID_TOKEN": "Ungültiges Token, bitte fordere ein neues Passworts an.",
|
||||
"LANGUAGE": "Sprache",
|
||||
"LOG_IN": "Anmelden",
|
||||
"LOGIN": "Anmeldung",
|
||||
"LOGOUT": "Abmelden",
|
||||
"NEW_PASSWORD": "Neues Passwort",
|
||||
"NO_USERS_FOUND": "Keine Nutzer gefunden.",
|
||||
"PASSWORD": "Passwort",
|
||||
"PASSWORD_INFO": "Mindestens 8 Zeichen sind erforderlich.",
|
||||
"PASSWORD_FORGOTTEN": "Passwort vergessen?",
|
||||
"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",
|
||||
"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ß.",
|
||||
"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.",
|
||||
"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."
|
||||
}
|
||||
},
|
||||
"PASSWORD_UPDATED": "Dein Passwort wurde aktualisiert. Klicke {0} um dich anzumelden.",
|
||||
"PROFILE": {
|
||||
"ACCOUNT_EDITION": "Kontoausgabe",
|
||||
"BACK_TO_PROFILE": "Zurück zum Profil",
|
||||
"BIO": "Biographie",
|
||||
"BIRTH_DATE": "Geburtsdatum",
|
||||
"EDIT": "Profil bearbeiten",
|
||||
"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",
|
||||
"LANGUAGE": "Sprache",
|
||||
"LAST_NAME": "Nachname",
|
||||
"LOCATION": "Ort",
|
||||
"MONDAY": "Montag",
|
||||
"PICTURE": "Bild",
|
||||
"PICTURE_EDITION": "Bildausgabe",
|
||||
"PICTURE_UPDATE": "Bild aktualisieren",
|
||||
"PICTURE_REMOVE": "Bild entfernen",
|
||||
"PREFERENCES_EDITION": "Einstellungsausgabe",
|
||||
"PROFILE_EDITION": "Profil-Ausgabe",
|
||||
"REGISTRATION_DATE": "Regirierungsdatum",
|
||||
"SPORTS_EDITION": "Sportarten-Einstellungsausgabe",
|
||||
"SUNDAY": "Sontag",
|
||||
"TABS": {
|
||||
"ACCOUNT": "Konto",
|
||||
"PICTURE": "Bild",
|
||||
"PREFERENCES": "Einstellungen",
|
||||
"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.",
|
||||
"UNITS": {
|
||||
"LABEL": "Einheiten für die Distanz",
|
||||
"IMPERIAL": "Imperiales System (ft, mi)",
|
||||
"METRIC": "Metrisches System (m, km)"
|
||||
},
|
||||
"TIMEZONE": "Zeitzone"
|
||||
},
|
||||
"REGISTER": "Registrieren",
|
||||
"RESENT_ACCOUNT_CONFIRMATION": "Sende Email zur Kontobestätigung erneut",
|
||||
"REGISTER_DISABLED": "Entschuldigung, die Registrierung ist deaktiviert.",
|
||||
"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."
|
||||
}
|
101
fittrackee_client/src/locales/de/workouts.json
Normal file
101
fittrackee_client/src/locales/de/workouts.json
Normal file
@ -0,0 +1,101 @@
|
||||
{
|
||||
"ADD_WORKOUT": "Training hinzufügen",
|
||||
"ANALYSIS": "Analyse",
|
||||
"ASCENT": "Aufstieg",
|
||||
"AVE_SPEED": "Durchschn. Geschwindigkeit",
|
||||
"AVERAGE_SPEED": "Durchschnittsgeschwindigkeit",
|
||||
"BACK_TO_WORKOUT": "zurück zum Training",
|
||||
"DATE": "Datum",
|
||||
"DESCENT": "Abstieg",
|
||||
"DISPLAY_FILTERS": "zeige Filter",
|
||||
"DISTANCE": "Entfernung",
|
||||
"DURATION": "Dauer",
|
||||
"EDIT_WORKOUT": "Training bearbeiten",
|
||||
"ELEVATION": "Höhe",
|
||||
"END": "Ende",
|
||||
"FROM": "Von",
|
||||
"GPX_FILE": ".gpx Datei",
|
||||
"HIDE_FILTERS": "verberge Filter",
|
||||
"LATEST_WORKOUTS": "Letzte Trainings",
|
||||
"LOAD_MORE_WORKOUT": "Lade mehr Trainings",
|
||||
"MAX_ALTITUDE": "maximale Höhe",
|
||||
"MAX_FILES": "Maximale Dateianzahl",
|
||||
"MAX_SIZE": "Maximalgröße",
|
||||
"MAX_SPEED": "Max. Geschwindigkeit",
|
||||
"MIN_ALTITUDE": "minimale Höhe",
|
||||
"NEXT_SEGMENT": "Nächstes Segment",
|
||||
"NEXT_WORKOUT": "Nächstes Training",
|
||||
"NO_DATA_CLEANING": "Daten aus gpx, ohne Bereinigung",
|
||||
"NO_FILE_PROVIDED": "Keine Datei angegeben",
|
||||
"NO_FOLDER": "enthält keinen Ordner",
|
||||
"NO_MAP": "Keine Karte",
|
||||
"NO_NEXT_SEGMENT": "Kein nächstes Segment",
|
||||
"NO_NEXT_WORKOUT": "Kein nächstes Training",
|
||||
"NO_NOTES": "Keine Anmerkungen",
|
||||
"NO_PREVIOUS_SEGMENT": "Kein vorheriges Segment",
|
||||
"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",
|
||||
"RECORD": "Aufzeichnung | Aufzeichnungen",
|
||||
"RECORD_AS": "Durchschn. Geschwindigkeit",
|
||||
"RECORD_FD": "Weiteste Entfernung",
|
||||
"RECORD_LD": "Längste Dauer",
|
||||
"RECORD_MS": "Max. Geschwindigkeit",
|
||||
"REMAINING_CHARS": "remaining characters",
|
||||
"SEGMENT": "Segment | Segmente",
|
||||
"SPEED": "Geschwindigkeit",
|
||||
"SPORT": "Sportart | Sportarten",
|
||||
"START": "Start",
|
||||
"START_AND_FINISH": "Start und Ziel",
|
||||
"START_ELEVATION_AT_ZERO": "Höhenachse bei Null starten",
|
||||
"TITLE": "Titel",
|
||||
"TO": "bis",
|
||||
"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",
|
||||
"cloudy": "wolkig",
|
||||
"fog": "Nebel",
|
||||
"partly-cloudy-day": "teilweise bewölkter Tag",
|
||||
"partly-cloudy-night": "teilweise bewölkte Nacht",
|
||||
"rain": "Regen",
|
||||
"sleet": "Schneeregen",
|
||||
"snow": "Schnee",
|
||||
"wind": "Wind"
|
||||
}
|
||||
},
|
||||
"WITH_GPX": "mit .gpx Datei",
|
||||
"WITHOUT_GPX": "ohne .gpx Datei",
|
||||
"WORKOUT": "Training | Trainings",
|
||||
"WORKOUT_DATE": "Trainingsdatum",
|
||||
"WORKOUT_DELETION_CONFIRMATION": "Bist du sicher, dass du dieses Training löschen möchtest?",
|
||||
"ZIP_ARCHIVE": ".zip Datei",
|
||||
"ZIP_ARCHIVE_DESCRIPTION": "oder .zip Datei mit .gpx Dateien"
|
||||
}
|
@ -2,7 +2,6 @@ import { ActionContext, ActionTree } from 'vuex'
|
||||
|
||||
import authApi from '@/api/authApi'
|
||||
import api from '@/api/defaultApi'
|
||||
import createI18n from '@/i18n'
|
||||
import router from '@/router'
|
||||
import {
|
||||
AUTH_USER_STORE,
|
||||
@ -32,8 +31,6 @@ import {
|
||||
} from '@/types/user'
|
||||
import { handleError } from '@/utils'
|
||||
|
||||
const { locale } = createI18n.global
|
||||
|
||||
const removeAuthUserData = (
|
||||
context: ActionContext<IAuthUserState, IRootState>
|
||||
) => {
|
||||
@ -126,11 +123,10 @@ export const actions: ActionTree<IAuthUserState, IRootState> &
|
||||
res.data.data
|
||||
)
|
||||
if (res.data.data.language) {
|
||||
context.commit(
|
||||
ROOT_STORE.MUTATIONS.UPDATE_LANG,
|
||||
context.dispatch(
|
||||
ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,
|
||||
res.data.data.language
|
||||
)
|
||||
locale.value = res.data.data.language
|
||||
}
|
||||
context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)
|
||||
} else {
|
||||
@ -251,12 +247,12 @@ export const actions: ActionTree<IAuthUserState, IRootState> &
|
||||
AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,
|
||||
res.data.data
|
||||
)
|
||||
context.commit(
|
||||
ROOT_STORE.MUTATIONS.UPDATE_LANG,
|
||||
res.data.data.language
|
||||
)
|
||||
locale.value = res.data.data.language
|
||||
router.push('/profile/preferences')
|
||||
context
|
||||
.dispatch(
|
||||
ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,
|
||||
res.data.data.language
|
||||
)
|
||||
.then(() => router.push('/profile/preferences'))
|
||||
} else {
|
||||
handleError(context, null)
|
||||
}
|
||||
|
@ -1,12 +1,15 @@
|
||||
import { ActionContext, ActionTree } from 'vuex'
|
||||
|
||||
import authApi from '@/api/authApi'
|
||||
import createI18n from '@/i18n'
|
||||
import router from '@/router'
|
||||
import { ROOT_STORE } from '@/store/constants'
|
||||
import { IRootActions, IRootState } from '@/store/modules/root/types'
|
||||
import { TAppConfigForm } from '@/types/application'
|
||||
import { handleError } from '@/utils'
|
||||
|
||||
const { locale } = createI18n.global
|
||||
|
||||
export const actions: ActionTree<IRootState, IRootState> & IRootActions = {
|
||||
[ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG](
|
||||
context: ActionContext<IRootState, IRootState>
|
||||
@ -68,4 +71,12 @@ export const actions: ActionTree<IRootState, IRootState> & IRootActions = {
|
||||
})
|
||||
.catch((error) => handleError(context, error))
|
||||
},
|
||||
[ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](
|
||||
context: ActionContext<IRootState, IRootState>,
|
||||
language: string
|
||||
): void {
|
||||
document.querySelector('html')?.setAttribute('lang', language)
|
||||
context.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, language)
|
||||
locale.value = language
|
||||
},
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ export enum RootActions {
|
||||
GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',
|
||||
GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',
|
||||
UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',
|
||||
UPDATE_APPLICATION_LANGUAGE = 'UPDATE_APPLICATION_LANGUAGE',
|
||||
}
|
||||
|
||||
export enum RootGetters {
|
||||
|
@ -34,6 +34,10 @@ export interface IRootActions {
|
||||
context: ActionContext<IRootState, IRootState>,
|
||||
payload: TAppConfigForm
|
||||
): void
|
||||
[ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](
|
||||
context: ActionContext<IRootState, IRootState>,
|
||||
langauge: string
|
||||
): void
|
||||
}
|
||||
|
||||
export interface IRootGetters {
|
||||
|
@ -1,15 +1,17 @@
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { Locale } from 'date-fns'
|
||||
import { enUS, fr } from 'date-fns/locale'
|
||||
import { de, enUS, fr } from 'date-fns/locale'
|
||||
|
||||
import createI18n from '@/i18n'
|
||||
|
||||
export const localeFromLanguage: Record<string, Locale> = {
|
||||
de: de,
|
||||
en: enUS,
|
||||
fr: fr,
|
||||
}
|
||||
|
||||
export const languageLabels: Record<string, string> = {
|
||||
de: 'Deutsch',
|
||||
en: 'English',
|
||||
fr: 'Français',
|
||||
}
|
||||
|
Reference in New Issue
Block a user