From aefda44ab040aa30d29723ff652cb264c53eeb26 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <pin@cri.ensmp.fr>
Date: Thu, 1 Aug 2013 16:06:56 +0200
Subject: [PATCH] =?utf8?q?Mise=20au=20point=20de=20l'envoi=20du=20mail=20d?=
 =?utf8?q?e=20r=C3=A9initialisation=20de=20mot=20de=20passe.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 RegistrationTool.py                           |  12 ++---
 locales/en/LC_MESSAGES/plinn.mo               | Bin 2313 -> 2313 bytes
 locales/en/LC_MESSAGES/plinn.po               |  22 ++++----
 locales/fr/LC_MESSAGES/plinn.mo               | Bin 38768 -> 38753 bytes
 locales/fr/LC_MESSAGES/plinn.po               |  49 ++++++++++++------
 locales/plinn.pot                             |  22 ++++----
 skins/generic/password_reset_mail.py          |  15 ++++++
 skins/generic/password_reset_mail_template.pt |  10 ----
 8 files changed, 76 insertions(+), 54 deletions(-)
 create mode 100644 skins/generic/password_reset_mail.py
 delete mode 100644 skins/generic/password_reset_mail_template.pt

diff --git a/RegistrationTool.py b/RegistrationTool.py
index 021b714..72a7329 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -38,10 +38,10 @@ from Products.GroupUserFolder.GroupsToolPermissions import ManageGroups
 from Products.Plinn.utils import Message as _
 from Products.Plinn.utils import translate
 from Products.Plinn.utils import encodeQuopriEmail
+from Products.Plinn.utils import encodeMailHeader
 from DateTime import DateTime
 from types import TupleType, ListType
 from uuid import uuid4
-from quopri import encodestring
 
 security = ModuleSecurityInfo('Products.Plinn.RegistrationTool')
 MODE_ANONYMOUS = 'anonymous'
@@ -215,11 +215,11 @@ class RegistrationTool(BaseRegistrationTool) :
             sender = encodeQuopriEmail(ptool.getProperty('email_from_name'), ptool.getProperty('email_from_address'))
             to = encodeQuopriEmail(member.getMemberFullName(nameBefore=0), member.getProperty('email'))
             subject = translate(_('How to reset your password on the %s website')) % ptool.getProperty('title')
