mirror of
https://github.com/django/django.git
synced 2025-06-06 20:19:13 +00:00
multi-auth: Merged to [2890]
git-svn-id: http://code.djangoproject.com/svn/django/branches/multi-auth@2891 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
4aeb7b0210
commit
b15b11f5b7
Binary file not shown.
@ -8,14 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: Django Czech translation\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-02-02 11:25+0100\n"
|
||||
"PO-Revision-Date: 2005-12-18 18:36+0100\n"
|
||||
"Last-Translator: Radek Švarz <tranlate@svarz.cz>\n"
|
||||
"PO-Revision-Date: 2006-05-03 12:00+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Czech\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
"X-Poedit-Country: CZECH REPUBLIC\n"
|
||||
|
||||
@ -79,7 +78,8 @@ msgstr "datum/čas byl zaslán"
|
||||
msgid "is public"
|
||||
msgstr "je veřejné"
|
||||
|
||||
#: contrib/comments/models/comments.py:26 contrib/admin/views/doc.py:256
|
||||
#: contrib/comments/models/comments.py:26
|
||||
#: contrib/admin/views/doc.py:256
|
||||
msgid "IP address"
|
||||
msgstr "IP adresa"
|
||||
|
||||
@ -88,12 +88,8 @@ msgid "is removed"
|
||||
msgstr "je odstraněno"
|
||||
|
||||
#: contrib/comments/models/comments.py:27
|
||||
msgid ""
|
||||
"Check this box if the comment is inappropriate. A \"This comment has been "
|
||||
"removed\" message will be displayed instead."
|
||||
msgstr ""
|
||||
"Zaškrtněte tento box, pokud komentář není vhodný. Místo něj bude zobrazena "
|
||||
"zpráva \"Tento komentář byl smazán\"."
|
||||
msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
|
||||
msgstr "Zaškrtněte tento box, pokud komentář není vhodný. Místo něj bude zobrazena zpráva \"Tento komentář byl smazán\"."
|
||||
|
||||
#: contrib/comments/models/comments.py:31
|
||||
msgid "Comment"
|
||||
@ -222,37 +218,29 @@ msgid "No voting for yourself"
|
||||
msgstr "Nelze hlasovat pro sebe"
|
||||
|
||||
#: contrib/comments/views/comments.py:25
|
||||
msgid ""
|
||||
"This rating is required because you've entered at least one other rating."
|
||||
msgstr ""
|
||||
"Toto hodnocení je povinné, protože jste zadal(a) alespoň jedno jiné "
|
||||
"hodnocení."
|
||||
msgid "This rating is required because you've entered at least one other rating."
|
||||
msgstr "Toto hodnocení je povinné, protože jste zadal(a) alespoň jedno jiné hodnocení."
|
||||
|
||||
#: contrib/comments/views/comments.py:109
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This comment was posted by a user who has posted fewer than %(count)s "
|
||||
"comment:\n"
|
||||
"This comment was posted by a user who has posted fewer than %(count)s comment:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
msgid_plural ""
|
||||
"This comment was posted by a user who has posted fewer than %(count)s "
|
||||
"comments:\n"
|
||||
"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
msgstr[0] ""
|
||||
"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %"
|
||||
"(count)s komentář:\n"
|
||||
"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %(count)s komentář:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
msgstr[1] ""
|
||||
"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %"
|
||||
"(count)s komentáře:\n"
|
||||
"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %(count)s komentáře:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
msgstr[2] ""
|
||||
"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %"
|
||||
"(count)s komentářů:\n"
|
||||
"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %(count)s komentářů:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
|
||||
@ -284,11 +272,8 @@ msgstr "Někdo falšoval formulář komentáře (bezpečnostní narušení)"
|
||||
|
||||
#: contrib/comments/views/comments.py:204
|
||||
#: contrib/comments/views/comments.py:289
|
||||
msgid ""
|
||||
"The comment form had an invalid 'target' parameter -- the object ID was "
|
||||
"invalid"
|
||||
msgstr ""
|
||||
"Formulář komentáře měl neplatný parametr 'target' -- ID objektu nebylo platné"
|
||||
msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
|
||||
msgstr "Formulář komentáře měl neplatný parametr 'target' -- ID objektu nebylo platné"
|
||||
|
||||
#: contrib/comments/views/comments.py:254
|
||||
#: contrib/comments/views/comments.py:318
|
||||
@ -307,9 +292,8 @@ msgid "Password:"
|
||||
msgstr "Heslo:"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:6
|
||||
#, fuzzy
|
||||
msgid "Forgotten your password?"
|
||||
msgstr "Změnit mé heslo"
|
||||
msgstr "Zapomenuté heslo?"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:8
|
||||
#: contrib/admin/templates/admin/object_history.html:3
|
||||
@ -332,40 +316,36 @@ msgid "Log out"
|
||||
msgstr "Odhlásit se"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:12
|
||||
#, fuzzy
|
||||
msgid "Ratings"
|
||||
msgstr "hodnocení #1"
|
||||
msgstr "Hodnocení"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:12
|
||||
#: contrib/comments/templates/comments/form.html:23
|
||||
msgid "Required"
|
||||
msgstr ""
|
||||
msgstr "Povinné"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:12
|
||||
#: contrib/comments/templates/comments/form.html:23
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
msgstr "Volitelné"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:23
|
||||
msgid "Post a photo"
|
||||
msgstr ""
|
||||
msgstr "Zařadit fotografii"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:27
|
||||
#: contrib/comments/templates/comments/freeform.html:5
|
||||
#, fuzzy
|
||||
msgid "Comment:"
|
||||
msgstr "Komentář"
|
||||
msgstr "Komentář:"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:32
|
||||
#: contrib/comments/templates/comments/freeform.html:9
|
||||
#, fuzzy
|
||||
msgid "Preview comment"
|
||||
msgstr "volný komentář"
|
||||
msgstr "Náhled komentáře"
|
||||
|
||||
#: contrib/comments/templates/comments/freeform.html:4
|
||||
#, fuzzy
|
||||
msgid "Your name:"
|
||||
msgstr "uživatelské jméno"
|
||||
msgstr "Vaše jméno:"
|
||||
|
||||
#: contrib/admin/filterspecs.py:40
|
||||
#, python-format
|
||||
@ -376,7 +356,8 @@ msgstr ""
|
||||
"<h3>%s:</h3>\n"
|
||||
"<ul>\n"
|
||||
|
||||
#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
|
||||
#: contrib/admin/filterspecs.py:70
|
||||
#: contrib/admin/filterspecs.py:88
|
||||
#: contrib/admin/filterspecs.py:143
|
||||
msgid "All"
|
||||
msgstr "Vše"
|
||||
@ -445,12 +426,11 @@ msgstr "log záznamy"
|
||||
msgid "All dates"
|
||||
msgstr "Všechna data"
|
||||
|
||||
#: contrib/admin/views/decorators.py:9 parts/auth/formfields.py:33
|
||||
#: contrib/admin/views/decorators.py:9
|
||||
#: parts/auth/formfields.py:33
|
||||
#: parts/auth/formfields.py:38
|
||||
msgid ""
|
||||
"Please enter a correct username and password. Note that both fields are case-"
|
||||
"sensitive."
|
||||
msgstr ""
|
||||
msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
|
||||
msgstr "Prosíme, vložte správné uživatelské jméno a heslo. Poznámka - u obou položek se rozlišuje velikost písmen."
|
||||
|
||||
#: contrib/admin/views/decorators.py:23
|
||||
#: contrib/admin/templates/admin/login.html:24
|
||||
@ -458,20 +438,12 @@ msgid "Log in"
|
||||
msgstr "Přihlášení"
|
||||
|
||||
#: contrib/admin/views/decorators.py:61
|
||||
msgid ""
|
||||
"Please log in again, because your session has expired. Don't worry: Your "
|
||||
"submission has been saved."
|
||||
msgstr ""
|
||||
"Prosíme, znovu se přihlašte, Vaše sezení vypršelo. Nemusíte se obávat, Vaše "
|
||||
"podání je uloženo."
|
||||
msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
|
||||
msgstr "Prosíme, znovu se přihlašte, Vaše sezení vypršelo. Nemusíte se obávat, Vaše podání je uloženo."
|
||||
|
||||
#: contrib/admin/views/decorators.py:68
|
||||
msgid ""
|
||||
"Looks like your browser isn't configured to accept cookies. Please enable "
|
||||
"cookies, reload this page, and try again."
|
||||
msgstr ""
|
||||
"Vypadá to, že Váš prohlížeč není nastaven, aby akceptoval cookies. Prosíme, "
|
||||
"zapněte cookies, obnovte tuto stránku a zkuste znovu."
|
||||
msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
|
||||
msgstr "Vypadá to, že Váš prohlížeč není nastaven, aby akceptoval cookies. Prosíme, zapněte cookies, obnovte tuto stránku a zkuste znovu."
|
||||
|
||||
#: contrib/admin/views/decorators.py:82
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
@ -480,8 +452,7 @@ msgstr "Uživatelská jména nemohou obsahovat znak '@'."
|
||||
#: contrib/admin/views/decorators.py:84
|
||||
#, python-format
|
||||
msgid "Your e-mail address is not your username. Try '%s' instead."
|
||||
msgstr ""
|
||||
"Vaše e-mailová adresa není Vaše uživatelské jméno. Zkuste místo toho '%s'."
|
||||
msgstr "Vaše e-mailová adresa není Vaše uživatelské jméno. Zkuste místo toho '%s'."
|
||||
|
||||
#: contrib/admin/views/main.py:52
|
||||
msgid "Site administration"
|
||||
@ -502,11 +473,13 @@ msgstr "Vyberte %s pro změnu"
|
||||
msgid "The %(name)s \"%(obj)s\" was added successfully."
|
||||
msgstr "Záznam %(name)s \"%(obj)s\" byl úspěšně přidán."
|
||||
|
||||
#: contrib/admin/views/main.py:415 contrib/admin/views/main.py:492
|
||||
#: contrib/admin/views/main.py:415
|
||||
#: contrib/admin/views/main.py:492
|
||||
msgid "You may edit it again below."
|
||||
msgstr "Můžete to opět upravit níže."
|
||||
|
||||
#: contrib/admin/views/main.py:423 contrib/admin/views/main.py:501
|
||||
#: contrib/admin/views/main.py:423
|
||||
#: contrib/admin/views/main.py:501
|
||||
#, python-format
|
||||
msgid "You may add another %s below."
|
||||
msgstr "Můžete přidat další %s níže."
|
||||
@ -521,7 +494,8 @@ msgstr "%s: přidat"
|
||||
msgid "Added %s."
|
||||
msgstr "Záznam %s byl přidán."
|
||||
|
||||
#: contrib/admin/views/main.py:457 contrib/admin/views/main.py:459
|
||||
#: contrib/admin/views/main.py:457
|
||||
#: contrib/admin/views/main.py:459
|
||||
#: contrib/admin/views/main.py:461
|
||||
msgid "and"
|
||||
msgstr "a"
|
||||
@ -547,10 +521,8 @@ msgstr "%(name)s \"%(obj)s\" byl úspěšně změněn."
|
||||
|
||||
#: contrib/admin/views/main.py:498
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
|
||||
msgstr ""
|
||||
"The %(name)s \"%(obj)s\" byl úspěšně přidán. Můžete to opět upravit níže."
|
||||
msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
|
||||
msgstr "The %(name)s \"%(obj)s\" byl úspěšně přidán. Můžete to opět upravit níže."
|
||||
|
||||
#: contrib/admin/views/main.py:536
|
||||
#, python-format
|
||||
@ -581,9 +553,12 @@ msgstr "Jste si jist(á)?"
|
||||
msgid "Change history: %s"
|
||||
msgstr "Historie změn: %s"
|
||||
|
||||
#: contrib/admin/views/doc.py:244 contrib/admin/views/doc.py:253
|
||||
#: contrib/admin/views/doc.py:255 contrib/admin/views/doc.py:261
|
||||
#: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:264
|
||||
#: contrib/admin/views/doc.py:244
|
||||
#: contrib/admin/views/doc.py:253
|
||||
#: contrib/admin/views/doc.py:255
|
||||
#: contrib/admin/views/doc.py:261
|
||||
#: contrib/admin/views/doc.py:262
|
||||
#: contrib/admin/views/doc.py:264
|
||||
msgid "Integer"
|
||||
msgstr "Celé číslo"
|
||||
|
||||
@ -612,7 +587,8 @@ msgstr "Datum (s časem)"
|
||||
msgid "E-mail address"
|
||||
msgstr "E-mailová adresa"
|
||||
|
||||
#: contrib/admin/views/doc.py:251 contrib/admin/views/doc.py:254
|
||||
#: contrib/admin/views/doc.py:251
|
||||
#: contrib/admin/views/doc.py:254
|
||||
msgid "File path"
|
||||
msgstr "Cesta k souboru"
|
||||
|
||||
@ -644,7 +620,8 @@ msgstr "Text"
|
||||
msgid "Time"
|
||||
msgstr "Čas"
|
||||
|
||||
#: contrib/admin/views/doc.py:267 contrib/flatpages/models/flatpages.py:6
|
||||
#: contrib/admin/views/doc.py:267
|
||||
#: contrib/flatpages/models/flatpages.py:6
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
@ -708,7 +685,8 @@ msgstr "Historie"
|
||||
msgid "Date/time"
|
||||
msgstr "Datum/čas"
|
||||
|
||||
#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
|
||||
#: contrib/admin/templates/admin/object_history.html:19
|
||||
#: models/auth.py:47
|
||||
msgid "User"
|
||||
msgstr "Uživatel"
|
||||
|
||||
@ -721,12 +699,8 @@ msgid "DATE_WITH_TIME_FULL"
|
||||
msgstr "j. N Y, H:i"
|
||||
|
||||
#: contrib/admin/templates/admin/object_history.html:36
|
||||
msgid ""
|
||||
"This object doesn't have a change history. It probably wasn't added via this "
|
||||
"admin site."
|
||||
msgstr ""
|
||||
"Tento objekt nemá historii změn. Pravděpodobně nebyl přidán přes "
|
||||
"administrátorské rozhraní."
|
||||
msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
|
||||
msgstr "Tento objekt nemá historii změn. Pravděpodobně nebyl přidán přes administrátorské rozhraní."
|
||||
|
||||
#: contrib/admin/templates/admin/base_site.html:4
|
||||
msgid "Django site admin"
|
||||
@ -749,12 +723,8 @@ msgid "Server Error <em>(500)</em>"
|
||||
msgstr "Chyba serveru <em>(500)</em>"
|
||||
|
||||
#: contrib/admin/templates/admin/500.html:10
|
||||
msgid ""
|
||||
"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 ""
|
||||
"Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a "
|
||||
"měla by být brzy odstraněna. Děkujeme za trpělivost."
|
||||
msgid "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 "Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a měla by být brzy odstraněna. Děkujeme za trpělivost."
|
||||
|
||||
#: contrib/admin/templates/admin/404.html:4
|
||||
#: contrib/admin/templates/admin/404.html:8
|
||||
@ -805,22 +775,13 @@ msgstr "Vítejte,"
|
||||
|
||||
#: contrib/admin/templates/admin/delete_confirmation.html:6
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Deleting the %(object_name)s '%(object)s' would result in deleting related "
|
||||
"objects, but your account doesn't have permission to delete the following "
|
||||
"types of objects:"
|
||||
msgstr ""
|
||||
"Mazání %(object_name)s '%(object)s' by vyústilo ve vymazání souvisejících "
|
||||
"objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:"
|
||||
msgid "Deleting the %(object_name)s '%(object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
|
||||
msgstr "Mazání %(object_name)s '%(object)s' by vyústilo ve vymazání souvisejících objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:"
|
||||
|
||||
#: contrib/admin/templates/admin/delete_confirmation.html:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
|
||||
"the following related items will be deleted:"
|
||||
msgstr ""
|
||||
"Jste si jist(á), že chcete smazat %(object_name)s \"%(object)s\"? Všechny "
|
||||
"následující související položky budou smazány:"
|
||||
msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
|
||||
msgstr "Jste si jist(á), že chcete smazat %(object_name)s \"%(object)s\"? Všechny následující související položky budou smazány:"
|
||||
|
||||
#: contrib/admin/templates/admin/delete_confirmation.html:17
|
||||
msgid "Yes, I'm sure"
|
||||
@ -898,12 +859,8 @@ msgid "Password reset"
|
||||
msgstr "Obnovení hesla"
|
||||
|
||||
#: contrib/admin/templates/registration/password_reset_form.html:12
|
||||
msgid ""
|
||||
"Forgotten your password? Enter your e-mail address below, and we'll reset "
|
||||
"your password and e-mail the new one to you."
|
||||
msgstr ""
|
||||
"Zapomněl(a) jste heslo? Vložte níže Vaši e-mailovou adresu a my Vaše heslo "
|
||||
"obnovíme a zašleme Vám e-mailem nové."
|
||||
msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
|
||||
msgstr "Zapomněl(a) jste heslo? Vložte níže Vaši e-mailovou adresu a my Vaše heslo obnovíme a zašleme Vám e-mailem nové."
|
||||
|
||||
#: contrib/admin/templates/registration/password_reset_form.html:16
|
||||
msgid "E-mail address:"
|
||||
@ -927,20 +884,12 @@ msgid "Password reset successful"
|
||||
msgstr "Obnovení hesla bylo úspěšné"
|
||||
|
||||
#: 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 ""
|
||||
"Poslali jsme Vám e-mailem nové heslo na adresu, kterou jste zadal(a). Měl(a) "
|
||||
"byste ji dostat během okamžiku."
|
||||
msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
|
||||
msgstr "Poslali jsme Vám e-mailem nové heslo na adresu, kterou jste zadal(a). Měl(a) byste ji dostat během okamžiku."
|
||||
|
||||
#: contrib/admin/templates/registration/password_change_form.html:12
|
||||
msgid ""
|
||||
"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 ""
|
||||
"Vložte svoje staré heslo a poté vložte dvakrát nové heslo. Tak můžeme "
|
||||
"ověřit, že jste ho napsal(a) správně."
|
||||
msgid "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 "Vložte svoje staré heslo a poté vložte dvakrát nové heslo. Tak můžeme ověřit, že jste ho napsal(a) správně."
|
||||
|
||||
#: contrib/admin/templates/registration/password_change_form.html:17
|
||||
msgid "Old password:"
|
||||
@ -1008,13 +957,10 @@ msgid ""
|
||||
"your computer is \"internal\").</p>\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"<p class=\"help\">Pro nainstalování bookmarkletů, přetáhněte odkaz na Vaše "
|
||||
"záložky (oblíbené),\n"
|
||||
"nebo klikněte pravým tlačítkem na odkaz a přidejte ho k Vašim záložkám "
|
||||
"(oblíbeným). Nyní můžete\n"
|
||||
"<p class=\"help\">Pro nainstalování bookmarkletů, přetáhněte odkaz na Vaše záložky (oblíbené),\n"
|
||||
"nebo klikněte pravým tlačítkem na odkaz a přidejte ho k Vašim záložkám (oblíbeným). Nyní můžete\n"
|
||||
"zvolit bookmarklet z libovolné stránky. Poznámka: Některé tyto\n"
|
||||
"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je "
|
||||
"nastaven jako\n"
|
||||
"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je nastaven jako\n"
|
||||
"\"interní\" (promluvte si s Vaším administrátorem, jestli si nejste jisti,\n"
|
||||
"zda je Váš počítač \"interní\").</p>\n"
|
||||
|
||||
@ -1023,24 +969,16 @@ msgid "Documentation for this page"
|
||||
msgstr "Dokumentace pro tuto stránku"
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:20
|
||||
msgid ""
|
||||
"Jumps you from any page to the documentation for the view that generates "
|
||||
"that page."
|
||||
msgstr ""
|
||||
"Z libovolné stránky otevře dokumentaci pro pohled, který vygeneroval tuto "
|
||||
"stránku."
|
||||
msgid "Jumps you from any page to the documentation for the view that generates that page."
|
||||
msgstr "Z libovolné stránky otevře dokumentaci pro pohled, který vygeneroval tuto stránku."
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:22
|
||||
msgid "Show object ID"
|
||||
msgstr "Ukázat id objektu"
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:23
|
||||
msgid ""
|
||||
"Shows the content-type and unique ID for pages that represent a single "
|
||||
"object."
|
||||
msgstr ""
|
||||
"Ukáže content-type a unikátní ID pro stránky, které reprezentují jeden "
|
||||
"objekt."
|
||||
msgid "Shows the content-type and unique ID for pages that represent a single object."
|
||||
msgstr "Ukáže content-type a unikátní ID pro stránky, které reprezentují jeden objekt."
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:25
|
||||
msgid "Edit this object (current window)"
|
||||
@ -1079,23 +1017,16 @@ msgid "redirect from"
|
||||
msgstr "přesměrovat z"
|
||||
|
||||
#: contrib/redirects/models/redirects.py:8
|
||||
msgid ""
|
||||
"This should be an absolute path, excluding the domain name. Example: '/"
|
||||
"events/search/'."
|
||||
msgstr ""
|
||||
"Toto by měla být absolutní cesta, bez domény. Např. '/udalosti/hledat/'."
|
||||
msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
|
||||
msgstr "Toto by měla být absolutní cesta, bez domény. Např. '/udalosti/hledat/'."
|
||||
|
||||
#: contrib/redirects/models/redirects.py:9
|
||||
msgid "redirect to"
|
||||
msgstr "přesměrovat na"
|
||||
|
||||
#: contrib/redirects/models/redirects.py:10
|
||||
msgid ""
|
||||
"This can be either an absolute path (as above) or a full URL starting with "
|
||||
"'http://'."
|
||||
msgstr ""
|
||||
"Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na "
|
||||
"'http://'."
|
||||
msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
|
||||
msgstr "Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na 'http://'."
|
||||
|
||||
#: contrib/redirects/models/redirects.py:12
|
||||
msgid "redirect"
|
||||
@ -1106,10 +1037,8 @@ msgid "redirects"
|
||||
msgstr "přesměrování"
|
||||
|
||||
#: contrib/flatpages/models/flatpages.py:7
|
||||
msgid ""
|
||||
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
|
||||
msgstr ""
|
||||
"Příklad: '/o/kontakt/'. Ujistěte se, že máte počáteční a konečná lomítka."
|
||||
msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
|
||||
msgstr "Příklad: '/o/kontakt/'. Ujistěte se, že máte počáteční a konečná lomítka."
|
||||
|
||||
#: contrib/flatpages/models/flatpages.py:8
|
||||
msgid "title"
|
||||
@ -1128,12 +1057,8 @@ msgid "template name"
|
||||
msgstr "jméno šablony"
|
||||
|
||||
#: contrib/flatpages/models/flatpages.py:12
|
||||
msgid ""
|
||||
"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
|
||||
"use 'flatpages/default'."
|
||||
msgstr ""
|
||||
"Například: 'flatfiles/kontaktni_stranka'. Pokud toto není zadáno, systém "
|
||||
"použije 'flatfiles/default'."
|
||||
msgid "Example: 'flatpages/contact_page'. If this isn't provided, the system will use 'flatpages/default'."
|
||||
msgstr "Například: 'flatfiles/kontaktni_stranka'. Pokud toto není zadáno, systém použije 'flatfiles/default'."
|
||||
|
||||
#: contrib/flatpages/models/flatpages.py:13
|
||||
msgid "registration required"
|
||||
@ -1141,9 +1066,7 @@ msgstr "nutná registrace"
|
||||
|
||||
#: contrib/flatpages/models/flatpages.py:13
|
||||
msgid "If this is checked, only logged-in users will be able to view the page."
|
||||
msgstr ""
|
||||
"Pokud je zaškrtnuto, pouze přihlášení uživatelé budou moci prohlížet tuto "
|
||||
"stránku."
|
||||
msgstr "Pokud je zaškrtnuto, pouze přihlášení uživatelé budou moci prohlížet tuto stránku."
|
||||
|
||||
#: contrib/flatpages/models/flatpages.py:17
|
||||
msgid "flat page"
|
||||
@ -1201,23 +1124,28 @@ msgstr "Leden"
|
||||
msgid "February"
|
||||
msgstr "Únor"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "March"
|
||||
msgstr "Březen"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "April"
|
||||
msgstr "Duben"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "May"
|
||||
msgstr "Květen"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "June"
|
||||
msgstr "Červen"
|
||||
|
||||
#: utils/dates.py:15 utils/dates.py:27
|
||||
#: utils/dates.py:15
|
||||
#: utils/dates.py:27
|
||||
msgid "July"
|
||||
msgstr "Červenec"
|
||||
|
||||
@ -1324,7 +1252,10 @@ msgstr "weby"
|
||||
msgid "label"
|
||||
msgstr "nadpis"
|
||||
|
||||
#: models/core.py:29 models/core.py:40 models/auth.py:6 models/auth.py:19
|
||||
#: models/core.py:29
|
||||
#: models/core.py:40
|
||||
#: models/auth.py:6
|
||||
#: models/auth.py:19
|
||||
msgid "name"
|
||||
msgstr "jméno"
|
||||
|
||||
@ -1376,7 +1307,8 @@ msgstr "codename"
|
||||
msgid "Permission"
|
||||
msgstr "Oprávnění"
|
||||
|
||||
#: models/auth.py:11 models/auth.py:58
|
||||
#: models/auth.py:11
|
||||
#: models/auth.py:58
|
||||
msgid "Permissions"
|
||||
msgstr "Oprávnění"
|
||||
|
||||
@ -1384,7 +1316,8 @@ msgstr "Oprávnění"
|
||||
msgid "Group"
|
||||
msgstr "Skupina"
|
||||
|
||||
#: models/auth.py:23 models/auth.py:60
|
||||
#: models/auth.py:23
|
||||
#: models/auth.py:60
|
||||
msgid "Groups"
|
||||
msgstr "Skupiny"
|
||||
|
||||
@ -1437,12 +1370,8 @@ msgid "date joined"
|
||||
msgstr "datum zaregistrování"
|
||||
|
||||
#: models/auth.py:44
|
||||
msgid ""
|
||||
"In addition to the permissions manually assigned, this user will also get "
|
||||
"all permissions granted to each group he/she is in."
|
||||
msgstr ""
|
||||
"Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro "
|
||||
"každou skupinu, ve které je."
|
||||
msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
|
||||
msgstr "Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro každou skupinu, ve které je."
|
||||
|
||||
#: models/auth.py:48
|
||||
msgid "Users"
|
||||
@ -1506,11 +1435,11 @@ msgstr "Italsky"
|
||||
|
||||
#: conf/global_settings.py:48
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
msgstr "Japonština"
|
||||
|
||||
#: conf/global_settings.py:49
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
msgstr "Holandština"
|
||||
|
||||
#: conf/global_settings.py:50
|
||||
msgid "Norwegian"
|
||||
@ -1546,9 +1475,11 @@ msgstr "Jednoduchá čínština"
|
||||
|
||||
#: conf/global_settings.py:58
|
||||
msgid "Traditional Chinese"
|
||||
msgstr ""
|
||||
msgstr "Tradiční čínština"
|
||||
|
||||
#: core/formfields.py:59 core/meta/fields.py:285 core/meta/fields.py:488
|
||||
#: core/formfields.py:59
|
||||
#: core/meta/fields.py:285
|
||||
#: core/meta/fields.py:488
|
||||
#: core/meta/fields.py:499
|
||||
msgid "This field is required."
|
||||
msgstr "Toto pole je povinné."
|
||||
@ -1565,7 +1496,9 @@ msgstr[2] "Ujistěte se, že Váš text má méně než %s znaků."
|
||||
msgid "Line breaks are not allowed here."
|
||||
msgstr "Zalomení řádky zde nenjsou povolená."
|
||||
|
||||
#: core/formfields.py:438 core/formfields.py:509 core/formfields.py:547
|
||||
#: core/formfields.py:438
|
||||
#: core/formfields.py:509
|
||||
#: core/formfields.py:547
|
||||
#, python-format
|
||||
msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
|
||||
msgstr "Vyberte platnou volbu. '%(data)s' není mezi %(choices)s."
|
||||
@ -1592,8 +1525,7 @@ msgstr "Tato hodnota musí obsahovat pouze znaky, čísla nebo podtržítka."
|
||||
|
||||
#: core/validators.py:66
|
||||
msgid "This value must contain only letters, numbers, underscores and slashes."
|
||||
msgstr ""
|
||||
"Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo lomítka."
|
||||
msgstr "Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo lomítka."
|
||||
|
||||
#: core/validators.py:74
|
||||
msgid "Uppercase letters are not allowed here."
|
||||
@ -1652,12 +1584,8 @@ msgid "Enter a valid e-mail address."
|
||||
msgstr "Vložte platnou e-mailovou adresu."
|
||||
|
||||
#: core/validators.py:150
|
||||
msgid ""
|
||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||
"corrupted image."
|
||||
msgstr ""
|
||||
"Nahrajte na server platný obrázek. Soubor, který jste nahrál(a) nebyl "
|
||||
"obrázek, nebo byl porušen."
|
||||
msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
|
||||
msgstr "Nahrajte na server platný obrázek. Soubor, který jste nahrál(a) nebyl obrázek, nebo byl porušen."
|
||||
|
||||
#: core/validators.py:157
|
||||
#, python-format
|
||||
@ -1697,7 +1625,8 @@ msgstr "Špatně formované XML: %s"
|
||||
msgid "Invalid URL: %s"
|
||||
msgstr "Neplatné URL: %s"
|
||||
|
||||
#: core/validators.py:208 core/validators.py:210
|
||||
#: core/validators.py:208
|
||||
#: core/validators.py:210
|
||||
#, python-format
|
||||
msgid "The URL %s is a broken link."
|
||||
msgstr "Odkaz na URL %s je rozbitý."
|
||||
@ -1723,7 +1652,8 @@ msgstr "Toto pole se musí shodovat s polem '%s'."
|
||||
msgid "Please enter something for at least one field."
|
||||
msgstr "Prosíme, vložte něco alespoň pro jedno pole."
|
||||
|
||||
#: core/validators.py:266 core/validators.py:277
|
||||
#: core/validators.py:266
|
||||
#: core/validators.py:277
|
||||
msgid "Please enter both fields or leave them both empty."
|
||||
msgstr "Prosíme, vložte obě pole, nebo je nechte obě prázdná."
|
||||
|
||||
@ -1753,8 +1683,7 @@ msgstr "Prosíme, vložte platné číslo."
|
||||
#: core/validators.py:351
|
||||
#, python-format
|
||||
msgid "Please enter a valid decimal number with at most %s total digit."
|
||||
msgid_plural ""
|
||||
"Please enter a valid decimal number with at most %s total digits."
|
||||
msgid_plural "Please enter a valid decimal number with at most %s total digits."
|
||||
msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou celkem."
|
||||
msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
|
||||
msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
|
||||
@ -1762,16 +1691,10 @@ msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
|
||||
#: core/validators.py:354
|
||||
#, python-format
|
||||
msgid "Please enter a valid decimal number with at most %s decimal place."
|
||||
msgid_plural ""
|
||||
"Please enter a valid decimal number with at most %s decimal places."
|
||||
msgstr[0] ""
|
||||
"Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem."
|
||||
msgstr[1] ""
|
||||
"Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou "
|
||||
"celkem."
|
||||
msgstr[2] ""
|
||||
"Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou "
|
||||
"celkem."
|
||||
msgid_plural "Please enter a valid decimal number with at most %s decimal places."
|
||||
msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem."
|
||||
msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem."
|
||||
msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem."
|
||||
|
||||
#: core/validators.py:364
|
||||
#, python-format
|
||||
@ -1798,63 +1721,38 @@ msgstr "Nemohl jsem získat nic z %s."
|
||||
|
||||
#: core/validators.py:431
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
|
||||
msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
|
||||
msgstr "URL %(url)s vrátilo neplatnou hlavičku Content-Type '%(contenttype)s'."
|
||||
|
||||
#: core/validators.py:464
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
|
||||
"\"%(start)s\".)"
|
||||
msgstr ""
|
||||
"Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s "
|
||||
"\"%(start)s\".)"
|
||||
msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
|
||||
msgstr "Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s \"%(start)s\".)"
|
||||
|
||||
#: core/validators.py:468
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Some text starting on line %(line)s is not allowed in that context. (Line "
|
||||
"starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
"Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. "
|
||||
"(Řádka začíná s \"%(start)s\".)"
|
||||
msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
|
||||
msgstr "Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. (Řádka začíná s \"%(start)s\".)"
|
||||
|
||||
#: core/validators.py:473
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
|
||||
"(start)s\".)"
|
||||
msgstr ""
|
||||
"\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%"
|
||||
"(start)s\".)"
|
||||
msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
|
||||
msgstr "\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%(start)s\".)"
|
||||
|
||||
#: core/validators.py:478
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
|
||||
"(start)s\".)"
|
||||
msgstr ""
|
||||
"\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%"
|
||||
"(start)s\".)"
|
||||
msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
|
||||
msgstr "\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%(start)s\".)"
|
||||
|
||||
#: core/validators.py:482
|
||||
#, python-format
|
||||
msgid ""
|
||||
"A tag on line %(line)s is missing one or more required attributes. (Line "
|
||||
"starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
"Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. "
|
||||
"(Řádka začíná s \"%(start)s\".)"
|
||||
msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
|
||||
msgstr "Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. (Řádka začíná s \"%(start)s\".)"
|
||||
|
||||
#: core/validators.py:487
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
|
||||
"starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
"Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s "
|
||||
"\"%(start)s\".)"
|
||||
msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
|
||||
msgstr "Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s \"%(start)s\".)"
|
||||
|
||||
#: core/meta/__init__.py:1944
|
||||
#, python-format
|
||||
@ -1876,11 +1774,8 @@ msgid " Separate multiple IDs with commas."
|
||||
msgstr "Oddělte více identifikátorů čárkami."
|
||||
|
||||
#: core/meta/fields.py:132
|
||||
msgid ""
|
||||
" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
"Podržte \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné "
|
||||
"položky."
|
||||
msgid " Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr "Podržte \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné položky."
|
||||
|
||||
#: core/meta/fields.py:508
|
||||
msgid "Enter a valid filename."
|
||||
@ -1889,27 +1784,21 @@ msgstr "Vložte platný název souboru."
|
||||
#: core/meta/fields.py:782
|
||||
#, python-format
|
||||
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
|
||||
msgid_plural ""
|
||||
"Please enter valid %(self)s IDs. The values %(value)r are invalid."
|
||||
msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
|
||||
msgstr[0] "Prosíme, vložte platná %(self)s ID. Hodnota %(value)r není platná."
|
||||
msgstr[1] ""
|
||||
"Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné."
|
||||
msgstr[2] ""
|
||||
"Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné."
|
||||
msgstr[1] "Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné."
|
||||
msgstr[2] "Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné."
|
||||
|
||||
#: core/template/defaultfilters.py:379
|
||||
msgid "yes,no,maybe"
|
||||
msgstr "ano, ne, možná"
|
||||
|
||||
#: parts/auth/formfields.py:27
|
||||
msgid ""
|
||||
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
|
||||
"required for logging in."
|
||||
msgstr ""
|
||||
msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
|
||||
msgstr "Váš prohlížeč pravděpodobně nemá zapnuté cookies. Cookies jsou potřeba pro zalogování."
|
||||
|
||||
#~ msgid "Error in Template"
|
||||
#~ msgstr "Chyba v šabloně"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "In template %(name)s, error at line %(line)s:\n"
|
||||
@ -1920,3 +1809,4 @@ msgstr ""
|
||||
#, fuzzy
|
||||
#~ msgid "count"
|
||||
#~ msgstr "počet"
|
||||
|
||||
|
Binary file not shown.
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: Django JavaScript Czech translation\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2005-12-17 22:26+0100\n"
|
||||
"PO-Revision-Date: 2005-12-21 14:03+0100\n"
|
||||
"Last-Translator: Radek Švarz <tranlate@svarz.cz>\n"
|
||||
"PO-Revision-Date: 2006-05-03 12:04+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Czech\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
@ -56,7 +56,7 @@ msgstr "Leden Únor Březen Duben Květen Červen Červenec Srpen Září Říje
|
||||
#: contrib/admin/media/js/dateparse.js:27
|
||||
#, fuzzy
|
||||
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
|
||||
msgstr "Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota Neděle"
|
||||
msgstr "Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota"
|
||||
|
||||
#: contrib/admin/media/js/calendar.js:25
|
||||
#, fuzzy
|
||||
|
Binary file not shown.
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: django\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-02-02 11:25+0100\n"
|
||||
"PO-Revision-Date: 2005-10-18 12:27+0200\n"
|
||||
"Last-Translator: Mikaël Barbero <mikael.barbero nospam at nospam free.fr>\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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||||
@ -127,7 +127,7 @@ msgstr ""
|
||||
#: contrib/comments/models/comments.py:163
|
||||
#, fuzzy
|
||||
msgid "person's name"
|
||||
msgstr "prénom"
|
||||
msgstr "nom"
|
||||
|
||||
#: contrib/comments/models/comments.py:166
|
||||
#, fuzzy
|
||||
@ -319,7 +319,7 @@ msgstr "Mot de passe"
|
||||
#: contrib/comments/templates/comments/form.html:6
|
||||
#, fuzzy
|
||||
msgid "Forgotten your password?"
|
||||
msgstr "Modifier mon mot de passe"
|
||||
msgstr "Mot de passe oublié?"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:8
|
||||
#: contrib/admin/templates/admin/object_history.html:3
|
||||
@ -339,7 +339,7 @@ msgstr "Modifier mon mot de passe"
|
||||
#: contrib/admin/templates/admin_doc/index.html:4
|
||||
#: contrib/admin/templates/admin_doc/model_index.html:5
|
||||
msgid "Log out"
|
||||
msgstr "Déconnection"
|
||||
msgstr "Déconnexion"
|
||||
|
||||
#: contrib/comments/templates/comments/form.html:12
|
||||
#, fuzzy
|
||||
@ -370,7 +370,7 @@ msgstr "Commentaire"
|
||||
#: contrib/comments/templates/comments/freeform.html:9
|
||||
#, fuzzy
|
||||
msgid "Preview comment"
|
||||
msgstr "Commentaire libre"
|
||||
msgstr "Prévisualisation du commentaire"
|
||||
|
||||
#: contrib/comments/templates/comments/freeform.html:4
|
||||
#, fuzzy
|
||||
@ -463,7 +463,7 @@ msgid ""
|
||||
"Please enter a correct username and password. Note that both fields are case-"
|
||||
"sensitive."
|
||||
msgstr ""
|
||||
"Saisissez s'il vous plaut un nom d'utilisateur et un mot de passe valide. "
|
||||
"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)."
|
||||
|
||||
@ -656,7 +656,7 @@ msgstr "Num
|
||||
|
||||
#: contrib/admin/views/doc.py:263
|
||||
msgid "String (up to 50)"
|
||||
msgstr "Chaîne de caractère (jusqu'à 50)"
|
||||
msgstr "Chaîne de caractères (jusqu'à 50)"
|
||||
|
||||
#: contrib/admin/views/doc.py:265
|
||||
msgid "Text"
|
||||
@ -1063,7 +1063,7 @@ msgstr ""
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:25
|
||||
msgid "Edit this object (current window)"
|
||||
msgstr "Editer cette objet (fenêtre 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."
|
||||
@ -1071,7 +1071,7 @@ msgstr "Renvoie
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:28
|
||||
msgid "Edit this object (new window)"
|
||||
msgstr "Editer cette objet (nouvelle fenêtre)"
|
||||
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."
|
||||
@ -1437,7 +1437,7 @@ msgstr "Utilisez '[algo]$[salt]$[hexdigest]'"
|
||||
|
||||
#: models/auth.py:38
|
||||
msgid "staff status"
|
||||
msgstr "statut staff"
|
||||
msgstr "statut équipe"
|
||||
|
||||
#: models/auth.py:38
|
||||
msgid "Designates whether the user can log into this admin site."
|
||||
@ -1453,7 +1453,7 @@ msgstr "statut super-utilisateur"
|
||||
|
||||
#: models/auth.py:41
|
||||
msgid "last login"
|
||||
msgstr "dernière connection"
|
||||
msgstr "dernière connexion"
|
||||
|
||||
#: models/auth.py:42
|
||||
msgid "date joined"
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -6,28 +6,28 @@
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2005-12-27 23:26+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Project-Id-Version: Django 1.0\n"
|
||||
"Report-Msgid-Bugs-To: Django-users Japan <django-ja@googlegroups.com>\n"
|
||||
"POT-Creation-Date: 2006-05-02 23:06+0900\n"
|
||||
"PO-Revision-Date: 2006-05-08 13:39+0900\n"
|
||||
"Last-Translator: makoto tsuyuki <mtsuyuki@gmail.com>\n"
|
||||
"Language-Team: Japanese <django-ja@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: contrib/admin/media/js/calendar.js:24
|
||||
#: contrib/admin/media/js/dateparse.js:26
|
||||
#: contrib/admin/media/js/dateparse.js:32
|
||||
msgid ""
|
||||
"January February March April May June July August September October November "
|
||||
"December"
|
||||
msgstr "一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月"
|
||||
msgstr "1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月"
|
||||
|
||||
#: contrib/admin/media/js/calendar.js:25
|
||||
msgid "S M T W T F S"
|
||||
msgstr "日 月 火 水 木 金 土"
|
||||
|
||||
#: contrib/admin/media/js/dateparse.js:27
|
||||
#: contrib/admin/media/js/dateparse.js:33
|
||||
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
|
||||
msgstr "日曜 月曜 火曜 水曜 木曜 金曜 土曜"
|
||||
|
||||
@ -80,11 +80,11 @@ msgstr "夜中"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
|
||||
msgid "6 a.m."
|
||||
msgstr "朝6時"
|
||||
msgstr "午前 6 時"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
|
||||
msgid "Noon"
|
||||
msgstr "昼"
|
||||
msgstr "正午"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
|
||||
@ -107,3 +107,4 @@ msgstr "昨日"
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
|
||||
msgid "Tomorrow"
|
||||
msgstr "明日"
|
||||
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
django/conf/locale/nl/LC_MESSAGES/djangojs.mo
Normal file
BIN
django/conf/locale/nl/LC_MESSAGES/djangojs.mo
Normal file
Binary file not shown.
110
django/conf/locale/nl/LC_MESSAGES/djangojs.po
Normal file
110
django/conf/locale/nl/LC_MESSAGES/djangojs.po
Normal file
@ -0,0 +1,110 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Rudolph Froger <rfroger@estrate.nl>, 2006.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-05-02 16:52+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: contrib/admin/media/js/calendar.js:24
|
||||
#: contrib/admin/media/js/dateparse.js:32
|
||||
msgid ""
|
||||
"January February March April May June July August September October November "
|
||||
"December"
|
||||
msgstr ""
|
||||
"januari februari maart april mei juni juli augustus september oktober "
|
||||
"november december"
|
||||
|
||||
#: contrib/admin/media/js/calendar.js:25
|
||||
msgid "S M T W T F S"
|
||||
msgstr "Z M D W D V Z"
|
||||
|
||||
#: contrib/admin/media/js/dateparse.js:33
|
||||
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
|
||||
msgstr "Zondag Maandag Dinsdag Woensdag Donderdag Vrijdag Zaterdag"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:33
|
||||
#, perl-format
|
||||
msgid "Available %s"
|
||||
msgstr "Beschikbaar"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:41
|
||||
msgid "Choose all"
|
||||
msgstr "Kies allemaal"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:46
|
||||
msgid "Add"
|
||||
msgstr "Toevoegen"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:48
|
||||
msgid "Remove"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:53
|
||||
#, perl-format
|
||||
msgid "Chosen %s"
|
||||
msgstr "Gekozen %s"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:54
|
||||
msgid "Select your choice(s) and click "
|
||||
msgstr "Selecteer uw keuze(s) en klik "
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:59
|
||||
msgid "Clear all"
|
||||
msgstr "Allemaal verwijderen"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
|
||||
msgid "Now"
|
||||
msgstr "Nu"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
|
||||
msgid "Clock"
|
||||
msgstr "Klok"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
|
||||
msgid "Choose a time"
|
||||
msgstr "Kies een tijd"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
|
||||
msgid "Midnight"
|
||||
msgstr "Middernacht"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
|
||||
msgid "6 a.m."
|
||||
msgstr "6 uur"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
|
||||
msgid "Noon"
|
||||
msgstr "12 uur"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
|
||||
msgid "Today"
|
||||
msgstr "Vandaag"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
|
||||
msgid "Calendar"
|
||||
msgstr "Kalender"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
|
||||
msgid "Yesterday"
|
||||
msgstr "Gisteren"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
|
||||
msgid "Tomorrow"
|
||||
msgstr "Morgen"
|
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
# Espen Grindhaug <espen.grindhaug@mail.com>, 2006.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@ -9,8 +9,8 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2005-12-09 11:51+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Last-Translator: Espen Grindhaug <espen.grindhaug@gmail.com>\n"
|
||||
"Language-Team: no\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -18,48 +18,48 @@ msgstr ""
|
||||
#: contrib/admin/media/js/SelectFilter2.js:33
|
||||
#, perl-format
|
||||
msgid "Available %s"
|
||||
msgstr ""
|
||||
msgstr "%s er tilgjengelige"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:41
|
||||
#, fuzzy
|
||||
msgid "Choose all"
|
||||
msgstr "Velg et klokkeslett"
|
||||
msgstr "Velg alle"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:46
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
msgstr "Ny"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:48
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
msgstr "Slett"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:53
|
||||
#, perl-format
|
||||
msgid "Chosen %s"
|
||||
msgstr ""
|
||||
msgstr "%s er valgt"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:54
|
||||
msgid "Select your choice(s) and click "
|
||||
msgstr ""
|
||||
msgstr "Velg ditt svaralternativ(er) og klikk"
|
||||
|
||||
#: contrib/admin/media/js/SelectFilter2.js:59
|
||||
msgid "Clear all"
|
||||
msgstr ""
|
||||
msgstr "Tøm"
|
||||
|
||||
#: contrib/admin/media/js/dateparse.js:26
|
||||
#: contrib/admin/media/js/calendar.js:24
|
||||
msgid ""
|
||||
"January February March April May June July August September October November "
|
||||
"December"
|
||||
msgstr ""
|
||||
msgstr "Januar Februar Mars April Mai Juni Juli August September Oktober November Desember"
|
||||
|
||||
#: contrib/admin/media/js/dateparse.js:27
|
||||
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
|
||||
msgstr ""
|
||||
msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag"
|
||||
|
||||
#: contrib/admin/media/js/calendar.js:25
|
||||
msgid "S M T W T F S"
|
||||
msgstr ""
|
||||
msgstr "S M T O T F L"
|
||||
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
|
||||
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* PAGE STRUCTURE */
|
||||
#container { position:relative; width:100%; min-width:760px; }
|
||||
#container { position:relative; width:100%; min-width:760px; padding:0; }
|
||||
#content { margin:10px 15px; }
|
||||
#header { width:100%; }
|
||||
#content-main { float:left; width:100%; }
|
||||
|
0
django/contrib/csrf/__init__.py
Normal file
0
django/contrib/csrf/__init__.py
Normal file
84
django/contrib/csrf/middleware.py
Normal file
84
django/contrib/csrf/middleware.py
Normal file
@ -0,0 +1,84 @@
|
||||
"""
|
||||
Cross Site Request Forgery Middleware.
|
||||
|
||||
This module provides a middleware that implements protection
|
||||
against request forgeries from other sites.
|
||||
|
||||
"""
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponseForbidden
|
||||
import md5
|
||||
import re
|
||||
|
||||
_ERROR_MSG = "<h1>403 Forbidden</h1><p>Cross Site Request Forgery detected. Request aborted.</p>"
|
||||
|
||||
_POST_FORM_RE = \
|
||||
re.compile(r'(<form\W[^>]*\bmethod=(\'|"|)POST(\'|"|)\b[^>]*>)', re.IGNORECASE)
|
||||
|
||||
_HTML_TYPES = ('text/html', 'application/xhtml+xml')
|
||||
|
||||
def _make_token(session_id):
|
||||
return md5.new(settings.SECRET_KEY + session_id).hexdigest()
|
||||
|
||||
class CsrfMiddleware(object):
|
||||
"""Django middleware that adds protection against Cross Site
|
||||
Request Forgeries by adding hidden form fields to POST forms and
|
||||
checking requests for the correct value.
|
||||
|
||||
In the list of middlewares, SessionMiddleware is required, and must come
|
||||
after this middleware. CsrfMiddleWare must come after compression
|
||||
middleware.
|
||||
|
||||
If a session ID cookie is present, it is hashed with the SECRET_KEY
|
||||
setting to create an authentication token. This token is added to all
|
||||
outgoing POST forms and is expected on all incoming POST requests that
|
||||
have a session ID cookie.
|
||||
|
||||
If you are setting cookies directly, instead of using Django's session
|
||||
framework, this middleware will not work.
|
||||
"""
|
||||
|
||||
def process_request(self, request):
|
||||
if request.POST:
|
||||
try:
|
||||
session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
|
||||
except KeyError:
|
||||
# No session, no check required
|
||||
return None
|
||||
|
||||
csrf_token = _make_token(session_id)
|
||||
# check incoming token
|
||||
try:
|
||||
request_csrf_token = request.POST['csrfmiddlewaretoken']
|
||||
except KeyError:
|
||||
return HttpResponseForbidden(_ERROR_MSG)
|
||||
|
||||
if request_csrf_token != csrf_token:
|
||||
return HttpResponseForbidden(_ERROR_MSG)
|
||||
|
||||
return None
|
||||
|
||||
def process_response(self, request, response):
|
||||
csrf_token = None
|
||||
try:
|
||||
cookie = response.cookies[settings.SESSION_COOKIE_NAME]
|
||||
csrf_token = _make_token(cookie.value)
|
||||
except KeyError:
|
||||
# No outgoing cookie to set session, but
|
||||
# a session might already exist.
|
||||
try:
|
||||
session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
|
||||
csrf_token = _make_token(session_id)
|
||||
except KeyError:
|
||||
# no incoming or outgoing cookie
|
||||
pass
|
||||
|
||||
if csrf_token is not None and \
|
||||
response['Content-Type'].split(';')[0] in _HTML_TYPES:
|
||||
|
||||
# Modify any POST forms
|
||||
extra_field = "<div style='display:none;'>" + \
|
||||
"<input type='hidden' name='csrfmiddlewaretoken' value='" + \
|
||||
csrf_token + "' /></div>"
|
||||
response.content = _POST_FORM_RE.sub('\\1' + extra_field, response.content)
|
||||
return response
|
@ -760,7 +760,7 @@ def inspectdb():
|
||||
# table description.
|
||||
if row[6]: # If it's NULL...
|
||||
extra_params['blank'] = True
|
||||
if not field_type in ('TextField', 'CharField'):
|
||||
if not field_type in ('TextField(', 'CharField('):
|
||||
extra_params['null'] = True
|
||||
|
||||
field_desc = '%s = models.%s' % (att_name, field_type)
|
||||
|
@ -68,7 +68,7 @@ class DatabaseWrapper(local):
|
||||
self.connection = Database.connect(conn_string)
|
||||
cursor = self.connection.cursor()
|
||||
if settings.DEBUG:
|
||||
return base.CursorDebugWrapper(cursor, self)
|
||||
return util.CursorDebugWrapper(cursor, self)
|
||||
return cursor
|
||||
|
||||
def _commit(self):
|
||||
|
@ -94,7 +94,7 @@ class Options:
|
||||
for f in to_search:
|
||||
if f.name == name:
|
||||
return f
|
||||
raise FieldDoesNotExist, "name=%s" % name
|
||||
raise FieldDoesNotExist, '%s has no field named %r' % (self.object_name, name)
|
||||
|
||||
def get_order_sql(self, table_prefix=''):
|
||||
"Returns the full 'ORDER BY' clause for this object, according to self.ordering."
|
||||
|
@ -836,9 +836,9 @@ class EmailField(TextField):
|
||||
|
||||
class URLField(TextField):
|
||||
"A convenience FormField for validating URLs"
|
||||
def __init__(self, field_name, length=50, is_required=False, validator_list=[]):
|
||||
def __init__(self, field_name, length=50, maxlength=200, is_required=False, validator_list=[]):
|
||||
validator_list = [self.isValidURL] + validator_list
|
||||
TextField.__init__(self, field_name, length=length, maxlength=200,
|
||||
TextField.__init__(self, field_name, length=length, maxlength=maxlength,
|
||||
is_required=is_required, validator_list=validator_list)
|
||||
|
||||
def isValidURL(self, field_data, all_data):
|
||||
|
@ -57,6 +57,16 @@ See the `syndication documentation`_.
|
||||
|
||||
.. _syndication documentation: http://www.djangoproject.com/documentation/syndication/
|
||||
|
||||
csrf
|
||||
====
|
||||
|
||||
A middleware for preventing Cross Site Request Forgeries
|
||||
|
||||
See the `csrf documentation`_.
|
||||
|
||||
.. _csrf documentation: http://www.djangoproject.com/documentation/csrf/
|
||||
|
||||
|
||||
Other add-ons
|
||||
=============
|
||||
|
||||
|
@ -267,17 +267,25 @@ previous section). You can tell them apart with ``is_anonymous()``, like so::
|
||||
How to log a user in
|
||||
--------------------
|
||||
|
||||
To log a user in, do the following within a view::
|
||||
Depending on your task, you'll probably want to make sure to validate the
|
||||
user's username and password before you log them in. The easiest way to do so
|
||||
is to use the built-in ``authenticate`` and ``login`` functions from within a
|
||||
view::
|
||||
|
||||
from django.contrib.auth.models import SESSION_KEY
|
||||
request.session[SESSION_KEY] = some_user.id
|
||||
from django.contrib.auth import authenticate, login
|
||||
username = request.POST['username']
|
||||
password = request.POST['password']
|
||||
user = authenticate(username=username, password=password)
|
||||
if user is not None:
|
||||
login(request, user)
|
||||
|
||||
Because this uses sessions, you'll need to make sure you have
|
||||
``SessionMiddleware`` enabled. See the `session documentation`_ for more
|
||||
information.
|
||||
``authenticate`` checks the username and password. If they are valid it
|
||||
returns a user object, otherwise it returns ``None``. ``login`` makes it so
|
||||
your users don't have send a username and password for every request. Because
|
||||
the ``login`` function uses sessions, you'll need to make sure you have
|
||||
``SessionMiddleware`` enabled. See the `session documentation`_ for
|
||||
more information.
|
||||
|
||||
This assumes ``some_user`` is your ``User`` instance. Depending on your task,
|
||||
you'll probably want to make sure to validate the user's username and password.
|
||||
|
||||
Limiting access to logged-in users
|
||||
----------------------------------
|
||||
@ -611,3 +619,53 @@ Finally, note that this messages framework only works with users in the user
|
||||
database. To send messages to anonymous users, use the `session framework`_.
|
||||
|
||||
.. _session framework: http://www.djangoproject.com/documentation/sessions/
|
||||
|
||||
Other Authentication Sources
|
||||
============================
|
||||
|
||||
Django supports other authentication sources as well. You can even use
|
||||
multiple sources at the same time.
|
||||
|
||||
Using multiple backends
|
||||
-----------------------
|
||||
|
||||
The list of backends to use is controlled by the ``AUTHENTICATION_BACKENDS``
|
||||
setting. This should be a tuple of python path names. It defaults to
|
||||
``('django.contrib.auth.backends.ModelBackend',)``. To add additional backends
|
||||
just add them to your settings.py file. Ordering matters, so if the same
|
||||
username and password is valid in multiple backends, the first one in the
|
||||
list will return a user object, and the remaining ones won't even get a chance.
|
||||
|
||||
Writing an authentication backend
|
||||
---------------------------------
|
||||
|
||||
An authentication backend is a class that implements 2 methods: ``get_user(id)``
|
||||
and ``authenticate(**credentials)``. The ``get_user`` method takes an id, which
|
||||
could be a username, and database id, whatever, and returns a user object. The
|
||||
``authenticate`` method takes credentials as keyword arguments. Many times it
|
||||
will just look like this::
|
||||
|
||||
class MyBackend:
|
||||
def authenticate(username=None, password=None):
|
||||
# check the username/password and return a user
|
||||
|
||||
but it could also authenticate a token like so::
|
||||
|
||||
class MyBackend:
|
||||
def authenticate(token=None):
|
||||
# check the token and return a user
|
||||
|
||||
Regardless, ``authenticate`` should check the credentials it gets, and if they
|
||||
are valid, it should return a user object that matches those credentials.
|
||||
|
||||
The Django admin system is tightly coupled to the Django User object described
|
||||
at the beginning of this document. For now, the best way to deal with this is to
|
||||
create a Django User object for each user that exists for your backend (i.e.
|
||||
in your ldap directory, your external sql database, etc.) You can either
|
||||
write a script to do this in advance, or your ``authenticate`` method can do
|
||||
it the first time a user logs in. `django.contrib.auth.backends.SettingsBackend`_
|
||||
is an example of the latter approach. Note that you don't have to save a user's
|
||||
password in the Django User object. Your backend can still check the password
|
||||
against an external source, and return a Django User object.
|
||||
|
||||
.. _django.contrib.auth.backends.SettingsBackend: http://code.djangoproject.com/browser/django/branches/magic-removal/django/contrib/auth/backends.py
|
||||
|
68
docs/csrf.txt
Normal file
68
docs/csrf.txt
Normal file
@ -0,0 +1,68 @@
|
||||
=====================================
|
||||
Cross Site Request Forgery Protection
|
||||
=====================================
|
||||
|
||||
The CsrfMiddleware class provides easy-to-use protection against
|
||||
`Cross Site Request Forgeries`_. This type of attack occurs when a malicious
|
||||
web site creates a link or form button that is intended to perform some action
|
||||
on your web site, using the credentials of a logged-in user who is tricked
|
||||
into clicking on the link in their browser.
|
||||
|
||||
The first defense against CSRF attacks is to ensure that GET requests
|
||||
are side-effect free. POST requests can then be protected by adding this
|
||||
middleware into your list of installed middleware.
|
||||
|
||||
|
||||
.. _Cross Site Request Forgeries: http://www.squarefree.com/securitytips/web-developers.html#CSRF
|
||||
|
||||
How to use it
|
||||
=============
|
||||
Add the middleware ``"django.contrib.csrf.middleware.CsrfMiddleware"`` to
|
||||
your list of middleware classes, ``MIDDLEWARE_CLASSES``. It needs to process
|
||||
the response after the SessionMiddleware, so must come before it in the
|
||||
list. It also must process the response before things like compression
|
||||
happen to the response, so it must come after GZipMiddleware in the list.
|
||||
|
||||
How it works
|
||||
============
|
||||
CsrfMiddleware does two things:
|
||||
|
||||
1. It modifies outgoing requests by adding a hidden form field to all
|
||||
'POST' forms, with the name 'csrfmiddlewaretoken' and a value which is
|
||||
a hash of the session ID plus a secret. If there is no session ID set,
|
||||
this modification of the response isn't done, so there is very little
|
||||
performance penalty for those requests that don't have a session.
|
||||
|
||||
2. On all incoming POST requests that have the session cookie set, it
|
||||
checks that the 'csrfmiddlewaretoken' is present and correct. If it
|
||||
isn't, the user will get a 403 error.
|
||||
|
||||
This ensures that only forms that have originated from your web site
|
||||
can be used to POST data back.
|
||||
|
||||
It deliberately only targets HTTP POST requests (and the corresponding
|
||||
POST forms). GET requests ought never to have side effects (if you are
|
||||
using HTTP GET and POST correctly), and so a CSRF attack with a GET
|
||||
request will always be harmless.
|
||||
|
||||
POST requests that are not accompanied by a session cookie are not protected,
|
||||
but they do not need to be protected, since the 'attacking' web site
|
||||
could make these kind of requests anyway.
|
||||
|
||||
The Content-Type is checked before modifying the response, and only
|
||||
pages that are served as 'text/html' or 'application/xml+xhtml'
|
||||
are modified.
|
||||
|
||||
Limitations
|
||||
===========
|
||||
CsrfMiddleware requires Django's session framework to work. If you have
|
||||
a custom authentication system that manually sets cookies and the like,
|
||||
it won't help you.
|
||||
|
||||
If your app creates HTML pages and forms in some unusual way, (e.g.
|
||||
it sends fragments of HTML in javascript document.write statements)
|
||||
you might bypass the filter that adds the hidden field to the form,
|
||||
in which case form submission will always fail. It may still be possible
|
||||
to use the middleware, provided you can find some way to get the
|
||||
CSRF token and ensure that is included when your form is submitted.
|
||||
|
@ -1070,7 +1070,7 @@ Lookups that span relationships
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Django offers a powerful and intuitive way to "follow" relationships in
|
||||
lookups, taking care of the SQL ``JOIN``s for you automatically, behind the
|
||||
lookups, taking care of the SQL ``JOIN``\s for you automatically, behind the
|
||||
scenes. To span a relationship, just use the field name of related fields
|
||||
across models, separated by double underscores, until you get to the field you
|
||||
want.
|
||||
|
@ -62,6 +62,8 @@ Most generic views require the ``queryset`` key, which is a ``QuerySet``
|
||||
instance; see the `database API docs`_ for more information about ``Queryset``
|
||||
objects.
|
||||
|
||||
.. _database API docs: http://www.djangoproject.com/documentation/db_api/
|
||||
|
||||
"Simple" generic views
|
||||
======================
|
||||
|
||||
|
@ -52,7 +52,7 @@ Some technical notes:
|
||||
* The name of the table, ``myapp_person``, is automatically derived from
|
||||
some model metadata but can be overridden. See _`Table names` below.
|
||||
* An ``id`` field is added automatically, but this behavior can be
|
||||
overriden. See _`Automatic primary key fields` below.
|
||||
overriden. See `Automatic primary key fields`_ below.
|
||||
* The ``CREATE TABLE`` SQL in this example is formatted using PostgreSQL
|
||||
syntax, but it's worth noting Django uses SQL tailored to the database
|
||||
backend specified in your `settings file`_.
|
||||
@ -124,7 +124,7 @@ Here are all available field types:
|
||||
An ``IntegerField`` that automatically increments according to available IDs.
|
||||
You usually won't need to use this directly; a primary key field will
|
||||
automatically be added to your model if you don't specify otherwise. See
|
||||
_`Automatic primary key fields`.
|
||||
`Automatic primary key fields`_.
|
||||
|
||||
``BooleanField``
|
||||
~~~~~~~~~~~~~~~~
|
||||
@ -1111,7 +1111,7 @@ If ``fields`` isn't given, Django will default to displaying each field that
|
||||
isn't an ``AutoField`` and has ``editable=True``, in a single fieldset, in
|
||||
the same order as the fields are defined in the model.
|
||||
|
||||
The ``field_options`` dictionary can have the following keys::
|
||||
The ``field_options`` dictionary can have the following keys:
|
||||
|
||||
``fields``
|
||||
~~~~~~~~~~
|
||||
@ -1312,6 +1312,8 @@ The way ``Manager`` classes work is documented in the `Retrieving objects`_
|
||||
section of the database API docs, but this section specifically touches on
|
||||
model options that customize ``Manager`` behavior.
|
||||
|
||||
.. _Retrieving objects: http://www.djangoproject.com/documentation/db_api/#retrieving-objects
|
||||
|
||||
Manager names
|
||||
-------------
|
||||
|
||||
@ -1401,17 +1403,17 @@ example, using this model::
|
||||
|
||||
...the statement ``Book.objects.all()`` will return all books in the database.
|
||||
|
||||
You can override a ``Manager``'s base ``QuerySet`` by overriding the
|
||||
You can override a ``Manager``\'s base ``QuerySet`` by overriding the
|
||||
``Manager.get_query_set()`` method. ``get_query_set()`` should return a
|
||||
``QuerySet`` with the properties you require.
|
||||
|
||||
For example, the following model has *two* ``Manager``s -- one that returns
|
||||
For example, the following model has *two* ``Manager``\s -- one that returns
|
||||
all objects, and one that returns only the books by Roald Dahl::
|
||||
|
||||
# First, define the Manager subclass.
|
||||
class DahlBookManager(models.Manager):
|
||||
def get_query_set(self):
|
||||
return super(Manager, self).get_query_set().filter(author='Roald Dahl')
|
||||
return super(DahlBookManager, self).get_query_set().filter(author='Roald Dahl')
|
||||
|
||||
# Then hook it into the Book model explicitly.
|
||||
class Book(models.Model):
|
||||
@ -1442,11 +1444,11 @@ For example::
|
||||
|
||||
class MaleManager(models.Manager):
|
||||
def get_query_set(self):
|
||||
return super(Manager, self).get_query_set().filter(sex='M')
|
||||
return super(MaleManager, self).get_query_set().filter(sex='M')
|
||||
|
||||
class FemaleManager(models.Manager):
|
||||
def get_query_set(self):
|
||||
return super(Manager, self).get_query_set().filter(sex='F')
|
||||
return super(FemaleManager, self).get_query_set().filter(sex='F')
|
||||
|
||||
class Person(models.Model):
|
||||
first_name = models.CharField(maxlength=50)
|
||||
|
@ -187,8 +187,8 @@ Here are two recommended approaches:
|
||||
**and** templates -- stay in one place, and you'll still be able to
|
||||
``svn update`` your code to get the latest admin templates, if they
|
||||
change.
|
||||
2. Or, copy the admin media files so that they live within your document
|
||||
root.
|
||||
2. Or, copy the admin media files so that they live within your Apache
|
||||
document root.
|
||||
|
||||
Error handling
|
||||
==============
|
||||
|
@ -183,7 +183,7 @@ is a simple Python function. Each view gets passed a request object --
|
||||
which contains request metadata -- and the values captured in the regex.
|
||||
|
||||
For example, if a user requested the URL "/articles/2005/05/39323/", Django
|
||||
would call the function ``myproject.news.views.article_detail(request,
|
||||
would call the function ``mysite.views.article_detail(request,
|
||||
'2005', '05', '39323')``.
|
||||
|
||||
Write your views
|
||||
@ -199,7 +199,7 @@ and renders the template with the retrieved data. Here's an example view for
|
||||
|
||||
def year_archive(request, year):
|
||||
a_list = Article.objects.filter(pub_date__year=year)
|
||||
return render_to_response('news/year_archive.html', {'article_list': a_list})
|
||||
return render_to_response('news/year_archive.html', {'year': year, 'article_list': a_list})
|
||||
|
||||
This example uses Django's template system, which has several powerful
|
||||
features but strives to stay simple enough for non-programmers to use.
|
||||
@ -219,19 +219,22 @@ might look like::
|
||||
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}{{ article.headline }}{% endblock %}
|
||||
{% block title %}Articles for {{ year }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ article.headline }}</h1>
|
||||
<p>By {{ article.get_reporter.full_name }}</p>
|
||||
<h1>Articles for {{ year }}</h1>
|
||||
|
||||
{% for article in article_list %}
|
||||
<p>{{ article.headline }}</p>
|
||||
<p>By {{ article.reporter.full_name }}</p>
|
||||
<p>Published {{ article.pub_date|date:"F j, Y" }}</p>
|
||||
{{ article.article }}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
Variables are surrounded by double-curly braces. ``{{ article.headline }}``
|
||||
means "Output the value of the article's headline attribute." But dots aren't
|
||||
used only for attribute lookup: They also can do dictionary-key lookup, index
|
||||
lookup and function calls (as is the case with ``article.get_reporter``).
|
||||
lookup and function calls.
|
||||
|
||||
Note ``{{ article.pub_date|date:"F j, Y" }}`` uses a Unix-style "pipe" (the "|"
|
||||
character). This is called a template filter, and it's a way to filter the value
|
||||
|
@ -102,7 +102,7 @@ All attributes except ``session`` should be considered read-only.
|
||||
``AuthenticationMiddleware`` activated. For more, see
|
||||
`Authentication in Web requests`_.
|
||||
|
||||
.. Authentication in Web requests: http://www.djangoproject.com/documentation/authentication/#authentication-in-web-requests
|
||||
.. _Authentication in Web requests: http://www.djangoproject.com/documentation/authentication/#authentication-in-web-requests
|
||||
|
||||
``session``
|
||||
A readable-and-writable, dictionary-like object that represents the current
|
||||
|
@ -69,7 +69,7 @@ These files are:
|
||||
* ``urls.py``: The URL declarations for this Django project; a "table of
|
||||
contents" of your Django-powered site.
|
||||
|
||||
.. _more on packages: http://docs.python.org/tut/node8.html#packages
|
||||
.. _more about packages: http://docs.python.org/tut/node8.html#packages
|
||||
|
||||
The development server
|
||||
----------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user