From ecb2b35ec845183542a43910c2f81eac90540ce2 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Fri, 13 Dec 2024 17:48:08 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(email)=20white=20brand=20email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- CHANGELOG.md | 1 + env.d/development/common.dist | 2 + src/backend/core/models.py | 4 +- .../test_api_document_invitations.py | 6 +- src/backend/impress/settings.py | 2 + .../locale/de_DE/LC_MESSAGES/django.mo | Bin 2229 -> 2280 bytes .../locale/de_DE/LC_MESSAGES/django.po | 327 ++++++++++-------- .../locale/en_US/LC_MESSAGES/django.mo | Bin 484 -> 484 bytes .../locale/en_US/LC_MESSAGES/django.po | 216 +++++++----- .../locale/fr_FR/LC_MESSAGES/django.mo | Bin 1922 -> 1913 bytes .../locale/fr_FR/LC_MESSAGES/django.po | 153 ++++---- .../public/assets/logo-suite-numerique.png | Bin 13584 -> 11214 bytes src/mail/mjml/invitation.mjml | 19 +- src/mail/mjml/partial/header.mjml | 12 +- 14 files changed, 425 insertions(+), 317 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3d0f921..dbde129b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to ## Added - ✨(backend) add server-to-server API endpoint to create documents #467 +- ✨(email) white brand email #412 ## [1.9.0] - 2024-12-11 diff --git a/env.d/development/common.dist b/env.d/development/common.dist index 29570b4a..93a9d1c4 100644 --- a/env.d/development/common.dist +++ b/env.d/development/common.dist @@ -16,7 +16,9 @@ PYTHONPATH=/app # impress settings # Mail +DJANGO_EMAIL_BRAND_NAME="La Suite Numérique" DJANGO_EMAIL_HOST="mailcatcher" +DJANGO_EMAIL_LOGO_IMG="http://localhost:3000/assets/logo-suite-numerique.png" DJANGO_EMAIL_PORT=1025 # Backend url diff --git a/src/backend/core/models.py b/src/backend/core/models.py index 16f93808..3bc9f2e0 100644 --- a/src/backend/core/models.py +++ b/src/backend/core/models.py @@ -552,9 +552,11 @@ class Document(BaseModel): language = language or get_language() context.update( { + "brandname": settings.EMAIL_BRAND_NAME, + "document": self, "domain": domain, "link": f"{domain}/docs/{self.id}/", - "document": self, + "logo_img": settings.EMAIL_LOGO_IMG, } ) diff --git a/src/backend/core/tests/documents/test_api_document_invitations.py b/src/backend/core/tests/documents/test_api_document_invitations.py index d6776720..15ea274e 100644 --- a/src/backend/core/tests/documents/test_api_document_invitations.py +++ b/src/backend/core/tests/documents/test_api_document_invitations.py @@ -7,6 +7,7 @@ from datetime import timedelta from unittest import mock from django.core import mail +from django.test import override_settings from django.utils import timezone import pytest @@ -339,6 +340,7 @@ def test_api_document_invitations_create_authenticated_outsider(): assert response.status_code == 403 +@override_settings(EMAIL_BRAND_NAME="My brand name", EMAIL_LOGO_IMG="my-img.jpg") @pytest.mark.parametrize( "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"on the following document: {document.title}" ) in email_content + assert "My brand name" in email_content + assert "my-img.jpg" in email_content else: 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"] 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(): diff --git a/src/backend/impress/settings.py b/src/backend/impress/settings.py index c2cce347..944c045a 100755 --- a/src/backend/impress/settings.py +++ b/src/backend/impress/settings.py @@ -352,9 +352,11 @@ class Base(Configuration): # Mail EMAIL_BACKEND = values.Value("django.core.mail.backends.smtp.EmailBackend") + EMAIL_BRAND_NAME = values.Value(None) EMAIL_HOST = values.Value(None) EMAIL_HOST_USER = values.Value(None) EMAIL_HOST_PASSWORD = values.Value(None) + EMAIL_LOGO_IMG = values.Value(None) EMAIL_PORT = values.PositiveIntegerValue(None) EMAIL_USE_TLS = values.BooleanValue(False) EMAIL_USE_SSL = values.BooleanValue(False) diff --git a/src/backend/locale/de_DE/LC_MESSAGES/django.mo b/src/backend/locale/de_DE/LC_MESSAGES/django.mo index a52c89e2371621ccea7679b361095e1dd0ffaf92..11804a613696967fe56e70d78d59cf860cb8ef68 100644 GIT binary patch literal 2280 zcma)+zi%8x6vqchfE+&pA%vfS7b*M*crW(ZG0qtm{&7Z@Z24rL6OfQ#Zg=i(;@#QR z%xsJ;D*gdzfC>tfCPhSp0!V4XRS^YLDJYT(32KV8eBa*sY!MM$- z{s26T^~c~rFasY0FM@pjXCUi+QSxiBg7vrH>)_>*zk^R>eFv<8hhPlb^DYLKp9S$r zEQ4=@O>h+a6y*D^fNby2Am8^3$oAX-S^qZ>Kk-Moe;d4vnEVN{ou5OA{rCoC{VN#w zz8^q7_a~6!avkLJeg&t%n;?GT@FPMz2_6Gk{knQ@gT(`k9SR3#x zcnLfT-U8Xbe?YeTBo5_sPhnuYYTzU|2~L0s_&E3-2o>=?$oKsS@_qgC`wb93akJ!Y z5Md}9-@|W(qAlsDRJkwNSR%T4#>Yk?QZBSQ z^N5>>rRnCftHi)QQTQWDNw$WAPz(sMO)sd>2TM_K4$+2sop5ljy$UjwX0fWQDb7={ z;<`Et=JKu!T4|js&DCH{UDT`+EWn03)kbR*!B{OA8>g`|^;)g63=4ynmBt}rsfE&V zX4}k7pOO@CfV3^(X!`vY^d0g*|EU zzGgOBi^0^M9ADZ|HfR{6LYr=#rrO$9nsIJr9PkTtbuwA8bThSS8cb*2G<0Hy#!gLF z-Vf$&x&_^!jL}_zxl1BgTBy_H_&aCEC-$lD`pn+#+g{W$TxrX2Q<*5xNoJLE)hzY@ zktq(Hs{ButcJz)`7R6+GGWG)TL1}L8*63iO#GI10t&mfLsmc8g7b&WUI1QBauQ{g- zbrk}+gLkQHqzoz+&y(v{<8ckE_B?Out|HDkALle5hY6lBf5}Z3`&_#Hs|E$z+ZFA9 z)#)IIyd{=#RiPaAZ2ywk#2<>rmKzwG^t$EpJ@OGBsb zUvtB>m5~O|$_>vGtL?!RbS||qDu_D$YnCo3gbMG}Q2*-C1=PQ++sWf1D{|B4GDf{2-K7$O fkN7FwM$E-}W+j3x_Sq;}NO>$~_h}CEzc=|8%RWxC literal 2229 zcmcJQOK%)S5XT!xcr5P_i333@4uKdvj=fI68OsPi)@X^1EoUJSiiCP+YG)hIbZ@$Q zZ0rkXB#u0;91w&rz$rK15nMR(2_kOX`PXKR9fw5W)!N?Qc2D)ctEziye?4*R3x#$P z{S^8Q^cT^uK7cQ@pTHLQGx!?#{DVs6;3BvPUI$+RZ-VE+lMgBNB>2vVSHRO4_dpGP z20je_20jh`4ju!Kod z4-tJ}vTb62DEbm?ms}RcW#q~7HgO10F}kGaT!{@lIbUdNcCpJiiI{AsZB7|B*Inmz zWbtPxvF`@F#fKv6YJ${%5Y_D(caQ0Q?Na1&-`TOC=JU!}6C#3fUd`7?F0zmzv|KHC zR~P+=gbb6`-Jumtmueghy<1m%-+ObdX7&H%@lYC7D>vd?yBatjHI6!mdqJ%Y*s8T{ z%U-RsuS^KW*&x4zvp7d%drqy_-O^-ggLMwO4MwCUli=39`-rocwDaVBtiaNgN*yG+ zWWa7va$|#K!(=rSCQlaXA|xG`Qe%BB+2AcBOOhpcl2UWBc`li}kTlQJ)MVP6YOLrG zlaALml#*90TG6(sb-_soHzTFD;jp%U&Zd;}hfA%-YJ0VH;Lg;2rsc?}seG9hzP?B_iqS zY?E!Cm}=nh>P-w>JYq8xooO6-srx$8CBvl4fQvjT3cGbB6`_D2TfEqtw<-c7d@gbD zINHCE!Q%tl%0z1SEtVG?*_831M6~--A!-g(+b#CHChNy8N=u;2>^FD0E=U|$8&->8 z*s~p{4m2QEqg;GY2VJ2=Y2RhsE-UqH-$#s01>-xb#Xk)6_A($M_YU*#+TU0C=%Hw` zk7@zAFtNZ($7LC53&ry873ANhx!?++BGt(0{Jm2R$3}*o`?A-= zJy0!7+PHV4Lfw!+hGsQxlpU6sy&o(J3;v4cZK1oElyz7jlWK+WX9fjWhpg}SzOkE8 F{Q+JRiy{C3 diff --git a/src/backend/locale/de_DE/LC_MESSAGES/django.po b/src/backend/locale/de_DE/LC_MESSAGES/django.po index 5105e16d..485f63a1 100644 --- a/src/backend/locale/de_DE/LC_MESSAGES/django.po +++ b/src/backend/locale/de_DE/LC_MESSAGES/django.po @@ -2,46 +2,66 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-people\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-25 10:15+0000\n" -"PO-Revision-Date: 2024-09-25 10:21\n" +"POT-Creation-Date: 2024-12-13 15:17+0000\n" +"PO-Revision-Date: 2024-12-13 15:22\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\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-ID: 637934\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: backend-impress.pot\n" "X-Crowdin-File-ID: 8\n" -#: core/admin.py:32 +#: core/admin.py:33 msgid "Personal info" -msgstr "Persönliche Angaben" +msgstr "Persönliche Daten" -#: core/admin.py:34 +#: core/admin.py:46 msgid "Permissions" msgstr "Berechtigungen" -#: core/admin.py:46 +#: core/admin.py:58 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" -msgstr "" +msgstr "Inhalt" -#: core/api/serializers.py:256 +#: core/api/serializers.py:417 msgid "Body type" -msgstr "" +msgstr "Typ" -#: core/api/serializers.py:262 +#: core/api/serializers.py:423 msgid "Format" -msgstr "" +msgstr "Format" -#: core/authentication/backends.py:56 +#: core/authentication/backends.py:57 msgid "Invalid response format or token verification failed" msgstr "" @@ -49,17 +69,17 @@ msgstr "" msgid "User info contained no recognizable user identification" msgstr "" -#: core/authentication/backends.py:101 -msgid "Claims contained no recognizable user identification" +#: core/authentication/backends.py:88 +msgid "User account is disabled" msgstr "" #: core/models.py:62 core/models.py:69 msgid "Reader" -msgstr "Leser" +msgstr "Lesen" #: core/models.py:63 core/models.py:70 msgid "Editor" -msgstr "Bearbeiter" +msgstr "Bearbeiten" #: core/models.py:71 msgid "Administrator" @@ -67,283 +87,308 @@ msgstr "Administrator" #: core/models.py:72 msgid "Owner" -msgstr "Eigentümer" +msgstr "Besitzer" -#: core/models.py:80 +#: core/models.py:83 msgid "Restricted" -msgstr "Eingeschränkt" +msgstr "Beschränkt" -#: core/models.py:84 +#: core/models.py:87 msgid "Authenticated" msgstr "Authentifiziert" -#: core/models.py:86 +#: core/models.py:89 msgid "Public" msgstr "Öffentlich" -#: core/models.py:98 +#: core/models.py:101 msgid "id" msgstr "" -#: core/models.py:99 +#: core/models.py:102 msgid "primary key for the record as UUID" msgstr "" -#: core/models.py:105 +#: core/models.py:108 msgid "created on" -msgstr "" +msgstr "Erstellt" -#: core/models.py:106 +#: core/models.py:109 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" -msgstr "" +msgstr "Aktualisiert" -#: core/models.py:112 +#: core/models.py:115 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 "" -#: core/models.py:132 -msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_ characters." -msgstr "" - -#: core/models.py:138 +#: core/models.py:141 msgid "sub" msgstr "" -#: core/models.py:140 -msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_ characters only." +#: core/models.py:143 +msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "" -#: core/models.py:148 -msgid "identity email address" +#: core/models.py:152 +msgid "full name" msgstr "" #: core/models.py:153 -msgid "admin email address" +msgid "short name" +msgstr "" + +#: core/models.py:155 +msgid "identity email address" msgstr "" #: core/models.py:160 -msgid "language" -msgstr "" - -#: core/models.py:161 -msgid "The language in which the user wants to see the interface." +msgid "admin email address" msgstr "" #: 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." msgstr "" -#: core/models.py:170 +#: core/models.py:177 msgid "device" msgstr "" -#: core/models.py:172 +#: core/models.py:179 msgid "Whether the user is a device or a real user." msgstr "" -#: core/models.py:175 +#: core/models.py:182 msgid "staff status" msgstr "" -#: core/models.py:177 +#: core/models.py:184 msgid "Whether the user can log into this admin site." msgstr "" -#: core/models.py:180 +#: core/models.py:187 msgid "active" msgstr "" -#: core/models.py:183 +#: core/models.py:190 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "" -#: core/models.py:195 +#: core/models.py:202 msgid "user" -msgstr "" +msgstr "Benutzer" -#: core/models.py:196 +#: core/models.py:203 msgid "users" -msgstr "" +msgstr "Benutzer" -#: core/models.py:328 core/models.py:644 +#: core/models.py:342 core/models.py:718 msgid "title" -msgstr "" +msgstr "Titel" -#: core/models.py:343 +#: core/models.py:364 msgid "Document" -msgstr "" +msgstr "Dokument" -#: core/models.py:344 +#: core/models.py:365 msgid "Documents" -msgstr "" +msgstr "Dokumente" -#: core/models.py:347 +#: core/models.py:368 msgid "Untitled Document" +msgstr "Unbenanntes Dokument" + +#: core/models.py:593 +#, python-brace-format +msgid "{name} shared a document with you!" msgstr "" -#: core/models.py:537 -#, python-format -msgid "%(username)s shared a document with you: %(document)s" -msgstr "%(username)s hat ein Dokument mit Ihnen geteilt: %(document)s" +#: core/models.py:597 +#, python-brace-format +msgid "{name} invited you with the role ``{role}`` on the following document:" +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" msgstr "" -#: core/models.py:581 +#: core/models.py:624 msgid "Document/user link traces" msgstr "" -#: core/models.py:587 +#: core/models.py:630 msgid "A link trace already exists for this document/user." 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" msgstr "" -#: core/models.py:609 +#: core/models.py:683 msgid "Document/user relations" msgstr "" -#: core/models.py:615 +#: core/models.py:689 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." -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." -msgstr "" +msgstr "Benutzer oder Team müssen gesetzt werden, nicht beides." -#: core/models.py:645 +#: core/models.py:719 msgid "description" -msgstr "" +msgstr "Beschreibung" -#: core/models.py:646 +#: core/models.py:720 msgid "code" -msgstr "" +msgstr "Code" -#: core/models.py:647 +#: core/models.py:721 msgid "css" -msgstr "" +msgstr "CSS" -#: core/models.py:649 +#: core/models.py:723 msgid "public" -msgstr "" +msgstr "öffentlich" -#: core/models.py:651 +#: core/models.py:725 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" msgstr "" -#: core/models.py:658 +#: core/models.py:732 msgid "Templates" msgstr "" -#: core/models.py:797 +#: core/models.py:871 msgid "Template/user relation" msgstr "" -#: core/models.py:798 +#: core/models.py:872 msgid "Template/user relations" msgstr "" -#: core/models.py:804 +#: core/models.py:878 msgid "This user is already in this template." msgstr "" -#: core/models.py:810 +#: core/models.py:884 msgid "This team is already in this template." msgstr "" -#: core/models.py:833 +#: core/models.py:907 msgid "email address" msgstr "" -#: core/models.py:850 +#: core/models.py:926 msgid "Document invitation" msgstr "" -#: core/models.py:851 +#: core/models.py:927 msgid "Document invitations" msgstr "" -#: core/models.py:868 +#: core/models.py:944 msgid "This email is already associated to a registered user." msgstr "" -#: core/templates/mail/html/invitation.html:160 -#: core/templates/mail/html/invitation2.html:160 -#: core/templates/mail/text/invitation.txt:3 -#: core/templates/mail/text/invitation2.txt:3 -msgid "La Suite Numérique" +#: core/templates/mail/html/hello.html:159 core/templates/mail/text/hello.txt:3 +msgid "Company logo" msgstr "" -#: core/templates/mail/html/invitation.html:190 -#: core/templates/mail/text/invitation.txt:6 +#: core/templates/mail/html/hello.html:188 core/templates/mail/text/hello.txt:5 #, python-format -msgid " %(username)s shared a document with you ! " -msgstr " %(username)s hat ein Dokument mit Ihnen geteilt! " +msgid "Hello %(name)s" +msgstr "" -#: core/templates/mail/html/invitation.html:197 -#: core/templates/mail/text/invitation.txt:8 +#: 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 " %(username)s invited you as an %(role)s on the following document : " -msgstr " %(username)s hat Sie als %(role)s zum folgenden Dokument eingeladen: " +msgid "This mail has been sent to %(email)s by %(name)s" +msgstr "" -#: core/templates/mail/html/invitation.html:206 -#: core/templates/mail/html/invitation2.html:211 +#: 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/invitation2.txt:11 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 -msgid " Docs, your new essential tool for organizing, sharing and collaborate on your documents as a team. " -msgstr " Docs, Ihr neues unverzichtbares Werkzeug zum Organisieren, Teilen und Zusammenarbeiten an Dokumenten im Team. " +msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " +msgstr "" -#: core/templates/mail/html/invitation.html:230 -#: core/templates/mail/html/invitation2.html:235 +#: core/templates/mail/html/invitation.html:233 #: 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 -msgid "%(username)s shared a document with you" -msgstr "%(username)s hat ein Dokument mit Ihnen geteilt" +msgid " Brought to you by %(brandname)s " +msgstr "" -#: core/templates/mail/html/invitation2.html:197 -#: core/templates/mail/text/invitation2.txt:8 +#: core/templates/mail/text/hello.txt:8 #, python-format -msgid "%(username)s invited you as an %(role)s on the following document :" -msgstr "%(username)s hat Sie als %(role)s zum folgenden Dokument eingeladen:" +msgid "This mail has been sent to %(email)s by %(name)s [%(href)s]" +msgstr "" -#: core/templates/mail/html/invitation2.html:228 -#: 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 +#: impress/settings.py:236 msgid "English" msgstr "" -#: impress/settings.py:178 +#: impress/settings.py:237 msgid "French" msgstr "" -#: impress/settings.py:176 +#: impress/settings.py:238 msgid "German" msgstr "" + diff --git a/src/backend/locale/en_US/LC_MESSAGES/django.mo b/src/backend/locale/en_US/LC_MESSAGES/django.mo index 51b7498c227707327c0a2773370721305f1ee122..3c151c10598b8006b68f0a5d22e66656e758dac9 100644 GIT binary patch delta 21 ccmaFD{DgTzH%(name)s" msgstr "" -#: core/templates/mail/html/invitation.html:159 +#: core/templates/mail/html/invitation.html:162 #: core/templates/mail/text/invitation.txt:3 -msgid "La Suite Numérique" +msgid "Logo email" msgstr "" -#: core/templates/mail/html/invitation.html:189 -#: 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/html/invitation.html:209 #: core/templates/mail/text/invitation.txt:10 msgid "Open" msgstr "" -#: core/templates/mail/html/invitation.html:222 +#: core/templates/mail/html/invitation.html:226 #: core/templates/mail/text/invitation.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "" -#: core/templates/mail/html/invitation.html:229 +#: core/templates/mail/html/invitation.html:233 #: 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 "" #: 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]" msgstr "" -#: impress/settings.py:177 +#: impress/settings.py:236 msgid "English" msgstr "" -#: impress/settings.py:178 +#: impress/settings.py:237 msgid "French" msgstr "" -#: impress/settings.py:176 +#: impress/settings.py:238 msgid "German" msgstr "" + diff --git a/src/backend/locale/fr_FR/LC_MESSAGES/django.mo b/src/backend/locale/fr_FR/LC_MESSAGES/django.mo index 1987dc160db829d2d856faaf4d3e6773160b2e9c..88b38f2e3f973f6d3f4f6ecda3a794a08ab1688c 100644 GIT binary patch delta 455 zcmZ9|ze|Ea7{Kwn)Yr695~9MuGm1<|QbVC7Xb5d6x1b?X`bChhyz1Z}LN+!OFGXvc z4b||D4HeC8(b6dNKeY8dbLu$m^W5>=-E(&u{0Uslw4y?YS1H5+b}^3Y144{oy>A;0 z=9d`68+2m_J$R2p=%C*Bj5`0l?+5yse_;y0aSbP3q9vvYc3poLx3NPJ4>-m87N?i7 zh6(Iq07INUj8PoK1dd`B=_1dd3n`#3YzISljC9dt@Zy;KL=k>}FYSl99hetJ4GgZT^t5QSF#!6PP zyjL!s?9W$~{URTos{vE`QwzzoN@kXqvQEIgA;SgBteDleJ5?!K|2J)Wo}7#^A?;0X F`WI5#KcD~r delta 471 zcmZwDze|Ea9LMpy$KOw-6huT+S0q|sm{CEC&=3V7iA&IAq~%bLJ^2g{Aq3IVAUw52 z(3TKHIYeW)wY4=BH1;33^*(d#IPP_KeDChVwZo^8`c$nbgm{%g%wXIQq7QRj^B84q zp&zd>g4gK9d-UNW_TV$>^DWf%?_EF8Wc`IH{J~Wm^@y67WU}k|3viBign7b4_P4ox z7T++8ZS2J$w<{dPATDA*rjahP3_8db>R?42KpW}ej3Iy*{+JLUCYNla@dnrM6Q?mo zRT8uAx*XT9b*e#-u+x0*i5v;(-_Q>l?yVdO>Zm%7`z;@$E4JnA?N?OAQdP@QJ5{xj zS2?FtDX5Hd&}!JFBd5@;8)a!G6LSkHxwM>`Z<^kWbRFM|+O(~*b=+#Ga^C*;WWqlz O4K?A81>&w1Fn%(name)s" +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 msgid "Open" msgstr "Ouvrir" -#: core/templates/mail/html/invitation.html:224 +#: core/templates/mail/html/invitation.html:226 #: core/templates/mail/text/invitation.txt:14 -msgid "" -" Docs, your new essential tool for organizing, sharing and collaborating on " -"your documents as a team. " -msgstr "" -" Docs, votre nouvel outil incontournable pour organiser, partager et " -"collaborer sur vos documents en équipe. " +msgid " Docs, your new essential tool for organizing, sharing and collaborating on 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 -msgid "Brought to you by La Suite Numérique" -msgstr "Proposé par La Suite Numérique" +#, python-format +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 msgid "English" @@ -376,6 +392,3 @@ msgstr "" msgid "German" msgstr "" -#, python-format -#~ msgid " %(sender_name)s shared a document with you! " -#~ msgstr "%(sender_name)s a partagé un document avec vous !" diff --git a/src/frontend/apps/impress/public/assets/logo-suite-numerique.png b/src/frontend/apps/impress/public/assets/logo-suite-numerique.png index 243c96629ee72f48f0083f4ba6bcea2653c1a9c3..840e972e28acc8f035458f05a47ac8d7b0d38385 100644 GIT binary patch literal 11214 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

