diff --git a/fittrackee/emails/templates/account_confirmation/de/body.html b/fittrackee/emails/templates/account_confirmation/de/body.html
new file mode 100644
index 00000000..905d6165
--- /dev/null
+++ b/fittrackee/emails/templates/account_confirmation/de/body.html
@@ -0,0 +1,32 @@
+{% extends "layout.html" %}
+{% block title %}Confirm your account{% endblock %}
+{% block preheader %}Use this link to confirm your account.{% endblock %}
+{% block content %}
Hi {{username}},
+ You have created an account on FitTrackee account. Use the link below to confirm your address email.
+
+
+ {% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+ {% endif %}If this account creation wasn't initiated by you, please ignore this email.
+
+ Thanks,
+
The FitTrackee Team
+
+
+
+ If you’re having trouble with the button above, copy and paste the URL below into your web browser.
+ {{account_confirmation_url}}
+ |
+
+
{% endblock %}
\ No newline at end of file
diff --git a/fittrackee/emails/templates/account_confirmation/de/body.txt b/fittrackee/emails/templates/account_confirmation/de/body.txt
new file mode 100644
index 00000000..74d42d2d
--- /dev/null
+++ b/fittrackee/emails/templates/account_confirmation/de/body.txt
@@ -0,0 +1,12 @@
+Hi {{username}},
+
+You have created an account on FitTrackee account. Use the link below to confirm your address email.
+
+Verify your email: {{ account_confirmation_url }}
+
+{% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+{% endif %}If this account creation wasn't initiated by you, please ignore this email.
+
+Thanks,
+The FitTrackee Team
+{{fittrackee_url}}
diff --git a/fittrackee/emails/templates/account_confirmation/de/subject.txt b/fittrackee/emails/templates/account_confirmation/de/subject.txt
new file mode 100644
index 00000000..9d674bf7
--- /dev/null
+++ b/fittrackee/emails/templates/account_confirmation/de/subject.txt
@@ -0,0 +1 @@
+FitTrackee - Confirm your account
\ No newline at end of file
diff --git a/fittrackee/emails/templates/email_update_to_current_email/de/body.html b/fittrackee/emails/templates/email_update_to_current_email/de/body.html
new file mode 100644
index 00000000..9db94dbd
--- /dev/null
+++ b/fittrackee/emails/templates/email_update_to_current_email/de/body.html
@@ -0,0 +1,26 @@
+{% extends "layout.html" %}
+{% block title %}Email changed{% endblock %}
+{% block preheader %}Your email is being updated.{% endblock %}
+{% block content %}Hi {{username}},
+ You recently requested to change your email address for your FitTrackee account to:
+
+
+
+
+
+
+ {{new_email_address}}
+ |
+
+
+ |
+
+
+
+ For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+ If this email change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.
+
+ Thanks,
+
+ The FitTrackee Team
+
{% endblock %}
\ No newline at end of file
diff --git a/fittrackee/emails/templates/email_update_to_current_email/de/body.txt b/fittrackee/emails/templates/email_update_to_current_email/de/body.txt
new file mode 100644
index 00000000..4e1f0929
--- /dev/null
+++ b/fittrackee/emails/templates/email_update_to_current_email/de/body.txt
@@ -0,0 +1,10 @@
+Hi {{username}},
+
+You recently requested to change your email address for your FitTrackee account to: {{ new_email_address }}
+
+For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+If this email change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.
+
+Thanks,
+The FitTrackee Team
+{{fittrackee_url}}
diff --git a/fittrackee/emails/templates/email_update_to_current_email/de/subject.txt b/fittrackee/emails/templates/email_update_to_current_email/de/subject.txt
new file mode 100644
index 00000000..990157cc
--- /dev/null
+++ b/fittrackee/emails/templates/email_update_to_current_email/de/subject.txt
@@ -0,0 +1 @@
+FitTrackee - Email changed
\ No newline at end of file
diff --git a/fittrackee/emails/templates/email_update_to_new_email/de/body.html b/fittrackee/emails/templates/email_update_to_new_email/de/body.html
new file mode 100644
index 00000000..6a27eeca
--- /dev/null
+++ b/fittrackee/emails/templates/email_update_to_new_email/de/body.html
@@ -0,0 +1,32 @@
+{% extends "layout.html" %}
+{% block title %}Confirm email change{% endblock %}
+{% block preheader %}Use this link to confirm email change.{% endblock %}
+{% block content %}Hi {{username}},
+ You recently requested to change your email address for your FitTrackee account. Use the button below to confirm this address.
+
+
+ {% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+ {% endif %}If this email change wasn't initiated by you, please ignore this email.
+
+ Thanks,
+
The FitTrackee Team
+
+
+
+ If you’re having trouble with the button above, copy and paste the URL below into your web browser.
+ {{email_confirmation_url}}
+ |
+
+
{% endblock %}
\ No newline at end of file
diff --git a/fittrackee/emails/templates/email_update_to_new_email/de/body.txt b/fittrackee/emails/templates/email_update_to_new_email/de/body.txt
new file mode 100644
index 00000000..9234510b
--- /dev/null
+++ b/fittrackee/emails/templates/email_update_to_new_email/de/body.txt
@@ -0,0 +1,12 @@
+Hi {{username}},
+
+You recently requested to change your email address for your FitTrackee account. Use the link below to confirm this address.
+
+Verify your email: {{ email_confirmation_url }}
+
+{% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+{% endif %}If this email change wasn't initiated by you, please ignore this email.
+
+Thanks,
+The FitTrackee Team
+{{fittrackee_url}}
diff --git a/fittrackee/emails/templates/email_update_to_new_email/de/subject.txt b/fittrackee/emails/templates/email_update_to_new_email/de/subject.txt
new file mode 100644
index 00000000..9b73071c
--- /dev/null
+++ b/fittrackee/emails/templates/email_update_to_new_email/de/subject.txt
@@ -0,0 +1 @@
+FitTrackee - Confirm email change
\ No newline at end of file
diff --git a/fittrackee/emails/templates/password_change/de/body.html b/fittrackee/emails/templates/password_change/de/body.html
new file mode 100644
index 00000000..345009d1
--- /dev/null
+++ b/fittrackee/emails/templates/password_change/de/body.html
@@ -0,0 +1,13 @@
+{% extends "layout.html" %}
+{% block title %}Password changed{% endblock %}
+{% block preheader %}Your password has been changed.{% endblock %}
+{% block content %}Hi {{username}},
+ The password for your FitTrackee account has been changed.
+
+ {% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+ {% endif %}If this password change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.
+
+ Thanks,
+
+ The FitTrackee Team
+
{% endblock %}
\ No newline at end of file
diff --git a/fittrackee/emails/templates/password_change/de/body.txt b/fittrackee/emails/templates/password_change/de/body.txt
new file mode 100644
index 00000000..9675f8a6
--- /dev/null
+++ b/fittrackee/emails/templates/password_change/de/body.txt
@@ -0,0 +1,10 @@
+Hi {{username}},
+
+The password for your FitTrackee account has been changed.
+
+{% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+{% endif %}If this password change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.
+
+Thanks,
+The FitTrackee Team
+{{fittrackee_url}}
diff --git a/fittrackee/emails/templates/password_change/de/subject.txt b/fittrackee/emails/templates/password_change/de/subject.txt
new file mode 100644
index 00000000..2669367f
--- /dev/null
+++ b/fittrackee/emails/templates/password_change/de/subject.txt
@@ -0,0 +1 @@
+FitTrackee - Password changed
\ No newline at end of file
diff --git a/fittrackee/emails/templates/password_reset_request/de/body.html b/fittrackee/emails/templates/password_reset_request/de/body.html
new file mode 100644
index 00000000..f5c3ac20
--- /dev/null
+++ b/fittrackee/emails/templates/password_reset_request/de/body.html
@@ -0,0 +1,34 @@
+{% extends "layout.html" %}
+{% block title %}Password reset request{% endblock %}
+{% block preheader %}Use this link to reset your password. The link is only valid for {{ expiration_delay }}.{% endblock %}
+{% block content %}Hi {{username}},
+ You recently requested to reset your password for your account. Use the button below to reset it.
+ This password reset link is only valid for {{ expiration_delay }}.
+
+
+
+ {% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+ {% endif %}If you did not request a password reset, please ignore this email.
+
+ Thanks,
+
The FitTrackee Team
+
+
+
+ If you’re having trouble with the button above, copy and paste the URL below into your web browser.
+ {{password_reset_url}}
+ |
+
+
{% endblock %}
\ No newline at end of file
diff --git a/fittrackee/emails/templates/password_reset_request/de/body.txt b/fittrackee/emails/templates/password_reset_request/de/body.txt
new file mode 100644
index 00000000..e988062d
--- /dev/null
+++ b/fittrackee/emails/templates/password_reset_request/de/body.txt
@@ -0,0 +1,12 @@
+Hi {{username}},
+
+You recently requested to reset your password for your FitTrackee account. Use the link below to reset it. This password reset link is only valid for {{ expiration_delay }}.
+
+Reset your password: {{ password_reset_url }}
+
+{% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}.
+{% endif %}If you did not request a password reset, please ignore this email.
+
+Thanks,
+The FitTrackee Team
+{{fittrackee_url}}
diff --git a/fittrackee/emails/templates/password_reset_request/de/subject.txt b/fittrackee/emails/templates/password_reset_request/de/subject.txt
new file mode 100644
index 00000000..d8033bea
--- /dev/null
+++ b/fittrackee/emails/templates/password_reset_request/de/subject.txt
@@ -0,0 +1 @@
+FitTrackee - Password reset request
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/de/about.json b/fittrackee_client/src/locales/de/about.json
new file mode 100644
index 00000000..5103c517
--- /dev/null
+++ b/fittrackee_client/src/locales/de/about.json
@@ -0,0 +1,6 @@
+{
+ "CONTACT_ADMIN": "Contact the administrator",
+ "FITTRACKEE_DESCRIPTION": "FitTrackee is a self-hosted outdoor activity tracker.",
+ "FITTRACKEE_LICENSE": "under {0} license ",
+ "SOURCE_CODE": "Source code"
+}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/de/administration.json b/fittrackee_client/src/locales/de/administration.json
new file mode 100644
index 00000000..f768d123
--- /dev/null
+++ b/fittrackee_client/src/locales/de/administration.json
@@ -0,0 +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"
+ },
+ "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"
+ },
+ "SELECTS": {
+ "ORDER_BY": {
+ "ADMIN": "admin status",
+ "CREATED_AT": "registration date",
+ "IS_ACTIVE": "account status",
+ "USERNAME": "username",
+ "WORKOUTS_COUNT": "workout count"
+ }
+ }
+ }
+}
diff --git a/fittrackee_client/src/locales/de/api.json b/fittrackee_client/src/locales/de/api.json
new file mode 100644
index 00000000..8a0ff3b4
--- /dev/null
+++ b/fittrackee_client/src/locales/de/api.json
@@ -0,0 +1,34 @@
+{
+ "ERROR": {
+ "UNKNOWN": "Error. Please try again or contact the administrator.",
+ "email: valid email must be provided": "Email: valid email must be provided.",
+ "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"
+ }
+}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/de/buttons.json b/fittrackee_client/src/locales/de/buttons.json
new file mode 100644
index 00000000..6b97d2ee
--- /dev/null
+++ b/fittrackee_client/src/locales/de/buttons.json
@@ -0,0 +1,17 @@
+{
+ "ACCOUNT-CONFIRMATION-RESEND": "Resend confirmation email",
+ "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"
+}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/de/common.json b/fittrackee_client/src/locales/de/common.json
new file mode 100644
index 00000000..077ccf24
--- /dev/null
+++ b/fittrackee_client/src/locales/de/common.json
@@ -0,0 +1,23 @@
+{
+ "ABOUT": "about",
+ "CONFIRMATION": "Confirmation",
+ "CONTACT": "contact",
+ "DAY": "day | days",
+ "DOCUMENTATION": "documentation",
+ "HOME": "Home",
+ "HERE": "here",
+ "SELECTS": {
+ "ORDER_BY": {
+ "LABEL": "order by"
+ },
+ "ORDER": {
+ "LABEL": "sort",
+ "ASC": "ascending",
+ "DESC": "descending"
+ },
+ "PER_PAGE": {
+ "LABEL": "par page"
+ }
+ },
+ "TOTAL": "Total"
+}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/de/dashboard.json b/fittrackee_client/src/locales/de/dashboard.json
new file mode 100644
index 00000000..598014dc
--- /dev/null
+++ b/fittrackee_client/src/locales/de/dashboard.json
@@ -0,0 +1,4 @@
+{
+ "DASHBOARD": "Dashboard",
+ "THIS_MONTH": "This month"
+}
diff --git a/fittrackee_client/src/locales/de/de.ts b/fittrackee_client/src/locales/de/de.ts
new file mode 100644
index 00000000..26b7052d
--- /dev/null
+++ b/fittrackee_client/src/locales/de/de.ts
@@ -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,
+}
diff --git a/fittrackee_client/src/locales/de/error.json b/fittrackee_client/src/locales/de/error.json
new file mode 100644
index 00000000..9f687794
--- /dev/null
+++ b/fittrackee_client/src/locales/de/error.json
@@ -0,0 +1,9 @@
+{
+ "UNKNOWN": "Error. Please try again or contact the administrator.",
+ "APP_ERROR": "The application seems to have encountered some issues.
Please try again later or contact the administrator.",
+ "NOT_FOUND": {
+ "PAGE": "Page not found",
+ "WORKOUT": "Workout not found"
+ },
+ "SOMETHING_WRONG": "Something went wrong"
+}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/de/sports.json b/fittrackee_client/src/locales/de/sports.json
new file mode 100644
index 00000000..d4b44ab4
--- /dev/null
+++ b/fittrackee_client/src/locales/de/sports.json
@@ -0,0 +1,38 @@
+{
+ "Cycling (Sport)": {
+ "LABEL": "Cycling (Sport)"
+ },
+ "Cycling (Transport)": {
+ "LABEL": "Cycling (Transport)"
+ },
+ "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"
+ }
+}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/de/statistics.json b/fittrackee_client/src/locales/de/statistics.json
new file mode 100644
index 00000000..ecd2cbfe
--- /dev/null
+++ b/fittrackee_client/src/locales/de/statistics.json
@@ -0,0 +1,8 @@
+{
+ "STATISTICS": "Statistics",
+ "TIME_FRAMES": {
+ "week": "week",
+ "month": "month",
+ "year": "year"
+ }
+}
diff --git a/fittrackee_client/src/locales/de/user.json b/fittrackee_client/src/locales/de/user.json
new file mode 100644
index 00000000..23f9fb55
--- /dev/null
+++ b/fittrackee_client/src/locales/de/user.json
@@ -0,0 +1,108 @@
+{
+ "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",
+ "BACK_TO_PROFILE": "Back to profile",
+ "BIO": "Bio",
+ "BIRTH_DATE": "Birth date",
+ "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",
+ "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",
+ "PICTURE": "picture",
+ "PREFERENCES": "preferences",
+ "PROFILE": "profile",
+ "SPORTS": "sports"
+ },
+ "SPORT": {
+ "ACTION": "action",
+ "COLOR": "color",
+ "DISABLED_BY_ADMIN": "disabled by admin",
+ "IS_ACTIVE": "active",
+ "LABEL": "label",
+ "STOPPED_SPEED_THRESHOLD": "stopped speed threshold"
+ },
+ "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)",
+ "METRIC": "Metric system (m, km)"
+ },
+ "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."
+}
diff --git a/fittrackee_client/src/locales/de/workouts.json b/fittrackee_client/src/locales/de/workouts.json
new file mode 100644
index 00000000..59be12ca
--- /dev/null
+++ b/fittrackee_client/src/locales/de/workouts.json
@@ -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": "Distanz",
+ "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": "max. altitude",
+ "MAX_FILES": "Maximale Dateianzahl",
+ "MAX_SIZE": "Maximalgröße",
+ "MAX_SPEED": "max. speed",
+ "MIN_ALTITUDE": "min. altitude",
+ "NEXT_SEGMENT": "Nächstes Segment",
+ "NEXT_WORKOUT": "Nächstes Training",
+ "NO_DATA_CLEANING": "Daten aus gpx, ohne Bereinigung",
+ "NO_FILE_PROVIDED": "No file provided",
+ "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": "Eintrag | Einträge",
+ "RECORD_AS": "Ave. speed",
+ "RECORD_FD": "Weiteste Distanz",
+ "RECORD_LD": "Längste Dauer",
+ "RECORD_MS": "Max. speed",
+ "REMAINING_CHARS": "remaining characters",
+ "SEGMENT": "segment | segments",
+ "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"
+}
diff --git a/fittrackee_client/src/utils/locales.ts b/fittrackee_client/src/utils/locales.ts
index 9916e3bc..40cccd89 100644
--- a/fittrackee_client/src/utils/locales.ts
+++ b/fittrackee_client/src/utils/locales.ts
@@ -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 = {
+ de: de,
en: enUS,
fr: fr,
}
export const languageLabels: Record = {
+ de: 'Deutsch',
en: 'English',
fr: 'Français',
}