Commits

Anonymous committed 2a88cf2

multi-auth: Merged to [3051]

  • Participants
  • Parent commits ee60a14
  • Branches multi-auth

Comments (0)

Files changed (56)

     andy@jadedplanet.net
     Antonio Cavedoni <http://cavedoni.com/>
     C8E
+    Chris Chamberlin <dja@cdc.msbx.net>
     Amit Chakradeo <http://amit.chakradeo.net/>
     ChaosKCW
     Ian Clelland <clelland@gmail.com>

django/conf/global_settings.py

 SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 # Age of cookie, in seconds (default: 2 weeks).
 SESSION_COOKIE_DOMAIN = None              # A string like ".lawrence.com", or None for standard domain cookie.
 SESSION_SAVE_EVERY_REQUEST = False        # Whether to save the session data on every request.
+SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # Whether sessions expire when a user closes his browser.
 
 #########
 # CACHE #

django/conf/locale/el/LC_MESSAGES/django.mo

Binary file modified.

django/conf/locale/el/LC_MESSAGES/django.po

 "Last-Translator: panos laganakos <panos.laganakos@gmail.com>\n"
 "Language-Team: Greek\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: contrib/comments/models.py:67 contrib/comments/models.py:166

django/conf/locale/fr/LC_MESSAGES/django.mo

Binary file modified.

django/conf/locale/fr/LC_MESSAGES/django.po

 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:11+0200\n"
 "PO-Revision-Date: 2006-05-08 15:12+0200\n"
-"Last-Translator: Ga�l Chardon <gael.dev_at_nospam_4now.net>\n"
-"Language-Team: fran�ais <fr@li.org>\n"
+"Last-Translator: Gaël Chardon <gael.dev_at_nospam_4now.net>\n"
+"Language-Team: français <fr@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: contrib/comments/models.py:70
 msgid "rating #1"
-msgstr "vote n1"
+msgstr "vote n°1"
 
 #: contrib/comments/models.py:71
 msgid "rating #2"
-msgstr "vote n2"
+msgstr "vote n°2"
 
 #: contrib/comments/models.py:72
 msgid "rating #3"
-msgstr "vote n3"
+msgstr "vote n°3"
 
 #: contrib/comments/models.py:73
 msgid "rating #4"
-msgstr "vote n4"
+msgstr "vote n°4"
 
 #: contrib/comments/models.py:74
 msgid "rating #5"
-msgstr "vote n5"
+msgstr "vote n°5"
 
 #: contrib/comments/models.py:75
 msgid "rating #6"
-msgstr "vote n6"
+msgstr "vote n°6"
 
 #: contrib/comments/models.py:76
 msgid "rating #7"
-msgstr "vote n7"
+msgstr "vote n°7"
 
 #: contrib/comments/models.py:77
 msgid "rating #8"
-msgstr "vote n8"
+msgstr "vote n°8"
 
 #: contrib/comments/models.py:82
 msgid "is valid rating"
 
 #: contrib/comments/models.py:86
 msgid "is removed"
-msgstr "est supprim"
+msgstr "est supprimé"
 
 #: contrib/comments/models.py:86
 msgid ""
 "Check this box if the comment is inappropriate. A \"This comment has been "
 "removed\" message will be displayed instead."
 msgstr ""
-"Cochez cette case si le commentaire est inad�quat. Un message type \"Ce "
-"commentaire a �t� supprim�\" sera affich� en lieu et place de celui-ci."
+"Cochez cette case si le commentaire est inadéquat. Un message type \"Ce "
+"commentaire a été supprimé\" sera affiché en lieu et place de celui-ci."
 
 #: contrib/comments/models.py:91
 msgid "comments"
 "\n"
 "http://%(domain)s%(url)s"
 msgstr ""
-"Post par %(user)s  %(date)s\n"
+"Posté par %(user)s à %(date)s\n"
 "\n"
 "%(comment)s\n"
 "\n"
 
 #: contrib/comments/models.py:173
 msgid "approved by staff"
-msgstr "approuv par l'quipe"
+msgstr "approuvé par l'équipe"
 
 #: contrib/comments/models.py:176
 msgid "free comment"
 
 #: contrib/comments/models.py:234
 msgid "score date"
-msgstr "date d'valuation"
+msgstr "date d'évaluation"
 
 #: contrib/comments/models.py:237
 msgid "karma score"
 #: contrib/comments/models.py:242
 #, python-format
 msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d valu par %(user)s"
+msgstr "%(score)d évalué par %(user)s"
 
 #: contrib/comments/models.py:258
 #, python-format
 "\n"
 "%(text)s"
 msgstr ""
-"Ce commentaire a �t� marqu par %(user)s:\n"
+"Ce commentaire a été marqué par %(user)s:\n"
 "\n"
 "%(text)s"
 
 
 #: contrib/comments/models.py:280
 msgid "moderator deletion"
-msgstr "suppression de modrateur"
+msgstr "suppression de modérateur"
 
 #: contrib/comments/models.py:281
 msgid "moderator deletions"
-msgstr "suppressions de modrateur"
+msgstr "suppressions de modérateur"
 
 #: contrib/comments/models.py:285
 #, python-format
 msgid "Moderator deletion by %r"
-msgstr "Suppression de modrateur par %r"
+msgstr "Suppression de modérateur par %r"
 
 #: contrib/comments/views/karma.py:19
 msgid "Anonymous users cannot vote"
 
 #: contrib/comments/views/karma.py:25
 msgid "No voting for yourself"
-msgstr "Impossible de voter pour soi-mme"
+msgstr "Impossible de voter pour soi-même"
 
 #: contrib/comments/views/comments.py:28
 msgid ""
 "This rating is required because you've entered at least one other rating."
 msgstr ""
-"Ce votre est n�c�ssaire parceque vous avez saisi au moins un autre vote."
+"Ce votre est nécéssaire parceque vous avez saisi au moins un autre vote."
 
 #: contrib/comments/views/comments.py:112
 #, python-format
 "\n"
 "%(text)s"
 msgstr[0] ""
-"Ce commentaire a �t� post par un utilisateur qui a post moins de %(count)s "
+"Ce commentaire a été posté par un utilisateur qui a posté moins de %(count)s "
 "commentaire :\n"
 "\n"
 "%(text)s"
 msgstr[1] ""
-"Ce commentaire a �t� post par un utilisateur qui a post moins de %(count)s "
+"Ce commentaire a été posté par un utilisateur qui a posté moins de %(count)s "
 "commentaires :\n"
 "\n"
 "%(text)s"
 "\n"
 "%(text)s"
 msgstr ""
-"Ce commentaire a �t� post par un utilisateur imprcis :\n"
+"Ce commentaire a été posté par un utilisateur imprécis :\n"
 "\n"
 "%(text)s"
 
 #: contrib/comments/views/comments.py:189
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
-msgstr "Seuls les POSTs sont autoriss"
+msgstr "Seuls les POSTs sont autorisés"
 
 #: contrib/comments/views/comments.py:193
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
-msgstr "Un ou plusieurs champs requis n'ont pas �t� remplis"
+msgstr "Un ou plusieurs champs requis n'ont pas été remplis"
 
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr ""
-"Quelqu'un a trafiqu� le formulaire de commentaire (violation des r�gles de "
-"s�curit�)"
+"Quelqu'un a trafiqué le formulaire de commentaire (violation des règles de "
+"sécurité)"
 
 #: contrib/comments/views/comments.py:207
 #: contrib/comments/views/comments.py:292
 "The comment form had an invalid 'target' parameter -- the object ID was "
 "invalid"
 msgstr ""
