From aa02016c3ac6d199f9c4cd8202b0e8bf1f53e3b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Kervella?= Date: Sat, 31 Mar 2018 15:23:34 +0000 Subject: [PATCH] Translation: Setup re2o to use locale and add French --- cotisations/forms.py | 10 +- cotisations/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 11461 bytes cotisations/locale/fr/LC_MESSAGES/django.po | 553 ++++++++++++++++++++ cotisations/models.py | 10 +- cotisations/views.py | 12 +- re2o/settings.py | 3 +- 6 files changed, 571 insertions(+), 17 deletions(-) create mode 100644 cotisations/locale/fr/LC_MESSAGES/django.mo create mode 100644 cotisations/locale/fr/LC_MESSAGES/django.po diff --git a/cotisations/forms.py b/cotisations/forms.py index e2095f7b..c16edf2c 100644 --- a/cotisations/forms.py +++ b/cotisations/forms.py @@ -80,11 +80,11 @@ class NewFactureForm(FormRevMixin, ModelForm): banque = cleaned_data.get('banque') if not paiement: raise forms.ValidationError( - _("A payment method must be specified") + _("A payment method must be specified.") ) elif paiement.type_paiement == 'check' and not (cheque and banque): raise forms.ValidationError( - _("A cheque number and a bank must be specified") + _("A cheque number and a bank must be specified.") ) return cleaned_data @@ -225,7 +225,7 @@ class PaiementForm(FormRevMixin, ModelForm): self.fields['moyen'].label = _("Payment method name") self.fields['type_paiement'].label = _("Payment type") self.fields['type_paiement'].help_text = \ - _("The payement type is use for specific behaviour.\ + _("The payement type is used for specific behaviour.\ The \"cheque\" type means a cheque number and a bank name\ may be added when using this payment method.") @@ -349,7 +349,7 @@ class RechargeForm(FormRevMixin, Form): if value < OptionalUser.get_cached_value('min_online_payment'): raise forms.ValidationError( _("Requested amount is too small. Minimum amount possible : \ - %(min_online_amount)s €") % { + %(min_online_amount)s €.") % { min_online_amount: OptionalUser.get_cached_value( 'min_online_payment' ) @@ -358,7 +358,7 @@ class RechargeForm(FormRevMixin, Form): if value + self.user.solde > OptionalUser.get_cached_value('max_solde'): raise forms.ValidationError( _("Requested amount is too high. Your balance can't exceed \ - %(max_online_balance)s €") % { + %(max_online_balance)s €.") % { max_online_balance: OptionalUser.get_cached_value( 'max_solde' ) diff --git a/cotisations/locale/fr/LC_MESSAGES/django.mo b/cotisations/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c0125834dfc4c86e6373b559bf0196daef05c57 GIT binary patch literal 11461 zcmb`MZHygPdB-O&5HKNtA%TP>oVWyg33s!065}k18^6ckO*Z!0;oY9ScXsdCb7!vS zW$ktOP$ASWg|sDVRaFW?RF$%js|3b;}8z?!hr*oS2Zi0G# zE98}TC%hHD7v2L8y60W^7VbX~|yZb+K_n(1HoEp3Y>!f33=t+ z^tN(*cR`KgK`6Z(fi&qo0e8bDJP!W`>ib{7S$OBo{M=xEo%E_rkYgyt+RC-w!Xr{qUdQBk)&_yD`39++Tn@;FqE7 z@ZaIoHP|nFnENS=MtX>$-hUCw4!`gC1INqo%{>1Jlz;sS$}VrldG!2tsP7t3cJKg{ z|LujEA0KKwe+uPy{{r6)e+cEDzlNHB!zAnZqfqnQfqMUE?)lfC`uPv2`T7x*y}trA zPp?Ax$+dK%=Wm2J!mSY1c<+Mu!#z-b+JQ`+w+!VcPeJ~9U*eDY`4&_^--R02WvG6B z>i9C0AN?P^4*mw-1g}F$vg55#@Ap92&t51wW}(^*q4f7DD0x2zRsZvje+|{&7of)R zENsE&;c0lADfN5_N`KG5cf;>M$@?OdJg>m_z-v*e>|p{^&>Fsg251xUN|4Z-zC}o@kyP?|qEc^)kI@|?s zLAb;4C{+J{4nGcGfU=KW80{Qfgdc`qhm!ARf{yfd1Wv(EL$&iYcmV!C)OUMP#uM;q zD1ZJblw9}Y1c>0Bg_7g*@ETZM>O*ooNeL(#!^0G{q3aR**YiFAKSn{V)~-^ea- zrJ%mvHR*n(@Im+cxFg-$E99^2@-|ABBHPj>UFbSRAp}|5N+4>o_6oc+6zPJYTiet; zRhPyrJv1oNTbrT_^R;oo-tfn#D6Z++OL>j`RsNBFJMRAVjx$hprE8v|Ig&jbqMW4= z25fwkZRlDk;oahRGyFq}eB*T#`M&H@m+WOLC8Eqyj!|S=`zar#5IU_*eh})qu7sUW zrrCRla=UvbG${uti)OXg`wLKUL-UT;}ah z^0rA9Ox_MU-T^;mjDEZr=-zB=CUKr7Q53YcnJlN3vPK&4lL0gtb<#1j2M?PtUP{7d z`95fcIYW(X8{ITm3X>wMYGk&F(N(%dO7B@vt0OUbP4pF7*2n@$p$XWYnO2bdVN`$7 zuRiiMDi5Ud(J!4Sqh7|wFO@&~rBg-yr8OJxK;3%015q*W9Z2FhxQK=5ms7QOP>Mbn zWZ`0L?ZZ3h48`mSV{@UMM1kp0y*<%?v&I0;LV|_XY|uLtx59YQ$QZms7sD*qof}Ek zenSwC#?r|uL(x1|veR>^vG^5t&e&89NRSvQrvADQ<=;m3KHFMG#v*KUXr@C(n* z@Dt-(2Q!G1Cy8l?i|tACk)%j5w9>npe!M+5!Nq1k?cwY09UcGT>BJ80wEJQrGe7?H zbCc`#k#+EvNi!41VW;R+0(6rs3(82s>k}eZ(?0lU_qE?_G`-UJBq)XC6Y2>AzPvk^9KW%yZ;CW?7bGTk81_Zl$ z^l92)!HizHs)B;%zE*QbHc>{)wGFozXs>!THEz888&q*tE!%i~_YUE- zf+mV9CzSB*+FYY=J(v%gev#S0m}=0dtMrA;6qytf=B4N(IvA~*QQZuUilt@rw*zXm zJ&vwd>eQ;V9}X4oF(Etkl@5BJkCH05mL23ysxP-AkTo_H?CSY)Aec=3tD*xBqYq)<)&KVdkP8vMVeZ1B0fyo#!ilJ6} ztqgoIJmXeP*4ye)x^Kfi`?PKu#Wcs%>^qY;=N_TPlpvL`vrFTk<(-T}8@mbOEN`bO zGw=VZY~5qoQgDk|cI}?CQ$%^#Wl0$tjP`%(tTYe%Su4>ZXTQoZr<7$dm;0AG8Q58{ z*CWWcu=m~`#<2Mq@IXm&6-`c#CquPi+%yTQ2FL3^t`xml{r4IitAFc@G7h$yE)Wrs z$Ix{B!)nA=_)>9cQzv~*gBwfks#ntfz6vj!>#2K_n;T;&@~N7;*u&MBpH(^-XU6I? zJ)VhJ&D1{|vpb!|vZNCv?C66i3$V$4C}S7RNikjCc!VRGsAT?~8>pneas%4#8;M{C z?{~XV*mTEpxm2vpJ~f){Bw-im=Ozk#4*eRh+X36r^^XZx*o)4l$ys*ljiar`DdIb4 zz-hB<@_{YKgKm=MjhSpQY&G^5i&`bY4aaNzImt> zEIrckgXo-lG8q(m`6^y4{KcR#7x*2-s_v)FLVEh}@hvk)XAbqpvvYE4iw?FNuo_y; zrcKUP^4@Obhw%rLX-KmmfB59w;l`eRJ&Cjsq>V#yGtr54+U%JR^DQiUI&H45q*{dd zc=g%ym|AWMW`G^A5;LtNTv8Tg^~*W?^E8OFfJ5}^3a)aJS~Y`YaH&s7%ah_P+b8x$ zR=nIUo`5Oj)SH>GOa#~nEUNOdf(aX1|xINGw)cSOh<9in+*!GMJR}DQ%VP`E97VT z8JpFWZDp0F24lyy;5YLEwJ2S~ktieez}6w-^-yEzB&VB*;=ai^?c%|VjNFXv*=kEQ zd}cB4zaM_xS9!nAnl@Szp4^RTZSPO!P(MR;`t5F1uQzWSRpBf(-zZ=ykmj3UG(A-fh;A^%>6_s(ukOm4#9x>%>b4BYWiM$i5D@qbE7jbY2 zOBtcF!79YBY97hPDtlx-7JZcQO!Co8tY}w-Iz!-5CJ7Dpl1G&lqPY1Y_m1`I`i2J4 zrlJ)XjEQTjm2q!G#T@|&BNuCxJMwp+s0r72R&mH>zjKFB8XWn0BSj83wT>o7RU4s6rR;|{6V(9LGiUaqI+fSr zl#Pa^pU9(^f zZLgw)jS`>rjMeT&^`vwVTuWIUsoKU`oBgN;Y4bsf-@IF^is6jVT0g4qnbvcp%8A&h zjM+~mUC$7PJz$iu)kmYFRezb0X71kM+y76Pu>S|pv)MB7BXwwBY*pC%-$M7u1q2pu z?N43$hnTAW*0{)gkp$9;Wb;1+*~4yoXVab-pm$3D>n1%W#S&q@+~9U2@_4pEI|l=+ zqNK2<;w;6ru$`E2iG^7^LeomM0j8o;n6;exPJ{IU>(i2FXTLh*$|E>M)!ng_@9J8g z99yPxW4f+11HxQwtK-*a!{w&MswLP=t+LRd^ql>y+htrd{9|^X(H^M#iC z#E#V*5nLhJ268K6xfBoNuWY0x<3SiFeMM@Btb-0pA^#_&4$IT6hTlKGjJXf~Eodo% AT>t<8 literal 0 HcmV?d00001 diff --git a/cotisations/locale/fr/LC_MESSAGES/django.po b/cotisations/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 00000000..48079d85 --- /dev/null +++ b/cotisations/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,553 @@ +# Re2o est un logiciel d'administration développé initiallement au rezometz. Il +# se veut agnostique au réseau considéré, de manière à être installable en +# quelques clics. +# +# Copyright © 2018 Maël Kervella +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-31 14:05+0000\n" +"PO-Revision-Date: 2018-03-31 16:09+0002\n" +"Last-Translator: Maël Kervella \n" +"Language-Team: \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cotisations/acl.py:41 +msgid "You don't have the rights to see this application." +msgstr "Vous n'avez pas les droits de voir cette application." + +#: cotisations/forms.py:63 cotisations/forms.py:298 cotisations/models.py:86 +msgid "Cheque number" +msgstr "Numéro de chèque" + +#: cotisations/forms.py:64 cotisations/forms.py:299 +msgid "Not specified" +msgstr "Non renseigné" + +#: cotisations/forms.py:66 cotisations/forms.py:301 +msgid "Select a payment method" +msgstr "Sélectionnez un moyen de paiement" + +#: cotisations/forms.py:83, cotisations/forms.py:325 +msgid "A payment method must be specified." +msgstr "Un moyen de paiement doit être renseigné." + +#: cotisations/forms.py:87, cotisations/forms.py:330 +msgid "A cheque number and a bank must be specified." +msgstr "Un numéro de chèqe et une banque doivent être renseignés." + +#: cotisations/forms.py:114 cotisations/forms.py:129 cotisations/forms.py:144 +#: cotisations/models.py:243 +msgid "Article" +msgstr "Article" + +#: cotisations/forms.py:118 cotisations/forms.py:133 cotisations/forms.py:147 +msgid "Quantity" +msgstr "Quantité" + +#: cotisations/forms.py:150 +msgid "Paid" +msgstr "Payé" + +#: cotisations/forms.py:152 +msgid "Recipient" +msgstr "Destinataire" + +#: cotisations/forms.py:154 +msgid "Address" +msgstr "Adresse" + +#: cotisations/forms.py:159 +msgid "Invoice number" +msgstr "Numéro de facture" + +#: cotisations/forms.py:174 cotisations/models.py:403 +msgid "Member" +msgstr "Adhérent" + +#: cotisations/forms.py:176 +msgid "Select the proprietary member" +msgstr "Sélectionnez l'adhérent propriétaire" + +#: cotisations/forms.py:177 +msgid "Validated invoice" +msgstr "Facture validée" + +#: cotisations/forms.py:190 +msgid "Article name" +msgstr "Nom de l'article" + +#: cotisations/forms.py:199 +msgid "Existing articles" +msgstr "Articles disponibles" + +#: cotisations/forms.py:225 +msgid "Payment method name" +msgstr "Nom du moyen de paiement" + +#: cotisations/forms.py:226 cotisations/models.py:505 +msgid "Payment type" +msgstr "Type de paiement" + +#: cotisations/forms.py:228 +msgid "" +"The payement type is used for specific behaviour. The \"cheque\" " +"type means a cheque number and a bank name may be added when " +"using this payment method." +msgstr "" +"Le type de paiement est utilisé pour des comportements spécifiques. Le type " +"\"chèque\" permet de spécifier un numéro de chèque et une banque lors de " +" l'utilisation de cette méthode." + +#: cotisations/forms.py:241 +msgid "Existing payment method" +msgstr "Moyen de paiements disponibles" + +#: cotisations/forms.py:266 +msgid "Bank name" +msgstr "Nom de la banque" + +#: cotisations/forms.py:276 +msgid "Existing banks" +msgstr "Banques disponibles" + +#: cotisations/forms.py:337 cotisations/models.py:238 +msgid "Amount" +msgstr "Montant" + +#: cotisations/forms.py:350 +#, python-format +msgid "" +"Requested amount is too small. Minimum amount possible : " +"%(min_online_amount)s €." +msgstr "" +"Montant demandé est trop faible. Montant minimal possible : " +"%(min_online_amount)s €" + +#: cotisations/forms.py:359 +#, python-format +msgid "" +"Requested amount is too high. Your balance can't exceed " +"%(max_online_balance)s €." +msgstr "" +"Montant demandé trop grand. Votre solde ne peut excéder " +"%(max_online_balance)s €" + +#: cotisations/models.py:90 +msgid "Date" +msgstr "Date" + +#: cotisations/models.py:95 +msgid "Validated" +msgstr "Validé" + +#: cotisations/models.py:100 +msgid "Controlled" +msgstr "Controllé" + +#: cotisations/models.py:107 +msgid "Can change the \"controlled\" state" +msgstr "Peut modifier l'état \"controllé\"" + +#: cotisations/models.py:109 +msgid "Can create a custom PDF invoice" +msgstr "Peut crée une facture PDF personnalisée" + +#: cotisations/models.py:110 +msgid "Can see an invoice's details" +msgstr "Peut voir les détails d'une facture" + +#: cotisations/models.py:111 +msgid "Can edit all the previous invoices" +msgstr "Peut modifier toutes les factures existantes" + +#: cotisations/models.py:113 cotisations/models.py:233 +msgid "Invoice" +msgstr "Facture" + +#: cotisations/models.py:114 +msgid "Invoices" +msgstr "Factures" + +#: cotisations/models.py:152 cotisations/models.py:186 +msgid "You don't have the right to edit an invoice." +msgstr "Vous n'avez pas le droit de modifier une facture." + +#: cotisations/models.py:154 +msgid "You don't have the right to edit this user's invoices." +msgstr "Vous n'avez pas le droit de modifier les facture de cette utilisateur." + +#: cotisations/models.py:157 +msgid "" +"You don't have the right to edit an invoice already controlled or " +"invalidated." +msgstr "" +"Vous n'avez pas le droit de modifier une facture précedement controllée " +"ou invalidée." + +#: cotisations/models.py:163 +msgid "You don't have the right to delete an invoice." +msgstr "Vous n'avez pas le droit de supprimer une facture." + +#: cotisations/models.py:165 +msgid "You don't have the right to delete this user's invoices." +msgstr "Vous n'avez pas le droit de supprimer les factures de cet utilisateur." + +#: cotisations/models.py:167 +msgid "" +"You don't have the right to delete an invoice already controlled or " +"invalidated." +msgstr "" +"Vous n'avez pas le droit de supprimer une facture précedement controllée " +"ou invalidée." + +#: cotisations/models.py:174 +msgid "You don't have the right to see someone else's invoices history." +msgstr "" +"Vous n'avez pas le droit de voir l'historique de la facture de " +"quelqu'un d'autre." + +#: cotisations/models.py:176 +msgid "The invoice has been invalidated." +msgstr "La facture a été invalidée." + +#: cotisations/models.py:182 +msgid "You don't have the right to edit the controlled state." +msgstr "Vous n'avez pas le droit de modifier l'état \"controllé\"." + +#: cotisations/models.py:224 cotisations/models.py:409 +#: cotisations/models.py:536 +msgid "Connexion" +msgstr "Connexion" + +#: cotisations/models.py:225 cotisations/models.py:410 +msgid "Membership" +msgstr "Adhésion" + +#: cotisations/models.py:226 cotisations/models.py:405 +#: cotisations/models.py:411 cotisations/models.py:538 +msgid "Both of them" +msgstr "Les deux" + +#: cotisations/models.py:250 +msgid "Price" +msgstr "Prix" + +#: cotisations/models.py:255 cotisations/models.py:428 +msgid "Duration (in whole month)" +msgstr "Durée (en mois entiers)" + +#: cotisations/models.py:263 cotisations/models.py:442 +#: cotisations/models.py:552 +msgid "Type of cotisation" +msgstr "Type de cotisation" + +#: cotisations/models.py:268 +msgid "Can see a purchase's details" +msgstr "Peut voir les détails d'un achat" + +#: cotisations/models.py:269 +msgid "Can edit all the previous purchases" +msgstr "Peut voir les achats existants" + +#: cotisations/models.py:271 cotisations/models.py:546 +msgid "Purchase" +msgstr "Achat" + +#: cotisations/models.py:272 +msgid "Purchases" +msgstr "Achat" + +#: cotisations/models.py:328 +msgid "A cotisation should always have a duration." +msgstr "Une cotisation devrait toujours avoir une durée." + +#: cotisations/models.py:335 +msgid "You don't have the right to edit the purchases." +msgstr "Vous n'avez pas le droit de modifier les achats." + +#: cotisations/models.py:337 +msgid "You don't have the right to edit this user's purchases." +msgstr "Vous n'avez pas le droit de modifier les achats de cet utilisateur." + +#: cotisations/models.py:340 +msgid "" +"You don't have the right to edit a purchase already controlled or " +"invalidated." +msgstr "" +"Vous n'avez pas le droit de modifier un achat précédement controllé ou " +"invalidé." + +#: cotisations/models.py:346 +msgid "You don't have the right to delete a purchase." +msgstr "Vous n'avez pas le droit de supprimer un achat." + +#: cotisations/models.py:348 +msgid "You don't have the right to delete this user's purchases." +msgstr "Vous n'avez pas le droit de supprimer les achats de cet utilisateur." + +#: cotisations/models.py:350 +msgid "" +"You don't have the right to delete a purchase already controlled or " +"invalidated." +msgstr "" +"Vous n'avez pas le droit de supprimer un achat précédement controllé ou " +"invalidé." + +#: cotisations/models.py:357 +msgid "You don't have the right to see someone else's purchase history." +msgstr "Vous n'avez pas le droit de voir l'historique d'un achat de quelqu'un d'autre." + +#: cotisations/models.py:404 +msgid "Club" +msgstr "Club" + +#: cotisations/models.py:416 +msgid "Designation" +msgstr "Désignation" + +#: cotisations/models.py:422 +msgid "Unitary price" +msgstr "Prix unitaire" + +#: cotisations/models.py:434 +msgid "Type of users concerned" +msgstr "Type d'utilisateurs concernés" + +#: cotisations/models.py:449 +msgid "Can see an article's details" +msgstr "Peut voir les détails d'un article" + +#: cotisations/models.py:457 +msgid "Solde is a reserved article name" +msgstr "Solde est un nom d'article réservé" + +#: cotisations/models.py:461 +msgid "Duration must be specified for a cotisation" +msgstr "La durée doit être spécifiée pour une cotisation" + +#: cotisations/models.py:474 +msgid "Name" +msgstr "Nom" + +#: cotisations/models.py:479 +msgid "Can see a bank's details" +msgstr "Peut voir les détails d'une banque" + +#: cotisations/models.py:481 +msgid "Bank" +msgstr "Banque" + +#: cotisations/models.py:482 +msgid "Banks" +msgstr "Banques" + +#: cotisations/models.py:493 +msgid "Standard" +msgstr "Standard" + +#: cotisations/models.py:494 +msgid "Cheque" +msgstr "Chèque" + +#: cotisations/models.py:500 +msgid "Method" +msgstr "Moyen" + +#: cotisations/models.py:510 +msgid "Can see a payement's details" +msgstr "Peut voir les détails d'un paiement" + +#: cotisations/models.py:512 +msgid "Payment method" +msgstr "Moyen de paiement" + +#: cotisations/models.py:513 +msgid "Payment methods" +msgstr "Moyens de paiement" + +#: cotisations/models.py:526 +msgid "You cannot have multiple payment method of type cheque" +msgstr "Vous ne pouvez avoir plusieurs moyens de paiement de type chèque" + +#: cotisations/models.py:555 +msgid "Starting date" +msgstr "Date de début" + +#: cotisations/models.py:558 +msgid "Ending date" +msgstr "Date de fin" + +#: cotisations/models.py:563 +msgid "Can see a cotisation's details" +msgstr "Peut voir les détails d'une cotisation" + +#: cotisations/models.py:564 +msgid "Can edit the previous cotisations" +msgstr "Peut voir les cotisations existantes" + +#: cotisations/models.py:569 +msgid "You don't have the right to edit a cotisation." +msgstr "Vous n'avez pas le droit de modifier une cotisation." + +#: cotisations/models.py:572 +msgid "" +"You don't have the right to edit a cotisation already controlled or " +"invalidated." +msgstr "" +"Vous n'avez pas le droit de modifier une cotisaiton précédement controllée " +"ou invalidée." + +#: cotisations/models.py:578 +msgid "You don't have the right to delete a cotisation." +msgstr "Vous n'avez pas le droit de supprimer une cotisation." + +#: cotisations/models.py:580 +msgid "" +"You don't have the right to delete a cotisation already controlled or " +"invalidated." +msgstr "" +"Vous n'avez pas le droit de supprimer une cotisation précédement controllée " +"ou invalidée." + +#: cotisations/models.py:587 +msgid "You don't have the right to see someone else's cotisation history." +msgstr "" +"Vous n'avez pas le droit de voir l'historique d'une cotisation de " +"quelqu'un d'autre." + +#: cotisations/payment.py:26 +#, python-format +msgid "The payment of %(amount)s € has been accepted." +msgstr "Le paiement de %(amount)s € a été accepté." + +#: cotisations/payment.py:38 +msgid "The payment has been refused." +msgstr "Le paiment a été refusé." + +#: cotisations/views.py:133 +msgid "Your balance is too low for this operation." +msgstr "Votre solde est trop faible pour cette opération." + +#: cotisations/views.py:163 +#, python-format +msgid "" +"The cotisation of %(member_name)s has been extended to " +"%(end_date)s." +msgstr "La cotisation de %(member_name)s a été étendu jusqu'à %(end_date)s." + +#: cotisations/views.py:172 +msgid "The invoice has been created." +msgstr "La facture a été créée." + +#: cotisations/views.py:180 cotisations/views.py:777 +msgid "You need to choose at least one article." +msgstr "Vous devez choisir au moins un article." + +#: cotisations/views.py:292 +msgid "The invoice has been successfully edited." +msgstr "La facture a été crée avec succès." + +#: cotisations/views.py:314 +msgid "The invoice has been successfully deleted." +msgstr "La facture a été supprimée avec succès." + +#: cotisations/views.py:351 +msgid "Balance successfully updated." +msgstr "Solde mis à jour avec succès." + +#: cotisations/views.py:376 +msgid "The article has been successfully created." +msgstr "L'article a été créé avec succès." + +#: cotisations/views.py:400 +msgid "The article has been successfully edited." +msgstr "L'article a été modifié avec succès." + +#: cotisations/views.py:419 +msgid "The article(s) have been successfully deleted." +msgstr "L'(es) article(s) a(ont) été supprimé(s) avec succès. " + +#: cotisations/views.py:441 +msgid "The payment method has been successfully created." +msgstr "Le moyen de paiement a été créé avec succès." + +#: cotisations/views.py:465 +msgid "The payement method has been successfully edited." +msgstr "Le moyen de paiement a été modifié avec succès." + +#: cotisations/views.py:488 +#, python-format +msgid "" +"The payment method %(method_name)s has been successfully " +"deleted." +msgstr "Le moyen de paiement %(method_name)s a été supprimé avec succès." + +#: cotisations/views.py:496 +#, python-format +msgid "" +"The payment method %(method_name)s can't be deleted " +"because there are invoices using it." +msgstr "" +"Le moyen de paiement %(method_name)s ne peut pas être mis à jour car il y a " +"des factures l'utilisant." + +#: cotisations/views.py:519 +msgid "The bank has been successfully created." +msgstr "La banque a été crée avec succès." + +#: cotisations/views.py:543 +msgid "The bank has been successfully edited" +msgstr "La banque a été modifée avec succès." + +#: cotisations/views.py:566 +#, python-format +msgid "" +"The bank %(bank_name)s has been successfully deleted." +msgstr "La banque %(bank_name)s a été supprimée avec succès." + +#: cotisations/views.py:574 +#, python-format +msgid "" +"The bank %(bank_name)s can't be deleted because there " +"are invoices using it." +msgstr "" +"La banque %(bank_name)s ne peut pas être supprimée car il y a des factures " +"qui l'utilisent." + +#: cotisations/views.py:730 +msgid "The balance is too low for this operation." +msgstr "Le solde est trop faible pour cette opération." + +#: cotisations/views.py:760 +#, python-format +msgid "" +"The cotisation of %(member_name)s has been successfully " +"extended to %(end_date)s." +msgstr "La cotisation de %(member_name)s a été prolongée jusqu'à %(end_date)s." + +#: cotisations/views.py:769 +msgid "The invoice has been successuflly created." +msgstr "La facture a été créée avec succès." + +#: cotisations/views.py:796 +msgid "Online payment is disabled." +msgstr "Le paiement en ligne est désactivé." diff --git a/cotisations/models.py b/cotisations/models.py index c529c281..f46598b2 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -105,7 +105,7 @@ class Facture(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): abstract = False permissions = ( # TODO : change facture to invoice - ('change_facture_control', _("Can change the controlled state")), + ('change_facture_control', _("Can change the \"controlled\" state")), # TODO : seems more likely to be call create_facture_pdf or create_invoice_pdf ('change_facture_pdf', _("Can create a custom PDF invoice")), ('view_facture', _("Can see an invoice's details")), @@ -185,7 +185,7 @@ class Facture(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): @staticmethod def can_change_control(user_request, *args, **kwargs): - return user_request.has_perm('cotisations.change_facture_control'), _("You don't have the right to edit the controlled state.") + return user_request.has_perm('cotisations.change_facture_control'), _("You don't have the right to edit the \"controlled\" state.") @staticmethod def can_change_pdf(user_request, *args, **kwargs): @@ -338,7 +338,7 @@ class Vente(RevMixin, AclMixin, models.Model): def can_edit(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.change_vente'): - return False, _("You don't have the rights to edit the purchases.") + return False, _("You don't have the right to edit the purchases.") elif not user_request.has_perm('cotisations.change_all_facture') and not self.facture.user.can_edit(user_request, *args, **kwargs)[0]: return False, _("You don't have the right to edit this user's purchases.") elif not user_request.has_perm('cotisations.change_all_vente') and\ @@ -541,7 +541,7 @@ class Cotisation(RevMixin, AclMixin, models.Model): COTISATION_TYPE = ( ('Connexion', _("Connexion")), - ('Adhesion', _("Adhesion")), + ('Adhesion', _("Membership")), ('All', _("Both of them")), ) @@ -591,7 +591,7 @@ class Cotisation(RevMixin, AclMixin, models.Model): def can_view(self, user_request, *args, **kwargs): if not user_request.has_perm('cotisations.view_cotisation') and\ self.vente.facture.user != user_request: - return False, _("You don't have the right to display someone else's cotisation history.") + return False, _("You don't have the right to see someone else's cotisation history.") else: return True, None diff --git a/cotisations/views.py b/cotisations/views.py index fd6256a9..9c05ade6 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -296,7 +296,7 @@ def del_facture(request, facture, factureid): if request.method == "POST": messages.success( request, - _("The invoice has been successfully deleted") + _("The invoice has been successfully deleted.") ) return redirect(reverse('cotisations:index')) return form({ @@ -327,7 +327,7 @@ def credit_solde(request, user, userid): new_vente.save() messages.success( request, - _("Banlance successfully updated.") + _("Balance successfully updated.") ) return redirect(reverse('cotisations:index')) return form({'factureform': facture, 'action_name' : 'Créditer'}, 'cotisations/facture.html', request) @@ -442,14 +442,14 @@ def del_paiement(request, instances): messages.success( request, _("The payment method %(method_name)s has been \ - successfully deleted") % { + successfully deleted.") % { method_name: paiement_del } ) except ProtectedError: messages.error( request, - _("The payment method %(method_name) can't be deleted \ + _("The payment method %(method_name)s can't be deleted \ because there are invoices using it.") % { method_name: paiement_del } @@ -677,8 +677,8 @@ def new_facture_solde(request, userid): for art_item in articles if art_item.cleaned_data): messages.success( request, - _("The balance of %(member_name)s has been successfully \ - extended to %(end_date)s") % { + _("The cotisation of %(member_name)s has been successfully \ + extended to %(end_date)s.") % { member_name: user.pseudo, end_date: user.end_adhesion() } diff --git a/re2o/settings.py b/re2o/settings.py index c101460b..e7853141 100644 --- a/re2o/settings.py +++ b/re2o/settings.py @@ -82,6 +82,7 @@ INSTALLED_APPS = ( MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', @@ -120,7 +121,7 @@ WSGI_APPLICATION = 're2o.wsgi.application' # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ -LANGUAGE_CODE = 'fr-fr' +LANGUAGE_CODE = 'en' TIME_ZONE = 'Europe/Paris'