diff --git a/django/conf/locale/fr/LC_MESSAGES/django.mo b/django/conf/locale/fr/LC_MESSAGES/django.mo
index b9fc8ec807..e7e6f4f10a 100644
Binary files a/django/conf/locale/fr/LC_MESSAGES/django.mo and b/django/conf/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/fr/LC_MESSAGES/django.po b/django/conf/locale/fr/LC_MESSAGES/django.po
index 1367d21c11..38487fcf69 100644
--- a/django/conf/locale/fr/LC_MESSAGES/django.po
+++ b/django/conf/locale/fr/LC_MESSAGES/django.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-18 11:44+0100\n"
-"PO-Revision-Date: 2010-02-18 22:12+0100\n"
+"POT-Creation-Date: 2010-04-26 15:44+0200\n"
+"PO-Revision-Date: 2010-04-17 00:18+0200\n"
 "Last-Translator: Stéphane Raimbault <stephane.raimbault@gmail.com>\n"
 "Language-Team: French <http://django-fr.org>\n"
 "MIME-Version: 1.0\n"
@@ -231,23 +231,27 @@ msgid "Ukrainian"
 msgstr "Ukrainien"
 
 #: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "Vietnamien"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "Chinois simplifié"
 
-#: conf/global_settings.py:98
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "Chinois traditionnel"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "%(count)d %(items)s supprimés avec succès."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1096
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
 msgid "Are you sure?"
 msgstr "Êtes-vous sûr ?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Supprimer les %(verbose_name_plural)s sélectionnés"
@@ -286,19 +290,19 @@ msgstr "Ce mois-ci"
 msgid "This year"
 msgstr "Cette année"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Oui"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Non"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: contrib/admin/helpers.py:19
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Action :"
 
@@ -330,60 +334,60 @@ msgstr "entrée d'historique"
 msgid "log entries"
 msgstr "entrées d'historique"
 
-#: contrib/admin/options.py:139 contrib/admin/options.py:154
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "Aucun(e)"
 
-#: contrib/admin/options.py:558
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "Modifié %s."
 
-#: contrib/admin/options.py:558 contrib/admin/options.py:568
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:797
-#: forms/models.py:544
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:562
 msgid "and"
 msgstr "et"
 
-#: contrib/admin/options.py:563
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "%(name)s « %(object)s » ajouté."
 
-#: contrib/admin/options.py:567
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "%(list)s modifié pour %(name)s « %(object)s »."
 
-#: contrib/admin/options.py:572
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "%(name)s « %(object)s » supprimé."
 
-#: contrib/admin/options.py:576
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Aucun champ modifié."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "L'objet %(name)s « %(obj)s » a été ajouté avec succès."
 
-#: contrib/admin/options.py:646 contrib/admin/options.py:679
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "Vous pouvez continuer l'édition ci-dessous."
 
-#: contrib/admin/options.py:656 contrib/admin/options.py:689
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Vous pouvez ajouter un autre %s ci-dessous."
 
-#: contrib/admin/options.py:677
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "L'objet %(name)s « %(obj)s » a été modifié avec succès."
 
-#: contrib/admin/options.py:685
+#: contrib/admin/options.py:690
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -391,7 +395,7 @@ msgstr ""
 "L'objet %(name)s « %(obj)s » a été ajouté avec succès. Vous pouvez continuer "
 "l'édition ci-dessous."
 
-#: contrib/admin/options.py:738
+#: contrib/admin/options.py:744
 msgid ""
 "Items must be selected in order to perform actions on them. No items have "
 "been changed."
@@ -399,44 +403,56 @@ msgstr ""
 "Des éléments doivent être sélectionnés afin d'appliquer les actions. Aucun "
 "élément n'a été modifié."
 
-#: contrib/admin/options.py:756
+#: contrib/admin/options.py:762
 msgid "No action selected."
 msgstr "Aucune action sélectionnée."
 
 # Titre
-#: contrib/admin/options.py:836
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "Ajout %s"
 