-"Ce formulaire de commentaire avait un param�tre cible invalide ; l'ID de "
-"l'objet �tait invalide"
+"Ce formulaire de commentaire avait un paramètre cible invalide ; l'ID de "
+"l'objet était invalide"
 
 #: contrib/comments/views/comments.py:257
 #: contrib/comments/views/comments.py:321
 msgid "The comment form didn't provide either 'preview' or 'post'"
 msgstr ""
-"Le formulaire de commentaire ne proposait ni les options de prvisualisation "
+"Le formulaire de commentaire ne proposait ni les options de prévisualisation "
 "ni d'envoi"
 
 #: contrib/comments/templates/comments/form.html:6
 
 #: contrib/comments/templates/comments/form.html:6
 msgid "Forgotten your password?"
-msgstr "Mot de passe oubli?"
+msgstr "Mot de passe oublié?"
 
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/model_index.html:5
 msgid "Log out"
-msgstr "Dconnexion"
+msgstr "Déconnexion"
 
 #: contrib/comments/templates/comments/form.html:12
-#, fuzzy
 msgid "Ratings"
-msgstr "vote n�1"
+msgstr "Votes"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 #: contrib/comments/templates/comments/form.html:32
 #: contrib/comments/templates/comments/freeform.html:9
 msgid "Preview comment"
-msgstr "Prvisualisation du commentaire"
+msgstr "Prévisualisation du commentaire"
 
 #: contrib/comments/templates/comments/freeform.html:4
 msgid "Your name:"
 
 #: contrib/admin/filterspecs.py:117
 msgid "This year"
-msgstr "Cette anne"
+msgstr "Cette année"
 
 #: contrib/admin/filterspecs.py:143
 msgid "Yes"
 
 #: contrib/admin/models.py:20
 msgid "object repr"
-msgstr "reprsentation de l'objet"
+msgstr "représentation de l'objet"
 
 #: contrib/admin/models.py:21
 msgid "action flag"
 
 #: contrib/admin/models.py:25
 msgid "log entry"
-msgstr "entre d'historique"
+msgstr "entrée d'historique"
 
 #: contrib/admin/models.py:26
 msgid "log entries"
-msgstr "entres d'historique"
+msgstr "entrées d'historique"
 
 #: contrib/admin/templatetags/admin_list.py:228
 msgid "All dates"
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
 msgstr ""
-"Saisissez s'il vous pla�t un nom d'utilisateur et un mot de passe valide. "
-"Remarquez que chacun de ces champs est sensible � la casse (diff�renciation "
+"Saisissez s'il vous plaît un nom d'utilisateur et un mot de passe valide. "
+"Remarquez que chacun de ces champs est sensible à la casse (différenciation "
 "des majuscules/minuscules)."
 
 #: contrib/admin/views/decorators.py:23
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
 msgstr ""
-"Votre session a expir�, connectez-vous de nouveau s'il vous pla�t. Ne vous "
-"inqui�tez pas, votre travail pr�c�dement �ffectu� a �t� sauv�."
+"Votre session a expiré, connectez-vous de nouveau s'il vous plaît. Ne vous "
+"inquiétez pas, votre travail précédement éffectué a été sauvé."
 
 #: contrib/admin/views/decorators.py:68
 msgid ""
 "cookies, reload this page, and try again."
 msgstr ""
 "Il semblerait que votre navigateur n'accepte pas les cookies. Activez-les, "
-"rechargez cette page et r��ssayez s'il vous plat."
+"rechargez cette page et rééssayez s'il vous plaît."
 
 #: contrib/admin/views/decorators.py:82
 msgid "Usernames cannot contain the '@' character."
-msgstr "Les noms d'utilisateur ne peuvent contenir le caractre '@'"
+msgstr "Les noms d'utilisateur ne peuvent contenir le caractère '@'"
 
 #: contrib/admin/views/decorators.py:84
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
-"Votre courriel n'est pas votre nom d'utilisateur. Essayez '%s'  la place."
+"Votre courriel n'est pas votre nom d'utilisateur. Essayez '%s' à la place."
 
 #: contrib/admin/views/main.py:226
 msgid "Site administration"
 #: contrib/admin/views/main.py:260
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "L'objet %(name)s \"%(obj)s\" a �t� ajout avec succs."
+msgstr "L'objet %(name)s \"%(obj)s\" a été ajouté avec succès."
 
 #: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
 msgid "You may edit it again below."
-msgstr "Vous pouvez continuez de l'ditez ci-dessous."
+msgstr "Vous pouvez continuez de l'éditez ci-dessous."
 
 #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
 #, python-format
 #: contrib/admin/views/main.py:336
 #, python-format
 msgid "Added %s."
-msgstr "Ajout %s."
+msgstr "Ajouté %s."
 
 #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
 #: contrib/admin/views/main.py:340
 #: contrib/admin/views/main.py:338
 #, python-format
 msgid "Changed %s."
-msgstr "Modifi %s."
+msgstr "Modifié %s."
 
 #: contrib/admin/views/main.py:340
 #, python-format
 msgid "Deleted %s."
-msgstr "Supprim %s."
+msgstr "Supprimé %s."
 
 #: contrib/admin/views/main.py:343
 msgid "No fields changed."
-msgstr "Aucun champs modifi."
+msgstr "Aucun champs modifié."
 
 #: contrib/admin/views/main.py:346
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "L'objet %(name)s \"%(obj)s\" a �t� modifi avec succs."
+msgstr "L'objet %(name)s \"%(obj)s\" a été modifié avec succès."
 
 #: contrib/admin/views/main.py:354
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr ""
-"L'objet %(name)s \"%(obj)s\" a �t� ajout� avec succ�s.Vous pouvez continuez "
-"de l'�ditez ci-dessous."
+"L'objet %(name)s \"%(obj)s\" a été ajouté avec succès.Vous pouvez continuez "
+"de l'éditez ci-dessous."
 
 #: contrib/admin/views/main.py:392
 #, python-format
 #: contrib/admin/views/main.py:508
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "L'objet %(name)s \"%(obj)s\" a �t� supprim avec succs."
+msgstr "L'objet %(name)s \"%(obj)s\" a été supprimé avec succès."
 
 #: contrib/admin/views/main.py:511
 msgid "Are you sure?"
-msgstr "tes-vous sr ?"
+msgstr "Êtes-vous sûr ?"
 
 #: contrib/admin/views/main.py:533
 #, python-format
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s"
-msgstr "Slectionnez %s"
+msgstr "Sélectionnez %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s to change"
-msgstr "Slectionnez %s pour changer"
+msgstr "Sélectionnez %s pour changer"
 
 #: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
 
 #: contrib/admin/views/doc.py:278
 msgid "Boolean (Either True or False)"
-msgstr "Boolen (Vrai ou Faux)"
+msgstr "Booléen (Vrai ou Faux)"
 
 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
 #, python-format
 msgid "String (up to %(maxlength)s)"
-msgstr "Chane de caractre (jusqu' %(maxlength)s)"
+msgstr "Chaîne de caractère (jusqu'à %(maxlength)s)"
 
 #: contrib/admin/views/doc.py:280
 msgid "Comma-separated integers"
-msgstr "Des entiers spars par une virgule"
+msgstr "Des entiers séparés par une virgule"
 
 #: contrib/admin/views/doc.py:281
 msgid "Date (without time)"
 
 #: contrib/admin/views/doc.py:285
 msgid "Decimal number"
-msgstr "Nombre dcimal"
+msgstr "Nombre décimal"
 
 #: contrib/admin/views/doc.py:291
 msgid "Boolean (Either True, False or None)"
