Merge pull request #206 from SamR1/email-translations

Improve Email Internationalization
This commit is contained in:
Sam 2022-07-03 08:15:37 +02:00 committed by GitHub
commit c50c3c1f92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
89 changed files with 1340 additions and 693 deletions

View File

@ -17,13 +17,22 @@ First off, thank you for your interest in contributing!
The **GitHub** repository contains: The **GitHub** repository contains:
- source code (note that the repository also includes client build), - source code (note that the repository also includes client build),
- translations,
- tests, - tests,
- documentation (source and build). - 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**). 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 ### How to install FitTrackee
@ -62,14 +71,30 @@ Please make your changes from the development branch (`dev`).
$ make test-e2e $ 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/<LANG>/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, add or update tests.
* If needed, update documentation (no need to build documentation, it will be done when releasing). * 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 ```shell
$ make build-client $ 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. * Create your pull request to merge on `dev` branch.

View File

@ -6,6 +6,18 @@ make-p:
# Launch all P targets in parallel and exit as soon as one exits. # 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) 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:
$(BANDIT) -r fittrackee -c pyproject.toml $(BANDIT) -r fittrackee -c pyproject.toml

View File

@ -24,6 +24,7 @@ GUNICORN = $(VENV)/bin/gunicorn
BLACK = $(VENV)/bin/black BLACK = $(VENV)/bin/black
MYPY = $(VENV)/bin/mypy MYPY = $(VENV)/bin/mypy
BANDIT = $(VENV)/bin/bandit BANDIT = $(VENV)/bin/bandit
PYBABEL = $(VENV)/bin/pybabel
FTCLI = $(VENV)/bin/ftcli FTCLI = $(VENV)/bin/ftcli
# Node env # Node env

5
babel.cfg Normal file
View File

@ -0,0 +1,5 @@
[jinja2: fittrackee/emails/templates/**.html]
silent=False
[jinja2: fittrackee/emails/templates/**.txt]
silent=False

View File

@ -119,7 +119,9 @@ Administration
Translations 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 Screenshots

View File

@ -313,7 +313,9 @@ A user with an inactive account cannot log in. (<em>new in 0.6.0</em>)</p></li>
</section> </section>
<section id="translations"> <section id="translations">
<h2>Translations<a class="headerlink" href="#translations" title="Permalink to this heading"></a></h2> <h2>Translations<a class="headerlink" href="#translations" title="Permalink to this heading"></a></h2>
<p>FitTrackee is available in English and French (which can be saved in the user preferences).</p> <p>FitTrackee is available in the following languages (which can be saved in the user preferences):</p>
<figure class="align-default">
<img alt="https://hosted.weblate.org/widgets/fittrackee/-/multi-auto.svg" src="https://hosted.weblate.org/widgets/fittrackee/-/multi-auto.svg" /></figure>
</section> </section>
<section id="screenshots"> <section id="screenshots">
<h2>Screenshots<a class="headerlink" href="#screenshots" title="Permalink to this heading"></a></h2> <h2>Screenshots<a class="headerlink" href="#screenshots" title="Permalink to this heading"></a></h2>

File diff suppressed because one or more lines are too long

View File

@ -119,7 +119,9 @@ Administration
Translations 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 Screenshots

View File

@ -46,6 +46,10 @@ class BaseConfig:
os.environ.get('DEFAULT_STATICMAP', 'False') == 'True' 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): class DevelopmentConfig(BaseConfig):

View File

@ -3,8 +3,9 @@ import smtplib
import ssl import ssl
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText 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 flask import Flask
from jinja2 import Environment, FileSystemLoader, select_autoescape from jinja2 import Environment, FileSystemLoader, select_autoescape
from urllib3.util import parse_url from urllib3.util import parse_url
@ -38,16 +39,43 @@ class EmailMessage:
class EmailTemplate: 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( self._env = Environment(
autoescape=select_autoescape(['html', 'htm', 'xml']), autoescape=select_autoescape(['html', 'htm', 'xml']),
loader=FileSystemLoader(template_directory), 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( def get_content(
self, template_name: str, lang: str, part: str, data: Dict self, template_name: str, lang: str, part: str, data: Dict
) -> str: ) -> 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) return template.render(data)
def get_all_contents(self, template: str, lang: str, data: Dict) -> Dict: def get_all_contents(self, template: str, lang: str, data: Dict) -> Dict:
@ -92,7 +120,11 @@ class EmailService:
self.username = parsed_url['username'] self.username = parsed_url['username']
self.password = parsed_url['password'] self.password = parsed_url['password']
self.sender_email = app.config['SENDER_EMAIL'] 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 @staticmethod
def parse_email_url(email_url: str) -> Dict: def parse_email_url(email_url: str) -> Dict:

View File

@ -1,31 +1,25 @@
{% extends "layout.html" %} {% extends "layout.html" %}
{% block title %}Confirm your account{% endblock %} {% block title %}{{ _('Confirm your account') }}{% endblock %}
{% block preheader %}Use this link to confirm your account.{% endblock %} {% block preheader %}{{ _('Use this link to confirm your account.') }}{% endblock %}
{% block content %}<h1>Hi {{username}},</h1> {% block content %}<p>{{ _('You have created an account on FitTrackee.') }} {{ _('Use the button below to confirm your address email.') }}</p>
<p>You have created an account on FitTrackee. Use the button below to confirm your address email.</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
<td align="center"> <td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation"> <table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr> <tr>
<td align="center"> <td align="center">
<a href="{{account_confirmation_url}}" class="f-fallback button button--green" target="_blank">Verify your email</a> <a href="{{account_confirmation_url}}" class="f-fallback button button--green" target="_blank">{{ _('Verify your email') }}</a>
</td> </td>
</tr> </tr>
</table> </table>
</td> </td>
</tr> </tr>
</table> </table>{% endblock %}
<p> {% block not_initiated %}{{ _("If this account creation wasn't initiated by you, please ignore this email.") }}{% endblock %}
{% if operating_system and browser_name %}For security, this request was received from a {{operating_system}} device using {{browser_name}}. {% block url_to_paste %}<table class="body-sub" role="presentation">
{% endif %}If this account creation wasn't initiated by you, please ignore this email.
</p>
<p>Thanks,
<br>The FitTrackee Team</p>
<table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p> <p class="f-fallback sub">{{ _("If you're having trouble with the button above, copy and paste the URL below into your web browser.") }}</p>
<p class="f-fallback sub">{{account_confirmation_url}}</p> <p class="f-fallback sub">{{account_confirmation_url}}</p>
</td> </td>
</tr> </tr>

View File

@ -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 %}

View File

@ -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 %}<h1>Hallo {{username}},</h1>
<p>Du hast ein Konto bei FitTrackee angelegt. Verwende den unteren Button um Deine E-Mail Adresse zu bestätigen.</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{account_confirmation_url}}" class="f-fallback button button--green" target="_blank">Bestätige Deine E-Mail</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Danke
<br>Dein FitTrackee Team</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">Falls Du Probleme mit dem oberen Button hast, kopiere diese URL und gebe sie in Deinen Webbrowser ein.</p>
<p class="f-fallback sub">{{account_confirmation_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Bestätige Dein Konto

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Confirm your account

View File

@ -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 %}<h1>Bonjour {{username}},</h1>
<p>Vous avez créé un compte sur FitTrackee.
Cliquez sur le lien ci-dessous pour confirmer votre adresse email.
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{account_confirmation_url}}" class="f-fallback button button--green" target="_blank">Vérifier l'adresse email</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Merci,
<br>L'équipe FitTrackee</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p>
<p class="f-fallback sub">{{account_confirmation_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Confirmer votre inscription

View File

@ -0,0 +1 @@
FitTrackee - {{ _('Confirm your account') }}

View File

@ -0,0 +1,18 @@
{% extends "layout.html" %}
{% block title %}{{ _('Email changed') }}{% endblock %}
{% block preheader %}{{ _('Your email is being updated.') }}{% endblock %}
{% block content %}<p>{{ _('You recently requested to change your email address for your FitTrackee account to:') }}</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
{{new_email_address}}
</td>
</tr>
</table>
</td>
</tr>
</table>{% 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 %}

View File

@ -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 %}

View File

@ -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 %}<h1>Hallo {{username}},</h1>
<p>Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos zu ändern. Neue Adresse:</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
{{new_email_address}}
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
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.
</p>
<p>Danke
<br>
Dein FitTrackee Team
</p>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - E-Mail Adresse geändert

View File

@ -1,26 +0,0 @@
{% extends "layout.html" %}
{% block title %}Email changed{% endblock %}
{% block preheader %}Your email is being updated.{% endblock %}
{% block content %}<h1>Hi {{username}},</h1>
<p>You recently requested to change your email address for your FitTrackee account to: </p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
{{new_email_address}}
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
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.
</p>
<p>Thanks,
<br>
The FitTrackee Team
</p>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Email changed

View File

@ -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 %}<h1>Bonjour {{username}},</h1>
<p>Vous avez récemment demandé la modification de l'adresse email associée à votre compte sur FitTrackee vers :</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
{{ new_email_address }}
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
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é.
</p>
<p>Merci,
<br>
L'équipe FitTrackee
</p>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Adresse email modifiée

View File

@ -0,0 +1 @@
FitTrackee - {{ _('Email changed') }}

View File

@ -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 %}<p>{{ _('You recently requested to change your email address for your FitTrackee account.') }} {{ _('Use the button below to confirm this address.') }}</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{email_confirmation_url}}" class="f-fallback button button--green" target="_blank">{{ _('Verify your email') }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>{% endblock %}
{% block not_initiated %}{{ _("If this email change wasn't initiated by you, please ignore this email.") }}{% endblock %}
{% block url_to_paste %}<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">{{ _("If you're having trouble with the button above, copy and paste the URL below into your web browser.") }}</p>
<p class="f-fallback sub">{{email_confirmation_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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 %}

View File

@ -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 %}<h1>Hallo {{username}},</h1>
<p>Du hast kürzlich beantragt, die E-Mail Adresse Deines FitTrackee Kontos zu ändern. Verwende den unteren Button um Deine Adresse zu bestätigen.</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{email_confirmation_url}}" class="f-fallback button button--green" target="_blank">Bestätige Deine E-Mail</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Danke
<br>Dein FitTrackee Team</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">Falls Du Probleme mit dem oberen Button hast, kopiere diese URL und gebe sie in Deinen Webbrowser ein.</p>
<p class="f-fallback sub">{{email_confirmation_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Bestätige E-Mail Änderung

View File

@ -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 %}<h1>Hi {{username}},</h1>
<p>You recently requested to change your email address for your FitTrackee account. Use the button below to confirm this address.</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{email_confirmation_url}}" class="f-fallback button button--green" target="_blank">Verify your email</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Thanks,
<br>The FitTrackee Team</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p>
<p class="f-fallback sub">{{email_confirmation_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Confirm email change

View File

@ -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 %}<h1>Bonjour {{username}},</h1>
<p>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.
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{email_confirmation_url}}" class="f-fallback button button--green" target="_blank">Vérifier l'adresse email</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Merci,
<br>L'équipe FitTrackee</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p>
<p class="f-fallback sub">{{email_confirmation_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Confirmer le changement d'adresse email

View File

@ -0,0 +1 @@
FitTrackee - {{ _('Confirm email change') }}

View File

@ -212,7 +212,15 @@
<tr> <tr>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>{{ _('Hi %(username)s,', username=username) }}</h1>
{% block content %}{% endblock %} {% block content %}{% endblock %}
<p>
{% 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 %}
</p>
<p>{{ _('Thanks,') }}
<br>{{ _('The FitTrackee Team') }}</p>
{% block url_to_paste %}{% endblock %}
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -0,0 +1,7 @@
{{ _('Hi %(username)s,', username=username) }}
{% block content %}{% endblock %}
{{ _('Thanks,') }}
{{ _('The FitTrackee Team') }}
{{fittrackee_url}}

View File

@ -0,0 +1,5 @@
{% extends "layout.html" %}
{% block title %}{{ _('Password changed') }}{% endblock %}
{% block preheader %}{{ _('Your password has been changed.') }}{% endblock %}
{% block content %}<p>{{ _('The password for your FitTrackee account has been changed.') }}</p>{% 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 %}

View File

@ -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 %}

View File

@ -1,13 +0,0 @@
{% extends "layout.html" %}
{% block title %}Passwort geändert{% endblock %}
{% block preheader %}Dein Passwort wurde geändert.{% endblock %}
{% block content %}<h1>Hallo {{username}},</h1>
<p>Das Passwort Deines FitTrackee Kontos wurde geändert.</p>
<p>
{% 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.
</p>
<p>Danke
<br>
Dein FitTrackee Team
</p>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Passwort geändert

View File

@ -1,13 +0,0 @@
{% extends "layout.html" %}
{% block title %}Password changed{% endblock %}
{% block preheader %}Your password has been changed.{% endblock %}
{% block content %}<h1>Hi {{username}},</h1>
<p>The password for your FitTrackee account has been changed.</p>
<p>
{% 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.
</p>
<p>Thanks,
<br>
The FitTrackee Team
</p>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Password changed

View File

@ -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 %}<h1>Bonjour {{username}},</h1>
<p>Le mot de passe de votre compte FitTrackee a été modifié.</p>
<p>
{% 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é.
</p>
<p>Merci,
<br>
L'équipe FitTrackee
</p>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Mot de passe modifié

View File

@ -0,0 +1 @@
FitTrackee - {{ _('Password changed') }}

View File

@ -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 %}<p>{{ _('You recently requested to reset your password for your FitTrackee account.') }} {{ _('Use the button below to reset it.') }}
<strong>{{ _('This password reset link is only valid for %(expiration_delay)s.', expiration_delay=expiration_delay) }}</strong>
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{password_reset_url}}" class="f-fallback button button--green" target="_blank">{{ _('Reset your password') }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>{% endblock %}
{% block not_initiated %}{{ _('If you did not request a password reset, please ignore this email.') }}{% endblock %}
{% block url_to_paste %}<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">{{ _("If you're having trouble with the button above, copy and paste the URL below into your web browser.") }}</p>
<p class="f-fallback sub">{{password_reset_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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 %}

View File

@ -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 %}<h1>Hallo {{username}},</h1>
<p>Du hast kürzlich beantragt, das Passwort Deines FitTrackee Kontos zurückzusetzen. Verwende den unteren Button um es zurückzusetzen.
<strong>Der Link ist nur für {{ expiration_delay }} gültig.</strong>
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{password_reset_url}}" class="f-fallback button button--green" target="_blank">Setze Dein Passwort zurück</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Danke
<br>Dein FitTrackee Team</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">Falls Du Probleme mit dem oberen Button hast, kopiere diese URL und gebe sie in Deinen Webbrowser ein.</p>
<p class="f-fallback sub">{{password_reset_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Anfrage zum Zurücksetzen des Passworts

View File

@ -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 %}<h1>Hi {{username}},</h1>
<p>You recently requested to reset your password for your account. Use the button below to reset it.
<strong>This password reset link is only valid for {{ expiration_delay }}.</strong>
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{password_reset_url}}" class="f-fallback button button--green" target="_blank">Reset your password</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Thanks,
<br>The FitTrackee Team</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p>
<p class="f-fallback sub">{{password_reset_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Password reset request

View File

@ -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 %}<h1>Bonjour {{username}},</h1>
<p>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.
<strong>Cette réinitialisation n'est valide que pendant {{ expiration_delay }}.</strong>
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
<tr>
<td align="center">
<a href="{{password_reset_url}}" class="f-fallback button button--green" target="_blank">Réinitialiser le mot de passe</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>
{% 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.
</p>
<p>Merci,
<br>L'équipe FitTrackee</p>
<table class="body-sub" role="presentation">
<tr>
<td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p>
<p class="f-fallback sub">{{password_reset_url}}</p>
</td>
</tr>
</table>{% endblock %}

View File

@ -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}}

View File

@ -1 +0,0 @@
FitTrackee - Réinitialiser votre mot de passe

View File

@ -0,0 +1 @@
FitTrackee - {{ _('Password reset request') }}

View File

@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language: de\n"
"Language-Team: de <LL@li.org>\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."

View File

@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\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."

View File

@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language: fr\n"
"Language-Team: fr <LL@li.org>\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."

View File

@ -2,7 +2,8 @@
expected_en_text_body = """Hi test, 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 Verify your email: http://localhost/account-confirmation?token=xxx
@ -70,7 +71,7 @@ expected_en_html_body = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p> <p class="f-fallback sub">If you're having trouble with the button above, copy and paste the URL below into your web browser.</p>
<p class="f-fallback sub">http://localhost/account-confirmation?token=xxx</p> <p class="f-fallback sub">http://localhost/account-confirmation?token=xxx</p>
</td> </td>
</tr> </tr>
@ -119,9 +120,7 @@ expected_fr_html_body = """ <body>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>Bonjour test,</h1> <h1>Bonjour test,</h1>
<p>Vous avez créé un compte sur FitTrackee. <p>Vous avez créé un compte sur FitTrackee. Cliquez sur le bouton pour confirmer votre adresse email.</p>
Cliquez sur le lien ci-dessous pour confirmer votre adresse email.
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
<td align="center"> <td align="center">
@ -144,7 +143,7 @@ expected_fr_html_body = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p> <p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur.</p>
<p class="f-fallback sub">http://localhost/account-confirmation?token=xxx</p> <p class="f-fallback sub">http://localhost/account-confirmation?token=xxx</p>
</td> </td>
</tr> </tr>

View File

@ -61,9 +61,8 @@ expected_en_html_body = """ <body>
If this email change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked. If this email change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.
</p> </p>
<p>Thanks, <p>Thanks,
<br> <br>The FitTrackee Team</p>
The FitTrackee Team
</p>
</div> </div>
</td> </td>
</tr> </tr>
@ -127,9 +126,8 @@ expected_fr_html_body = """ <body>
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é. 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é.
</p> </p>
<p>Merci, <p>Merci,
<br> <br>L'équipe FitTrackee</p>
L'équipe FitTrackee
</p>
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -2,7 +2,8 @@
expected_en_text_body = """Hi test, expected_en_text_body = """Hi test,
You recently requested to change your email address for your FitTrackee account. Use the link below to confirm this address. You recently requested to change your email address for your FitTrackee account.
Use the link below to confirm this address.
Verify your email: http://localhost/email-update?token=xxx Verify your email: http://localhost/email-update?token=xxx
@ -15,7 +16,8 @@ http://localhost"""
expected_en_text_body_without_security = """Hi test, expected_en_text_body_without_security = """Hi test,
You recently requested to change your email address for your FitTrackee account. Use the link below to confirm this address. You recently requested to change your email address for your FitTrackee account.
Use the link below to confirm this address.
Verify your email: http://localhost/email-update?token=xxx Verify your email: http://localhost/email-update?token=xxx
@ -95,7 +97,7 @@ expected_en_html_body = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p> <p class="f-fallback sub">If you're having trouble with the button above, copy and paste the URL below into your web browser.</p>
<p class="f-fallback sub">http://localhost/email-update?token=xxx</p> <p class="f-fallback sub">http://localhost/email-update?token=xxx</p>
</td> </td>
</tr> </tr>
@ -166,7 +168,7 @@ expected_en_html_body_without_security = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p> <p class="f-fallback sub">If you're having trouble with the button above, copy and paste the URL below into your web browser.</p>
<p class="f-fallback sub">http://localhost/email-update?token=xxx</p> <p class="f-fallback sub">http://localhost/email-update?token=xxx</p>
</td> </td>
</tr> </tr>
@ -196,7 +198,7 @@ expected_en_html_body_without_security = """ <body>
</html>""" </html>"""
expected_fr_html_body = """ <body> expected_fr_html_body = """ <body>
<span class="preheader">Utiliser ce lien pour confirmer cette adresse email.</span> <span class="preheader">Confirmer le changement d'adresse email.</span>
<table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
<td align="center"> <td align="center">
@ -215,9 +217,7 @@ expected_fr_html_body = """ <body>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>Bonjour test,</h1> <h1>Bonjour test,</h1>
<p>Vous avez récemment demandé la modification de l'adresse email associée à votre compte sur FitTrackee. <p>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.</p>
Cliquez sur le bouton ci-dessous pour confirmer cette adresse email.
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
<td align="center"> <td align="center">
@ -240,7 +240,7 @@ expected_fr_html_body = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p> <p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur.</p>
<p class="f-fallback sub">http://localhost/email-update?token=xxx</p> <p class="f-fallback sub">http://localhost/email-update?token=xxx</p>
</td> </td>
</tr> </tr>
@ -270,7 +270,7 @@ expected_fr_html_body = """ <body>
</html>""" </html>"""
expected_fr_html_body_without_security = """ <body> expected_fr_html_body_without_security = """ <body>
<span class="preheader">Utiliser ce lien pour confirmer cette adresse email.</span> <span class="preheader">Confirmer le changement d'adresse email.</span>
<table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
<td align="center"> <td align="center">
@ -289,9 +289,7 @@ expected_fr_html_body_without_security = """ <body>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>Bonjour test,</h1> <h1>Bonjour test,</h1>
<p>Vous avez récemment demandé la modification de l'adresse email associée à votre compte sur FitTrackee. <p>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.</p>
Cliquez sur le bouton ci-dessous pour confirmer cette adresse email.
</p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
<td align="center"> <td align="center">
@ -313,7 +311,7 @@ expected_fr_html_body_without_security = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p> <p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur.</p>
<p class="f-fallback sub">http://localhost/email-update?token=xxx</p> <p class="f-fallback sub">http://localhost/email-update?token=xxx</p>
</td> </td>
</tr> </tr>

View File

@ -68,9 +68,8 @@ expected_en_html_body = """ <body>
If this password change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked. If this password change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.
</p> </p>
<p>Thanks, <p>Thanks,
<br> <br>The FitTrackee Team</p>
The FitTrackee Team
</p>
</div> </div>
</td> </td>
</tr> </tr>
@ -120,9 +119,8 @@ expected_en_html_body_without_security = """ <body>
If this password change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked. If this password change wasn't initiated by you, please change your password immediately or contact your administrator if your account is locked.
</p> </p>
<p>Thanks, <p>Thanks,
<br> <br>The FitTrackee Team</p>
The FitTrackee Team
</p>
</div> </div>
</td> </td>
</tr> </tr>
@ -173,9 +171,8 @@ expected_fr_html_body = """ <body>
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é. 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é.
</p> </p>
<p>Merci, <p>Merci,
<br> <br>L'équipe FitTrackee</p>
L'équipe FitTrackee
</p>
</div> </div>
</td> </td>
</tr> </tr>
@ -225,9 +222,8 @@ expected_fr_html_body_without_security = """ <body>
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é. 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é.
</p> </p>
<p>Merci, <p>Merci,
<br> <br>L'équipe FitTrackee</p>
L'équipe FitTrackee
</p>
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -2,7 +2,8 @@
expected_en_text_body = """Hi test, expected_en_text_body = """Hi test,
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 3 seconds. 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 3 seconds.
Reset your password: http://localhost/password-reset?token=xxx Reset your password: http://localhost/password-reset?token=xxx
@ -15,7 +16,8 @@ http://localhost"""
expected_en_text_body_without_security = """Hi test, expected_en_text_body_without_security = """Hi test,
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 3 seconds. 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 3 seconds.
Reset your password: http://localhost/password-reset?token=xxx Reset your password: http://localhost/password-reset?token=xxx
@ -27,8 +29,8 @@ http://localhost"""
expected_fr_text_body = """Bonjour test, expected_fr_text_body = """Bonjour test,
Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. 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.
Cliquez sur le lien ci-dessous pour le réinitialiser. Ce lien n'est valide que pendant 3 secondes. Ce lien n'est valide que pendant 3 secondes.
Réinitialiser le mot de passe: http://localhost/password-reset?token=xxx Réinitialiser le mot de passe: http://localhost/password-reset?token=xxx
@ -41,8 +43,8 @@ http://localhost"""
expected_fr_text_body_without_security = """Bonjour test, expected_fr_text_body_without_security = """Bonjour test,
Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. 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.
Cliquez sur le lien ci-dessous pour le réinitialiser. Ce lien n'est valide que pendant 3 secondes. Ce lien n'est valide que pendant 3 secondes.
Réinitialiser le mot de passe: http://localhost/password-reset?token=xxx Réinitialiser le mot de passe: http://localhost/password-reset?token=xxx
@ -72,7 +74,7 @@ expected_en_html_body = """ <body>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>Hi test,</h1> <h1>Hi test,</h1>
<p>You recently requested to reset your password for your account. Use the button below to reset it. <p>You recently requested to reset your password for your FitTrackee account. Use the button below to reset it.
<strong>This password reset link is only valid for 3 seconds.</strong> <strong>This password reset link is only valid for 3 seconds.</strong>
</p> </p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
@ -97,7 +99,7 @@ expected_en_html_body = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p> <p class="f-fallback sub">If you're having trouble with the button above, copy and paste the URL below into your web browser.</p>
<p class="f-fallback sub">http://localhost/password-reset?token=xxx</p> <p class="f-fallback sub">http://localhost/password-reset?token=xxx</p>
</td> </td>
</tr> </tr>
@ -146,7 +148,7 @@ expected_en_html_body_without_security = """ <body>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>Hi test,</h1> <h1>Hi test,</h1>
<p>You recently requested to reset your password for your account. Use the button below to reset it. <p>You recently requested to reset your password for your FitTrackee account. Use the button below to reset it.
<strong>This password reset link is only valid for 3 seconds.</strong> <strong>This password reset link is only valid for 3 seconds.</strong>
</p> </p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
@ -170,7 +172,7 @@ expected_en_html_body_without_security = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">If youre having trouble with the button above, copy and paste the URL below into your web browser.</p> <p class="f-fallback sub">If you're having trouble with the button above, copy and paste the URL below into your web browser.</p>
<p class="f-fallback sub">http://localhost/password-reset?token=xxx</p> <p class="f-fallback sub">http://localhost/password-reset?token=xxx</p>
</td> </td>
</tr> </tr>
@ -219,9 +221,8 @@ expected_fr_html_body = """ <body>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>Bonjour test,</h1> <h1>Bonjour test,</h1>
<p>Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. <p>Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. Cliquez sur le bouton pour le réinitialiser.
Cliquez sur le bouton ci-dessous pour le réinitialiser. <strong>Ce lien n'est valide que pendant 3 secondes.</strong>
<strong>Cette réinitialisation n'est valide que pendant 3 secondes.</strong>
</p> </p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
@ -245,7 +246,7 @@ expected_fr_html_body = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p> <p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur.</p>
<p class="f-fallback sub">http://localhost/password-reset?token=xxx</p> <p class="f-fallback sub">http://localhost/password-reset?token=xxx</p>
</td> </td>
</tr> </tr>
@ -295,9 +296,8 @@ expected_fr_html_body_without_security = """ <body>
<td class="content-cell"> <td class="content-cell">
<div class="f-fallback"> <div class="f-fallback">
<h1>Bonjour test,</h1> <h1>Bonjour test,</h1>
<p>Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. <p>Vous avez récemment demandé la réinitialisation du mot de passe de votre compte sur FitTrackee. Cliquez sur le bouton pour le réinitialiser.
Cliquez sur le bouton ci-dessous pour le réinitialiser. <strong>Ce lien n'est valide que pendant 3 secondes.</strong>
<strong>Cette réinitialisation n'est valide que pendant 3 secondes.</strong>
</p> </p>
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr> <tr>
@ -320,7 +320,7 @@ expected_fr_html_body_without_security = """ <body>
<table class="body-sub" role="presentation"> <table class="body-sub" role="presentation">
<tr> <tr>
<td> <td>
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur</p> <p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur.</p>
<p class="f-fallback sub">http://localhost/password-reset?token=xxx</p> <p class="f-fallback sub">http://localhost/password-reset?token=xxx</p>
</td> </td>
</tr> </tr>

View File

@ -32,7 +32,11 @@ class TestEmailTemplateForAccountConfirmation:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
subject = email_template.get_content( subject = email_template.get_content(
'account_confirmation', lang, 'subject.txt', {} 'account_confirmation', lang, 'subject.txt', {}
@ -50,7 +54,11 @@ class TestEmailTemplateForAccountConfirmation:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'account_confirmation', lang, 'body.txt', self.EMAIL_DATA 'account_confirmation', lang, 'body.txt', self.EMAIL_DATA
@ -59,7 +67,11 @@ class TestEmailTemplateForAccountConfirmation:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'account_confirmation', 'en', 'body.html', self.EMAIL_DATA 'account_confirmation', 'en', 'body.html', self.EMAIL_DATA
@ -68,7 +80,11 @@ class TestEmailTemplateForAccountConfirmation:
assert expected_en_html_body in text_body assert expected_en_html_body in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'account_confirmation', 'fr', 'body.html', self.EMAIL_DATA 'account_confirmation', 'fr', 'body.html', self.EMAIL_DATA

View File

@ -47,7 +47,11 @@ class TestEmailTemplateForEmailUpdateToCurrentEmail:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
subject = email_template.get_content( subject = email_template.get_content(
'email_update_to_current_email', lang, 'subject.txt', {} 'email_update_to_current_email', lang, 'subject.txt', {}
@ -65,7 +69,11 @@ class TestEmailTemplateForEmailUpdateToCurrentEmail:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_current_email', lang, 'body.txt', self.EMAIL_DATA 'email_update_to_current_email', lang, 'body.txt', self.EMAIL_DATA
@ -74,7 +82,11 @@ class TestEmailTemplateForEmailUpdateToCurrentEmail:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_current_email', 'en', 'body.html', self.EMAIL_DATA 'email_update_to_current_email', 'en', 'body.html', self.EMAIL_DATA
@ -83,7 +95,11 @@ class TestEmailTemplateForEmailUpdateToCurrentEmail:
assert expected_en_current_email_html_body in text_body assert expected_en_current_email_html_body in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_current_email', 'fr', 'body.html', self.EMAIL_DATA 'email_update_to_current_email', 'fr', 'body.html', self.EMAIL_DATA
@ -111,7 +127,11 @@ class TestEmailTemplateForEmailUpdateToNewEmail:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
subject = email_template.get_content( subject = email_template.get_content(
'email_update_to_new_email', lang, 'subject.txt', {} 'email_update_to_new_email', lang, 'subject.txt', {}
@ -129,7 +149,11 @@ class TestEmailTemplateForEmailUpdateToNewEmail:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_new_email', lang, 'body.txt', self.EMAIL_DATA 'email_update_to_new_email', lang, 'body.txt', self.EMAIL_DATA
@ -138,7 +162,11 @@ class TestEmailTemplateForEmailUpdateToNewEmail:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_new_email', 'en', 'body.html', self.EMAIL_DATA 'email_update_to_new_email', 'en', 'body.html', self.EMAIL_DATA
@ -147,7 +175,11 @@ class TestEmailTemplateForEmailUpdateToNewEmail:
assert expected_en_new_email_html_body in text_body assert expected_en_new_email_html_body in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_new_email', 'fr', 'body.html', self.EMAIL_DATA 'email_update_to_new_email', 'fr', 'body.html', self.EMAIL_DATA
@ -173,7 +205,11 @@ class TestEmailTemplateForEmailUpdateToNewEmailWithoutSecurityInfos:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
subject = email_template.get_content( subject = email_template.get_content(
'email_update_to_new_email', lang, 'subject.txt', {} 'email_update_to_new_email', lang, 'subject.txt', {}
@ -191,7 +227,11 @@ class TestEmailTemplateForEmailUpdateToNewEmailWithoutSecurityInfos:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_new_email', lang, 'body.txt', self.EMAIL_DATA 'email_update_to_new_email', lang, 'body.txt', self.EMAIL_DATA
@ -200,7 +240,11 @@ class TestEmailTemplateForEmailUpdateToNewEmailWithoutSecurityInfos:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_new_email', 'en', 'body.html', self.EMAIL_DATA 'email_update_to_new_email', 'en', 'body.html', self.EMAIL_DATA
@ -209,7 +253,11 @@ class TestEmailTemplateForEmailUpdateToNewEmailWithoutSecurityInfos:
assert expected_en_new_email_html_body_without_security in text_body assert expected_en_new_email_html_body_without_security in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES']
)
text_body = email_template.get_content( text_body = email_template.get_content(
'email_update_to_new_email', 'fr', 'body.html', self.EMAIL_DATA 'email_update_to_new_email', 'fr', 'body.html', self.EMAIL_DATA

View File

@ -33,7 +33,11 @@ class TestEmailTemplateForPasswordChange:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
subject = email_template.get_content( subject = email_template.get_content(
'password_change', lang, 'subject.txt', {} 'password_change', lang, 'subject.txt', {}
@ -51,7 +55,11 @@ class TestEmailTemplateForPasswordChange:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'password_change', lang, 'body.txt', self.EMAIL_DATA 'password_change', lang, 'body.txt', self.EMAIL_DATA
@ -60,7 +68,11 @@ class TestEmailTemplateForPasswordChange:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'password_change', 'en', 'body.html', self.EMAIL_DATA 'password_change', 'en', 'body.html', self.EMAIL_DATA
@ -69,7 +81,11 @@ class TestEmailTemplateForPasswordChange:
assert expected_en_html_body in text_body assert expected_en_html_body in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'password_change', 'fr', 'body.html', self.EMAIL_DATA 'password_change', 'fr', 'body.html', self.EMAIL_DATA
@ -94,7 +110,11 @@ class TestEmailTemplateForPasswordChangeWithSecurityInfos:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
subject = email_template.get_content( subject = email_template.get_content(
'password_change', lang, 'subject.txt', {} 'password_change', lang, 'subject.txt', {}
@ -112,7 +132,11 @@ class TestEmailTemplateForPasswordChangeWithSecurityInfos:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'password_change', lang, 'body.txt', self.EMAIL_DATA 'password_change', lang, 'body.txt', self.EMAIL_DATA
@ -121,7 +145,11 @@ class TestEmailTemplateForPasswordChangeWithSecurityInfos:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'password_change', 'en', 'body.html', self.EMAIL_DATA 'password_change', 'en', 'body.html', self.EMAIL_DATA
@ -130,7 +158,11 @@ class TestEmailTemplateForPasswordChangeWithSecurityInfos:
assert expected_en_html_body_without_security in text_body assert expected_en_html_body_without_security in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
text_body = email_template.get_content( text_body = email_template.get_content(
'password_change', 'fr', 'body.html', self.EMAIL_DATA 'password_change', 'fr', 'body.html', self.EMAIL_DATA

View File

@ -26,7 +26,11 @@ class TestEmailTemplateForPasswordRequest:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
subject = email_template.get_content( subject = email_template.get_content(
'password_reset_request', lang, 'subject.txt', {} 'password_reset_request', lang, 'subject.txt', {}
@ -41,7 +45,11 @@ class TestEmailTemplateForPasswordRequest:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
email_data = { email_data = {
'expiration_delay': '3 seconds' if lang == 'en' else '3 secondes', 'expiration_delay': '3 seconds' if lang == 'en' else '3 secondes',
'username': 'test', 'username': 'test',
@ -58,7 +66,11 @@ class TestEmailTemplateForPasswordRequest:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
email_data = { email_data = {
'expiration_delay': '3 seconds', 'expiration_delay': '3 seconds',
'username': 'test', 'username': 'test',
@ -75,7 +87,11 @@ class TestEmailTemplateForPasswordRequest:
assert expected_en_html_body in text_body assert expected_en_html_body in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
email_data = { email_data = {
'expiration_delay': '3 secondes', 'expiration_delay': '3 secondes',
'username': 'test', 'username': 'test',
@ -103,7 +119,11 @@ class TestEmailTemplateForPasswordRequestWithoutSecurityInfos:
def test_it_gets_subject( def test_it_gets_subject(
self, app: Flask, lang: str, expected_subject: str self, app: Flask, lang: str, expected_subject: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
subject = email_template.get_content( subject = email_template.get_content(
'password_reset_request', lang, 'subject.txt', {} 'password_reset_request', lang, 'subject.txt', {}
@ -121,7 +141,11 @@ class TestEmailTemplateForPasswordRequestWithoutSecurityInfos:
def test_it_gets_text_body( def test_it_gets_text_body(
self, app: Flask, lang: str, expected_text_body: str self, app: Flask, lang: str, expected_text_body: str
) -> None: ) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
email_data = { email_data = {
'expiration_delay': '3 seconds' if lang == 'en' else '3 secondes', 'expiration_delay': '3 seconds' if lang == 'en' else '3 secondes',
'username': 'test', 'username': 'test',
@ -136,7 +160,11 @@ class TestEmailTemplateForPasswordRequestWithoutSecurityInfos:
assert text_body == expected_text_body assert text_body == expected_text_body
def test_it_gets_en_html_body(self, app: Flask) -> None: def test_it_gets_en_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
email_data = { email_data = {
'expiration_delay': '3 seconds', 'expiration_delay': '3 seconds',
'username': 'test', 'username': 'test',
@ -151,7 +179,11 @@ class TestEmailTemplateForPasswordRequestWithoutSecurityInfos:
assert expected_en_html_body_without_security in text_body assert expected_en_html_body_without_security in text_body
def test_it_gets_fr_html_body(self, app: Flask) -> None: def test_it_gets_fr_html_body(self, app: Flask) -> None:
email_template = EmailTemplate(app.config['TEMPLATES_FOLDER']) email_template = EmailTemplate(
app.config['TEMPLATES_FOLDER'],
app.config['TRANSLATIONS_FOLDER'],
app.config['LANGUAGES'],
)
email_data = { email_data = {
'expiration_delay': '3 secondes', 'expiration_delay': '3 secondes',
'username': 'test', 'username': 'test',

206
messages.pot Normal file
View File

@ -0,0 +1,206 @@
# Translations template for PROJECT.
# Copyright (C) 2022 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
#, fuzzy
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: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 ""
#: 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 ""
#: fittrackee/emails/templates/layout.html:221
#: fittrackee/emails/templates/layout.txt:5
msgid "Thanks,"
msgstr ""
#: fittrackee/emails/templates/layout.html:222
#: fittrackee/emails/templates/layout.txt:6
msgid "The FitTrackee Team"
msgstr ""
#: fittrackee/emails/templates/account_confirmation/body.html:2
#: fittrackee/emails/templates/account_confirmation/subject.txt:1
msgid "Confirm your account"
msgstr ""
#: fittrackee/emails/templates/account_confirmation/body.html:3
msgid "Use this link to confirm your account."
msgstr ""
#: 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 ""
#: fittrackee/emails/templates/account_confirmation/body.html:4
msgid "Use the button below to confirm your address email."
msgstr ""
#: 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 ""
#: 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 ""
#: 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 ""
#: fittrackee/emails/templates/account_confirmation/body.txt:2
msgid "Use the link below to confirm your address email."
msgstr ""
#: 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 ""
#: fittrackee/emails/templates/email_update_to_current_email/body.html:3
msgid "Your email is being updated."
msgstr ""
#: 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 ""
#: 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 ""
#: 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 ""
#: fittrackee/emails/templates/email_update_to_new_email/body.html:3
msgid "Use this link to confirm email change."
msgstr ""
#: 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 ""
#: fittrackee/emails/templates/email_update_to_new_email/body.html:4
msgid "Use the button below to confirm this address."
msgstr ""
#: 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 ""
#: fittrackee/emails/templates/email_update_to_new_email/body.txt:2
msgid "Use the link below to confirm this address."
msgstr ""
#: fittrackee/emails/templates/password_change/body.html:2
#: fittrackee/emails/templates/password_change/subject.txt:1
msgid "Password changed"
msgstr ""
#: fittrackee/emails/templates/password_change/body.html:3
msgid "Your password has been changed."
msgstr ""
#: 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 ""
#: 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 ""
#: fittrackee/emails/templates/password_reset_request/body.html:2
#: fittrackee/emails/templates/password_reset_request/subject.txt:1
msgid "Password reset request"
msgstr ""
#: 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 ""
#: 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 ""
#: fittrackee/emails/templates/password_reset_request/body.html:4
msgid "Use the button below to reset it."
msgstr ""
#: 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 ""
#: fittrackee/emails/templates/password_reset_request/body.html:13
#: fittrackee/emails/templates/password_reset_request/body.txt:4
msgid "Reset your password"
msgstr ""
#: 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 ""
#: fittrackee/emails/templates/password_reset_request/body.txt:1
msgid "Use the link below to reset it."
msgstr ""

4
poetry.lock generated
View File

@ -68,7 +68,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
name = "babel" name = "babel"
version = "2.10.3" version = "2.10.3"
description = "Internationalization utilities" description = "Internationalization utilities"
category = "dev" category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
@ -1466,7 +1466,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.7" python-versions = "^3.7"
content-hash = "327d5c6a151cd6c0130a2e1f980fd5e8259ea59a9972407947c9a64124033c0a" content-hash = "fabbeac65ba304e8051b1453c13f872ef5fc8ed1a6ea7cc236a6d8ede34d9600"
[metadata.files] [metadata.files]
alabaster = [ alabaster = [

View File

@ -41,6 +41,7 @@ staticmap = "^0.5.4"
SQLAlchemy = "1.4.37" SQLAlchemy = "1.4.37"
pyOpenSSL = "^22.0" pyOpenSSL = "^22.0"
ua-parser = "^0.10.0" ua-parser = "^0.10.0"
Babel = "^2.10.3"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
black = "^22.3" black = "^22.3"