diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 060350e5..d77b92c4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,13 +17,22 @@ First off, thank you for your interest in contributing! The **GitHub** repository contains: - source code (note that the repository also includes client build), +- translations, - tests, - documentation (source and build). -Translations can be updated through [Weblate](https://hosted.weblate.org/engage/fittrackee/). - Continuous integration workflows run on **Github Actions** platform (on **push** and **pull requests**). +### Translations + +The available languages are: +[![Translation status](https://hosted.weblate.org/widgets/fittrackee/-/multi-auto.svg)](https://hosted.weblate.org/engage/fittrackee/) + +Translations files are located: +- on API side (emails): `fittrackee/emails/translations/` (implemented with [Babel](https://babel.pocoo.org/en/latest/)) +- on client side: `fittrackee_client/src/locales` (implemented with [Vue I18n](https://vue-i18n.intlify.dev/)) + +Translations can be updated through [Weblate](https://hosted.weblate.org/engage/fittrackee/). ### How to install FitTrackee @@ -62,14 +71,30 @@ Please make your changes from the development branch (`dev`). $ make test-e2e ``` +* If needed, update translations. + * On client side, update files in `fittrackee_client/src/locales` folder. + * On API side (emails), to extract new strings into `messages.pot`: + ```shell + $ make babel-extract + ``` + To add new strings in translations files (`fittrackee/emails/translations//LC_MESSAGES/messages.po`): + ```shell + $ make babel-update + ``` + After updating strings in `messages.po`, compile the translations: + ```shell + $ make babel-compile + ``` + * If needed, add or update tests. * If needed, update documentation (no need to build documentation, it will be done when releasing). -* If updated code contains client-side changes, you can generate a build, in a **separate commit** to ease code review (or to easily drop it in case of conflicts when updating your branch). +* If updated code contains client-side changes, you can generate javascript assets to check **FitTrackee** whithout starting client dev server: ```shell $ make build-client ``` + No need to commit these files, dist files will be generated before merging or when releasing. * Create your pull request to merge on `dev` branch. diff --git a/Makefile b/Makefile index c4616ebe..680a6351 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,18 @@ make-p: # Launch all P targets in parallel and exit as soon as one exits. set -m; (for p in $(P); do ($(MAKE) $$p || kill 0)& done; wait) +babel-extract: + $(PYBABEL) extract -F babel.cfg -k lazy_gettext -o messages.pot . + +babel-init: + $(PYBABEL) init -i messages.pot -d fittrackee/emails/translations -l $(LANG) + +babel-compile: + $(PYBABEL) compile -d fittrackee/emails/translations + +babel-update: + $(PYBABEL) update -i messages.pot -d fittrackee/emails/translations + bandit: $(BANDIT) -r fittrackee -c pyproject.toml diff --git a/Makefile.config b/Makefile.config index c1b0dd0b..59deb91b 100644 --- a/Makefile.config +++ b/Makefile.config @@ -24,6 +24,7 @@ GUNICORN = $(VENV)/bin/gunicorn BLACK = $(VENV)/bin/black MYPY = $(VENV)/bin/mypy BANDIT = $(VENV)/bin/bandit +PYBABEL = $(VENV)/bin/pybabel FTCLI = $(VENV)/bin/ftcli # Node env diff --git a/babel.cfg b/babel.cfg new file mode 100644 index 00000000..d8436ffc --- /dev/null +++ b/babel.cfg @@ -0,0 +1,5 @@ +[jinja2: fittrackee/emails/templates/**.html] +silent=False + +[jinja2: fittrackee/emails/templates/**.txt] +silent=False diff --git a/docs/_sources/features.rst.txt b/docs/_sources/features.rst.txt index a484d67e..18b36c96 100644 --- a/docs/_sources/features.rst.txt +++ b/docs/_sources/features.rst.txt @@ -119,7 +119,9 @@ Administration Translations ^^^^^^^^^^^^ -FitTrackee is available in English and French (which can be saved in the user preferences). +FitTrackee is available in the following languages (which can be saved in the user preferences): + +.. figure:: https://hosted.weblate.org/widgets/fittrackee/-/multi-auto.svg Screenshots diff --git a/docs/features.html b/docs/features.html index 7f3ca989..f83d3320 100644 --- a/docs/features.html +++ b/docs/features.html @@ -313,7 +313,9 @@ A user with an inactive account cannot log in. (new in 0.6.0)

Translations

-

FitTrackee is available in English and French (which can be saved in the user preferences).

+

FitTrackee is available in the following languages (which can be saved in the user preferences):

+
+https://hosted.weblate.org/widgets/fittrackee/-/multi-auto.svg

Screenshots

diff --git a/docs/searchindex.js b/docs/searchindex.js index ee3676de..c6926562 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api/auth", "api/configuration", "api/index", "api/records", "api/sports", "api/stats", "api/users", "api/workouts", "changelog", "cli", "features", "index", "installation", "troubleshooting/administrator", "troubleshooting/index", "troubleshooting/user"], "filenames": ["api/auth.rst", "api/configuration.rst", "api/index.rst", "api/records.rst", "api/sports.rst", "api/stats.rst", "api/users.rst", "api/workouts.rst", "changelog.md", "cli.rst", "features.rst", "index.rst", "installation.rst", "troubleshooting/administrator.rst", "troubleshooting/index.rst", "troubleshooting/user.rst"], "titles": ["Authentication", "Configuration", "API documentation", "Records", "Sports", "Statistics", "Users", "Workouts", "Change log", "Command line interface", "Features", "FitTrackee", "Installation", "Administrator", "Troubleshooting", "User"], "terms": {"post": [0, 7], "api": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "auth": [0, 1, 3, 4, 5, 6, 7, 12], "regist": [0, 1, 12], "user": [0, 1, 2, 3, 4, 5, 7, 8, 10, 12, 14], "send": [0, 6, 8, 10, 12], "confirm": [0, 8, 10, 12], "email": [0, 1, 6, 8, 9, 10, 13], "The": [0, 8, 9, 10, 12], "newli": [0, 12], "creat": [0, 7, 8, 10, 12], "account": [0, 6, 8, 9, 12], "inact": [0, 6, 10, 12], "must": [0, 1, 4, 6, 8, 10, 12, 13], "hi": [0, 6, 8, 10], "activ": [0, 4, 6, 8, 9, 10, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 11, 12], "request": [0, 1, 3, 4, 5, 6, 7, 12], "http": [0, 1, 3, 4, 5, 6, 7, 12], "1": [0, 1, 3, 4, 5, 6, 7, 10, 12], "content": [0, 1, 3, 4, 5, 6, 7], "type": [0, 1, 3, 4, 5, 6, 7, 12], "applic": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "json": [0, 1, 3, 4, 5, 6, 7], "respons": [0, 1, 3, 4, 5, 6, 7], "success": [0, 1, 3, 4, 5, 6, 7], "200": [0, 1, 3, 4, 5, 6, 7], "statu": [0, 1, 3, 4, 5, 6, 7, 9], "error": [0, 1, 4, 6, 7, 8, 10, 12, 13], "registr": [0, 1, 8, 10, 12], "400": [0, 1, 4, 6, 7], "bad": [0, 1, 4, 6, 7], "messag": [0, 1, 7, 8, 9], "valid": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13], "provid": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13], "n": 0, "object": [0, 1, 4, 6, 7], "usernam": [0, 6, 8, 12], "string": [0, 1, 4, 5, 6, 7, 12], "3": [0, 4, 5, 6, 7, 10, 12], "30": [0, 5], "charact": [0, 8], "requir": 0, "password": [0, 6, 8, 9, 10, 12], "8": [0, 1, 7, 12], "code": [0, 1, 3, 4, 5, 6, 7, 8], "ok": [0, 1, 3, 4, 5, 6, 7], "invalid": [0, 1, 3, 4, 5, 6, 7, 8, 12], "payload": [0, 1, 4, 6, 7], "sorri": 0, "alreadi": 0, "taken": 0, "onli": [0, 6, 7, 8, 9, 10, 12], "alphanumer": [0, 8], "underscor": 0, "_": [0, 8], "allow": [0, 1, 7, 8, 10, 11], "403": [0, 1, 4, 5, 6, 7], "forbidden": [0, 1, 4, 5, 6, 7], "disabl": [0, 8, 10, 12], "500": [0, 1, 4, 6, 7, 8], "intern": [0, 1, 4, 6, 7], "server": [0, 1, 4, 6, 7, 8, 10, 11], "pleas": [0, 1, 3, 4, 5, 6, 7, 8], "try": [0, 6, 7], "again": [0, 1, 3, 4, 5, 6, 7], "contact": [0, 1, 6, 7, 10], "administr": [0, 1, 6, 7, 14], "after": [0, 8, 10, 12], "auth_token": 0, "web": [0, 11, 12], "token": [0, 1, 3, 4, 5, 6, 7], "resend": 0, "instruct": [0, 8, 10, 12], "If": [0, 10, 12], "thi": [0, 7, 8, 9, 10, 11, 12], "endpoint": [0, 1, 8], "avail": [0, 3, 9, 10, 12], "resent": 0, "404": [0, 4, 5, 6, 7, 8], "Not": [0, 4, 5, 6, 7], "found": [0, 4, 5, 6, 7, 8], "url": [0, 8, 12, 13], "wa": [0, 8], "login": 0, "an": [0, 1, 4, 6, 8, 10, 12], "can": [0, 6, 8, 10, 11, 12, 13], "log": [0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13], "successfulli": 0, "401": [0, 1, 3, 4, 5, 6, 7], "unauthor": [0, 1, 3, 4, 5, 6, 7], "credenti": [0, 12], "get": [0, 1, 3, 4, 5, 6, 7], "profil": [0, 8], "info": 0, "prefer": [0, 6, 8], "data": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "admin": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12], "fals": [0, 1, 4, 6, 7, 12], "bio": [0, 6], "null": [0, 4, 6, 7], "birth_dat": [0, 6], "created_at": [0, 6], "sun": [0, 3, 6, 7], "14": [0, 6, 7], "jul": [0, 3, 6, 7], "2019": [0, 3, 5, 6, 7], "09": [0, 6], "58": [0, 6, 8], "gmt": [0, 3, 6, 7], "sam": [0, 6], "com": [0, 1, 6, 12], "first_nam": [0, 6], "imperial_unit": [0, 6], "is_act": [0, 4, 6], "true": [0, 1, 4, 6, 8, 12], "languag": [0, 6, 10], "en": [0, 6], "last_nam": [0, 6], "locat": [0, 6, 12], "nb_sport": [0, 6], "nb_workout": [0, 5, 6], "6": [0, 1, 4, 6, 7, 9, 10, 12], "pictur": [0, 6, 7, 8], "record": [0, 2, 6, 7, 8, 10], "id": [0, 3, 4, 5, 6, 7], "9": [0, 3, 6, 12], "record_typ": [0, 3, 6, 7], "AS": [0, 3, 6, 7], "sport_id": [0, 3, 4, 5, 6, 7], "valu": [0, 3, 6, 7], "18": [0, 3, 6, 7, 8], "workout_d": [0, 3, 6, 7], "07": [0, 3, 6, 7], "08": [0, 3, 6], "00": [0, 3, 6, 7], "workout_id": [0, 3, 6, 7], "hvybqybra7wwxpastwr4v2": [0, 3, 6], "10": [0, 1, 3, 6, 7, 12], "fd": [0, 3, 6, 7], "11": [0, 3, 6, 10], "ld": [0, 3, 6, 7], "01": [0, 3, 5, 6, 7], "12": [0, 3, 6, 7], "ms": [0, 3, 6, 7], "sports_list": [0, 6], "4": [0, 4, 5, 6, 7, 12], "timezon": [0, 6, 7, 8, 10], "europ": [0, 6], "pari": [0, 6], "total_dist": [0, 5, 6], "67": [0, 6], "895": [0, 6], "total_dur": [0, 5, 6], "50": [0, 6, 8], "27": [0, 6], "weekm": [0, 5, 6], "header": [0, 1, 3, 4, 5, 6, 7], "author": [0, 1, 3, 4, 5, 6, 7], "oauth": [0, 1, 3, 4, 5, 6, 7], "2": [0, 1, 3, 4, 5, 6, 7, 10, 12], "0": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12], "bearer": [0, 1, 3, 4, 5, 6, 7], "signatur": [0, 1, 3, 4, 5, 6, 7], "expir": [0, 1, 3, 4, 5, 6, 7], "edit": [0, 8, 10], "updat": [0, 1, 4, 6, 7, 8, 10, 12], "first": [0, 10], "name": [0, 5, 6, 8, 12], "last": [0, 12], "biographi": 0, "birth": [0, 8], "date": [0, 5, 7, 8, 10], "format": [0, 5, 7], "y": [0, 5, 7, 12], "m": [0, 5, 7], "d": [0, 5, 7], "time": [0, 5, 7, 8, 10], "zone": 0, "boolean": [0, 1, 6, 9], "doe": [0, 5, 6, 7, 8], "week": [0, 5, 8, 10], "start": [0, 5, 7, 8, 10, 12, 14], "mondai": [0, 5, 10], "displai": [0, 7, 8, 9, 10, 11, 12, 13], "distanc": [0, 3, 7, 8, 10], "imperi": [0, 8, 10], "unit": [0, 8, 12], "don": 0, "t": [0, 8, 13], "match": 0, "sport": [0, 2, 5, 7, 8, 10, 12], "color": [0, 4, 8, 10], "000000": 0, "stopped_speed_threshold": [0, 4], "user_id": 0, "hexadecim": 0, "when": [0, 1, 8, 9, 10, 12], "ad": [0, 8, 9, 10], "workout": [0, 2, 5, 8, 11], "float": [0, 7], "stop": [0, 8, 10, 12], "speed": [0, 3, 7, 8, 10, 12], "threshold": [0, 8, 10], "us": [0, 6, 7, 8, 10, 11, 12], "gpxpy": [0, 10, 12], "exist": [0, 5, 6, 7, 10, 11, 12], "delet": [0, 6, 7, 8, 9, 10], "reset": [0, 6, 8, 9, 10, 12], "given": [0, 12], "204": [0, 6, 7], "paramet": [0, 4, 5, 6, 7, 8, 10], "No": [0, 6, 7, 8, 11], "multipart": [0, 7], "form": [0, 7], "file": [0, 1, 7, 8, 9, 10, 11, 12], "imag": [0, 6, 7, 8, 10, 12], "extens": [0, 7], "jpg": 0, "png": [0, 7, 12], "gif": 0, "part": [0, 7], "select": [0, 7], "413": [0, 7], "entiti": [0, 7], "too": [0, 7], "larg": [0, 7, 10], "dure": [0, 7], "size": [0, 1, 7, 8, 10], "exce": [0, 7], "0mb": [0, 7], "NO": [0, 6, 7], "handl": [0, 10, 12], "process": [0, 8, 10, 12], "patch": [0, 1, 4, 6, 7], "It": [0, 6, 8, 10, 11, 13], "enabl": [0, 1, 6, 10, 12], "chang": [0, 10, 11, 12], "one": [0, 6, 7, 10], "current": [0, 8], "address": [0, 10, 12], "inform": [0, 8, 11, 12], "anoth": [0, 6, 12], "new": [0, 6, 9, 10, 12], "new_password": 0, "miss": [0, 8], "config": [1, 8, 12], "admin_contact": 1, "gpx_limit_import": 1, "is_email_sending_en": 1, "is_registration_en": 1, "max_single_file_s": 1, "1048576": 1, "max_us": 1, "max_zip_file_s": 1, "10485760": 1, "map_attribut": [1, 12], "copi": [1, 12], "href": [1, 12], "www": [1, 12], "openstreetmap": [1, 8, 12], "org": [1, 12], "copyright": [1, 12], "contributor": [1, 8, 12], "version": [1, 9, 12], "authent": [1, 2, 3, 4, 6, 7], "integ": [1, 4, 5, 6, 7], "max": [1, 6, 7, 8], "number": [1, 6, 7, 8, 10, 12], "zip": [1, 7, 8, 10], "archiv": [1, 8, 10, 12], "singl": [1, 6, 8, 12], "instanc": [1, 8, 10, 12], "you": [1, 4, 5, 6, 7, 11], "do": [1, 4, 5, 6, 7], "have": [1, 4, 5, 6, 7, 8], "permiss": [1, 4, 5, 6, 7], "ping": 1, "health": 1, "check": [1, 8, 12, 13], "pong": 1, "configur": [2, 8, 10, 12], "statist": 2, "all": [3, 4, 5, 6, 12], "follow": [3, 9, 10, 12, 13], "ar": [3, 7, 8, 9, 10, 11, 12, 13], "averag": [3, 7, 8, 10], "farest": [3, 8], "longest": [3, 8, 10], "durat": [3, 7, 8, 10], "maximum": [3, 8, 10], "return": [3, 6, 7, 8, 12], "non": [4, 11], "is_active_for_us": 4, "label": [4, 8], "cycl": [4, 8, 10], "transport": [4, 8, 10], "hike": [4, 8, 10], "mountain": [4, 10], "bike": [4, 7, 8, 10], "5": [4, 5, 6, 7, 9, 10, 12], "run": [4, 8, 10, 12], "walk": [4, 8, 10], "has_workout": 4, "int": [4, 7], "NOT": [4, 7], "stat": [5, 8], "user_nam": [5, 6], "by_tim": 5, "without": [5, 6, 7, 8, 10, 11], "from": [5, 7, 8, 10, 11], "2018": [5, 7], "06": 5, "2017": [5, 7], "average_spe": 5, "48": 5, "total_asc": 5, "203": 5, "156": [5, 8], "15": [5, 7], "282": 5, "12341": 5, "16": [5, 7], "99": [5, 8], "150": 5, "178": [5, 8], "47": [5, 7, 8], "9960": 5, "95": [5, 8], "46": [5, 8], "78": 5, "613": 5, "1267": 5, "queri": [5, 6, 7], "end": [5, 7], "frame": 5, "sundai": [5, 7, 10], "month": [5, 8, 10], "year": [5, 10], "default": [5, 6, 7, 8, 10, 12], "by_sport": 5, "uploads_dir_s": 5, "1000": 5, "regardless": 6, "ha": [6, 10], "right": [6, 8, 9, 10, 12], "some": [6, 7, 8, 11, 12], "order_bi": 6, "workouts_count": 6, "par_pag": 6, "is_admin": 6, "sat": 6, "20": 6, "03": [6, 7], "fr": 6, "page": [6, 7, 8], "pagin": [6, 7], "per_pag": [6, 7], "per": [6, 7, 8], "q": 6, "sort": [6, 7], "criteria": 6, "order": [6, 7, 8], "asc": 6, "detail": [6, 8], "other": [6, 12], "jpeg": 6, "add": [6, 8, 9, 10, 11], "remov": [6, 8, 9, 10], "modifi": [6, 8, 9, 12], "new_email": 6, "reset_password": 6, "differ": [6, 8, 10], "than": [6, 8], "curent": 6, "A": [6, 8, 9, 10, 12, 13], "own": [6, 11], "except": [6, 13], "he": 6, "s": [6, 7, 8, 12], "john_do": 6, "your": [6, 11, 12], "02": 7, "31": 7, "least": 7, "ascent": [7, 10], "ave_spe": 7, "bound": 7, "creation_d": 7, "13": 7, "51": 7, "descent": [7, 10], "17": [7, 12], "04": 7, "kjxavsturjvoah2wvcegef": 7, "map": [7, 8, 10, 11], "max_alt": 7, "max_spe": 7, "min_alt": 7, "modification_d": 7, "move": [7, 8], "next_workout": 7, "note": [7, 8, 10, 12], "paus": [7, 8], "previous_workout": 7, "mon": 7, "jan": 7, "segment": [7, 8, 10], "titl": 7, "weather_end": 7, "weather_start": 7, "with_gpx": 7, "100": [7, 8, 10], "distance_from": 7, "minim": 7, "distance_to": 7, "maxim": 7, "duration_from": 7, "h": [7, 10], "duration_to": 7, "ave_speed_from": 7, "ave_speed_to": 7, "max_speed_from": 7, "max_speed_to": 7, "desc": 7, "workout_short_id": 7, "57": [7, 8], "45": 7, "22": 7, "gpx": [7, 8, 10, 11, 12], "morn": 7, "acit": 7, "short": 7, "leaflet": [7, 12], "chart_data": 7, "chart": [7, 8, 10, 12], "rechart": 7, "elev": [7, 8, 10, 12], "279": 7, "latitud": 7, "5078118": 7, "longitud": 7, "1232004": 7, "63": 7, "fri": 7, "44": [7, 8], "7": [7, 12], "7380": 7, "280": 7, "5079733": 7, "1234538": 7, "39": 7, "segment_id": 7, "map_id": 7, "fa33f4d996844a5c73ecd1ae24456ab8": 7, "1563529507772": 7, "map_til": 7, "z": [7, 12], "x": [7, 12], "tile": [7, 8], "c": 7, "4109": 7, "2930": 7, "subdomain": 7, "zoom": 7, "index": 7, "along": 7, "axi": 7, "download": [7, 8, 10, 12], "xml": 7, "201": 7, "no_gpx": 7, "uuid": [7, 8], "km": [7, 10], "second": 7, "mandatori": [7, 8, 12], "193": 8, "192": 8, "instead": [8, 10], "191": 8, "layout": 8, "includ": 8, "pr": 8, "195": 8, "affect": 8, "previous": 8, "import": [8, 12], "cc4287e": 8, "docker": 8, "env": [8, 12], "In": [8, 10], "offset": 8, "depend": [8, 12], "refacto": 8, "befor": [8, 12], "introduc": 8, "now": [8, 9, 10, 12], "possibl": [8, 10, 11, 12], "smtp": [8, 12], "see": [8, 10, 11, 12, 13], "document": [8, 11, 12], "reduc": 8, "pre": 8, "requisit": 8, "To": [8, 12], "manag": [8, 9], "cli": [8, 9, 10, 12], "180": 8, "cannot": [8, 10], "tl": [8, 12], "177": 8, "translat": 8, "card": 8, "posit": [8, 10], "small": 8, "screen": [8, 10], "175": 8, "dashboard": 8, "refresh": 8, "173": 8, "link": [8, 12], "incorrect": 8, "were": 8, "171": 8, "correctli": 8, "need": [8, 12], "sent": [8, 10, 12], "155": 8, "106": 8, "169": 8, "161": 8, "farthest": [8, 10], "160": 8, "app": [8, 11], "thank": 8, "fmstrat": 8, "contain": [8, 10, 12], "databas": [8, 10, 12, 13], "migrat": [8, 9, 12], "upgrad": 8, "sever": [8, 11, 12], "danielsiersleben": 8, "report": 8, "And": 8, "initi": [8, 12], "command": [8, 10, 11, 12], "set": [8, 9, 10, 12], "149": 8, "initialis": [8, 12], "152": 8, "autoescap": 8, "jinja": 8, "templat": 8, "151": 8, "sanit": 8, "input": 8, "serv": [8, 12], "dramatiq": [8, 12], "warn": [8, 10], "launch": 8, "worker": [8, 12], "w": 8, "script": 8, "entrypoint": 8, "drop": 8, "avoid": 8, "product": 8, "dotenv": 8, "146": 8, "filter": [8, 10], "145": 8, "model": 8, "140": 8, "fullscreen": 8, "control": [8, 10], "138": 8, "135": 8, "finish": 8, "marker": 8, "134": 8, "wind": [8, 10], "direct": [8, 10], "877fa0f": 8, "icon": [8, 12], "calendar": [8, 10], "resolut": 8, "131": 8, "129": 8, "127": [8, 12], "pars": [8, 12], "legitim": 8, "uri": 8, "localhost": [8, 12], "25": [8, 12], "123": 8, "121": 8, "snowsho": [8, 10], "116": 8, "better": 8, "ui": 8, "button": 8, "graph": 8, "115": 8, "option": [8, 9, 12], "91": 8, "min": 8, "altitud": 8, "90": 8, "seem": 8, "104": 8, "switch": 8, "agplv3": 8, "licens": [8, 11], "101": 8, "full": [8, 10], "client": [8, 12], "develop": [8, 9, 11], "98": 8, "109": 8, "support": [8, 10, 13], "slow": 8, "movement": 8, "84": 8, "93": 8, "paf38": 8, "83": 8, "gener": [8, 10, 12], "static": [8, 12], "keep": [8, 11, 12], "environ": [8, 9, 13], "variabl": [8, 13], "default_staticmap": [8, 12], "81": 8, "remain": 8, "textarea": 8, "82": 8, "dai": [8, 10], "80": [8, 12], "save": [8, 10], "79": 8, "fail": [8, 14], "make": [8, 12], "rebuild": 8, "75": 8, "same": 8, "python": [8, 12], "javascript": 8, "due": 8, "sqlalchemi": [8, 12, 13], "engin": [8, 12, 13], "postgr": [8, 13], "longer": [8, 13], "database_url": [8, 12], "postgresql": [8, 12, 13], "72": 8, "exceed": 8, "71": 8, "greater": 8, "70": 8, "less": 8, "upload": [8, 9, 10, 12], "66": 8, "limit": [8, 10], "64": 8, "shown": 8, "62": 8, "refactor": 8, "evalu": [8, 12], "purpos": [8, 12], "standard": [8, 12], "term": [8, 12], "directori": [8, 12], "also": [8, 9, 11, 12], "59": 8, "major": 8, "instal": [8, 11], "becom": 8, "more": [8, 10, 11, 12], "easi": 8, "read": 8, "been": 8, "renam": 8, "layer": [8, 12], "replac": [8, 12], "thunderforest": [8, 12], "outdoor": [8, 11, 12], "54": 8, "53": 8, "simplifi": 8, "redi": [8, 12], "complet": 8, "side": 8, "4c3fc34": 8, "empti": [8, 9, 12], "logout": 8, "34614d5": 8, "spinner": 8, "load": [8, 13], "b862a77": 8, "2e1ee2c": 8, "interceptor": 8, "rout": 8, "definit": 8, "down": 8, "43": 8, "weekend": 8, "background": 8, "40": 8, "local": [8, 11, 12], "i18n": 8, "41": 8, "show": [8, 9], "point": [8, 12], "mous": 8, "over": 8, "choos": [8, 10], "36": 8, "33": 8, "37": 8, "list": [8, 11, 12], "34": 8, "weather": [8, 10, 12], "anymor": 8, "poetri": [8, 12], "pipenv": 8, "packag": [8, 12], "total": [8, 10], "calcul": 8, "28": 8, "26": 8, "tooltip": [8, 10], "creation": [8, 10], "montain": 8, "even": [8, 10], "enter": [8, 10], "darkski": [8, 10], "kei": [8, 10, 12], "search": 8, "owner": [8, 10], "view": [8, 10], "usag": 9, "arg": 9, "fittracke": [9, 10, 12, 14], "help": 9, "exit": 9, "deprec": 9, "next": [9, 10], "fittrackee_set_admin": 9, "fittrackee_upgrade_db": 9, "appli": 9, "descript": [9, 12], "electr": 10, "row": 10, "ski": 10, "alpin": 10, "cross": 10, "countri": 10, "trail": 10, "overridden": 10, "which": 10, "up": [10, 11], "relat": [10, 12], "store": [10, 11], "metric": 10, "system": [10, 12], "arrow": 10, "indic": 10, "come": 10, "period": 10, "mai": [10, 11, 12], "origin": 10, "dropdown": 10, "For": [10, 12], "case": [10, 12], "line": [10, 11, 12], "between": 10, "overrid": 10, "appear": 10, "still": [10, 11], "defin": 10, "rais": 10, "necessari": [10, 12], "like": [10, 12], "nginx": [10, 12], "lock": 10, "via": 10, "english": 10, "french": 10, "track": 11, "mobil": 11, "yet": 11, "export": 11, "them": 11, "android": 11, "exhaust": 11, "runner": 11, "gpl": 11, "v3": 11, "forrunn": 11, "opentrack": 11, "apach": 11, "fitotrack": 11, "open": [11, 12], "street": 11, "under": [11, 12], "heavi": [11, 12], "featur": [11, 12], "unstabl": [11, 12], "issu": [11, 12], "interfac": [11, 12], "troubleshoot": 11, "written": 12, "typescript": 12, "flask": 12, "staticmap": 12, "coordin": 12, "forecast": 12, "io": 12, "fetch": 12, "dark": 12, "sky": 12, "former": 12, "task": 12, "queue": 12, "vue3": 12, "vuex": 12, "js": 12, "logo": 12, "made": 12, "freepik": 12, "flaticon": 12, "fork": 12, "awesom": 12, "yarn": 12, "compos": 12, "step": 12, "describ": 12, "linux": 12, "test": 12, "debian": 12, "arch": 12, "On": 12, "os": 12, "encount": 12, "adapt": 12, "sinc": 12, "makefil": 12, "custom": 12, "librari": 12, "thei": 12, "method": 12, "flask_app": 12, "modul": 12, "should": 12, "pwd": 12, "__main__": 12, "py": 12, "els": 12, "host": 12, "port": 12, "5000": 12, "app_set": 12, "productionconfig": 12, "app_secret_kei": 12, "secret": 12, "app_work": 12, "spawn": 12, "gunicorn": [12, 13], "app_log": 12, "path": 12, "upload_fold": 12, "With": 12, "virtualenv": 12, "5432": 12, "begin": 12, "database_disable_pool": 12, "pool": 12, "entri": 12, "directli": 12, "ui_url": 12, "email_url": [12, 13], "sender_email": 12, "sender": 12, "redis_url": 12, "workers_process": 12, "tile_server_url": 12, "attribut": 12, "target": 12, "_blank": 12, "rel": 12, "noopen": 12, "noreferr": 12, "weather_api_kei": 12, "weather_api": 12, "vue_app_api_url": 12, "unencrypt": 12, "ssl": 12, "465": 12, "starttl": 12, "587": 12, "office365": 12, "work": 12, "omit": 12, "old": 12, "adress": 12, "apikei": 12, "xxxx": 12, "where": 12, "servic": 12, "recommend": 12, "wai": 12, "pip": 12, "WITH": 12, "grant": 12, "privileg": 12, "ON": 12, "TO": 12, "nano": 12, "schema": 12, "ftcli": 12, "db": 12, "fittrackee_work": 12, "systemd": 12, "3000": 12, "archlinux": 12, "yai": 12, "project": 12, "clone": 12, "repo": 12, "git": 12, "github": 12, "samr1": 12, "cd": 12, "vue": 12, "releas": 12, "v0": 12, "wget": 12, "tar": 12, "gz": 12, "xzf": 12, "mv": 12, "sql": 12, "backup": 12, "pg_dump": 12, "u": 12, "changelog": 12, "restart": 12, "pull": 12, "repositori": 12, "overwrit": 12, "cp": 12, "r": 12, "There": 12, "One": 12, "proxi": 12, "pass": 12, "distribut": 12, "network": 12, "startlimitintervalsec": 12, "simpl": 12, "alwai": 12, "restartsec": 12, "standardoutput": 12, "syslog": 12, "standarderror": 12, "syslogidentifi": 12, "workingdirectori": 12, "home": 12, "execstart": 12, "venv": 12, "bin": 12, "b": 12, "create_app": 12, "logfil": 12, "wantedbi": 12, "multi": 12, "OF": 12, "listen": 12, "443": 12, "http2": 12, "server_nam": 12, "ssl_certif": 12, "fullchain": 12, "pem": 12, "ssl_certificate_kei": 12, "privkei": 12, "proxy_pass": 12, "proxy_redirect": 12, "proxy_set_head": 12, "real": 12, "ip": 12, "remote_addr": 12, "forward": 12, "proxy_add_x_forwarded_for": 12, "301": 12, "request_uri": 12, "larger": 12, "client_max_body_s": 12, "build": 12, "init": 12, "8025": 12, "access": 12, "mailhog": 12, "tool": 12, "shell": 12, "insid": 12, "addit": 12, "fittrackee_cli": 12, "exc": 13, "nosuchmoduleerror": 13, "plugin": 13, "dialect": 13, "invalidemailurlschem": 13, "todo": 15}, "objects": {"": [[0, 0, 1, "post--api-auth-account-confirm", "/api/auth/account/confirm"], [0, 0, 1, "post--api-auth-account-resend-confirmation", "/api/auth/account/resend-confirmation"], [0, 0, 1, "post--api-auth-email-update", "/api/auth/email/update"], [0, 0, 1, "post--api-auth-login", "/api/auth/login"], [0, 0, 1, "post--api-auth-password-reset-request", "/api/auth/password/reset-request"], [0, 0, 1, "post--api-auth-password-update", "/api/auth/password/update"], [0, 1, 1, "delete--api-auth-picture", "/api/auth/picture"], [0, 0, 1, "post--api-auth-picture", "/api/auth/picture"], [0, 2, 1, "get--api-auth-profile", "/api/auth/profile"], [0, 0, 1, "post--api-auth-profile-edit", "/api/auth/profile/edit"], [0, 3, 1, "patch--api-auth-profile-edit-account", "/api/auth/profile/edit/account"], [0, 0, 1, "post--api-auth-profile-edit-preferences", "/api/auth/profile/edit/preferences"], [0, 0, 1, "post--api-auth-profile-edit-sports", "/api/auth/profile/edit/sports"], [0, 1, 1, "delete--api-auth-profile-reset-sports-(sport_id)", "/api/auth/profile/reset/sports/(sport_id)"], [0, 0, 1, "post--api-auth-register", "/api/auth/register"], [1, 2, 1, "get--api-config", "/api/config"], [1, 3, 1, "patch--api-config", "/api/config"], [1, 2, 1, "get--api-ping", "/api/ping"], [3, 2, 1, "get--api-records", "/api/records"], [4, 2, 1, "get--api-sports", "/api/sports"], [4, 2, 1, "get--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [4, 3, 1, "patch--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [5, 2, 1, "get--api-stats-(user_name)-by_sport", "/api/stats/(user_name)/by_sport"], [5, 2, 1, "get--api-stats-(user_name)-by_time", "/api/stats/(user_name)/by_time"], [5, 2, 1, "get--api-stats-all", "/api/stats/all"], [6, 2, 1, "get--api-users", "/api/users"], [6, 1, 1, "delete--api-users-(user_name)", "/api/users/(user_name)"], [6, 2, 1, "get--api-users-(user_name)", "/api/users/(user_name)"], [6, 3, 1, "patch--api-users-(user_name)", "/api/users/(user_name)"], [6, 2, 1, "get--api-users-(user_name)-picture", "/api/users/(user_name)/picture"], [7, 2, 1, "get--api-workouts", "/api/workouts"], [7, 0, 1, "post--api-workouts", "/api/workouts"], [7, 1, 1, "delete--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [7, 3, 1, "patch--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data", "/api/workouts/(string:workout_short_id)/chart_data"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/chart_data/segment/(int:segment_id)"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx", "/api/workouts/(string:workout_short_id)/gpx"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-download", "/api/workouts/(string:workout_short_id)/gpx/download"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/gpx/segment/(int:segment_id)"], [7, 2, 1, "get--api-workouts-map-(map_id)", "/api/workouts/map/(map_id)"], [7, 0, 1, "post--api-workouts-no_gpx", "/api/workouts/no_gpx"], [12, 4, 1, "-", "APP_LOG"], [12, 4, 1, "-", "APP_SECRET_KEY"], [12, 4, 1, "-", "APP_SETTINGS"], [12, 4, 1, "-", "APP_WORKERS"], [12, 4, 1, "-", "DATABASE_DISABLE_POOLING"], [12, 4, 1, "-", "DATABASE_URL"], [12, 4, 1, "envvar-DEFAULT_STATICMAP", "DEFAULT_STATICMAP \ud83c\udd95"], [12, 4, 1, "-", "EMAIL_URL"], [12, 4, 1, "-", "FLASK_APP"], [12, 4, 1, "-", "HOST"], [12, 4, 1, "-", "MAP_ATTRIBUTION"], [12, 4, 1, "-", "PORT"], [12, 4, 1, "-", "REDIS_URL"], [12, 4, 1, "-", "SENDER_EMAIL"], [12, 4, 1, "-", "TILE_SERVER_URL"], [12, 4, 1, "-", "UI_URL"], [12, 4, 1, "-", "UPLOAD_FOLDER"], [12, 4, 1, "-", "VUE_APP_API_URL"], [12, 4, 1, "-", "WEATHER_API_KEY"], [12, 4, 1, "-", "WORKERS_PROCESSES"]], "/api/workouts/map_tile/(s)/(z)/(x)/(y)": [[7, 2, 1, "get--api-workouts-map_tile-(s)-(z)-(x)-(y).png", "png"]]}, "objtypes": {"0": "http:post", "1": "http:delete", "2": "http:get", "3": "http:patch", "4": "std:envvar"}, "objnames": {"0": ["http", "post", "HTTP post"], "1": ["http", "delete", "HTTP delete"], "2": ["http", "get", "HTTP get"], "3": ["http", "patch", "HTTP patch"], "4": ["std", "envvar", "environment variable"]}, "titleterms": {"authent": 0, "configur": 1, "api": 2, "document": 2, "endpoint": 2, "record": 3, "sport": 4, "statist": [5, 8, 10], "user": [6, 9, 15], "workout": [7, 10], "chang": 8, "log": 8, "version": 8, "0": 8, "6": 8, "8": 8, "2022": 8, "06": 8, "22": 8, "issu": 8, "close": 8, "bug": 8, "fix": 8, "misc": 8, "7": 8, "11": 8, "05": 8, "29": 8, "5": 8, "04": 8, "24": 8, "featur": [8, 10], "4": 8, "23": 8, "3": 8, "09": 8, "pull": 8, "request": 8, "2": 8, "03": 8, "1": 8, "27": 8, "02": 8, "13": 8, "secur": 8, "01": 8, "19": 8, "new": 8, "2021": 8, "12": 8, "30": 8, "14": 8, "9": 8, "07": 8, "16": 8, "21": 8, "17": 8, "31": 8, "10": 8, "2020": 8, "fittracke": [8, 11, 13], "pypi": [8, 12], "administr": [8, 10, 13], "15": 8, "improv": 8, "minor": 8, "avail": 8, "french": 8, "2019": 8, "first": 8, "releas": 8, "2018": 8, "command": 9, "line": 9, "interfac": 9, "databas": 9, "ftcli": 9, "db": 9, "upgrad": [9, 12], "drop": 9, "updat": 9, "account": 10, "prefer": 10, "translat": 10, "screenshot": 10, "dashboard": 10, "detail": 10, "list": 10, "tabl": 11, "content": 11, "instal": 12, "prerequisit": 12, "environ": 12, "variabl": 12, "email": 12, "map": 12, "tile": 12, "server": 12, "from": 12, "sourc": 12, "dev": 12, "product": 12, "prod": 12, "deploy": 12, "docker": 12, "develop": 12, "fail": 13, "start": 13, "troubleshoot": 14}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}}) \ No newline at end of file +Search.setIndex({"docnames": ["api/auth", "api/configuration", "api/index", "api/records", "api/sports", "api/stats", "api/users", "api/workouts", "changelog", "cli", "features", "index", "installation", "troubleshooting/administrator", "troubleshooting/index", "troubleshooting/user"], "filenames": ["api/auth.rst", "api/configuration.rst", "api/index.rst", "api/records.rst", "api/sports.rst", "api/stats.rst", "api/users.rst", "api/workouts.rst", "changelog.md", "cli.rst", "features.rst", "index.rst", "installation.rst", "troubleshooting/administrator.rst", "troubleshooting/index.rst", "troubleshooting/user.rst"], "titles": ["Authentication", "Configuration", "API documentation", "Records", "Sports", "Statistics", "Users", "Workouts", "Change log", "Command line interface", "Features", "FitTrackee", "Installation", "Administrator", "Troubleshooting", "User"], "terms": {"post": [0, 7], "api": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "auth": [0, 1, 3, 4, 5, 6, 7, 12], "regist": [0, 1, 12], "user": [0, 1, 2, 3, 4, 5, 7, 8, 10, 12, 14], "send": [0, 6, 8, 10, 12], "confirm": [0, 8, 10, 12], "email": [0, 1, 6, 8, 9, 10, 13], "The": [0, 8, 9, 10, 12], "newli": [0, 12], "creat": [0, 7, 8, 10, 12], "account": [0, 6, 8, 9, 12], "inact": [0, 6, 10, 12], "must": [0, 1, 4, 6, 8, 10, 12, 13], "hi": [0, 6, 8, 10], "activ": [0, 4, 6, 8, 9, 10, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 11, 12], "request": [0, 1, 3, 4, 5, 6, 7, 12], "http": [0, 1, 3, 4, 5, 6, 7, 12], "1": [0, 1, 3, 4, 5, 6, 7, 10, 12], "content": [0, 1, 3, 4, 5, 6, 7], "type": [0, 1, 3, 4, 5, 6, 7, 12], "applic": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "json": [0, 1, 3, 4, 5, 6, 7], "respons": [0, 1, 3, 4, 5, 6, 7], "success": [0, 1, 3, 4, 5, 6, 7], "200": [0, 1, 3, 4, 5, 6, 7], "statu": [0, 1, 3, 4, 5, 6, 7, 9], "error": [0, 1, 4, 6, 7, 8, 10, 12, 13], "registr": [0, 1, 8, 10, 12], "400": [0, 1, 4, 6, 7], "bad": [0, 1, 4, 6, 7], "messag": [0, 1, 7, 8, 9], "valid": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13], "provid": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13], "n": 0, "object": [0, 1, 4, 6, 7], "usernam": [0, 6, 8, 12], "string": [0, 1, 4, 5, 6, 7, 12], "3": [0, 4, 5, 6, 7, 10, 12], "30": [0, 5], "charact": [0, 8], "requir": 0, "password": [0, 6, 8, 9, 10, 12], "8": [0, 1, 7, 12], "code": [0, 1, 3, 4, 5, 6, 7, 8], "ok": [0, 1, 3, 4, 5, 6, 7], "invalid": [0, 1, 3, 4, 5, 6, 7, 8, 12], "payload": [0, 1, 4, 6, 7], "sorri": 0, "alreadi": 0, "taken": 0, "onli": [0, 6, 7, 8, 9, 10, 12], "alphanumer": [0, 8], "underscor": 0, "_": [0, 8], "allow": [0, 1, 7, 8, 10, 11], "403": [0, 1, 4, 5, 6, 7], "forbidden": [0, 1, 4, 5, 6, 7], "disabl": [0, 8, 10, 12], "500": [0, 1, 4, 6, 7, 8], "intern": [0, 1, 4, 6, 7], "server": [0, 1, 4, 6, 7, 8, 10, 11], "pleas": [0, 1, 3, 4, 5, 6, 7, 8], "try": [0, 6, 7], "again": [0, 1, 3, 4, 5, 6, 7], "contact": [0, 1, 6, 7, 10], "administr": [0, 1, 6, 7, 14], "after": [0, 8, 10, 12], "auth_token": 0, "web": [0, 11, 12], "token": [0, 1, 3, 4, 5, 6, 7], "resend": 0, "instruct": [0, 8, 10, 12], "If": [0, 10, 12], "thi": [0, 7, 8, 9, 10, 11, 12], "endpoint": [0, 1, 8], "avail": [0, 3, 9, 10, 12], "resent": 0, "404": [0, 4, 5, 6, 7, 8], "Not": [0, 4, 5, 6, 7], "found": [0, 4, 5, 6, 7, 8], "url": [0, 8, 12, 13], "wa": [0, 8], "login": 0, "an": [0, 1, 4, 6, 8, 10, 12], "can": [0, 6, 8, 10, 11, 12, 13], "log": [0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13], "successfulli": 0, "401": [0, 1, 3, 4, 5, 6, 7], "unauthor": [0, 1, 3, 4, 5, 6, 7], "credenti": [0, 12], "get": [0, 1, 3, 4, 5, 6, 7], "profil": [0, 8], "info": 0, "prefer": [0, 6, 8], "data": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "admin": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12], "fals": [0, 1, 4, 6, 7, 12], "bio": [0, 6], "null": [0, 4, 6, 7], "birth_dat": [0, 6], "created_at": [0, 6], "sun": [0, 3, 6, 7], "14": [0, 6, 7], "jul": [0, 3, 6, 7], "2019": [0, 3, 5, 6, 7], "09": [0, 6], "58": [0, 6, 8], "gmt": [0, 3, 6, 7], "sam": [0, 6], "com": [0, 1, 6, 12], "first_nam": [0, 6], "imperial_unit": [0, 6], "is_act": [0, 4, 6], "true": [0, 1, 4, 6, 8, 12], "languag": [0, 6, 10], "en": [0, 6], "last_nam": [0, 6], "locat": [0, 6, 12], "nb_sport": [0, 6], "nb_workout": [0, 5, 6], "6": [0, 1, 4, 6, 7, 9, 10, 12], "pictur": [0, 6, 7, 8], "record": [0, 2, 6, 7, 8, 10], "id": [0, 3, 4, 5, 6, 7], "9": [0, 3, 6, 12], "record_typ": [0, 3, 6, 7], "AS": [0, 3, 6, 7], "sport_id": [0, 3, 4, 5, 6, 7], "valu": [0, 3, 6, 7], "18": [0, 3, 6, 7, 8], "workout_d": [0, 3, 6, 7], "07": [0, 3, 6, 7], "08": [0, 3, 6], "00": [0, 3, 6, 7], "workout_id": [0, 3, 6, 7], "hvybqybra7wwxpastwr4v2": [0, 3, 6], "10": [0, 1, 3, 6, 7, 12], "fd": [0, 3, 6, 7], "11": [0, 3, 6, 10], "ld": [0, 3, 6, 7], "01": [0, 3, 5, 6, 7], "12": [0, 3, 6, 7], "ms": [0, 3, 6, 7], "sports_list": [0, 6], "4": [0, 4, 5, 6, 7, 12], "timezon": [0, 6, 7, 8, 10], "europ": [0, 6], "pari": [0, 6], "total_dist": [0, 5, 6], "67": [0, 6], "895": [0, 6], "total_dur": [0, 5, 6], "50": [0, 6, 8], "27": [0, 6], "weekm": [0, 5, 6], "header": [0, 1, 3, 4, 5, 6, 7], "author": [0, 1, 3, 4, 5, 6, 7], "oauth": [0, 1, 3, 4, 5, 6, 7], "2": [0, 1, 3, 4, 5, 6, 7, 10, 12], "0": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12], "bearer": [0, 1, 3, 4, 5, 6, 7], "signatur": [0, 1, 3, 4, 5, 6, 7], "expir": [0, 1, 3, 4, 5, 6, 7], "edit": [0, 8, 10], "updat": [0, 1, 4, 6, 7, 8, 10, 12], "first": [0, 10], "name": [0, 5, 6, 8, 12], "last": [0, 12], "biographi": 0, "birth": [0, 8], "date": [0, 5, 7, 8, 10], "format": [0, 5, 7], "y": [0, 5, 7, 12], "m": [0, 5, 7], "d": [0, 5, 7], "time": [0, 5, 7, 8, 10], "zone": 0, "boolean": [0, 1, 6, 9], "doe": [0, 5, 6, 7, 8], "week": [0, 5, 8, 10], "start": [0, 5, 7, 8, 10, 12, 14], "mondai": [0, 5, 10], "displai": [0, 7, 8, 9, 10, 11, 12, 13], "distanc": [0, 3, 7, 8, 10], "imperi": [0, 8, 10], "unit": [0, 8, 12], "don": 0, "t": [0, 8, 13], "match": 0, "sport": [0, 2, 5, 7, 8, 10, 12], "color": [0, 4, 8, 10], "000000": 0, "stopped_speed_threshold": [0, 4], "user_id": 0, "hexadecim": 0, "when": [0, 1, 8, 9, 10, 12], "ad": [0, 8, 9, 10], "workout": [0, 2, 5, 8, 11], "float": [0, 7], "stop": [0, 8, 10, 12], "speed": [0, 3, 7, 8, 10, 12], "threshold": [0, 8, 10], "us": [0, 6, 7, 8, 10, 11, 12], "gpxpy": [0, 10, 12], "exist": [0, 5, 6, 7, 10, 11, 12], "delet": [0, 6, 7, 8, 9, 10], "reset": [0, 6, 8, 9, 10, 12], "given": [0, 12], "204": [0, 6, 7], "paramet": [0, 4, 5, 6, 7, 8, 10], "No": [0, 6, 7, 8, 11], "multipart": [0, 7], "form": [0, 7], "file": [0, 1, 7, 8, 9, 10, 11, 12], "imag": [0, 6, 7, 8, 10, 12], "extens": [0, 7], "jpg": 0, "png": [0, 7, 12], "gif": 0, "part": [0, 7], "select": [0, 7], "413": [0, 7], "entiti": [0, 7], "too": [0, 7], "larg": [0, 7, 10], "dure": [0, 7], "size": [0, 1, 7, 8, 10], "exce": [0, 7], "0mb": [0, 7], "NO": [0, 6, 7], "handl": [0, 10, 12], "process": [0, 8, 10, 12], "patch": [0, 1, 4, 6, 7], "It": [0, 6, 8, 10, 11, 13], "enabl": [0, 1, 6, 10, 12], "chang": [0, 10, 11, 12], "one": [0, 6, 7, 10], "current": [0, 8], "address": [0, 10, 12], "inform": [0, 8, 11, 12], "anoth": [0, 6, 12], "new": [0, 6, 9, 10, 12], "new_password": 0, "miss": [0, 8], "config": [1, 8, 12], "admin_contact": 1, "gpx_limit_import": 1, "is_email_sending_en": 1, "is_registration_en": 1, "max_single_file_s": 1, "1048576": 1, "max_us": 1, "max_zip_file_s": 1, "10485760": 1, "map_attribut": [1, 12], "copi": [1, 12], "href": [1, 12], "www": [1, 12], "openstreetmap": [1, 8, 12], "org": [1, 12], "copyright": [1, 12], "contributor": [1, 8, 12], "version": [1, 9, 12], "authent": [1, 2, 3, 4, 6, 7], "integ": [1, 4, 5, 6, 7], "max": [1, 6, 7, 8], "number": [1, 6, 7, 8, 10, 12], "zip": [1, 7, 8, 10], "archiv": [1, 8, 10, 12], "singl": [1, 6, 8, 12], "instanc": [1, 8, 10, 12], "you": [1, 4, 5, 6, 7, 11], "do": [1, 4, 5, 6, 7], "have": [1, 4, 5, 6, 7, 8], "permiss": [1, 4, 5, 6, 7], "ping": 1, "health": 1, "check": [1, 8, 12, 13], "pong": 1, "configur": [2, 8, 10, 12], "statist": 2, "all": [3, 4, 5, 6, 12], "follow": [3, 9, 10, 12, 13], "ar": [3, 7, 8, 9, 10, 11, 12, 13], "averag": [3, 7, 8, 10], "farest": [3, 8], "longest": [3, 8, 10], "durat": [3, 7, 8, 10], "maximum": [3, 8, 10], "return": [3, 6, 7, 8, 12], "non": [4, 11], "is_active_for_us": 4, "label": [4, 8], "cycl": [4, 8, 10], "transport": [4, 8, 10], "hike": [4, 8, 10], "mountain": [4, 10], "bike": [4, 7, 8, 10], "5": [4, 5, 6, 7, 9, 10, 12], "run": [4, 8, 10, 12], "walk": [4, 8, 10], "has_workout": 4, "int": [4, 7], "NOT": [4, 7], "stat": [5, 8], "user_nam": [5, 6], "by_tim": 5, "without": [5, 6, 7, 8, 10, 11], "from": [5, 7, 8, 10, 11], "2018": [5, 7], "06": 5, "2017": [5, 7], "average_spe": 5, "48": 5, "total_asc": 5, "203": 5, "156": [5, 8], "15": [5, 7], "282": 5, "12341": 5, "16": [5, 7], "99": [5, 8], "150": 5, "178": [5, 8], "47": [5, 7, 8], "9960": 5, "95": [5, 8], "46": [5, 8], "78": 5, "613": 5, "1267": 5, "queri": [5, 6, 7], "end": [5, 7], "frame": 5, "sundai": [5, 7, 10], "month": [5, 8, 10], "year": [5, 10], "default": [5, 6, 7, 8, 10, 12], "by_sport": 5, "uploads_dir_s": 5, "1000": 5, "regardless": 6, "ha": [6, 10], "right": [6, 8, 9, 10, 12], "some": [6, 7, 8, 11, 12], "order_bi": 6, "workouts_count": 6, "par_pag": 6, "is_admin": 6, "sat": 6, "20": 6, "03": [6, 7], "fr": 6, "page": [6, 7, 8], "pagin": [6, 7], "per_pag": [6, 7], "per": [6, 7, 8], "q": 6, "sort": [6, 7], "criteria": 6, "order": [6, 7, 8], "asc": 6, "detail": [6, 8], "other": [6, 12], "jpeg": 6, "add": [6, 8, 9, 10, 11], "remov": [6, 8, 9, 10], "modifi": [6, 8, 9, 12], "new_email": 6, "reset_password": 6, "differ": [6, 8, 10], "than": [6, 8], "curent": 6, "A": [6, 8, 9, 10, 12, 13], "own": [6, 11], "except": [6, 13], "he": 6, "s": [6, 7, 8, 12], "john_do": 6, "your": [6, 11, 12], "02": 7, "31": 7, "least": 7, "ascent": [7, 10], "ave_spe": 7, "bound": 7, "creation_d": 7, "13": 7, "51": 7, "descent": [7, 10], "17": [7, 12], "04": 7, "kjxavsturjvoah2wvcegef": 7, "map": [7, 8, 10, 11], "max_alt": 7, "max_spe": 7, "min_alt": 7, "modification_d": 7, "move": [7, 8], "next_workout": 7, "note": [7, 8, 10, 12], "paus": [7, 8], "previous_workout": 7, "mon": 7, "jan": 7, "segment": [7, 8, 10], "titl": 7, "weather_end": 7, "weather_start": 7, "with_gpx": 7, "100": [7, 8, 10], "distance_from": 7, "minim": 7, "distance_to": 7, "maxim": 7, "duration_from": 7, "h": [7, 10], "duration_to": 7, "ave_speed_from": 7, "ave_speed_to": 7, "max_speed_from": 7, "max_speed_to": 7, "desc": 7, "workout_short_id": 7, "57": [7, 8], "45": 7, "22": 7, "gpx": [7, 8, 10, 11, 12], "morn": 7, "acit": 7, "short": 7, "leaflet": [7, 12], "chart_data": 7, "chart": [7, 8, 10, 12], "rechart": 7, "elev": [7, 8, 10, 12], "279": 7, "latitud": 7, "5078118": 7, "longitud": 7, "1232004": 7, "63": 7, "fri": 7, "44": [7, 8], "7": [7, 12], "7380": 7, "280": 7, "5079733": 7, "1234538": 7, "39": 7, "segment_id": 7, "map_id": 7, "fa33f4d996844a5c73ecd1ae24456ab8": 7, "1563529507772": 7, "map_til": 7, "z": [7, 12], "x": [7, 12], "tile": [7, 8], "c": 7, "4109": 7, "2930": 7, "subdomain": 7, "zoom": 7, "index": 7, "along": 7, "axi": 7, "download": [7, 8, 10, 12], "xml": 7, "201": 7, "no_gpx": 7, "uuid": [7, 8], "km": [7, 10], "second": 7, "mandatori": [7, 8, 12], "193": 8, "192": 8, "instead": [8, 10], "191": 8, "layout": 8, "includ": 8, "pr": 8, "195": 8, "affect": 8, "previous": 8, "import": [8, 12], "cc4287e": 8, "docker": 8, "env": [8, 12], "In": [8, 10], "offset": 8, "depend": [8, 12], "refacto": 8, "befor": [8, 12], "introduc": 8, "now": [8, 9, 10, 12], "possibl": [8, 10, 11, 12], "smtp": [8, 12], "see": [8, 10, 11, 12, 13], "document": [8, 11, 12], "reduc": 8, "pre": 8, "requisit": 8, "To": [8, 12], "manag": [8, 9], "cli": [8, 9, 10, 12], "180": 8, "cannot": [8, 10], "tl": [8, 12], "177": 8, "translat": 8, "card": 8, "posit": [8, 10], "small": 8, "screen": [8, 10], "175": 8, "dashboard": 8, "refresh": 8, "173": 8, "link": [8, 12], "incorrect": 8, "were": 8, "171": 8, "correctli": 8, "need": [8, 12], "sent": [8, 10, 12], "155": 8, "106": 8, "169": 8, "161": 8, "farthest": [8, 10], "160": 8, "app": [8, 11], "thank": 8, "fmstrat": 8, "contain": [8, 10, 12], "databas": [8, 10, 12, 13], "migrat": [8, 9, 12], "upgrad": 8, "sever": [8, 11, 12], "danielsiersleben": 8, "report": 8, "And": 8, "initi": [8, 12], "command": [8, 10, 11, 12], "set": [8, 9, 10, 12], "149": 8, "initialis": [8, 12], "152": 8, "autoescap": 8, "jinja": 8, "templat": 8, "151": 8, "sanit": 8, "input": 8, "serv": [8, 12], "dramatiq": [8, 12], "warn": [8, 10], "launch": 8, "worker": [8, 12], "w": 8, "script": 8, "entrypoint": 8, "drop": 8, "avoid": 8, "product": 8, "dotenv": 8, "146": 8, "filter": [8, 10], "145": 8, "model": 8, "140": 8, "fullscreen": 8, "control": [8, 10], "138": 8, "135": 8, "finish": 8, "marker": 8, "134": 8, "wind": [8, 10], "direct": [8, 10], "877fa0f": 8, "icon": [8, 12], "calendar": [8, 10], "resolut": 8, "131": 8, "129": 8, "127": [8, 12], "pars": [8, 12], "legitim": 8, "uri": 8, "localhost": [8, 12], "25": [8, 12], "123": 8, "121": 8, "snowsho": [8, 10], "116": 8, "better": 8, "ui": 8, "button": 8, "graph": 8, "115": 8, "option": [8, 9, 12], "91": 8, "min": 8, "altitud": 8, "90": 8, "seem": 8, "104": 8, "switch": 8, "agplv3": 8, "licens": [8, 11], "101": 8, "full": [8, 10], "client": [8, 12], "develop": [8, 9, 11], "98": 8, "109": 8, "support": [8, 10, 13], "slow": 8, "movement": 8, "84": 8, "93": 8, "paf38": 8, "83": 8, "gener": [8, 10, 12], "static": [8, 12], "keep": [8, 11, 12], "environ": [8, 9, 13], "variabl": [8, 13], "default_staticmap": [8, 12], "81": 8, "remain": 8, "textarea": 8, "82": 8, "dai": [8, 10], "80": [8, 12], "save": [8, 10], "79": 8, "fail": [8, 14], "make": [8, 12], "rebuild": 8, "75": 8, "same": 8, "python": [8, 12], "javascript": 8, "due": 8, "sqlalchemi": [8, 12, 13], "engin": [8, 12, 13], "postgr": [8, 13], "longer": [8, 13], "database_url": [8, 12], "postgresql": [8, 12, 13], "72": 8, "exceed": 8, "71": 8, "greater": 8, "70": 8, "less": 8, "upload": [8, 9, 10, 12], "66": 8, "limit": [8, 10], "64": 8, "shown": 8, "62": 8, "refactor": 8, "evalu": [8, 12], "purpos": [8, 12], "standard": [8, 12], "term": [8, 12], "directori": [8, 12], "also": [8, 9, 11, 12], "59": 8, "major": 8, "instal": [8, 11], "becom": 8, "more": [8, 10, 11, 12], "easi": 8, "read": 8, "been": 8, "renam": 8, "layer": [8, 12], "replac": [8, 12], "thunderforest": [8, 12], "outdoor": [8, 11, 12], "54": 8, "53": 8, "simplifi": 8, "redi": [8, 12], "complet": 8, "side": 8, "4c3fc34": 8, "empti": [8, 9, 12], "logout": 8, "34614d5": 8, "spinner": 8, "load": [8, 13], "b862a77": 8, "2e1ee2c": 8, "interceptor": 8, "rout": 8, "definit": 8, "down": 8, "43": 8, "weekend": 8, "background": 8, "40": 8, "local": [8, 11, 12], "i18n": 8, "41": 8, "show": [8, 9], "point": [8, 12], "mous": 8, "over": 8, "choos": [8, 10], "36": 8, "33": 8, "37": 8, "list": [8, 11, 12], "34": 8, "weather": [8, 10, 12], "anymor": 8, "poetri": [8, 12], "pipenv": 8, "packag": [8, 12], "total": [8, 10], "calcul": 8, "28": 8, "26": 8, "tooltip": [8, 10], "creation": [8, 10], "montain": 8, "even": [8, 10], "enter": [8, 10], "darkski": [8, 10], "kei": [8, 10, 12], "search": 8, "owner": [8, 10], "view": [8, 10], "usag": 9, "arg": 9, "fittracke": [9, 10, 12, 14], "help": 9, "exit": 9, "deprec": 9, "next": [9, 10], "fittrackee_set_admin": 9, "fittrackee_upgrade_db": 9, "appli": 9, "descript": [9, 12], "electr": 10, "row": 10, "ski": 10, "alpin": 10, "cross": 10, "countri": 10, "trail": 10, "overridden": 10, "which": 10, "up": [10, 11], "relat": [10, 12], "store": [10, 11], "metric": 10, "system": [10, 12], "arrow": 10, "indic": 10, "come": 10, "period": 10, "mai": [10, 11, 12], "origin": 10, "dropdown": 10, "For": [10, 12], "case": [10, 12], "line": [10, 11, 12], "between": 10, "overrid": 10, "appear": 10, "still": [10, 11], "defin": 10, "rais": 10, "necessari": [10, 12], "like": [10, 12], "nginx": [10, 12], "lock": 10, "via": 10, "track": 11, "mobil": 11, "yet": 11, "export": 11, "them": 11, "android": 11, "exhaust": 11, "runner": 11, "gpl": 11, "v3": 11, "forrunn": 11, "opentrack": 11, "apach": 11, "fitotrack": 11, "open": [11, 12], "street": 11, "under": [11, 12], "heavi": [11, 12], "featur": [11, 12], "unstabl": [11, 12], "issu": [11, 12], "interfac": [11, 12], "troubleshoot": 11, "written": 12, "typescript": 12, "flask": 12, "staticmap": 12, "coordin": 12, "forecast": 12, "io": 12, "fetch": 12, "dark": 12, "sky": 12, "former": 12, "task": 12, "queue": 12, "vue3": 12, "vuex": 12, "js": 12, "logo": 12, "made": 12, "freepik": 12, "flaticon": 12, "fork": 12, "awesom": 12, "yarn": 12, "compos": 12, "step": 12, "describ": 12, "linux": 12, "test": 12, "debian": 12, "arch": 12, "On": 12, "os": 12, "encount": 12, "adapt": 12, "sinc": 12, "makefil": 12, "custom": 12, "librari": 12, "thei": 12, "method": 12, "flask_app": 12, "modul": 12, "should": 12, "pwd": 12, "__main__": 12, "py": 12, "els": 12, "host": 12, "port": 12, "5000": 12, "app_set": 12, "productionconfig": 12, "app_secret_kei": 12, "secret": 12, "app_work": 12, "spawn": 12, "gunicorn": [12, 13], "app_log": 12, "path": 12, "upload_fold": 12, "With": 12, "virtualenv": 12, "5432": 12, "begin": 12, "database_disable_pool": 12, "pool": 12, "entri": 12, "directli": 12, "ui_url": 12, "email_url": [12, 13], "sender_email": 12, "sender": 12, "redis_url": 12, "workers_process": 12, "tile_server_url": 12, "attribut": 12, "target": 12, "_blank": 12, "rel": 12, "noopen": 12, "noreferr": 12, "weather_api_kei": 12, "weather_api": 12, "vue_app_api_url": 12, "unencrypt": 12, "ssl": 12, "465": 12, "starttl": 12, "587": 12, "office365": 12, "work": 12, "omit": 12, "old": 12, "adress": 12, "apikei": 12, "xxxx": 12, "where": 12, "servic": 12, "recommend": 12, "wai": 12, "pip": 12, "WITH": 12, "grant": 12, "privileg": 12, "ON": 12, "TO": 12, "nano": 12, "schema": 12, "ftcli": 12, "db": 12, "fittrackee_work": 12, "systemd": 12, "3000": 12, "archlinux": 12, "yai": 12, "project": 12, "clone": 12, "repo": 12, "git": 12, "github": 12, "samr1": 12, "cd": 12, "vue": 12, "releas": 12, "v0": 12, "wget": 12, "tar": 12, "gz": 12, "xzf": 12, "mv": 12, "sql": 12, "backup": 12, "pg_dump": 12, "u": 12, "changelog": 12, "restart": 12, "pull": 12, "repositori": 12, "overwrit": 12, "cp": 12, "r": 12, "There": 12, "One": 12, "proxi": 12, "pass": 12, "distribut": 12, "network": 12, "startlimitintervalsec": 12, "simpl": 12, "alwai": 12, "restartsec": 12, "standardoutput": 12, "syslog": 12, "standarderror": 12, "syslogidentifi": 12, "workingdirectori": 12, "home": 12, "execstart": 12, "venv": 12, "bin": 12, "b": 12, "create_app": 12, "logfil": 12, "wantedbi": 12, "multi": 12, "OF": 12, "listen": 12, "443": 12, "http2": 12, "server_nam": 12, "ssl_certif": 12, "fullchain": 12, "pem": 12, "ssl_certificate_kei": 12, "privkei": 12, "proxy_pass": 12, "proxy_redirect": 12, "proxy_set_head": 12, "real": 12, "ip": 12, "remote_addr": 12, "forward": 12, "proxy_add_x_forwarded_for": 12, "301": 12, "request_uri": 12, "larger": 12, "client_max_body_s": 12, "build": 12, "init": 12, "8025": 12, "access": 12, "mailhog": 12, "tool": 12, "shell": 12, "insid": 12, "addit": 12, "fittrackee_cli": 12, "exc": 13, "nosuchmoduleerror": 13, "plugin": 13, "dialect": 13, "invalidemailurlschem": 13, "todo": 15}, "objects": {"": [[0, 0, 1, "post--api-auth-account-confirm", "/api/auth/account/confirm"], [0, 0, 1, "post--api-auth-account-resend-confirmation", "/api/auth/account/resend-confirmation"], [0, 0, 1, "post--api-auth-email-update", "/api/auth/email/update"], [0, 0, 1, "post--api-auth-login", "/api/auth/login"], [0, 0, 1, "post--api-auth-password-reset-request", "/api/auth/password/reset-request"], [0, 0, 1, "post--api-auth-password-update", "/api/auth/password/update"], [0, 1, 1, "delete--api-auth-picture", "/api/auth/picture"], [0, 0, 1, "post--api-auth-picture", "/api/auth/picture"], [0, 2, 1, "get--api-auth-profile", "/api/auth/profile"], [0, 0, 1, "post--api-auth-profile-edit", "/api/auth/profile/edit"], [0, 3, 1, "patch--api-auth-profile-edit-account", "/api/auth/profile/edit/account"], [0, 0, 1, "post--api-auth-profile-edit-preferences", "/api/auth/profile/edit/preferences"], [0, 0, 1, "post--api-auth-profile-edit-sports", "/api/auth/profile/edit/sports"], [0, 1, 1, "delete--api-auth-profile-reset-sports-(sport_id)", "/api/auth/profile/reset/sports/(sport_id)"], [0, 0, 1, "post--api-auth-register", "/api/auth/register"], [1, 2, 1, "get--api-config", "/api/config"], [1, 3, 1, "patch--api-config", "/api/config"], [1, 2, 1, "get--api-ping", "/api/ping"], [3, 2, 1, "get--api-records", "/api/records"], [4, 2, 1, "get--api-sports", "/api/sports"], [4, 2, 1, "get--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [4, 3, 1, "patch--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [5, 2, 1, "get--api-stats-(user_name)-by_sport", "/api/stats/(user_name)/by_sport"], [5, 2, 1, "get--api-stats-(user_name)-by_time", "/api/stats/(user_name)/by_time"], [5, 2, 1, "get--api-stats-all", "/api/stats/all"], [6, 2, 1, "get--api-users", "/api/users"], [6, 1, 1, "delete--api-users-(user_name)", "/api/users/(user_name)"], [6, 2, 1, "get--api-users-(user_name)", "/api/users/(user_name)"], [6, 3, 1, "patch--api-users-(user_name)", "/api/users/(user_name)"], [6, 2, 1, "get--api-users-(user_name)-picture", "/api/users/(user_name)/picture"], [7, 2, 1, "get--api-workouts", "/api/workouts"], [7, 0, 1, "post--api-workouts", "/api/workouts"], [7, 1, 1, "delete--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [7, 3, 1, "patch--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data", "/api/workouts/(string:workout_short_id)/chart_data"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/chart_data/segment/(int:segment_id)"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx", "/api/workouts/(string:workout_short_id)/gpx"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-download", "/api/workouts/(string:workout_short_id)/gpx/download"], [7, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/gpx/segment/(int:segment_id)"], [7, 2, 1, "get--api-workouts-map-(map_id)", "/api/workouts/map/(map_id)"], [7, 0, 1, "post--api-workouts-no_gpx", "/api/workouts/no_gpx"], [12, 4, 1, "-", "APP_LOG"], [12, 4, 1, "-", "APP_SECRET_KEY"], [12, 4, 1, "-", "APP_SETTINGS"], [12, 4, 1, "-", "APP_WORKERS"], [12, 4, 1, "-", "DATABASE_DISABLE_POOLING"], [12, 4, 1, "-", "DATABASE_URL"], [12, 4, 1, "envvar-DEFAULT_STATICMAP", "DEFAULT_STATICMAP \ud83c\udd95"], [12, 4, 1, "-", "EMAIL_URL"], [12, 4, 1, "-", "FLASK_APP"], [12, 4, 1, "-", "HOST"], [12, 4, 1, "-", "MAP_ATTRIBUTION"], [12, 4, 1, "-", "PORT"], [12, 4, 1, "-", "REDIS_URL"], [12, 4, 1, "-", "SENDER_EMAIL"], [12, 4, 1, "-", "TILE_SERVER_URL"], [12, 4, 1, "-", "UI_URL"], [12, 4, 1, "-", "UPLOAD_FOLDER"], [12, 4, 1, "-", "VUE_APP_API_URL"], [12, 4, 1, "-", "WEATHER_API_KEY"], [12, 4, 1, "-", "WORKERS_PROCESSES"]], "/api/workouts/map_tile/(s)/(z)/(x)/(y)": [[7, 2, 1, "get--api-workouts-map_tile-(s)-(z)-(x)-(y).png", "png"]]}, "objtypes": {"0": "http:post", "1": "http:delete", "2": "http:get", "3": "http:patch", "4": "std:envvar"}, "objnames": {"0": ["http", "post", "HTTP post"], "1": ["http", "delete", "HTTP delete"], "2": ["http", "get", "HTTP get"], "3": ["http", "patch", "HTTP patch"], "4": ["std", "envvar", "environment variable"]}, "titleterms": {"authent": 0, "configur": 1, "api": 2, "document": 2, "endpoint": 2, "record": 3, "sport": 4, "statist": [5, 8, 10], "user": [6, 9, 15], "workout": [7, 10], "chang": 8, "log": 8, "version": 8, "0": 8, "6": 8, "8": 8, "2022": 8, "06": 8, "22": 8, "issu": 8, "close": 8, "bug": 8, "fix": 8, "misc": 8, "7": 8, "11": 8, "05": 8, "29": 8, "5": 8, "04": 8, "24": 8, "featur": [8, 10], "4": 8, "23": 8, "3": 8, "09": 8, "pull": 8, "request": 8, "2": 8, "03": 8, "1": 8, "27": 8, "02": 8, "13": 8, "secur": 8, "01": 8, "19": 8, "new": 8, "2021": 8, "12": 8, "30": 8, "14": 8, "9": 8, "07": 8, "16": 8, "21": 8, "17": 8, "31": 8, "10": 8, "2020": 8, "fittracke": [8, 11, 13], "pypi": [8, 12], "administr": [8, 10, 13], "15": 8, "improv": 8, "minor": 8, "avail": 8, "french": 8, "2019": 8, "first": 8, "releas": 8, "2018": 8, "command": 9, "line": 9, "interfac": 9, "databas": 9, "ftcli": 9, "db": 9, "upgrad": [9, 12], "drop": 9, "updat": 9, "account": 10, "prefer": 10, "translat": 10, "screenshot": 10, "dashboard": 10, "detail": 10, "list": 10, "tabl": 11, "content": 11, "instal": 12, "prerequisit": 12, "environ": 12, "variabl": 12, "email": 12, "map": 12, "tile": 12, "server": 12, "from": 12, "sourc": 12, "dev": 12, "product": 12, "prod": 12, "deploy": 12, "docker": 12, "develop": 12, "fail": 13, "start": 13, "troubleshoot": 14}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/docsrc/source/features.rst b/docsrc/source/features.rst index a484d67e..18b36c96 100644 --- a/docsrc/source/features.rst +++ b/docsrc/source/features.rst @@ -119,7 +119,9 @@ Administration Translations ^^^^^^^^^^^^ -FitTrackee is available in English and French (which can be saved in the user preferences). +FitTrackee is available in the following languages (which can be saved in the user preferences): + +.. figure:: https://hosted.weblate.org/widgets/fittrackee/-/multi-auto.svg Screenshots diff --git a/fittrackee/config.py b/fittrackee/config.py index 8f5bcda6..4898fb1c 100644 --- a/fittrackee/config.py +++ b/fittrackee/config.py @@ -46,6 +46,10 @@ class BaseConfig: os.environ.get('DEFAULT_STATICMAP', 'False') == 'True' ), } + TRANSLATIONS_FOLDER = os.path.join( + current_app.root_path, 'emails/translations' + ) + LANGUAGES = ['en', 'fr', 'de'] class DevelopmentConfig(BaseConfig): diff --git a/fittrackee/emails/email.py b/fittrackee/emails/email.py index 5b6a5f53..856d2444 100644 --- a/fittrackee/emails/email.py +++ b/fittrackee/emails/email.py @@ -3,8 +3,9 @@ import smtplib import ssl from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText -from typing import Dict, Optional, Type, Union +from typing import Dict, List, Optional, Type, Union +from babel.support import Translations from flask import Flask from jinja2 import Environment, FileSystemLoader, select_autoescape from urllib3.util import parse_url @@ -38,16 +39,43 @@ class EmailMessage: class EmailTemplate: - def __init__(self, template_directory: str) -> None: + def __init__( + self, + template_directory: str, + translations_directory: str, + languages: List[str], + ) -> None: + self._translations = self._get_translations( + translations_directory, languages + ) self._env = Environment( autoescape=select_autoescape(['html', 'htm', 'xml']), loader=FileSystemLoader(template_directory), + extensions=['jinja2.ext.i18n'], + ) + + @staticmethod + def _get_translations( + translations_directory: str, languages: List[str] + ) -> Dict: + translations = {} + for language in languages: + translations[language] = Translations.load( + dirname=translations_directory, locales=[language] + ) + return translations + + def _load_translation(self, lang: str) -> None: + self._env.install_gettext_translations( # type: ignore + self._translations[lang], + newstyle=True, ) def get_content( self, template_name: str, lang: str, part: str, data: Dict ) -> str: - template = self._env.get_template(f'{template_name}/{lang}/{part}') + self._load_translation(lang) + template = self._env.get_template(f'{template_name}/{part}') return template.render(data) def get_all_contents(self, template: str, lang: str, data: Dict) -> Dict: @@ -92,7 +120,11 @@ class EmailService: self.username = parsed_url['username'] self.password = parsed_url['password'] self.sender_email = app.config['SENDER_EMAIL'] - self.email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) + self.email_template = EmailTemplate( + app.config['TEMPLATES_FOLDER'], + app.config['TRANSLATIONS_FOLDER'], + app.config['LANGUAGES'], + ) @staticmethod def parse_email_url(email_url: str) -> Dict: diff --git a/fittrackee/emails/templates/account_confirmation/en/body.html b/fittrackee/emails/templates/account_confirmation/body.html similarity index 50% rename from fittrackee/emails/templates/account_confirmation/en/body.html rename to fittrackee/emails/templates/account_confirmation/body.html index 81a37085..ccdcc899 100644 --- a/fittrackee/emails/templates/account_confirmation/en/body.html +++ b/fittrackee/emails/templates/account_confirmation/body.html @@ -1,31 +1,25 @@ {% 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. Use the button below to confirm your address email.

+{% block title %}{{ _('Confirm your account') }}{% endblock %} +{% block preheader %}{{ _('Use this link to confirm your account.') }}{% endblock %} +{% block content %}

{{ _('You have created an account on FitTrackee.') }} {{ _('Use the button 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

- + {% endblock %} +{% block not_initiated %}{{ _("If this account creation wasn't initiated by you, please ignore this email.") }}{% endblock %} +{% block url_to_paste %} diff --git a/fittrackee/emails/templates/account_confirmation/body.txt b/fittrackee/emails/templates/account_confirmation/body.txt new file mode 100644 index 00000000..8593a074 --- /dev/null +++ b/fittrackee/emails/templates/account_confirmation/body.txt @@ -0,0 +1,7 @@ +{% extends "layout.txt" %}{% block content %}{{ _('You have created an account on FitTrackee.') }} +{{ _('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)s device using %(browser_name)s.', operating_system=operating_system, browser_name=browser_name) }} +{% endif %}{{ _("If this account creation wasn't initiated by you, please ignore this email.") }}{% endblock %} diff --git a/fittrackee/emails/templates/account_confirmation/de/body.html b/fittrackee/emails/templates/account_confirmation/de/body.html deleted file mode 100644 index 2a626f63..00000000 --- a/fittrackee/emails/templates/account_confirmation/de/body.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Bestätige Dein Konto{% endblock %} -{% block preheader %}Verwendet diesen Link um Dein Konto zu bestätigen.{% endblock %} -{% block content %}

Hallo {{username}},

-

Du hast ein Konto bei FitTrackee angelegt. Verwende den unteren Button um Deine E-Mail Adresse zu bestätigen.

- - - - - -

- {% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. - {% endif %}Falls die Kontoerstellung nicht von Dir initiiert wurde, ignoriere diese E-Mail bitte. -

-

Danke -
Dein FitTrackee Team

- - - - - {% endblock %} diff --git a/fittrackee/emails/templates/account_confirmation/de/body.txt b/fittrackee/emails/templates/account_confirmation/de/body.txt deleted file mode 100644 index 11b5009e..00000000 --- a/fittrackee/emails/templates/account_confirmation/de/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -Hallo {{username}}, - -Du hast ein Konto bei FitTrackee angelegt. Verwende den unteren Link um Deine E-Mail Adresse zu bestätigen. - -Bestätige Deine E-Mail: {{ account_confirmation_url }} - -{% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst.. -{% endif %}Falls die Kontoerstellung nicht von Dir initiiert wurde, ignoriere diese E-Mail bitte. - -Danke -Dein FitTrackee Team -{{fittrackee_url}} diff --git a/fittrackee/emails/templates/account_confirmation/de/subject.txt b/fittrackee/emails/templates/account_confirmation/de/subject.txt deleted file mode 100644 index a169f78e..00000000 --- a/fittrackee/emails/templates/account_confirmation/de/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Bestätige Dein Konto \ No newline at end of file diff --git a/fittrackee/emails/templates/account_confirmation/en/body.txt b/fittrackee/emails/templates/account_confirmation/en/body.txt deleted file mode 100644 index 282b12cd..00000000 --- a/fittrackee/emails/templates/account_confirmation/en/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -Hi {{username}}, - -You have created an account on FitTrackee. 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/en/subject.txt b/fittrackee/emails/templates/account_confirmation/en/subject.txt deleted file mode 100644 index 9d674bf7..00000000 --- a/fittrackee/emails/templates/account_confirmation/en/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Confirm your account \ No newline at end of file diff --git a/fittrackee/emails/templates/account_confirmation/fr/body.html b/fittrackee/emails/templates/account_confirmation/fr/body.html deleted file mode 100644 index f754a59c..00000000 --- a/fittrackee/emails/templates/account_confirmation/fr/body.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Confirmer votre inscription{% endblock %} -{% block preheader %}Utiliser ce lien pour confirmer votre inscription.{% endblock %} -{% block content %}

Bonjour {{username}},

-

Vous avez créé un compte sur FitTrackee. - Cliquez sur le lien ci-dessous pour confirmer votre adresse email. -

- - - - - -

- {% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. - {% endif %}Si vous n'êtes pas à l'origine de la création de ce compte, vous pouvez ignorer cet e-mail. -

-

Merci, -
L'équipe FitTrackee

- - - - - {% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/account_confirmation/fr/body.txt b/fittrackee/emails/templates/account_confirmation/fr/body.txt deleted file mode 100644 index d02375b0..00000000 --- a/fittrackee/emails/templates/account_confirmation/fr/body.txt +++ /dev/null @@ -1,13 +0,0 @@ -Bonjour {{username}}, - -Vous avez créé un compte sur FitTrackee. -Cliquez sur le lien ci-dessous pour confirmer votre adresse email. - -Vérifier l'adresse email : {{ account_confirmation_url }} - -{% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. -{% endif %}Si vous n'êtes pas à l'origine de la création de ce compte, vous pouvez ignorer cet e-mail. - -Merci, -L'équipe FitTrackee -{{fittrackee_url}} diff --git a/fittrackee/emails/templates/account_confirmation/fr/subject.txt b/fittrackee/emails/templates/account_confirmation/fr/subject.txt deleted file mode 100644 index 88b924a2..00000000 --- a/fittrackee/emails/templates/account_confirmation/fr/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Confirmer votre inscription \ No newline at end of file diff --git a/fittrackee/emails/templates/account_confirmation/subject.txt b/fittrackee/emails/templates/account_confirmation/subject.txt new file mode 100644 index 00000000..7384fa8f --- /dev/null +++ b/fittrackee/emails/templates/account_confirmation/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/body.html b/fittrackee/emails/templates/email_update_to_current_email/body.html new file mode 100644 index 00000000..cea39811 --- /dev/null +++ b/fittrackee/emails/templates/email_update_to_current_email/body.html @@ -0,0 +1,18 @@ +{% extends "layout.html" %} +{% block title %}{{ _('Email changed') }}{% endblock %} +{% block preheader %}{{ _('Your email is being updated.') }}{% endblock %} +{% block content %}

{{ _('You recently requested to change your email address for your FitTrackee account to:') }}

+ + + + + {% endblock %} +{% block not_initiated %}{{ _("If this email change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.") }}{% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_current_email/body.txt b/fittrackee/emails/templates/email_update_to_current_email/body.txt new file mode 100644 index 00000000..6d73e862 --- /dev/null +++ b/fittrackee/emails/templates/email_update_to_current_email/body.txt @@ -0,0 +1,4 @@ +{% extends "layout.txt" %}{% block content %}{{ _('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)s device using %(browser_name)s.', operating_system=operating_system, browser_name=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.") }}{% endblock %} \ 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 deleted file mode 100644 index 9f7acfe5..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/de/body.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "layout.html" %} -{% block title %}E-Mail Adresse geändert{% endblock %} -{% block preheader %}Deine E-Mail Adresse wure aktualisiert.{% endblock %} -{% block content %}

Hallo {{username}},

-

Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos zu ändern. Neue Adresse:

- - - - - -

- Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. - Falls die Änderung der E-Mail Adresse nicht von Dir initiiert wurde, ändere bitte sofort Dein Passwort oder kontaktiere den Administrator, falls Dein Konto gesperrt ist. -

-

Danke -
- Dein FitTrackee Team -

{% endblock %} 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 deleted file mode 100644 index b2da93ca..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/de/body.txt +++ /dev/null @@ -1,10 +0,0 @@ -Hallo {{username}}, - -Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos nach {{ new_email_address }} zu ändern. - -Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. -Falls die Änderung der E-Mail Adresse nicht von Dir initiiert wurde, ändere bitte sofort Dein Passwort oder kontaktiere den Administrator, falls Dein Konto gesperrt ist. - -Danke -Dein 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 deleted file mode 100644 index 4ef5e1c5..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/de/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - E-Mail Adresse geändert \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_current_email/en/body.html b/fittrackee/emails/templates/email_update_to_current_email/en/body.html deleted file mode 100644 index 9db94dbd..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/en/body.html +++ /dev/null @@ -1,26 +0,0 @@ -{% 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:

- - - - - -

- 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/en/body.txt b/fittrackee/emails/templates/email_update_to_current_email/en/body.txt deleted file mode 100644 index 4e1f0929..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/en/body.txt +++ /dev/null @@ -1,10 +0,0 @@ -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/en/subject.txt b/fittrackee/emails/templates/email_update_to_current_email/en/subject.txt deleted file mode 100644 index 990157cc..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/en/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Email changed \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_current_email/fr/body.html b/fittrackee/emails/templates/email_update_to_current_email/fr/body.html deleted file mode 100644 index 7b0718a7..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/fr/body.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Adresse email modifiée{% endblock %} -{% block preheader %}Votre adresse email est en cours de mise à jour.{% endblock %} -{% block content %}

Bonjour {{username}},

-

Vous avez récemment demandé la modification de l'adresse email associée à votre compte sur FitTrackee vers :

- - - - - -

- Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. - Si vous n'êtes pas à l'origine de cette modification, veuillez changer votre mot de passe immédiatement ou contacter l'administrateur si votre compte est bloqué. -

-

Merci, -
- L'équipe FitTrackee -

{% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_current_email/fr/body.txt b/fittrackee/emails/templates/email_update_to_current_email/fr/body.txt deleted file mode 100644 index a9ac9114..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/fr/body.txt +++ /dev/null @@ -1,10 +0,0 @@ -Bonjour {{username}}, - -Vous avez récemment demandé la modification de l'adresse email associée à votre compte sur FitTrackee vers : {{ new_email_address }} - -Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. -Si vous n'êtes pas à l'origine de cette modification, veuillez changer votre mot de passe immédiatement ou contacter l'administrateur si votre compte est bloqué. - -Merci, -L'équipe FitTrackee -{{fittrackee_url}} diff --git a/fittrackee/emails/templates/email_update_to_current_email/fr/subject.txt b/fittrackee/emails/templates/email_update_to_current_email/fr/subject.txt deleted file mode 100644 index 758affe3..00000000 --- a/fittrackee/emails/templates/email_update_to_current_email/fr/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Adresse email modifiée \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_current_email/subject.txt b/fittrackee/emails/templates/email_update_to_current_email/subject.txt new file mode 100644 index 00000000..cafccbac --- /dev/null +++ b/fittrackee/emails/templates/email_update_to_current_email/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/body.html b/fittrackee/emails/templates/email_update_to_new_email/body.html new file mode 100644 index 00000000..41274860 --- /dev/null +++ b/fittrackee/emails/templates/email_update_to_new_email/body.html @@ -0,0 +1,26 @@ +{% extends "layout.html" %} +{% block title %}{{ _('Confirm email change') }}{% endblock %} +{% block preheader %}{{ _('Use this link to confirm email change.') }}{% endblock %} +{% block content %}

{{ _('You recently requested to change your email address for your FitTrackee account.') }} {{ _('Use the button below to confirm this address.') }}

+ + + + + {% endblock %} +{% block not_initiated %}{{ _("If this email change wasn't initiated by you, please ignore this email.") }}{% endblock %} +{% block url_to_paste %} + + + + {% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_new_email/body.txt b/fittrackee/emails/templates/email_update_to_new_email/body.txt new file mode 100644 index 00000000..dbe46f0e --- /dev/null +++ b/fittrackee/emails/templates/email_update_to_new_email/body.txt @@ -0,0 +1,7 @@ +{% extends "layout.txt" %}{% block content %}{{ _('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)s device using %(browser_name)s.', operating_system=operating_system, browser_name=browser_name) }} +{% endif %}{{ _("If this email change wasn't initiated by you, please ignore this email.") }}{% endblock %} \ 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 deleted file mode 100644 index d4f35b4b..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/de/body.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Bestätige E-Mail Änderung{% endblock %} -{% block preheader %}Verwende den Link um die Änderung Deiner E-Mail Adresse zu bestätigen.{% endblock %} -{% block content %}

Hallo {{username}},

-

Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos zu ändern. Verwende den unteren Button um Deine Adresse zu bestätigen.

- - - - - -

- {% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. - {% endif %}Falls die Änderung der E-Mail Adresse nicht von Dir initiiert wurde, ignoriere diese E-Mail bitte. -

-

Danke -
Dein FitTrackee Team

- - - - - {% endblock %} 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 deleted file mode 100644 index c7349fba..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/de/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -Hallo {{username}}, - -Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos zu ändern. Verwende den unteren Link um Deine Adresse zu bestätigen. - -Bestätige Deine E-Mail: {{ email_confirmation_url }} - -{% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. -{% endif %}Falls die Änderung der E-Mail Adresse nicht von Dir initiiert wurde, ignoriere diese E-Mail bitte. - -Danke -Dein 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 deleted file mode 100644 index 105c8a22..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/de/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Bestätige E-Mail Änderung \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_new_email/en/body.html b/fittrackee/emails/templates/email_update_to_new_email/en/body.html deleted file mode 100644 index 6a27eeca..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/en/body.html +++ /dev/null @@ -1,32 +0,0 @@ -{% 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

- - - - - {% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_new_email/en/body.txt b/fittrackee/emails/templates/email_update_to_new_email/en/body.txt deleted file mode 100644 index 9234510b..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/en/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -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/en/subject.txt b/fittrackee/emails/templates/email_update_to_new_email/en/subject.txt deleted file mode 100644 index 9b73071c..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/en/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Confirm email change \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_new_email/fr/body.html b/fittrackee/emails/templates/email_update_to_new_email/fr/body.html deleted file mode 100644 index f680a2f4..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/fr/body.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Confirmer le changement d'adresse email{% endblock %} -{% block preheader %}Utiliser ce lien pour confirmer cette adresse email.{% endblock %} -{% block content %}

Bonjour {{username}},

-

Vous avez récemment demandé la modification de l'adresse email associée à votre compte sur FitTrackee. - Cliquez sur le bouton ci-dessous pour confirmer cette adresse email. -

- - - - - -

- {% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. - {% endif %}Si vous n'êtes pas à l'origine de cette modification, vous pouvez ignorer cet e-mail. -

-

Merci, -
L'équipe FitTrackee

- - - - - {% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_new_email/fr/body.txt b/fittrackee/emails/templates/email_update_to_new_email/fr/body.txt deleted file mode 100644 index f6c8d6e6..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/fr/body.txt +++ /dev/null @@ -1,13 +0,0 @@ -Bonjour {{username}}, - -Vous avez récemment demandé la modification de l'adresse email associée à votre compte sur FitTrackee. -Cliquez sur le lien ci-dessous pour confirmer cette adresse email. - -Vérifier l'adresse email : {{ email_confirmation_url }} - -{% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. -{% endif %}Si vous n'êtes pas à l'origine de cette modification, vous pouvez ignorer cet e-mail. - -Merci, -L'équipe FitTrackee -{{fittrackee_url}} diff --git a/fittrackee/emails/templates/email_update_to_new_email/fr/subject.txt b/fittrackee/emails/templates/email_update_to_new_email/fr/subject.txt deleted file mode 100644 index 3fed649e..00000000 --- a/fittrackee/emails/templates/email_update_to_new_email/fr/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Confirmer le changement d'adresse email \ No newline at end of file diff --git a/fittrackee/emails/templates/email_update_to_new_email/subject.txt b/fittrackee/emails/templates/email_update_to_new_email/subject.txt new file mode 100644 index 00000000..1998e3f2 --- /dev/null +++ b/fittrackee/emails/templates/email_update_to_new_email/subject.txt @@ -0,0 +1 @@ +FitTrackee - {{ _('Confirm email change') }} \ No newline at end of file diff --git a/fittrackee/emails/templates/layout.html b/fittrackee/emails/templates/layout.html index 94bb4dd6..41fb8752 100644 --- a/fittrackee/emails/templates/layout.html +++ b/fittrackee/emails/templates/layout.html @@ -212,7 +212,15 @@
+

{{ _('Hi %(username)s,', username=username) }}

{% block content %}{% endblock %} +

+ {% if operating_system and browser_name %}{{ _('For security, this request was received from a %(operating_system)s device using %(browser_name)s.', operating_system=operating_system, browser_name=browser_name) }} + {% endif %}{% block not_initiated %}{% endblock %} +

+

{{ _('Thanks,') }} +
{{ _('The FitTrackee Team') }}

+ {% block url_to_paste %}{% endblock %}
diff --git a/fittrackee/emails/templates/layout.txt b/fittrackee/emails/templates/layout.txt new file mode 100644 index 00000000..22c5d88a --- /dev/null +++ b/fittrackee/emails/templates/layout.txt @@ -0,0 +1,7 @@ +{{ _('Hi %(username)s,', username=username) }} + +{% block content %}{% endblock %} + +{{ _('Thanks,') }} +{{ _('The FitTrackee Team') }} +{{fittrackee_url}} diff --git a/fittrackee/emails/templates/password_change/body.html b/fittrackee/emails/templates/password_change/body.html new file mode 100644 index 00000000..450254aa --- /dev/null +++ b/fittrackee/emails/templates/password_change/body.html @@ -0,0 +1,5 @@ +{% extends "layout.html" %} +{% block title %}{{ _('Password changed') }}{% endblock %} +{% block preheader %}{{ _('Your password has been changed.') }}{% endblock %} +{% block content %}

{{ _('The password for your FitTrackee account has been changed.') }}

{% endblock %} +{% block not_initiated %}{{ _("If this password change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.") }}{% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/password_change/body.txt b/fittrackee/emails/templates/password_change/body.txt new file mode 100644 index 00000000..aad35cdb --- /dev/null +++ b/fittrackee/emails/templates/password_change/body.txt @@ -0,0 +1,4 @@ +{% extends "layout.txt" %}{% block content %}{{ _('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)s device using %(browser_name)s.', operating_system=operating_system, browser_name=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.") }}{% endblock %} \ 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 deleted file mode 100644 index 4dc15403..00000000 --- a/fittrackee/emails/templates/password_change/de/body.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Passwort geändert{% endblock %} -{% block preheader %}Dein Passwort wurde geändert.{% endblock %} -{% block content %}

Hallo {{username}},

-

Das Passwort Deines FitTrackee Kontos wurde geändert.

-

- {% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. - {% endif %}Falls die Änderung des Passworts nicht von Dir initiiert wurde, ändere bitte sofort Dein Passwort oder kontaktiere den Administrator, falls Dein Konto gesperrt ist. -

-

Danke -
- Dein FitTrackee Team -

{% endblock %} diff --git a/fittrackee/emails/templates/password_change/de/body.txt b/fittrackee/emails/templates/password_change/de/body.txt deleted file mode 100644 index c49c132d..00000000 --- a/fittrackee/emails/templates/password_change/de/body.txt +++ /dev/null @@ -1,10 +0,0 @@ -Hallo {{username}}, - -Das Passwort Deines FitTrackee Kontos wurde geändert. - -{% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. -{% endif %}Falls die Änderung des Passworts nicht von Dir initiiert wurde, ändere bitte sofort Dein Passwort oder kontaktiere den Administrator, falls Dein Konto gesperrt ist. - -Danke -Dein FitTrackee Team -{{fittrackee_url}} diff --git a/fittrackee/emails/templates/password_change/de/subject.txt b/fittrackee/emails/templates/password_change/de/subject.txt deleted file mode 100644 index 35ba177a..00000000 --- a/fittrackee/emails/templates/password_change/de/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Passwort geändert \ No newline at end of file diff --git a/fittrackee/emails/templates/password_change/en/body.html b/fittrackee/emails/templates/password_change/en/body.html deleted file mode 100644 index 345009d1..00000000 --- a/fittrackee/emails/templates/password_change/en/body.html +++ /dev/null @@ -1,13 +0,0 @@ -{% 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/en/body.txt b/fittrackee/emails/templates/password_change/en/body.txt deleted file mode 100644 index 9675f8a6..00000000 --- a/fittrackee/emails/templates/password_change/en/body.txt +++ /dev/null @@ -1,10 +0,0 @@ -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/en/subject.txt b/fittrackee/emails/templates/password_change/en/subject.txt deleted file mode 100644 index 2669367f..00000000 --- a/fittrackee/emails/templates/password_change/en/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Password changed \ No newline at end of file diff --git a/fittrackee/emails/templates/password_change/fr/body.html b/fittrackee/emails/templates/password_change/fr/body.html deleted file mode 100644 index 0cf5fdd8..00000000 --- a/fittrackee/emails/templates/password_change/fr/body.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "layout.html" %} -{% block title %}FitTrackee - Mot de passe modifié{% endblock %} -{% block preheader %}Votre mot de passe a été modifié.{% endblock %} -{% block content %}

Bonjour {{username}},

-

Le mot de passe de votre compte FitTrackee a été modifié.

-

- {% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. - {% endif %}Si vous n'êtes pas à l'origine de cette modification, veuillez changer votre mot de passe immédiatement ou contacter l'administrateur si votre compte est bloqué. -

-

Merci, -
- L'équipe FitTrackee -

{% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/password_change/fr/body.txt b/fittrackee/emails/templates/password_change/fr/body.txt deleted file mode 100644 index f353f1a6..00000000 --- a/fittrackee/emails/templates/password_change/fr/body.txt +++ /dev/null @@ -1,10 +0,0 @@ -Bonjour {{username}}, - -Le mot de passe de votre compte FitTrackee a été modifié. - -{% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. -{% endif %}Si vous n'êtes pas à l'origine de cette modification, veuillez changer votre mot de passe immédiatement ou contacter l'administrateur si votre compte est bloqué. - -Merci, -L'équipe FitTrackee -{{fittrackee_url}} diff --git a/fittrackee/emails/templates/password_change/fr/subject.txt b/fittrackee/emails/templates/password_change/fr/subject.txt deleted file mode 100644 index 7ec45c21..00000000 --- a/fittrackee/emails/templates/password_change/fr/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Mot de passe modifié \ No newline at end of file diff --git a/fittrackee/emails/templates/password_change/subject.txt b/fittrackee/emails/templates/password_change/subject.txt new file mode 100644 index 00000000..f5e9c665 --- /dev/null +++ b/fittrackee/emails/templates/password_change/subject.txt @@ -0,0 +1 @@ +FitTrackee - {{ _('Password changed') }} \ No newline at end of file diff --git a/fittrackee/emails/templates/password_reset_request/body.html b/fittrackee/emails/templates/password_reset_request/body.html new file mode 100644 index 00000000..6bf31a96 --- /dev/null +++ b/fittrackee/emails/templates/password_reset_request/body.html @@ -0,0 +1,28 @@ +{% 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)s.', expiration_delay=expiration_delay) }}{% endblock %} +{% block content %}

{{ _('You recently requested to reset your password for your FitTrackee account.') }} {{ _('Use the button below to reset it.') }} + {{ _('This password reset link is only valid for %(expiration_delay)s.', expiration_delay=expiration_delay) }} +

+ + + + + {% endblock %} +{% block not_initiated %}{{ _('If you did not request a password reset, please ignore this email.') }}{% endblock %} +{% block url_to_paste %} + + + + {% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/password_reset_request/body.txt b/fittrackee/emails/templates/password_reset_request/body.txt new file mode 100644 index 00000000..312de8cb --- /dev/null +++ b/fittrackee/emails/templates/password_reset_request/body.txt @@ -0,0 +1,7 @@ +{% extends "layout.txt" %}{% block content %}{{ _('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)s.', expiration_delay=expiration_delay) }} + +{{ _('Reset your password') }}: {{ password_reset_url }} + +{% if operating_system and browser_name %}{{ _('For security, this request was received from a %(operating_system)s device using %(browser_name)s.', operating_system=operating_system, browser_name=browser_name) }} +{% endif %}{{ _('If you did not request a password reset, please ignore this email.') }}{% endblock %} \ 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 deleted file mode 100644 index 4b32c2a2..00000000 --- a/fittrackee/emails/templates/password_reset_request/de/body.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Anfrage zum Zurücksetzen des Passworts{% endblock %} -{% block preheader %}Verwende den unteren Link um Dein Passwort zurückzusetzen. Der Link ist nur für {{ expiration_delay }} gültig.{% endblock %} -{% block content %}

Hallo {{username}},

-

Du hast kürzlich beantragt, das Passwort Deines FitTrackee Kontos zurückzusetzen. Verwende den unteren Button um es zurückzusetzen. - Der Link ist nur für {{ expiration_delay }} gültig. -

- - - - - -

- {% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. - {% endif %}Falls Du das Zurücksetzen des Passworts nicht angefordert hast, igoniere diese E-Mail bitte. -

-

Danke -
Dein FitTrackee Team

- - - - - {% endblock %} diff --git a/fittrackee/emails/templates/password_reset_request/de/body.txt b/fittrackee/emails/templates/password_reset_request/de/body.txt deleted file mode 100644 index cbc3f9a9..00000000 --- a/fittrackee/emails/templates/password_reset_request/de/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -Hallo {{username}}, - -Du hast kürzlich beantragt, das Passwort Deines FitTrackee Kontos zurückzusetzen. Verwende den unteren Link um es zurückzusetzen. Der Link ist nur für {{ expiration_delay }} gültig. - -Setze Dein Passwort zurück: {{ password_reset_url }} - -{% if operating_system and browser_name %}Zur Sicherheit: Diese Anfrage wurde von einem {{operating_system}} Gerät mit {{browser_name}} ausgelöst. -{% endif %}Falls Du das Zurücksetzen des Passworts nicht angefordert hast, igoniere diese E-Mail bitte. - -Danke -Dein 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 deleted file mode 100644 index 17c96cd1..00000000 --- a/fittrackee/emails/templates/password_reset_request/de/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Anfrage zum Zurücksetzen des Passworts \ No newline at end of file diff --git a/fittrackee/emails/templates/password_reset_request/en/body.html b/fittrackee/emails/templates/password_reset_request/en/body.html deleted file mode 100644 index f5c3ac20..00000000 --- a/fittrackee/emails/templates/password_reset_request/en/body.html +++ /dev/null @@ -1,34 +0,0 @@ -{% 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

- - - - - {% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/password_reset_request/en/body.txt b/fittrackee/emails/templates/password_reset_request/en/body.txt deleted file mode 100644 index e988062d..00000000 --- a/fittrackee/emails/templates/password_reset_request/en/body.txt +++ /dev/null @@ -1,12 +0,0 @@ -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/en/subject.txt b/fittrackee/emails/templates/password_reset_request/en/subject.txt deleted file mode 100644 index d8033bea..00000000 --- a/fittrackee/emails/templates/password_reset_request/en/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Password reset request \ No newline at end of file diff --git a/fittrackee/emails/templates/password_reset_request/fr/body.html b/fittrackee/emails/templates/password_reset_request/fr/body.html deleted file mode 100644 index 505d5c57..00000000 --- a/fittrackee/emails/templates/password_reset_request/fr/body.html +++ /dev/null @@ -1,35 +0,0 @@ -{% extends "layout.html" %} -{% block title %}Réinitialiser le mot de passe{% endblock %} -{% block preheader %}Utiliser ce lien pour réinitialiser le mot de passe. Ce lien n'est valide que pendant {{ expiration_delay }}.{% endblock %} -{% block content %}

Bonjour {{username}},

-

Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. - Cliquez sur le bouton ci-dessous pour le réinitialiser. - Cette réinitialisation n'est valide que pendant {{ expiration_delay }}. -

- - - - - -

- {% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. - {% endif %}Si vous n'avez pas demandé de réinitialisation, vous pouvez ignorer cet e-mail. -

-

Merci, -
L'équipe FitTrackee

- - - - - {% endblock %} \ No newline at end of file diff --git a/fittrackee/emails/templates/password_reset_request/fr/body.txt b/fittrackee/emails/templates/password_reset_request/fr/body.txt deleted file mode 100644 index 02195bd5..00000000 --- a/fittrackee/emails/templates/password_reset_request/fr/body.txt +++ /dev/null @@ -1,13 +0,0 @@ -Bonjour {{username}}, - -Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. -Cliquez sur le lien ci-dessous pour le réinitialiser. Ce lien n'est valide que pendant {{ expiration_delay }}. - -Réinitialiser le mot de passe : {{ password_reset_url }} - -{% if operating_system and browser_name %}Pour vérification, cette demande a été reçue à partir d'un appareil sous {{operating_system}}, utilisant le navigateur {{browser_name}}. -{% endif %}Si vous n'avez pas demandé de réinitialisation, vous pouvez ignorer cet e-mail. - -Merci, -L'équipe FitTrackee -{{fittrackee_url}} diff --git a/fittrackee/emails/templates/password_reset_request/fr/subject.txt b/fittrackee/emails/templates/password_reset_request/fr/subject.txt deleted file mode 100644 index 2856fcc5..00000000 --- a/fittrackee/emails/templates/password_reset_request/fr/subject.txt +++ /dev/null @@ -1 +0,0 @@ -FitTrackee - Réinitialiser votre mot de passe \ No newline at end of file diff --git a/fittrackee/emails/templates/password_reset_request/subject.txt b/fittrackee/emails/templates/password_reset_request/subject.txt new file mode 100644 index 00000000..ab15c328 --- /dev/null +++ b/fittrackee/emails/templates/password_reset_request/subject.txt @@ -0,0 +1 @@ +FitTrackee - {{ _('Password reset request') }} \ No newline at end of file diff --git a/fittrackee/emails/translations/de/LC_MESSAGES/messages.mo b/fittrackee/emails/translations/de/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..a4e46487 Binary files /dev/null and b/fittrackee/emails/translations/de/LC_MESSAGES/messages.mo differ diff --git a/fittrackee/emails/translations/de/LC_MESSAGES/messages.po b/fittrackee/emails/translations/de/LC_MESSAGES/messages.po new file mode 100644 index 00000000..5ce4486c --- /dev/null +++ b/fittrackee/emails/translations/de/LC_MESSAGES/messages.po @@ -0,0 +1,231 @@ +# German translations for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-07-03 07:58+0200\n" +"PO-Revision-Date: 2022-07-02 18:25+0200\n" +"Last-Translator: FULL NAME \n" +"Language: de\n" +"Language-Team: de \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: fittrackee/emails/templates/layout.html:215 +#: fittrackee/emails/templates/layout.txt:1 +#, python-format +msgid "Hi %(username)s," +msgstr "Hallo %(username)s," + +#: fittrackee/emails/templates/account_confirmation/body.txt:6 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:3 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:6 +#: fittrackee/emails/templates/layout.html:218 +#: fittrackee/emails/templates/password_change/body.txt:3 +#: fittrackee/emails/templates/password_reset_request/body.txt:6 +#, python-format +msgid "" +"For security, this request was received from a %(operating_system)s " +"device using %(browser_name)s." +msgstr "" +"Zur Sicherheit: Diese Anfrage wurde von einem %(operating_system)s Gerät " +"mit %(browser_name)s ausgelöst." + +#: fittrackee/emails/templates/layout.html:221 +#: fittrackee/emails/templates/layout.txt:5 +msgid "Thanks," +msgstr "Danke" + +#: fittrackee/emails/templates/layout.html:222 +#: fittrackee/emails/templates/layout.txt:6 +msgid "The FitTrackee Team" +msgstr "Dein FitTrackee Team" + +#: fittrackee/emails/templates/account_confirmation/body.html:2 +#: fittrackee/emails/templates/account_confirmation/subject.txt:1 +msgid "Confirm your account" +msgstr "Bestätige Dein Konto" + +#: fittrackee/emails/templates/account_confirmation/body.html:3 +msgid "Use this link to confirm your account." +msgstr "Verwendet diesen Link um Dein Konto zu bestätigen." + +#: fittrackee/emails/templates/account_confirmation/body.html:4 +#: fittrackee/emails/templates/account_confirmation/body.txt:1 +msgid "You have created an account on FitTrackee." +msgstr "Du hast ein Konto bei FitTrackee angelegt." + +#: fittrackee/emails/templates/account_confirmation/body.html:4 +msgid "Use the button below to confirm your address email." +msgstr "Verwende den unteren Button um Deine E-Mail Adresse zu bestätigen." + +#: fittrackee/emails/templates/account_confirmation/body.html:11 +#: fittrackee/emails/templates/account_confirmation/body.txt:4 +#: fittrackee/emails/templates/email_update_to_new_email/body.html:11 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:4 +msgid "Verify your email" +msgstr "Bestätige Deine E-Mail" + +#: fittrackee/emails/templates/account_confirmation/body.html:18 +#: fittrackee/emails/templates/account_confirmation/body.txt:7 +msgid "" +"If this account creation wasn't initiated by you, please ignore this " +"email." +msgstr "" +"Falls die Kontoerstellung nicht von Dir initiiert wurde, ignoriere diese " +"E-Mail bitte." + +#: fittrackee/emails/templates/account_confirmation/body.html:22 +#: fittrackee/emails/templates/email_update_to_new_email/body.html:22 +#: fittrackee/emails/templates/password_reset_request/body.html:24 +msgid "" +"If you're having trouble with the button above, copy and paste the URL " +"below into your web browser." +msgstr "" +"Falls Du Probleme mit dem oberen Button hast, kopiere diese URL und gebe " +"sie in Deinen Webbrowser ein." + +#: fittrackee/emails/templates/account_confirmation/body.txt:2 +msgid "Use the link below to confirm your address email." +msgstr "Verwende den unteren Link um Deine E-Mail Adresse zu bestätigen." + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:2 +#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1 +msgid "Email changed" +msgstr "E-Mail Adresse geändert" + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:3 +msgid "Your email is being updated." +msgstr "Deine E-Mail Adresse wure aktualisiert." + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:4 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:1 +msgid "" +"You recently requested to change your email address for your FitTrackee " +"account to:" +msgstr "" +"Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos " +"zu ändern. Neue Adresse:" + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:18 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:4 +msgid "" +"If this email change wasn't initiated by you, please change your password" +" immediately or contact your administrator if your account is locked." +msgstr "" +"Falls die Änderung der E-Mail Adresse nicht von Dir initiiert wurde, " +"ändere bitte sofort Dein Passwort oder kontaktiere den Administrator, " +"falls Dein Konto gesperrt ist." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:2 +#: fittrackee/emails/templates/email_update_to_new_email/subject.txt:1 +msgid "Confirm email change" +msgstr "Bestätige E-Mail Änderung" + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:3 +msgid "Use this link to confirm email change." +msgstr "Verwende den unteren Link um Deine Adresse zu bestätigen." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:4 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:1 +msgid "" +"You recently requested to change your email address for your FitTrackee " +"account." +msgstr "" +"Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos " +"zu ändern." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:4 +msgid "Use the button below to confirm this address." +msgstr "Verwende den unteren Button um Deine Adresse zu bestätigen." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:18 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:7 +msgid "If this email change wasn't initiated by you, please ignore this email." +msgstr "" +"Falls die Änderung der E-Mail Adresse nicht von Dir initiiert wurde, " +"ignoriere diese E-Mail bitte." + +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:2 +msgid "Use the link below to confirm this address." +msgstr "Verwende den unteren Link um Deine Adresse zu bestätigen." + +#: fittrackee/emails/templates/password_change/body.html:2 +#: fittrackee/emails/templates/password_change/subject.txt:1 +msgid "Password changed" +msgstr "Passwort geändert" + +#: fittrackee/emails/templates/password_change/body.html:3 +msgid "Your password has been changed." +msgstr "Dein Passwort wurde geändert." + +#: fittrackee/emails/templates/password_change/body.html:4 +#: fittrackee/emails/templates/password_change/body.txt:1 +msgid "The password for your FitTrackee account has been changed." +msgstr "Das Passwort Deines FitTrackee Kontos wurde geändert." + +#: fittrackee/emails/templates/password_change/body.html:5 +#: fittrackee/emails/templates/password_change/body.txt:4 +msgid "" +"If this password change wasn't initiated by you, please change your " +"password immediately or contact your administrator if your account is " +"locked." +msgstr "" +"Falls die Änderung des Passworts nicht von Dir initiiert wurde, ändere " +"bitte sofort Dein Passwort oder kontaktiere den Administrator, falls Dein" +" Konto gesperrt ist." + +#: fittrackee/emails/templates/password_reset_request/body.html:2 +#: fittrackee/emails/templates/password_reset_request/subject.txt:1 +msgid "Password reset request" +msgstr "Anfrage zum Zurücksetzen des Passworts" + +#: fittrackee/emails/templates/password_reset_request/body.html:3 +#, python-format +msgid "" +"Use this link to reset your password. The link is only valid for " +"%(expiration_delay)s." +msgstr "" +"Verwende den unteren Link um Dein Passwort zurückzusetzen. Der Link ist " +"nur für %(expiration_delay)s gültig." + +#: fittrackee/emails/templates/password_reset_request/body.html:4 +#: fittrackee/emails/templates/password_reset_request/body.txt:1 +msgid "You recently requested to reset your password for your FitTrackee account." +msgstr "" +"Du hast kürzlich beantragt, das Passwort Deines FitTrackee Kontos " +"zurückzusetzen." + +#: fittrackee/emails/templates/password_reset_request/body.html:4 +msgid "Use the button below to reset it." +msgstr "Verwende den unteren Button um es zurückzusetzen." + +#: fittrackee/emails/templates/password_reset_request/body.html:5 +#: fittrackee/emails/templates/password_reset_request/body.txt:2 +#, python-format +msgid "This password reset link is only valid for %(expiration_delay)s." +msgstr "Der Link ist nur für %(expiration_delay)s gültig." + +#: fittrackee/emails/templates/password_reset_request/body.html:13 +#: fittrackee/emails/templates/password_reset_request/body.txt:4 +msgid "Reset your password" +msgstr "Setze Dein Passwort zurück" + +#: fittrackee/emails/templates/password_reset_request/body.html:20 +#: fittrackee/emails/templates/password_reset_request/body.txt:7 +msgid "If you did not request a password reset, please ignore this email." +msgstr "" +"Falls Du das Zurücksetzen des Passworts nicht angefordert hast, igoniere " +"diese E-Mail bitte." + +#: fittrackee/emails/templates/password_reset_request/body.txt:1 +msgid "Use the link below to reset it." +msgstr "Verwende den unteren Link um es zurückzusetzen." + diff --git a/fittrackee/emails/translations/en/LC_MESSAGES/messages.mo b/fittrackee/emails/translations/en/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..596301af Binary files /dev/null and b/fittrackee/emails/translations/en/LC_MESSAGES/messages.mo differ diff --git a/fittrackee/emails/translations/en/LC_MESSAGES/messages.po b/fittrackee/emails/translations/en/LC_MESSAGES/messages.po new file mode 100644 index 00000000..f8cf520c --- /dev/null +++ b/fittrackee/emails/translations/en/LC_MESSAGES/messages.po @@ -0,0 +1,224 @@ +# English translations for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-07-03 07:58+0200\n" +"PO-Revision-Date: 2022-07-02 18:25+0200\n" +"Last-Translator: FULL NAME \n" +"Language: en\n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: fittrackee/emails/templates/layout.html:215 +#: fittrackee/emails/templates/layout.txt:1 +#, python-format +msgid "Hi %(username)s," +msgstr "Hi %(username)s," + +#: fittrackee/emails/templates/account_confirmation/body.txt:6 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:3 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:6 +#: fittrackee/emails/templates/layout.html:218 +#: fittrackee/emails/templates/password_change/body.txt:3 +#: fittrackee/emails/templates/password_reset_request/body.txt:6 +#, python-format +msgid "" +"For security, this request was received from a %(operating_system)s " +"device using %(browser_name)s." +msgstr "" +"For security, this request was received from a %(operating_system)s " +"device using %(browser_name)s." + +#: fittrackee/emails/templates/layout.html:221 +#: fittrackee/emails/templates/layout.txt:5 +msgid "Thanks," +msgstr "Thanks," + +#: fittrackee/emails/templates/layout.html:222 +#: fittrackee/emails/templates/layout.txt:6 +msgid "The FitTrackee Team" +msgstr "The FitTrackee Team" + +#: fittrackee/emails/templates/account_confirmation/body.html:2 +#: fittrackee/emails/templates/account_confirmation/subject.txt:1 +msgid "Confirm your account" +msgstr "Confirm your account" + +#: fittrackee/emails/templates/account_confirmation/body.html:3 +msgid "Use this link to confirm your account." +msgstr "Use this link to confirm your account." + +#: fittrackee/emails/templates/account_confirmation/body.html:4 +#: fittrackee/emails/templates/account_confirmation/body.txt:1 +msgid "You have created an account on FitTrackee." +msgstr "You have created an account on FitTrackee." + +#: fittrackee/emails/templates/account_confirmation/body.html:4 +msgid "Use the button below to confirm your address email." +msgstr "Use the button below to confirm your address email." + +#: fittrackee/emails/templates/account_confirmation/body.html:11 +#: fittrackee/emails/templates/account_confirmation/body.txt:4 +#: fittrackee/emails/templates/email_update_to_new_email/body.html:11 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:4 +msgid "Verify your email" +msgstr "Verify your email" + +#: fittrackee/emails/templates/account_confirmation/body.html:18 +#: fittrackee/emails/templates/account_confirmation/body.txt:7 +msgid "" +"If this account creation wasn't initiated by you, please ignore this " +"email." +msgstr "" +"If this account creation wasn't initiated by you, please ignore this " +"email." + +#: fittrackee/emails/templates/account_confirmation/body.html:22 +#: fittrackee/emails/templates/email_update_to_new_email/body.html:22 +#: fittrackee/emails/templates/password_reset_request/body.html:24 +msgid "" +"If you're having trouble with the button above, copy and paste the URL " +"below into your web browser." +msgstr "" +"If you're having trouble with the button above, copy and paste the URL " +"below into your web browser." + +#: fittrackee/emails/templates/account_confirmation/body.txt:2 +msgid "Use the link below to confirm your address email." +msgstr "Use the link below to confirm your address email." + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:2 +#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1 +msgid "Email changed" +msgstr "Email changed" + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:3 +msgid "Your email is being updated." +msgstr "Your email is being updated." + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:4 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:1 +msgid "" +"You recently requested to change your email address for your FitTrackee " +"account to:" +msgstr "" +"You recently requested to change your email address for your FitTrackee " +"account to:" + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:18 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:4 +msgid "" +"If this email change wasn't initiated by you, please change your password" +" immediately or contact your administrator if your account is locked." +msgstr "" +"If this email change wasn't initiated by you, please change your password" +" immediately or contact your administrator if your account is locked." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:2 +#: fittrackee/emails/templates/email_update_to_new_email/subject.txt:1 +msgid "Confirm email change" +msgstr "Confirm email change" + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:3 +msgid "Use this link to confirm email change." +msgstr "Use this link to confirm email change." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:4 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:1 +msgid "" +"You recently requested to change your email address for your FitTrackee " +"account." +msgstr "" +"You recently requested to change your email address for your FitTrackee " +"account." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:4 +msgid "Use the button below to confirm this address." +msgstr "Use the button below to confirm this address." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:18 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:7 +msgid "If this email change wasn't initiated by you, please ignore this email." +msgstr "If this email change wasn't initiated by you, please ignore this email." + +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:2 +msgid "Use the link below to confirm this address." +msgstr "Use the link below to confirm this address." + +#: fittrackee/emails/templates/password_change/body.html:2 +#: fittrackee/emails/templates/password_change/subject.txt:1 +msgid "Password changed" +msgstr "Password changed" + +#: fittrackee/emails/templates/password_change/body.html:3 +msgid "Your password has been changed." +msgstr "Your password has been changed." + +#: fittrackee/emails/templates/password_change/body.html:4 +#: fittrackee/emails/templates/password_change/body.txt:1 +msgid "The password for your FitTrackee account has been changed." +msgstr "The password for your FitTrackee account has been changed." + +#: fittrackee/emails/templates/password_change/body.html:5 +#: fittrackee/emails/templates/password_change/body.txt:4 +msgid "" +"If this password change wasn't initiated by you, please change your " +"password immediately or contact your administrator if your account is " +"locked." +msgstr "" +"If this password change wasn't initiated by you, please change your " +"password immediately or contact your administrator if your account is " +"locked." + +#: fittrackee/emails/templates/password_reset_request/body.html:2 +#: fittrackee/emails/templates/password_reset_request/subject.txt:1 +msgid "Password reset request" +msgstr "Password reset request" + +#: fittrackee/emails/templates/password_reset_request/body.html:3 +#, python-format +msgid "" +"Use this link to reset your password. The link is only valid for " +"%(expiration_delay)s." +msgstr "" +"Use this link to reset your password. The link is only valid for " +"%(expiration_delay)s." + +#: fittrackee/emails/templates/password_reset_request/body.html:4 +#: fittrackee/emails/templates/password_reset_request/body.txt:1 +msgid "You recently requested to reset your password for your FitTrackee account." +msgstr "You recently requested to reset your password for your FitTrackee account." + +#: fittrackee/emails/templates/password_reset_request/body.html:4 +msgid "Use the button below to reset it." +msgstr "Use the button below to reset it." + +#: fittrackee/emails/templates/password_reset_request/body.html:5 +#: fittrackee/emails/templates/password_reset_request/body.txt:2 +#, python-format +msgid "This password reset link is only valid for %(expiration_delay)s." +msgstr "This password reset link is only valid for %(expiration_delay)s." + +#: fittrackee/emails/templates/password_reset_request/body.html:13 +#: fittrackee/emails/templates/password_reset_request/body.txt:4 +msgid "Reset your password" +msgstr "Reset your password" + +#: fittrackee/emails/templates/password_reset_request/body.html:20 +#: fittrackee/emails/templates/password_reset_request/body.txt:7 +msgid "If you did not request a password reset, please ignore this email." +msgstr "If you did not request a password reset, please ignore this email." + +#: fittrackee/emails/templates/password_reset_request/body.txt:1 +msgid "Use the link below to reset it." +msgstr "Use the link below to reset it." + diff --git a/fittrackee/emails/translations/fr/LC_MESSAGES/messages.mo b/fittrackee/emails/translations/fr/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..c651ea14 Binary files /dev/null and b/fittrackee/emails/translations/fr/LC_MESSAGES/messages.mo differ diff --git a/fittrackee/emails/translations/fr/LC_MESSAGES/messages.po b/fittrackee/emails/translations/fr/LC_MESSAGES/messages.po new file mode 100644 index 00000000..ba0b9191 --- /dev/null +++ b/fittrackee/emails/translations/fr/LC_MESSAGES/messages.po @@ -0,0 +1,231 @@ +# French translations for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-07-03 07:58+0200\n" +"PO-Revision-Date: 2022-07-02 17:27+0200\n" +"Last-Translator: FULL NAME \n" +"Language: fr\n" +"Language-Team: fr \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: fittrackee/emails/templates/layout.html:215 +#: fittrackee/emails/templates/layout.txt:1 +#, python-format +msgid "Hi %(username)s," +msgstr "Bonjour %(username)s," + +#: fittrackee/emails/templates/account_confirmation/body.txt:6 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:3 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:6 +#: fittrackee/emails/templates/layout.html:218 +#: fittrackee/emails/templates/password_change/body.txt:3 +#: fittrackee/emails/templates/password_reset_request/body.txt:6 +#, python-format +msgid "" +"For security, this request was received from a %(operating_system)s " +"device using %(browser_name)s." +msgstr "" +"Pour vérification, cette demande a été reçue à partir d'un appareil sous " +"%(operating_system)s, utilisant le navigateur %(browser_name)s." + +#: fittrackee/emails/templates/layout.html:221 +#: fittrackee/emails/templates/layout.txt:5 +msgid "Thanks," +msgstr "Merci," + +#: fittrackee/emails/templates/layout.html:222 +#: fittrackee/emails/templates/layout.txt:6 +msgid "The FitTrackee Team" +msgstr "L'équipe FitTrackee" + +#: fittrackee/emails/templates/account_confirmation/body.html:2 +#: fittrackee/emails/templates/account_confirmation/subject.txt:1 +msgid "Confirm your account" +msgstr "Confirmer votre inscription" + +#: fittrackee/emails/templates/account_confirmation/body.html:3 +msgid "Use this link to confirm your account." +msgstr "Utiliser ce lien pour confirmer votre inscription." + +#: fittrackee/emails/templates/account_confirmation/body.html:4 +#: fittrackee/emails/templates/account_confirmation/body.txt:1 +msgid "You have created an account on FitTrackee." +msgstr "Vous avez créé un compte sur FitTrackee." + +#: fittrackee/emails/templates/account_confirmation/body.html:4 +msgid "Use the button below to confirm your address email." +msgstr "Cliquez sur le bouton pour confirmer votre adresse email." + +#: fittrackee/emails/templates/account_confirmation/body.html:11 +#: fittrackee/emails/templates/account_confirmation/body.txt:4 +#: fittrackee/emails/templates/email_update_to_new_email/body.html:11 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:4 +msgid "Verify your email" +msgstr "Vérifier l'adresse email" + +#: fittrackee/emails/templates/account_confirmation/body.html:18 +#: fittrackee/emails/templates/account_confirmation/body.txt:7 +msgid "" +"If this account creation wasn't initiated by you, please ignore this " +"email." +msgstr "" +"Si vous n'êtes pas à l'origine de la création de ce compte, vous pouvez " +"ignorer cet e-mail." + +#: fittrackee/emails/templates/account_confirmation/body.html:22 +#: fittrackee/emails/templates/email_update_to_new_email/body.html:22 +#: fittrackee/emails/templates/password_reset_request/body.html:24 +msgid "" +"If you're having trouble with the button above, copy and paste the URL " +"below into your web browser." +msgstr "" +"Si vous avez des problèmes avec le bouton, vous pouvez copier et coller " +"le lien suivant dans votre navigateur." + +#: fittrackee/emails/templates/account_confirmation/body.txt:2 +msgid "Use the link below to confirm your address email." +msgstr "Cliquez sur le lien ci-dessous pour confirmer votre adresse email." + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:2 +#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1 +msgid "Email changed" +msgstr "Adresse email modifiée" + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:3 +msgid "Your email is being updated." +msgstr "Votre adresse email est en cours de mise à jour." + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:4 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:1 +msgid "" +"You recently requested to change your email address for your FitTrackee " +"account to:" +msgstr "" +"Vous avez récemment demandé la modification de l'adresse email associée à" +" votre compte sur FitTrackee vers :" + +#: fittrackee/emails/templates/email_update_to_current_email/body.html:18 +#: fittrackee/emails/templates/email_update_to_current_email/body.txt:4 +msgid "" +"If this email change wasn't initiated by you, please change your password" +" immediately or contact your administrator if your account is locked." +msgstr "" +"Si vous n'êtes pas à l'origine de cette modification, veuillez changer " +"votre mot de passe immédiatement ou contacter l'administrateur si votre " +"compte est bloqué." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:2 +#: fittrackee/emails/templates/email_update_to_new_email/subject.txt:1 +msgid "Confirm email change" +msgstr "Confirmer le changement d'adresse email" + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:3 +msgid "Use this link to confirm email change." +msgstr "Confirmer le changement d'adresse email." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:4 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:1 +msgid "" +"You recently requested to change your email address for your FitTrackee " +"account." +msgstr "" +"Vous avez récemment demandé la modification de l'adresse email associée à" +" votre compte sur FitTrackee." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:4 +msgid "Use the button below to confirm this address." +msgstr "Cliquez sur le bouton ci-dessous pour confirmer cette adresse email." + +#: fittrackee/emails/templates/email_update_to_new_email/body.html:18 +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:7 +msgid "If this email change wasn't initiated by you, please ignore this email." +msgstr "" +"Si vous n'êtes pas à l'origine de cette modification, vous pouvez ignorer" +" cet e-mail." + +#: fittrackee/emails/templates/email_update_to_new_email/body.txt:2 +msgid "Use the link below to confirm this address." +msgstr "Cliquez sur le lien ci-dessous pour confirmer cette adresse email." + +#: fittrackee/emails/templates/password_change/body.html:2 +#: fittrackee/emails/templates/password_change/subject.txt:1 +msgid "Password changed" +msgstr "Mot de passe modifié" + +#: fittrackee/emails/templates/password_change/body.html:3 +msgid "Your password has been changed." +msgstr "Votre mot de passe a été modifié." + +#: fittrackee/emails/templates/password_change/body.html:4 +#: fittrackee/emails/templates/password_change/body.txt:1 +msgid "The password for your FitTrackee account has been changed." +msgstr "Le mot de passe de votre compte FitTrackee a été modifié." + +#: fittrackee/emails/templates/password_change/body.html:5 +#: fittrackee/emails/templates/password_change/body.txt:4 +msgid "" +"If this password change wasn't initiated by you, please change your " +"password immediately or contact your administrator if your account is " +"locked." +msgstr "" +"Si vous n'êtes pas à l'origine de cette modification, veuillez changer " +"votre mot de passe immédiatement ou contacter l'administrateur si votre " +"compte est bloqué." + +#: fittrackee/emails/templates/password_reset_request/body.html:2 +#: fittrackee/emails/templates/password_reset_request/subject.txt:1 +msgid "Password reset request" +msgstr "Réinitialiser votre mot de passe" + +#: fittrackee/emails/templates/password_reset_request/body.html:3 +#, python-format +msgid "" +"Use this link to reset your password. The link is only valid for " +"%(expiration_delay)s." +msgstr "" +"Utiliser ce lien pour réinitialiser le mot de passe. Ce lien n'est valide" +" que pendant %(expiration_delay)s." + +#: fittrackee/emails/templates/password_reset_request/body.html:4 +#: fittrackee/emails/templates/password_reset_request/body.txt:1 +msgid "You recently requested to reset your password for your FitTrackee account." +msgstr "" +"Vous avez récemment demandé la réinitialisation du mot de passe de votre " +"compte sur FitTrackee." + +#: fittrackee/emails/templates/password_reset_request/body.html:4 +msgid "Use the button below to reset it." +msgstr "Cliquez sur le bouton pour le réinitialiser." + +#: fittrackee/emails/templates/password_reset_request/body.html:5 +#: fittrackee/emails/templates/password_reset_request/body.txt:2 +#, python-format +msgid "This password reset link is only valid for %(expiration_delay)s." +msgstr "Ce lien n'est valide que pendant %(expiration_delay)s." + +#: fittrackee/emails/templates/password_reset_request/body.html:13 +#: fittrackee/emails/templates/password_reset_request/body.txt:4 +msgid "Reset your password" +msgstr "Réinitialiser le mot de passe" + +#: fittrackee/emails/templates/password_reset_request/body.html:20 +#: fittrackee/emails/templates/password_reset_request/body.txt:7 +msgid "If you did not request a password reset, please ignore this email." +msgstr "" +"Si vous n'avez pas demandé de réinitialisation, vous pouvez ignorer cet " +"e-mail." + +#: fittrackee/emails/templates/password_reset_request/body.txt:1 +msgid "Use the link below to reset it." +msgstr "Cliquez sur le lien ci-dessous pour le réinitialiser." + diff --git a/fittrackee/tests/emails/template_results/email_account_confirmation.py b/fittrackee/tests/emails/template_results/email_account_confirmation.py index 7d8baeef..94a52ad9 100644 --- a/fittrackee/tests/emails/template_results/email_account_confirmation.py +++ b/fittrackee/tests/emails/template_results/email_account_confirmation.py @@ -2,7 +2,8 @@ expected_en_text_body = """Hi test, -You have created an account on FitTrackee. Use the link below to confirm your address email. +You have created an account on FitTrackee. +Use the link below to confirm your address email. Verify your email: http://localhost/account-confirmation?token=xxx @@ -18,7 +19,7 @@ expected_fr_text_body = """Bonjour test, Vous avez créé un compte sur FitTrackee. Cliquez sur le lien ci-dessous pour confirmer votre adresse email. -Vérifier l'adresse email : http://localhost/account-confirmation?token=xxx +Vérifier l'adresse email: http://localhost/account-confirmation?token=xxx Pour vérification, cette demande a été reçue à partir d'un appareil sous Linux, utilisant le navigateur Firefox. Si vous n'êtes pas à l'origine de la création de ce compte, vous pouvez ignorer cet e-mail. @@ -70,7 +71,7 @@ expected_en_html_body = """ @@ -119,9 +120,7 @@ expected_fr_html_body = """