(email) white brand email

The email was branded "La Suite Numérique",
we updated the template to make it generic, we
will use settings env variables to customize the
email for each brand.
This commit is contained in:
Anthony LC
2024-12-13 17:48:08 +01:00
committed by Anthony LC
parent 2d13e0985e
commit ecb2b35ec8
14 changed files with 425 additions and 317 deletions

View File

@@ -12,6 +12,7 @@ and this project adheres to
## Added ## Added
- ✨(backend) add server-to-server API endpoint to create documents #467 - ✨(backend) add server-to-server API endpoint to create documents #467
- ✨(email) white brand email #412
## [1.9.0] - 2024-12-11 ## [1.9.0] - 2024-12-11

View File

@@ -16,7 +16,9 @@ PYTHONPATH=/app
# impress settings # impress settings
# Mail # Mail
DJANGO_EMAIL_BRAND_NAME="La Suite Numérique"
DJANGO_EMAIL_HOST="mailcatcher" DJANGO_EMAIL_HOST="mailcatcher"
DJANGO_EMAIL_LOGO_IMG="http://localhost:3000/assets/logo-suite-numerique.png"
DJANGO_EMAIL_PORT=1025 DJANGO_EMAIL_PORT=1025
# Backend url # Backend url

View File

@@ -552,9 +552,11 @@ class Document(BaseModel):
language = language or get_language() language = language or get_language()
context.update( context.update(
{ {
"brandname": settings.EMAIL_BRAND_NAME,
"document": self,
"domain": domain, "domain": domain,
"link": f"{domain}/docs/{self.id}/", "link": f"{domain}/docs/{self.id}/",
"document": self, "logo_img": settings.EMAIL_LOGO_IMG,
} }
) )

View File