-msgstr "Boolen (Vrai, Faux ou None)"
+msgstr "Booléen (Vrai, Faux ou None)"
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr "Relation au modle parent"
+msgstr "Relation au modèle parent"
 
 #: contrib/admin/views/doc.py:293
 msgid "Phone number"
-msgstr "Numro de t�l�phone"
+msgstr "Numéro de téléphone"
 
 #: contrib/admin/views/doc.py:298
 msgid "Text"
 
 #: contrib/admin/views/doc.py:301
 msgid "U.S. state (two uppercase letters)"
-msgstr "tat U.S. (deux lettres majuscules)"
+msgstr "État U.S. (deux lettres majuscules)"
 
 #: contrib/admin/views/doc.py:302
 msgid "XML text"
 "This object doesn't have a change history. It probably wasn't added via this "
 "admin site."
 msgstr ""
-"Cet objet n'a pas d'historique de modification. Il n'a probablement pas �t� "
-"ajout� au moyen de ce site d'administration."
+"Cet objet n'a pas d'historique de modification. Il n'a probablement pas été "
+"ajouté au moyen de ce site d'administration."
 
 #: contrib/admin/templates/admin/base_site.html:4
 msgid "Django site admin"
 "There's been an error. It's been reported to the site administrators via e-"
 "mail and should be fixed shortly. Thanks for your patience."
 msgstr ""
-"Une erreur est survenue. Elle a �t� transmise par courriel aux "
-"administrateurs du site et sera corrig�e dans les meilleurs d�lais. Merci "
+"Une erreur est survenue. Elle a été transmise par courriel aux "
+"administrateurs du site et sera corrigée dans les meilleurs délais. Merci "
 "pour votre patience."
 
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
 msgid "Page not found"
-msgstr "Cette page n'a pas �t� trouve"
+msgstr "Cette page n'a pas été trouvée"
 
 #: contrib/admin/templates/admin/404.html:10
 msgid "We're sorry, but the requested page could not be found."
-msgstr "Nous sommes dsols, mais la page demande est introuvable."
+msgstr "Nous sommes désolés, mais la page demandée est introuvable."
 
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr "Modles disponibles dans l'application %(name)s."
+msgstr "Modèles disponibles dans l'application %(name)s."
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
 
 #: contrib/admin/templates/admin/index.html:44
 msgid "You don't have permission to edit anything."
-msgstr "Vous n'avez pas la permission d'diter quoi que ce soit."
+msgstr "Vous n'avez pas la permission d'éditer quoi que ce soit."
 
 #: contrib/admin/templates/admin/index.html:52
 msgid "Recent Actions"
-msgstr "Actions rcentes"
+msgstr "Actions récentes"
 
 #: contrib/admin/templates/admin/index.html:53
 msgid "My Actions"
 "types of objects:"
 msgstr ""
 "Supprimer l'objet %(object_name)s '%(object)s' provoquerait la suppression "
-"des objets qui lui sont lis mais votre compte ne possde pas la permission "
+"des objets qui lui sont liés mais votre compte ne possède pas la permission "
 "de supprimer les types d'objets suivants :"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
 "the following related items will be deleted:"
 msgstr ""
-"�tes vous certain de vouloir supprimer l'objet %(object_name)s \"%(object)s"
-"\" ? Les �l�ments suivant sont li�s � celui-ci et seront aussi supprim�s :"
+"Êtes vous certain de vouloir supprimer l'objet %(object_name)s \"%(object)s"
+"\" ? Les éléments suivant sont liés à celui-ci et seront aussi supprimés :"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
 #: contrib/admin/templates/registration/password_change_done.html:6
 #: contrib/admin/templates/registration/password_change_done.html:10
 msgid "Password change successful"
-msgstr "Mot de passe modifi avec succs"
+msgstr "Mot de passe modifié avec succés"
 
 #: contrib/admin/templates/registration/password_change_done.html:12
 msgid "Your password was changed."
-msgstr "Votre mot de passe a �t� modifi."
+msgstr "Votre mot de passe a été modifié."
 
 #: contrib/admin/templates/registration/password_reset_form.html:4
 #: contrib/admin/templates/registration/password_reset_form.html:6
 #: contrib/admin/templates/registration/password_reset_form.html:10
 #: contrib/admin/templates/registration/password_reset_done.html:4
 msgid "Password reset"
-msgstr "Rinitialisation de votre mot de passe"
+msgstr "Réinitialisation de votre mot de passe"
 
 #: contrib/admin/templates/registration/password_reset_form.html:12
 msgid ""
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
-msgstr "Rinitialiser mon mot de passe"
+msgstr "Réinitialiser mon mot de passe"
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Merci pour le temps que vous avez accord� � ce site aujourd'hui."
+msgstr "Merci pour le temps que vous avez accordé à ce site aujourd'hui."
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
-msgstr "Connectez vous  nouveau"
+msgstr "Connectez vous à nouveau"
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
 msgid "Password reset successful"
-msgstr "Mot de passe rinitialis avec succs"
+msgstr "Mot de passe réinitialisé avec succès"
 
 #: contrib/admin/templates/registration/password_reset_done.html:12
 msgid ""
 "We've e-mailed a new password to the e-mail address you submitted. You "
 "should be receiving it shortly."
 msgstr ""
-"Nous vous avons envoy par courriel un nouveau mot de passe. Vous devriez le "
+"Nous vous avons envoyé par courriel un nouveau mot de passe. Vous devriez le "
 "recevoir rapidement."
 
 #: contrib/admin/templates/registration/password_change_form.html:12
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
 msgstr ""
-"Pour des raisons de scurit, veuillez entrer votre ancien mot de passe puis "
+"Pour des raisons de sécurité, veuillez entrer votre ancien mot de passe puis "
 "saisissez deux fois votre nouveau mot de passe afin que nous puissions "
-"vrifier que vous l'avez tap correctement."
+"vérifier que vous l'avez tapé correctement."
 
 #: contrib/admin/templates/registration/password_change_form.html:17
 msgid "Old password:"
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
 msgstr ""
-"Vous recevez ce courriel car vous avez demand un changement de mot de passe"
+"Vous recevez ce courriel car vous avez demandé un changement de mot de passe"
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
 
 #: contrib/admin/templates/registration/password_reset_email.html:7
 msgid "Feel free to change this password by going to this page:"
-msgstr "Vous pouvez modifier ce mot de passe  l'adresse suivante :"
+msgstr "Vous pouvez modifier ce mot de passe à l'adresse suivante :"
 
 #: contrib/admin/templates/registration/password_reset_email.html:11
 msgid "Your username, in case you've forgotten:"
 #: contrib/admin/templates/registration/password_reset_email.html:15
 #, python-format
 msgid "The %(site_name)s team"
-msgstr "L'quipe %(site_name)s"
+msgstr "L'équipe %(site_name)s"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
 "that page."
 msgstr ""
 "Vous envoie de n'importe quelle page vers la documentation de la vue qui a "
-"g�n�r� cette page."
+"généré cette page."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
 msgid "Show object ID"
 "Shows the content-type and unique ID for pages that represent a single "
 "object."
 msgstr ""
-"Montre le content-type et l'ID unique pour les pages qui reprsente un objet "
+"Montre le content-type et l'ID unique pour les pages qui représente un objet "
 "unique."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
-msgstr "Editer cet objet (fentre courante)"
+msgstr "Editer cet objet (fenêtre courante)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Renvoie  la page d'administration qui reprsente un objet seul."
+msgstr "Renvoie à la page d'administration qui représente un objet seul."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
-msgstr "Editer cet objet (nouvelle fentre)"
+msgstr "Editer cet objet (nouvelle fenêtre)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:29
 msgid "As above, but opens the admin page in a new window."
 msgstr ""
 "Comme ci-dessus, mais ouvre la page d'administration dans une nouvelle "
