diff --git a/api/acl.py b/api/acl.py index c2db9862..490b88c7 100644 --- a/api/acl.py +++ b/api/acl.py @@ -74,6 +74,6 @@ def can_view(user): can = user.has_perm(permission) return ( can, - None if can else _("You don't have the right to see this" " application."), + None if can else _("You don't have the right to view this application."), (permission,), ) diff --git a/api/locale/fr/LC_MESSAGES/django.po b/api/locale/fr/LC_MESSAGES/django.po index b906b937..aba3d217 100644 --- a/api/locale/fr/LC_MESSAGES/django.po +++ b/api/locale/fr/LC_MESSAGES/django.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: 2.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-05 19:48+0200\n" +"POT-Creation-Date: 2019-11-19 23:43+0100\n" "PO-Revision-Date: 2019-01-07 01:37+0100\n" "Last-Translator: Laouen Fernet \n" "Language-Team: \n" @@ -31,10 +31,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: api/acl.py:74 -msgid "You don't have the right to see this application." +#: api/acl.py:77 +msgid "You don't have the right to view this application." msgstr "Vous n'avez pas le droit de voir cette application." -#: api/authentication.py:49 +#: api/authentication.py:47 msgid "The token has expired." msgstr "Le jeton a expiré." diff --git a/cotisations/forms.py b/cotisations/forms.py index 6f4a9a45..76db358c 100644 --- a/cotisations/forms.py +++ b/cotisations/forms.py @@ -116,7 +116,7 @@ class DiscountForm(Form): """ is_relative = forms.BooleanField( - label=_("Discount is on percentage."), required=False + label=_("Discount is in percentage."), required=False ) discount = forms.DecimalField( label=_("Discount"), @@ -136,7 +136,7 @@ class DiscountForm(Form): else: amount = discount if amount: - name = _("{}% discount") if is_relative else _("{}€ discount") + name = _("{}% discount") if is_relative else _("{} € discount") name = name.format(discount) Vente.objects.create(facture=invoice, name=name, prix=-amount, number=1) @@ -184,7 +184,7 @@ class DelArticleForm(FormRevMixin, Form): articles = forms.ModelMultipleChoiceField( queryset=Article.objects.none(), - label=_("Available articles"), + label=_("Current articles"), widget=forms.CheckboxSelectMultiple, ) @@ -226,7 +226,7 @@ class DelPaiementForm(FormRevMixin, Form): # TODO : change paiement to payment paiements = forms.ModelMultipleChoiceField( queryset=Paiement.objects.none(), - label=_("Available payment methods"), + label=_("Current payment methods"), widget=forms.CheckboxSelectMultiple, ) @@ -266,7 +266,7 @@ class DelBanqueForm(FormRevMixin, Form): # TODO : change banque to bank banques = forms.ModelMultipleChoiceField( queryset=Banque.objects.none(), - label=_("Available banks"), + label=_("Current banks"), widget=forms.CheckboxSelectMultiple, ) diff --git a/cotisations/locale/fr/LC_MESSAGES/django.po b/cotisations/locale/fr/LC_MESSAGES/django.po index 943bb8e7..1d68e1fe 100644 --- a/cotisations/locale/fr/LC_MESSAGES/django.po +++ b/cotisations/locale/fr/LC_MESSAGES/django.po @@ -1,5 +1,5 @@ # 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 +# se veut agnostique au réseau considéré, de manière à être installable en # quelques clics. # # Copyright © 2018 Maël Kervella @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: 2.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-05 19:48+0200\n" +"POT-Creation-Date: 2019-11-20 01:24+0100\n" "PO-Revision-Date: 2018-03-31 16:09+0002\n" "Last-Translator: Laouen Fernet \n" "Language: fr_FR\n" @@ -29,33 +29,33 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: cotisations/acl.py:45 +#: cotisations/acl.py:47 msgid "You don't have the right to view this application." msgstr "Vous n'avez pas le droit de voir cette application." -#: cotisations/forms.py:66 cotisations/forms.py:298 +#: cotisations/forms.py:70 cotisations/forms.py:296 msgid "Select a payment method" msgstr "Sélectionnez un moyen de paiement" -#: cotisations/forms.py:69 cotisations/models.py:602 +#: cotisations/forms.py:73 cotisations/models.py:676 msgid "Member" msgstr "Adhérent" -#: cotisations/forms.py:71 +#: cotisations/forms.py:74 msgid "Select the proprietary member" msgstr "Sélectionnez l'adhérent propriétaire" -#: cotisations/forms.py:72 +#: cotisations/forms.py:75 msgid "Validated invoice" msgstr "Facture validée" -#: cotisations/forms.py:85 +#: cotisations/forms.py:87 msgid "A payment method must be specified." msgstr "Un moyen de paiement doit être renseigné." -#: cotisations/forms.py:97 +#: cotisations/forms.py:98 #: cotisations/templates/cotisations/aff_article.html:33 -#: cotisations/templates/cotisations/facture.html:67 +#: cotisations/templates/cotisations/facture.html:64 msgid "Article" msgstr "Article" @@ -65,51 +65,51 @@ msgid "Quantity" msgstr "Quantité" #: cotisations/forms.py:119 -msgid "Discount is on percentage." +msgid "Discount is in percentage." msgstr "La réduction est en pourcentage." -#: cotisations/forms.py:123 cotisations/templates/cotisations/facture.html:78 +#: cotisations/forms.py:122 cotisations/templates/cotisations/facture.html:75 msgid "Discount" msgstr "Réduction" -#: cotisations/forms.py:140 +#: cotisations/forms.py:139 #, python-format msgid "{}% discount" msgstr "{}% de réduction" -#: cotisations/forms.py:140 -msgid "{}€ discount" -msgstr "{}€ de réduction" +#: cotisations/forms.py:139 +msgid "{} € discount" +msgstr "{} € de réduction" -#: cotisations/forms.py:179 +#: cotisations/forms.py:176 msgid "Article name" msgstr "Nom de l'article" -#: cotisations/forms.py:189 cotisations/templates/cotisations/sidebar.html:55 -msgid "Available articles" -msgstr "Articles disponibles" +#: cotisations/forms.py:187 +msgid "Current articles" +msgstr "Articles actuels" -#: cotisations/forms.py:217 +#: cotisations/forms.py:216 msgid "Payment method name" msgstr "Nom du moyen de paiement" #: cotisations/forms.py:229 -msgid "Available payment methods" -msgstr "Moyens de paiement disponibles" +msgid "Current payment methods" +msgstr "Moyens de paiement actuels" -#: cotisations/forms.py:255 +#: cotisations/forms.py:256 msgid "Bank name" msgstr "Nom de la banque" -#: cotisations/forms.py:267 -msgid "Available banks" -msgstr "Banques disponibles" +#: cotisations/forms.py:269 +msgid "Current banks" +msgstr "Banques actuelles" -#: cotisations/forms.py:286 +#: cotisations/forms.py:288 msgid "Amount" msgstr "Montant" -#: cotisations/forms.py:291 +#: cotisations/forms.py:290 #: cotisations/templates/cotisations/aff_cost_estimate.html:42 #: cotisations/templates/cotisations/aff_cotisations.html:44 #: cotisations/templates/cotisations/aff_custom_invoice.html:42 @@ -117,7 +117,7 @@ msgstr "Montant" msgid "Payment method" msgstr "Moyen de paiement" -#: cotisations/forms.py:312 +#: cotisations/forms.py:314 #, python-format msgid "" "Requested amount is too high. Your balance can't exceed " @@ -126,55 +126,52 @@ msgstr "" "Le montant demandé est trop grand. Votre solde ne peut excéder " "%(max_online_balance)s €." -#: cotisations/models.py:63 -#: cotisations/templates/cotisations/aff_cost_estimate.html:46 -#: cotisations/templates/cotisations/aff_cotisations.html:48 -#: cotisations/templates/cotisations/aff_custom_invoice.html:46 -#: cotisations/templates/cotisations/control.html:70 -msgid "Date" -msgstr "Date" +#: cotisations/models.py:59 +msgid "date" +msgstr "date" -#: cotisations/models.py:139 +#: cotisations/models.py:130 msgid "cheque number" msgstr "numéro de chèque" -#: cotisations/models.py:144 +#: cotisations/models.py:133 msgid "validated" -msgstr "validée" +msgstr "validé" -#: cotisations/models.py:149 +#: cotisations/models.py:135 msgid "controlled" -msgstr "contrôlée" +msgstr "contrôlé" -#: cotisations/models.py:157 +#: cotisations/models.py:141 msgid "Can edit the \"controlled\" state" msgstr "Peut modifier l'état \"contrôlé\"" -#: cotisations/models.py:159 +#: cotisations/models.py:142 msgid "Can view an invoice object" msgstr "Peut voir un objet facture" -#: cotisations/models.py:161 +#: cotisations/models.py:143 msgid "Can edit all the previous invoices" msgstr "Peut modifier toutes les factures précédentes" -#: cotisations/models.py:163 cotisations/models.py:396 +#: cotisations/models.py:145 cotisations/models.py:431 cotisations/views.py:378 +#: cotisations/views.py:573 msgid "invoice" msgstr "facture" -#: cotisations/models.py:164 +#: cotisations/models.py:146 msgid "invoices" msgstr "factures" -#: cotisations/models.py:173 +#: cotisations/models.py:160 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:176 +#: cotisations/models.py:168 msgid "You don't have the right to edit this user's invoices." msgstr "Vous n'avez pas le droit de modifier les factures de cet utilisateur." -#: cotisations/models.py:180 +#: cotisations/models.py:177 msgid "" "You don't have the right to edit an invoice already controlled or " "invalidated." @@ -182,15 +179,15 @@ msgstr "" "Vous n'avez pas le droit de modifier une facture précédemment contrôlée ou " "invalidée." -#: cotisations/models.py:187 +#: cotisations/models.py:192 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:190 +#: cotisations/models.py:200 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:194 +#: cotisations/models.py:209 msgid "" "You don't have the right to delete an invoice already controlled or " "invalidated." @@ -198,137 +195,137 @@ msgstr "" "Vous n'avez pas le droit de supprimer une facture précédemment contrôlée ou " "invalidée." -#: cotisations/models.py:202 +#: cotisations/models.py:223 msgid "You don't have the right to view someone else's invoices history." msgstr "" "Vous n'avez pas le droit de voir l'historique des factures d'un autre " "utilisateur." -#: cotisations/models.py:205 +#: cotisations/models.py:231 msgid "The invoice has been invalidated." msgstr "La facture a été invalidée." -#: cotisations/models.py:217 +#: cotisations/models.py:246 msgid "You don't have the right to edit the \"controlled\" state." msgstr "Vous n'avez pas le droit de modifier le statut \"contrôlé\"." -#: cotisations/models.py:231 -msgid "There are no payment method which you can use." -msgstr "Il n'y a pas de moyen de paiement que vous puissiez utiliser." +#: cotisations/models.py:265 +msgid "There are no payment methods that you can use." +msgstr "Il n'y a pas de moyens de paiement que vous puissiez utiliser." -#: cotisations/models.py:233 -msgid "There are no article that you can buy." -msgstr "Il n'y a pas d'article que vous puissiez acheter." +#: cotisations/models.py:271 +msgid "There are no articles that you can buy." +msgstr "Il n'y a pas d'articles que vous puissiez acheter." -#: cotisations/models.py:295 +#: cotisations/models.py:347 msgid "Can view a custom invoice object" msgstr "Peut voir un objet facture personnalisée" -#: cotisations/models.py:299 -#: cotisations/templates/cotisations/aff_cost_estimate.html:36 -#: cotisations/templates/cotisations/aff_custom_invoice.html:36 -msgid "Recipient" -msgstr "Destinataire" +#: cotisations/models.py:349 +msgid "recipient" +msgstr "destinataire" -#: cotisations/models.py:303 -#: cotisations/templates/cotisations/aff_paiement.html:33 -msgid "Payment type" -msgstr "Type de paiement" +#: cotisations/models.py:350 +msgid "payment type" +msgstr "type de paiement" -#: cotisations/models.py:307 -msgid "Address" -msgstr "Adresse" +#: cotisations/models.py:351 +msgid "address" +msgstr "adresse" -#: cotisations/models.py:310 -#: cotisations/templates/cotisations/aff_custom_invoice.html:54 -msgid "Paid" -msgstr "Payé" +#: cotisations/models.py:352 +msgid "paid" +msgstr "payé" -#: cotisations/models.py:314 -msgid "Remark" -msgstr "Remarque" +#: cotisations/models.py:353 +msgid "remark" +msgstr "remarque" -#: cotisations/models.py:323 +#: cotisations/models.py:358 msgid "Can view a cost estimate object" msgstr "Peut voir un objet devis" -#: cotisations/models.py:326 -msgid "Period of validity" -msgstr "Période de validité" +#: cotisations/models.py:361 +msgid "period of validity" +msgstr "période de validité" -#: cotisations/models.py:363 +#: cotisations/models.py:396 msgid "You don't have the right to delete a cost estimate." msgstr "Vous n'avez pas le droit de supprimer un devis." -#: cotisations/models.py:366 +#: cotisations/models.py:402 msgid "The cost estimate has an invoice and can't be deleted." msgstr "Le devis a une facture et ne peut pas être supprimé." -#: cotisations/models.py:387 cotisations/models.py:608 -#: cotisations/models.py:875 +#: cotisations/models.py:424 cotisations/models.py:682 +#: cotisations/models.py:940 msgid "Connection" msgstr "Connexion" -#: cotisations/models.py:388 cotisations/models.py:609 -#: cotisations/models.py:876 +#: cotisations/models.py:425 cotisations/models.py:683 +#: cotisations/models.py:941 msgid "Membership" msgstr "Adhésion" -#: cotisations/models.py:389 cotisations/models.py:604 -#: cotisations/models.py:610 cotisations/models.py:877 +#: cotisations/models.py:426 cotisations/models.py:678 +#: cotisations/models.py:684 cotisations/models.py:942 msgid "Both of them" msgstr "Les deux" -#: cotisations/models.py:401 +#: cotisations/models.py:435 msgid "amount" msgstr "montant" -#: cotisations/models.py:406 +#: cotisations/models.py:438 msgid "article" msgstr "article" -#: cotisations/models.py:413 +#: cotisations/models.py:441 msgid "price" msgstr "prix" -#: cotisations/models.py:418 cotisations/models.py:627 +#: cotisations/models.py:444 cotisations/models.py:696 msgid "duration (in months)" msgstr "durée (en mois)" -#: cotisations/models.py:426 cotisations/models.py:641 -#: cotisations/models.py:891 +#: cotisations/models.py:450 cotisations/models.py:702 +msgid "duration (in days, will be added to duration in months)" +msgstr "durée (en jours, sera ajoutée à la durée en mois)" + +#: cotisations/models.py:458 cotisations/models.py:716 +#: cotisations/models.py:953 msgid "subscription type" msgstr "type de cotisation" -#: cotisations/models.py:431 +#: cotisations/models.py:463 msgid "Can view a purchase object" msgstr "Peut voir un objet achat" -#: cotisations/models.py:432 +#: cotisations/models.py:464 msgid "Can edit all the previous purchases" msgstr "Peut modifier tous les achats précédents" -#: cotisations/models.py:434 cotisations/models.py:885 +#: cotisations/models.py:466 cotisations/models.py:947 msgid "purchase" msgstr "achat" -#: cotisations/models.py:435 +#: cotisations/models.py:467 msgid "purchases" msgstr "achats" -#: cotisations/models.py:502 cotisations/models.py:665 +#: cotisations/models.py:539 cotisations/models.py:736 msgid "Duration must be specified for a subscription." -msgstr "La durée de la cotisation doit être indiquée." +msgstr "La durée doit être renseignée pour une cotisation." -#: cotisations/models.py:509 -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:550 +msgid "You don't have the right to edit a purchase." +msgstr "Vous n'avez pas le droit de modifier un achat." -#: cotisations/models.py:514 +#: cotisations/models.py:556 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:518 +#: cotisations/models.py:565 msgid "" "You don't have the right to edit a purchase already controlled or " "invalidated." @@ -336,15 +333,15 @@ msgstr "" "Vous n'avez pas le droit de modifier un achat précédemment contrôlé ou " "invalidé." -#: cotisations/models.py:525 +#: cotisations/models.py:580 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:527 +#: cotisations/models.py:586 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:530 +#: cotisations/models.py:593 msgid "" "You don't have the right to delete a purchase already controlled or " "invalidated." @@ -352,134 +349,134 @@ msgstr "" "Vous n'avez pas le droit de supprimer un achat précédemment contrôlé ou " "invalidé." -#: cotisations/models.py:538 +#: cotisations/models.py:609 msgid "You don't have the right to view someone else's purchase history." msgstr "" "Vous n'avez pas le droit de voir l'historique des achats d'un autre " "utilisateur." -#: cotisations/models.py:603 +#: cotisations/models.py:677 msgid "Club" msgstr "Club" -#: cotisations/models.py:615 +#: cotisations/models.py:687 msgid "designation" msgstr "désignation" -#: cotisations/models.py:621 +#: cotisations/models.py:690 msgid "unit price" msgstr "prix unitaire" -#: cotisations/models.py:633 +#: cotisations/models.py:708 msgid "type of users concerned" msgstr "type d'utilisateurs concernés" -#: cotisations/models.py:645 cotisations/models.py:756 +#: cotisations/models.py:719 cotisations/models.py:820 msgid "is available for every user" msgstr "est disponible pour chaque utilisateur" -#: cotisations/models.py:652 +#: cotisations/models.py:726 msgid "Can view an article object" msgstr "Peut voir un objet article" -#: cotisations/models.py:653 +#: cotisations/models.py:727 msgid "Can buy every article" msgstr "Peut acheter chaque article" -#: cotisations/models.py:661 -msgid "Balance is a reserved article name." +#: cotisations/models.py:734 +msgid "Solde is a reserved article name." msgstr "Solde est un nom d'article réservé." -#: cotisations/models.py:686 +#: cotisations/models.py:759 msgid "You can't buy this article." msgstr "Vous ne pouvez pas acheter cet article." -#: cotisations/models.py:731 +#: cotisations/models.py:800 msgid "Can view a bank object" msgstr "Peut voir un objet banque" -#: cotisations/models.py:733 +#: cotisations/models.py:801 msgid "bank" msgstr "banque" -#: cotisations/models.py:734 +#: cotisations/models.py:802 msgid "banks" msgstr "banques" -#: cotisations/models.py:752 +#: cotisations/models.py:818 msgid "method" msgstr "moyen" -#: cotisations/models.py:761 +#: cotisations/models.py:825 msgid "is user balance" msgstr "est solde utilisateur" -#: cotisations/models.py:762 +#: cotisations/models.py:826 msgid "There should be only one balance payment method." msgstr "Il ne devrait y avoir qu'un moyen de paiement solde." -#: cotisations/models.py:768 +#: cotisations/models.py:832 msgid "Can view a payment method object" msgstr "Peut voir un objet moyen de paiement" -#: cotisations/models.py:769 +#: cotisations/models.py:833 msgid "Can use every payment method" msgstr "Peut utiliser chaque moyen de paiement" -#: cotisations/models.py:771 +#: cotisations/models.py:835 msgid "payment method" msgstr "moyen de paiement" -#: cotisations/models.py:772 +#: cotisations/models.py:836 msgid "payment methods" msgstr "moyens de paiement" -#: cotisations/models.py:810 cotisations/payment_methods/comnpay/views.py:63 +#: cotisations/models.py:875 cotisations/payment_methods/comnpay/views.py:62 #, python-format msgid "The subscription of %(member_name)s was extended to %(end_date)s." msgstr "La cotisation de %(member_name)s a été étendue au %(end_date)s." -#: cotisations/models.py:820 +#: cotisations/models.py:885 msgid "The invoice was created." msgstr "La facture a été créée." -#: cotisations/models.py:841 +#: cotisations/models.py:905 msgid "You can't use this payment method." msgstr "Vous ne pouvez pas utiliser ce moyen de paiement." -#: cotisations/models.py:859 -msgid "No custom payment method." -msgstr "Pas de moyen de paiement personnalisé." +#: cotisations/models.py:924 +msgid "No custom payment methods." +msgstr "Pas de moyens de paiement personnalisés." -#: cotisations/models.py:894 +#: cotisations/models.py:955 msgid "start date" msgstr "date de début" -#: cotisations/models.py:897 +#: cotisations/models.py:956 msgid "end date" msgstr "date de fin" -#: cotisations/models.py:902 +#: cotisations/models.py:960 msgid "Can view a subscription object" msgstr "Peut voir un objet cotisation" -#: cotisations/models.py:903 +#: cotisations/models.py:961 msgid "Can edit the previous subscriptions" msgstr "Peut modifier les cotisations précédentes" -#: cotisations/models.py:905 +#: cotisations/models.py:963 msgid "subscription" msgstr "cotisation" -#: cotisations/models.py:906 +#: cotisations/models.py:964 msgid "subscriptions" msgstr "cotisations" -#: cotisations/models.py:910 +#: cotisations/models.py:970 msgid "You don't have the right to edit a subscription." msgstr "Vous n'avez pas le droit de modifier une cotisation." -#: cotisations/models.py:914 +#: cotisations/models.py:979 msgid "" "You don't have the right to edit a subscription already controlled or " "invalidated." @@ -487,11 +484,11 @@ msgstr "" "Vous n'avez pas le droit de modifier une cotisation précédemment contrôlée " "ou invalidée." -#: cotisations/models.py:921 +#: cotisations/models.py:991 msgid "You don't have the right to delete a subscription." msgstr "Vous n'avez pas le droit de supprimer une cotisation." -#: cotisations/models.py:924 +#: cotisations/models.py:998 msgid "" "You don't have the right to delete a subscription already controlled or " "invalidated." @@ -499,7 +496,7 @@ msgstr "" "Vous n'avez pas le droit de supprimer une cotisation précédemment contrôlée " "ou invalidée." -#: cotisations/models.py:932 +#: cotisations/models.py:1014 msgid "You don't have the right to view someone else's subscription history." msgstr "" "Vous n'avez pas le droit de voir l'historique des cotisations d'un autre " @@ -510,44 +507,44 @@ msgid "user balance" msgstr "solde utilisateur" #: cotisations/payment_methods/balance/models.py:47 -msgid "Minimum balance" -msgstr "Solde minimum" +msgid "minimum balance" +msgstr "solde minimum" -#: cotisations/payment_methods/balance/models.py:48 +#: cotisations/payment_methods/balance/models.py:49 msgid "" "The minimal amount of money allowed for the balance at the end of a payment. " -"You can specify negative amount." +"You can specify a negative amount." msgstr "" "Le montant minimal d'argent autorisé pour le solde à la fin d'un paiement. " "Vous pouvez renseigner un montant négatif." #: cotisations/payment_methods/balance/models.py:57 -msgid "Maximum balance" -msgstr "Solde maximum" +msgid "maximum balance" +msgstr "solde maximum" #: cotisations/payment_methods/balance/models.py:58 msgid "The maximal amount of money allowed for the balance." msgstr "Le montant maximal d'argent autorisé pour le solde." #: cotisations/payment_methods/balance/models.py:66 -msgid "Allow user to credit their balance" -msgstr "Autorise l'utilisateur à créditer son solde" +msgid "allow user to credit their balance" +msgstr "autoriser l'utilisateur à créditer son solde" -#: cotisations/payment_methods/balance/models.py:79 -#: cotisations/payment_methods/balance/models.py:110 +#: cotisations/payment_methods/balance/models.py:76 +#: cotisations/payment_methods/balance/models.py:99 msgid "Your balance is too low for this operation." msgstr "Votre solde est trop bas pour cette opération." -#: cotisations/payment_methods/balance/models.py:97 +#: cotisations/payment_methods/balance/models.py:86 #: cotisations/validators.py:20 msgid "There is already a payment method for user balance." -msgstr "Il y a déjà un moyen de paiement pour le solde utilisateur." +msgstr "Il y a déjà un moyen de paiement pour le solde utilisateur." #: cotisations/payment_methods/cheque/models.py:36 -msgid "Cheque" -msgstr "Chèque" +msgid "cheque" +msgstr "chèque" -#: cotisations/payment_methods/cheque/views.py:47 +#: cotisations/payment_methods/cheque/views.py:45 msgid "You can't pay this invoice with a cheque." msgstr "Vous ne pouvez pas payer cette facture avec un chèque." @@ -555,32 +552,32 @@ msgstr "Vous ne pouvez pas payer cette facture avec un chèque." msgid "ComNpay" msgstr "ComNpay" -#: cotisations/payment_methods/comnpay/models.py:51 +#: cotisations/payment_methods/comnpay/models.py:48 msgid "ComNpay VAT Number" msgstr "Numéro de TVA de ComNpay" -#: cotisations/payment_methods/comnpay/models.py:57 +#: cotisations/payment_methods/comnpay/models.py:51 msgid "ComNpay secret key" msgstr "Clé secrète de ComNpay" -#: cotisations/payment_methods/comnpay/models.py:60 -msgid "Minimum payment" -msgstr "Paiement minimum" +#: cotisations/payment_methods/comnpay/models.py:54 +msgid "minimum payment" +msgstr "paiement minimum" -#: cotisations/payment_methods/comnpay/models.py:61 -msgid "The minimal amount of money you have to use when paying with ComNpay" +#: cotisations/payment_methods/comnpay/models.py:56 +msgid "The minimal amount of money you have to use when paying with ComNpay." msgstr "" -"Le montant minimal d'agent que vous devez utiliser en payant avec ComNpay" +"Le montant minimal d'argent que vous devez utiliser en payant avec ComNpay." -#: cotisations/payment_methods/comnpay/models.py:69 -msgid "Production mode enabled (production URL, instead of homologation)" -msgstr "Mode production activé (URL de production, au lieu d'homologation)" +#: cotisations/payment_methods/comnpay/models.py:66 +msgid "production mode enabled (production URL, instead of homologation)" +msgstr "mode production activé (URL de production, au lieu d'homologation)" -#: cotisations/payment_methods/comnpay/models.py:102 +#: cotisations/payment_methods/comnpay/models.py:101 msgid "Pay invoice number " msgstr "Payer la facture numéro " -#: cotisations/payment_methods/comnpay/models.py:114 +#: cotisations/payment_methods/comnpay/models.py:115 msgid "" "In order to pay your invoice with ComNpay, the price must be greater than {} " "€." @@ -592,11 +589,11 @@ msgstr "" msgid "The payment of %(amount)s € was accepted." msgstr "Le paiement de %(amount)s € a été accepté." -#: cotisations/payment_methods/comnpay/views.py:84 +#: cotisations/payment_methods/comnpay/views.py:80 msgid "The payment was refused." msgstr "Le paiment a été refusé." -#: cotisations/payment_methods/forms.py:60 +#: cotisations/payment_methods/forms.py:59 msgid "Special payment method" msgstr "Moyen de paiement spécial" @@ -608,15 +605,23 @@ msgstr "" "Attention : vous ne pourrez pas changer le moyen de paiement plus tard. Mais " "vous pourrez modifier les autres options." -#: cotisations/payment_methods/forms.py:72 -msgid "no" -msgstr "non" +#: cotisations/payment_methods/forms.py:74 +msgid "No" +msgstr "Non" -#: cotisations/payment_methods/note_kfet/forms.py:32 -msgid "pseudo note" -msgstr "pseudo note" +#: cotisations/payment_methods/free/models.py:36 +msgid "Free payment" +msgstr "Paiement gratuit" -#: cotisations/payment_methods/note_kfet/forms.py:35 +#: cotisations/payment_methods/free/models.py:54 +msgid "You can't pay this invoice for free." +msgstr "Vous ne pouvez pas payer cette facture gratuitement." + +#: cotisations/payment_methods/note_kfet/forms.py:33 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: cotisations/payment_methods/note_kfet/forms.py:34 msgid "Password" msgstr "Mot de passe" @@ -624,15 +629,15 @@ msgstr "Mot de passe" msgid "NoteKfet" msgstr "NoteKfet" -#: cotisations/payment_methods/note_kfet/models.py:50 +#: cotisations/payment_methods/note_kfet/models.py:48 msgid "server" msgstr "serveur" -#: cotisations/payment_methods/note_kfet/views.py:60 +#: cotisations/payment_methods/note_kfet/views.py:58 msgid "Unknown error." msgstr "Erreur inconnue." -#: cotisations/payment_methods/note_kfet/views.py:88 +#: cotisations/payment_methods/note_kfet/views.py:87 msgid "The payment with note was done." msgstr "Le paiement par note a été effectué." @@ -649,10 +654,15 @@ msgid "Duration (in months)" msgstr "Durée (en mois)" #: cotisations/templates/cotisations/aff_article.html:37 +msgid "Duration (in days)" +msgstr "Durée (en jours)" + +#: cotisations/templates/cotisations/aff_article.html:38 msgid "Concerned users" msgstr "Utilisateurs concernés" -#: cotisations/templates/cotisations/aff_article.html:38 +#: cotisations/templates/cotisations/aff_article.html:39 +#: cotisations/templates/cotisations/aff_paiement.html:34 msgid "Available for everyone" msgstr "Disponible pour tous" @@ -660,6 +670,11 @@ msgstr "Disponible pour tous" msgid "Bank" msgstr "Banque" +#: cotisations/templates/cotisations/aff_cost_estimate.html:36 +#: cotisations/templates/cotisations/aff_custom_invoice.html:36 +msgid "Recipient" +msgstr "Destinataire" + #: cotisations/templates/cotisations/aff_cost_estimate.html:39 #: cotisations/templates/cotisations/aff_cotisations.html:41 #: cotisations/templates/cotisations/aff_custom_invoice.html:39 @@ -675,6 +690,13 @@ msgstr "Désignation" msgid "Total price" msgstr "Prix total" +#: cotisations/templates/cotisations/aff_cost_estimate.html:46 +#: cotisations/templates/cotisations/aff_cotisations.html:48 +#: cotisations/templates/cotisations/aff_custom_invoice.html:46 +#: cotisations/templates/cotisations/control.html:70 +msgid "Date" +msgstr "Date" + #: cotisations/templates/cotisations/aff_cost_estimate.html:50 msgid "Validity" msgstr "Validité" @@ -713,11 +735,15 @@ msgstr "Facture invalidée" #: cotisations/templates/cotisations/aff_cotisations.html:88 msgid "Voucher" -msgstr "" +msgstr "Reçu" -#: cotisations/templates/cotisations/aff_paiement.html:34 -msgid "Is available for everyone" -msgstr "Est disponible pour tous" +#: cotisations/templates/cotisations/aff_custom_invoice.html:54 +msgid "Paid" +msgstr "Payé" + +#: cotisations/templates/cotisations/aff_paiement.html:33 +msgid "Payment type" +msgstr "Type de paiement" #: cotisations/templates/cotisations/aff_paiement.html:35 msgid "Custom payment method" @@ -736,13 +762,13 @@ msgid "Profile" msgstr "Profil" #: cotisations/templates/cotisations/control.html:48 -msgid "Last name" -msgstr "Nom" - -#: cotisations/templates/cotisations/control.html:52 msgid "First name" msgstr "Prénom" +#: cotisations/templates/cotisations/control.html:52 +msgid "Surname" +msgstr "Nom" + #: cotisations/templates/cotisations/control.html:60 msgid "User ID" msgstr "ID utilisateur" @@ -755,10 +781,12 @@ msgstr "Validé" msgid "Controlled" msgstr "Contrôlé" -#: cotisations/templates/cotisations/control.html:107 cotisations/views.py:642 -#: cotisations/views.py:729 cotisations/views.py:809 -msgid "Edit" -msgstr "Modifier" +#: cotisations/templates/cotisations/control.html:107 +#: cotisations/templates/cotisations/delete.html:38 +#: cotisations/templates/cotisations/edit_facture.html:64 +#: cotisations/views.py:168 cotisations/views.py:222 cotisations/views.py:278 +msgid "Confirm" +msgstr "Confirmer" #: cotisations/templates/cotisations/delete.html:29 msgid "Deletion of subscriptions" @@ -767,18 +795,12 @@ msgstr "Suppression de cotisations" #: cotisations/templates/cotisations/delete.html:36 #, python-format msgid "" -"Warning: are you sure you really want to delete this %(object_name)s object " +"Warning: are you sure you really want to delete this %(objet_name)s object " "( %(objet)s )?" msgstr "" -"Attention: voulez-vous vraiment supprimer cet objet %(object_name)s " +"Attention: voulez-vous vraiment supprimer cet objet %(objet_name)s " "( %(objet)s ) ?" -#: cotisations/templates/cotisations/delete.html:38 -#: cotisations/templates/cotisations/edit_facture.html:64 -#: cotisations/views.py:178 cotisations/views.py:229 cotisations/views.py:281 -msgid "Confirm" -msgstr "Confirmer" - #: cotisations/templates/cotisations/edit_facture.html:31 #: cotisations/templates/cotisations/facture.html:30 msgid "Creation and editing of invoices" @@ -789,8 +811,9 @@ msgid "Edit invoice" msgstr "Modifier la facture" #: cotisations/templates/cotisations/edit_facture.html:45 -#: cotisations/templates/cotisations/facture.html:62 +#: cotisations/templates/cotisations/facture.html:59 #: cotisations/templates/cotisations/index_article.html:30 +#: cotisations/templates/cotisations/sidebar.html:55 msgid "Articles" msgstr "Articles" @@ -808,11 +831,11 @@ msgstr "Solde maximum autorisé : %(max_balance)s €" msgid "Current balance: %(balance)s €" msgstr "Solde actuel : %(balance)s €" -#: cotisations/templates/cotisations/facture.html:76 +#: cotisations/templates/cotisations/facture.html:73 msgid "Add an extra article" msgstr "Ajouter un article supplémentaire" -#: cotisations/templates/cotisations/facture.html:82 +#: cotisations/templates/cotisations/facture.html:79 msgid "Total price: 0,00 €" msgstr "Prix total : 0,00 €" @@ -826,16 +849,16 @@ msgid "Subscriptions" msgstr "Cotisations" #: cotisations/templates/cotisations/index_article.html:33 -msgid "List of article types" -msgstr "Liste des types d'article" +msgid "List of articles" +msgstr "Liste des articles" #: cotisations/templates/cotisations/index_article.html:36 -msgid "Add an article type" -msgstr "Ajouter un type d'article" +msgid "Add an article" +msgstr "Ajouter un article" #: cotisations/templates/cotisations/index_article.html:40 -msgid "Delete one or several article types" -msgstr "Supprimer un ou plusieurs types d'article" +msgid "Delete one or several articles" +msgstr "Supprimer un ou plusieurs articles" #: cotisations/templates/cotisations/index_banque.html:30 #: cotisations/templates/cotisations/sidebar.html:60 @@ -898,7 +921,7 @@ msgstr "Rechargement de solde" msgid "Pay %(amount)s €" msgstr "Payer %(amount)s €" -#: cotisations/templates/cotisations/payment.html:42 cotisations/views.py:1051 +#: cotisations/templates/cotisations/payment.html:42 cotisations/views.py:1028 msgid "Pay" msgstr "Payer" @@ -910,138 +933,154 @@ msgstr "Créer une facture" msgid "Control the invoices" msgstr "Contrôler les factures" -#: cotisations/views.py:164 +#: cotisations/views.py:155 msgid "You need to choose at least one article." msgstr "Vous devez choisir au moins un article." -#: cotisations/views.py:223 +#: cotisations/views.py:169 +msgid "New invoice" +msgstr "Nouvelle facture" + +#: cotisations/views.py:216 msgid "The cost estimate was created." msgstr "Le devis a été créé." -#: cotisations/views.py:233 cotisations/views.py:534 -msgid "Cost estimate" -msgstr "Devis" +#: cotisations/views.py:226 +msgid "New cost estimate" +msgstr "Nouveau devis" -#: cotisations/views.py:275 +#: cotisations/views.py:272 msgid "The custom invoice was created." msgstr "La facture personnalisée a été créée." -#: cotisations/views.py:364 cotisations/views.py:467 +#: cotisations/views.py:282 +msgid "New custom invoice" +msgstr "Nouvelle facture personnalisée" + +#: cotisations/views.py:357 cotisations/views.py:438 msgid "The invoice was edited." msgstr "La facture a été modifiée." -#: cotisations/views.py:384 cotisations/views.py:589 +#: cotisations/views.py:375 cotisations/views.py:570 msgid "The invoice was deleted." msgstr "La facture a été supprimée." -#: cotisations/views.py:389 cotisations/views.py:594 -msgid "Invoice" -msgstr "Facture" - -#: cotisations/views.py:418 +#: cotisations/views.py:398 msgid "The cost estimate was edited." msgstr "Le devis a été modifié." -#: cotisations/views.py:425 +#: cotisations/views.py:405 msgid "Edit cost estimate" msgstr "Modifier le devis" -#: cotisations/views.py:437 +#: cotisations/views.py:419 msgid "An invoice was successfully created from your cost estimate." msgstr "Une facture a bien été créée à partir de votre devis." -#: cotisations/views.py:529 +#: cotisations/views.py:445 +msgid "Edit custom invoice" +msgstr "Modifier la facture personnalisée" + +#: cotisations/views.py:507 msgid "The cost estimate was deleted." msgstr "Le devis a été supprimé." -#: cotisations/views.py:615 +#: cotisations/views.py:510 +msgid "cost estimate" +msgstr "devis" + +#: cotisations/views.py:594 msgid "The article was created." msgstr "L'article a été créé." -#: cotisations/views.py:620 cotisations/views.py:693 cotisations/views.py:786 +#: cotisations/views.py:599 cotisations/views.py:673 cotisations/views.py:767 msgid "Add" msgstr "Ajouter" -#: cotisations/views.py:621 +#: cotisations/views.py:600 msgid "New article" msgstr "Nouvel article" -#: cotisations/views.py:637 +#: cotisations/views.py:617 msgid "The article was edited." msgstr "L'article a été modifié." -#: cotisations/views.py:643 +#: cotisations/views.py:622 cotisations/views.py:705 cotisations/views.py:791 +msgid "Edit" +msgstr "Modifier" + +#: cotisations/views.py:623 msgid "Edit article" msgstr "Modifier l'article" -#: cotisations/views.py:659 +#: cotisations/views.py:640 msgid "The articles were deleted." msgstr "Les articles ont été supprimés." -#: cotisations/views.py:664 cotisations/views.py:764 cotisations/views.py:844 +#: cotisations/views.py:645 cotisations/views.py:744 cotisations/views.py:829 msgid "Delete" msgstr "Supprimer" -#: cotisations/views.py:665 +#: cotisations/views.py:646 msgid "Delete article" msgstr "Supprimer l'article" -#: cotisations/views.py:687 +#: cotisations/views.py:667 msgid "The payment method was created." msgstr "Le moyen de paiment a été créé." -#: cotisations/views.py:694 +#: cotisations/views.py:674 msgid "New payment method" msgstr "Nouveau moyen de paiement" -#: cotisations/views.py:723 +#: cotisations/views.py:699 msgid "The payment method was edited." msgstr "Le moyen de paiment a été modifié." -#: cotisations/views.py:730 +#: cotisations/views.py:706 msgid "Edit payment method" msgstr "Modifier le moyen de paiement" -#: cotisations/views.py:749 +#: cotisations/views.py:728 #, python-format msgid "The payment method %(method_name)s was deleted." msgstr "Le moyen de paiement %(method_name)s a été supprimé." -#: cotisations/views.py:756 +#: cotisations/views.py:735 #, python-format msgid "" -"The payment method %(method_name)s can't be deleted " -"because there are invoices using it." +"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 supprimé car il y a " "des factures qui l'utilisent." -#: cotisations/views.py:765 +#: cotisations/views.py:745 msgid "Delete payment method" msgstr "Supprimer le moyen de paiement" -#: cotisations/views.py:781 +#: cotisations/views.py:762 msgid "The bank was created." msgstr "La banque a été créée." -#: cotisations/views.py:787 +#: cotisations/views.py:768 msgid "New bank" msgstr "Nouvelle banque" -#: cotisations/views.py:804 +#: cotisations/views.py:786 msgid "The bank was edited." msgstr "La banque a été modifiée." -#: cotisations/views.py:810 +#: cotisations/views.py:792 msgid "Edit bank" msgstr "Modifier la banque" -#: cotisations/views.py:829 +#: cotisations/views.py:814 #, python-format msgid "The bank %(bank_name)s was deleted." msgstr "La banque %(bank_name)s a été supprimée." -#: cotisations/views.py:836 +#: cotisations/views.py:820 #, python-format msgid "" "The bank %(bank_name)s can't be deleted because there are invoices using it." @@ -1049,22 +1088,22 @@ msgstr "" "La banque %(bank_name)s ne peut pas être supprimée car il y a des factures " "qui l'utilisent." -#: cotisations/views.py:845 +#: cotisations/views.py:830 msgid "Delete bank" msgstr "Supprimer la banque" -#: cotisations/views.py:881 +#: cotisations/views.py:864 msgid "Your changes have been properly taken into account." msgstr "Vos modifications ont correctement été prises en compte." -#: cotisations/views.py:1017 +#: cotisations/views.py:996 msgid "You are not allowed to credit your balance." -msgstr "Vous n'êtes pas autorisés à créditer votre solde." +msgstr "Vous n'êtes pas autorisé à créditer votre solde." -#: cotisations/views.py:1050 +#: cotisations/views.py:1027 msgid "Refill your balance" msgstr "Recharger votre solde" -#: cotisations/views.py:1068 +#: cotisations/views.py:1046 msgid "Could not find a voucher for that invoice." -msgstr "" +msgstr "Impossible de trouver un reçu pour cette facture." diff --git a/cotisations/migrations/0042_auto_20191120_0159.py b/cotisations/migrations/0042_auto_20191120_0159.py new file mode 100644 index 00000000..b9e5b356 --- /dev/null +++ b/cotisations/migrations/0042_auto_20191120_0159.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.23 on 2019-11-20 00:59 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cotisations', '0041_auto_20191103_2131'), + ] + + operations = [ + migrations.AlterModelOptions( + name='chequepayment', + options={'verbose_name': 'cheque'}, + ), + migrations.AlterField( + model_name='balancepayment', + name='credit_balance_allowed', + field=models.BooleanField(default=False, verbose_name='allow user to credit their balance'), + ), + migrations.AlterField( + model_name='balancepayment', + name='maximum_balance', + field=models.DecimalField(blank=True, decimal_places=2, default=50, help_text='The maximal amount of money allowed for the balance.', max_digits=5, null=True, verbose_name='maximum balance'), + ), + migrations.AlterField( + model_name='balancepayment', + name='minimum_balance', + field=models.DecimalField(decimal_places=2, default=0, help_text='The minimal amount of money allowed for the balance at the end of a payment. You can specify a negative amount.', max_digits=5, verbose_name='minimum balance'), + ), + migrations.AlterField( + model_name='baseinvoice', + name='date', + field=models.DateTimeField(auto_now_add=True, verbose_name='date'), + ), + migrations.AlterField( + model_name='comnpaypayment', + name='minimum_payment', + field=models.DecimalField(decimal_places=2, default=1, help_text='The minimal amount of money you have to use when paying with ComNpay.', max_digits=5, verbose_name='minimum payment'), + ), + migrations.AlterField( + model_name='comnpaypayment', + name='production', + field=models.BooleanField(default=True, verbose_name='production mode enabled (production URL, instead of homologation)'), + ), + migrations.AlterField( + model_name='costestimate', + name='validity', + field=models.DurationField(help_text='DD HH:MM:SS', verbose_name='period of validity'), + ), + migrations.AlterField( + model_name='custominvoice', + name='address', + field=models.CharField(max_length=255, verbose_name='address'), + ), + migrations.AlterField( + model_name='custominvoice', + name='paid', + field=models.BooleanField(default=False, verbose_name='paid'), + ), + migrations.AlterField( + model_name='custominvoice', + name='payment', + field=models.CharField(max_length=255, verbose_name='payment type'), + ), + migrations.AlterField( + model_name='custominvoice', + name='recipient', + field=models.CharField(max_length=255, verbose_name='recipient'), + ), + migrations.AlterField( + model_name='custominvoice', + name='remark', + field=models.TextField(blank=True, null=True, verbose_name='remark'), + ), + ] diff --git a/cotisations/models.py b/cotisations/models.py index 5cab9212..c2d23171 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -56,7 +56,7 @@ from cotisations.validators import check_no_balance class BaseInvoice(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): - date = models.DateTimeField(auto_now_add=True, verbose_name=_("Date")) + date = models.DateTimeField(auto_now_add=True, verbose_name=_("date")) # TODO : change prix to price def prix(self): @@ -138,7 +138,7 @@ class Facture(BaseInvoice): abstract = False permissions = ( # TODO : change facture to invoice - ("change_facture_control", _('Can edit the "controlled" state')), + ("change_facture_control", _("Can edit the \"controlled\" state")), ("view_facture", _("Can view an invoice object")), ("change_all_facture", _("Can edit all the previous invoices")), ) @@ -174,8 +174,8 @@ class Facture(BaseInvoice): return ( False, _( - "You don't have the right to edit an invoice " - "already controlled or invalidated." + "You don't have the right to edit an invoice" + " already controlled or invalidated." ), ("cotisations.change_all_facture",), ) @@ -206,8 +206,8 @@ class Facture(BaseInvoice): return ( False, _( - "You don't have the right to delete an invoice " - "already controlled or invalidated." + "You don't have the right to delete an invoice" + " already controlled or invalidated." ), ("cotisations.change_all_facture",), ) @@ -220,8 +220,8 @@ class Facture(BaseInvoice): return ( False, _( - "You don't have the right to view someone else's " - "invoices history." + "You don't have the right to view someone else's" + " invoices history." ), ("cotisations.view_facture",), ) @@ -243,7 +243,7 @@ class Facture(BaseInvoice): can = user_request.has_perm("cotisations.change_facture_control") return ( can, - _('You don\'t have the right to edit the "controlled" state.') + _("You don't have the right to edit the \"controlled\" state.") if not can else None, ("cotisations.change_facture_control",), @@ -262,13 +262,13 @@ class Facture(BaseInvoice): if len(Paiement.find_allowed_payments(user_request)) <= 0: return ( False, - _("There are no payment method which you can use."), + _("There are no payment methods that you can use."), ("cotisations.add_facture",), ) if len(Article.find_allowed_articles(user_request, user_request)) <= 0: return ( False, - _("There are no article that you can buy."), + _("There are no articles that you can buy."), ("cotisations.add_facture",), ) return True, None, None @@ -346,11 +346,11 @@ class CustomInvoice(BaseInvoice): class Meta: permissions = (("view_custominvoice", _("Can view a custom invoice object")),) - recipient = models.CharField(max_length=255, verbose_name=_("Recipient")) - payment = models.CharField(max_length=255, verbose_name=_("Payment type")) - address = models.CharField(max_length=255, verbose_name=_("Address")) - paid = models.BooleanField(verbose_name=_("Paid"), default=False) - remark = models.TextField(verbose_name=_("Remark"), blank=True, null=True) + recipient = models.CharField(max_length=255, verbose_name=_("recipient")) + payment = models.CharField(max_length=255, verbose_name=_("payment type")) + address = models.CharField(max_length=255, verbose_name=_("address")) + paid = models.BooleanField(verbose_name=_("paid"), default=False) + remark = models.TextField(verbose_name=_("remark"), blank=True, null=True) class CostEstimate(CustomInvoice): @@ -358,7 +358,7 @@ class CostEstimate(CustomInvoice): permissions = (("view_costestimate", _("Can view a cost estimate object")),) validity = models.DurationField( - verbose_name=_("Period of validity"), help_text="DD HH:MM:SS" + verbose_name=_("period of validity"), help_text="DD HH:MM:SS" ) final_invoice = models.ForeignKey( CustomInvoice, @@ -547,7 +547,7 @@ class Vente(RevMixin, AclMixin, models.Model): if not user_request.has_perm("cotisations.change_vente"): return ( False, - _("You don't have the right to edit the purchases."), + _("You don't have the right to edit a purchase."), ("cotisations.change_vente",), ) elif not (user_request.has_perm("cotisations.change_all_facture") or user_can): @@ -562,8 +562,8 @@ class Vente(RevMixin, AclMixin, models.Model): return ( False, _( - "You don't have the right to edit a purchase " - "already controlled or invalidated." + "You don't have the right to edit a purchase" + " already controlled or invalidated." ), ("cotisations.change_all_vente",), ) @@ -590,8 +590,8 @@ class Vente(RevMixin, AclMixin, models.Model): return ( False, _( - "You don't have the right to delete a purchase " - "already controlled or invalidated." + "You don't have the right to delete a purchase" + " already controlled or invalidated." ), None, ) @@ -606,8 +606,8 @@ class Vente(RevMixin, AclMixin, models.Model): return ( False, _( - "You don't have the right to view someone " - "else's purchase history." + "You don't have the right to view someone" + " else's purchase history." ), ("cotisations.view_vente",), ) @@ -731,7 +731,7 @@ class Article(RevMixin, AclMixin, models.Model): def clean(self): if self.name.lower() == "solde": - raise ValidationError(_("Balance is a reserved article name.")) + raise ValidationError(_("Solde is a reserved article name.")) if self.type_cotisation and not (self.duration or self.duration_days): raise ValidationError(_("Duration must be specified for a subscription.")) @@ -921,7 +921,7 @@ class Paiement(RevMixin, AclMixin, models.Model): p = find_payment_method(self) if p is not None: return p._meta.verbose_name - return _("No custom payment method.") + return _("No custom payment methods.") class Cotisation(RevMixin, AclMixin, models.Model): @@ -976,8 +976,8 @@ class Cotisation(RevMixin, AclMixin, models.Model): return ( False, _( - "You don't have the right to edit a subscription " - "already controlled or invalidated." + "You don't have the right to edit a subscription" + " already controlled or invalidated." ), ("cotisations.change_all_cotisation",), ) @@ -995,8 +995,8 @@ class Cotisation(RevMixin, AclMixin, models.Model): return ( False, _( - "You don't have the right to delete a subscription " - "already controlled or invalidated." + "You don't have the right to delete a subscription" + " already controlled or invalidated." ), None, ) @@ -1011,8 +1011,8 @@ class Cotisation(RevMixin, AclMixin, models.Model): return ( False, _( - "You don't have the right to view someone else's " - "subscription history." + "You don't have the right to view someone else's" + " subscription history." ), ("cotisations.view_cotisation",), ) diff --git a/cotisations/payment_methods/balance/models.py b/cotisations/payment_methods/balance/models.py index a252affb..afa43c48 100644 --- a/cotisations/payment_methods/balance/models.py +++ b/cotisations/payment_methods/balance/models.py @@ -44,18 +44,17 @@ class BalancePayment(PaymentMethodMixin, models.Model): editable=False, ) minimum_balance = models.DecimalField( - verbose_name=_("Minimum balance"), + verbose_name=_("minimum balance"), help_text=_( - "The minimal amount of money allowed for the balance" - " at the end of a payment. You can specify negative " - "amount." + "The minimal amount of money allowed for the balance at the end" + " of a payment. You can specify a negative amount." ), max_digits=5, decimal_places=2, default=0, ) maximum_balance = models.DecimalField( - verbose_name=_("Maximum balance"), + verbose_name=_("maximum balance"), help_text=_("The maximal amount of money allowed for the balance."), max_digits=5, decimal_places=2, @@ -64,7 +63,7 @@ class BalancePayment(PaymentMethodMixin, models.Model): null=True, ) credit_balance_allowed = models.BooleanField( - verbose_name=_("Allow user to credit their balance"), default=False + verbose_name=_("allow user to credit their balance"), default=False ) def end_payment(self, invoice, request): diff --git a/cotisations/payment_methods/cheque/models.py b/cotisations/payment_methods/cheque/models.py index 53acef6a..62479f22 100644 --- a/cotisations/payment_methods/cheque/models.py +++ b/cotisations/payment_methods/cheque/models.py @@ -33,7 +33,7 @@ class ChequePayment(PaymentMethodMixin, models.Model): """ class Meta: - verbose_name = _("Cheque") + verbose_name = _("cheque") payment = models.OneToOneField( Paiement, diff --git a/cotisations/payment_methods/comnpay/models.py b/cotisations/payment_methods/comnpay/models.py index ff35650c..2c46f685 100644 --- a/cotisations/payment_methods/comnpay/models.py +++ b/cotisations/payment_methods/comnpay/models.py @@ -51,9 +51,10 @@ class ComnpayPayment(PaymentMethodMixin, models.Model): max_length=255, null=True, blank=True, verbose_name=_("ComNpay secret key") ) minimum_payment = models.DecimalField( - verbose_name=_("Minimum payment"), + verbose_name=_("minimum payment"), help_text=_( - "The minimal amount of money you have to use when paying" " with ComNpay" + "The minimal amount of money you have to use when paying with" + " ComNpay." ), max_digits=5, decimal_places=2, @@ -62,7 +63,7 @@ class ComnpayPayment(PaymentMethodMixin, models.Model): production = models.BooleanField( default=True, verbose_name=_( - "Production mode enabled (production URL, instead of homologation)" + "production mode enabled (production URL, instead of homologation)" ), ) diff --git a/cotisations/payment_methods/forms.py b/cotisations/payment_methods/forms.py index fdcd50b8..a6bac3ed 100644 --- a/cotisations/payment_methods/forms.py +++ b/cotisations/payment_methods/forms.py @@ -58,9 +58,9 @@ class PaymentMethodForm(forms.Form): payment_method = forms.ChoiceField( label=_("Special payment method"), help_text=_( - "Warning: you will not be able to change the payment " - "method later. But you will be allowed to edit the other " - "options." + "Warning: you will not be able to change the payment" + " method later. But you will be allowed to edit the other" + " options." ), required=False, ) @@ -71,7 +71,7 @@ class PaymentMethodForm(forms.Form): self.fields["payment_method"].choices = [ (i, p.NAME) for (i, p) in enumerate(PAYMENT_METHODS) ] - self.fields["payment_method"].choices.insert(0, ("", _("no"))) + self.fields["payment_method"].choices.insert(0, ("", _("No"))) self.fields["payment_method"].widget.attrs = {"id": "paymentMethodSelect"} self.templates = [ forms.modelform_factory(p.PaymentMethod, fields="__all__")(prefix=prefix) diff --git a/cotisations/payment_methods/free/models.py b/cotisations/payment_methods/free/models.py index b64744fe..39a3aa80 100644 --- a/cotisations/payment_methods/free/models.py +++ b/cotisations/payment_methods/free/models.py @@ -51,4 +51,4 @@ class FreePayment(PaymentMethodMixin, models.Model): """Checks that the price meets the requirement to be paid with user balance. """ - return (price == 0, _("You cannot validate this invoice for free.")) + return (price == 0, _("You can't pay this invoice for free.")) diff --git a/cotisations/payment_methods/note_kfet/forms.py b/cotisations/payment_methods/note_kfet/forms.py index 098315b7..7d82b93f 100644 --- a/cotisations/payment_methods/note_kfet/forms.py +++ b/cotisations/payment_methods/note_kfet/forms.py @@ -30,5 +30,5 @@ class NoteCredentialForm(forms.Form): object. """ - login = forms.CharField(label=_("pseudo note")) + login = forms.CharField(label=_("Username")) password = forms.CharField(label=_("Password"), widget=forms.PasswordInput) diff --git a/cotisations/templates/cotisations/aff_paiement.html b/cotisations/templates/cotisations/aff_paiement.html index edd485f1..6043da67 100644 --- a/cotisations/templates/cotisations/aff_paiement.html +++ b/cotisations/templates/cotisations/aff_paiement.html @@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% trans "Payment type" %} - {% trans "Is available for everyone" %} + {% trans "Available for everyone" %} {% trans "Custom payment method" %} diff --git a/cotisations/templates/cotisations/control.html b/cotisations/templates/cotisations/control.html index b199ba2d..497de6f4 100644 --- a/cotisations/templates/cotisations/control.html +++ b/cotisations/templates/cotisations/control.html @@ -45,12 +45,12 @@ with this program; if not, write to the Free Software Foundation, Inc., {% trans "Profile" %} - {% trans "Last name" as tr_last_name %} - {% include 'buttons/sort.html' with prefix='control' col='name' text=tr_last_name %} + {% trans "First name" as tr_first_name %} + {% include 'buttons/sort.html' with prefix='control' col='name' text=tr_first_name %} - {% trans "First name" as tr_first_name %} - {% include 'buttons/sort.html' with prefix='control' col='surname' text=tr_first_name %} + {% trans "Surname" as tr_surname %} + {% include 'buttons/sort.html' with prefix='control' col='surname' text=tr_surname %} {% trans "Invoice ID" as tr_invoice_id %} @@ -104,8 +104,8 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endfor %} - {% trans "Edit" as tr_edit %} - {% bootstrap_button tr_edit button_type='submit' icon='ok' button_class='btn-success' %} + {% trans "Confirm" as tr_confirm %} + {% bootstrap_button tr_confirm button_type='submit' icon='ok' button_class='btn-success' %} {% endblock %} diff --git a/cotisations/templates/cotisations/delete.html b/cotisations/templates/cotisations/delete.html index 483dd218..e6f1b362 100644 --- a/cotisations/templates/cotisations/delete.html +++ b/cotisations/templates/cotisations/delete.html @@ -33,7 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% csrf_token %}