@@ -7,6 +7,7 @@ from datetime import timedelta
from unittest import mock from unittest import mock
from django.core import mail from django.core import mail
from django.test import override_settings
from django.utils import timezone from django.utils import timezone
import pytest import pytest
@@ -339,6 +340,7 @@ def test_api_document_invitations_create_authenticated_outsider():
assert response.status_code == 403 assert response.status_code == 403
@override_settings(EMAIL_BRAND_NAME="My brand name", EMAIL_LOGO_IMG="my-img.jpg")
@pytest.mark.parametrize( @pytest.mark.parametrize(
"inviting,invited,response_code", "inviting,invited,response_code",
( (
@@ -407,6 +409,8 @@ def test_api_document_invitations_create_privileged_members(
f"{user.full_name} ({user.email}) invited you with the role ``{invited}`` " f"{user.full_name} ({user.email}) invited you with the role ``{invited}`` "
f"on the following document: {document.title}" f"on the following document: {document.title}"
) in email_content ) in email_content
assert "My brand name" in email_content
assert "my-img.jpg" in email_content
else: else:
assert models.Invitation.objects.exists() is False assert models.Invitation.objects.exists() is False
@@ -453,7 +457,7 @@ def test_api_document_invitations_create_email_from_content_language():
assert email.to == ["guest@example.com"] assert email.to == ["guest@example.com"]
email_content = " ".join(email.body.split()) email_content = " ".join(email.body.split())
assert f"{user.full_name} a partagé un document avec vous !" in email_content assert f"{user.full_name} a partagé un document avec vous!" in email_content
def test_api_document_invitations_create_email_from_content_language_not_supported(): def test_api_document_invitations_create_email_from_content_language_not_supported():

View File

@@ -352,9 +352,11 @@ class Base(Configuration):
# Mail # Mail
EMAIL_BACKEND = values.Value("django.core.mail.backends.smtp.EmailBackend") EMAIL_BACKEND = values.Value("django.core.mail.backends.smtp.EmailBackend")
EMAIL_BRAND_NAME = values.Value(None)
EMAIL_HOST = values.Value(None) EMAIL_HOST = values.Value(None)
EMAIL_HOST_USER = values.Value(None) EMAIL_HOST_USER = values.Value(None)
EMAIL_HOST_PASSWORD = values.Value(None) EMAIL_HOST_PASSWORD = values.Value(None)
EMAIL_LOGO_IMG = values.Value(None)
EMAIL_PORT = values.PositiveIntegerValue(None) EMAIL_PORT = values.PositiveIntegerValue(None)
EMAIL_USE_TLS = values.BooleanValue(False) EMAIL_USE_TLS = values.BooleanValue(False)
EMAIL_USE_SSL = values.BooleanValue(False) EMAIL_USE_SSL = values.BooleanValue(False)

View File

@@ -2,46 +2,66 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: lasuite-people\n" "Project-Id-Version: lasuite-people\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-25 10:15+0000\n" "POT-Creation-Date: 2024-12-13 15:17+0000\n"
"PO-Revision-Date: 2024-09-25 10:21\n" "PO-Revision-Date: 2024-12-13 15:22\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: German\n" "Language-Team: German\n"
"Language: de_DE\n" "Language: de_DE\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: lasuite-people\n" "X-Crowdin-Project: lasuite-people\n"
"X-Crowdin-Project-ID: 637934\n" "X-Crowdin-Project-ID: 637934\n"
"X-Crowdin-Language: de\n" "X-Crowdin-Language: de\n"
"X-Crowdin-File: backend-impress.pot\n" "X-Crowdin-File: backend-impress.pot\n"
"X-Crowdin-File-ID: 8\n" "X-Crowdin-File-ID: 8\n"
#: core/admin.py:32 #: core/admin.py:33
msgid "Personal info" msgid "Personal info"
msgstr "Persönliche Angaben" msgstr "Persönliche Daten"
#: core/admin.py:34 #: core/admin.py:46
msgid "Permissions" msgid "Permissions"
msgstr "Berechtigungen" msgstr "Berechtigungen"
#: core/admin.py:46 #: core/admin.py:58
msgid "Important dates" msgid "Important dates"
msgstr "Wichtige Termine" msgstr "Wichtige Daten"
#: core/api/serializers.py:253 #: core/api/filters.py:16
msgid "Creator is me"
msgstr ""
#: core/api/filters.py:19
msgid "Favorite"
msgstr ""
#: core/api/filters.py:22
msgid "Title"
msgstr ""
#: core/api/serializers.py:307
msgid "A new document was created on your behalf!"
msgstr ""
#: core/api/serializers.py:311
msgid "You have been granted ownership of a new document:"
msgstr ""
#: core/api/serializers.py:414
msgid "Body" msgid "Body"
msgstr "" msgstr "Inhalt"
#: core/api/serializers.py:256 #: core/api/serializers.py:417
msgid "Body type" msgid "Body type"
msgstr "" msgstr "Typ"
#: core/api/serializers.py:262 #: core/api/serializers.py:423
msgid "Format" msgid "Format"
msgstr "" msgstr "Format"
#: core/authentication/backends.py:56 #: core/authentication/backends.py:57
msgid "Invalid response format or token verification failed" msgid "Invalid response format or token verification failed"
msgstr "" msgstr ""
@@ -49,17 +69,17 @@ msgstr ""
msgid "User info contained no recognizable user identification" msgid "User info contained no recognizable user identification"
msgstr "" msgstr ""
#: core/authentication/backends.py:101 #: core/authentication/backends.py:88
msgid "Claims contained no recognizable user identification" msgid "User account is disabled"
msgstr "" msgstr ""
#: core/models.py:62 core/models.py:69 #: core/models.py:62 core/models.py:69
msgid "Reader" msgid "Reader"
msgstr "Leser" msgstr "Lesen"
#: core/models.py:63 core/models.py:70 #: core/models.py:63 core/models.py:70
msgid "Editor" msgid "Editor"
msgstr "Bearbeiter" msgstr "Bearbeiten"
#: core/models.py:71 #: core/models.py:71
msgid "Administrator" msgid "Administrator"
@@ -67,283 +87,308 @@ msgstr "Administrator"
#: core/models.py:72 #: core/models.py:72
msgid "Owner" msgid "Owner"
msgstr "Eigentümer" msgstr "Besitzer"
#: core/models.py:80 #: core/models.py:83
msgid "Restricted" msgid "Restricted"
msgstr "Eingeschränkt" msgstr "Beschränkt"
#: core/models.py:84 #: core/models.py:87
msgid "Authenticated" msgid "Authenticated"
msgstr "Authentifiziert" msgstr "Authentifiziert"
#: core/models.py:86 #: core/models.py:89
msgid "Public" msgid "Public"
msgstr "Öffentlich" msgstr "Öffentlich"
#: core/models.py:98 #: core/models.py:101
msgid "id" msgid "id"
msgstr "" msgstr ""
#: core/models.py:99 #: core/models.py:102
msgid "primary key for the record as UUID" msgid "primary key for the record as UUID"
msgstr "" msgstr ""
#: core/models.py:105 #: core/models.py:108
msgid "created on" msgid "created on"
msgstr "" msgstr "Erstellt"
#: core/models.py:106 #: core/models.py:109
msgid "date and time at which a record was created" msgid "date and time at which a record was created"
msgstr "" msgstr "Datum und Uhrzeit, an dem ein Datensatz erstellt wurde"
#: core/models.py:111 #: core/models.py:114
msgid "updated on" msgid "updated on"
msgstr "" msgstr "Aktualisiert"
#: core/models.py:112 #: core/models.py:115
msgid "date and time at which a record was last updated" msgid "date and time at which a record was last updated"
msgstr "Datum und Uhrzeit, an dem zuletzt aktualisiert wurde"
#: core/models.py:135
msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters."
msgstr "" msgstr ""
#: core/models.py:132 #: core/models.py:141
msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_ characters."
msgstr ""
#: core/models.py:138
msgid "sub" msgid "sub"
msgstr "" msgstr ""
#: core/models.py:140 #: core/models.py:143
msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_ characters only." msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only."
msgstr "" msgstr ""
#: core/models.py:148 #: core/models.py:152
msgid "identity email address" msgid "full name"
msgstr "" msgstr ""
#: core/models.py:153 #: core/models.py:153
msgid "admin email address" msgid "short name"
msgstr ""
#: core/models.py:155
msgid "identity email address"
msgstr "" msgstr ""
#: core/models.py:160 #: core/models.py:160
msgid "language" msgid "admin email address"
msgstr ""
#: core/models.py:161
msgid "The language in which the user wants to see the interface."
msgstr "" msgstr ""
#: core/models.py:167 #: core/models.py:167
msgid "language"
msgstr "Sprache"
#: core/models.py:168
msgid "The language in which the user wants to see the interface."
msgstr ""
#: core/models.py:174
msgid "The timezone in which the user wants to see times." msgid "The timezone in which the user wants to see times."
msgstr "" msgstr ""
#: core/models.py:170 #: core/models.py:177
msgid "device" msgid "device"
msgstr "" msgstr ""
#: core/models.py:172 #: core/models.py:179
msgid "Whether the user is a device or a real user." msgid "Whether the user is a device or a real user."
msgstr "" msgstr ""
#: core/models.py:175 #: core/models.py:182
msgid "staff status" msgid "staff status"
msgstr "" msgstr ""
#: core/models.py:177 #: core/models.py:184
msgid "Whether the user can log into this admin site." msgid "Whether the user can log into this admin site."
msgstr "" msgstr ""
#: core/models.py:180 #: core/models.py:187
msgid "active" msgid "active"
msgstr "" msgstr ""
#: core/models.py:183 #: core/models.py:190
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr "" msgstr ""
#: core/models.py:195 #: core/models.py:202
msgid "user" msgid "user"
msgstr "" msgstr "Benutzer"
#: core/models.py:196 #: core/models.py:203
msgid "users" msgid "users"
msgstr "" msgstr "Benutzer"
#: core/models.py:328 core/models.py:644 #: core/models.py:342 core/models.py:718
msgid "title" msgid "title"
msgstr "" msgstr "Titel"
#: core/models.py:343 #: core/models.py:364
msgid "Document" msgid "Document"
msgstr "" msgstr "Dokument"
#: core/models.py:344 #: core/models.py:365
msgid "Documents" msgid "Documents"
msgstr "" msgstr "Dokumente"
#: core/models.py:347 #: core/models.py:368
msgid "Untitled Document" msgid "Untitled Document"
msgstr "Unbenanntes Dokument"
#: core/models.py:593
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "" msgstr ""
#: core/models.py:537 #: core/models.py:597
#, python-format #, python-brace-format
msgid "%(username)s shared a document with you: %(document)s" msgid "{name} invited you with the role ``{role}`` on the following document:"
msgstr "%(username)s hat ein Dokument mit Ihnen geteilt: %(document)s" msgstr ""
#: core/models.py:580 #: core/models.py:600
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr ""
#: core/models.py:623
msgid "Document/user link trace" msgid "Document/user link trace"
msgstr "" msgstr ""
#: core/models.py:581 #: core/models.py:624
msgid "Document/user link traces" msgid "Document/user link traces"
msgstr "" msgstr ""
#: core/models.py:587 #: core/models.py:630
msgid "A link trace already exists for this document/user." msgid "A link trace already exists for this document/user."
msgstr "" msgstr ""
#: core/models.py:608 #: core/models.py:653
msgid "Document favorite"
msgstr ""
#: core/models.py:654
msgid "Document favorites"
msgstr ""
#: core/models.py:660
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr ""
#: core/models.py:682
msgid "Document/user relation" msgid "Document/user relation"
msgstr "" msgstr ""
#: core/models.py:609 #: core/models.py:683
msgid "Document/user relations" msgid "Document/user relations"
msgstr "" msgstr ""
#: core/models.py:615 #: core/models.py:689
msgid "This user is already in this document." msgid "This user is already in this document."
msgstr "" msgstr "Dieser Benutzer befindet sich bereits in diesem Dokument."
#: core/models.py:621 #: core/models.py:695
msgid "This team is already in this document." msgid "This team is already in this document."
msgstr "" msgstr "Dieses Team befindet sich bereits in diesem Dokument."
#: core/models.py:627 core/models.py:816 #: core/models.py:701 core/models.py:890
msgid "Either user or team must be set, not both." msgid "Either user or team must be set, not both."
msgstr "" msgstr "Benutzer oder Team müssen gesetzt werden, nicht beides."
#: core/models.py:645 #: core/models.py:719
msgid "description" msgid "description"
msgstr "" msgstr "Beschreibung"
#: core/models.py:646 #: core/models.py:720
msgid "code" msgid "code"
msgstr "" msgstr "Code"
#: core/models.py:647 #: core/models.py:721
msgid "css" msgid "css"
msgstr "" msgstr "CSS"
#: core/models.py:649 #: core/models.py:723
msgid "public" msgid "public"
msgstr "" msgstr "öffentlich"
#: core/models.py:651 #: core/models.py:725
msgid "Whether this template is public for anyone to use." msgid "Whether this template is public for anyone to use."
msgstr "" msgstr "Ob diese Vorlage für jedermann öffentlich ist."
#: core/models.py:657 #: core/models.py:731
msgid "Template" msgid "Template"
msgstr "" msgstr ""
#: core/models.py:658 #: core/models.py:732
msgid "Templates" msgid "Templates"
msgstr "" msgstr ""
#: core/models.py:797 #: core/models.py:871
msgid "Template/user relation" msgid "Template/user relation"
msgstr "" msgstr ""
#: core/models.py:798 #: core/models.py:872
msgid "Template/user relations" msgid "Template/user relations"
msgstr "" msgstr ""
#: core/models.py:804 #: core/models.py:878
msgid "This user is already in this template." msgid "This user is already in this template."
msgstr "" msgstr ""
#: core/models.py:810 #: core/models.py:884
msgid "This team is already in this template." msgid "This team is already in this template."
msgstr "" msgstr ""
#: core/models.py:833 #: core/models.py:907
msgid "email address" msgid "email address"
msgstr "" msgstr ""
#: core/models.py:850 #: core/models.py:926
msgid "Document invitation" msgid "Document invitation"
msgstr "" msgstr ""
#: core/models.py:851 #: core/models.py:927
msgid "Document invitations" msgid "Document invitations"
msgstr "" msgstr ""
#: core/models.py:868 #: core/models.py:944
msgid "This email is already associated to a registered user." msgid "This email is already associated to a registered user."
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:160 #: core/templates/mail/html/hello.html:159 core/templates/mail/text/hello.txt:3
#: core/templates/mail/html/invitation2.html:160 msgid "Company logo"
#: core/templates/mail/text/invitation.txt:3
#: core/templates/mail/text/invitation2.txt:3
msgid "La Suite Numérique"
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:190 #: core/templates/mail/html/hello.html:188 core/templates/mail/text/hello.txt:5
#: core/templates/mail/text/invitation.txt:6
#, python-format #, python-format
msgid " %(username)s shared a document with you ! " msgid "Hello %(name)s"
msgstr " %(username)s hat ein Dokument mit Ihnen geteilt! " msgstr ""
#: core/templates/mail/html/invitation.html:197 #: core/templates/mail/html/hello.html:188 core/templates/mail/text/hello.txt:5
#: core/templates/mail/text/invitation.txt:8 msgid "Hello"
msgstr ""
#: core/templates/mail/html/hello.html:189 core/templates/mail/text/hello.txt:6
msgid "Thank you very much for your visit!"
msgstr ""
#: core/templates/mail/html/hello.html:221
#, python-format #, python-format
msgid " %(username)s invited you as an %(role)s on the following document : " msgid "This mail has been sent to %(email)s by <a href=\"%(href)s\">%(name)s</a>"
msgstr " %(username)s hat Sie als %(role)s zum folgenden Dokument eingeladen: " msgstr ""
#: core/templates/mail/html/invitation.html:206 #: core/templates/mail/html/invitation.html:162
#: core/templates/mail/html/invitation2.html:211 #: core/templates/mail/text/invitation.txt:3
msgid "Logo email"
msgstr ""
#: core/templates/mail/html/invitation.html:209
#: core/templates/mail/text/invitation.txt:10 #: core/templates/mail/text/invitation.txt:10
#: core/templates/mail/text/invitation2.txt:11
msgid "Open" msgid "Open"
msgstr "Öffnen" msgstr ""
#: core/templates/mail/html/invitation.html:223 #: core/templates/mail/html/invitation.html:226
#: core/templates/mail/text/invitation.txt:14 #: core/templates/mail/text/invitation.txt:14
msgid " Docs, your new essential tool for organizing, sharing and collaborate on your documents as a team. " msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. "
msgstr " Docs, Ihr neues unverzichtbares Werkzeug zum Organisieren, Teilen und Zusammenarbeiten an Dokumenten im Team. " msgstr ""
#: core/templates/mail/html/invitation.html:230 #: core/templates/mail/html/invitation.html:233
#: core/templates/mail/html/invitation2.html:235
#: core/templates/mail/text/invitation.txt:16 #: core/templates/mail/text/invitation.txt:16
#: core/templates/mail/text/invitation2.txt:17
msgid "Brought to you by La Suite Numérique"
msgstr "Bereitgestellt von La Suite Numérique"
#: core/templates/mail/html/invitation2.html:190
#, python-format #, python-format
msgid "%(username)s shared a document with you" msgid " Brought to you by %(brandname)s "
msgstr "%(username)s hat ein Dokument mit Ihnen geteilt" msgstr ""
#: core/templates/mail/html/invitation2.html:197 #: core/templates/mail/text/hello.txt:8
#: core/templates/mail/text/invitation2.txt:8
#, python-format #, python-format
msgid "%(username)s invited you as an %(role)s on the following document :" msgid "This mail has been sent to %(email)s by %(name)s [%(href)s]"
msgstr "%(username)s hat Sie als %(role)s zum folgenden Dokument eingeladen:" msgstr ""
#: core/templates/mail/html/invitation2.html:228 #: impress/settings.py:236
#: core/templates/mail/text/invitation2.txt:15
msgid "Docs, your new essential tool for organizing, sharing and collaborate on your document as a team."
msgstr "Docs, Ihr neues unverzichtbares Werkzeug zum Organisieren, Teilen und gemeinsamen Arbeiten an Dokumenten im Team."
#: impress/settings.py:177
msgid "English" msgid "English"
msgstr "" msgstr ""
#: impress/settings.py:178 #: impress/settings.py:237
msgid "French" msgid "French"
msgstr "" msgstr ""
#: impress/settings.py:176 #: impress/settings.py:238
msgid "German" msgid "German"
msgstr "" msgstr ""

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: lasuite-people\n" "Project-Id-Version: lasuite-people\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-15 07:19+0000\n" "POT-Creation-Date: 2024-12-13 15:17+0000\n"
"PO-Revision-Date: 2024-10-15 07:23\n" "PO-Revision-Date: 2024-12-13 15:22\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: English\n" "Language-Team: English\n"
"Language: en_US\n" "Language: en_US\n"
@@ -29,15 +29,35 @@ msgstr ""
msgid "Important dates" msgid "Important dates"
msgstr "" msgstr ""
#: core/api/serializers.py:253 #: core/api/filters.py:16
msgid "Creator is me"
msgstr ""
#: core/api/filters.py:19
msgid "Favorite"
msgstr ""
#: core/api/filters.py:22
msgid "Title"
msgstr ""
#: core/api/serializers.py:307
msgid "A new document was created on your behalf!"
msgstr ""
#: core/api/serializers.py:311
msgid "You have been granted ownership of a new document:"
msgstr ""
#: core/api/serializers.py:414
msgid "Body" msgid "Body"
msgstr "" msgstr ""
#: core/api/serializers.py:256 #: core/api/serializers.py:417
msgid "Body type" msgid "Body type"
msgstr "" msgstr ""
#: core/api/serializers.py:262 #: core/api/serializers.py:423
msgid "Format" msgid "Format"
msgstr "" msgstr ""
@@ -49,6 +69,10 @@ msgstr ""
msgid "User info contained no recognizable user identification" msgid "User info contained no recognizable user identification"
msgstr "" msgstr ""
#: core/authentication/backends.py:88
msgid "User account is disabled"
msgstr ""
#: core/models.py:62 core/models.py:69 #: core/models.py:62 core/models.py:69
msgid "Reader" msgid "Reader"
msgstr "" msgstr ""
@@ -65,224 +89,246 @@ msgstr ""
msgid "Owner" msgid "Owner"
msgstr "" msgstr ""
#: core/models.py:80 #: core/models.py:83
msgid "Restricted" msgid "Restricted"
msgstr "" msgstr ""
#: core/models.py:84 #: core/models.py:87
msgid "Authenticated" msgid "Authenticated"
msgstr "" msgstr ""
#: core/models.py:86 #: core/models.py:89
msgid "Public" msgid "Public"
msgstr "" msgstr ""
#: core/models.py:98 #: core/models.py:101
msgid "id" msgid "id"
msgstr "" msgstr ""
#: core/models.py:99 #: core/models.py:102
msgid "primary key for the record as UUID" msgid "primary key for the record as UUID"
msgstr "" msgstr ""
#: core/models.py:105 #: core/models.py:108
msgid "created on" msgid "created on"
msgstr "" msgstr ""
#: core/models.py:106 #: core/models.py:109
msgid "date and time at which a record was created" msgid "date and time at which a record was created"
msgstr "" msgstr ""
#: core/models.py:111 #: core/models.py:114
msgid "updated on" msgid "updated on"
msgstr "" msgstr ""
#: core/models.py:112 #: core/models.py:115
msgid "date and time at which a record was last updated" msgid "date and time at which a record was last updated"
msgstr "" msgstr ""
#: core/models.py:132 #: core/models.py:135
msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_ characters." msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters."
msgstr "" msgstr ""
#: core/models.py:138 #: core/models.py:141
msgid "sub" msgid "sub"
msgstr "" msgstr ""
#: core/models.py:140 #: core/models.py:143
msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_ characters only." msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only."
msgstr ""
#: core/models.py:149
msgid "full name"
msgstr ""
#: core/models.py:150
msgid "short name"
msgstr "" msgstr ""
#: core/models.py:152 #: core/models.py:152
msgid "full name"
msgstr ""
#: core/models.py:153
msgid "short name"
msgstr ""
#: core/models.py:155
msgid "identity email address" msgid "identity email address"
msgstr "" msgstr ""
#: core/models.py:157 #: core/models.py:160
msgid "admin email address" msgid "admin email address"
msgstr "" msgstr ""
#: core/models.py:164 #: core/models.py:167
msgid "language" msgid "language"
msgstr "" msgstr ""
#: core/models.py:165 #: core/models.py:168
msgid "The language in which the user wants to see the interface." msgid "The language in which the user wants to see the interface."
msgstr "" msgstr ""
#: core/models.py:171 #: core/models.py:174
msgid "The timezone in which the user wants to see times." msgid "The timezone in which the user wants to see times."
msgstr "" msgstr ""
#: core/models.py:174 #: core/models.py:177
msgid "device" msgid "device"
msgstr "" msgstr ""
#: core/models.py:176 #: core/models.py:179
msgid "Whether the user is a device or a real user." msgid "Whether the user is a device or a real user."
msgstr "" msgstr ""
#: core/models.py:179 #: core/models.py:182
msgid "staff status" msgid "staff status"
msgstr "" msgstr ""
#: core/models.py:181 #: core/models.py:184
msgid "Whether the user can log into this admin site." msgid "Whether the user can log into this admin site."
msgstr "" msgstr ""
#: core/models.py:184 #: core/models.py:187
msgid "active" msgid "active"
msgstr "" msgstr ""
#: core/models.py:187 #: core/models.py:190
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr "" msgstr ""
#: core/models.py:199 #: core/models.py:202
msgid "user" msgid "user"
msgstr "" msgstr ""
#: core/models.py:200 #: core/models.py:203
msgid "users" msgid "users"
msgstr "" msgstr ""
#: core/models.py:332 core/models.py:638 #: core/models.py:342 core/models.py:718
msgid "title" msgid "title"
msgstr "" msgstr ""
#: core/models.py:347 #: core/models.py:364
msgid "Document" msgid "Document"
msgstr "" msgstr ""
#: core/models.py:348 #: core/models.py:365
msgid "Documents" msgid "Documents"
msgstr "" msgstr ""
#: core/models.py:351 #: core/models.py:368
msgid "Untitled Document" msgid "Untitled Document"
msgstr "" msgstr ""
#: core/models.py:530 #: core/models.py:593
#, python-format #, python-brace-format
msgid "%(sender_name)s shared a document with you: %(document)s" msgid "{name} shared a document with you!"
msgstr "" msgstr ""
#: core/models.py:574 #: core/models.py:597
#, python-brace-format
msgid "{name} invited you with the role ``{role}`` on the following document:"
msgstr ""
#: core/models.py:600
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr ""
#: core/models.py:623
msgid "Document/user link trace" msgid "Document/user link trace"
msgstr "" msgstr ""
#: core/models.py:575 #: core/models.py:624
msgid "Document/user link traces" msgid "Document/user link traces"
msgstr "" msgstr ""
#: core/models.py:581 #: core/models.py:630
msgid "A link trace already exists for this document/user." msgid "A link trace already exists for this document/user."
msgstr "" msgstr ""
#: core/models.py:602 #: core/models.py:653
msgid "Document favorite"
msgstr ""
#: core/models.py:654
msgid "Document favorites"
msgstr ""
#: core/models.py:660
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr ""
#: core/models.py:682
msgid "Document/user relation" msgid "Document/user relation"
msgstr "" msgstr ""
#: core/models.py:603 #: core/models.py:683
msgid "Document/user relations" msgid "Document/user relations"
msgstr "" msgstr ""
#: core/models.py:609 #: core/models.py:689
msgid "This user is already in this document." msgid "This user is already in this document."
msgstr "" msgstr ""
#: core/models.py:615 #: core/models.py:695
msgid "This team is already in this document." msgid "This team is already in this document."
msgstr "" msgstr ""
#: core/models.py:621 core/models.py:810 #: core/models.py:701 core/models.py:890
msgid "Either user or team must be set, not both." msgid "Either user or team must be set, not both."
msgstr "" msgstr ""
#: core/models.py:639 #: core/models.py:719
msgid "description" msgid "description"
msgstr "" msgstr ""
#: core/models.py:640 #: core/models.py:720
msgid "code" msgid "code"
msgstr "" msgstr ""
#: core/models.py:641 #: core/models.py:721
msgid "css" msgid "css"
msgstr "" msgstr ""
#: core/models.py:643 #: core/models.py:723
msgid "public" msgid "public"
msgstr "" msgstr ""
#: core/models.py:645 #: core/models.py:725
msgid "Whether this template is public for anyone to use." msgid "Whether this template is public for anyone to use."
msgstr "" msgstr ""
#: core/models.py:651 #: core/models.py:731
msgid "Template" msgid "Template"
msgstr "" msgstr ""
#: core/models.py:652 #: core/models.py:732
msgid "Templates" msgid "Templates"
msgstr "" msgstr ""
#: core/models.py:791 #: core/models.py:871
msgid "Template/user relation" msgid "Template/user relation"
msgstr "" msgstr ""
#: core/models.py:792 #: core/models.py:872
msgid "Template/user relations" msgid "Template/user relations"
msgstr "" msgstr ""
#: core/models.py:798 #: core/models.py:878
msgid "This user is already in this template." msgid "This user is already in this template."
msgstr "" msgstr ""
#: core/models.py:804 #: core/models.py:884
msgid "This team is already in this template." msgid "This team is already in this template."
msgstr "" msgstr ""
#: core/models.py:827 #: core/models.py:907
msgid "email address" msgid "email address"
msgstr "" msgstr ""
#: core/models.py:844 #: core/models.py:926
msgid "Document invitation" msgid "Document invitation"
msgstr "" msgstr ""
#: core/models.py:845 #: core/models.py:927
msgid "Document invitations" msgid "Document invitations"
msgstr "" msgstr ""
#: core/models.py:862 #: core/models.py:944
msgid "This email is already associated to a registered user." msgid "This email is already associated to a registered user."
msgstr "" msgstr ""
@@ -308,36 +354,25 @@ msgstr ""
msgid "This mail has been sent to %(email)s by <a href=\"%(href)s\">%(name)s</a>" msgid "This mail has been sent to %(email)s by <a href=\"%(href)s\">%(name)s</a>"
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:159 #: core/templates/mail/html/invitation.html:162
#: core/templates/mail/text/invitation.txt:3 #: core/templates/mail/text/invitation.txt:3
msgid "La Suite Numérique" msgid "Logo email"
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:189 #: core/templates/mail/html/invitation.html:209
#: core/templates/mail/text/invitation.txt:6
#, python-format
msgid " %(sender_name)s shared a document with you ! "
msgstr ""
#: core/templates/mail/html/invitation.html:196
#: core/templates/mail/text/invitation.txt:8
#, python-format
msgid " %(sender_name_email)s invited you with the role \"%(role)s\" on the following document : "
msgstr ""
#: core/templates/mail/html/invitation.html:205
#: core/templates/mail/text/invitation.txt:10 #: core/templates/mail/text/invitation.txt:10
msgid "Open" msgid "Open"
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:222 #: core/templates/mail/html/invitation.html:226
#: core/templates/mail/text/invitation.txt:14 #: core/templates/mail/text/invitation.txt:14
msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. "
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:229 #: core/templates/mail/html/invitation.html:233
#: core/templates/mail/text/invitation.txt:16 #: core/templates/mail/text/invitation.txt:16
msgid "Brought to you by La Suite Numérique" #, python-format
msgid " Brought to you by %(brandname)s "
msgstr "" msgstr ""
#: core/templates/mail/text/hello.txt:8 #: core/templates/mail/text/hello.txt:8
@@ -345,14 +380,15 @@ msgstr ""
msgid "This mail has been sent to %(email)s by %(name)s [%(href)s]" msgid "This mail has been sent to %(email)s by %(name)s [%(href)s]"
msgstr "" msgstr ""
#: impress/settings.py:177 #: impress/settings.py:236
msgid "English" msgid "English"
msgstr "" msgstr ""
#: impress/settings.py:178 #: impress/settings.py:237
msgid "French" msgid "French"
msgstr "" msgstr ""
#: impress/settings.py:176 #: impress/settings.py:238
msgid "German" msgid "German"
msgstr "" msgstr ""

View File

@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: lasuite-people\n" "Project-Id-Version: lasuite-people\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-01 08:22+0000\n" "POT-Creation-Date: 2024-12-13 15:17+0000\n"
"PO-Revision-Date: 2024-10-15 07:23\n" "PO-Revision-Date: 2024-12-13 16:47\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: French\n" "Language-Team: French\n"
"Language: fr_FR\n" "Language: fr_FR\n"
@@ -41,23 +41,23 @@ msgstr ""
msgid "Title" msgid "Title"
msgstr "" msgstr ""
#: core/api/serializers.py:284 #: core/api/serializers.py:307
msgid "A new document was created on your behalf!" msgid "A new document was created on your behalf!"
msgstr "Un nouveau document a été créé pour vous !" msgstr "Un nouveau document a été créé pour vous !"
#: core/api/serializers.py:287 #: core/api/serializers.py:311
msgid "You have been granted ownership of a new document:" msgid "You have been granted ownership of a new document:"
msgstr "Vous avez été déclaré propriétaire d'un nouveau document :" msgstr "Vous avez été déclaré propriétaire d'un nouveau document :"
#: core/api/serializers.py:390 #: core/api/serializers.py:414
msgid "Body" msgid "Body"
msgstr "" msgstr ""
#: core/api/serializers.py:393 #: core/api/serializers.py:417
msgid "Body type" msgid "Body type"
msgstr "" msgstr ""
#: core/api/serializers.py:399 #: core/api/serializers.py:423
msgid "Format" msgid "Format"
msgstr "" msgstr ""
@@ -126,9 +126,7 @@ msgid "date and time at which a record was last updated"
msgstr "" msgstr ""
#: core/models.py:135 #: core/models.py:135
msgid "" msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters."
"Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/"
"_/: characters."
msgstr "" msgstr ""
#: core/models.py:141 #: core/models.py:141
@@ -136,9 +134,7 @@ msgid "sub"
msgstr "" msgstr ""
#: core/models.py:143 #: core/models.py:143
msgid "" msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only."
"Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: "
"characters only."
msgstr "" msgstr ""
#: core/models.py:152 #: core/models.py:152
@@ -190,9 +186,7 @@ msgid "active"
msgstr "" msgstr ""
#: core/models.py:190 #: core/models.py:190
msgid "" msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
"Whether this user should be treated as active. Unselect this instead of "
"deleting accounts."
msgstr "" msgstr ""
#: core/models.py:202 #: core/models.py:202
@@ -203,166 +197,188 @@ msgstr ""
msgid "users" msgid "users"
msgstr "" msgstr ""
#: core/models.py:340 core/models.py:701 #: core/models.py:342 core/models.py:718
msgid "title" msgid "title"
msgstr "" msgstr ""
#: core/models.py:358 #: core/models.py:364
msgid "Document" msgid "Document"
msgstr "" msgstr ""
#: core/models.py:359 #: core/models.py:365
msgid "Documents" msgid "Documents"
msgstr "" msgstr ""
#: core/models.py:362 #: core/models.py:368
msgid "Untitled Document" msgid "Untitled Document"
msgstr "" msgstr ""
#: core/models.py:578 #: core/models.py:593
#, python-brace-format #, python-brace-format
msgid "{name} shared a document with you!" msgid "{name} shared a document with you!"
msgstr "{name} a partagé un document avec vous !" msgstr "{name} a partagé un document avec vous!"
#: core/models.py:580 #: core/models.py:597
#, python-brace-format #, python-brace-format
msgid "{name} invited you with the role ``{role}`` on the following document:" msgid "{name} invited you with the role ``{role}`` on the following document:"
msgstr "{name} vous a invité avec le rôle ``{role}`` sur le document suivant :" msgstr "{name} vous a invité avec le rôle ``{role}`` sur le document suivant :"
#: core/models.py:583 #: core/models.py:600
#, python-brace-format #, python-brace-format
msgid "{name} shared a document with you: {title}" msgid "{name} shared a document with you: {title}"
msgstr "{name} a partagé un document avec vous: {title}" msgstr "{name} a partagé un document avec vous: {title}"
#: core/models.py:606 #: core/models.py:623
msgid "Document/user link trace" msgid "Document/user link trace"
msgstr "" msgstr ""
#: core/models.py:607 #: core/models.py:624
msgid "Document/user link traces" msgid "Document/user link traces"
msgstr "" msgstr ""
#: core/models.py:613 #: core/models.py:630
msgid "A link trace already exists for this document/user." msgid "A link trace already exists for this document/user."
msgstr "" msgstr ""
#: core/models.py:636 #: core/models.py:653
msgid "Document favorite" msgid "Document favorite"
msgstr "" msgstr ""
#: core/models.py:637 #: core/models.py:654
msgid "Document favorites" msgid "Document favorites"
msgstr "" msgstr ""
#: core/models.py:643 #: core/models.py:660
msgid "" msgid "This document is already targeted by a favorite relation instance for the same user."
"This document is already targeted by a favorite relation instance for the "
"same user."
msgstr "" msgstr ""
#: core/models.py:665 #: core/models.py:682
msgid "Document/user relation" msgid "Document/user relation"
msgstr "" msgstr ""
#: core/models.py:666 #: core/models.py:683
msgid "Document/user relations" msgid "Document/user relations"
msgstr "" msgstr ""
#: core/models.py:672 #: core/models.py:689
msgid "This user is already in this document." msgid "This user is already in this document."
msgstr "" msgstr ""
#: core/models.py:678 #: core/models.py:695
msgid "This team is already in this document." msgid "This team is already in this document."
msgstr "" msgstr ""
#: core/models.py:684 core/models.py:873 #: core/models.py:701 core/models.py:890
msgid "Either user or team must be set, not both." msgid "Either user or team must be set, not both."
msgstr "" msgstr ""
#: core/models.py:702 #: core/models.py:719
msgid "description" msgid "description"
msgstr "" msgstr ""
#: core/models.py:703 #: core/models.py:720
msgid "code" msgid "code"
msgstr "" msgstr ""
#: core/models.py:704 #: core/models.py:721
msgid "css" msgid "css"
msgstr "" msgstr ""
#: core/models.py:706 #: core/models.py:723
msgid "public" msgid "public"
msgstr "" msgstr ""
#: core/models.py:708 #: core/models.py:725
msgid "Whether this template is public for anyone to use." msgid "Whether this template is public for anyone to use."
msgstr "" msgstr ""
#: core/models.py:714 #: core/models.py:731
msgid "Template" msgid "Template"
msgstr "" msgstr ""
#: core/models.py:715 #: core/models.py:732
msgid "Templates" msgid "Templates"
msgstr "" msgstr ""
#: core/models.py:854 #: core/models.py:871
msgid "Template/user relation" msgid "Template/user relation"
msgstr "" msgstr ""
#: core/models.py:855 #: core/models.py:872
msgid "Template/user relations" msgid "Template/user relations"
msgstr "" msgstr ""
#: core/models.py:861 #: core/models.py:878
msgid "This user is already in this template." msgid "This user is already in this template."
msgstr "" msgstr ""
#: core/models.py:867 #: core/models.py:884
msgid "This team is already in this template." msgid "This team is already in this template."
msgstr "" msgstr ""
#: core/models.py:890 #: core/models.py:907
msgid "email address" msgid "email address"
msgstr "" msgstr ""
#: core/models.py:908 #: core/models.py:926
msgid "Document invitation" msgid "Document invitation"
msgstr "" msgstr ""
#: core/models.py:909 #: core/models.py:927
msgid "Document invitations" msgid "Document invitations"
msgstr "" msgstr ""
#: core/models.py:926 #: core/models.py:944
msgid "This email is already associated to a registered user." msgid "This email is already associated to a registered user."
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:159 #: core/templates/mail/html/hello.html:159 core/templates/mail/text/hello.txt:3
#: core/templates/mail/text/invitation.txt:3 msgid "Company logo"
msgid "La Suite Numérique"
msgstr "" msgstr ""
#: core/templates/mail/html/invitation.html:207 #: core/templates/mail/html/hello.html:188 core/templates/mail/text/hello.txt:5
#, python-format
msgid "Hello %(name)s"
msgstr ""
#: core/templates/mail/html/hello.html:188 core/templates/mail/text/hello.txt:5
msgid "Hello"
msgstr ""
#: core/templates/mail/html/hello.html:189 core/templates/mail/text/hello.txt:6
msgid "Thank you very much for your visit!"
msgstr ""
#: core/templates/mail/html/hello.html:221
#, python-format
msgid "This mail has been sent to %(email)s by <a href=\"%(href)s\">%(name)s</a>"
msgstr ""
#: core/templates/mail/html/invitation.html:162
#: core/templates/mail/text/invitation.txt:3
msgid "Logo email"
msgstr ""
#: core/templates/mail/html/invitation.html:209
#: core/templates/mail/text/invitation.txt:10 #: core/templates/mail/text/invitation.txt:10
msgid "Open" msgid "Open"
msgstr "Ouvrir" msgstr "Ouvrir"
#: core/templates/mail/html/invitation.html:224 #: core/templates/mail/html/invitation.html:226
#: core/templates/mail/text/invitation.txt:14 #: core/templates/mail/text/invitation.txt:14
msgid "" msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. "
" Docs, your new essential tool for organizing, sharing and collaborating on " msgstr " Docs, votre nouvel outil incontournable pour organiser, partager et collaborer sur vos documents en équipe. "
"your documents as a team. "
msgstr ""
" Docs, votre nouvel outil incontournable pour organiser, partager et "
"collaborer sur vos documents en équipe. "
#: core/templates/mail/html/invitation.html:231 #: core/templates/mail/html/invitation.html:233
#: core/templates/mail/text/invitation.txt:16 #: core/templates/mail/text/invitation.txt:16
msgid "Brought to you by La Suite Numérique" #, python-format
msgstr "Proposé par La Suite Numérique" msgid " Brought to you by %(brandname)s "
msgstr " Proposé par %(brandname)s "
#: core/templates/mail/text/hello.txt:8
#, python-format
msgid "This mail has been sent to %(email)s by %(name)s [%(href)s]"
msgstr ""
#: impress/settings.py:236 #: impress/settings.py:236
msgid "English" msgid "English"
@@ -376,6 +392,3 @@ msgstr ""
msgid "German" msgid "German"
msgstr "" msgstr ""
#, python-format
#~ msgid " %(sender_name)s shared a document with you! "
#~ msgstr "%(sender_name)s a partagé un document avec vous !"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -3,19 +3,14 @@
<mj-body mj-class="bg--blue-100"> <mj-body mj-class="bg--blue-100">
<mj-wrapper css-class="wrapper" padding="0 25px 0px 25px"> <mj-wrapper css-class="wrapper" padding="0 25px 0px 25px">
<mj-section <mj-section css-class="wrapper-logo">
background-url="{{domain}}/assets/mail-header-background.png"
background-size="cover"
background-repeat="no-repeat"
background-position="0 -30px"
>
<mj-column> <mj-column>
<mj-image <mj-image
align="center" align="center"
src="{{domain}}/assets/logo-suite-numerique.png" src="{{logo_img}}"
width="250px" width="320px"
align="left" align="left"
alt="{%trans 'La Suite Numérique' %}" alt="{%trans 'Logo email' %}"
/> />
</mj-column> </mj-column>
</mj-section> </mj-section>
@@ -51,7 +46,11 @@
</mj-text> </mj-text>
<!-- Signature --> <!-- Signature -->
<mj-text> <mj-text>
<p>{% trans "Brought to you by La Suite Numérique" %}</p> <p>
{% blocktrans %}
Brought to you by {{brandname}}
{% endblocktrans %}
</p>
</mj-text> </mj-text>
</mj-column> </mj-column>
</mj-section> </mj-section>

View File

@@ -11,10 +11,10 @@
<mj-attributes> <mj-attributes>
<mj-font name="Roboto" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700;900&display=swap" /> <mj-font name="Roboto" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700;900&display=swap" />
<mj-all <mj-all
font-family="Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif" font-family="Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif"
font-size="16px" font-size="16px"
line-height="1.5em" line-height="1.5em"
color="#3A3A3A" color="#3A3A3A"
/> />
</mj-attributes> </mj-attributes>
<mj-style> <mj-style>
@@ -41,5 +41,9 @@
border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px;
box-shadow: 0 0 6px rgba(2 117 180 / 0.3); box-shadow: 0 0 6px rgba(2 117 180 / 0.3);
} }
.wrapper-logo td{
padding: 0!important;
}
</mj-style> </mj-style>
</mj-head> </mj-head>