-"fentre."
+"fenêtre."
 
 #: contrib/admin/templates/widget/date_time.html:3
 msgid "Date:"
 
 #: contrib/redirects/models.py:7
 msgid "redirect from"
-msgstr "redirig depuis"
+msgstr "redirigé depuis"
 
 #: contrib/redirects/models.py:8
 msgid ""
 "This should be an absolute path, excluding the domain name. Example: '/"
 "events/search/'."
 msgstr ""
-"Ceci doit tre un chemin absolu, sans nom de domaine. Par exemple: '/events/"
+"Ceci doit être un chemin absolu, sans nom de domaine. Par exemple: '/events/"
 "search/'."
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
-msgstr "redirig vers"
+msgstr "redirigé vers"
 
 #: contrib/redirects/models.py:10
 msgid ""
 "This can be either an absolute path (as above) or a full URL starting with "
 "'http://'."
 msgstr ""
-"Ceci peut �tre soit un chemin absolu (voir ci-dessus) soit une URL compl�te "
-"d�butant par 'http://'."
+"Ceci peut être soit un chemin absolu (voir ci-dessus) soit une URL complète "
+"débutant par 'http://'."
 
 #: contrib/redirects/models.py:12
 msgid "redirect"
 msgid ""
 "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
 msgstr ""
-"Par exemple : '/about/contact/'. V�rifiez la pr�sence du caract�re '/' en "
-"d�but et en fin de chaine."
+"Par exemple : '/about/contact/'. Vérifiez la présence du caractère '/' en "
+"début et en fin de chaine."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
 "Example: 'flatpages/contact_page'. If this isn't provided, the system will "
 "use 'flatpages/default'."
 msgstr ""
-"Par exemple: 'flatfiles/contact_page'. Sans dfinition, le systme utilisera "
+"Par exemple: 'flatfiles/contact_page'. Sans définition, le système utilisera "
 "'flatfiles/default'."
 
 #: contrib/flatpages/models.py:14
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
 msgstr ""
-"Si coch, seuls les utilisateurs connects auront la possibilit de voir "
+"Si coché, seuls les utilisateurs connectés auront la possibilité de voir "
 "cette page."
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
-msgstr "page  plat"
+msgstr "page à plat"
 
 #: contrib/flatpages/models.py:19
 msgid "flat pages"
-msgstr "pages  plat"
+msgstr "pages à plat"
 
 #: contrib/auth/models.py:13 contrib/auth/models.py:26
 msgid "name"
 
 #: contrib/auth/models.py:56
 msgid "first name"
-msgstr "prnom"
+msgstr "prénom"
 
 #: contrib/auth/models.py:57
 msgid "last name"
 
 #: contrib/auth/models.py:60
 msgid "staff status"
-msgstr "statut quipe"
+msgstr "statut équipe"
 
 #: contrib/auth/models.py:60
 msgid "Designates whether the user can log into this admin site."
-msgstr "Prcise si l'utilisateur peut se connecter  ce site d'administration."
+msgstr "Précise si l'utilisateur peut se connecter à ce site d'administration."
 
 #: contrib/auth/models.py:61
 msgid "active"
 
 #: contrib/auth/models.py:63
 msgid "last login"
-msgstr "dernire connexion"
+msgstr "dernière connexion"
 
 #: contrib/auth/models.py:64
 msgid "date joined"
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
 msgstr ""
-"En plus des permissions qui lui sont manuellement assignes, cet utilisateur "
+"En plus des permissions qui lui sont manuellement assignées, cet utilisateur "
 "recevra aussi toutes les permissions de tous les groupes auquels il "
 "appartient. "
 
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
 msgstr ""
-"Votre navigateur ne semble pas avoir activ� les cookies. Les cookies sont "
-"n�cessaire pour se connecter"
+"Votre navigateur ne semble pas avoir activé les cookies. Les cookies sont "
+"nécessaire pour se connecter"
 
 #: contrib/contenttypes/models.py:25
 msgid "python model class name"
 
 #: contrib/sessions/models.py:35
 msgid "session key"
-msgstr "cl de session"
+msgstr "clé de session"
 
 #: contrib/sessions/models.py:36
 msgid "session data"
-msgstr "donne de session"
+msgstr "donnée de session"
 
 #: contrib/sessions/models.py:37
 msgid "expire date"
 
 #: contrib/sites/models.py:11
 msgid "display name"
-msgstr "nom  afficher"
+msgstr "nom à afficher"
 
 #: contrib/sites/models.py:15
 msgid "site"
 
 #: utils/dates.py:14
 msgid "February"
-msgstr "Fvrier"
+msgstr "Février"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "March"
 
 #: utils/dates.py:15
 msgid "August"
-msgstr "Aot"
+msgstr "Août"
 
 #: utils/dates.py:15
 msgid "September"
 
 #: utils/dates.py:16
 msgid "December"
-msgstr "Dcembre"
+msgstr "Décembre"
 
 #: utils/dates.py:19
 msgid "jan"
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr "fv"
+msgstr "fév"
 
 #: utils/dates.py:19
 msgid "mar"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr "dc"
+msgstr "déc"
 
 #: utils/dates.py:27
 msgid "Jan."
 
 #: utils/dates.py:27
 msgid "Feb."
-msgstr "Fv."
+msgstr "Fév."
 
 #: utils/dates.py:28
 msgid "Aug."
-msgstr "Aut"
+msgstr "Aôut"
 
 #: utils/dates.py:28
 msgid "Sept."
 
 #: utils/dates.py:28
 msgid "Dec."
-msgstr "Dc."
+msgstr "Déc."
 
 #: utils/timesince.py:12
 msgid "year"
 msgid_plural "years"
-msgstr[0] "ann�e"
-msgstr[1] "ann�es"
+msgstr[0] "année"
+msgstr[1] "années"
 
 #: utils/timesince.py:13
-#, fuzzy
 msgid "month"
 msgid_plural "months"
 msgstr[0] "mois"
 #: utils/timesince.py:15
 msgid "day"
 msgid_plural "days"
-msgstr[0] "journe"
+msgstr[0] "journée"
 msgstr[1] "jours"
 
 #: utils/timesince.py:16
 
 #: conf/global_settings.py:37
 msgid "Bengali"
-msgstr ""
+msgstr "Indien"
 
 #: conf/global_settings.py:38
 msgid "Czech"
-msgstr "Tchque"
+msgstr "Tchèque"
 
 #: conf/global_settings.py:39
 msgid "Welsh"
 
 #: conf/global_settings.py:42
 msgid "Greek"
-msgstr ""
+msgstr "Grec"
 
 #: conf/global_settings.py:43
 msgid "English"
 
 #: conf/global_settings.py:45
 msgid "French"
-msgstr "Franais"
+msgstr "Français"
 
 #: conf/global_settings.py:46
 msgid "Galician"
 
 #: conf/global_settings.py:47
 msgid "Hungarian"
-msgstr ""
+msgstr "Hongrois"
 
 #: conf/global_settings.py:48
 msgid "Hebrew"
-msgstr ""
+msgstr "Israélien"
 
 #: conf/global_settings.py:49
 msgid "Icelandic"
 
 #: conf/global_settings.py:52
 msgid "Dutch"
-msgstr ""
+msgstr "Néerlandais"
 
 #: conf/global_settings.py:53
 msgid "Norwegian"
-msgstr "Norvgien"
+msgstr "Norvégien"
 
 #: conf/global_settings.py:54
 msgid "Brazilian"
-msgstr "Brsilien"
+msgstr "Brésilien"
 
 #: conf/global_settings.py:55
 msgid "Romanian"
 msgstr "Slovaque"
 
 #: conf/global_settings.py:58