-#: contrib/admin/options.py:862 contrib/admin/options.py:1074
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "L'objet %(name)s avec la clef primaire %(key)r n'existe pas."
 
 # Titre
-#: contrib/admin/options.py:927
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
 msgstr "Modification de %s"
 
-#: contrib/admin/options.py:972
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "Erreur de base de données"
 
-#: contrib/admin/options.py:1008
+#: contrib/admin/options.py:1014
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s objet %(name)s a été modifié avec succès."
 msgstr[1] "%(count)s objets %(name)s ont été modifiés avec succès."
 
-#: contrib/admin/options.py:1089
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s sélectionné"
+msgstr[1] "Tous les %(total_count)s sélectionnés"
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 sur %(cnt)s sélectionné"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "L'objet %(name)s « %(obj)s » a été supprimé avec succès."
 
-#: contrib/admin/options.py:1126
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "Historique des changements : %s"
@@ -451,11 +467,11 @@ msgstr ""
 "chacun de ces champs est sensible à la casse (différenciation des majuscules/"
 "minuscules)."
 
-#: contrib/admin/sites.py:306 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Reconnectez-vous car votre session a expiré."
 
-#: contrib/admin/sites.py:313 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -463,43 +479,33 @@ msgstr ""
 "Il semblerait que votre navigateur n'accepte pas les cookies. Activez-les, "
 "rechargez cette page puis essayez à nouveau."
 
-#: contrib/admin/sites.py:329 contrib/admin/sites.py:335
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Les noms d'utilisateur ne peuvent contenir le caractère « @ »."
 
-#: contrib/admin/sites.py:332 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "Votre adresse électronique n'est pas votre nom d'utilisateur. Essayez « %s » "
 "à la place."
 
-#: contrib/admin/sites.py:388
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Administration du site"
 
-#: contrib/admin/sites.py:402 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Connexion"
 
-#: contrib/admin/sites.py:447
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Administration %s"
 
-#: contrib/admin/util.py:170
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Un ou plusieurs %(fieldname)s dans %(name)s : %(obj)s"
-
-#: contrib/admin/util.py:175
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Un ou plusieurs %(fieldname)s dans %(name)s :"
-
 #: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Date :"
@@ -520,7 +526,7 @@ msgstr "Modification :"
 msgid "Lookup"
 msgstr "Recherche"
 
-#: contrib/admin/widgets.py:241
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Ajouter un autre"
 
@@ -535,9 +541,9 @@ msgstr "Nous sommes désolés, mais la page demandée est introuvable."
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/base.html:55
 #: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:39
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
@@ -583,29 +589,16 @@ msgstr "Exécuter l'action sélectionnée"
 msgid "Go"
 msgstr "Envoyer"
 
-# http://code.djangoproject.com/ticket/12903
-#: contrib/admin/templates/admin/actions.html:7
-#, python-format
-msgid ""
-"<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
-msgstr "<span class=\"_acnt\">0</span> parmi %(total_count)s « %(module_name)s » sélectionnés"
-
-# http://code.djangoproject.com/ticket/12903
 #: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "All %(total_count)s %(module_name)s selected"
-msgstr "La totalité des %(total_count)s « %(module_name)s » ont été sélectionnés"
-
-#: contrib/admin/templates/admin/actions.html:14
-msgid "Click here to select all objects across all pages"
+msgid "Click here to select the objects across all pages"
 msgstr "Cliquez ici pour sélectionner tous les objets sur l'ensemble des pages"
 
-#: contrib/admin/templates/admin/actions.html:14
+#: contrib/admin/templates/admin/actions.html:11
 #, python-format
 msgid "Select all %(total_count)s %(module_name)s"
 msgstr "Sélectionner tous les %(total_count)s %(module_name)s"
 
-#: contrib/admin/templates/admin/actions.html:16
+#: contrib/admin/templates/admin/actions.html:13
 msgid "Clear selection"
 msgstr "Effacer la sélection"
 
@@ -615,18 +608,18 @@ msgstr "Effacer la sélection"
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Bienvenue,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentation"
 