- {% blocktrans %}Warning: are you sure you really want to delete this {{ object_name }} object ( {{ objet }} )?{% endblocktrans %} + {% blocktrans %}Warning: are you sure you really want to delete this {{ objet_name }} object ( {{ objet }} )?{% endblocktrans %}

{% trans "Confirm" as tr_confirm %} {% bootstrap_button tr_confirm button_type='submit' icon='trash' button_class='btn-danger' %} diff --git a/cotisations/templates/cotisations/email_invoice b/cotisations/templates/cotisations/email_invoice index 8d6b2cc2..01f80225 100644 --- a/cotisations/templates/cotisations/email_invoice +++ b/cotisations/templates/cotisations/email_invoice @@ -6,17 +6,17 @@ Nous vous remercions pour votre achat auprès de {{asso_name}} et nous vous en j En cas de question, n’hésitez pas à nous contacter par mail à {{contact_mail}}. -Cordialement, -L’équipe de {{asso_name}} +Respectueusement, +L’équipe de {{asso_name}}. === English version === -Dear {{name}}, +Hello {{name}}, -Thank you for your purchase. Here is your invoice. +Thank you for your purchase at {{asso_name}}. Here is your invoice. -Should you need extra information, you can email us at {{contact_mail}}. +Should you need extra information, do not hesitate to email us at {{contact_mail}}. -Best regards, - {{ asso_name }}'s team +Regards, +The {{ asso_name }} team. diff --git a/cotisations/templates/cotisations/email_subscription_accepted b/cotisations/templates/cotisations/email_subscription_accepted index bd1c7628..cb0eb760 100644 --- a/cotisations/templates/cotisations/email_subscription_accepted +++ b/cotisations/templates/cotisations/email_subscription_accepted @@ -6,17 +6,18 @@ Vous trouverez en pièce jointe un reçu. Pour nous faire part de toute remarque, suggestion ou problème vous pouvez nous envoyer un mail à {{asso_email}}. -À bientôt, +Respectueusement, L'équipe de {{asso_name}}. --- +Hello {{name}}! + Your subscription to {{asso_name}} has just been accepted. You are now a full member of {{asso_name}} until {{ date_end|date:"d/m/Y" }}. You will find with this email a subscription voucher. -For any information, suggestion or problem, you can contact us via email at -{{asso_email}}. +To express any comment, suggestion or problem, you can send us an email to {{asso_email}}. Regards, The {{asso_name}} team. diff --git a/cotisations/templates/cotisations/index_article.html b/cotisations/templates/cotisations/index_article.html index 8adc7639..1a4c3c8d 100644 --- a/cotisations/templates/cotisations/index_article.html +++ b/cotisations/templates/cotisations/index_article.html @@ -30,14 +30,14 @@ with this program; if not, write to the Free Software Foundation, Inc., {% block title %}{% trans "Articles" %}{% endblock %} {% block content %} -