-#, fuzzy
 msgid "Slovenian"
 msgstr "Slovaque"
 
 
 #: conf/global_settings.py:60
 msgid "Swedish"
-msgstr "Sudois"
+msgstr "Suédois"
 
 #: conf/global_settings.py:61
 msgid "Ukrainian"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
-msgstr "Chinois simplifi"
+msgstr "Chinois simplifié"
 
 #: conf/global_settings.py:63
 msgid "Traditional Chinese"
 
 #: core/validators.py:72
 msgid "Uppercase letters are not allowed here."
-msgstr "Les lettres majuscules ne sont pas autorises ici."
+msgstr "Les lettres majuscules ne sont pas autorisées ici."
 
 #: core/validators.py:76
 msgid "Lowercase letters are not allowed here."
-msgstr "Les lettres minuscules ne sont pas autorises ici."
+msgstr "Les lettres minuscules ne sont pas autorisées ici."
 
 #: core/validators.py:83
 msgid "Enter only digits separated by commas."
-msgstr "Saisissez uniquement des chiffres spars par des virgules."
+msgstr "Saisissez uniquement des chiffres séparés par des virgules."
 
 #: core/validators.py:95
 msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Entrez des adresses de courriel valides spares par des virgules."
+msgstr "Entrez des adresses de courriel valides séparées par des virgules."
 
 #: core/validators.py:99
 msgid "Please enter a valid IP address."
 
 #: core/validators.py:107
 msgid "Non-numeric characters aren't allowed here."
-msgstr "Les caractres non numriques ne sont pas autoriss ici."
+msgstr "Les caractères non numériques ne sont pas autorisés ici."
 
 #: core/validators.py:111
 msgid "This value can't be comprised solely of digits."
-msgstr "Cette valeur ne peut pas tre compos uniquement de chiffres."
+msgstr "Cette valeur ne peut pas être composé uniquement de chiffres."
 
 #: core/validators.py:116
 msgid "Enter a whole number."
 
 #: core/validators.py:120
 msgid "Only alphabetical characters are allowed here."
-msgstr "Seules les lettres de l'alphabet sont autorises ici."
+msgstr "Seules les lettres de l'alphabet sont autorisées ici."
 
 #: core/validators.py:124
 msgid "Enter a valid date in YYYY-MM-DD format."
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
 msgstr ""
-"Envoyez une image valide. Le fichier que vous avez transfer n'est pas une "
+"Envoyez une image valide. Le fichier que vous avez transferé n'est pas une "
 "image ou bien est une image corrompue."
 
 #: core/validators.py:155
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr ""
-"Les numros de t�l�phone doivent tre au format XXX-XXX-XXXX. \"%s\" est "
+"Les numéros de téléphone doivent être au format XXX-XXX-XXXX. \"%s\" est "
 "incorrect."
 
 #: core/validators.py:167
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "L'URL %s ne pointe pas vers une vido QuickTime valide."
+msgstr "L'URL %s ne pointe pas vers une vidéo QuickTime valide."
 
 #: core/validators.py:171
 msgid "A valid URL is required."
 #: core/validators.py:192
 #, python-format
 msgid "Badly formed XML: %s"
-msgstr "XML mal form : %s"
+msgstr "XML mal formé : %s"
 
 #: core/validators.py:202
 #, python-format
 #: core/validators.py:206 core/validators.py:208
 #, python-format
 msgid "The URL %s is a broken link."
-msgstr "L'URL %s est un lien cass."
+msgstr "L'URL %s est un lien cassé."
 
 #: core/validators.py:214
 msgid "Enter a valid U.S. state abbreviation."
-msgstr "Entrez une abrviation d'tat amricain valide."
+msgstr "Entrez une abréviation d'état américain valide."
 
 #: core/validators.py:229
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Attention � votre langage ! Le mot %s n'est pas autoris� ici."
-msgstr[1] "Attention � votre langage ! Les mots %s ne sont pas autoris�s ici."
+msgstr[0] "Attention à votre langage ! Le mot %s n'est pas autorisé ici."
+msgstr[1] "Attention à votre langage ! Les mots %s ne sont pas autorisés ici."
 
 #: core/validators.py:236
 #, python-format
 
 #: core/validators.py:255
 msgid "Please enter something for at least one field."
-msgstr "Saisissez au moins une valeur dans un des champs s'il vous plat."
+msgstr "Saisissez au moins une valeur dans un des champs s'il vous plaît."
 
 #: core/validators.py:264 core/validators.py:275
 msgid "Please enter both fields or leave them both empty."
 msgstr ""
-"Renseignez chacun des champs ou laissez les deux vides s'il vous plat."
+"Renseignez chacun des champs ou laissez les deux vides s'il vous plaît."
 
 #: core/validators.py:282
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Ce champ doit tre renseign si %(field)s vaut %(value)s"
+msgstr "Ce champ doit être renseigné si %(field)s vaut %(value)s"
 
 #: core/validators.py:294
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Ce champ doit tre renseign si %(field)s ne vaut pas %(value)s"
+msgstr "Ce champ doit être renseigné si %(field)s ne vaut pas %(value)s"
 
 #: core/validators.py:313
 msgid "Duplicate values are not allowed."
-msgstr "Des valeurs identiques ne sont pas autorises."
+msgstr "Des valeurs identiques ne sont pas autorisées."
 
 #: core/validators.py:336
 #, python-format
 msgid "This value must be a power of %s."
-msgstr "Cette valeur doit tre une puissance de %s."
+msgstr "Cette valeur doit être une puissance de %s."
 
 #: core/validators.py:347
 msgid "Please enter a valid decimal number."
-msgstr "Saisissez un nombre dcimal valide s'il vous plat."
+msgstr "Saisissez un nombre décimal valide s'il vous plaît."
 
 #: core/validators.py:349
 #, python-format
 msgid_plural ""
 "Please enter a valid decimal number with at most %s total digits."
 msgstr[0] ""
-"Saisissez un nombre dcimal valide avec au plus %s chiffre s'il vous plat."
+"Saisissez un nombre décimal valide avec au plus %s chiffre s'il vous plaît."
 msgstr[1] ""
-"Saisissez un nombre dcimal valide avec au plus %s chiffres s'il vous plat."
+"Saisissez un nombre décimal valide avec au plus %s chiffres s'il vous plaît."
 
 #: core/validators.py:352
 #, python-format
 msgid_plural ""
 "Please enter a valid decimal number with at most %s decimal places."
 msgstr[0] ""
-"Saisissez un nombre dcimal valide avec au plus %s dcimale s'il vous plat"
+"Saisissez un nombre décimal valide avec au plus %s décimale s'il vous plaît"
 msgstr[1] ""
-"Saisissez un nombre dcimal valide avec au plus %s dcimales s'il vous plat"
+"Saisissez un nombre décimal valide avec au plus %s décimales s'il vous plaît"
 
 #: core/validators.py:362
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
 msgstr ""
-"Vrifiez que le fichier transf�r� fait au moins une taille de %s octets."
+"Vérifiez que le fichier transféré fait au moins une taille de %s octets."
 
 #: core/validators.py:363
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
 msgstr ""
-"Vrifiez que le fichier transf�r� fait au plus une taille de %s octets."
+"Vérifiez que le fichier transféré fait au plus une taille de %s octets."
 
 #: core/validators.py:376
 msgid "The format for this field is wrong."
 #: core/validators.py:426
 #, python-format
 msgid "Could not retrieve anything from %s."