-#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/base.html:41
 #: contrib/admin/templates/admin/auth/user/change_password.html:15
 #: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -634,7 +627,7 @@ msgstr "Documentation"
 msgid "Change password"
 msgstr "Modifier votre mot de passe"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
@@ -665,7 +658,7 @@ msgid "View on site"
 msgstr "Voir sur le site"
 
 #: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/change_list.html:71
 #: contrib/admin/templates/admin/auth/user/change_password.html:24
 #: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
@@ -673,17 +666,17 @@ msgid_plural "Please correct the errors below."
 msgstr[0] "Corrigez l'erreur suivante."
 msgstr[1] "Corrigez les erreurs suivantes."
 
-#: contrib/admin/templates/admin/change_list.html:60
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Ajouter %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:79
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtre"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:294
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Supprimer"
 
@@ -874,16 +867,16 @@ msgstr "Mot de passe (à nouveau)"
 #: contrib/admin/templates/admin/auth/user/change_password.html:42
 #: contrib/auth/forms.py:19
 msgid "Enter the same password as above, for verification."
-msgstr "Saisissez le même mot de passe que précédemment, par sécurité."
+msgstr "Saisissez le même mot de passe que précédemment, pour vérification."
 
-#: contrib/admin/templates/admin/edit_inline/stacked.html:53
-#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
 #, python-format
 msgid "Add another %(verbose_name)s"
 msgstr "Ajouter un objet %(verbose_name)s supplémentaire"
 
-#: contrib/admin/templates/admin/edit_inline/stacked.html:56
-#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
 #: contrib/comments/templates/comments/delete.html:12
 msgid "Remove"
 msgstr "Supprimer"
@@ -1054,7 +1047,7 @@ msgstr "Adresse électronique :"
 msgid "Reset my password"
 msgstr "Réinitialiser mon mot de passe"
 
-#: contrib/admin/templatetags/admin_list.py:240
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Toutes les dates"
 
@@ -1237,18 +1230,16 @@ msgid "Username"
 msgstr "Nom d'utilisateur"
 
 #: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-#: contrib/auth/models.py:180
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
-"Requis. 30 caractères maximum, alphanumériques uniquement (lettres, "
-"chiffres, et tirets bas _)."
+"Requis. 30 caractères maximum. Uniquement des lettres, nombres et les "
+"caractères « @ », « . », « + », « - » et « _ »."
 
 #: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value must contain only letters, numbers and underscores."
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
 msgstr ""
-"Ce champ ne doit contenir que des lettres, des nombres et des tirets bas _."
+"Cette valeur peut uniquement contenir des lettres, nombres et les caractères "
+"« @ », « . », « + », « - » et « _ »."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
@@ -1290,7 +1281,7 @@ msgstr ""
 #: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
-msgstr "Mot de passe mis à jour sur %s"
+msgstr "Mise à jour du mot de passe sur %s"
 
 #: contrib/auth/forms.py:145
 msgid "New password confirmation"
@@ -1320,31 +1311,38 @@ msgstr "permissions"
 msgid "group"
 msgstr "groupe"
 
-#: contrib/auth/models.py:99 contrib/auth/models.py:190
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "groupes"
 
-#: contrib/auth/models.py:180
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "nom d'utilisateur"
 
-#: contrib/auth/models.py:181
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Requis. 30 caractères maximum. Uniquement des lettres, nombres et les "
+"caractères « @ », « . », « + », « - » et « _ »."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "prénom"
 
-#: contrib/auth/models.py:182
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "nom"
 
-#: contrib/auth/models.py:183
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "adresse électronique"
 
-#: contrib/auth/models.py:184
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "mot de passe"
 
-#: contrib/auth/models.py:184
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1352,19 +1350,19 @@ msgstr ""
 "Utilisez « [algo]$[salt]$[hexdigest] » ou le <a href=\"password/\">formulaire "
 "de changement de mot de passe</a>."
 
-#: contrib/auth/models.py:185
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "statut équipe"
 
-#: contrib/auth/models.py:185
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Précise si l'utilisateur peut se connecter à ce site d'administration."
 
-#: contrib/auth/models.py:186
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "actif"
 