-            subject = "=?utf-8?q?%s?=" % encodestring(subject)
-            body = self.password_reset_mail_template(fullName=member.getMemberFullName(nameBefore=0),
-                                                     siteName=ptool.getProperty('title'),
-                                                     resetPasswordUrl='%s/password_reset_form/%s' % (utool(), uuid)
-                                                     )
+            subject = encodeMailHeader(subject)
+            options = {'fullName' : member.getMemberFullName(nameBefore=0),
+                       'siteName' : ptool.getProperty('title'),
+                       'resetPasswordUrl' : '%s/password_reset_form/%s' % (utool(), uuid)}
+            body = self.password_reset_mail(options)
             message = self.echange_mail_template(From=sender,
                                                  To=to,
                                                  Subject=subject,
diff --git a/locales/en/LC_MESSAGES/plinn.mo b/locales/en/LC_MESSAGES/plinn.mo
index 4cd15ff104fda230bdf474decb2d026b06494bb4..5e4bf2b59d9cb40cd155d27b94277e3bad05ff0c 100644
GIT binary patch
delta 20
bcmeAa>J-{w%*JkFWny4uVzJqZ?K~3zIOzpr

delta 20
bcmeAa>J-{w%*JkLWnyk+Y`WQs?K~3zIO_#t

diff --git a/locales/en/LC_MESSAGES/plinn.po b/locales/en/LC_MESSAGES/plinn.po
index 7e6bac9..7d41f54 100644
--- a/locales/en/LC_MESSAGES/plinn.po
+++ b/locales/en/LC_MESSAGES/plinn.po
@@ -1,7 +1,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Thu Aug  1 11:47:35 2013\n"
+"POT-Creation-Date: Thu Aug  1 14:40:48 2013\n"
 "PO-Revision-Date: 2007-10-17 14:43+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
@@ -999,30 +999,30 @@ msgstr ""
 msgid "Exit boxes editing"
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:1
-msgid "Hi ${fullname},"
+#: n/skins/generic/password_reset_mail.py:4
+msgid "Hi %(fullName)s,"
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:4
+#: n/skins/generic/password_reset_mail.py:6
 msgid "You have asked to change your password."
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:6
+#: n/skins/generic/password_reset_mail.py:8
 msgid ""
-"To get back into your account on the ${siteName} website, you'll need to "
+"To get back into your account on the %(siteName)s website, you'll need to "
 "create a new password."
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:7
+#: n/skins/generic/password_reset_mail.py:9
 msgid "It's easy:"
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:8
-msgid "— Click the link below to open a browser window."
+#: n/skins/generic/password_reset_mail.py:10
+msgid "Click the link below to open a browser window."
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:9
-msgid "— Fill the form with your new password."
+#: n/skins/generic/password_reset_mail.py:11
+msgid "Fill the form with your new password."
 msgstr ""
 
 #: n/skins/generic/password_reset_template.pt:13
diff --git a/locales/fr/LC_MESSAGES/plinn.mo b/locales/fr/LC_MESSAGES/plinn.mo
index f1517706dbf99fa4e928dd0cf75e105564d2c4dd..4d68fb1fc63942372ce346dee8b542afd92fdbca 100644
GIT binary patch
delta 11879
zcmZA62Y65C-^cNj7?DBDBw{285-WDZ-kYM-YSbq7j8%@kS~FJvR7<sH6|uL{)~>4h
zYn3Xk8da-Qje6dn-}!p3KF_(Xuh)Iw=RWs7=a;L!x6%LSjsBaq`n#nZ$C;ksIAOR0
zbK_~ui#IS3GgKll6f<Ei48Z)BFM_HUZ{>+tfP5{>cf-u&`(g-=vi#Iaj_ZU{uz-SK
zTxAtDVG#L!m>!Q}Ry>8J@iJz_&_u_Hz%Wz?@u-1SLk+YZMqzWzf&(x=jzzV*EYbBE
zUO_=R3bvpg+>UDS0II=Lm=nLlf_MuxfXtP>ndd|eBtL2*38)V1SiTi%LY*)lCSxI-
z=917z)|;C!8~JUh0epqpn(t5z{*Ky;XLjGOidQcbwKDlIJ2uBy>|)MDO)w2d;11M)
z-1w^A3@W1v>Y}#fHB^Uhp&A^3n(+j?Ki%#xK@D^@YHzopR_t@snK+JG(Q~MJmrxVF
zjr8X__ed0`;2Gw|0@b`Ftb!Uy1JwPtr~!<{IGl{Ra3iYWBd8gkMb$fx;dlwPVvkT0
ze1@7>#_Gzm|G7wL$)izAT^2QyMyQ6~u<|6-$cLe3HVRd55^BbCQHOL1s-v}5z7_S{
zUMzu!Fd6^AQ2KY;)o>ht?2US`FV4Ue)M0XJdLs_OJY@5r29|)4SRGZbz1agbu)(OU
z8;6?UJXHBdmfwVK6a}A?P{&tMOL+&iM9)w&3##Qkm>o5fC^H7N5^<I<XZcE~3Drj5
zYlyx>iQ3XGsI3`Xi}hEBGbqp=Ek+IGebfNfpk}rM)xcr&?JedYf64COM|Jc9)lSCR
z-b6yoNYsF0Q7cd!wUU);yI#fCcB3omJs*fV3zN;Is1a{Lt;lgyM`uw3zF_6oP>1j~
zYCw0b{0VB{P95)z1faGg!X=>wi&;TgR7Z7DZ^N6Y4@(MarRJa-ejoMRC+0>}2iq|n
z?z8+M)Ig7-w(7Kb0X1;<DhV}o2er44P!BvsZGltQdoUDrKey%cTRs*w;F74Vs)uE;
zCGw4NCLwROa{%?aKF5NXy`HaK*Qr1vo`M>v5e>xjI2tRUi`x5bsMqT#Y6ZSWt;khO
zhxaW1Cu-pS^}UH@L+yEPRJ|hTkHs*T-v5#$v@~^4hoTv(;bhE!BTyZVMKwGXHK2v4
zw`UEi-ci(^o<>dN3Th&^k*~FL4+~)N2Hpxa!(jS%ToUT|9aKlFQ4MUe{2mM-e*~lP
zq~-6R4(TK8fgugOGcW|T6{Aq?O+l@|Y|MyDQCqMQUG2#icH<)I{k)2L;DO~|qGlf2
z$ZIe^vdT_T?1ufZEPjJ;VEV@1j5}f>@{3UY?8X2*gBtjS#;m_)ewP9*d2kbNC32%4
zsDPQU32JFuV=(qa&14Aj6?I0T8s3RIBL`83@*C8i-$b=@2el=SQE%6?Cak|^maD1P
zU<@i>9D}hk24a2G09#-jc0zrCreh*5!xDHN^}42O=KTeg7u8`R>iOyzgiTTHwslFU
z!!D=}2ic9cQHN?O>VxzyYQ`%tGp<23v>nyZA=K8Lu=0x-LjF1y!H1}RBAa{Vai&|5
zgc_=YS+F^3#7U@zyP}q~AF6|~sHL8TTGEB6fh|Y1^D*j_Z$dqP7PSRGqUv2i)%y)u
zG1qxOqC5pruX(@ot+59A(O3+3V;%eznS>M9!f`s_2#mqAs1E)@4d@wa<<htG1{#Fw
zI6JDH+}IhDFrD82{k{ahf~W_-L@nJ(48`v)e-kzG$Ed^Q*UJ0(&5c>em&a^a2XzM8
zpjKi4YJhW5E4RSzFT-%X|Jz7p#Z#!Izl<8lHH^lasHF^g-TQLoM9nB1RX;zf!$PPt
zR28)n4N-p|v_#eGhnm=6RDa{p)oU<^ghsX&``~8Oi1W7gI*vv)Pz=>^JZfbsT6ulc
z3N*pY*a4%kw>ce)l3#=B?+h-)Tdi6D_ehLy!@<Kyz8>29WYhrGqGs|bs)OyQmG}a)
z<JTC5S5e>ezfsRUM}0q>wqCt3%uhBBHGqbg7rVA){Z-MWAO|i)eHz!I%1>fAUbXyF
z%t=0LJFk9W)DkD62GSZeu)e5{#@YQPsHIOsP3WNIkGUk&;CU;!joO<hs3i_;?=5L=
z)Xa;b>X$(cxIXHTb+GccQD<i!YO5Bb&ct%m;az9>ZKivOg!b$dYKbqRMtBP~fQOb(
z$2+Gp5@O~=%_uL%U>s^7%`p-OS@}Dt=Qg3v&`#6<_aSeK>l`Mbz55O|;tQ7l$-Ihc
z;8)au?x0rag_URN=nXs!Rj)AW@RdZZSToe#w?%DD3hFhTfl+$@my(E}U=J3>a~O}$
zQA<|hO>e{rn2&rl)QWXPHJpq(E7MVDU^!~Zx7qzesDWKUt-uZRO$5`?zw?4bA@ob~
zMpzitU?n``$CBa#@=<SjGun#kct2`Jm#`GxLynCT)!F-19Eow{cVHR(8FglIbn(tm
zQFI$pP?bb=oPss+2sXwHUA;YSfjV?aSR99-I$mz~H=|Z+KdRm_)Jj~o`;Sm7?BC7X
z;yh--ZmhrdD2@UxO*zz3RYEmb6Lnacpw321yWh_8ol&o6FUz~ArJafea1pBgop%3o
zRQtzJ1N^3&>wRKxP@p9b?Cu?=D6<smuvJ6NxH;y*E>=F)oQ+!A4^SPXq3Z8JZPjV>
z4(e=#^za52;gZk{3t~EqMeS7yOu$a4l~{zD$qLMX>&?yRM}7xt=DV;c9>bk@AGLDp
zdV0@oMh$QWYOCA>R&WkAvma5X`-zoj?B%^KSx^l}V;yXW_3>RSh~J_P+hZ(&(Y?KP
znqfxr9Z?hLYW73EAFh)^LLZ(<m<i`&VO)y(z#KxoucuM<uApXm7uDcPRK37tufs6R
zL_P-9aY<DD@|cKqt$ZBj)%!n%ggRJ>fw<M&j}^!tMK$mb=EE#~yu(@owS;9XUmpX>
zH?e#h)LwT$o&KI!2whaYk1&Y-oli-`;!e~9KVtyiK~;Q&+LD)81T**b{##FZ)S2ml
znsG8l;}Fb^si>{_6m_`IpjPBMY9;TWtC>G1(Ezjb^S<40pbp<)tb}V(9bLuQcpWp~
z@c!NkjKLuCb5R3dYJP+|{p&FpkE8lKZ{Fz7`fF*QQji&g26!`$Ks8hlHM3%<4$E12
zqFD>Ir;SisGYK`r6{y#54Qc{=to%>ZN<Tx@j~U4NYY%G=^k&!=)nP}}``jJV<4Dwi
z#-hFlQ&4-l2=&%{hT7W`7>ajM^<QF93>f6K6OUS{@~C!dxFod4El_*Z0kuSfP!%Vl
z8k&Wg$wHior!gzGAM7n{A2S8FQa%y2VhKaM_Nrkt`PWbr9E3Vc?kE!4n-5Vl-hkQh
zAnFtOEoQ@8sDV63ZB_cA{QZa7QS}<3p6`sB$S_p>nWz<<kDAb8D_`lAyUseR@R_+4
z{i(PMwU>KQ9UR6S_ycMW|FH7#VO~e2Py?-qTA7BHZ;#rlzNnc`MzuE!Gwc0dMM5Lo
zf?Bd2R$(7zCw~q#px;n4zlFu|iQSJG?$t}coRl|44fHM4K!)1=$(V)wVpM;hNWK5-
zNoc7yp<c6{=3dl@529A$7-~RgP&2rOdhRLeefLlC4qIN-YgZTb>(~wT+!)jZW}}{4
zhOQE;NT{O?r~zz4t;8<WNDrV6=@Hb-PMcRz1AB~m?gi>OzY$)C0jL>AqRv<x>I_ss
z^;>fU>#x_RAq9GEx?>d_hP82%`4IJcUU8(i_w7(iI{_1LKC0v6<{7L-{ygeTM2zw*
zhMH(q)PU=aV*NFuMifM1Yt%pnqDJUi#c8M+ykq5yQT0E-5ZsMg@~=?!uA`Rvf!%jT
zdlSfP#$z1!Te>8)gkw;LXCnGu6Vw1!;_J8$OW{9Q151waR-ivdlOKnw{{d>ot5E~l
zg=+r`EQBXf_3mL|bf1veOCtZ<-i?c>6}X04s)winJ-7P-W4*ukLs1QsM>W_1^I%uh
z85xJ+IN$Q?P%E_`HGvb@ivFG8abAO+up&1mVMpAJTB0zvC^yzbUq`5pyPDHc4R1vK
z+U>zycp0?<f1)PfjQ3V17_}n#u)W^@7!sQ4IMi!04K<Vhpbp7))C0Rw4IaW`cnb64
z6I2JeCU|Ee8r4n})ah@II;=@p4F_Ox+<^7z-?>1dG)7JI_NWEMkROJc@q4H}U4hz~
zG}P;O81;IdLQUW-YUwXp{w@|F|HSf9le~e%q6V0VzTf|*B-BACRKtT%GaikVa0061
z-Kd!yM|F4+Rqq$n3f#8*V@yZ>1%{#DWbe5M%s@U4HL>`~tiL);pg?<A3)NwB%TGf!
zv;fuN5>x{#um-NiMEni)b`+T6{UOr=^OIkKt#JqT#*nFOD-OpJm~|TKuMVnB^BS&Y
zHb9NA8LHzps6*Ka`{Qm*kFnFedL>aSQ3175RZ%O|6g9CV)C%=MouT1a5GS}Kv}dcZ
zFz!T+{4&Pk3)BFM%<u+S3?s;wMtv_Dp&IOj8c-k9Kn7wwrr7;Y?EV%EpnQjwy9Y>U
zDNdliSWm1%#+mllE~?=Ys54RqGhrQ!#-^6<k9?b)6x4w4TlphYhyP$8W_-t6k*r9$
z>*OP$_q8ypgDO}In_*cTiQ3!sm=Axz&G-ao;ktMEjAA7+-Eb!Q;~%IF?_*|sX61pi
zz0)6pVS4|gNNB_rF#}dcJy;Vp^Tw#9ehq`MJ8F*yq3Vw}r(yx}@1iEM5jC-cmOqa=
z6E{%p{EeCQ{%4rub&vyfSYlBfR6w1LdZ-z+M-8kOX2HQ&3dh_1&rt96KGeX@pw7a1
z48lvOc5a}y@G-iVNxUSXZ}sK5-d;UMjqo1~#h`iKj3QATmq3+QK|R+5^~LOlT6z~%
zZz5`C=UMqea|vo7OXsov14yi;fWIA_i22?U&cO}jH=`Qtl<GCq1vR4{s1Hj&E1!g#
z(KJ;3xn?SA=8I4RU4i;7*@bH7+f>$HOZo!^I;FoL=gIjUwO6ASI8JAriMoH=e287h
zKSRB)NejK#?QPVSY(UNMB5Ghau?Idt_1A8Zx7A%;5-J#I1*1?)KNXwcd{oDmt^7J_
z=^vn$)_<}0n~@Q<1;sED>!Tlf|1eXMulovA$YCbEl+gL}eIlPK!L`OJT_fF;^b?F`
zO)G0%xpsLt&#m4$vl-SPN>Ohrb!HPkkmm?Ff8tBxDWT<mb=CBv|BMvss%jmqBt4jz
zLVQG|v-|I3HtL+U{Lki>)X~+7d^EBnzW?C}&KlxZq8@RD(8Uh;eq**`Nk8BGRqR~}
zG_u3erAUt=>X2VS3?aSQ?&*wtMO2~e4J?4V{_Ej{GtjR|kFfk6?iVKN66Gk{g!&=!
z)*t^M!gy#YPUGh1m<c;!E}}o-&;4I0tA@IY68*?;^X2&C6#dBGCUhP3aJE_AvQ7!|
zfka&j+FZ5LmR9K#^3Sa7mX)2gyiW95LLaIBy%<a`>P1;WOPrW`s7RE%om4P)OV}M=
zDW@$plZoEMOrk2Gs}2ScVWjo(Pa&$2&yJUf>O?4Q{nzT3CatTx<u7_!-@m`}?+;qp
zzwBmj3et#A$=4=&5Ua^ou=_d#KN6|BhqG`kp<kOv#6IFp@{5T=L~$Y~Wuu4&r1{I(
zX@dV?bq01GU)Rp=qwv*rhD504+n~M@A@~wIVIyotEGM0n(6td~6HkcsR+dNyUvRIQ
zuLgfbP=1B*xBFJ?>~$$vMs7cG!b%@vM}p6)@6wm&DD{$vCB!2_R|@LCJiod=Cw+s=
zcf=_x|K6NN**8`(FP^ltR@HauGgh9+&&Yq`p&VG4d{)#ohlsSs=HYupHp(XGCRZiu
zwV*7P^emz@={tn3+-3rGs*wMh{8&8r>diV$CXvEli5gV;(jM4Nxvq!ghkHrizca||
z`<h71B^}E%afGfM<ZF}8OdKO0g~f>g%HvVj7o>GX>g)VG^-^58d(VoxViBtrLzS|`
z7NQd6Z{jnoOngTA8tPhTD(z>_7R7RuPar-ZzUST`tM@GqB??g1i}*)hSY3xHEKBHW
zLlmTuzU0G6U&jN)@5IN%Im*_du3FT4;3a+k=HcHg+$)IR-~qdro_g)c_a)yPrx4jG
zE2b~(aSGojic+X+G-kmvmTy3MB<YpJ94kAI{U~36EwC4+qd{HWtd7#J5%HF9NBROW
zgV3d4@SS=ObiIuyi2g)p@&k##h%I)1FKJyb$j>M4k`A+bz8n1Wo+Zjt{<qz`N!dZt
z`D}2n>Nd4R>b>IW-6K?pA@uj;WrD-u93gVsL($wDKujgF5pB8m>Y7NRK4n4F{gCuH
z(lxOo1``!Xzaaj7y+!#hB7nk*dKZR~h@;?Byhn^7ej$cY)(~|~CQg#ygc)sMg)x@0
z!Ng%z;`)TNuIcz4QHXRJcEI~YV?x&s%94C3&cFvGPE+uh(3Oc8NgN|z93zN8>-0Ef
zn~9p_s}O&XzCi4xPB<pxD&jurtwbJsjw0VRnX;QiA0j<bnf{&bM5I;xk-|cj&ik*2
z?@~UUdOdy3c>e@&{}jo^L=o=iBo2{&7j>;CT9f_{v77jaSV!3k+(3*a+&B0qKZU;$
zLkL~1h}D#rrGwg}myvFcUtvkgvJkh(=OZ77e-ryjcR^jlNq6;<&O4+>Te>mnk1c(O
zboE!?fbC>-z2)K5B42<`{(Y4vA3=<_!u-@JL%s<4hNOe=fweP;bS<kl2{&3=)F(1f
z@2an^)}L#UJvfeZcG8oG3^cA+G@i0Ds>D^1vKXR0>Bqz#6>?po-aL%JpYb!)^_y9N
zXLQxG{3;wnbkUwI;zl=OCees|&(sO=Io!OYu2Yf+b>*aq%%qo-E@91mX!q(^ejxer
zL}%hM@h5dF;u1B$b%S&!tJ{IJu3VP)a{OUP`9(ke3Mfg*P@)(WLafpq@_mTg#0H`r
zmCJE2Dz#SW@C-juG9WFfblHH^@TAzZ=?M)oq~3V5P}<3=qy0h($MziFuV3>n{d>d>
zO>0^GVs=V~CJ*ajB?&Fp2dCCdY86nva{1Dg%U4Q$FDWKH>9T2uk}d?M=3HDWEwxul
z#?-GDRZa^W@YDZm@8Q4+;s3WicUsfX$f<Lqha6s;k~}nd;DG2sB)c76+r7ttVLhDx
E0Wcz=*8l(j

delta 11897
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
N9$eQiJ!@pT^MB+<p27eC

diff --git a/locales/fr/LC_MESSAGES/plinn.po b/locales/fr/LC_MESSAGES/plinn.po
index 58520fd..4000686 100755
--- a/locales/fr/LC_MESSAGES/plinn.po
+++ b/locales/fr/LC_MESSAGES/plinn.po
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Thu Aug  1 11:47:35 2013\n"
-"PO-Revision-Date: 2013-08-01 11:49+0200\n"
+"POT-Creation-Date: Thu Aug  1 14:40:48 2013\n"
+"PO-Revision-Date: 2013-08-01 14:42+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
 "Language: \n"
@@ -1035,33 +1035,33 @@ msgstr "Coller"
 msgid "Exit boxes editing"
 msgstr "Quitter l'édition des boîtes"
 
-#: n/skins/generic/password_reset_mail_temlate.pt:1
-msgid "Hi ${fullname},"
-msgstr "Bonjour ${fullname},"
+#: n/skins/generic/password_reset_mail.py:4
+msgid "Hi %(fullName)s,"
+msgstr "Bonjour %(fullName)s,"
 
-#: n/skins/generic/password_reset_mail_temlate.pt:4
+#: n/skins/generic/password_reset_mail.py:6
 msgid "You have asked to change your password."
 msgstr "Vous avez demandé de changer de mot de passe."
 
-#: n/skins/generic/password_reset_mail_temlate.pt:6
+#: n/skins/generic/password_reset_mail.py:8
 msgid ""
-"To get back into your account on the ${siteName} website, you'll need to "
+"To get back into your account on the %(siteName)s website, you'll need to "
 "create a new password."
 msgstr ""
-"Pour accéder à nouveau à votre compte sur le site ${siteName}, vous devez "
+"Pour accéder à nouveau à votre compte sur le site %(siteName)s, vous devez "
 "créer un nouveau mot de passe."
 
-#: n/skins/generic/password_reset_mail_temlate.pt:7
+#: n/skins/generic/password_reset_mail.py:9
 msgid "It's easy:"
 msgstr "Rien de plus simple :"
 
-#: n/skins/generic/password_reset_mail_temlate.pt:8
-msgid "— Click the link below to open a browser window."
-msgstr "— Cliquez sur le lien ci-dessous pour ouvrir une fenêtre de navigateur."
+#: n/skins/generic/password_reset_mail.py:10
+msgid "Click the link below to open a browser window."
+msgstr "Cliquez sur le lien ci-dessous pour ouvrir une fenêtre de navigateur."
 
-#: n/skins/generic/password_reset_mail_temlate.pt:9
-msgid "— Fill the form with your new password."
-msgstr "— Remplissez le formulaire avec votre nouveau mot de passe."
+#: n/skins/generic/password_reset_mail.py:11
+msgid "Fill the form with your new password."
+msgstr "Remplissez le formulaire avec votre nouveau mot de passe."
 
 #: n/skins/generic/password_reset_template.pt:13
 msgid "Password resetting"
@@ -2229,6 +2229,23 @@ msgstr "Cc"
 msgid "mail_bcc"
 msgstr "Cci"
 
+#~ msgid "— Click the link below to open a browser window."
+#~ msgstr ""
+#~ "— Cliquez sur le lien ci-dessous pour ouvrir une fenêtre de navigateur."
+
+#~ msgid "— Fill the form with your new password."
+#~ msgstr "— Remplissez le formulaire avec votre nouveau mot de passe."
+
+#~ msgid "Hi ${fullname},"
+#~ msgstr "Bonjour ${fullname},"
+
+#~ msgid ""
+#~ "To get back into your account on the ${siteName} website, you'll need to "
+#~ "create a new password."
+#~ msgstr ""
+#~ "Pour accéder à nouveau à votre compte sur le site ${siteName}, vous devez "
+#~ "créer un nouveau mot de passe."
+
 #~ msgid "Invalid userid."
 #~ msgstr "Login invalide."
 
diff --git a/locales/plinn.pot b/locales/plinn.pot
index 886a0fd..b40c584 100644
--- a/locales/plinn.pot
+++ b/locales/plinn.pot
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: 2.0 beta 1\n"
-"POT-Creation-Date: Thu Aug  1 11:47:35 2013\n"
+"POT-Creation-Date: Thu Aug  1 14:40:48 2013\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: Zope 3 Developers <zope-dev@zope.org>\n"
@@ -1021,28 +1021,28 @@ msgstr ""
 msgid "Exit boxes editing"
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:1
-msgid "Hi ${fullname},"
+#: n/skins/generic/password_reset_mail.py:4
+msgid "Hi %(fullName)s,"
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:4
+#: n/skins/generic/password_reset_mail.py:6
 msgid "You have asked to change your password."
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:6
-msgid "To get back into your account on the ${siteName} website, you'll need to create a new password."
+#: n/skins/generic/password_reset_mail.py:8
+msgid "To get back into your account on the %(siteName)s website, you'll need to create a new password."
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:7
+#: n/skins/generic/password_reset_mail.py:9
 msgid "It's easy:"
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:8
-msgid "\342\200\224\302\240Click the link below to open a browser window."
+#: n/skins/generic/password_reset_mail.py:10
+msgid "Click the link below to open a browser window."
 msgstr ""
 
-#: n/skins/generic/password_reset_mail_temlate.pt:9
-msgid "\342\200\224 Fill the form with your new password."
+#: n/skins/generic/password_reset_mail.py:11
+msgid "Fill the form with your new password."
 msgstr ""
 
 #: n/skins/generic/password_reset_template.pt:13
diff --git a/skins/generic/password_reset_mail.py b/skins/generic/password_reset_mail.py
new file mode 100644
index 0000000..442a1f6
--- /dev/null
+++ b/skins/generic/password_reset_mail.py
@@ -0,0 +1,15 @@
+##parameters=options={}
+from Products.Plinn.utils import translate as _
+
+print _('Hi %(fullName)s,')
+print
+print _('You have asked to change your password.')
+
+print _("To get back into your account on the %(siteName)s website, you'll need to create a new password.")
+print _("It's easy:")
+print '— %s' % _("Click the link below to open a browser window.")
+print '— %s' % _("Fill the form with your new password.")
+print
+print '%(resetPasswordUrl)s'
+
+return printed % options
\ No newline at end of file
diff --git a/skins/generic/password_reset_mail_template.pt b/skins/generic/password_reset_mail_template.pt
deleted file mode 100644
index 261abd3..0000000
--- a/skins/generic/password_reset_mail_template.pt
+++ /dev/null
@@ -1,10 +0,0 @@
-<tal:element i18n:translate="">Hi <span tal:replace="options/fullName" i18n:name="fullname"/>,</tal:element>
-
-<tal:element i18n:translate="">You have asked to change your password.</tal:element>
-
-<tal:element i18n:translate="">To get back into your account on the <tal:name tal:replace="options/siteName" i18n:name="siteName"/> website, you'll need to create a new password.</tal:element>
-<tal:element i18n:translate="">It's easy:</tal:element>
-<tal:element i18n:translate="">— Click the link below to open a browser window.</tal:element>
-<tal:element i18n:translate="">— Fill the form with your new password.</tal:element>
-
-<tal:element tal:replace="options/resetPasswordUrl">http://portal.bla/password_reset_form/uuid</tal:element>
-- 
2.20.1