-msgstr "Impossible de rcuprer quoi que ce soit depuis %s."
+msgstr "Impossible de récupérer quoi que ce soit depuis %s."
 
 #: core/validators.py:429
 #, python-format
 msgid ""
 "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr ""
-"L'entte Content-Type '%(contenttype)s', renvoye par l'url %(url)s n'est "
+"L'entête Content-Type '%(contenttype)s', renvoyée par l'url %(url)s n'est "
 "pas valide."
 
 #: core/validators.py:462
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
 "\"%(start)s\".)"
 msgstr ""
-"Veuillez fermer le tag %(tag)s de la ligne %(line)s. (La ligne dbutant par "
+"Veuillez fermer le tag %(tag)s de la ligne %(line)s. (La ligne débutant par "
 "\"%(start)s\".)"
 
 #: core/validators.py:466
 "Some text starting on line %(line)s is not allowed in that context. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
-"Du texte commen�ant � la ligne %(line)s n'est pas autoris� dans ce contexte. "
-"(Ligne d�butant par \"%(start)s\".)"
+"Du texte commençant à la ligne %(line)s n'est pas autorisé dans ce contexte. "
+"(Ligne débutant par \"%(start)s\".)"
 
 #: core/validators.py:471
 #, python-format
 "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
 "(start)s\".)"
 msgstr ""
-"\"%(attr)s\" ligne %(line)s n'est pas un attribut valide. (Ligne dbutant "
+"\"%(attr)s\" ligne %(line)s n'est pas un attribut valide. (Ligne débutant "
 "par \"%(start)s\".)"
 
 #: core/validators.py:476
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
 "(start)s\".)"
 msgstr ""
-"\"<%(tag)s>\" ligne %(line)s n'est pas un tag valide. (Ligne dbutant par \"%"
+"\"<%(tag)s>\" ligne %(line)s n'est pas un tag valide. (Ligne débutant par \"%"
 "(start)s\".)"
 
 #: core/validators.py:480
 "starts with \"%(start)s\".)"
 msgstr ""
 "Un tag, ou un ou plusieurs attributs, de la ligne %(line)s est manquant. "
-"(Ligne dbutant par \"%(start)s\".)"
+"(Ligne débutant par \"%(start)s\".)"
 
 #: core/validators.py:485
 #, python-format
 "starts with \"%(start)s\".)"
 msgstr ""
 "La valeur de l'attribut \"%(attr)s\" de la ligne %(line)s n'est pas valide. "
-"(Ligne dbutant par \"%(start)s\".)"
+"(Ligne débutant par \"%(start)s\".)"
 
 #: db/models/manipulators.py:302
 #, python-format
 #: db/models/fields/__init__.py:40
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s avec le champs %(fieldname)s existe d�j�."
+msgstr "%(optname)s avec le champs %(fieldname)s existe déjà."
 
 #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
 #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
 
 #: db/models/fields/__init__.py:337
 msgid "This value must be an integer."
-msgstr "Cette valeur doit tre un entier."
+msgstr "Cette valeur doit être un entier."
 
 #: db/models/fields/__init__.py:369
 msgid "This value must be either True or False."
-msgstr "Cette valeur doit tre soit Vraie soit Fausse."
+msgstr "Cette valeur doit être soit Vraie soit Fausse."
 
 #: db/models/fields/__init__.py:385
 msgid "This field cannot be null."
-msgstr "Ce champ ne peut pas tre vide."
+msgstr "Ce champ ne peut pas être vide."
 
 #: db/models/fields/__init__.py:562
 msgid "Enter a valid filename."
 
 #: db/models/fields/related.py:579
 msgid "Separate multiple IDs with commas."
-msgstr "Sparez les ID par des virgules."
+msgstr "Séparez les ID par des virgules."
 
 #: db/models/fields/related.py:581
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
-"Maintenez \"Contr�le (ctrl)\", ou \"Commande (touche pomme)\" sur un Mac, "
-"pour en s�lectionner plusieurs."
+"Maintenez \"Contrôle (ctrl)\", ou \"Commande (touche pomme)\" sur un Mac, "
+"pour en sélectionner plusieurs."
 
 #: db/models/fields/related.py:625
 #, python-format
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Assurez-vous que votre texte fais moins de %s caract�re."
-msgstr[1] "Assurez-vous que votre texte fais moins de %s caract�res."
+msgstr[0] "Assurez-vous que votre texte fais moins de %s caractère."
+msgstr[1] "Assurez-vous que votre texte fais moins de %s caractères."
 
 #: forms/__init__.py:385
-#, fuzzy
 msgid "Line breaks are not allowed here."
-msgstr "Les retours  la ligne ne sont pas autoriss ici."
+msgstr "Les retours à la ligne ne sont pas autorisés ici."
 
 #: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Slectionnez un choix valide ; '%(data)s' n'est pas dans %(choices)s."
+msgstr "Sélectionnez un choix valide ; '%(data)s' n'est pas dans %(choices)s."
 
 #: forms/__init__.py:645
 msgid "The submitted file is empty."
 
 #: template/defaultfilters.py:379
 msgid "yes,no,maybe"
-msgstr "oui,non,peut-tre"
+msgstr "oui,non,peut-être"
 
 #~ msgid "Comment"
 #~ msgstr "Commentaire"
 #~ msgstr "Commentaires"
 
 #~ msgid "String (up to 50)"
-#~ msgstr "Chane de caractres (jusqu' 50)"
+#~ msgstr "Chaîne de caractères (jusqu'à 50)"
 
 #~ msgid "label"
-#~ msgstr "intitul"
+#~ msgstr "intitulé"
 
 #~ msgid "package"
 #~ msgstr "paquetage"
 #~ msgstr "paquetages"
 
 #~ msgid "Messages"
-#~ msgstr "Messages"
+#~ msgstr "Messages"

django/conf/project_template/manage.py

     import settings # Assumed to be in the same directory.
 except ImportError:
     import sys
-    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
+    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
     sys.exit(1)
 
 if __name__ == "__main__":

django/contrib/admin/media/css/login.css

 .login #content-main { width:100%; }
 .login form { margin-top:1em; }
 .login .form-row { padding:4px 0; float:left; width:100%; }
