aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fietsboek/locale/de/LC_MESSAGES/messages.mobin15377 -> 15508 bytes
-rw-r--r--fietsboek/locale/de/LC_MESSAGES/messages.po152
-rw-r--r--fietsboek/locale/en/LC_MESSAGES/messages.mobin14369 -> 14483 bytes
-rw-r--r--fietsboek/locale/en/LC_MESSAGES/messages.po152
-rw-r--r--fietsboek/locale/fietslog.pot156
-rw-r--r--fietsboek/templates/profile.jinja28
-rw-r--r--fietsboek/views/profile.py17
7 files changed, 267 insertions, 218 deletions
diff --git a/fietsboek/locale/de/LC_MESSAGES/messages.mo b/fietsboek/locale/de/LC_MESSAGES/messages.mo
index 3c020df..aeb978d 100644
--- a/fietsboek/locale/de/LC_MESSAGES/messages.mo
+++ b/fietsboek/locale/de/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/fietsboek/locale/de/LC_MESSAGES/messages.po b/fietsboek/locale/de/LC_MESSAGES/messages.po
index 24e1cb5..934ac94 100644
--- a/fietsboek/locale/de/LC_MESSAGES/messages.po
+++ b/fietsboek/locale/de/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-11-10 22:23+0100\n"
+"POT-Creation-Date: 2024-02-02 23:44+0100\n"
"PO-Revision-Date: 2022-07-02 17:35+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n"
@@ -18,54 +18,54 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
-#: fietsboek/actions.py:257
+#: fietsboek/actions.py:267
msgid "email.verify_mail.subject"
msgstr "Fietsboek Konto Bestätigung"
-#: fietsboek/actions.py:260
+#: fietsboek/actions.py:270
msgid "email.verify.text"
msgstr ""
"Um Dein Fietsboek-Konto zu bestätigen, nutze diesen Link: {}\n"
"\n"
"Falls Du kein Konto angelegt hast, ignoriere diese E-Mail."
-#: fietsboek/util.py:306
+#: fietsboek/util.py:307
msgid "password_constraint.mismatch"
msgstr "Passwörter stimmen nicht überein"
-#: fietsboek/util.py:308
+#: fietsboek/util.py:309
msgid "password_constraint.length"
msgstr "Passwort zu kurz"
-#: fietsboek/models/track.py:602
+#: fietsboek/models/track.py:603
msgid "tooltip.table.length"
msgstr "Länge"
-#: fietsboek/models/track.py:603
+#: fietsboek/models/track.py:604
msgid "tooltip.table.people"
msgstr "# Personen"
-#: fietsboek/models/track.py:604
+#: fietsboek/models/track.py:605
msgid "tooltip.table.uphill"
msgstr "Bergauf"
-#: fietsboek/models/track.py:605
+#: fietsboek/models/track.py:606
msgid "tooltip.table.downhill"
msgstr "Bergab"
-#: fietsboek/models/track.py:606
+#: fietsboek/models/track.py:607
msgid "tooltip.table.moving_time"
msgstr "Fahrzeit"
-#: fietsboek/models/track.py:607
+#: fietsboek/models/track.py:608
msgid "tooltip.table.stopped_time"
msgstr "Haltezeit"
-#: fietsboek/models/track.py:609
+#: fietsboek/models/track.py:610
msgid "tooltip.table.max_speed"
msgstr "Maximalgeschwindigkeit"
-#: fietsboek/models/track.py:613
+#: fietsboek/models/track.py:614
msgid "tooltip.table.avg_speed"
msgstr "Durchschnittsgeschwindigkeit"
@@ -462,36 +462,36 @@ msgstr "Markierte Personen"
msgid "page.track.form.add_friend"
msgstr "Freund suchen"
-#: fietsboek/templates/edit_form.jinja2:90
+#: fietsboek/templates/edit_form.jinja2:92
msgid "page.track.form.badges"
msgstr "Wappen"
-#: fietsboek/templates/edit_form.jinja2:101
+#: fietsboek/templates/edit_form.jinja2:103
msgid "page.track.form.description"
msgstr "Beschreibung"
-#: fietsboek/templates/edit_form.jinja2:108
-#: fietsboek/templates/edit_form.jinja2:129
+#: fietsboek/templates/edit_form.jinja2:110
+#: fietsboek/templates/edit_form.jinja2:131
msgid "page.track.form.remove_image"
msgstr "Bild entfernen"
-#: fietsboek/templates/edit_form.jinja2:118
+#: fietsboek/templates/edit_form.jinja2:120
msgid "page.track.form.select_images"
msgstr "Bilder auswählen"
-#: fietsboek/templates/edit_form.jinja2:122
+#: fietsboek/templates/edit_form.jinja2:124
msgid "page.track.form.image_uploads_disabled"
msgstr "Das Hochladen von Bildern ist auf diesem Fietsboek deaktiviert"
-#: fietsboek/templates/edit_form.jinja2:140
+#: fietsboek/templates/edit_form.jinja2:142
msgid "page.track.form.image_description_modal"
msgstr "Bildbeschreibung"
-#: fietsboek/templates/edit_form.jinja2:147
+#: fietsboek/templates/edit_form.jinja2:149
msgid "page.track.form.image_description_modal.save"
msgstr "Übernehmen"
-#: fietsboek/templates/edit_form.jinja2:173
+#: fietsboek/templates/edit_form.jinja2:175
msgid "page.track.form.transformer.enable"
msgstr "Transformation anwenden"
@@ -630,59 +630,67 @@ msgstr "Passwörter stimmen nicht überein"
msgid "page.password_reset.reset"
msgstr "Zurücksetzen"
-#: fietsboek/templates/profile.jinja2:66
+#: fietsboek/templates/profile.jinja2:67
msgid "page.profile.length"
msgstr "Länge"
-#: fietsboek/templates/profile.jinja2:70
+#: fietsboek/templates/profile.jinja2:71
+msgid "page.profile.avg_length"
+msgstr "durchschnittliche Länge"
+
+#: fietsboek/templates/profile.jinja2:75
msgid "page.profile.uphill"
msgstr "Bergauf"
-#: fietsboek/templates/profile.jinja2:74
+#: fietsboek/templates/profile.jinja2:79
msgid "page.profile.downhill"
msgstr "Bergab"
-#: fietsboek/templates/profile.jinja2:78
+#: fietsboek/templates/profile.jinja2:83
msgid "page.profile.moving_time"
msgstr "Fahrzeit"
-#: fietsboek/templates/profile.jinja2:82
+#: fietsboek/templates/profile.jinja2:87
msgid "page.profile.stopped_time"
msgstr "Haltezeit"
-#: fietsboek/templates/profile.jinja2:86
+#: fietsboek/templates/profile.jinja2:91
+msgid "page.profile.avg_duration"
+msgstr "durchschnittliche Dauer"
+
+#: fietsboek/templates/profile.jinja2:95
msgid "page.profile.max_speed"
msgstr "maximale Geschwindigkeit"
-#: fietsboek/templates/profile.jinja2:90
+#: fietsboek/templates/profile.jinja2:99
msgid "page.profile.avg_speed"
msgstr "durchschnittliche Geschwindigkeit"
-#: fietsboek/templates/profile.jinja2:94
+#: fietsboek/templates/profile.jinja2:103
msgid "page.profile.number_of_tracks"
msgstr "Anzahl der Strecken"
-#: fietsboek/templates/profile.jinja2:100
+#: fietsboek/templates/profile.jinja2:109
msgid "page.profile.longest_distance_track"
msgstr "Weiteste Strecke"
-#: fietsboek/templates/profile.jinja2:105
+#: fietsboek/templates/profile.jinja2:114
msgid "page.profile.shortest_distance_track"
msgstr "Kürzeste Strecke"
-#: fietsboek/templates/profile.jinja2:110
+#: fietsboek/templates/profile.jinja2:119
msgid "page.profile.longest_duration_track"
msgstr "Am Längsten Dauernde Strecke"
-#: fietsboek/templates/profile.jinja2:115
+#: fietsboek/templates/profile.jinja2:124
msgid "page.profile.shortest_duration_track"
msgstr "Am Kürzesten Dauernde Strecke"
-#: fietsboek/templates/profile.jinja2:135
+#: fietsboek/templates/profile.jinja2:144
msgid "page.profile.heatmap"
msgstr "Heatmap"
-#: fietsboek/templates/profile.jinja2:140
+#: fietsboek/templates/profile.jinja2:149
msgid "page.profile.tilehunt"
msgstr "Kacheljäger"
@@ -792,87 +800,87 @@ msgstr "E-Mail-Adresse des Freundes"
msgid "page.my_profile.send_friend_request"
msgstr "Freundschaftsanfrage senden"
-#: fietsboek/transformers/breaks.py:31
+#: fietsboek/transformers/breaks.py:32
msgid "transformers.remove-breaks.title"
msgstr "Pausen entfernen"
-#: fietsboek/transformers/breaks.py:35
+#: fietsboek/transformers/breaks.py:36
msgid "transformers.remove-breaks.description"
msgstr "Diese Transformation entfernt längere Pausen aus der Aufnahme."
-#: fietsboek/transformers/elevation.py:42
+#: fietsboek/transformers/elevation.py:43
msgid "transformers.fix-null-elevation.title"
msgstr "Nullhöhen beheben"
-#: fietsboek/transformers/elevation.py:46
+#: fietsboek/transformers/elevation.py:47
msgid "transformers.fix-null-elevation.description"
msgstr ""
"Diese Transformation passt die Höhenangabe für Punkte an, bei denen die "
"Höhenangabe fehlt."
-#: fietsboek/transformers/elevation.py:115
+#: fietsboek/transformers/elevation.py:116
msgid "transformers.fix-elevation-jumps"
msgstr "Höhensprünge beheben"
-#: fietsboek/transformers/elevation.py:119
+#: fietsboek/transformers/elevation.py:120
msgid "transformers.fix-elevation-jumps.description"
msgstr ""
"Diese Transformation passt die Höhenangabe für Punkte an, bei denen die "
"Höhe sprunghaft steigt oder fällt."
-#: fietsboek/views/account.py:53
+#: fietsboek/views/account.py:54
msgid "flash.invalid_name"
msgstr "Ungültiger Name"
-#: fietsboek/views/account.py:58
+#: fietsboek/views/account.py:59
msgid "flash.invalid_email"
msgstr "Ungültige E-Mail-Adresse"
-#: fietsboek/views/account.py:68
+#: fietsboek/views/account.py:69
msgid "flash.a_confirmation_link_has_been_sent"
msgstr "Ein Bestätigungslink wurde versandt"
-#: fietsboek/views/admin.py:48
+#: fietsboek/views/admin.py:49
msgid "flash.badge_added"
msgstr "Wappen hinzugefügt"
-#: fietsboek/views/admin.py:72
+#: fietsboek/views/admin.py:73
msgid "flash.badge_modified"
msgstr "Wappen bearbeitet"
-#: fietsboek/views/admin.py:92
+#: fietsboek/views/admin.py:93
msgid "flash.badge_deleted"
msgstr "Wappen gelöscht"
-#: fietsboek/views/default.py:115
+#: fietsboek/views/default.py:116
msgid "flash.invalid_credentials"
msgstr "Ungültige Nutzerdaten"
-#: fietsboek/views/default.py:119
+#: fietsboek/views/default.py:120
msgid "flash.account_not_verified"
msgstr "Konto noch nicht bestätigt"
-#: fietsboek/views/default.py:122
+#: fietsboek/views/default.py:123
msgid "flash.logged_in"
msgstr "Du bist nun angemeldet"
-#: fietsboek/views/default.py:143
+#: fietsboek/views/default.py:144
msgid "flash.logged_out"
msgstr "Du bist nun abgemeldet"
-#: fietsboek/views/default.py:173
+#: fietsboek/views/default.py:174
msgid "flash.reset_invalid_email"
msgstr "Ungültige E-Mail-Adresse angegeben"
-#: fietsboek/views/default.py:178
+#: fietsboek/views/default.py:179
msgid "flash.password_token_generated"
msgstr "Ein Link zum Zurücksetzen des Passworts wurde versandt"
-#: fietsboek/views/default.py:183
+#: fietsboek/views/default.py:184
msgid "page.password_reset.email.subject"
msgstr "Fietsboek Passwortzurücksetzung"
-#: fietsboek/views/default.py:186
+#: fietsboek/views/default.py:187
msgid "page.password_reset.email.body"
msgstr ""
"Du kannst Dein Fietsboek-Passwort hier zurücksetzen: {}\n"
@@ -880,67 +888,67 @@ msgstr ""
"Falls Du keine Passwortzurücksetzung beantragt hast, dann ignoriere diese"
" E-Mail."
-#: fietsboek/views/default.py:225
+#: fietsboek/views/default.py:226
msgid "flash.resend_verification_email_fail"
msgstr "Ungültige E-Mail-Adresse angegeben"
-#: fietsboek/views/default.py:230
+#: fietsboek/views/default.py:231
msgid "flash.verification_token_generated"
msgstr "Ein Link zur Bestätigung Deines Kontos wurde versandt"
-#: fietsboek/views/default.py:250
+#: fietsboek/views/default.py:251
msgid "flash.token_expired"
msgstr "Der Link ist nicht mehr gültig"
-#: fietsboek/views/default.py:256
+#: fietsboek/views/default.py:257
msgid "flash.email_verified"
msgstr "E-Mail-Adresse bestätigt"
-#: fietsboek/views/default.py:270
+#: fietsboek/views/default.py:271
msgid "flash.password_updated"
msgstr "Passwort aktualisiert"
-#: fietsboek/views/detail.py:161
+#: fietsboek/views/detail.py:162
msgid "flash.track_deleted"
msgstr "Strecke gelöscht"
-#: fietsboek/views/upload.py:52
+#: fietsboek/views/upload.py:53
msgid "flash.no_file_selected"
msgstr "Keine Datei ausgewählt"
-#: fietsboek/views/upload.py:65
+#: fietsboek/views/upload.py:66
msgid "flash.invalid_file"
msgstr "Ungültige GPX-Datei gesendet"
-#: fietsboek/views/upload.py:191
+#: fietsboek/views/upload.py:192
msgid "flash.upload_success"
msgstr "Hochladen erfolgreich"
-#: fietsboek/views/upload.py:210
+#: fietsboek/views/upload.py:211
msgid "flash.upload_cancelled"
msgstr "Hochladen abgebrochen"
-#: fietsboek/views/user_data.py:66
+#: fietsboek/views/user_data.py:67
msgid "flash.personal_data_updated"
msgstr "Persönliche Daten wurden gespeichert"
-#: fietsboek/views/user_data.py:85
+#: fietsboek/views/user_data.py:86
msgid "flash.friend_not_found"
msgstr "Das angegebene Konto wurde nicht gefunden"
-#: fietsboek/views/user_data.py:91
+#: fietsboek/views/user_data.py:92
msgid "flash.friend_already_exists"
msgstr "Dieser Freund existiert bereits"
-#: fietsboek/views/user_data.py:99
+#: fietsboek/views/user_data.py:100
msgid "flash.friend_added"
msgstr "Freund hinzugefügt"
-#: fietsboek/views/user_data.py:109
+#: fietsboek/views/user_data.py:110
msgid "flash.friend_request_sent"
msgstr "Freundschaftsanfrage gesendet"
-#: fietsboek/views/user_data.py:195
+#: fietsboek/views/user_data.py:196
msgid "flash.sessions_logged_out"
msgstr "Die Sitzungen wurden beendet. Melde Dich bitte erneut an, um fortzufahren."
diff --git a/fietsboek/locale/en/LC_MESSAGES/messages.mo b/fietsboek/locale/en/LC_MESSAGES/messages.mo
index c03929b..9f7170c 100644
--- a/fietsboek/locale/en/LC_MESSAGES/messages.mo
+++ b/fietsboek/locale/en/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/fietsboek/locale/en/LC_MESSAGES/messages.po b/fietsboek/locale/en/LC_MESSAGES/messages.po
index f5a7874..645d059 100644
--- a/fietsboek/locale/en/LC_MESSAGES/messages.po
+++ b/fietsboek/locale/en/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-11-10 22:23+0100\n"
+"POT-Creation-Date: 2024-02-02 23:44+0100\n"
"PO-Revision-Date: 2023-04-03 20:42+0200\n"
"Last-Translator: \n"
"Language: en\n"
@@ -18,54 +18,54 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
-#: fietsboek/actions.py:257
+#: fietsboek/actions.py:267
msgid "email.verify_mail.subject"
msgstr "Fietsboek Account Verification"
-#: fietsboek/actions.py:260
+#: fietsboek/actions.py:270
msgid "email.verify.text"
msgstr ""
"To verify your Fietsboek account, please use this link: {}\n"
"\n"
"If you did not create an account, ignore this email."
-#: fietsboek/util.py:306
+#: fietsboek/util.py:307
msgid "password_constraint.mismatch"
msgstr "Passwords don't match"
-#: fietsboek/util.py:308
+#: fietsboek/util.py:309
msgid "password_constraint.length"
msgstr "Password not long enough"
-#: fietsboek/models/track.py:602
+#: fietsboek/models/track.py:603
msgid "tooltip.table.length"
msgstr "Length"
-#: fietsboek/models/track.py:603
+#: fietsboek/models/track.py:604
msgid "tooltip.table.people"
msgstr "# People"
-#: fietsboek/models/track.py:604
+#: fietsboek/models/track.py:605
msgid "tooltip.table.uphill"
msgstr "Uphill"
-#: fietsboek/models/track.py:605
+#: fietsboek/models/track.py:606
msgid "tooltip.table.downhill"
msgstr "Downhill"
-#: fietsboek/models/track.py:606
+#: fietsboek/models/track.py:607
msgid "tooltip.table.moving_time"
msgstr "Moving Time"
-#: fietsboek/models/track.py:607
+#: fietsboek/models/track.py:608
msgid "tooltip.table.stopped_time"
msgstr "Stopped Time"
-#: fietsboek/models/track.py:609
+#: fietsboek/models/track.py:610
msgid "tooltip.table.max_speed"
msgstr "Max Speed"
-#: fietsboek/models/track.py:613
+#: fietsboek/models/track.py:614
msgid "tooltip.table.avg_speed"
msgstr "Average Speed"
@@ -458,36 +458,36 @@ msgstr "Tagged People"
msgid "page.track.form.add_friend"
msgstr "Search friends"
-#: fietsboek/templates/edit_form.jinja2:90
+#: fietsboek/templates/edit_form.jinja2:92
msgid "page.track.form.badges"
msgstr "Badges"
-#: fietsboek/templates/edit_form.jinja2:101
+#: fietsboek/templates/edit_form.jinja2:103
msgid "page.track.form.description"
msgstr "Description"
-#: fietsboek/templates/edit_form.jinja2:108
-#: fietsboek/templates/edit_form.jinja2:129
+#: fietsboek/templates/edit_form.jinja2:110
+#: fietsboek/templates/edit_form.jinja2:131
msgid "page.track.form.remove_image"
msgstr "Remove image"
-#: fietsboek/templates/edit_form.jinja2:118
+#: fietsboek/templates/edit_form.jinja2:120
msgid "page.track.form.select_images"
msgstr "Select images"
-#: fietsboek/templates/edit_form.jinja2:122
+#: fietsboek/templates/edit_form.jinja2:124
msgid "page.track.form.image_uploads_disabled"
msgstr "Image uploads are disabled on this Fietsboek"
-#: fietsboek/templates/edit_form.jinja2:140
+#: fietsboek/templates/edit_form.jinja2:142
msgid "page.track.form.image_description_modal"
msgstr "Image description"
-#: fietsboek/templates/edit_form.jinja2:147
+#: fietsboek/templates/edit_form.jinja2:149
msgid "page.track.form.image_description_modal.save"
msgstr "Apply"
-#: fietsboek/templates/edit_form.jinja2:173
+#: fietsboek/templates/edit_form.jinja2:175
msgid "page.track.form.transformer.enable"
msgstr "Apply transformation"
@@ -624,59 +624,67 @@ msgstr "Passwords must match"
msgid "page.password_reset.reset"
msgstr "Reset"
-#: fietsboek/templates/profile.jinja2:66
+#: fietsboek/templates/profile.jinja2:67
msgid "page.profile.length"
msgstr "Length"
-#: fietsboek/templates/profile.jinja2:70
+#: fietsboek/templates/profile.jinja2:71
+msgid "page.profile.avg_length"
+msgstr "Average Length"
+
+#: fietsboek/templates/profile.jinja2:75
msgid "page.profile.uphill"
msgstr "Uphill"
-#: fietsboek/templates/profile.jinja2:74
+#: fietsboek/templates/profile.jinja2:79
msgid "page.profile.downhill"
msgstr "Downhill"
-#: fietsboek/templates/profile.jinja2:78
+#: fietsboek/templates/profile.jinja2:83
msgid "page.profile.moving_time"
msgstr "Moving Time"
-#: fietsboek/templates/profile.jinja2:82
+#: fietsboek/templates/profile.jinja2:87
msgid "page.profile.stopped_time"
msgstr "Stopped Time"
-#: fietsboek/templates/profile.jinja2:86
+#: fietsboek/templates/profile.jinja2:91
+msgid "page.profile.avg_duration"
+msgstr "Average Duration"
+
+#: fietsboek/templates/profile.jinja2:95
msgid "page.profile.max_speed"
msgstr "Max Speed"
-#: fietsboek/templates/profile.jinja2:90
+#: fietsboek/templates/profile.jinja2:99
msgid "page.profile.avg_speed"
msgstr "Average Speed"
-#: fietsboek/templates/profile.jinja2:94
+#: fietsboek/templates/profile.jinja2:103
msgid "page.profile.number_of_tracks"
msgstr "Number of tracks"
-#: fietsboek/templates/profile.jinja2:100
+#: fietsboek/templates/profile.jinja2:109
msgid "page.profile.longest_distance_track"
msgstr "Longest Track"
-#: fietsboek/templates/profile.jinja2:105
+#: fietsboek/templates/profile.jinja2:114
msgid "page.profile.shortest_distance_track"
msgstr "Shortest Track"
-#: fietsboek/templates/profile.jinja2:110
+#: fietsboek/templates/profile.jinja2:119
msgid "page.profile.longest_duration_track"
msgstr "Most Time-Consuming Track"
-#: fietsboek/templates/profile.jinja2:115
+#: fietsboek/templates/profile.jinja2:124
msgid "page.profile.shortest_duration_track"
msgstr "Quickest Track"
-#: fietsboek/templates/profile.jinja2:135
+#: fietsboek/templates/profile.jinja2:144
msgid "page.profile.heatmap"
msgstr "Heat Map"
-#: fietsboek/templates/profile.jinja2:140
+#: fietsboek/templates/profile.jinja2:149
msgid "page.profile.tilehunt"
msgstr "Tilehunt"
@@ -786,150 +794,150 @@ msgstr "Email of the friend"
msgid "page.my_profile.send_friend_request"
msgstr "Send friend request"
-#: fietsboek/transformers/breaks.py:31
+#: fietsboek/transformers/breaks.py:32
msgid "transformers.remove-breaks.title"
msgstr "Remove breaks"
-#: fietsboek/transformers/breaks.py:35
+#: fietsboek/transformers/breaks.py:36
msgid "transformers.remove-breaks.description"
msgstr "This transformer removes long breaks from the recording"
-#: fietsboek/transformers/elevation.py:42
+#: fietsboek/transformers/elevation.py:43
msgid "transformers.fix-null-elevation.title"
msgstr "Fix null elevation"
-#: fietsboek/transformers/elevation.py:46
+#: fietsboek/transformers/elevation.py:47
msgid "transformers.fix-null-elevation.description"
msgstr "This transformer fixes the elevation of points whose elevation is unset."
-#: fietsboek/transformers/elevation.py:115
+#: fietsboek/transformers/elevation.py:116
msgid "transformers.fix-elevation-jumps"
msgstr "Fix elevation jumps"
-#: fietsboek/transformers/elevation.py:119
+#: fietsboek/transformers/elevation.py:120
msgid "transformers.fix-elevation-jumps.description"
msgstr "This transformer fixes abrupt jumps in the elevation value."
-#: fietsboek/views/account.py:53
+#: fietsboek/views/account.py:54
msgid "flash.invalid_name"
msgstr "Invalid name"
-#: fietsboek/views/account.py:58
+#: fietsboek/views/account.py:59
msgid "flash.invalid_email"
msgstr "Invalid email"
-#: fietsboek/views/account.py:68
+#: fietsboek/views/account.py:69
msgid "flash.a_confirmation_link_has_been_sent"
msgstr "A confirmation link has been sent"
-#: fietsboek/views/admin.py:48
+#: fietsboek/views/admin.py:49
msgid "flash.badge_added"
msgstr "Badge has been added"
-#: fietsboek/views/admin.py:72
+#: fietsboek/views/admin.py:73
msgid "flash.badge_modified"
msgstr "Badge has been modified"
-#: fietsboek/views/admin.py:92
+#: fietsboek/views/admin.py:93
msgid "flash.badge_deleted"
msgstr "Badge has been deleted"
-#: fietsboek/views/default.py:115
+#: fietsboek/views/default.py:116
msgid "flash.invalid_credentials"
msgstr "Invalid login credentials"
-#: fietsboek/views/default.py:119
+#: fietsboek/views/default.py:120
msgid "flash.account_not_verified"
msgstr "Your account is not verified yet"
-#: fietsboek/views/default.py:122
+#: fietsboek/views/default.py:123
msgid "flash.logged_in"
msgstr "You are now logged in"
-#: fietsboek/views/default.py:143
+#: fietsboek/views/default.py:144
msgid "flash.logged_out"
msgstr "You have been logged out"
-#: fietsboek/views/default.py:173
+#: fietsboek/views/default.py:174
msgid "flash.reset_invalid_email"
msgstr "Invalid email address provided"
-#: fietsboek/views/default.py:178
+#: fietsboek/views/default.py:179
msgid "flash.password_token_generated"
msgstr "A password reset email has been sent"
-#: fietsboek/views/default.py:183
+#: fietsboek/views/default.py:184
msgid "page.password_reset.email.subject"
msgstr "Fietsboek Password Reset"
-#: fietsboek/views/default.py:186
+#: fietsboek/views/default.py:187
msgid "page.password_reset.email.body"
msgstr ""
"You can reset your Fietsboek password here: {}\n"
"\n"
"If you did not request a password reset, ignore this email."
-#: fietsboek/views/default.py:225
+#: fietsboek/views/default.py:226
msgid "flash.resend_verification_email_fail"
msgstr "Invalid email address provided"
-#: fietsboek/views/default.py:230
+#: fietsboek/views/default.py:231
msgid "flash.verification_token_generated"
msgstr "A verification email has been sent"
-#: fietsboek/views/default.py:250
+#: fietsboek/views/default.py:251
msgid "flash.token_expired"
msgstr "The link has expired"
-#: fietsboek/views/default.py:256
+#: fietsboek/views/default.py:257
msgid "flash.email_verified"
msgstr "Your email address has been verified"
-#: fietsboek/views/default.py:270
+#: fietsboek/views/default.py:271
msgid "flash.password_updated"
msgstr "Password has been updated"
-#: fietsboek/views/detail.py:161
+#: fietsboek/views/detail.py:162
msgid "flash.track_deleted"
msgstr "Track has been deleted"
-#: fietsboek/views/upload.py:52
+#: fietsboek/views/upload.py:53
msgid "flash.no_file_selected"
msgstr "No file selected"
-#: fietsboek/views/upload.py:65
+#: fietsboek/views/upload.py:66
msgid "flash.invalid_file"
msgstr "Invalid GPX file selected"
-#: fietsboek/views/upload.py:191
+#: fietsboek/views/upload.py:192
msgid "flash.upload_success"
msgstr "Upload successful"
-#: fietsboek/views/upload.py:210
+#: fietsboek/views/upload.py:211
msgid "flash.upload_cancelled"
msgstr "Upload cancelled"
-#: fietsboek/views/user_data.py:66
+#: fietsboek/views/user_data.py:67
msgid "flash.personal_data_updated"
msgstr "Personal data has been updated"
-#: fietsboek/views/user_data.py:85
+#: fietsboek/views/user_data.py:86
msgid "flash.friend_not_found"
msgstr "The friend was not found"
-#: fietsboek/views/user_data.py:91
+#: fietsboek/views/user_data.py:92
msgid "flash.friend_already_exists"
msgstr "Friend already exists"
-#: fietsboek/views/user_data.py:99
+#: fietsboek/views/user_data.py:100
msgid "flash.friend_added"
msgstr "Friend has been added"
-#: fietsboek/views/user_data.py:109
+#: fietsboek/views/user_data.py:110
msgid "flash.friend_request_sent"
msgstr "Friend request sent"
-#: fietsboek/views/user_data.py:195
+#: fietsboek/views/user_data.py:196
msgid "flash.sessions_logged_out"
msgstr "All sessions have been logged out. Please log in again to continue."
diff --git a/fietsboek/locale/fietslog.pot b/fietsboek/locale/fietslog.pot
index e5a0b40..4fd3812 100644
--- a/fietsboek/locale/fietslog.pot
+++ b/fietsboek/locale/fietslog.pot
@@ -1,14 +1,14 @@
# Translations template for PROJECT.
-# Copyright (C) 2023 ORGANIZATION
+# Copyright (C) 2024 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2023-11-10 22:23+0100\n"
+"POT-Creation-Date: 2024-02-02 23:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,51 +17,51 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
-#: fietsboek/actions.py:257
+#: fietsboek/actions.py:267
msgid "email.verify_mail.subject"
msgstr ""
-#: fietsboek/actions.py:260
+#: fietsboek/actions.py:270
msgid "email.verify.text"
msgstr ""
-#: fietsboek/util.py:306
+#: fietsboek/util.py:307
msgid "password_constraint.mismatch"
msgstr ""
-#: fietsboek/util.py:308
+#: fietsboek/util.py:309
msgid "password_constraint.length"
msgstr ""
-#: fietsboek/models/track.py:602
+#: fietsboek/models/track.py:603
msgid "tooltip.table.length"
msgstr ""
-#: fietsboek/models/track.py:603
+#: fietsboek/models/track.py:604
msgid "tooltip.table.people"
msgstr ""
-#: fietsboek/models/track.py:604
+#: fietsboek/models/track.py:605
msgid "tooltip.table.uphill"
msgstr ""
-#: fietsboek/models/track.py:605
+#: fietsboek/models/track.py:606
msgid "tooltip.table.downhill"
msgstr ""
-#: fietsboek/models/track.py:606
+#: fietsboek/models/track.py:607
msgid "tooltip.table.moving_time"
msgstr ""
-#: fietsboek/models/track.py:607
+#: fietsboek/models/track.py:608
msgid "tooltip.table.stopped_time"
msgstr ""
-#: fietsboek/models/track.py:609
+#: fietsboek/models/track.py:610
msgid "tooltip.table.max_speed"
msgstr ""
-#: fietsboek/models/track.py:613
+#: fietsboek/models/track.py:614
msgid "tooltip.table.avg_speed"
msgstr ""
@@ -452,36 +452,36 @@ msgstr ""
msgid "page.track.form.add_friend"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:90
+#: fietsboek/templates/edit_form.jinja2:92
msgid "page.track.form.badges"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:101
+#: fietsboek/templates/edit_form.jinja2:103
msgid "page.track.form.description"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:108
-#: fietsboek/templates/edit_form.jinja2:129
+#: fietsboek/templates/edit_form.jinja2:110
+#: fietsboek/templates/edit_form.jinja2:131
msgid "page.track.form.remove_image"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:118
+#: fietsboek/templates/edit_form.jinja2:120
msgid "page.track.form.select_images"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:122
+#: fietsboek/templates/edit_form.jinja2:124
msgid "page.track.form.image_uploads_disabled"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:140
+#: fietsboek/templates/edit_form.jinja2:142
msgid "page.track.form.image_description_modal"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:147
+#: fietsboek/templates/edit_form.jinja2:149
msgid "page.track.form.image_description_modal.save"
msgstr ""
-#: fietsboek/templates/edit_form.jinja2:173
+#: fietsboek/templates/edit_form.jinja2:175
msgid "page.track.form.transformer.enable"
msgstr ""
@@ -618,59 +618,67 @@ msgstr ""
msgid "page.password_reset.reset"
msgstr ""
-#: fietsboek/templates/profile.jinja2:66
+#: fietsboek/templates/profile.jinja2:67
msgid "page.profile.length"
msgstr ""
-#: fietsboek/templates/profile.jinja2:70
+#: fietsboek/templates/profile.jinja2:71
+msgid "page.profile.avg_length"
+msgstr ""
+
+#: fietsboek/templates/profile.jinja2:75
msgid "page.profile.uphill"
msgstr ""
-#: fietsboek/templates/profile.jinja2:74
+#: fietsboek/templates/profile.jinja2:79
msgid "page.profile.downhill"
msgstr ""
-#: fietsboek/templates/profile.jinja2:78
+#: fietsboek/templates/profile.jinja2:83
msgid "page.profile.moving_time"
msgstr ""
-#: fietsboek/templates/profile.jinja2:82
+#: fietsboek/templates/profile.jinja2:87
msgid "page.profile.stopped_time"
msgstr ""
-#: fietsboek/templates/profile.jinja2:86
+#: fietsboek/templates/profile.jinja2:91
+msgid "page.profile.avg_duration"
+msgstr ""
+
+#: fietsboek/templates/profile.jinja2:95
msgid "page.profile.max_speed"
msgstr ""
-#: fietsboek/templates/profile.jinja2:90
+#: fietsboek/templates/profile.jinja2:99
msgid "page.profile.avg_speed"
msgstr ""
-#: fietsboek/templates/profile.jinja2:94
+#: fietsboek/templates/profile.jinja2:103
msgid "page.profile.number_of_tracks"
msgstr ""
-#: fietsboek/templates/profile.jinja2:100
+#: fietsboek/templates/profile.jinja2:109
msgid "page.profile.longest_distance_track"
msgstr ""
-#: fietsboek/templates/profile.jinja2:105
+#: fietsboek/templates/profile.jinja2:114
msgid "page.profile.shortest_distance_track"
msgstr ""
-#: fietsboek/templates/profile.jinja2:110
+#: fietsboek/templates/profile.jinja2:119
msgid "page.profile.longest_duration_track"
msgstr ""
-#: fietsboek/templates/profile.jinja2:115
+#: fietsboek/templates/profile.jinja2:124
msgid "page.profile.shortest_duration_track"
msgstr ""
-#: fietsboek/templates/profile.jinja2:135
+#: fietsboek/templates/profile.jinja2:144
msgid "page.profile.heatmap"
msgstr ""
-#: fietsboek/templates/profile.jinja2:140
+#: fietsboek/templates/profile.jinja2:149
msgid "page.profile.tilehunt"
msgstr ""
@@ -774,147 +782,147 @@ msgstr ""
msgid "page.my_profile.send_friend_request"
msgstr ""
-#: fietsboek/transformers/breaks.py:31
+#: fietsboek/transformers/breaks.py:32
msgid "transformers.remove-breaks.title"
msgstr ""
-#: fietsboek/transformers/breaks.py:35
+#: fietsboek/transformers/breaks.py:36
msgid "transformers.remove-breaks.description"
msgstr ""
-#: fietsboek/transformers/elevation.py:42
+#: fietsboek/transformers/elevation.py:43
msgid "transformers.fix-null-elevation.title"
msgstr ""
-#: fietsboek/transformers/elevation.py:46
+#: fietsboek/transformers/elevation.py:47
msgid "transformers.fix-null-elevation.description"
msgstr ""
-#: fietsboek/transformers/elevation.py:115
+#: fietsboek/transformers/elevation.py:116
msgid "transformers.fix-elevation-jumps"
msgstr ""
-#: fietsboek/transformers/elevation.py:119
+#: fietsboek/transformers/elevation.py:120
msgid "transformers.fix-elevation-jumps.description"
msgstr ""
-#: fietsboek/views/account.py:53
+#: fietsboek/views/account.py:54
msgid "flash.invalid_name"
msgstr ""
-#: fietsboek/views/account.py:58
+#: fietsboek/views/account.py:59
msgid "flash.invalid_email"
msgstr ""
-#: fietsboek/views/account.py:68
+#: fietsboek/views/account.py:69
msgid "flash.a_confirmation_link_has_been_sent"
msgstr ""
-#: fietsboek/views/admin.py:48
+#: fietsboek/views/admin.py:49
msgid "flash.badge_added"
msgstr ""
-#: fietsboek/views/admin.py:72
+#: fietsboek/views/admin.py:73
msgid "flash.badge_modified"
msgstr ""
-#: fietsboek/views/admin.py:92
+#: fietsboek/views/admin.py:93
msgid "flash.badge_deleted"
msgstr ""
-#: fietsboek/views/default.py:115
+#: fietsboek/views/default.py:116
msgid "flash.invalid_credentials"
msgstr ""
-#: fietsboek/views/default.py:119
+#: fietsboek/views/default.py:120
msgid "flash.account_not_verified"
msgstr ""
-#: fietsboek/views/default.py:122
+#: fietsboek/views/default.py:123
msgid "flash.logged_in"
msgstr ""
-#: fietsboek/views/default.py:143
+#: fietsboek/views/default.py:144
msgid "flash.logged_out"
msgstr ""
-#: fietsboek/views/default.py:173
+#: fietsboek/views/default.py:174
msgid "flash.reset_invalid_email"
msgstr ""
-#: fietsboek/views/default.py:178
+#: fietsboek/views/default.py:179
msgid "flash.password_token_generated"
msgstr ""
-#: fietsboek/views/default.py:183
+#: fietsboek/views/default.py:184
msgid "page.password_reset.email.subject"
msgstr ""
-#: fietsboek/views/default.py:186
+#: fietsboek/views/default.py:187
msgid "page.password_reset.email.body"
msgstr ""
-#: fietsboek/views/default.py:225
+#: fietsboek/views/default.py:226
msgid "flash.resend_verification_email_fail"
msgstr ""
-#: fietsboek/views/default.py:230
+#: fietsboek/views/default.py:231
msgid "flash.verification_token_generated"
msgstr ""
-#: fietsboek/views/default.py:250
+#: fietsboek/views/default.py:251
msgid "flash.token_expired"
msgstr ""
-#: fietsboek/views/default.py:256
+#: fietsboek/views/default.py:257
msgid "flash.email_verified"
msgstr ""
-#: fietsboek/views/default.py:270
+#: fietsboek/views/default.py:271
msgid "flash.password_updated"
msgstr ""
-#: fietsboek/views/detail.py:161
+#: fietsboek/views/detail.py:162
msgid "flash.track_deleted"
msgstr ""
-#: fietsboek/views/upload.py:52
+#: fietsboek/views/upload.py:53
msgid "flash.no_file_selected"
msgstr ""
-#: fietsboek/views/upload.py:65
+#: fietsboek/views/upload.py:66
msgid "flash.invalid_file"
msgstr ""
-#: fietsboek/views/upload.py:191
+#: fietsboek/views/upload.py:192
msgid "flash.upload_success"
msgstr ""
-#: fietsboek/views/upload.py:210
+#: fietsboek/views/upload.py:211
msgid "flash.upload_cancelled"
msgstr ""
-#: fietsboek/views/user_data.py:66
+#: fietsboek/views/user_data.py:67
msgid "flash.personal_data_updated"
msgstr ""
-#: fietsboek/views/user_data.py:85
+#: fietsboek/views/user_data.py:86
msgid "flash.friend_not_found"
msgstr ""
-#: fietsboek/views/user_data.py:91
+#: fietsboek/views/user_data.py:92
msgid "flash.friend_already_exists"
msgstr ""
-#: fietsboek/views/user_data.py:99
+#: fietsboek/views/user_data.py:100
msgid "flash.friend_added"
msgstr ""
-#: fietsboek/views/user_data.py:109
+#: fietsboek/views/user_data.py:110
msgid "flash.friend_request_sent"
msgstr ""
-#: fietsboek/views/user_data.py:195
+#: fietsboek/views/user_data.py:196
msgid "flash.sessions_logged_out"
msgstr ""
diff --git a/fietsboek/templates/profile.jinja2 b/fietsboek/templates/profile.jinja2
index 69c37e2..bab6d49 100644
--- a/fietsboek/templates/profile.jinja2
+++ b/fietsboek/templates/profile.jinja2
@@ -68,6 +68,10 @@
<td id="profileLength">{{ (total.length / 1000) | round(2) | format_decimal }} km</td>
</tr>
<tr>
+ <th scope="row">{{ _("page.profile.avg_length") }}</th>
+ <td id="profileAvgLength">{{ (total.avg_length / 1000) | round(2) | format_decimal }} km</td>
+ </tr>
+ <tr>
<th scope="row">{{ _("page.profile.uphill") }}</th>
<td id="profileUphill">{{ total.uphill | round(2) | format_decimal }} m</td>
</tr>
@@ -84,6 +88,10 @@
<td id="profileStoppedTime">{{ total.stopped_time }}</td>
</tr>
<tr>
+ <th scope="row">{{ _("page.profile.avg_duration") }}</th>
+ <td id="profileAvgDuration">{{ total.avg_duration }}</td>
+ </tr>
+ <tr>
<th scope="row">{{ _("page.profile.max_speed") }}</th>
<td id="profileMaxSpeed">{{ mps_to_kph(total.max_speed) | round(2) | format_decimal }} km/h</td>
</tr>
diff --git a/fietsboek/views/profile.py b/fietsboek/views/profile.py
index dc2fcd9..b353abd 100644
--- a/fietsboek/views/profile.py
+++ b/fietsboek/views/profile.py
@@ -127,6 +127,23 @@ class CumulativeStats:
return 0.0
return self.length / self.moving_time.total_seconds()
+ @property
+ def avg_length(self) -> float:
+ """Average length, in m."""
+ if not self.count:
+ return 0
+ return self.length / self.count
+
+ @property
+ def avg_duration(self) -> datetime.timedelta:
+ """Average duration of a track.
+
+ Note that this property is automatically rounded to seconds.
+ """
+ if not self.count:
+ return datetime.timedelta()
+ return round_to_seconds((self.moving_time + self.stopped_time) / self.count)
+
def round_to_seconds(value: datetime.timedelta) -> datetime.timedelta:
"""Round a timedelta to full seconds.