-#: contrib/auth/models.py:186
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1372,11 +1370,11 @@ msgstr ""
 "Précise si l'utilisateur doit être considéré comme actif. Décochez ceci "
 "plutôt que de supprimer le compte."
 
-#: contrib/auth/models.py:187
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "statut super-utilisateur"
 
-#: contrib/auth/models.py:187
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1384,15 +1382,15 @@ msgstr ""
 "Précise que l'utilisateur possède toutes les permissions sans les assigner "
 "explicitement."
 
-#: contrib/auth/models.py:188
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "dernière connexion"
 
-#: contrib/auth/models.py:189
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "date d'inscription"
 
-#: contrib/auth/models.py:191
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1401,29 +1399,29 @@ msgstr ""
 "recevra aussi toutes les permissions de tous les groupes auxquels il "
 "appartient. "
 
-#: contrib/auth/models.py:192
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "permissions de l'utilisateur"
 
-#: contrib/auth/models.py:196 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "utilisateur"
 
-#: contrib/auth/models.py:197
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "utilisateurs"
 
-#: contrib/auth/models.py:367
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "message"
 
-#: contrib/auth/views.py:60
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Déconnecté"
 
 #: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:85 forms/fields.py:414
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Entrez une adresse de courriel valide."
 
@@ -1435,32 +1433,38 @@ msgstr "Contenu"
 msgid "Metadata"
 msgstr "Métadonnées"
 
-#: contrib/comments/admin.py:39
-msgid "flagged"
-msgstr "marqué"
-
 #: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "marqué"
+msgstr[1] "marqués"
+
+#: contrib/comments/admin.py:41
 msgid "Flag selected comments"
 msgstr "Marquer les commentaires sélectionnés"
 
-#: contrib/comments/admin.py:43
+#: contrib/comments/admin.py:45
 msgid "approved"
-msgstr "approuvé"
+msgid_plural "approved"
+msgstr[0] "approuvé"
+msgstr[1] "approuvés"
 
-#: contrib/comments/admin.py:44
+#: contrib/comments/admin.py:46
 msgid "Approve selected comments"
 msgstr "Approuver les commentaires sélectionnés"
 
-#: contrib/comments/admin.py:47
+#: contrib/comments/admin.py:50
 msgid "removed"
-msgstr "supprimé"
+msgid_plural "removed"
+msgstr[0] "supprimé"
+msgstr[1] "supprimés"
 
-#: contrib/comments/admin.py:48
+#: contrib/comments/admin.py:51
 msgid "Remove selected comments"
 msgstr "Supprimer les commentaires sélectionnés"
 
 # Nous avons artificiellement ajouté un « s » à l'action de la forme plurielle
-#: contrib/comments/admin.py:60
+#: contrib/comments/admin.py:63
 #, python-format
 msgid "1 comment was successfully %(action)s."
 msgid_plural "%(count)s comments were successfully %(action)s."
@@ -1486,7 +1490,7 @@ msgid "Email address"
 msgstr "Adresse électronique"
 
 #: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1107
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
 msgid "URL"
 msgstr "URL"
 
@@ -1538,7 +1542,7 @@ msgstr "commentaire"
 msgid "date/time submitted"
 msgstr "date et heure soumises"
 
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:909
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
 msgid "IP address"
 msgstr "adresse IP"
 
@@ -1726,7 +1730,7 @@ msgid ""
 "slashes."
 msgstr ""
 "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas « _ », "
-"des traits d'union, et des « / »."
+"des traits d'union et des « / »."
 
 #: contrib/flatpages/admin.py:22
 msgid "Advanced options"
@@ -1774,7 +1778,7 @@ msgstr "page statique"
 msgid "flat pages"
 msgstr "pages statiques"
 
-#: contrib/formtools/wizard.py:134
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1788,31 +1792,31 @@ msgstr ""
 "Le champ GIS -- convertit dans le type de spécification géométrique "
 "d'OpenGIS."
 
-#: contrib/gis/db/models/fields.py:269
+#: contrib/gis/db/models/fields.py:270
 msgid "Point"
 msgstr "Point"
 