-.login .form-row label { float:left; width:7em; padding-right:0.5em; line-height:2em; text-align:right; font-size:1em; color:#333; }
-.login .form-row #id_username, .login .form-row #id_password { width:16em; }
+.login .form-row label { float:left; width:9em; padding-right:0.5em; line-height:2em; text-align:right; font-size:1em; color:#333; }
+.login .form-row #id_username, .login .form-row #id_password { width:14em; }
 .login span.help { font-size:10px; display:block; }
-.login .submit-row { clear:both; padding:1em 0 0 7.4em; }
+.login .submit-row { clear:both; padding:1em 0 0 9.4em; }

django/contrib/admin/media/img/admin/icon-unknown.gif

Added
New image

django/contrib/admin/templates/admin/change_form.html

 <div class="breadcrumbs">
      <a href="../../../">{% trans "Home" %}</a> &rsaquo;
      <a href="../">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
-     {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|striptags|truncatewords:"18" }}{% endif %}
+     {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18"|escape }}{% endif %}
 </div>
 {% endif %}{% endblock %}
 {% block content %}<div id="content-main">

django/contrib/admin/templates/admin/field_line.html

 <div class="{{ class_names }}" >
 {% for bound_field in bound_fields %}{{ bound_field.html_error_list }}{% endfor %}
 {% for bound_field in bound_fields %}
-  {% if bound_field.has_label_first %}
-    {% field_label bound_field %}
-  {% endif %}
+  {% if bound_field.has_label_first %}{% field_label bound_field %}{% endif %}
   {% field_widget bound_field %}
-  {% if not bound_field.has_label_first %}
-    {% field_label bound_field %}
-  {% endif %}
+  {% if not bound_field.has_label_first %}{% field_label bound_field %}{% endif %}
   {% if bound_field.field.help_text %}<p class="help">{{ bound_field.field.help_text }}</p>{% endif %}
 {% endfor %}
 </div>

django/contrib/admin/templates/admin/filter.html

 <ul>
 {% for choice in choices %}
     <li{% if choice.selected %} class="selected"{% endif %}>
-    <a href="{{ choice.query_string }}">{{ choice.display }}</a></li>
+    <a href="{{ choice.query_string }}">{{ choice.display|escape }}</a></li>
 {% endfor %}
 </ul>

django/contrib/admin/templates/admin/invalid_setup.html

+{% extends "admin/base_site.html" %}
+{% load i18n %}
+
+{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> &rsaquo; {{ title }}</div>{% endblock %}
+
+{% block content %}
+
+<p>{% trans "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user." %}</p>
+
+{% endblock %}

django/contrib/admin/templates/admin/object_history.html

         {% for action in action_list %}
         <tr>
             <th scope="row">{{ action.action_time|date:_("DATE_WITH_TIME_FULL") }}</th>
-            <td>{{ action.user.username }}{% if action.user.first_name %} ({{ action.user.first_name }} {{ action.user.last_name }}){% endif %}</td>
-            <td>{{ action.change_message}}</td>
+            <td>{{ action.user.username }}{% if action.user.first_name %} ({{ action.user.first_name|escape }} {{ action.user.last_name|escape }}){% endif %}</td>
+            <td>{{ action.change_message|escape }}</td>
         </tr>
         {% endfor %}
         </tbody>

django/contrib/admin/templatetags/adminapplist.py

                             })
 
                 if model_list:
-                    model_list.sort()
+                    # Sort using verbose decorate-sort-undecorate pattern
+                    # instead of key argument to sort() for python 2.3 compatibility
+                    decorated = [(x['name'], x) for x in model_list]
+                    decorated.sort()
+                    model_list = [x for key, x in decorated]
+
                     app_list.append({
                         'name': app_label.title(),
                         'has_module_perms': has_module_perms,

django/contrib/admin/urls.py

 
 urlpatterns = patterns('',
     ('^$', 'django.contrib.admin.views.main.index'),
-    ('^r/(\d+)/(\d+)/$', 'django.views.defaults.shortcut'),
+    ('^r/(\d+)/(.*)/$', 'django.views.defaults.shortcut'),
     ('^jsi18n/$', 'django.views.i18n.javascript_catalog', {'packages': 'django.conf'}),
     ('^logout/$', 'django.contrib.auth.views.logout'),
     ('^password_change/$', 'django.contrib.auth.views.password_change'),

django/contrib/admin/views/main.py

 PAGE_VAR = 'p'
 SEARCH_VAR = 'q'
 IS_POPUP_VAR = 'pop'
+ERROR_FLAG = 'e'
 
 # Text to display within change-list table cells if the value is blank.
 EMPTY_CHANGELIST_VALUE = '(None)'
     for item in list:
         if item[1:2]:
             try:
-                myappend(mychr(myatoi(item[:2], 16))
-                     + item[2:])
+                myappend(mychr(myatoi(item[:2], 16)) + item[2:])
             except ValueError:
                 myappend('_' + item)
         else:
             return self._display
         except AttributeError:
             if isinstance(self.field.rel, models.ManyToOneRel):
-                self._display = getattr(self.original, self.field.attname)
+                self._display = getattr(self.original, self.field.name)
             elif isinstance(self.field.rel, models.ManyToManyRel):
-                self._display = ", ".join([str(obj) for obj in getattr(self.original, self.field.attname).all()])
+                self._display = ", ".join([str(obj) for obj in getattr(self.original, self.field.name).all()])
             return self._display
 
     def __repr__(self):
         self.params = dict(request.GET.items())
         if self.params.has_key(PAGE_VAR):
             del self.params[PAGE_VAR]
+        if self.params.has_key(ERROR_FLAG):
+            del self.params[ERROR_FLAG]
 
         self.order_field, self.order_type = self.get_ordering()
         self.query = request.GET.get(SEARCH_VAR, '')
     try:
         cl = ChangeList(request, model)
     except IncorrectLookupParameters:
-        return HttpResponseRedirect(request.path)
+        # Wacky lookup parameters were given, so redirect to the main
+        # changelist page, without parameters, and pass an 'invalid=1'
+        # parameter via the query string. If wacky parameters were given and
+        # the 'invalid=1' parameter was already in the query string, something
+        # is screwed up with the database, so display an error page.
+        if ERROR_FLAG in request.GET.keys():
+            return render_to_response('admin/invalid_setup.html', {'title': _('Database error')})
+        return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
     c = template.RequestContext(request, {
         'title': cl.title,
         'is_popup': cl.is_popup,

django/contrib/auth/handlers/modpython.py

     # that so that the following import works
     os.environ.update(req.subprocess_env)
 
-    from django.contrib.auth.models import User
-
     # check for PythonOptions
     _str_to_bool = lambda s: s.lower() in ('1', 'true', 'on', 'yes')
 
     permission_name = options.get('DjangoPermissionName', None)
     staff_only = _str_to_bool(options.get('DjangoRequireStaffStatus', "on"))
     superuser_only = _str_to_bool(options.get('DjangoRequireSuperuserStatus', "off"))
+    settings_module = options.get('DJANGO_SETTINGS_MODULE', None)
+    if settings_module:
+        os.environ['DJANGO_SETTINGS_MODULE'] = settings_module
+
+    from django.contrib.auth.models import User
 
     # check that the username is valid
     kwargs = {'username': req.user, 'is_active': True}

django/contrib/auth/models.py

         ordering = ('content_type', 'codename')
 
     def __str__(self):
-        return "%r | %s" % (self.content_type, self.name)
+        return "%s | %s" % (self.content_type, self.name)
 
 class Group(models.Model):
     name = models.CharField(_('name'), maxlength=80, unique=True)

django/contrib/sessions/middleware.py

         else:
             if modified or settings.SESSION_SAVE_EVERY_REQUEST:
                 session_key = request.session.session_key or Session.objects.get_new_session_key()
+                if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE:
+                    max_age = None
+                    expires = None
+                else:
+                    max_age = settings.SESSION_COOKIE_AGE
+                    expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
                 new_session = Session.objects.save(session_key, request.session._session,
                     datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
-                expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
                 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,
-                    max_age=settings.SESSION_COOKIE_AGE, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN)
+                    max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN)
         return response

django/core/management.py

         r"""(           # each statement is...
         (?:             # one or more chunks of ...
             (?:[^;'"]+) # not the end of a statement or start of a quote
-          | (?:'[^']+') # something in single quotes
-          | (?:"[^"]+") # something in double quotes
+          | (?:'[^']*') # something in single quotes
+          | (?:"[^"]*") # something in double quotes
         )+)""", re.VERBOSE)
 
     # Find custom SQL, if it's available.

django/core/paginator.py

     def has_previous_page(self, page_number):
         return page_number > 0
 
+    def first_on_page(self, page_number):
+        """
+        Returns the 1-based index of the first object on the given page,
+        relative to total objects found (hits).
+        """
+        if page_number == 0:
+            return 1
+        return (self.num_per_page * page_number) + 1
+
+    def last_on_page(self, page_number):
+        """
+        Returns the 1-based index of the last object on the given page,
+        relative to total objects found (hits).
+        """
+        if page_number == 0 and self.num_per_page >= self._hits:
+            return self._hits
+        elif page_number == (self._pages - 1) and (page_number + 1) * self.num_per_page > self._hits:
+            return self._hits
+        return (page_number + 1) * self.num_per_page
+
     def _get_hits(self):
         if self._hits is None:
             self._hits = self.query_set.count()

django/core/validators.py

 ansi_date_re = re.compile('^%s$' % _datere)
 ansi_time_re = re.compile('^%s$' % _timere)
 ansi_datetime_re = re.compile('^%s %s$' % (_datere, _timere))
-email_re = re.compile(r'^[A-Z0-9._%-][+A-Z0-9._%-]*@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$', re.IGNORECASE)
+email_re = re.compile(
+    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"  # dot-atom
+    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
+    r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$', re.IGNORECASE)  # domain
 integer_re = re.compile(r'^-?\d+$')
 ip4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
 phone_re = re.compile(r'^[A-PR-Y0-9]{3}-[A-PR-Y0-9]{3}-[A-PR-Y0-9]{4}$', re.IGNORECASE)
     from PIL import Image
     from cStringIO import StringIO
     try:
-        Image.open(StringIO(field_data['content']))
+        content = field_data['content']
+    except TypeError:
+        raise ValidationError, gettext("No file was submitted. Check the encoding type on the form.")
+    try:
+        Image.open(StringIO(content))
     except IOError: # Python Imaging Library doesn't recognize it as an image
         raise ValidationError, gettext("Upload a valid image. The file you uploaded was either not an image or a corrupted image.")
 
         self.max_error_message = max_error_message or lazy_inter(gettext_lazy("Make sure your uploaded file is at most %s bytes big."), max_size)
 
     def __call__(self, field_data, all_data):
-        if self.min_size is not None and len(field_data['content']) < self.min_size:
+        try:
+            content = field_data['content']
+        except TypeError:
+            raise ValidationError, gettext_lazy("No file was submitted. Check the encoding type on the form.")
+        if self.min_size is not None and len(content) < self.min_size:
             raise ValidationError, self.min_error_message
-        if self.max_size is not None and len(field_data['content']) > self.max_size:
+        if self.max_size is not None and len(content) > self.max_size:
             raise ValidationError, self.max_error_message
 
 class MatchesRegularExpression:

django/db/backends/postgresql/introspection.py

         {'primary_key': boolean representing whether it's the primary key,
          'unique': boolean representing whether it's a unique index}
     """
-    # Get the table description because we only have the column indexes, and we
-    # need the column names.
-    desc = get_table_description(cursor, table_name)
-    # This query retrieves each index on the given table.
+    # This query retrieves each index on the given table, including the
+    # first associated field name
     cursor.execute("""
-        SELECT idx.indkey, idx.indisunique, idx.indisprimary
+        SELECT attr.attname, idx.indkey, idx.indisunique, idx.indisprimary
         FROM pg_catalog.pg_class c, pg_catalog.pg_class c2,
-            pg_catalog.pg_index idx
+            pg_catalog.pg_index idx, pg_catalog.pg_attribute attr
         WHERE c.oid = idx.indrelid
             AND idx.indexrelid = c2.oid
+            AND attr.attrelid = c.oid
+            AND attr.attnum = idx.indkey[0]
             AND c.relname = %s""", [table_name])
     indexes = {}
     for row in cursor.fetchall():
-        # row[0] (idx.indkey) is stored in the DB as an array. It comes out as
+        # row[1] (idx.indkey) is stored in the DB as an array. It comes out as
         # a string of space-separated integers. This designates the field
         # indexes (1-based) of the fields that have indexes on the table.
         # Here, we skip any indexes across multiple fields.
-        if ' ' in row[0]:
+        if ' ' in row[1]:
             continue
-        col_name = desc[int(row[0])-1][0]
-        indexes[col_name] = {'primary_key': row[2], 'unique': row[1]}
+        indexes[row[0]] = {'primary_key': row[3], 'unique': row[2]}
     return indexes
 
 # Maps type codes to Django Field types.

django/db/backends/postgresql_psycopg2/introspection.py

         {'primary_key': boolean representing whether it's the primary key,
          'unique': boolean representing whether it's a unique index}
     """
-    # Get the table description because we only have the column indexes, and we
-    # need the column names.
-    desc = get_table_description(cursor, table_name)
-    # This query retrieves each index on the given table.
+    # This query retrieves each index on the given table, including the
+    # first associated field name
     cursor.execute("""
-        SELECT idx.indkey, idx.indisunique, idx.indisprimary
+        SELECT attr.attname, idx.indkey, idx.indisunique, idx.indisprimary
         FROM pg_catalog.pg_class c, pg_catalog.pg_class c2,
-            pg_catalog.pg_index idx
+            pg_catalog.pg_index idx, pg_catalog.pg_attribute attr
         WHERE c.oid = idx.indrelid
             AND idx.indexrelid = c2.oid
+            AND attr.attrelid = c.oid
+            AND attr.attnum = idx.indkey[0]
             AND c.relname = %s""", [table_name])
     indexes = {}
     for row in cursor.fetchall():
-        # row[0] (idx.indkey) is stored in the DB as an array. It comes out as
+        # row[1] (idx.indkey) is stored in the DB as an array. It comes out as
         # a string of space-separated integers. This designates the field
         # indexes (1-based) of the fields that have indexes on the table.
         # Here, we skip any indexes across multiple fields.
-        if ' ' in row[0]:
+        if ' ' in row[1]:
             continue
-        col_name = desc[int(row[0])-1][0]
-        indexes[col_name] = {'primary_key': row[2], 'unique': row[1]}
+        indexes[row[0]] = {'primary_key': row[3], 'unique': row[2]}
     return indexes
 
 # Maps type codes to Django Field types.

django/db/backends/util.py

             return self.cursor.execute(sql, params)
         finally:
             stop = time()
+            # If params was a list, convert it to a tuple, because string
+            # formatting with '%' only works with tuples or dicts.
+            if not isinstance(params, (tuple, dict)):
+                params = tuple(params)
             self.db.queries.append({
                 'sql': sql % tuple(params),
                 'time': "%.3f" % (stop - start),

django/db/models/base.py

                 (backend.quote_name(self._meta.db_table), backend.quote_name(self._meta.pk.column)), [pk_val])
             # If it does already exist, do an UPDATE.
             if cursor.fetchone():
-                db_values = [f.get_db_prep_save(f.pre_save(getattr(self, f.attname), False)) for f in non_pks]
+                db_values = [f.get_db_prep_save(f.pre_save(self, False)) for f in non_pks]
                 cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
                     (backend.quote_name(self._meta.db_table),
                     ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]),
                 record_exists = False
         if not pk_set or not record_exists:
             field_names = [backend.quote_name(f.column) for f in self._meta.fields if not isinstance(f, AutoField)]
-            db_values = [f.get_db_prep_save(f.pre_save(getattr(self, f.attname), True)) for f in self._meta.fields if not isinstance(f, AutoField)]
+            db_values = [f.get_db_prep_save(f.pre_save(self, True)) for f in self._meta.fields if not isinstance(f, AutoField)]
             # If the PK has been manually set, respect that.
             if pk_set:
                 field_names += [f.column for f in self._meta.fields if isinstance(f, AutoField)]
-                db_values += [f.get_db_prep_save(f.pre_save(getattr(self, f.column), True)) for f in self._meta.fields if isinstance(f, AutoField)]
+                db_values += [f.get_db_prep_save(f.pre_save(self, True)) for f in self._meta.fields if isinstance(f, AutoField)]
             placeholders = ['%s'] * len(field_names)
             if self._meta.order_with_respect_to:
                 field_names.append(backend.quote_name('_order'))
             order_field = self._meta.order_with_respect_to