lxe#sG*51Mvp{8G`Ood9vB~l*1@1nW@1MqmkRF0 z;t=RT^!7)b)6%81?`wjPh8PE8DNJR_pA&8%O1v?{%prtdSMC%dGIX84}w zywAGyY`u-pt6H*ywLg0>c%w|Q*kqhiu(VG!uLa8e{cNF%j|Pj?9aT^8C8M(V{Q)zD zx^p>L8M=YyRaPs;NEgQqwKn&nndbCK-Wth}1za#e8!BJS-;7(y*o|8yt+OO}rKROV@=Gz;c#$XnVa*9JA&>(<^kEo`-cBOwojSR~-Zlsf68hKco3!g{#(p*S2;r9qy zKBoUEdhY)hdbRW^3-2xH-5$Z!*HPJXo|c~2$nc@g+r0+pHNmy)Fr?RsOv)u*OH=g3 zW;zC52tB!_3Fzz4JLBr4>2Y3(6(8Eza+H^J?*~)$#`FWjO zN9pkp<20c-n-!oJM$c22Ypsv5(#Khuw!zdKQkSnWJ8Pc6E>`lN_Reg(aS#Te_$Xs+ zt0UagGyngqgHT*AiE$ExXqfRsAJT=Ii-cAH$O(`VK}WZG*83y#&i_R7)uOJ|!u0xW+@C!;CW=Yx zPxR@5_4M3JX0;bhlwSJ>yPrJ0_O~v*u?zHe-+sR1r+-V?b00C;JF3cm4!8A#Y0~SD z=!qOc8h9nF7S~=-s~^%8p@)YfCQ7Fk$nUwPIh{j!Tvj`6dIO$t0e(KcvFr3Ykzr7# zH;e|T%j8*+5~ zZ;d)}tUSF@nO>#|t(M--Vh=^CR-GR871Q%(Sz>y7FThSQ(}Vx?($TY{y(#5}ImY>{ zMH6#;!PD!irk823ea(s21jB0GkddP9MKffA#3pg-SC<}IO?tUrZD00`&|AyQCi2G+ zaiR(9_$HT#f9E3({(a!Yz3RS)n*K>X$0tH>^kR0jYG5N(SCO3hT$w$=;XyLQ*B+7P zYa67B=>bRn9}tHdF!V|R2=T={s3v@rta1ED(jzWA3GpPA&B!ZhKaR%-8Z*i-m(vg| zOz*1wfK4--U!hTuI@YnMF`<6TqoCNsmR%h^lDYs4X$`VNUKK-fZ3GK@h`VH-Pzp9Q ze}(U{YofQT>0nVXHlsC2qQB@m8iB!_nHw1{=oVR%@ZQ?f+-gng7x*A-OS#nNRg0|- zI?TwAeVS>s_ZGUyz6V=Bo6zN0qvAY@z%7nHrA(=4TCh`qM@8ttz2js79VDMj*>q@g z5d;rs(k~VnE?tf057nHv0n9MVCb2!ZGT3=1!aPTs%w2|FB{Zi5EZ65`!ekjHGO)Q`dG}i!GEGX4{gALDfC1{OdhYH3 zn-f4o93+6F6l#rh=a3{;YoM?1iP3{ad-l|;eLlXV?PAfSmj4xc{Z3cCWDHJ4lc9tR sP?dt$$1+5Rrv7X5SU?DZUjP6A literal 13584 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 - + @@ -51,7 +46,11 @@ -

{% trans "Brought to you by La Suite Numérique" %}

+

+ {% blocktrans %} + Brought to you by {{brandname}} + {% endblocktrans %} +

diff --git a/src/mail/mjml/partial/header.mjml b/src/mail/mjml/partial/header.mjml index 489cdf02..0eb2fc6a 100644 --- a/src/mail/mjml/partial/header.mjml +++ b/src/mail/mjml/partial/header.mjml @@ -11,10 +11,10 @@ @@ -41,5 +41,9 @@ border-radius: 0 0 6px 6px; box-shadow: 0 0 6px rgba(2 117 180 / 0.3); } + + .wrapper-logo td{ + padding: 0!important; + }