-#: contrib/gis/db/models/fields.py:273
+#: contrib/gis/db/models/fields.py:274
 msgid "Line string"
 msgstr "Chaîne de segment"
 
-#: contrib/gis/db/models/fields.py:277
+#: contrib/gis/db/models/fields.py:278
 msgid "Polygon"
 msgstr "Polygone"
 
-#: contrib/gis/db/models/fields.py:281
+#: contrib/gis/db/models/fields.py:282
 msgid "Multi-point"
 msgstr "Multipoint"
 
-#: contrib/gis/db/models/fields.py:285
+#: contrib/gis/db/models/fields.py:286
 msgid "Multi-line string"
 msgstr "Chaîne multisegment"
 
-#: contrib/gis/db/models/fields.py:289
+#: contrib/gis/db/models/fields.py:290
 msgid "Multi polygon"
 msgstr "Multipolygone"
 
-#: contrib/gis/db/models/fields.py:293
+#: contrib/gis/db/models/fields.py:294
 msgid "Geometry collection"
 msgstr "Collection géométrique"
 
@@ -4484,53 +4488,53 @@ msgstr "nom à afficher"
 msgid "sites"
 msgstr "sites"
 
-#: core/validators.py:19 forms/fields.py:66
+#: core/validators.py:20 forms/fields.py:66
 msgid "Enter a valid value."
 msgstr "Saisissez une valeur valide."
 
-#: core/validators.py:69 forms/fields.py:515
+#: core/validators.py:87 forms/fields.py:529
 msgid "Enter a valid URL."
 msgstr "Saisissez une URL valide."
 
-#: core/validators.py:71 forms/fields.py:516
+#: core/validators.py:89 forms/fields.py:530
 msgid "This URL appears to be a broken link."
 msgstr "Cette URL semble être cassée."
 
-#: core/validators.py:88 forms/fields.py:859
+#: core/validators.py:123 forms/fields.py:873
 msgid ""
 "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
 msgstr ""
 "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et "
 "des traits d'union."
 
-#: core/validators.py:91 forms/fields.py:852
+#: core/validators.py:126 forms/fields.py:866
 msgid "Enter a valid IPv4 address."
 msgstr "Saisissez une adresse IPv4 valide."
 
-#: core/validators.py:94 db/models/fields/__init__.py:591
+#: core/validators.py:129 db/models/fields/__init__.py:572
 msgid "Enter only digits separated by commas."
 msgstr "Saisissez uniquement des chiffres séparés par des virgules."
 
-#: core/validators.py:100
+#: core/validators.py:135
 #, python-format
 msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
 msgstr ""
 "Assurez-vous que cette valeur est %(limit_value)s (actuellement %(show_value)"
 "s)."
 
-#: core/validators.py:118 forms/fields.py:196 forms/fields.py:248
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
 #, python-format
 msgid "Ensure this value is less than or equal to %(limit_value)s."
 msgstr ""
 "Assurez-vous que cette valeur est inférieure ou égale à %(limit_value)s."
 
-#: core/validators.py:123 forms/fields.py:197 forms/fields.py:249
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
 #, python-format
 msgid "Ensure this value is greater than or equal to %(limit_value)s."
 msgstr ""
 "Assurez-vous que cette valeur est supérieure ou égale à %(limit_value)s."
 
-#: core/validators.py:129
+#: core/validators.py:164
 #, python-format
 msgid ""
 "Ensure this value has at least %(limit_value)d characters (it has %"
@@ -4539,7 +4543,7 @@ msgstr ""
 "Assurez-vous que cette valeur comporte au moins %(limit_value)d caractères "
 "(actuellement %(show_value)d)."
 
-#: core/validators.py:135
+#: core/validators.py:170
 #, python-format
 msgid ""
 "Ensure this value has at most %(limit_value)d characters (it has %"
@@ -4548,163 +4552,163 @@ msgstr ""
 "Assurez-vous que cette valeur comporte au maximum %(limit_value)d caractères "
 "(actuellement %(show_value)d)."
 