{% trans "List of article types" %}

+

{% trans "List of articles" %}

{% can_create Article %} - {% trans "Add an article type" %} + {% trans "Add an article" %} {% acl_end %} - {% trans "Delete one or several article types" %} + {% trans "Delete one or several articles" %} {% include 'cotisations/aff_article.html' with article_list=article_list %} {% endblock %} diff --git a/cotisations/templates/cotisations/index_banque.html b/cotisations/templates/cotisations/index_banque.html index a497198f..c653acfd 100644 --- a/cotisations/templates/cotisations/index_banque.html +++ b/cotisations/templates/cotisations/index_banque.html @@ -33,7 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,

{% trans "List of banks" %}

{% can_create Banque %} - {% trans "Add a bank" %} + {% trans "Add a bank" %} {% acl_end %} diff --git a/cotisations/templates/cotisations/index_paiement.html b/cotisations/templates/cotisations/index_paiement.html index b76dec65..1411add0 100644 --- a/cotisations/templates/cotisations/index_paiement.html +++ b/cotisations/templates/cotisations/index_paiement.html @@ -33,7 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,

{% trans "List of payment methods" %}

{% can_create Paiement %}
- {% trans "Add a payment method" %} + {% trans "Add a payment method" %} {% acl_end %} diff --git a/cotisations/templates/cotisations/sidebar.html b/cotisations/templates/cotisations/sidebar.html index 96a674f9..8e69a8c9 100644 --- a/cotisations/templates/cotisations/sidebar.html +++ b/cotisations/templates/cotisations/sidebar.html @@ -52,7 +52,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% acl_end %} {% can_view_all Article %} - {% trans "Available articles" %} + {% trans "Articles" %} {% acl_end %} {% can_view_all Banque %} diff --git a/cotisations/tex.py b/cotisations/tex.py index 6872ac6a..2930fffe 100644 --- a/cotisations/tex.py +++ b/cotisations/tex.py @@ -36,7 +36,6 @@ from django.template.loader import get_template from django.http import HttpResponse from django.conf import settings from django.utils.text import slugify -from django.utils.translation import ugettext_lazy as _ from re2o.mixins import AclMixin, RevMixin from preferences.models import CotisationsOption diff --git a/cotisations/views.py b/cotisations/views.py index 4510aff9..562326e3 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -166,6 +166,7 @@ def new_facture(request, user, userid): "articlelist": article_list, "balance": balance, "action_name": _("Confirm"), + "title": _("New invoice"), }, "cotisations/facture.html", request, @@ -222,7 +223,7 @@ def new_cost_estimate(request): "articlesformset": articles_formset, "articlelist": articles, "discount_form": discount_form, - "title": _("Cost estimate"), + "title": _("New cost estimate"), }, "cotisations/facture.html", request, @@ -278,6 +279,7 @@ def new_custom_invoice(request): "articlesformset": articles_formset, "articlelist": articles, "discount_form": discount_form, + "title": _("New custom invoice"), }, "cotisations/facture.html", request, @@ -373,7 +375,7 @@ def del_facture(request, facture, **_kwargs): messages.success(request, _("The invoice was deleted.")) return redirect(reverse("cotisations:index")) return form( - {"objet": facture, "objet_name": _("Invoice")}, + {"objet": facture, "objet_name": _("invoice")}, "cotisations/delete.html", request, ) @@ -437,7 +439,11 @@ def edit_custom_invoice(request, invoice, **kwargs): return redirect(reverse("cotisations:index-custom-invoice")) return form( - {"factureform": invoice_form, "venteform": purchase_form}, + { + "factureform": invoice_form, + "venteform": purchase_form, + "title": _("Edit custom invoice"), + }, "cotisations/edit_facture.html", request, ) @@ -501,7 +507,7 @@ def del_cost_estimate(request, estimate, **_kwargs): messages.success(request, _("The cost estimate was deleted.")) return redirect(reverse("cotisations:index-cost-estimate")) return form( - {"objet": estimate, "objet_name": _("Cost estimate")}, + {"objet": estimate, "objet_name": _("cost estimate")}, "cotisations/delete.html", request, ) @@ -564,7 +570,7 @@ def del_custom_invoice(request, invoice, **_kwargs): messages.success(request, _("The invoice was deleted.")) return redirect(reverse("cotisations:index-custom-invoice")) return form( - {"objet": invoice, "objet_name": _("Invoice")}, + {"objet": invoice, "objet_name": _("invoice")}, "cotisations/delete.html", request, ) @@ -588,7 +594,11 @@ def add_article(request): messages.success(request, _("The article was created.")) return redirect(reverse("cotisations:index-article")) return form( - {"factureform": article, "action_name": _("Add"), "title": _("New article")}, + { + "factureform": article, + "action_name": _("Add"), + "title": _("New article"), + }, "cotisations/facture.html", request, ) @@ -607,7 +617,11 @@ def edit_article(request, article_instance, **_kwargs): messages.success(request, _("The article was edited.")) return redirect(reverse("cotisations:index-article")) return form( - {"factureform": article, "action_name": _("Edit"), "title": _("Edit article")}, + { + "factureform": article, + "action_name": _("Edit"), + "title": _("Edit article"), + }, "cotisations/facture.html", request, ) @@ -718,8 +732,8 @@ def del_paiement(request, instances): messages.error( request, _( - "The payment method %(method_name)s can't be deleted \ - because there are invoices using it." + "The payment method %(method_name)s can't be deleted" + " because there are invoices using it." ) % {"method_name": payment_del}, ) @@ -748,7 +762,11 @@ def add_banque(request): messages.success(request, _("The bank was created.")) return redirect(reverse("cotisations:index-banque")) return form( - {"factureform": bank, "action_name": _("Add"), "title": _("New bank")}, + { + "factureform": bank, + "action_name": _("Add"), + "title": _("New bank"), + }, "cotisations/facture.html", request, ) @@ -768,7 +786,11 @@ def edit_banque(request, banque_instance, **_kwargs): messages.success(request, _("The bank was edited.")) return redirect(reverse("cotisations:index-banque")) return form( - {"factureform": bank, "action_name": _("Edit"), "title": _("Edit bank")}, + { + "factureform": bank, + "action_name": _("Edit"), + "title": _("Edit bank"), + }, "cotisations/facture.html", request, ) @@ -802,7 +824,11 @@ def del_banque(request, instances): ) return redirect(reverse("cotisations:index-banque")) return form( - {"factureform": bank, "action_name": _("Delete"), "title": _("Delete bank")}, + { + "factureform": bank, + "action_name": _("Delete"), + "title": _("Delete bank"), + }, "cotisations/facture.html", request, ) @@ -833,7 +859,7 @@ def control(request): ) if control_invoices_form.is_valid(): control_invoices_form.save() - reversion.set_comment("Controle") + reversion.set_comment("Control") messages.success( request, _("Your changes have been properly taken into account.") ) diff --git a/logs/acl.py b/logs/acl.py index f6be8183..42000ea8 100644 --- a/logs/acl.py +++ b/logs/acl.py @@ -41,6 +41,7 @@ def can_view(user): can = user.has_module_perms("admin") return ( can, - None if can else _("You don't have the right to view this" " application."), + None if can else _("You don't have the right to view this" + " application."), "admin", ) diff --git a/logs/locale/fr/LC_MESSAGES/django.po b/logs/locale/fr/LC_MESSAGES/django.po index 8691c5b7..f04f6bef 100644 --- a/logs/locale/fr/LC_MESSAGES/django.po +++ b/logs/locale/fr/LC_MESSAGES/django.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: 2.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-05 19:48+0200\n" +"POT-Creation-Date: 2019-11-19 23:43+0100\n" "PO-Revision-Date: 2018-06-23 16:01+0200\n" "Last-Translator: Laouen Fernet \n" "Language-Team: \n" @@ -30,7 +30,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: logs/acl.py:42 +#: logs/acl.py:44 msgid "You don't have the right to view this application." msgstr "Vous n'avez pas le droit de voir cette application." @@ -121,8 +121,8 @@ msgid "%(username)s has sold %(number)sx %(name)s" msgstr "%(username)s a vendu %(number)sx %(name)s" #: logs/templates/logs/aff_summary.html:116 -msgid " to" -msgstr " à" +msgid "to" +msgstr "à" #: logs/templates/logs/aff_summary.html:119 #, python-format @@ -159,7 +159,7 @@ msgid "Statistics" msgstr "Statistiques" #: logs/templates/logs/index.html:32 logs/templates/logs/stats_logs.html:32 -#: logs/views.py:422 +#: logs/views.py:400 msgid "Actions performed" msgstr "Actions effectuées" @@ -183,7 +183,7 @@ msgstr "Base de données" msgid "Wiring actions" msgstr "Actions de câblage" -#: logs/templates/logs/sidebar.html:53 logs/views.py:344 +#: logs/templates/logs/sidebar.html:53 msgid "Users" msgstr "Utilisateurs" @@ -199,161 +199,126 @@ msgstr "Statistiques sur la base de données" msgid "Statistics about users" msgstr "Statistiques sur les utilisateurs" -#: logs/views.py:194 +#: logs/views.py:175 msgid "Nonexistent revision." msgstr "Révision inexistante." -#: logs/views.py:197 +#: logs/views.py:178 msgid "The action was deleted." msgstr "L'action a été supprimée." -#: logs/views.py:230 +#: logs/views.py:219 msgid "Category" msgstr "Catégorie" -#: logs/views.py:231 +#: logs/views.py:220 msgid "Number of users (members and clubs)" msgstr "Nombre d'utilisateurs (adhérents et clubs)" -#: logs/views.py:232 +#: logs/views.py:221 msgid "Number of members" msgstr "Nombre d'adhérents" -#: logs/views.py:233 +#: logs/views.py:222 msgid "Number of clubs" msgstr "Nombre de clubs" -#: logs/views.py:237 +#: logs/views.py:226 msgid "Activated users" msgstr "Utilisateurs activés" -#: logs/views.py:245 +#: logs/views.py:232 msgid "Disabled users" msgstr "Utilisateurs désactivés" -#: logs/views.py:253 +#: logs/views.py:238 msgid "Archived users" msgstr "Utilisateurs archivés" -#: logs/views.py:261 -#, fuzzy -#| msgid "Archived users" -msgid "Full Archived users" -msgstr "Utilisateurs archivés" +#: logs/views.py:244 +msgid "Fully archived users" +msgstr "Utilisateurs complètement archivés" -#: logs/views.py:269 +#: logs/views.py:254 msgid "Not yet active users" msgstr "Utilisateurs pas encore actifs" -#: logs/views.py:277 +#: logs/views.py:264 msgid "Contributing members" msgstr "Adhérents cotisants" -#: logs/views.py:283 +#: logs/views.py:270 msgid "Users benefiting from a connection" msgstr "Utilisateurs bénéficiant d'une connexion" -#: logs/views.py:289 +#: logs/views.py:276 msgid "Banned users" msgstr "Utilisateurs bannis" -#: logs/views.py:295 +#: logs/views.py:282 msgid "Users benefiting from a free connection" msgstr "Utilisateurs bénéficiant d'une connexion gratuite" -#: logs/views.py:301 +#: logs/views.py:288 msgid "Active interfaces (with access to the network)" msgstr "Interfaces actives (ayant accès au réseau)" -#: logs/views.py:311 +#: logs/views.py:302 msgid "Active interfaces assigned IPv4" msgstr "Interfaces actives assignées IPv4" -#: logs/views.py:324 +#: logs/views.py:319 msgid "IP range" msgstr "Plage d'IP" -#: logs/views.py:325 +#: logs/views.py:320 msgid "VLAN" msgstr "VLAN" -#: logs/views.py:326 +#: logs/views.py:321 msgid "Total number of IP addresses" msgstr "Nombre total d'adresses IP" -#: logs/views.py:327 +#: logs/views.py:322 msgid "Number of assigned IP addresses" -msgstr "Nombre d'adresses IP non assignées" +msgstr "Nombre d'adresses IP assignées" -#: logs/views.py:328 +#: logs/views.py:323 msgid "Number of IP address assigned to an activated machine" msgstr "Nombre d'adresses IP assignées à une machine activée" -#: logs/views.py:329 -msgid "Number of nonassigned IP addresses" +#: logs/views.py:324 +msgid "Number of unassigned IP addresses" msgstr "Nombre d'adresses IP non assignées" -#: logs/views.py:356 -msgid "Subscriptions" -msgstr "Cotisations" +#: logs/views.py:339 +msgid "Users (members and clubs)" +msgstr "Utilisateurs (adhérents et clubs)" -#: logs/views.py:378 logs/views.py:439 -msgid "Machines" -msgstr "Machines" - -#: logs/views.py:405 +#: logs/views.py:385 msgid "Topology" msgstr "Topologie" -#: logs/views.py:424 +#: logs/views.py:401 msgid "Number of actions" msgstr "Nombre d'actions" -#: logs/views.py:438 logs/views.py:456 logs/views.py:461 logs/views.py:466 -#: logs/views.py:481 -msgid "User" -msgstr "Utilisateur" - -#: logs/views.py:442 -msgid "Invoice" -msgstr "Facture" - -#: logs/views.py:445 -msgid "Ban" -msgstr "Bannissement" - -#: logs/views.py:448 -msgid "Whitelist" -msgstr "Accès gracieux" - -#: logs/views.py:451 -msgid "Rights" -msgstr "Droits" +#: logs/views.py:426 +msgid "rights" +msgstr "droits" #: logs/views.py:455 -msgid "School" -msgstr "Établissement" +msgid "actions" +msgstr "actions" -#: logs/views.py:460 -msgid "Payment method" -msgstr "Moyen de paiement" - -#: logs/views.py:465 -msgid "Bank" -msgstr "Banque" - -#: logs/views.py:482 -msgid "Action" -msgstr "Action" - -#: logs/views.py:513 +#: logs/views.py:486 msgid "No model found." msgstr "Aucun modèle trouvé." -#: logs/views.py:519 +#: logs/views.py:492 msgid "Nonexistent entry." msgstr "Entrée inexistante." -#: logs/views.py:526 +#: logs/views.py:499 msgid "You don't have the right to access this menu." msgstr "Vous n'avez pas le droit d'accéder à ce menu." diff --git a/logs/templates/logs/aff_summary.html b/logs/templates/logs/aff_summary.html index 7205bc6a..31834a2d 100644 --- a/logs/templates/logs/aff_summary.html +++ b/logs/templates/logs/aff_summary.html @@ -113,7 +113,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% blocktrans with username=v.username number=v.version.object.number name=v.version.object.name %}{{ username }} has sold {{ number }}x {{ name }}{% endblocktrans %} {% with invoice=v.version.object.facture %} {% if invoice|is_facture %} - {% trans " to" %} + {% trans "to" %} {{ v.version.object.facture.facture.user.get_username }} {% if v.version.object.iscotisation %} ({% blocktrans with duration=v.version.object.duration %}+{{ duration }} months{% endblocktrans %}) diff --git a/logs/views.py b/logs/views.py index be71f7cc..7c509134 100644 --- a/logs/views.py +++ b/logs/views.py @@ -241,7 +241,7 @@ def stats_general(request): Club.objects.filter(state=Club.STATE_ARCHIVE).count(), ], "full_archive_users": [ - _("Full Archived users"), + _("Fully archived users"), User.objects.filter(state=User.STATE_FULL_ARCHIVE).count(), ( Adherent.objects.filter( @@ -321,7 +321,7 @@ def stats_general(request): _("Total number of IP addresses"), _("Number of assigned IP addresses"), _("Number of IP address assigned to an activated machine"), - _("Number of nonassigned IP addresses"), + _("Number of unassigned IP addresses"), ], ip_dict, # Data already prepared ], @@ -336,7 +336,7 @@ def stats_models(request): nombre d'users, d'écoles, de droits, de bannissements, de factures, de ventes, de banque, de machines, etc""" stats = { - _("Users"): { + _("Users (members and clubs)"): { "users": [User._meta.verbose_name, User.objects.count()], "adherents": [Adherent._meta.verbose_name, Adherent.objects.count()], "clubs": [Club._meta.verbose_name, Club.objects.count()], @@ -350,14 +350,14 @@ def stats_models(request): "ban": [Ban._meta.verbose_name, Ban.objects.count()], "whitelist": [Whitelist._meta.verbose_name, Whitelist.objects.count()], }, - _("Subscriptions"): { + Cotisation._meta.verbose_name_plural.title(): { "factures": [Facture._meta.verbose_name, Facture.objects.count()], "vente": [Vente._meta.verbose_name, Vente.objects.count()], "cotisation": [Cotisation._meta.verbose_name, Cotisation.objects.count()], "article": [Article._meta.verbose_name, Article.objects.count()], "banque": [Banque._meta.verbose_name, Banque.objects.count()], }, - _("Machines"): { + Machine._meta.verbose_name_plural.title(): { "machine": [Machine._meta.verbose_name, Machine.objects.count()], "typemachine": [ MachineType._meta.verbose_name, @@ -412,31 +412,31 @@ def stats_users(request): de moyens de paiements par user, de banque par user, de bannissement par user, etc""" stats = { - _("User"): { - _("Machines"): User.objects.annotate(num=Count("machine")).order_by("-num")[ + User._meta.verbose_name: { + Machine._meta.verbose_name_plural: User.objects.annotate(num=Count("machine")).order_by("-num")[ :10 ], - _("Invoice"): User.objects.annotate(num=Count("facture")).order_by("-num")[ + Facture._meta.verbose_name_plural: User.objects.annotate(num=Count("facture")).order_by("-num")[ :10 ], - _("Ban"): User.objects.annotate(num=Count("ban")).order_by("-num")[:10], - _("Whitelist"): User.objects.annotate(num=Count("whitelist")).order_by( + Ban._meta.verbose_name_plural: User.objects.annotate(num=Count("ban")).order_by("-num")[:10], + Whitelist._meta.verbose_name_plural: User.objects.annotate(num=Count("whitelist")).order_by( "-num" )[:10], - _("Rights"): User.objects.annotate(num=Count("groups")).order_by("-num")[ + _("rights"): User.objects.annotate(num=Count("groups")).order_by("-num")[ :10 ], }, - _("School"): { - _("User"): School.objects.annotate(num=Count("user")).order_by("-num")[:10] + School._meta.verbose_name: { + User._meta.verbose_name_plural: School.objects.annotate(num=Count("user")).order_by("-num")[:10] }, - _("Payment method"): { - _("User"): Paiement.objects.annotate(num=Count("facture")).order_by("-num")[ + Paiement._meta.verbose_name: { + User._meta.verbose_name_plural: Paiement.objects.annotate(num=Count("facture")).order_by("-num")[ :10 ] }, - _("Bank"): { - _("User"): Banque.objects.annotate(num=Count("facture")).order_by("-num")[ + Banque._meta.verbose_name: { + User._meta.verbose_name_plural: Banque.objects.annotate(num=Count("facture")).order_by("-num")[ :10 ] }, @@ -451,8 +451,8 @@ def stats_actions(request): utilisateurs. Affiche le nombre de modifications aggrégées par utilisateurs""" stats = { - _("User"): { - _("Action"): User.objects.annotate(num=Count("revision")).order_by("-num")[ + User._meta.verbose_name: { + _("actions"): User.objects.annotate(num=Count("revision")).order_by("-num")[ :40 ] } diff --git a/machines/acl.py b/machines/acl.py index 55b48145..1989a788 100644 --- a/machines/acl.py +++ b/machines/acl.py @@ -41,6 +41,7 @@ def can_view(user): can = user.has_module_perms("machines") return ( can, - None if can else _("You don't have the right to view this" " application."), + None if can else _("You don't have the right to view this" + " application."), ("machines",), ) diff --git a/machines/locale/fr/LC_MESSAGES/django.po b/machines/locale/fr/LC_MESSAGES/django.po index a2422759..049c01ad 100644 --- a/machines/locale/fr/LC_MESSAGES/django.po +++ b/machines/locale/fr/LC_MESSAGES/django.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: 2.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-05 19:48+0200\n" +"POT-Creation-Date: 2019-11-20 01:24+0100\n" "PO-Revision-Date: 2018-06-23 16:35+0200\n" "Last-Translator: Laouen Fernet \n" "Language-Team: \n" @@ -30,7 +30,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: machines/acl.py:42 +#: machines/acl.py:44 msgid "You don't have the right to view this application." msgstr "Vous n'avez pas le droit de voir cette application." @@ -67,123 +67,123 @@ msgstr "Type de machine à ajouter" msgid "Related IP type" msgstr "Type d'IP relié" -#: machines/forms.py:207 +#: machines/forms.py:208 msgid "Current machine types" msgstr "Types de machines actuels" -#: machines/forms.py:231 +#: machines/forms.py:232 msgid "IP type to add" msgstr "Type d'IP à ajouter" -#: machines/forms.py:249 +#: machines/forms.py:260 msgid "Current IP types" msgstr "Types d'IP actuels" -#: machines/forms.py:272 +#: machines/forms.py:283 msgid "Extension to add" msgstr "Extension à ajouter" -#: machines/forms.py:273 machines/templates/machines/aff_extension.html:37 +#: machines/forms.py:284 machines/templates/machines/aff_extension.html:37 msgid "A record origin" msgstr "Enregistrement A origin" -#: machines/forms.py:274 machines/templates/machines/aff_extension.html:39 +#: machines/forms.py:285 machines/templates/machines/aff_extension.html:39 msgid "AAAA record origin" msgstr "Enregistrement AAAA origin" -#: machines/forms.py:275 +#: machines/forms.py:286 msgid "SOA record to use" msgstr "Enregistrement SOA à utiliser" -#: machines/forms.py:276 +#: machines/forms.py:287 msgid "Sign with DNSSEC" msgstr "Signer avec DNSSEC" -#: machines/forms.py:283 +#: machines/forms.py:295 msgid "Current extensions" msgstr "Extensions actuelles" -#: machines/forms.py:324 +#: machines/forms.py:337 msgid "Current SOA records" msgstr "Enregistrements SOA actuels" -#: machines/forms.py:356 +#: machines/forms.py:370 msgid "Current MX records" msgstr "Enregistrements MX actuels" -#: machines/forms.py:390 +#: machines/forms.py:405 msgid "Current NS records" msgstr "Enregistrements NS actuels" -#: machines/forms.py:419 +#: machines/forms.py:435 msgid "Current TXT records" msgstr "Enregistrements TXT actuels" -#: machines/forms.py:448 +#: machines/forms.py:465 msgid "Current DNAME records" msgstr "Enregistrements DNAME actuels" -#: machines/forms.py:477 +#: machines/forms.py:495 msgid "Current SRV records" msgstr "Enregistrements SRV actuels" -#: machines/forms.py:507 +#: machines/forms.py:526 msgid "Current NAS devices" msgstr "Dispositifs NAS actuels" -#: machines/forms.py:540 +#: machines/forms.py:559 msgid "Current roles" msgstr "Rôles actuels" -#: machines/forms.py:582 +#: machines/forms.py:601 msgid "Current services" msgstr "Services actuels" -#: machines/forms.py:622 +#: machines/forms.py:643 msgid "Current VLANs" msgstr "VLANs actuels" -#: machines/models.py:63 -msgid "Optional" -msgstr "Optionnel" - #: machines/models.py:71 +msgid "Optional." +msgstr "Optionnel." + +#: machines/models.py:77 msgid "Can view a machine object" msgstr "Peut voir un objet machine" -#: machines/models.py:73 +#: machines/models.py:78 msgid "Can change the user of a machine" msgstr "Peut changer l'utilisateur d'une machine" -#: machines/models.py:75 +#: machines/models.py:80 machines/views.py:317 msgid "machine" msgstr "machine" -#: machines/models.py:76 +#: machines/models.py:81 msgid "machines" msgstr "machines" -#: machines/models.py:109 +#: machines/models.py:114 msgid "You don't have the right to change the machine's user." msgstr "Vous n'avez pas le droit de changer l'utilisateur de la machine." -#: machines/models.py:118 +#: machines/models.py:129 msgid "You don't have the right to view all the machines." msgstr "Vous n'avez pas le droit de voir toutes les machines." -#: machines/models.py:132 +#: machines/models.py:144 msgid "Nonexistent user." msgstr "Utilisateur inexistant." -#: machines/models.py:140 +#: machines/models.py:154 machines/models.py:1303 msgid "You don't have the right to add a machine." msgstr "Vous n'avez pas le droit d'ajouter une machine." -#: machines/models.py:142 +#: machines/models.py:160 msgid "You don't have the right to add a machine to another user." msgstr "Vous n'avez pas le droit d'ajouter une machine à un autre utilisateur." -#: machines/models.py:145 machines/models.py:1239 +#: machines/models.py:168 machines/models.py:1320 #, python-format msgid "" "You reached the maximum number of interfaces that you are allowed to create " @@ -192,79 +192,79 @@ msgstr "" "Vous avez atteint le nombre maximal d'interfaces que vous pouvez créer vous-" "même (%s)." -#: machines/models.py:164 machines/models.py:1264 machines/models.py:1281 -#: machines/models.py:1370 machines/models.py:1387 +#: machines/models.py:189 machines/models.py:1352 machines/models.py:1371 +#: machines/models.py:1474 machines/models.py:1492 msgid "You don't have the right to edit a machine of another user." msgstr "" "Vous n'avez pas le droit de modifier une machine d'un autre utilisateur." -#: machines/models.py:182 +#: machines/models.py:209 msgid "You don't have the right to delete a machine of another user." msgstr "" "Vous n'avez pas le droit de supprimer une machine d'une autre utilisateur." -#: machines/models.py:194 +#: machines/models.py:228 machines/models.py:1762 msgid "You don't have the right to view other machines than yours." msgstr "Vous n'avez pas le droit de voir d'autres machines que les vôtres." -#: machines/models.py:206 machines/templates/machines/aff_machines.html:53 +#: machines/models.py:242 machines/templates/machines/aff_machines.html:53 msgid "No name" msgstr "Sans nom" -#: machines/models.py:266 +#: machines/models.py:319 msgid "Can view a machine type object" msgstr "Peut voir un objet type de machine" -#: machines/models.py:267 +#: machines/models.py:320 msgid "Can use all machine types" msgstr "Peut utiliser tous les types de machine" -#: machines/models.py:269 +#: machines/models.py:322 msgid "machine type" msgstr "type de machine" -#: machines/models.py:270 +#: machines/models.py:323 msgid "machine types" msgstr "types de machine" -#: machines/models.py:288 +#: machines/models.py:343 msgid "You don't have the right to use all machine types." msgstr "Vous n'avez pas le droit d'utiliser tous les types de machine." -#: machines/models.py:307 -msgid "Network containing the domain's IPv4 range (optional)" -msgstr "Réseau contenant la plage IPv4 du domaine (optionnel)" +#: machines/models.py:364 +msgid "Network containing the domain's IPv4 range (optional)." +msgstr "Réseau contenant la plage IPv4 du domaine (optionnel)." -#: machines/models.py:315 -msgid "Netmask for the domain's IPv4 range" -msgstr "Masque de sous-réseau pour la plage IPv4 du domaine" +#: machines/models.py:369 +msgid "Netmask for the domain's IPv4 range." +msgstr "Masque de sous-réseau pour la plage IPv4 du domaine." -#: machines/models.py:319 -msgid "Enable reverse DNS for IPv4" -msgstr "Activer DNS inverse pour IPv4" +#: machines/models.py:372 +msgid "Enable reverse DNS for IPv4." +msgstr "Activer DNS inverse pour IPv4." -#: machines/models.py:335 -msgid "Enable reverse DNS for IPv6" -msgstr "Activer DNS inverse pour IPv6" +#: machines/models.py:379 +msgid "Enable reverse DNS for IPv6." +msgstr "Activer DNS inverse pour IPv6." -#: machines/models.py:351 +#: machines/models.py:386 msgid "Can view an IP type object" msgstr "Peut voir un objet type d'IP" -#: machines/models.py:352 +#: machines/models.py:387 msgid "Can use all IP types" msgstr "Peut utiliser tous les types d'IP" -#: machines/models.py:354 machines/templates/machines/aff_iptype.html:35 +#: machines/models.py:389 machines/templates/machines/aff_iptype.html:35 #: machines/templates/machines/machine.html:108 msgid "IP type" msgstr "type d'IP" -#: machines/models.py:355 +#: machines/models.py:390 msgid "IP types" msgstr "types d'IP" -#: machines/models.py:458 +#: machines/models.py:499 msgid "" "One or several IP addresses from the range are affected, impossible to " "delete the range." @@ -272,21 +272,21 @@ msgstr "" "Une ou plusieurs adresses IP de la plage sont affectées, impossible de " "supprimer la plage." -#: machines/models.py:500 +#: machines/models.py:546 msgid "Range end must be after range start..." msgstr "La fin de la plage doit être après le début..." -#: machines/models.py:503 +#: machines/models.py:551 msgid "The range is too large, you can't create a larger one than a /16." msgstr "" "La plage est trop grande, vous ne pouvez pas en créer une plus grande " "qu'un /16." -#: machines/models.py:508 +#: machines/models.py:559 msgid "The specified range is not disjoint from existing ranges." msgstr "La plage renseignée n'est pas disjointe des plages existantes." -#: machines/models.py:516 +#: machines/models.py:573 msgid "" "If you specify a domain network or netmask, it must contain the domain's IP " "range." @@ -294,338 +294,336 @@ msgstr "" "Si vous renseignez un réseau ou masque de sous-réseau, il doit contenir la " "plage IP du domaine." -#: machines/models.py:549 -msgid "v4 multicast management" -msgstr "gestion de multidiffusion v4" +#: machines/models.py:611 +msgid "v4 multicast management." +msgstr "gestion de multidiffusion v4." -#: machines/models.py:553 -msgid "v6 multicast management" -msgstr "gestion de multidiffusion v6" +#: machines/models.py:612 +msgid "v6 multicast management." +msgstr "gestion de multidiffusion v6." -#: machines/models.py:558 +#: machines/models.py:615 msgid "Can view a VLAN object" msgstr "Peut voir un objet VLAN" -#: machines/models.py:560 machines/templates/machines/machine.html:160 +#: machines/models.py:616 machines/templates/machines/machine.html:160 msgid "VLAN" msgstr "VLAN" -#: machines/models.py:561 machines/templates/machines/sidebar.html:57 +#: machines/models.py:617 machines/templates/machines/sidebar.html:57 msgid "VLANs" msgstr "VLANs" -#: machines/models.py:574 +#: machines/models.py:629 msgid "MAC-address" msgstr "MAC-address" -#: machines/models.py:597 +#: machines/models.py:644 msgid "Can view a NAS device object" msgstr "Peut voir un objet dispositif NAS" -#: machines/models.py:599 machines/templates/machines/machine.html:164 +#: machines/models.py:645 machines/templates/machines/machine.html:164 msgid "NAS device" msgstr "dispositif NAS" -#: machines/models.py:600 machines/templates/machines/sidebar.html:63 +#: machines/models.py:646 machines/templates/machines/sidebar.html:63 msgid "NAS devices" msgstr "dispositifs NAS" -#: machines/models.py:614 -msgid "Contact email address for the zone" -msgstr "Adresse mail de contact pour la zone" +#: machines/models.py:660 +msgid "Contact email address for the zone." +msgstr "Adresse mail de contact pour la zone." -#: machines/models.py:618 +#: machines/models.py:664 msgid "" "Seconds before the secondary DNS have to ask the primary DNS serial to " -"detect a modification" +"detect a modification." msgstr "" "Secondes avant que le DNS secondaire demande au DNS primaire le serial pour " -"détecter une modification" +"détecter une modification." -#: machines/models.py:623 +#: machines/models.py:671 msgid "" "Seconds before the secondary DNS ask the serial again in case of a primary " -"DNS timeout" +"DNS timeout." msgstr "" "Secondes avant que le DNS secondaire demande le serial de nouveau dans le " -"cas d'un délai d'attente du DNS primaire" +"cas d'un délai d'attente du DNS primaire." -#: machines/models.py:628 +#: machines/models.py:678 msgid "" "Seconds before the secondary DNS stop answering requests in case of primary " -"DNS timeout" +"DNS timeout." msgstr "" "Secondes avant que le DNS secondaire arrête de répondre aux requêtes dans le " -"cas d'un délai d'attente du DNS primaire" +"cas d'un délai d'attente du DNS primaire." -#: machines/models.py:633 machines/models.py:890 -msgid "Time to Live" +#: machines/models.py:683 machines/models.py:950 +msgid "Time To Live." msgstr "Temps de vie" -#: machines/models.py:638 +#: machines/models.py:687 msgid "Can view an SOA record object" msgstr "Peut voir un objet enregistrement SOA" -#: machines/models.py:640 machines/templates/machines/aff_extension.html:36 +#: machines/models.py:688 machines/templates/machines/aff_extension.html:36 #: machines/templates/machines/machine.html:120 msgid "SOA record" msgstr "enregistrement SOA" -#: machines/models.py:641 +#: machines/models.py:689 msgid "SOA records" msgstr "enregistrements SOA" -#: machines/models.py:680 +#: machines/models.py:728 msgid "SOA to edit" msgstr "SOA à modifier" -#: machines/models.py:691 -msgid "Zone name, must begin with a dot (.example.org)" -msgstr "Nom de zone, doit commencer par un point (.example.org)" +#: machines/models.py:739 +msgid "Zone name, must begin with a dot (.example.org)." +msgstr "Nom de zone, doit commencer par un point (.example.org)." -#: machines/models.py:699 -msgid "A record associated with the zone" -msgstr "Enregistrement A associé à la zone" +#: machines/models.py:747 +msgid "A record associated with the zone." +msgstr "Enregistrement A associé à la zone." -#: machines/models.py:705 -msgid "AAAA record associated with the zone" -msgstr "Enregristrement AAAA associé avec la zone" +#: machines/models.py:753 +msgid "AAAA record associated with the zone." +msgstr "Enregristrement AAAA associé avec la zone." -#: machines/models.py:713 -msgid "Should the zone be signed with DNSSEC" -msgstr "La zone doit-elle être signée avec DNSSEC" +#: machines/models.py:757 +msgid "Should the zone be signed with DNSSEC." +msgstr "La zone doit-elle être signée avec DNSSEC." -#: machines/models.py:718 +#: machines/models.py:762 msgid "Can view an extension object" msgstr "Peut voir un objet extension" -#: machines/models.py:719 +#: machines/models.py:763 msgid "Can use all extensions" msgstr "Peut utiliser toutes les extensions" -#: machines/models.py:721 +#: machines/models.py:765 msgid "DNS extension" msgstr "extension DNS" -#: machines/models.py:722 +#: machines/models.py:766 msgid "DNS extensions" msgstr "extensions DNS" -#: machines/models.py:776 +#: machines/models.py:826 +msgid "You don't have the right to use all extensions." +msgstr "Vous n'avez pas le droit d'utiliser toutes les extensions." + +#: machines/models.py:835 msgid "An extension must begin with a dot." msgstr "Une extension doit commencer par un point." -#: machines/models.py:790 +#: machines/models.py:848 machines/models.py:874 machines/models.py:898 +#: machines/models.py:921 machines/models.py:1587 +msgid "Time To Live (TTL)" +msgstr "Temps de vie (TTL)" + +#: machines/models.py:852 msgid "Can view an MX record object" msgstr "Peut voir un objet enregistrement MX" -#: machines/models.py:792 machines/templates/machines/machine.html:124 +#: machines/models.py:853 machines/templates/machines/machine.html:124 msgid "MX record" msgstr "enregistrement MX" -#: machines/models.py:793 +#: machines/models.py:854 msgid "MX records" msgstr "enregistrements MX" -#: machines/models.py:815 +#: machines/models.py:878 msgid "Can view an NS record object" msgstr "Peut voir un objet enregistrement NS" -#: machines/models.py:817 machines/templates/machines/machine.html:128 +#: machines/models.py:879 machines/templates/machines/machine.html:128 msgid "NS record" msgstr "enregistrement NS" -#: machines/models.py:818 +#: machines/models.py:880 msgid "NS records" msgstr "enregistrements NS" -#: machines/models.py:837 +#: machines/models.py:902 msgid "Can view a TXT record object" msgstr "Peut voir un objet enregistrement TXT" -#: machines/models.py:839 machines/templates/machines/machine.html:132 +#: machines/models.py:903 machines/templates/machines/machine.html:132 msgid "TXT record" msgstr "enregistrement TXT" -#: machines/models.py:840 +#: machines/models.py:904 msgid "TXT records" msgstr "enregistrements TXT" -#: machines/models.py:859 +#: machines/models.py:925 msgid "Can view a DNAME record object" msgstr "Peut voir un objet enregistrement DNAME" -#: machines/models.py:861 machines/templates/machines/machine.html:136 +#: machines/models.py:926 machines/templates/machines/machine.html:136 msgid "DNAME record" msgstr "enregistrement DNAME" -#: machines/models.py:862 +#: machines/models.py:927 msgid "DNAME records" msgstr "enregistrements DNAME" -#: machines/models.py:895 +#: machines/models.py:956 msgid "" "Priority of the target server (positive integer value, the lower it is, the " -"more the server will be used if available)" +"more the server will be used if available)." msgstr "" "Priorité du serveur cible (entier positif, plus il est bas, plus le serveur " -"sera utilisé si disponible)" +"sera utilisé si disponible)." -#: machines/models.py:902 +#: machines/models.py:965 msgid "" "Relative weight for records with the same priority (integer value between 0 " -"and 65535)" +"and 65535)." msgstr "" "Poids relatif des enregistrements avec la même priorité (entier entre 0 et " -"65535)" +"65535)." -#: machines/models.py:907 -msgid "TCP/UDP port" -msgstr "Port TCP/UDP" +#: machines/models.py:970 +msgid "TCP/UDP port." +msgstr "Port TCP/UDP." -#: machines/models.py:912 -msgid "Target server" -msgstr "Serveur cible" +#: machines/models.py:973 +msgid "Target server." +msgstr "Serveur cible." -#: machines/models.py:917 +#: machines/models.py:977 msgid "Can view an SRV record object" msgstr "Peut voir un objet enregistrement SRV" -#: machines/models.py:919 machines/templates/machines/machine.html:140 +#: machines/models.py:978 machines/templates/machines/machine.html:140 msgid "SRV record" msgstr "enregistrement SRV" -#: machines/models.py:920 +#: machines/models.py:979 msgid "SRV records" msgstr "enregistrements SRV" -#: machines/models.py:949 machines/templates/machines/aff_sshfp.html:31 -msgid "SSH public key" -msgstr "Clé publique SSH" +#: machines/models.py:1030 +msgid "SSH public key." +msgstr "Clé publique SSH." -#: machines/models.py:957 machines/templates/machines/aff_sshfp.html:33 -#: machines/templates/machines/aff_vlan.html:35 -msgid "Comment" -msgstr "Commentaire" +#: machines/models.py:1033 +msgid "Comment." +msgstr "Commentaire." -#: machines/models.py:984 +#: machines/models.py:1056 msgid "Can view an SSHFP record object" msgstr "Peut voir un objet enregistrement SSHFP" -#: machines/models.py:986 machines/templates/machines/machine.html:144 +#: machines/models.py:1057 machines/templates/machines/machine.html:144 +#: machines/views.py:485 msgid "SSHFP record" msgstr "enregistrement SSHFP" -#: machines/models.py:987 +#: machines/models.py:1058 msgid "SSHFP records" msgstr "enregistrements SSHFP" -#: machines/models.py:1024 +#: machines/models.py:1093 msgid "Can view an interface object" msgstr "Peut voir un objet interface" -#: machines/models.py:1026 +#: machines/models.py:1094 msgid "Can change the owner of an interface" msgstr "Peut changer l'utilisateur d'une interface" -#: machines/models.py:1028 +#: machines/models.py:1096 machines/views.py:369 msgid "interface" msgstr "interface" -#: machines/models.py:1029 +#: machines/models.py:1097 msgid "interfaces" msgstr "interfaces" -#: machines/models.py:1133 +#: machines/models.py:1135 +msgid "Unknown vendor." +msgstr "Constructeur inconnu." + +#: machines/models.py:1199 msgid "The given MAC address is invalid." msgstr "L'adresse MAC indiquée est invalide." -#: machines/models.py:1141 -msgid "There is no IP address available in the slash." -msgstr "Il n'y a pas d'adresse IP disponible dans le slash." +#: machines/models.py:1208 +msgid "There are no IP addresses available in the slash." +msgstr "Il n'y a pas d'adresses IP disponibles dans le slash." -#: machines/models.py:1154 -#, fuzzy -#| msgid "IPv4 range" -msgid "IPv4 unassigning" -msgstr "Plage IPv4" - -#: machines/models.py:1162 -#, fuzzy -#| msgid "IPv4 range" -msgid "IPv4 assigning" -msgstr "Plage IPv4" - -#: machines/models.py:1193 +#: machines/models.py:1260 msgid "The selected IP type is invalid." msgstr "Le type d'IP sélectionné est invalide." -#: machines/models.py:1203 -msgid "Mac address already registered in this Machine Type/Subnet" -msgstr "" +#: machines/models.py:1274 +msgid "MAC address already registered in this machine type/subnet." +msgstr "Adresse MAC déjà enregistrée dans ce type de machine/sous-réseau." -#: machines/models.py:1210 +#: machines/models.py:1283 msgid "The IPv4 address and the machine type don't match." msgstr "L'adresse IPv4 et le type de machine ne correspondent pas." -#: machines/models.py:1225 +#: machines/models.py:1298 msgid "Nonexistent machine." msgstr "Machine inexistante." -#: machines/models.py:1229 -msgid "You can't add a machine." -msgstr "Vous ne pouvez pas ajouter une machine." - -#: machines/models.py:1235 +#: machines/models.py:1311 msgid "" "You don't have the right to add an interface to a machine of another user." msgstr "" "Vous n'avez pas le droit d'ajouter une interface à une machine d'un autre " "utilisateur." -#: machines/models.py:1249 -msgid "Permission required to edit the machine." -msgstr "Permission requise pour modifier la machine." +#: machines/models.py:1335 +msgid "You don't have the right to edit the machine." +msgstr "Vous n'avez pas le droit d'éditer une machine." -#: machines/models.py:1293 machines/models.py:1399 machines/models.py:1609 +#: machines/models.py:1389 machines/models.py:1509 msgid "You don't have the right to view machines other than yours." msgstr "Vous n'avez pas le droit de voir d'autres machines que les vôtres." -#: machines/models.py:1326 +#: machines/models.py:1417 msgid "Can view an IPv6 addresses list object" msgstr "Peut voir un objet list d'adresses IPv6" -#: machines/models.py:1327 +#: machines/models.py:1420 msgid "Can change the SLAAC value of an IPv6 addresses list" msgstr "Peut modifier la valeur SLAAC d'une liste d'adresses IPv6" -#: machines/models.py:1330 +#: machines/models.py:1423 machines/views.py:429 msgid "IPv6 addresses list" msgstr "Liste d'adresses IPv6" -#: machines/models.py:1331 +#: machines/models.py:1424 msgid "IPv6 addresses lists" msgstr "Listes d'adresses IPv6" -#: machines/models.py:1343 machines/models.py:1557 +#: machines/models.py:1436 machines/models.py:1677 msgid "Nonexistent interface." msgstr "Interface inexistante." -#: machines/models.py:1346 machines/models.py:1564 +#: machines/models.py:1442 machines/models.py:1686 msgid "You don't have the right to add an alias to a machine of another user." msgstr "" "Vous n'avez pas le droit d'ajouter un alias à une machine d'un autre " "utilisateur." -#: machines/models.py:1354 -msgid "Permission required to change the SLAAC value of an IPv6 address" -msgstr "Permission requise pour changer la valeur SLAAC d'une adresse IPv6." +#: machines/models.py:1455 +msgid "You don't have the right to change the SLAAC value of an IPv6 address." +msgstr "" +"Vous n'avez pas le droit de changer la valeur SLAAC d'une adresse IPv6." -#: machines/models.py:1426 +#: machines/models.py:1541 msgid "A SLAAC IP address is already registered." msgstr "Une adresse IP SLAAC est déjà enregistrée." -#: machines/models.py:1434 +#: machines/models.py:1555 msgid "" "The v6 prefix is incorrect and doesn't match the type associated with the " "machine." @@ -633,45 +631,49 @@ msgstr "" "Le préfixe v6 est incorrect et ne correspond pas au type associé à la " "machine." -#: machines/models.py:1460 +#: machines/models.py:1580 msgid "Mandatory and unique, must not contain dots." msgstr "Obligatoire et unique, ne doit pas contenir de points." -#: machines/models.py:1474 +#: machines/models.py:1595 msgid "Can view a domain object" msgstr "Peut voir un objet domaine" -#: machines/models.py:1476 +#: machines/models.py:1596 +msgid "Can change the TTL of a domain object" +msgstr "Peut changer le TTL d'un objet domaine" + +#: machines/models.py:1598 msgid "domain" msgstr "domaine" -#: machines/models.py:1477 +#: machines/models.py:1599 msgid "domains" msgstr "domaines" -#: machines/models.py:1499 +#: machines/models.py:1621 msgid "You can't create a both A and CNAME record." msgstr "Vous ne pouvez pas créer un enregistrement à la fois A et CNAME." -#: machines/models.py:1502 +#: machines/models.py:1624 msgid "You can't create a CNAME record pointing to itself." msgstr "Vous ne pouvez pas créer un enregistrement CNAME vers lui-même." -#: machines/models.py:1510 +#: machines/models.py:1630 #, python-format msgid "The domain name %s is too long (over 63 characters)." msgstr "Le nom de domaine %s est trop long (plus de 63 caractères)." -#: machines/models.py:1513 +#: machines/models.py:1634 #, python-format msgid "The domain name %s contains forbidden characters." msgstr "Le nom de domaine %s contient des caractères interdits." -#: machines/models.py:1531 +#: machines/models.py:1651 msgid "Invalid extension." msgstr "Extension invalide." -#: machines/models.py:1572 +#: machines/models.py:1702 #, python-format msgid "" "You reached the maximum number of alias that you are allowed to create " @@ -680,160 +682,164 @@ msgstr "" "Vous avez atteint le nombre maximal d'alias que vous pouvez créer vous-même " "(%s)." -#: machines/models.py:1585 +#: machines/models.py:1723 msgid "You don't have the right to edit an alias of a machine of another user." msgstr "" "Vous n'avez pas le droit de modifier un alias d'une machine d'un autre " "utilisateur." -#: machines/models.py:1597 +#: machines/models.py:1743 msgid "" "You don't have the right to delete an alias of a machine of another user." msgstr "" "Vous n'avez pas le droit de supprimer un alias d'une machine d'un autre " "utilisateur." -#: machines/models.py:1625 +#: machines/models.py:1773 +msgid "You don't have the right to change the domain's TTL." +msgstr "Vous n'avez pas le droit de changer le TTL du domaine." + +#: machines/models.py:1790 msgid "Can view an IPv4 addresses list object" msgstr "Peut voir un object liste d'adresses IPv4" -#: machines/models.py:1627 +#: machines/models.py:1791 msgid "IPv4 addresses list" msgstr "Liste d'adresses IPv4" -#: machines/models.py:1628 +#: machines/models.py:1792 msgid "IPv4 addresses lists" msgstr "Listes d'adresses IPv4" -#: machines/models.py:1639 +#: machines/models.py:1804 msgid "The IPv4 address and the range of the IP type don't match." msgstr "L'adresse IPv4 et la plage du type d'IP ne correspondent pas." -#: machines/models.py:1657 +#: machines/models.py:1822 msgid "DHCP server" msgstr "Serveur DHCP" -#: machines/models.py:1658 +#: machines/models.py:1823 msgid "Switches configuration server" msgstr "Serveur de configuration des commutateurs réseau" -#: machines/models.py:1659 +#: machines/models.py:1824 msgid "Recursive DNS server" msgstr "Serveur DNS récursif" -#: machines/models.py:1660 +#: machines/models.py:1825 msgid "NTP server" msgstr "Serveur NTP" -#: machines/models.py:1661 +#: machines/models.py:1826 msgid "RADIUS server" msgstr "Serveur RADIUS" -#: machines/models.py:1662 +#: machines/models.py:1827 msgid "Log server" msgstr "Serveur log" -#: machines/models.py:1663 +#: machines/models.py:1828 msgid "LDAP master server" msgstr "Serveur LDAP maître" -#: machines/models.py:1664 +#: machines/models.py:1829 msgid "LDAP backup server" msgstr "Serveur LDAP de secours" -#: machines/models.py:1665 +#: machines/models.py:1830 msgid "SMTP server" msgstr "Serveur SMTP" -#: machines/models.py:1666 +#: machines/models.py:1831 msgid "postgreSQL server" msgstr "Serveur postgreSQL" -#: machines/models.py:1667 +#: machines/models.py:1832 msgid "mySQL server" msgstr "Serveur mySQL" -#: machines/models.py:1668 +#: machines/models.py:1833 msgid "SQL client" msgstr "Client SQL" -#: machines/models.py:1669 +#: machines/models.py:1834 msgid "Gateway" msgstr "Passerelle" -#: machines/models.py:1683 +#: machines/models.py:1842 msgid "Can view a role object" msgstr "Peut voir un objet rôle" -#: machines/models.py:1685 +#: machines/models.py:1843 msgid "server role" msgstr "rôle de serveur" -#: machines/models.py:1686 +#: machines/models.py:1844 msgid "server roles" msgstr "rôles de serveur" -#: machines/models.py:1720 +#: machines/models.py:1876 msgid "Minimal time before regeneration of the service." msgstr "Temps minimal avant régénération du service." -#: machines/models.py:1724 +#: machines/models.py:1880 msgid "Maximal time before regeneration of the service." msgstr "Temps maximal avant régénération du service." -#: machines/models.py:1730 +#: machines/models.py:1885 msgid "Can view a service object" msgstr "Peut voir un objet service" -#: machines/models.py:1732 +#: machines/models.py:1886 msgid "service to generate (DHCP, DNS, ...)" msgstr "service à générer (DHCP, DNS, ...)" -#: machines/models.py:1733 +#: machines/models.py:1887 msgid "services to generate (DHCP, DNS, ...)" msgstr "services à générer (DHCP, DNS, ...)" -#: machines/models.py:1779 +#: machines/models.py:1931 msgid "Can view a service server link object" msgstr "Peut voir un objet lien service serveur" -#: machines/models.py:1781 +#: machines/models.py:1933 msgid "link between service and server" msgstr "lien entre service et serveur" -#: machines/models.py:1782 +#: machines/models.py:1934 msgid "links between service and server" msgstr "liens entre service et serveur" -#: machines/models.py:1824 +#: machines/models.py:1975 msgid "Name of the ports configuration" msgstr "Nom de la configuration de ports" -#: machines/models.py:1830 +#: machines/models.py:1980 msgid "Can view a ports opening list object" msgstr "Peut voir un objet liste d'ouverture de ports" -#: machines/models.py:1833 +#: machines/models.py:1983 msgid "ports opening list" msgstr "liste d'ouverture de ports" -#: machines/models.py:1834 +#: machines/models.py:1984 msgid "ports opening lists" msgstr "listes d'ouverture de ports" -#: machines/models.py:1843 +#: machines/models.py:1995 msgid "You don't have the right to delete a ports opening list." msgstr "Vous n'avez pas le droit de supprimer une liste d'ouverture de ports." -#: machines/models.py:1846 +#: machines/models.py:1999 msgid "This ports opening list is used." msgstr "Cette liste d'ouverture de ports est utilisée." -#: machines/models.py:1919 +#: machines/models.py:2053 msgid "ports opening" msgstr "ouverture de ports" -#: machines/models.py:1920 +#: machines/models.py:2054 msgid "ports openings" msgstr "ouvertures de ports" @@ -841,6 +847,16 @@ msgstr "ouvertures de ports" msgid "Aliases" msgstr "Alias" +#: machines/templates/machines/aff_alias.html:33 +#: machines/templates/machines/aff_dname.html:32 +#: machines/templates/machines/aff_mx.html:35 +#: machines/templates/machines/aff_ns.html:34 +#: machines/templates/machines/aff_soa.html:37 +#: machines/templates/machines/aff_srv.html:35 +#: machines/templates/machines/aff_txt.html:34 +msgid "TTL" +msgstr "Temps de vie" + #: machines/templates/machines/aff_dname.html:30 msgid "Target zone" msgstr "Cible" @@ -860,8 +876,8 @@ msgstr "Extension" #: machines/templates/machines/aff_extension.html:35 #: machines/templates/machines/aff_iptype.html:37 -msgid "'infra' right required" -msgstr "droit 'infra' requis" +msgid "\"infra\" right required" +msgstr "droit « infra » requis" #: machines/templates/machines/aff_extension.html:41 msgid "DNSSEC" @@ -919,7 +935,7 @@ msgstr "Voir le profil" msgid "Deactivated" msgstr "Désactivée" -#: machines/templates/machines/aff_machines.html:67 machines/views.py:374 +#: machines/templates/machines/aff_machines.html:67 msgid "Create an interface" msgstr "Créer une interface" @@ -935,25 +951,31 @@ msgstr "Afficher le constructeur" msgid "Display the IPv6 address" msgstr "Afficher les adresses IPv6" -#: machines/templates/machines/aff_machines.html:126 -msgid " Edit" -msgstr " Modifier" +#: machines/templates/machines/aff_machines.html:126 machines/views.py:299 +#: machines/views.py:413 machines/views.py:469 machines/views.py:520 +#: machines/views.py:583 machines/views.py:646 machines/views.py:708 +#: machines/views.py:760 machines/views.py:812 machines/views.py:864 +#: machines/views.py:919 machines/views.py:971 machines/views.py:1033 +#: machines/views.py:1089 machines/views.py:1141 machines/views.py:1207 +#: machines/views.py:1259 machines/views.py:1575 +msgid "Edit" +msgstr "Modifier" #: machines/templates/machines/aff_machines.html:134 -msgid " Manage the aliases" -msgstr " Gérer les alias" +msgid "Manage the aliases" +msgstr "Gérer les alias" #: machines/templates/machines/aff_machines.html:142 -msgid " Manage the IPv6 addresses" -msgstr " Gérer les adresses IPv6" +msgid "Manage the IPv6 addresses" +msgstr "Gérer les adresses IPv6" #: machines/templates/machines/aff_machines.html:150 -msgid " Manage the SSH fingerprints" -msgstr " Gérer les empreintes SSH" +msgid "Manage the SSH fingerprints" +msgstr "Gérer les empreintes SSH" #: machines/templates/machines/aff_machines.html:158 -msgid " Manage the ports configuration" -msgstr " Gérer les configuration de ports" +msgid "Manage the ports configuration" +msgstr "Gérer les configuration de ports" #: machines/templates/machines/aff_machinetype.html:33 msgid "Matching IP type" @@ -1023,12 +1045,12 @@ msgid "Last regeneration" msgstr "Dernière régénération" #: machines/templates/machines/aff_servers.html:34 -msgid "Regeneration required" -msgstr "Régénération requise" +msgid "Regeneration asked" +msgstr "Régénération demandée" #: machines/templates/machines/aff_servers.html:35 -msgid "Regeneration activated" -msgstr "Régénération activée" +msgid "Regeneration needed" +msgstr "Régénération requise" #: machines/templates/machines/aff_service.html:33 msgid "Minimal time before regeneration" @@ -1062,11 +1084,6 @@ msgstr "Relance" msgid "Expire" msgstr "Expiration" -#: machines/templates/machines/aff_soa.html:37 -#: machines/templates/machines/aff_srv.html:35 -msgid "TTL" -msgstr "Temps de vie" - #: machines/templates/machines/aff_srv.html:32 #: machines/templates/machines/machine.html:152 msgid "Service" @@ -1088,10 +1105,19 @@ msgstr "Port" msgid "Target" msgstr "Cible" +#: machines/templates/machines/aff_sshfp.html:31 +msgid "SSH public key" +msgstr "Clé publique SSH" + #: machines/templates/machines/aff_sshfp.html:32 msgid "Algorithm used" msgstr "Algorithme utilisé" +#: machines/templates/machines/aff_sshfp.html:33 +#: machines/templates/machines/aff_vlan.html:35 +msgid "Comment" +msgstr "Commentaire" + #: machines/templates/machines/aff_vlan.html:33 msgid "ID" msgstr "ID" @@ -1115,6 +1141,7 @@ msgstr "" "( %(objet)s ) ?" #: machines/templates/machines/delete.html:36 +#: machines/templates/machines/edit_portlist.html:52 msgid "Confirm" msgstr "Confirmer" @@ -1142,137 +1169,133 @@ msgstr "Machines" msgid "Add a port" msgstr "Ajouter un port" -#: machines/templates/machines/edit_portlist.html:53 -msgid "Create or edit" -msgstr "Créer ou modifier" - #: machines/templates/machines/index_alias.html:32 msgid "List of the aliases of the interface" msgstr "Liste des alias de l'interface" #: machines/templates/machines/index_alias.html:34 -msgid " Add an alias" -msgstr " Ajouter un alias" +msgid "Add an alias" +msgstr "Ajouter un alias" #: machines/templates/machines/index_alias.html:36 -msgid " Delete one or several aliases" -msgstr " Supprimer un ou plusieurs alias" +msgid "Delete one or several aliases" +msgstr "Supprimer un ou plusieurs alias" #: machines/templates/machines/index_extension.html:33 msgid "List of extensions" msgstr "Liste des extensions" -#: machines/templates/machines/index_extension.html:37 -msgid " Add an extension" -msgstr " Ajouter une extension" +#: machines/templates/machines/index_extension.html:36 +msgid "Add an extension" +msgstr "Ajouter une extension" -#: machines/templates/machines/index_extension.html:40 -msgid " Delete one or several extensions" -msgstr " Supprimer une ou plusieurs extensions" +#: machines/templates/machines/index_extension.html:39 +msgid "Delete one or several extensions" +msgstr "Supprimer une ou plusieurs extensions" -#: machines/templates/machines/index_extension.html:44 +#: machines/templates/machines/index_extension.html:43 msgid "List of SOA records" msgstr "Liste des enregistrements SOA" -#: machines/templates/machines/index_extension.html:47 -msgid " Add an SOA record" -msgstr " Ajouter un enregistrement SOA" +#: machines/templates/machines/index_extension.html:46 +msgid "Add an SOA record" +msgstr "Ajouter un enregistrement SOA" -#: machines/templates/machines/index_extension.html:51 -msgid " Delete one or several SOA records" -msgstr " Supprimer un ou plusieurs enregistrements SOA" +#: machines/templates/machines/index_extension.html:50 +msgid "Delete one or several SOA records" +msgstr "Supprimer un ou plusieurs enregistrements SOA" -#: machines/templates/machines/index_extension.html:55 +#: machines/templates/machines/index_extension.html:54 msgid "List of MX records" msgstr "Liste des enregistrements MX" -#: machines/templates/machines/index_extension.html:58 -msgid " Add an MX record" -msgstr " Ajouter un enregistrement MX" +#: machines/templates/machines/index_extension.html:57 +msgid "Add an MX record" +msgstr "Ajouter un enregistrement MX" -#: machines/templates/machines/index_extension.html:62 -msgid " Delete one or several MX records" -msgstr " Supprimer un ou plusieurs enregistrements MX" +#: machines/templates/machines/index_extension.html:61 +msgid "Delete one or several MX records" +msgstr "Supprimer un ou plusieurs enregistrements MX" -#: machines/templates/machines/index_extension.html:66 +#: machines/templates/machines/index_extension.html:65 msgid "List of NS records" msgstr "Liste des enregistrements NS" -#: machines/templates/machines/index_extension.html:69 -msgid " Add an NS record" -msgstr " Ajouter un enregistrement NS" +#: machines/templates/machines/index_extension.html:68 +msgid "Add an NS record" +msgstr "Ajouter un enregistrement NS" -#: machines/templates/machines/index_extension.html:73 -msgid " Delete one or several NS records" -msgstr " Supprimer un ou plusieurs enregistrements NS" +#: machines/templates/machines/index_extension.html:72 +msgid "Delete one or several NS records" +msgstr "Supprimer un ou plusieurs enregistrements NS" -#: machines/templates/machines/index_extension.html:77 +#: machines/templates/machines/index_extension.html:76 msgid "List of TXT records" msgstr "Liste des enregistrements TXT" -#: machines/templates/machines/index_extension.html:80 -msgid " Add a TXT record" -msgstr " Ajouter un enregistrement TXT" +#: machines/templates/machines/index_extension.html:79 +msgid "Add a TXT record" +msgstr "Ajouter un enregistrement TXT" -#: machines/templates/machines/index_extension.html:84 -msgid " Delete one or several TXT records" -msgstr " Supprimer un ou plusieurs enregistrements TXT" +#: machines/templates/machines/index_extension.html:83 +msgid "Delete one or several TXT records" +msgstr "Supprimer un ou plusieurs enregistrements TXT" -#: machines/templates/machines/index_extension.html:88 +#: machines/templates/machines/index_extension.html:87 msgid "List of DNAME records" msgstr "Liste des enregistrements DNAME" -#: machines/templates/machines/index_extension.html:91 -msgid " Add a DNAME record" -msgstr " Ajouter un enregistrement DNAME" +#: machines/templates/machines/index_extension.html:90 +msgid "Add a DNAME record" +msgstr "Ajouter un enregistrement DNAME" -#: machines/templates/machines/index_extension.html:95 -msgid " Delete one or several DNAME records" -msgstr " Supprimer un ou plusieurs enregistrements DNAME" +#: machines/templates/machines/index_extension.html:94 +msgid "Delete one or several DNAME records" +msgstr "Supprimer un ou plusieurs enregistrements DNAME" -#: machines/templates/machines/index_extension.html:99 +#: machines/templates/machines/index_extension.html:98 msgid "List of SRV records" msgstr "Liste des enregistrements SRV" -#: machines/templates/machines/index_extension.html:102 -msgid " Add an SRV record" -msgstr " Ajouter un enregistrement SRV" +#: machines/templates/machines/index_extension.html:101 +msgid "Add an SRV record" +msgstr "Ajouter un enregistrement SRV" -#: machines/templates/machines/index_extension.html:106 -msgid " Delete one or several SRV records" -msgstr " Supprimer un ou plusieurs enregistrements SRV" +#: machines/templates/machines/index_extension.html:105 +msgid "Delete one or several SRV records" +msgstr "Supprimer un ou plusieurs enregistrements SRV" #: machines/templates/machines/index_iptype.html:33 msgid "List of IP types" msgstr "Liste des types d'IP" #: machines/templates/machines/index_iptype.html:36 -msgid " Add an IP type" -msgstr " Ajouter un type d'IP" +msgid "Add an IP type" +msgstr "Ajouter un type d'IP" #: machines/templates/machines/index_iptype.html:40 -msgid " Delete one or several IP types" -msgstr " Supprimer un ou plusieurs types d'IP" +msgid "Delete one or several IP types" +msgstr "Supprimer un ou plusieurs types d'IP" #: machines/templates/machines/index_ipv6.html:33 msgid "List of the IPv6 addresses of the interface" msgstr "Liste des adresses IPv6 de l'interface" #: machines/templates/machines/index_ipv6.html:36 -msgid " Add an IPv6 address" -msgstr " Ajouter une adresse IPv6" +msgid "Add an IPv6 address" +msgstr "Ajouter une adresse IPv6" #: machines/templates/machines/index_machinetype.html:34 msgid "List of machine types" msgstr "Liste des types de machine" #: machines/templates/machines/index_machinetype.html:37 -msgid " Add a machine type" -msgstr " Ajouter un type de machine" +msgid "Add a machine type" +msgstr "Ajouter un type de machine" #: machines/templates/machines/index_machinetype.html:41 -msgid " Delete one or several machine types" -msgstr " Supprimer un ou plusieurs types de machine" +msgid "Delete one or several machine types" +msgstr "Supprimer un ou plusieurs types de machine" #: machines/templates/machines/index_nas.html:34 msgid "List of NAS devices" @@ -1290,20 +1313,20 @@ msgstr "" "NAS." #: machines/templates/machines/index_nas.html:38 -msgid " Add a NAS device type" -msgstr " Ajouter un type de dispositif NAS" +msgid "Add a NAS device type" +msgstr "Ajouter un type de dispositif NAS" #: machines/templates/machines/index_nas.html:42 -msgid " Delete one or several NAS device types" -msgstr " Supprimer un ou plusieurs types de dispositif NAS" +msgid "Delete one or several NAS device types" +msgstr "Supprimer un ou plusieurs types de dispositif NAS" #: machines/templates/machines/index_portlist.html:11 msgid "List of ports configurations" msgstr "Liste des configurations de ports" #: machines/templates/machines/index_portlist.html:14 -msgid " Add a configuration" -msgstr " Ajouter une configuration" +msgid "Add a configuration" +msgstr "Ajouter une configuration" #: machines/templates/machines/index_portlist.html:21 msgid "TCP (input)" @@ -1326,24 +1349,24 @@ msgid "List of roles" msgstr "Liste des rôles" #: machines/templates/machines/index_role.html:36 -msgid " Add a role" -msgstr " Ajouter un rôle" +msgid "Add a role" +msgstr "Ajouter un rôle" #: machines/templates/machines/index_role.html:39 -msgid " Delete one or several roles" -msgstr " Supprimer un ou plusieurs rôles" +msgid "Delete one or several roles" +msgstr "Supprimer un ou plusieurs rôles" #: machines/templates/machines/index_service.html:33 msgid "List of services" msgstr "Liste des services" #: machines/templates/machines/index_service.html:36 -msgid " Add a service" -msgstr " Ajouter un service" +msgid "Add a service" +msgstr "Ajouter un service" #: machines/templates/machines/index_service.html:39 -msgid " Delete one or several services" -msgstr " Supprimer un ou plusieurs services" +msgid "Delete one or several services" +msgstr "Supprimer un ou plusieurs services" #: machines/templates/machines/index_service.html:42 msgid "States of servers" @@ -1354,20 +1377,20 @@ msgid "SSH fingerprints" msgstr "Empreintes SSH" #: machines/templates/machines/index_sshfp.html:34 -msgid " Add an SSH fingerprint" -msgstr " Ajouter une empreinte SSH" +msgid "Add an SSH fingerprint" +msgstr "Ajouter une empreinte SSH" #: machines/templates/machines/index_vlan.html:33 msgid "List of VLANs" msgstr "Liste des VLANs" #: machines/templates/machines/index_vlan.html:36 -msgid " Add a VLAN" -msgstr " Ajouter un VLAN" +msgid "Add a VLAN" +msgstr "Ajouter un VLAN" #: machines/templates/machines/index_vlan.html:39 -msgid " Delete one or several VLANs" -msgstr " Supprimer un ou plusieurs VLANs" +msgid "Delete one or several VLANs" +msgstr "Supprimer un ou plusieurs VLANs" #: machines/templates/machines/machine.html:92 msgid "Machine" @@ -1409,92 +1432,76 @@ msgstr "Rôles de serveur" msgid "Ports openings" msgstr "Ouvertures de ports" -#: machines/views.py:155 +#: machines/views.py:153 msgid "Select a machine type first." msgstr "Sélectionnez un type de machine d'abord." -#: machines/views.py:257 +#: machines/views.py:244 msgid "The machine was created." msgstr "La machine a été créée." -#: machines/views.py:269 -msgid "Create a machine" -msgstr "Créer une machine" +#: machines/views.py:253 machines/views.py:348 machines/views.py:389 +#: machines/views.py:447 machines/views.py:501 machines/views.py:566 +#: machines/views.py:629 machines/views.py:691 machines/views.py:743 +#: machines/views.py:795 machines/views.py:847 machines/views.py:902 +#: machines/views.py:954 machines/views.py:1011 machines/views.py:1072 +#: machines/views.py:1124 machines/views.py:1190 machines/views.py:1242 +msgid "Add" +msgstr "Ajouter" -#: machines/views.py:309 +#: machines/views.py:285 msgid "The machine was edited." msgstr "La machine a été modifiée." -#: machines/views.py:321 machines/views.py:445 machines/views.py:511 -#: machines/views.py:567 machines/views.py:629 machines/views.py:690 -#: machines/views.py:748 machines/views.py:805 machines/views.py:862 -#: machines/views.py:919 machines/views.py:977 machines/views.py:1034 -#: machines/views.py:1106 machines/views.py:1169 machines/views.py:1226 -#: machines/views.py:1292 machines/views.py:1349 -msgid "Edit" -msgstr "Modifier" - -#: machines/views.py:334 +#: machines/views.py:312 msgid "The machine was deleted." msgstr "La machine a été supprimée." -#: machines/views.py:363 +#: machines/views.py:338 msgid "The interface was created." msgstr "L'interface a été créée." -#: machines/views.py:390 +#: machines/views.py:364 msgid "The interface was deleted." msgstr "L'interface a été supprimée." -#: machines/views.py:415 +#: machines/views.py:384 msgid "The IPv6 addresses list was created." msgstr "La liste d'adresses IPv6 a été créée." -#: machines/views.py:421 -msgid "Create an IPv6 addresses list" -msgstr "Créer une liste d'adresses IPv6" - -#: machines/views.py:439 +#: machines/views.py:405 msgid "The IPv6 addresses list was edited." msgstr "La liste d'adresses IPv6 a été modifiée." -#: machines/views.py:458 +#: machines/views.py:424 msgid "The IPv6 addresses list was deleted." msgstr "La liste d'adresses IPv6 a été supprimée." -#: machines/views.py:482 +#: machines/views.py:442 msgid "The SSHFP record was created." msgstr "L'enregistrement SSHFP a été créé." -#: machines/views.py:488 -msgid "Create a SSHFP record" -msgstr "Créer un enregistrement SSHFP" - -#: machines/views.py:505 +#: machines/views.py:461 msgid "The SSHFP record was edited." msgstr "L'enregistrement SSHFP a été modifié." -#: machines/views.py:524 +#: machines/views.py:480 msgid "The SSHFP record was deleted." msgstr "L'enregistrement SSHFP a été supprimé." -#: machines/views.py:545 +#: machines/views.py:498 msgid "The IP type was created." msgstr "Le type d'IP a été créé." -#: machines/views.py:548 -msgid "Create an IP type" -msgstr "Créer un type d'IP" - -#: machines/views.py:564 +#: machines/views.py:517 msgid "The IP type was edited." msgstr "Le type d'IP a été modifié." -#: machines/views.py:583 +#: machines/views.py:536 msgid "The IP type was deleted." msgstr "Le type d'IP a été supprimé." -#: machines/views.py:587 +#: machines/views.py:542 #, python-format msgid "" "The IP type %s is assigned to at least one machine, you can't delete it." @@ -1502,31 +1509,27 @@ msgstr "" "Le type d'IP %s est assigné à au moins une machine, vous ne pouvez pas le " "supprimer." -#: machines/views.py:592 machines/views.py:654 machines/views.py:715 -#: machines/views.py:772 machines/views.py:829 machines/views.py:886 -#: machines/views.py:944 machines/views.py:1001 machines/views.py:1058 -#: machines/views.py:1136 machines/views.py:1193 machines/views.py:1250 -#: machines/views.py:1316 machines/views.py:1373 +#: machines/views.py:550 machines/views.py:613 machines/views.py:675 +#: machines/views.py:729 machines/views.py:781 machines/views.py:833 +#: machines/views.py:886 machines/views.py:940 machines/views.py:992 +#: machines/views.py:1056 machines/views.py:1110 machines/views.py:1165 +#: machines/views.py:1228 machines/views.py:1280 msgid "Delete" msgstr "Supprimer" -#: machines/views.py:605 +#: machines/views.py:563 msgid "The machine type was created." msgstr "Le type de machine a été créé." -#: machines/views.py:608 -msgid "Create a machine type" -msgstr "Créer un type de machine" - -#: machines/views.py:626 +#: machines/views.py:580 msgid "The machine type was edited." msgstr "Le type de machine a été modifié." -#: machines/views.py:645 +#: machines/views.py:599 msgid "The machine type was deleted." msgstr "Le type de machine a été supprimé." -#: machines/views.py:649 +#: machines/views.py:605 #, python-format msgid "" "The machine type %s is assigned to at least one machine, you can't delete it." @@ -1534,23 +1537,19 @@ msgstr "" "Le type de machine %s est assigné à au moins un machine, vous ne pouvez pas " "le supprimer." -#: machines/views.py:667 +#: machines/views.py:626 msgid "The extension was created." msgstr "L'extension a été créée." -#: machines/views.py:670 -msgid "Create an extension" -msgstr "Créer une extension" - -#: machines/views.py:687 +#: machines/views.py:643 msgid "The extension was edited." msgstr "L'extension a été modifiée." -#: machines/views.py:706 +#: machines/views.py:662 msgid "The extension was deleted." msgstr "L'extension a été supprimée." -#: machines/views.py:710 +#: machines/views.py:668 #, python-format msgid "" "The extension %s is assigned to at least one machine type, you can't delete " @@ -1559,260 +1558,214 @@ msgstr "" "L'extension %s est assignée à au moins un type de machine, vous ne pouvez " "pas le supprimer." -#: machines/views.py:728 +#: machines/views.py:688 msgid "The SOA record was created." msgstr "L'enregistrement SOA a été créé." -#: machines/views.py:731 -msgid "Create an SOA record" -msgstr "Créer un enregistrement SOA" - -#: machines/views.py:745 +#: machines/views.py:705 msgid "The SOA record was edited." msgstr "L'enregistrement SOA a été modifié." -#: machines/views.py:764 +#: machines/views.py:722 msgid "The SOA record was deleted." msgstr "L'enregistrement SOA a été supprimé." -#: machines/views.py:768 +#: machines/views.py:725 #, python-format msgid "Error: the SOA record %s can't be deleted." msgstr "Erreur : l'enregistrement SOA %s ne peut pas être supprimé." -#: machines/views.py:785 +#: machines/views.py:740 msgid "The MX record was created." msgstr "L'enregistrement MX a été créé." -#: machines/views.py:788 -msgid "Create an MX record" -msgstr "Créer un enregistrement MX" - -#: machines/views.py:802 +#: machines/views.py:757 msgid "The MX record was edited." msgstr "L'enregistrement MX a été modifié." -#: machines/views.py:821 +#: machines/views.py:774 msgid "The MX record was deleted." msgstr "L'enregistrement MX a été supprimé." -#: machines/views.py:825 +#: machines/views.py:777 #, python-format msgid "Error: the MX record %s can't be deleted." msgstr "Erreur : l'enregistrement MX %s ne peut pas être supprimé." -#: machines/views.py:842 +#: machines/views.py:792 msgid "The NS record was created." msgstr "L'enregistrement NS a été créé." -#: machines/views.py:845 -msgid "Create an NS record" -msgstr "Créer un enregistrement NS" - -#: machines/views.py:859 +#: machines/views.py:809 msgid "The NS record was edited." msgstr "L'enregistrement NS a été modifié." -#: machines/views.py:878 +#: machines/views.py:826 msgid "The NS record was deleted." msgstr "L'enregistrement NS a été supprimé." -#: machines/views.py:882 +#: machines/views.py:829 #, python-format msgid "Error: the NS record %s can't be deleted." msgstr "Erreur : l'enregistrement NS %s ne peut pas être supprimé." -#: machines/views.py:899 +#: machines/views.py:844 msgid "The DNAME record was created." msgstr "L'enregistrement DNAME a été créé." -#: machines/views.py:902 -msgid "Create a DNAME record" -msgstr "Créer un enregistrement DNAME" - -#: machines/views.py:916 +#: machines/views.py:861 msgid "The DNAME record was edited." msgstr "L'enregistrement DNAME a été modifié." -#: machines/views.py:935 +#: machines/views.py:878 msgid "The DNAME record was deleted." msgstr "L'enregistrement DNAME a été supprimé." -#: machines/views.py:939 +#: machines/views.py:882 #, python-format msgid "Error: the DNAME record %s can't be deleted." msgstr "Erreur : l'enregistrement DNAME %s ne peut pas être supprimé." -#: machines/views.py:957 +#: machines/views.py:899 msgid "The TXT record was created." msgstr "L'enregistrement TXT a été créé." -#: machines/views.py:960 -msgid "Create a TXT record" -msgstr "Créer un enregistrement TXT" - -#: machines/views.py:974 +#: machines/views.py:916 msgid "The TXT record was edited." msgstr "L'enregistrement TXT a été modifié." -#: machines/views.py:993 +#: machines/views.py:933 msgid "The TXT record was deleted." msgstr "L'enregistrement TXT a été supprimé." -#: machines/views.py:997 +#: machines/views.py:936 #, python-format msgid "Error: the TXT record %s can't be deleted." msgstr "Erreur : l'enregistrement %s ne peut pas être supprimé." -#: machines/views.py:1014 +#: machines/views.py:951 msgid "The SRV record was created." msgstr "L'enregistrement SRV a été créé." -#: machines/views.py:1017 -msgid "Create an SRV record" -msgstr "Créer un enregistrement SRV" - -#: machines/views.py:1031 +#: machines/views.py:968 msgid "The SRV record was edited." msgstr "L'enregistrement SRV a été modifié." -#: machines/views.py:1050 +#: machines/views.py:985 msgid "The SRV record was deleted." msgstr "L'enregistrement SRV a été supprimé." -#: machines/views.py:1054 +#: machines/views.py:988 #, python-format msgid "Error: the SRV record %s can't be deleted." msgstr "Erreur : l'enregistrement SRV %s ne peut pas être supprimé." -#: machines/views.py:1074 +#: machines/views.py:1006 msgid "The alias was created." msgstr "L'alias a été créé." -#: machines/views.py:1080 -msgid "Create an alias" -msgstr "Créer un alias" - -#: machines/views.py:1098 +#: machines/views.py:1025 msgid "The alias was edited." msgstr "L'alias a été modifié." -#: machines/views.py:1124 +#: machines/views.py:1047 #, python-format msgid "The alias %s was deleted." msgstr "L'alias %s a été supprimé." -#: machines/views.py:1129 +#: machines/views.py:1050 #, python-format msgid "Error: the alias %s can't be deleted." msgstr "Erreur : l'alias %s ne peut pas être supprimé." -#: machines/views.py:1149 +#: machines/views.py:1069 msgid "The role was created." msgstr "Le rôle a été créé." -#: machines/views.py:1152 -msgid "Create a role" -msgstr "Créer un rôle" - -#: machines/views.py:1166 +#: machines/views.py:1086 msgid "The role was edited." msgstr "Le rôle a été modifié." -#: machines/views.py:1185 +#: machines/views.py:1103 msgid "The role was deleted." msgstr "Le rôle a été supprimé." -#: machines/views.py:1189 +#: machines/views.py:1106 #, python-format msgid "Error: the role %s can't be deleted." msgstr "Erreur : le rôle %s ne peut pas être supprimé." -#: machines/views.py:1206 +#: machines/views.py:1121 msgid "The service was created." msgstr "Le service a été créé." -#: machines/views.py:1209 -msgid "Create a service" -msgstr "Créer un service" - -#: machines/views.py:1223 +#: machines/views.py:1138 msgid "The service was edited." msgstr "Le service a été modifié." -#: machines/views.py:1242 +#: machines/views.py:1157 msgid "The service was deleted." msgstr "Le service a été supprimé." -#: machines/views.py:1246 +#: machines/views.py:1161 #, python-format msgid "Error: the service %s can't be deleted." msgstr "Erreur : le service %s ne peut pas être supprimé." -#: machines/views.py:1272 +#: machines/views.py:1187 msgid "The VLAN was created." msgstr "Le VLAN a été créé." -#: machines/views.py:1275 -msgid "Create a VLAN" -msgstr "Créer un VLAN" - -#: machines/views.py:1289 +#: machines/views.py:1204 msgid "The VLAN was edited." msgstr "Le VLAN a été modifié." -#: machines/views.py:1308 +#: machines/views.py:1221 msgid "The VLAN was deleted." msgstr "Le VLAN a été supprimé." -#: machines/views.py:1312 +#: machines/views.py:1224 #, python-format msgid "Error: the VLAN %s can't be deleted." msgstr "Erreur : le VLAN %s ne peut pas être supprimé." -#: machines/views.py:1329 +#: machines/views.py:1239 msgid "The NAS device was created." msgstr "Le dispositif NAS a été créé." -#: machines/views.py:1332 -msgid "Create a NAS device" -msgstr "Créer un dispositif NAS" - -#: machines/views.py:1346 +#: machines/views.py:1256 msgid "The NAS device was edited." msgstr "Le dispositif NAS a été modifié." -#: machines/views.py:1365 +#: machines/views.py:1273 msgid "The NAS device was deleted." msgstr "Le dispositif NAS a été supprimé." -#: machines/views.py:1369 +#: machines/views.py:1276 #, python-format msgid "Error: the NAS device %s can't be deleted." msgstr "Erreur : le dispositif NAS %s ne peut pas être supprimé." -#: machines/views.py:1625 +#: machines/views.py:1502 msgid "The ports list was edited." msgstr "La liste de ports a été modifiée." -#: machines/views.py:1639 +#: machines/views.py:1516 msgid "The ports list was deleted." msgstr "La liste de ports a été supprimée." -#: machines/views.py:1664 +#: machines/views.py:1541 msgid "The ports list was created." msgstr "La liste de ports a été créée." -#: machines/views.py:1682 -msgid "Warning: the IPv4 isn't public, the opening won't have effect in v4." +#: machines/views.py:1561 +msgid "" +"Warning: the IP address is not public, the opening won't have any effect in " +"v4." msgstr "" -"Attention : l'adresse IPv4 n'est pas publique, l'ouverture n'aura pas " -"d'effet en v4." +"Attention : l'adresse IP n'est pas publique, l'ouverture n'aura pas d'effet " +"en v4." -#: machines/views.py:1692 +#: machines/views.py:1572 msgid "The ports configuration was edited." msgstr "La configuration de ports a été modifiée." - -#: machines/views.py:1695 -msgid "Edit the configuration" -msgstr "Modifier la configuration" diff --git a/machines/migrations/0106_auto_20191120_0159.py b/machines/migrations/0106_auto_20191120_0159.py new file mode 100644 index 00000000..5526a818 --- /dev/null +++ b/machines/migrations/0106_auto_20191120_0159.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.23 on 2019-11-20 00:59 +from __future__ import unicode_literals + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('machines', '0105_dname_ttl'), + ] + + operations = [ + migrations.AlterModelOptions( + name='domain', + options={'permissions': (('view_domain', 'Can view a domain object'), ('change_ttl', 'Can change the TTL of a domain object')), 'verbose_name': 'domain', 'verbose_name_plural': 'domains'}, + ), + migrations.AlterField( + model_name='extension', + name='dnssec', + field=models.BooleanField(default=False, help_text='Should the zone be signed with DNSSEC.'), + ), + migrations.AlterField( + model_name='extension', + name='name', + field=models.CharField(help_text='Zone name, must begin with a dot (.example.org).', max_length=255, unique=True), + ), + migrations.AlterField( + model_name='extension', + name='origin', + field=models.ForeignKey(blank=True, help_text='A record associated with the zone.', null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpList'), + ), + migrations.AlterField( + model_name='extension', + name='origin_v6', + field=models.GenericIPAddressField(blank=True, help_text='AAAA record associated with the zone.', null=True, protocol='IPv6'), + ), + migrations.AlterField( + model_name='iptype', + name='domaine_ip_netmask', + field=models.IntegerField(default=24, help_text="Netmask for the domain's IPv4 range.", validators=[django.core.validators.MaxValueValidator(31), django.core.validators.MinValueValidator(8)]), + ), + migrations.AlterField( + model_name='iptype', + name='domaine_ip_network', + field=models.GenericIPAddressField(blank=True, help_text="Network containing the domain's IPv4 range (optional).", null=True, protocol='IPv4'), + ), + migrations.AlterField( + model_name='iptype', + name='reverse_v4', + field=models.BooleanField(default=False, help_text='Enable reverse DNS for IPv4.'), + ), + migrations.AlterField( + model_name='iptype', + name='reverse_v6', + field=models.BooleanField(default=False, help_text='Enable reverse DNS for IPv6.'), + ), + migrations.AlterField( + model_name='machine', + name='name', + field=models.CharField(blank=True, help_text='Optional.', max_length=255, null=True), + ), + migrations.AlterField( + model_name='soa', + name='expire', + field=models.PositiveIntegerField(default=3600000, help_text='Seconds before the secondary DNS stop answering requests in case of primary DNS timeout.'), + ), + migrations.AlterField( + model_name='soa', + name='mail', + field=models.EmailField(help_text='Contact email address for the zone.', max_length=254), + ), + migrations.AlterField( + model_name='soa', + name='refresh', + field=models.PositiveIntegerField(default=86400, help_text='Seconds before the secondary DNS have to ask the primary DNS serial to detect a modification.'), + ), + migrations.AlterField( + model_name='soa', + name='retry', + field=models.PositiveIntegerField(default=7200, help_text='Seconds before the secondary DNS ask the serial again in case of a primary DNS timeout.'), + ), + migrations.AlterField( + model_name='soa', + name='ttl', + field=models.PositiveIntegerField(default=172800, help_text='Time To Live.'), + ), + migrations.AlterField( + model_name='srv', + name='port', + field=models.PositiveIntegerField(help_text='TCP/UDP port.', validators=[django.core.validators.MaxValueValidator(65535)]), + ), + migrations.AlterField( + model_name='srv', + name='priority', + field=models.PositiveIntegerField(default=0, help_text='Priority of the target server (positive integer value, the lower it is, the more the server will be used if available).', validators=[django.core.validators.MaxValueValidator(65535)]), + ), + migrations.AlterField( + model_name='srv', + name='target', + field=models.ForeignKey(help_text='Target server.', on_delete=django.db.models.deletion.PROTECT, to='machines.Domain'), + ), + migrations.AlterField( + model_name='srv', + name='ttl', + field=models.PositiveIntegerField(default=172800, help_text='Time To Live.'), + ), + migrations.AlterField( + model_name='srv', + name='weight', + field=models.PositiveIntegerField(default=0, help_text='Relative weight for records with the same priority (integer value between 0 and 65535).', validators=[django.core.validators.MaxValueValidator(65535)]), + ), + migrations.AlterField( + model_name='sshfp', + name='comment', + field=models.CharField(blank=True, help_text='Comment.', max_length=255, null=True), + ), + migrations.AlterField( + model_name='sshfp', + name='pub_key_entry', + field=models.TextField(help_text='SSH public key.', max_length=2048), + ), + migrations.AlterField( + model_name='vlan', + name='igmp', + field=models.BooleanField(default=False, help_text='v4 multicast management.'), + ), + migrations.AlterField( + model_name='vlan', + name='mld', + field=models.BooleanField(default=False, help_text='v6 multicast management.'), + ), + ] diff --git a/machines/models.py b/machines/models.py index 8b83e256..7b548cfb 100644 --- a/machines/models.py +++ b/machines/models.py @@ -68,7 +68,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model): user = models.ForeignKey("users.User", on_delete=models.CASCADE) name = models.CharField( - max_length=255, help_text=_("Optional"), blank=True, null=True + max_length=255, help_text=_("Optional."), blank=True, null=True ) active = models.BooleanField(default=True) @@ -157,7 +157,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model): if user != user_request: return ( False, - _("You don't have the right to add a machine" " to another user."), + _("You don't have the right to add a machine to another" + " user."), ("machines.add_machine",), ) if user.user_interfaces().count() >= max_lambdauser_interfaces: @@ -185,7 +186,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model): if not (user_request.has_perm("machines.change_interface") and can_user): return ( False, - _("You don't have the right to edit a machine" " of another user."), + _("You don't have the right to edit a machine of another" + " user."), ("machines.change_interface",) + permissions, ) return True, None, None @@ -223,7 +225,8 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model): ): return ( False, - _("You don't have the right to view other machines" " than yours."), + _("You don't have the right to view other machines than" + " yours."), ("machines.view_machine",), ) return True, None, None @@ -358,22 +361,22 @@ class IpType(RevMixin, AclMixin, models.Model): protocol="IPv4", null=True, blank=True, - help_text=_("Network containing the domain's IPv4 range (optional)"), + help_text=_("Network containing the domain's IPv4 range (optional)."), ) domaine_ip_netmask = models.IntegerField( default=24, validators=[MaxValueValidator(31), MinValueValidator(8)], - help_text=_("Netmask for the domain's IPv4 range"), + help_text=_("Netmask for the domain's IPv4 range."), ) reverse_v4 = models.BooleanField( - default=False, help_text=_("Enable reverse DNS for IPv4") + default=False, help_text=_("Enable reverse DNS for IPv4.") ) prefix_v6 = models.GenericIPAddressField(protocol="IPv6", null=True, blank=True) prefix_v6_length = models.IntegerField( default=64, validators=[MaxValueValidator(128), MinValueValidator(0)] ) reverse_v6 = models.BooleanField( - default=False, help_text=_("Enable reverse DNS for IPv6") + default=False, help_text=_("Enable reverse DNS for IPv6.") ) vlan = models.ForeignKey("Vlan", on_delete=models.PROTECT, blank=True, null=True) ouverture_ports = models.ForeignKey("OuverturePortList", blank=True, null=True) @@ -553,7 +556,8 @@ class IpType(RevMixin, AclMixin, models.Model): for element in IpType.objects.all().exclude(pk=self.pk): if not self.ip_set.isdisjoint(element.ip_set): raise ValidationError( - _("The specified range is not disjoint" " from existing ranges.") + _("The specified range is not disjoint from existing" + " ranges.") ) # On formate le prefix v6 if self.prefix_v6: @@ -604,8 +608,8 @@ class Vlan(RevMixin, AclMixin, models.Model): arp_protect = models.BooleanField(default=False) dhcp_snooping = models.BooleanField(default=False) dhcpv6_snooping = models.BooleanField(default=False) - igmp = models.BooleanField(default=False, help_text=_("v4 multicast management")) - mld = models.BooleanField(default=False, help_text=_("v6 multicast management")) + igmp = models.BooleanField(default=False, help_text=_("v4 multicast management.")) + mld = models.BooleanField(default=False, help_text=_("v6 multicast management.")) class Meta: permissions = (("view_vlan", _("Can view a VLAN object")),) @@ -653,30 +657,30 @@ class SOA(RevMixin, AclMixin, models.Model): """ name = models.CharField(max_length=255) - mail = models.EmailField(help_text=_("Contact email address for the zone")) + mail = models.EmailField(help_text=_("Contact email address for the zone.")) refresh = models.PositiveIntegerField( default=86400, # 24 hours help_text=_( "Seconds before the secondary DNS have to ask the primary" - " DNS serial to detect a modification" + " DNS serial to detect a modification." ), ) retry = models.PositiveIntegerField( default=7200, # 2 hours help_text=_( "Seconds before the secondary DNS ask the serial again in" - " case of a primary DNS timeout" + " case of a primary DNS timeout." ), ) expire = models.PositiveIntegerField( default=3600000, # 1000 hours help_text=_( "Seconds before the secondary DNS stop answering requests" - " in case of primary DNS timeout" + " in case of primary DNS timeout." ), ) ttl = models.PositiveIntegerField( - default=172800, help_text=_("Time to Live") # 2 days + default=172800, help_text=_("Time To Live.") # 2 days ) class Meta: @@ -732,7 +736,7 @@ class Extension(RevMixin, AclMixin, models.Model): name = models.CharField( max_length=255, unique=True, - help_text=_("Zone name, must begin with a dot (.example.org)"), + help_text=_("Zone name, must begin with a dot (.example.org)."), ) need_infra = models.BooleanField(default=False) origin = models.ForeignKey( @@ -740,17 +744,17 @@ class Extension(RevMixin, AclMixin, models.Model): on_delete=models.PROTECT, blank=True, null=True, - help_text=_("A record associated with the zone"), + help_text=_("A record associated with the zone."), ) origin_v6 = models.GenericIPAddressField( protocol="IPv6", null=True, blank=True, - help_text=_("AAAA record associated with the zone"), + help_text=_("AAAA record associated with the zone."), ) soa = models.ForeignKey("SOA", on_delete=models.CASCADE) dnssec = models.BooleanField( - default=False, help_text=_("Should the zone be signed with DNSSEC") + default=False, help_text=_("Should the zone be signed with DNSSEC.") ) class Meta: @@ -819,7 +823,7 @@ class Extension(RevMixin, AclMixin, models.Model): can = user_request.has_perm("machines.use_all_extension") return ( can, - _("You cannot use all extensions.") if not can else None, + _("You don't have the right to use all extensions.") if not can else None, ("machines.use_all_extension",), ) @@ -943,7 +947,7 @@ class Srv(RevMixin, AclMixin, models.Model): ) extension = models.ForeignKey("Extension", on_delete=models.PROTECT) ttl = models.PositiveIntegerField( - default=172800, help_text=_("Time to Live") # 2 days + default=172800, help_text=_("Time To Live.") # 2 days ) priority = models.PositiveIntegerField( default=0, @@ -951,7 +955,7 @@ class Srv(RevMixin, AclMixin, models.Model): help_text=_( "Priority of the target server (positive integer value," " the lower it is, the more the server will be used if" - " available)" + " available)." ), ) weight = models.PositiveIntegerField( @@ -959,14 +963,14 @@ class Srv(RevMixin, AclMixin, models.Model): validators=[MaxValueValidator(65535)], help_text=_( "Relative weight for records with the same priority" - " (integer value between 0 and 65535)" + " (integer value between 0 and 65535)." ), ) port = models.PositiveIntegerField( - validators=[MaxValueValidator(65535)], help_text=_("TCP/UDP port") + validators=[MaxValueValidator(65535)], help_text=_("TCP/UDP port.") ) target = models.ForeignKey( - "Domain", on_delete=models.PROTECT, help_text=_("Target server") + "Domain", on_delete=models.PROTECT, help_text=_("Target server.") ) class Meta: @@ -1023,10 +1027,10 @@ class SshFp(RevMixin, AclMixin, models.Model): ) machine = models.ForeignKey("Machine", on_delete=models.CASCADE) - pub_key_entry = models.TextField(help_text=_("SSH public key"), max_length=2048) + pub_key_entry = models.TextField(help_text=_("SSH public key."), max_length=2048) algo = models.CharField(choices=ALGO, max_length=32) comment = models.CharField( - help_text=_("Comment"), max_length=255, null=True, blank=True + help_text=_("Comment."), max_length=255, null=True, blank=True ) @cached_property @@ -1128,7 +1132,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): oui = mac.oui vendor = oui.registration().org except NotRegisteredError: - vendor = "Unknown vendor" + vendor = _("Unknown vendor.") return vendor def sync_ipv6_dhcpv6(self): @@ -1201,7 +1205,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): self.ipv4 = free_ips[0] else: raise ValidationError( - _("There is no IP address available in the" " slash.") + _("There are no IP addresses available in the slash.") ) return @@ -1214,7 +1218,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): """Unassign ipv4 to multiple interfaces""" with transaction.atomic(), reversion.create_revision(): interface_list.update(ipv4=None) - reversion.set_comment(_("IPv4 unassigning")) + reversion.set_comment("IPv4 unassignment") @classmethod def mass_assign_ipv4(cls, interface_list): @@ -1222,7 +1226,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): with transaction.atomic(), reversion.create_revision(): interface.assign_ipv4() interface.save() - reversion.set_comment(_("IPv4 assigning")) + reversion.set_comment("IPv4 assignment") def update_type(self): """ Lorsque le machinetype est changé de type d'ip, on réassigne""" @@ -1267,7 +1271,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): ) if interfaces_similar and interfaces_similar.first() != self: raise ValidationError( - _("Mac address already registered in this Machine Type/Subnet") + _("MAC address already registered in this machine type/subnet.") ) def save(self, *args, **kwargs): @@ -1276,7 +1280,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): if self.ipv4: if self.machine_type.ip_type != self.ipv4.ip_type: raise ValidationError( - _("The IPv4 address and the machine type" " don't match.") + _("The IPv4 address and the machine type don't match.") ) self.validate_unique() super(Interface, self).save(*args, **kwargs) @@ -1296,7 +1300,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): if not ( preferences.models.OptionalMachine.get_cached_value("create_machine") ): - return False, _("You can't add a machine."), ("machines.add_interface",) + return False, _("You don't have the right to add a machine."), ("machines.add_interface",) max_lambdauser_interfaces = preferences.models.OptionalMachine.get_cached_value( "max_lambdauser_interfaces" ) @@ -1328,7 +1332,7 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): can = user_request.has_perm("machines.change_interface_machine") return ( can, - _("Permission required to edit the machine.") if not can else None, + _("You don't have the right to edit the machine.") if not can else None, ("machines.change_interface_machine",), ) @@ -1345,7 +1349,8 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): if not (user_request.has_perm("machines.change_interface") and can_user): return ( False, - _("You don't have the right to edit a machine of" " another user."), + _("You don't have the right to edit a machine of another" + " user."), ("machines.change_interface",) + permissions, ) return True, None, None @@ -1363,7 +1368,8 @@ class Interface(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): if not (user_request.has_perm("machines.change_interface") and can_user): return ( False, - _("You don't have the right to edit a machine of" " another user."), + _("You don't have the right to edit a machine of another" + " user."), ("machines.change_interface",) + permissions, ) return True, None, None @@ -1411,7 +1417,7 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): ("view_ipv6list", _("Can view an IPv6 addresses list object")), ( "change_ipv6list_slaac_ip", - _("Can change the SLAAC value of an" " IPv6 addresses list"), + _("Can change the SLAAC value of an IPv6 addresses list"), ), ) verbose_name = _("IPv6 addresses list") @@ -1446,7 +1452,7 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): can = user_request.has_perm("machines.change_ipv6list_slaac_ip") return ( can, - _("Permission required to change the SLAAC value of an IPv6" " address") + _("You don't have the right to change the SLAAC value of an IPv6 address.") if not can else None, ("machines.change_ipv6list_slaac_ip",), @@ -1465,7 +1471,7 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): if not (user_request.has_perm("machines.change_ipv6list") and can_user): return ( False, - _("You don't have the right to edit a machine of" " another user."), + _("You don't have the right to edit a machine of another user."), ("machines.change_ipv6list",), ) return True, None, None @@ -1483,7 +1489,7 @@ class Ipv6List(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): if not (user_request.has_perm("machines.change_ipv6list") and can_user): return ( False, - _("You don't have the right to edit a machine of" " another user."), + _("You don't have the right to edit a machine of another user."), ("machines.change_ipv6list",) + permissions, ) return True, None, None @@ -1587,7 +1593,7 @@ class Domain(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): unique_together = (("name", "extension"),) permissions = ( ("view_domain", _("Can view a domain object")), - ("change_ttl", _("Can change TTL of a domain object")), + ("change_ttl", _("Can change the TTL of a domain object")), ) verbose_name = _("domain") verbose_name_plural = _("domains") @@ -1612,20 +1618,20 @@ class Domain(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): if self.get_extension(): self.extension = self.get_extension() if self.interface_parent and self.cname: - raise ValidationError(_("You can't create a both A and CNAME" " record.")) + raise ValidationError(_("You can't create a both A and CNAME record.")) if self.cname == self: raise ValidationError( - _("You can't create a CNAME record pointing" " to itself.") + _("You can't create a CNAME record pointing to itself.") ) HOSTNAME_LABEL_PATTERN = re.compile(r"(?!-)[A-Z\d-]+(? 63: raise ValidationError( - _("The domain name %s is too long (over 63" " characters).") % dns + _("The domain name %s is too long (over 63 characters).") % dns ) if not HOSTNAME_LABEL_PATTERN.match(dns): raise ValidationError( - _("The domain name %s contains forbidden" " characters.") % dns + _("The domain name %s contains forbidden characters.") % dns ) self.validate_unique() super(Domain, self).clean() @@ -1753,7 +1759,8 @@ class Domain(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model): ): return ( False, - _("You don't have the right to view machines other than yours."), + _("You don't have the right to view other machines than" + " yours."), ("machines.view_domain",), ) return True, None, None @@ -1794,7 +1801,7 @@ class IpList(RevMixin, AclMixin, models.Model): """ Erreur si l'ip_type est incorrect""" if not str(self.ipv4) in self.ip_type.ip_set_as_str: raise ValidationError( - _("The IPv4 address and the range of the IP" " type don't match.") + _("The IPv4 address and the range of the IP type don't match.") ) return @@ -1970,7 +1977,8 @@ class OuverturePortList(RevMixin, AclMixin, models.Model): class Meta: permissions = ( - ("view_ouvertureportlist", _("Can view a ports opening list" " object")), + ("view_ouvertureportlist", _("Can view a ports opening list" + " object")), ) verbose_name = _("ports opening list") verbose_name_plural = _("ports opening lists") diff --git a/machines/templates/machines/aff_extension.html b/machines/templates/machines/aff_extension.html index 809ef4ba..358fc33e 100644 --- a/machines/templates/machines/aff_extension.html +++ b/machines/templates/machines/aff_extension.html @@ -32,7 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% trans "Extension" %} - {% trans "'infra' right required" %} + {% blocktrans %}"infra" right required{% endblocktrans %} {% trans "SOA record" %} {% trans "A record origin" %} {% if ipv6_enabled %} diff --git a/machines/templates/machines/aff_iptype.html b/machines/templates/machines/aff_iptype.html index 2675b87a..7cf710c2 100644 --- a/machines/templates/machines/aff_iptype.html +++ b/machines/templates/machines/aff_iptype.html @@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% trans "IP type" %} {% trans "Extension" %} - {% trans "'infra' right required" %} + {% blocktrans %}"infra" right required{% endblocktrans %} {% trans "IPv4 range" %} {% trans "v6 prefix" %} {% trans "DNSSEC reverse v4/v6" %} diff --git a/machines/templates/machines/aff_machines.html b/machines/templates/machines/aff_machines.html index e59cfde6..77b65546 100644 --- a/machines/templates/machines/aff_machines.html +++ b/machines/templates/machines/aff_machines.html @@ -123,7 +123,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
  • - {% trans " Edit" %} + {% trans "Edit" %}
  • {% acl_end %} @@ -131,7 +131,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
  • - {% trans " Manage the aliases" %} + {% trans "Manage the aliases" %}
  • {% acl_end %} @@ -139,7 +139,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
  • - {% trans " Manage the IPv6 addresses" %} + {% trans "Manage the IPv6 addresses" %}
  • {% acl_end %} @@ -147,7 +147,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
  • - {% trans " Manage the SSH fingerprints" %} + {% trans "Manage the SSH fingerprints" %}
  • {% acl_end %} @@ -155,7 +155,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
  • - {% trans " Manage the ports configuration" %} + {% trans "Manage the ports configuration" %}
  • {% acl_end %} diff --git a/machines/templates/machines/aff_servers.html b/machines/templates/machines/aff_servers.html index 36c4bca0..3829c6c1 100644 --- a/machines/templates/machines/aff_servers.html +++ b/machines/templates/machines/aff_servers.html @@ -31,8 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc., {% trans "Service name" %} {% trans "Server" %} {% trans "Last regeneration" %} - {% trans "Regeneration required" %} - {% trans "Regeneration activated" %} + {% trans "Regeneration asked" %} + {% trans "Regeneration needed" %} {% for server in servers_list %} diff --git a/machines/templates/machines/edit_portlist.html b/machines/templates/machines/edit_portlist.html index 387723bb..a2aded23 100644 --- a/machines/templates/machines/edit_portlist.html +++ b/machines/templates/machines/edit_portlist.html @@ -47,11 +47,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,

    - {% trans "Add a port" as value %} - +

    - {% trans "Create or edit" as tr_create_or_edit %} - {% bootstrap_button tr_create_or_edit icon='ok' button_class='btn-success' %} + {% trans "Confirm" as tr_confirm %} + {% bootstrap_button tr_confirm icon='ok' button_class='btn-success' %}