-#: db/models/base.py:775
+#: db/models/base.py:822
 #, python-format
 msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
 msgstr ""
 "%(field_name)s doit être unique pour la partie %(lookup)s de %(date_field)s."
 
-#: db/models/base.py:790 db/models/base.py:798
+#: db/models/base.py:837 db/models/base.py:845
 #, python-format
 msgid "%(model_name)s with this %(field_label)s already exists."
 msgstr "Un(e) %(model_name)s avec ce %(field_label)s existe déjà."
 
-#: db/models/fields/__init__.py:62
+#: db/models/fields/__init__.py:63
 #, python-format
 msgid "Value %r is not a valid choice."
 msgstr "La valeur « %r » n'est pas un choix valide."
 
-#: db/models/fields/__init__.py:63
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Ce champ ne peut pas être vide."
 
-#: db/models/fields/__init__.py:64
+#: db/models/fields/__init__.py:65
 msgid "This field cannot be blank."
 msgstr "Ce champ ne peut pas être vide."
 
-#: db/models/fields/__init__.py:69
+#: db/models/fields/__init__.py:70
 #, python-format
 msgid "Field of type: %(field_type)s"
 msgstr "Champ de type : %(field_type)s"
 
-#: db/models/fields/__init__.py:475 db/models/fields/__init__.py:871
-#: db/models/fields/__init__.py:967 db/models/fields/__init__.py:978
-#: db/models/fields/__init__.py:1005
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
 msgid "Integer"
 msgstr "Entier"
 
-#: db/models/fields/__init__.py:479
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
 msgid "This value must be an integer."
 msgstr "Cette valeur doit être un entier."
 
-#: db/models/fields/__init__.py:514
+#: db/models/fields/__init__.py:490
 msgid "This value must be either True or False."
 msgstr "Cette valeur doit être soit vraie (True) soit fausse (False)."
 
-#: db/models/fields/__init__.py:516
+#: db/models/fields/__init__.py:492
 msgid "Boolean (Either True or False)"
 msgstr "Booléen (soit vrai ou faux)"
 
-#: db/models/fields/__init__.py:558 db/models/fields/__init__.py:988
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
 #, python-format
 msgid "String (up to %(max_length)s)"
 msgstr "Chaîne de caractère (jusqu'à %(max_length)s)"
 
-#: db/models/fields/__init__.py:586
+#: db/models/fields/__init__.py:567
 msgid "Comma-separated integers"
 msgstr "Des entiers séparés par une virgule"
 
-#: db/models/fields/__init__.py:600
+#: db/models/fields/__init__.py:581
 msgid "Date (without time)"
 msgstr "Date (sans l'heure)"
 
-#: db/models/fields/__init__.py:604
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Saisissez une date valide au format AAAA-MM-JJ."
 
-#: db/models/fields/__init__.py:605
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Date non valide : %s"
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Saisissez une date et une heure valides au format AAAA-MM-JJ HH:MM[:ss[."
 "uuuuuu]]."
 
-#: db/models/fields/__init__.py:688
+#: db/models/fields/__init__.py:669
 msgid "Date (with time)"
 msgstr "Date (avec l'heure)"
 
-#: db/models/fields/__init__.py:754
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Cette valeur doit être un nombre décimal."
 
-#: db/models/fields/__init__.py:756
+#: db/models/fields/__init__.py:737
 msgid "Decimal number"
 msgstr "Nombre décimal"
 
-#: db/models/fields/__init__.py:811
+#: db/models/fields/__init__.py:792
 msgid "E-mail address"
 msgstr "Adresse électronique"
 
-#: db/models/fields/__init__.py:818 db/models/fields/files.py:220
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
 #: db/models/fields/files.py:331
 msgid "File path"
 msgstr "Chemin vers le fichier"
 
-#: db/models/fields/__init__.py:841 db/models/fields/__init__.py:869
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Cette valeur doit être un nombre réel."
 
-#: db/models/fields/__init__.py:843
+#: db/models/fields/__init__.py:824
 msgid "Floating point number"
 msgstr "Nombre à virgule flottante"
 
-#: db/models/fields/__init__.py:896
+#: db/models/fields/__init__.py:883
 msgid "Big (8 byte) integer"
 msgstr "Grand entier (8 octets)"
 
-#: db/models/fields/__init__.py:925
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Cette valeur doit être nulle (None), vraie (True) ou fausse (False)."
 
-#: db/models/fields/__init__.py:927
+#: db/models/fields/__init__.py:914
 msgid "Boolean (Either True, False or None)"
 msgstr "Booléen (soit vrai, faux ou nul)"
 
-#: db/models/fields/__init__.py:1011
+#: db/models/fields/__init__.py:1005
 msgid "Text"
 msgstr "Texte"
 
-#: db/models/fields/__init__.py:1027
+#: db/models/fields/__init__.py:1021
 msgid "Time"
 msgstr "Heure"
 
-#: db/models/fields/__init__.py:1031
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Saisissez une heure valide au format HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:1115
+#: db/models/fields/__init__.py:1109
 msgid "XML text"
 msgstr "Texte XML"
 
-#: db/models/fields/related.py:755
+#: db/models/fields/related.py:799
 #, python-format
 msgid "Model %(model)s with pk %(pk)r does not exist."
 msgstr "Le modèle %(model)s avec la clef primaire %(pk)r n'existe pas."
 
-#: db/models/fields/related.py:757
+#: db/models/fields/related.py:801
 msgid "Foreign Key (type determined by related field)"
 msgstr "Clé étrangère (type défini par le champ lié)"
 
-#: db/models/fields/related.py:879
+#: db/models/fields/related.py:923
 msgid "One-to-one relationship"
 msgstr "Relation un à un"
 
-#: db/models/fields/related.py:939
+#: db/models/fields/related.py:983
 msgid "Many-to-many relationship"
 msgstr "Relation plusieurs à plusieurs"
 
-#: db/models/fields/related.py:959
+#: db/models/fields/related.py:1003
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Maintenez appuyé « Ctrl », ou « Commande (touche pomme) » sur un Mac, pour en "
 "sélectionner plusieurs."
 
-#: db/models/fields/related.py:1020
+#: db/models/fields/related.py:1064
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -4718,55 +4722,55 @@ msgstr[1] ""
 msgid "This field is required."
 msgstr "Ce champ est obligatoire."
 
-#: forms/fields.py:195
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Saisissez un nombre entier."
 
-#: forms/fields.py:225 forms/fields.py:247
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Saisissez un nombre."
 
-#: forms/fields.py:250
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres au total."
 
-#: forms/fields.py:251
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres après la virgule."
 
-#: forms/fields.py:252
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres avant la virgule."
 
-#: forms/fields.py:309 forms/fields.py:824
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Saisissez une date valide."
 
-#: forms/fields.py:337 forms/fields.py:825
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Saisissez une heure valide."
 
-#: forms/fields.py:363
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Saisissez une date et une heure valides."
 
-#: forms/fields.py:421
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr ""
 "Aucun fichier n'a été soumis. Vérifiez le type d'encodage du formulaire."
 
-#: forms/fields.py:422
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Aucun fichier n'a été soumis."
 
-#: forms/fields.py:423
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Le fichier soumis est vide."
 
-#: forms/fields.py:424
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4774,7 +4778,7 @@ msgstr ""
 "Assurez-vous que ce nom de fichier ne contient pas plus de %(max)d "
 "caractères (actuellement %(length)d caractères)."
 
-#: forms/fields.py:459
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4782,33 +4786,33 @@ msgstr ""
 "Téléversez une image valide. Le fichier que vous avez transféré n'est pas "
 "une image ou bien est corrompu."
 
-#: forms/fields.py:582 forms/fields.py:657
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Sélectionnez un choix valide. %(value)s n'en fait pas partie."
 
-#: forms/fields.py:658 forms/fields.py:720 forms/models.py:961
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:995
 msgid "Enter a list of values."
 msgstr "Saisissez une liste de valeurs."
 
 # Si « : » est requis, créer un ticket
-#: forms/formsets.py:290 forms/formsets.py:292
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Ordre"
 
-#: forms/models.py:538
+#: forms/models.py:556
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Corrigez les données à double dans %(field)s."
 
-#: forms/models.py:542
+#: forms/models.py:560
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr ""
 "Corrigez les données à double dans %(field)s qui doit contenir des valeurs "
 "uniques."
 
-#: forms/models.py:548
+#: forms/models.py:566
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4817,54 +4821,54 @@ msgstr ""
 "Corrigez les données à double dans %(field_name)s qui doit contenir des "
 "valeurs uniques pour la partie %(lookup)s de %(date_field)s."
 
-#: forms/models.py:556
+#: forms/models.py:574
 msgid "Please correct the duplicate values below."
 msgstr "Corrigez les valeurs à double ci-dessous."
 
-#: forms/models.py:820
+#: forms/models.py:848
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "La clé étrangère en ligne ne correspond pas à la clé primaire de l'instance "
 "parente."
 
-#: forms/models.py:886
+#: forms/models.py:914
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr ""
 "Sélectionnez un choix valide. Ce choix ne fait pas partie de ceux "
 "disponibles."
 
-#: forms/models.py:962
+#: forms/models.py:996
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Sélectionnez un choix valide ; %s n'en fait pas partie."
 
-#: forms/models.py:964
+#: forms/models.py:998
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "« %s » n'est pas une valeur correcte pour une clé primaire."
 
-#: template/defaultfilters.py:775
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "oui, non, peut-être"
 
-#: template/defaultfilters.py:806
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d octet"
 msgstr[1] "%(size)d octets"
 
-#: template/defaultfilters.py:808
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f Ko"
 
-#: template/defaultfilters.py:810
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f Mo"
 
-#: template/defaultfilters.py:811
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f Go"
diff --git a/django/conf/locale/fr/LC_MESSAGES/djangojs.mo b/django/conf/locale/fr/LC_MESSAGES/djangojs.mo
index 8f4d428724..a1d2f6afcd 100644
Binary files a/django/conf/locale/fr/LC_MESSAGES/djangojs.mo and b/django/conf/locale/fr/LC_MESSAGES/djangojs.mo differ
diff --git a/django/conf/locale/fr/LC_MESSAGES/djangojs.po b/django/conf/locale/fr/LC_MESSAGES/djangojs.po
index fe16bd0dcb..6f4a4ae8d1 100644
--- a/django/conf/locale/fr/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/fr/LC_MESSAGES/djangojs.po
@@ -1,49 +1,60 @@
-# French translation for Django Javascript. 
-# Copyright (C) 2005 Mikaël Barbero
-# This file is distributed under the same license as the Django package. 
+# French translation for Django Javascript.
+# Copyright (C) 2005-2010 Django Software Foundation and individual contributors.
+# This file is distributed under the same license as the Django package.
+#
+# Mikaël Barbero, 2005.
+# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2010.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-04 11:14+0100\n"
-"PO-Revision-Date: 2009-03-01 12:43+0100\n"
+"POT-Creation-Date: 2010-04-26 15:45+0200\n"
+"PO-Revision-Date: 2010-04-16 23:56+0200\n"
 "Last-Translator: Stéphane Raimbault <stephane.raimbault@gmail.com>\n"
 "Language-Team: French <http://django-fr.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "%s disponible(s)"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Tout choisir"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Ajouter"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Enlever"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "%s choisi(es)"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Sélectionnez un ou plusieurs choix et cliquez "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Tout enlever"
 
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s sur %(cnt)s sélectionné"
+msgstr[1] "%(sel)s sur %(cnt)s sélectionnés"
+
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
 msgid ""
@@ -57,62 +68,63 @@ msgstr ""
 msgid "S M T W T F S"
 msgstr "D L M M J V S"
 
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Afficher"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Masquer"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Afficher"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Masquer"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Maintenant"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Horloge"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Choisir une heure"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Minuit"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6:00"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Midi"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Annuler"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Aujourd'hui"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Calendrier"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Hier"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Demain"