mirror of
https://github.com/django/django.git
synced 2025-07-04 09:49:12 +00:00
newforms-admin: Merged from trunk up to [7583].
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7584 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
0836745c8e
commit
453d560a94
7
AUTHORS
7
AUTHORS
@ -68,7 +68,7 @@ answer newbie questions, and generally made Django that much better:
|
||||
Esdras Beleza <linux@esdrasbeleza.com>
|
||||
Chris Bennett <chrisrbennett@yahoo.com>
|
||||
James Bennett
|
||||
Ben <afternoon@uk2.net>
|
||||
Ben Godfrey <http://aftnn.org>
|
||||
Arvis Bickovskis <viestards.lists@gmail.com>
|
||||
Paul Bissex <http://e-scribe.com/>
|
||||
Simon Blanchard
|
||||
@ -79,7 +79,7 @@ answer newbie questions, and generally made Django that much better:
|
||||
brut.alll@gmail.com
|
||||
btoll@bestweb.net
|
||||
Jonathan Buchanan <jonathan.buchanan@gmail.com>
|
||||
Can Burak Çilingir <canburak@cs.bilgi.edu.tr>
|
||||
Juan Manuel Caicedo <juan.manuel.caicedo@gmail.com>
|
||||
Trevor Caira <trevor@caira.com>
|
||||
Ricardo Javier Cárdenes Medina <ricardo.cardenes@gmail.com>
|
||||
Graham Carlyle <graham.carlyle@maplecroft.net>
|
||||
@ -93,6 +93,7 @@ answer newbie questions, and generally made Django that much better:
|
||||
ivan.chelubeev@gmail.com
|
||||
Bryan Chow <bryan at verdjn dot com>
|
||||
Michal Chruszcz <troll@pld-linux.org>
|
||||
Can Burak Çilingir <canburak@cs.bilgi.edu.tr>
|
||||
Ian Clelland <clelland@gmail.com>
|
||||
Russell Cloran <russell@rucus.net>
|
||||
colin@owlfish.com
|
||||
@ -142,6 +143,7 @@ answer newbie questions, and generally made Django that much better:
|
||||
Bill Fenner <fenner@gmail.com>
|
||||
Stefane Fermgier <sf@fermigier.com>
|
||||
Afonso Fernández Nogueira <fonzzo.django@gmail.com>
|
||||
J. Pablo Fernandez <pupeno@pupeno.com>
|
||||
Matthew Flanagan <http://wadofstuff.blogspot.com>
|
||||
Eric Floehr <eric@intellovations.com>
|
||||
Vincent Foley <vfoleybourgon@yahoo.ca>
|
||||
@ -373,6 +375,7 @@ answer newbie questions, and generally made Django that much better:
|
||||
George Vilches <gav@thataddress.com>
|
||||
Vlado <vlado@labath.org>
|
||||
Milton Waddams
|
||||
Chris Wagner <cw264701@ohio.edu>
|
||||
wam-djangobug@wamber.net
|
||||
Wang Chun <wangchun@exoweb.net>
|
||||
Filip Wasilewski <filip.wasilewski@gmail.com>
|
||||
|
Binary file not shown.
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Django\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2007-02-15 00:00+0200\n"
|
||||
"POT-Creation-Date: 2008-05-26 10:35+0200\n"
|
||||
"PO-Revision-Date: 2008-05-14 11:15+0200\n"
|
||||
"Last-Translator: Django Catalan Group <django-cat@googlegroups.com>\n"
|
||||
"Language-Team: Catalan <ca@li.org>\n"
|
||||
@ -14,191 +14,191 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: conf/global_settings.py:39
|
||||
#: conf/global_settings.py:43
|
||||
msgid "Arabic"
|
||||
msgstr "Arabic"
|
||||
|
||||
#: conf/global_settings.py:40
|
||||
#: conf/global_settings.py:44
|
||||
msgid "Bengali"
|
||||
msgstr "Bengalí"
|
||||
|
||||
#: conf/global_settings.py:41
|
||||
#: conf/global_settings.py:45
|
||||
msgid "Bulgarian"
|
||||
msgstr "Búlgar"
|
||||
|
||||
#: conf/global_settings.py:42
|
||||
#: conf/global_settings.py:46
|
||||
msgid "Catalan"
|
||||
msgstr "Català"
|
||||
|
||||
#: conf/global_settings.py:43
|
||||
#: conf/global_settings.py:47
|
||||
msgid "Czech"
|
||||
msgstr "Txec"
|
||||
|
||||
#: conf/global_settings.py:44
|
||||
#: conf/global_settings.py:48
|
||||
msgid "Welsh"
|
||||
msgstr "Galès"
|
||||
|
||||
#: conf/global_settings.py:45
|
||||
#: conf/global_settings.py:49
|
||||
msgid "Danish"
|
||||
msgstr "Danès"
|
||||
|
||||
#: conf/global_settings.py:46
|
||||
#: conf/global_settings.py:50
|
||||
msgid "German"
|
||||
msgstr "Alemany"
|
||||
|
||||
#: conf/global_settings.py:47
|
||||
#: conf/global_settings.py:51
|
||||
msgid "Greek"
|
||||
msgstr "Grec"
|
||||
|
||||
#: conf/global_settings.py:48
|
||||
#: conf/global_settings.py:52
|
||||
msgid "English"
|
||||
msgstr "Anglès"
|
||||
|
||||
#: conf/global_settings.py:49
|
||||
#: conf/global_settings.py:53
|
||||
msgid "Spanish"
|
||||
msgstr "Espanyol"
|
||||
|
||||
#: conf/global_settings.py:50
|
||||
#: conf/global_settings.py:54
|
||||
msgid "Argentinean Spanish"
|
||||
msgstr "Castellà Argentí"
|
||||
|
||||
#: conf/global_settings.py:51
|
||||
#: conf/global_settings.py:55
|
||||
msgid "Basque"
|
||||
msgstr "Euskera"
|
||||
|
||||
#: conf/global_settings.py:52
|
||||
#: conf/global_settings.py:56
|
||||
msgid "Persian"
|
||||
msgstr "Persa"
|
||||
|
||||
#: conf/global_settings.py:53
|
||||
#: conf/global_settings.py:57
|
||||
msgid "Finnish"
|
||||
msgstr "Finlandès"
|
||||
|
||||
#: conf/global_settings.py:54
|
||||
#: conf/global_settings.py:58
|
||||
msgid "French"
|
||||
msgstr "Francès"
|
||||
|
||||
#: conf/global_settings.py:55
|
||||
#: conf/global_settings.py:59
|
||||
msgid "Irish"
|
||||
msgstr "Irlandès"
|
||||
|
||||
#: conf/global_settings.py:56
|
||||
#: conf/global_settings.py:60
|
||||
msgid "Galician"
|
||||
msgstr "Gallec"
|
||||
|
||||
#: conf/global_settings.py:57
|
||||
#: conf/global_settings.py:61
|
||||
msgid "Hungarian"
|
||||
msgstr "Húngar"
|
||||
|
||||
#: conf/global_settings.py:58
|
||||
#: conf/global_settings.py:62
|
||||
msgid "Hebrew"
|
||||
msgstr "Hebreu"
|
||||
|
||||
#: conf/global_settings.py:59
|
||||
#: conf/global_settings.py:63
|
||||
msgid "Croatian"
|
||||
msgstr "Croat"
|
||||
|
||||
#: conf/global_settings.py:60
|
||||
#: conf/global_settings.py:64
|
||||
msgid "Icelandic"
|
||||
msgstr "Islandès"
|
||||
|
||||
#: conf/global_settings.py:61
|
||||
#: conf/global_settings.py:65
|
||||
msgid "Italian"
|
||||
msgstr "Italià"
|
||||
|
||||
#: conf/global_settings.py:62
|
||||
#: conf/global_settings.py:66
|
||||
msgid "Japanese"
|
||||
msgstr "Japonès"
|
||||
|
||||
#: conf/global_settings.py:63
|
||||
#: conf/global_settings.py:67
|
||||
msgid "Georgian"
|
||||
msgstr "Georgià"
|
||||
|
||||
#: conf/global_settings.py:64
|
||||
#: conf/global_settings.py:68
|
||||
msgid "Korean"
|
||||
msgstr "Coreà"
|
||||
|
||||
#: conf/global_settings.py:65
|
||||
#: conf/global_settings.py:69
|
||||
msgid "Khmer"
|
||||
msgstr "Khmer"
|
||||
|
||||
#: conf/global_settings.py:66
|
||||
#: conf/global_settings.py:70
|
||||
msgid "Kannada"
|
||||
msgstr "Canès"
|
||||
|
||||
#: conf/global_settings.py:67
|
||||
#: conf/global_settings.py:71
|
||||
msgid "Latvian"
|
||||
msgstr "Letó"
|
||||
|
||||
#: conf/global_settings.py:68
|
||||
#: conf/global_settings.py:72
|
||||
msgid "Macedonian"
|
||||
msgstr "Macedoni"
|
||||
|
||||
#: conf/global_settings.py:69
|
||||
#: conf/global_settings.py:73
|
||||
msgid "Dutch"
|
||||
msgstr "Holandès"
|
||||
|
||||
#: conf/global_settings.py:70
|
||||
#: conf/global_settings.py:74
|
||||
msgid "Norwegian"
|
||||
msgstr "Norueg"
|
||||
|
||||
#: conf/global_settings.py:71
|
||||
#: conf/global_settings.py:75
|
||||
msgid "Polish"
|
||||
msgstr "Polac"
|
||||
|
||||
#: conf/global_settings.py:72
|
||||
#: conf/global_settings.py:76
|
||||
msgid "Portugese"
|
||||
msgstr "Portuguès"
|
||||
|
||||
#: conf/global_settings.py:73
|
||||
#: conf/global_settings.py:77
|
||||
msgid "Brazilian Portuguese"
|
||||
msgstr "Portuguès de Brasil"
|
||||
|
||||
#: conf/global_settings.py:74
|
||||
#: conf/global_settings.py:78
|
||||
msgid "Romanian"
|
||||
msgstr "Rumanès"
|
||||
|
||||
#: conf/global_settings.py:75
|
||||
#: conf/global_settings.py:79
|
||||
msgid "Russian"
|
||||
msgstr "Rús"
|
||||
|
||||
#: conf/global_settings.py:76
|
||||
#: conf/global_settings.py:80
|
||||
msgid "Slovak"
|
||||
msgstr "Eslovac"
|
||||
|
||||
#: conf/global_settings.py:77
|
||||
#: conf/global_settings.py:81
|
||||
msgid "Slovenian"
|
||||
msgstr "Esloveni"
|
||||
|
||||
#: conf/global_settings.py:78
|
||||
#: conf/global_settings.py:82
|
||||
msgid "Serbian"
|
||||
msgstr "Serbi"
|
||||
|
||||
#: conf/global_settings.py:79
|
||||
#: conf/global_settings.py:83
|
||||
msgid "Swedish"
|
||||
msgstr "Suec"
|
||||
|
||||
#: conf/global_settings.py:80
|
||||
#: conf/global_settings.py:84
|
||||
msgid "Tamil"
|
||||
msgstr "Tàmil"
|
||||
|
||||
#: conf/global_settings.py:81
|
||||
#: conf/global_settings.py:85
|
||||
msgid "Telugu"
|
||||
msgstr "Telugu"
|
||||
|
||||
#: conf/global_settings.py:82
|
||||
#: conf/global_settings.py:86
|
||||
msgid "Turkish"
|
||||
msgstr "Turc"
|
||||
|
||||
#: conf/global_settings.py:83
|
||||
#: conf/global_settings.py:87
|
||||
msgid "Ukrainian"
|
||||
msgstr "Ucranià"
|
||||
|
||||
#: conf/global_settings.py:84
|
||||
#: conf/global_settings.py:88
|
||||
msgid "Simplified Chinese"
|
||||
msgstr "Xinès simplificat"
|
||||
|
||||
#: conf/global_settings.py:85
|
||||
#: conf/global_settings.py:89
|
||||
msgid "Traditional Chinese"
|
||||
msgstr "Xinès tradicional"
|
||||
|
||||
@ -829,17 +829,17 @@ msgstr ""
|
||||
"'cookies' (galetes). Si us plau, habiliteu les 'cookies', recarregueu "
|
||||
"aquesta pàgina i proveu-ho de nou. "
|
||||
|
||||
#: contrib/admin/views/decorators.py:90
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
msgstr "Els noms d'usuari no poden contenir el caracter '@'."
|
||||
|
||||
#: contrib/admin/views/decorators.py:92
|
||||
#: contrib/admin/views/decorators.py:89
|
||||
#, python-format
|
||||
msgid "Your e-mail address is not your username. Try '%s' instead."
|
||||
msgstr ""
|
||||
"La vostra adreça de correu no és el vostre nom d'usuari. Provi '%s' en tot "
|
||||
"cas."
|
||||
|
||||
#: contrib/admin/views/decorators.py:93
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
msgstr "Els noms d'usuari no poden contenir el caracter '@'."
|
||||
|
||||
#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
|
||||
#: contrib/admin/views/doc.py:52
|
||||
msgid "tag:"
|
||||
@ -4038,8 +4038,7 @@ msgstr "Aquesta URL sembla ser un enllaç trencat."
|
||||
#: newforms/fields.py:560 newforms/models.py:299
|
||||
msgid "Select a valid choice. That choice is not one of the available choices."
|
||||
msgstr ""
|
||||
"Escolli una opció vàlida; Aquesta opció no és una de les opcions "
|
||||
"disponibles."
|
||||
"Escolli una opció vàlida; Aquesta opció no és una de les opcions disponibles."
|
||||
|
||||
#: newforms/fields.py:599
|
||||
#, python-format
|
||||
|
Binary file not shown.
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Django\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2005-10-04 00:00+0200\n"
|
||||
"POT-Creation-Date: 2008-05-26 10:38+0200\n"
|
||||
"PO-Revision-Date: 2008-03-30 01:04+0100\n"
|
||||
"Last-Translator: Django Spanish Group <django-i18n@googlegroups.com>\n"
|
||||
"Language-Team: Spanish <django-i18n@googlegroups.com>\n"
|
||||
@ -14,191 +14,192 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: conf/global_settings.py:39
|
||||
#: conf/global_settings.py:43
|
||||
msgid "Arabic"
|
||||
msgstr "Árabe"
|
||||
|
||||
#: conf/global_settings.py:40
|
||||
#: conf/global_settings.py:44
|
||||
msgid "Bengali"
|
||||
msgstr "Bengalí"
|
||||
|
||||
#: conf/global_settings.py:41
|
||||
#: conf/global_settings.py:45
|
||||
msgid "Bulgarian"
|
||||
msgstr "Búlgaro"
|
||||
|
||||
#: conf/global_settings.py:42
|
||||
#: conf/global_settings.py:46
|
||||
msgid "Catalan"
|
||||
msgstr "Catalán"
|
||||
|
||||
#: conf/global_settings.py:43
|
||||
#: conf/global_settings.py:47
|
||||
msgid "Czech"
|
||||
msgstr "Checo"
|
||||
|
||||
#: conf/global_settings.py:44
|
||||
#: conf/global_settings.py:48
|
||||
msgid "Welsh"
|
||||
msgstr "Galés"
|
||||
|
||||
#: conf/global_settings.py:45
|
||||
#: conf/global_settings.py:49
|
||||
msgid "Danish"
|
||||
msgstr "Danés"
|
||||
|
||||
#: conf/global_settings.py:46
|
||||
#: conf/global_settings.py:50
|
||||
msgid "German"
|
||||
msgstr "Alemán"
|
||||
|
||||
#: conf/global_settings.py:47
|
||||
#: conf/global_settings.py:51
|
||||
msgid "Greek"
|
||||
msgstr "Griego"
|
||||
|
||||
#: conf/global_settings.py:48
|
||||
#: conf/global_settings.py:52
|
||||
msgid "English"
|
||||
msgstr "Inglés"
|
||||
|
||||
#: conf/global_settings.py:49
|
||||
#: conf/global_settings.py:53
|
||||
msgid "Spanish"
|
||||
msgstr "Español"
|
||||
|
||||
#: conf/global_settings.py:50
|
||||
#: conf/global_settings.py:54
|
||||
msgid "Argentinean Spanish"
|
||||
msgstr "Español Argentino"
|
||||
|
||||
#: conf/global_settings.py:51
|
||||
#: conf/global_settings.py:55
|
||||
msgid "Basque"
|
||||
msgstr "Vasco"
|
||||
|
||||
#: conf/global_settings.py:52
|
||||
#: conf/global_settings.py:56
|
||||
msgid "Persian"
|
||||
msgstr "Persa"
|
||||
|
||||
#: conf/global_settings.py:53
|
||||
#: conf/global_settings.py:57
|
||||
msgid "Finnish"
|
||||
msgstr "Finés"
|
||||
|
||||
#: conf/global_settings.py:54
|
||||
#: conf/global_settings.py:58
|
||||
msgid "French"
|
||||
msgstr "Francés"
|
||||
|
||||
#: conf/global_settings.py:55
|
||||
#: conf/global_settings.py:59
|
||||
msgid "Irish"
|
||||
msgstr "Irlandés"
|
||||
|
||||
#: conf/global_settings.py:56
|
||||
#: conf/global_settings.py:60
|
||||
msgid "Galician"
|
||||
msgstr "Gallego"
|
||||
|
||||
#: conf/global_settings.py:57
|
||||
#: conf/global_settings.py:61
|
||||
msgid "Hungarian"
|
||||
msgstr "Húngaro"
|
||||
|
||||
#: conf/global_settings.py:58
|
||||
#: conf/global_settings.py:62
|
||||
msgid "Hebrew"
|
||||
msgstr "Hebreo"
|
||||
|
||||
#: conf/global_settings.py:59
|
||||
#: conf/global_settings.py:63
|
||||
msgid "Croatian"
|
||||
msgstr "Croata"
|
||||
|
||||
#: conf/global_settings.py:60
|
||||
#: conf/global_settings.py:64
|
||||
msgid "Icelandic"
|
||||
msgstr "Islandés"
|
||||
|
||||
#: conf/global_settings.py:61
|
||||
#: conf/global_settings.py:65
|
||||
msgid "Italian"
|
||||
msgstr "Italiano"
|
||||
|
||||
#: conf/global_settings.py:62
|
||||
#: conf/global_settings.py:66
|
||||
msgid "Japanese"
|
||||
msgstr "Japonés"
|
||||
|
||||
#: conf/global_settings.py:63
|
||||
#: conf/global_settings.py:67
|
||||
msgid "Georgian"
|
||||
msgstr "Georgiano"
|
||||
|
||||
#: conf/global_settings.py:64
|
||||
#: conf/global_settings.py:68
|
||||
msgid "Korean"
|
||||
msgstr "Koreano"
|
||||
|
||||
#: conf/global_settings.py:65
|
||||
#: conf/global_settings.py:69
|
||||
msgid "Khmer"
|
||||
msgstr "Khmer"
|
||||
|
||||
#: conf/global_settings.py:66
|
||||
#: conf/global_settings.py:70
|
||||
msgid "Kannada"
|
||||
msgstr "Kannada"
|
||||
|
||||
#: conf/global_settings.py:67
|
||||
#: conf/global_settings.py:71
|
||||
msgid "Latvian"
|
||||
msgstr "Latvio"
|
||||
|
||||
#: conf/global_settings.py:68
|
||||
#: conf/global_settings.py:72
|
||||
msgid "Macedonian"
|
||||
msgstr "Macedonio"
|
||||
|
||||
#: conf/global_settings.py:69
|
||||
#: conf/global_settings.py:73
|
||||
msgid "Dutch"
|
||||
msgstr "Alemán"
|
||||
|
||||
#: conf/global_settings.py:70
|
||||
#: conf/global_settings.py:74
|
||||
msgid "Norwegian"
|
||||
msgstr "Noruego"
|
||||
|
||||
#: conf/global_settings.py:71
|
||||
#: conf/global_settings.py:75
|
||||
msgid "Polish"
|
||||
msgstr "Polaco"
|
||||
|
||||
#: conf/global_settings.py:72
|
||||
#: conf/global_settings.py:76
|
||||
msgid "Portugese"
|
||||
msgstr "Portugés"
|
||||
|
||||
#: conf/global_settings.py:73
|
||||
msgid "Brazilian"
|
||||
msgstr "Brasileño"
|
||||
#: conf/global_settings.py:77
|
||||
#, fuzzy
|
||||
msgid "Brazilian Portuguese"
|
||||
msgstr "Portugés"
|
||||
|
||||
#: conf/global_settings.py:74
|
||||
#: conf/global_settings.py:78
|
||||
msgid "Romanian"
|
||||
msgstr "Rumano"
|
||||
|
||||
#: conf/global_settings.py:75
|
||||
#: conf/global_settings.py:79
|
||||
msgid "Russian"
|
||||
msgstr "Ruso"
|
||||
|
||||
#: conf/global_settings.py:76
|
||||
#: conf/global_settings.py:80
|
||||
msgid "Slovak"
|
||||
msgstr "Eslovaco"
|
||||
|
||||
#: conf/global_settings.py:77
|
||||
#: conf/global_settings.py:81
|
||||
msgid "Slovenian"
|
||||
msgstr "Esloveno"
|
||||
|
||||
#: conf/global_settings.py:78
|
||||
#: conf/global_settings.py:82
|
||||
msgid "Serbian"
|
||||
msgstr "Serbio"
|
||||
|
||||
#: conf/global_settings.py:79
|
||||
#: conf/global_settings.py:83
|
||||
msgid "Swedish"
|
||||
msgstr "Sueco"
|
||||
|
||||
#: conf/global_settings.py:80
|
||||
#: conf/global_settings.py:84
|
||||
msgid "Tamil"
|
||||
msgstr "Tamil"
|
||||
|
||||
#: conf/global_settings.py:81
|
||||
#: conf/global_settings.py:85
|
||||
msgid "Telugu"
|
||||
msgstr "Telugu"
|
||||
|
||||
#: conf/global_settings.py:82
|
||||
#: conf/global_settings.py:86
|
||||
msgid "Turkish"
|
||||
msgstr "Turco"
|
||||
|
||||
#: conf/global_settings.py:83
|
||||
#: conf/global_settings.py:87
|
||||
msgid "Ukrainian"
|
||||
msgstr "Ucraniano"
|
||||
|
||||
#: conf/global_settings.py:84
|
||||
#: conf/global_settings.py:88
|
||||
msgid "Simplified Chinese"
|
||||
msgstr "Chino simplificado"
|
||||
|
||||
#: conf/global_settings.py:85
|
||||
#: conf/global_settings.py:89
|
||||
msgid "Traditional Chinese"
|
||||
msgstr "Chino tradicional"
|
||||
|
||||
@ -828,17 +829,17 @@ msgstr ""
|
||||
"Parece que su navegador no está configurado para aceptar cookies. Actívelas "
|
||||
"por favor, recargue esta página, e inténtelo de nuevo."
|
||||
|
||||
#: contrib/admin/views/decorators.py:90
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
msgstr "Los nombres de usuario no pueden contener el carácter '@'."
|
||||
|
||||
#: contrib/admin/views/decorators.py:92
|
||||
#: contrib/admin/views/decorators.py:89
|
||||
#, python-format
|
||||
msgid "Your e-mail address is not your username. Try '%s' instead."
|
||||
msgstr ""
|
||||
"Su dirección de correo no es su nombre de usuario. Pruebe con '%s' en su "
|
||||
"lugar."
|
||||
|
||||
#: contrib/admin/views/decorators.py:93
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
msgstr "Los nombres de usuario no pueden contener el carácter '@'."
|
||||
|
||||
#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
|
||||
#: contrib/admin/views/doc.py:52
|
||||
msgid "tag:"
|
||||
@ -962,7 +963,7 @@ msgstr "Texto"
|
||||
msgid "Time"
|
||||
msgstr "Hora"
|
||||
|
||||
#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:7
|
||||
#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:8
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
@ -1021,7 +1022,7 @@ msgstr "No ha cambiado ningún campo."
|
||||
#: contrib/admin/views/main.py:354
|
||||
#, python-format
|
||||
msgid "The %(name)s \"%(obj)s\" was changed successfully."
|
||||
msgstr "Se modificó con éxito el %(name)s \"%(obj)s."
|
||||
msgstr "Se modificó con éxito el %(name)s \"%(obj)s\"."
|
||||
|
||||
#: contrib/admin/views/main.py:362
|
||||
#, python-format
|
||||
@ -1069,7 +1070,7 @@ msgstr "Escoja %s"
|
||||
msgid "Select %s to change"
|
||||
msgstr "Escoja %s para modificar"
|
||||
|
||||
#: contrib/admin/views/main.py:784
|
||||
#: contrib/admin/views/main.py:765
|
||||
msgid "Database error"
|
||||
msgstr "Error en la base de datos"
|
||||
|
||||
@ -1190,8 +1191,9 @@ msgid "active"
|
||||
msgstr "activo"
|
||||
|
||||
#: contrib/auth/models.py:137
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Designates whether this user can log into the Django admin. Unselect this "
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
"Indica si el usuario puede entrar en este sitio de administración. Desmarque "
|
||||
@ -1569,30 +1571,30 @@ msgstr "tipo de contenido"
|
||||
msgid "content types"
|
||||
msgstr "tipos de contenido"
|
||||
|
||||
#: contrib/flatpages/models.py:8
|
||||
#: contrib/flatpages/models.py:9
|
||||
msgid ""
|
||||
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
|
||||
msgstr ""
|
||||
"Ejemplo: '/about/contact/'. Asegúrese de que pone barras al principio y al "
|
||||
"final."
|
||||
|
||||
#: contrib/flatpages/models.py:9
|
||||
#: contrib/flatpages/models.py:10
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
#: contrib/flatpages/models.py:10
|
||||
#: contrib/flatpages/models.py:11
|
||||
msgid "content"
|
||||
msgstr "contenido"
|
||||
|
||||
#: contrib/flatpages/models.py:11
|
||||
#: contrib/flatpages/models.py:12
|
||||
msgid "enable comments"
|
||||
msgstr "admitir comentarios"
|
||||
|
||||
#: contrib/flatpages/models.py:12
|
||||
#: contrib/flatpages/models.py:13
|
||||
msgid "template name"
|
||||
msgstr "nombre de plantilla"
|
||||
|
||||
#: contrib/flatpages/models.py:13
|
||||
#: contrib/flatpages/models.py:14
|
||||
msgid ""
|
||||
"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
|
||||
"will use 'flatpages/default.html'."
|
||||
@ -1600,23 +1602,23 @@ msgstr ""
|
||||
"Ejemplo: 'flatpages/contact_page.html'. Si no es proporcionado, el sistema "
|
||||
"usará 'flatpages/default.html'."
|
||||
|
||||
#: contrib/flatpages/models.py:14
|
||||
#: contrib/flatpages/models.py:15
|
||||
msgid "registration required"
|
||||
msgstr "debe estar registrado"
|
||||
|
||||
#: contrib/flatpages/models.py:14
|
||||
#: contrib/flatpages/models.py:15
|
||||
msgid "If this is checked, only logged-in users will be able to view the page."
|
||||
msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página."
|
||||
|
||||
#: contrib/flatpages/models.py:18
|
||||
#: contrib/flatpages/models.py:20
|
||||
msgid "flat page"
|
||||
msgstr "página estática"
|
||||
|
||||
#: contrib/flatpages/models.py:19
|
||||
#: contrib/flatpages/models.py:21
|
||||
msgid "flat pages"
|
||||
msgstr "páginas estáticas"
|
||||
|
||||
#: contrib/flatpages/models.py:24
|
||||
#: contrib/flatpages/models.py:27
|
||||
msgid "Advanced options"
|
||||
msgstr "Opciones avanzadas"
|
||||
|
||||
@ -1770,8 +1772,8 @@ msgstr "Introduzca un código postal en el formato XXX XXX."
|
||||
#: contrib/localflavor/ca/forms.py:88
|
||||
msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
|
||||
msgstr ""
|
||||
"Introduzca un Número del Seguro Social de Canada válido en el formato XXX-XXX-"
|
||||
"XXX."
|
||||
"Introduzca un Número del Seguro Social de Canada válido en el formato XXX-"
|
||||
"XXX-XXX."
|
||||
|
||||
#: contrib/localflavor/ch/ch_states.py:5
|
||||
msgid "Aargau"
|
||||
@ -3628,7 +3630,7 @@ msgstr "El año debe ser 1900 o posterior."
|
||||
msgid "Invalid date: %s"
|
||||
msgstr "Fecha no válida: %s"
|
||||
|
||||
#: core/validators.py:156 db/models/fields/__init__.py:527
|
||||
#: core/validators.py:156 db/models/fields/__init__.py:548
|
||||
msgid "Enter a valid date in YYYY-MM-DD format."
|
||||
msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
|
||||
|
||||
@ -3636,7 +3638,7 @@ msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
|
||||
msgid "Enter a valid time in HH:MM format."
|
||||
msgstr "Introduzca una hora válida en formato HH:MM."
|
||||
|
||||
#: core/validators.py:165 db/models/fields/__init__.py:604
|
||||
#: core/validators.py:165 db/models/fields/__init__.py:625
|
||||
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
|
||||
msgstr "Introduzca una fecha/hora válida en formato AAAA-MM-DD HH:MM."
|
||||
|
||||
@ -3897,58 +3899,58 @@ msgstr ""
|
||||
msgid "%(object)s with this %(type)s already exists for the given %(field)s."
|
||||
msgstr "%(object)s de este %(type)s ya existen en este %(field)s."
|
||||
|
||||
#: db/models/fields/__init__.py:52
|
||||
#: db/models/fields/__init__.py:54
|
||||
#, python-format
|
||||
msgid "%(optname)s with this %(fieldname)s already exists."
|
||||
msgstr "Ya existe %(optname)s con este %(fieldname)s."
|
||||
|
||||
#: db/models/fields/__init__.py:161 db/models/fields/__init__.py:327
|
||||
#: db/models/fields/__init__.py:759 db/models/fields/__init__.py:770
|
||||
#: db/models/fields/__init__.py:179 db/models/fields/__init__.py:348
|
||||
#: db/models/fields/__init__.py:780 db/models/fields/__init__.py:791
|
||||
#: newforms/fields.py:46 oldforms/__init__.py:374
|
||||
msgid "This field is required."
|
||||
msgstr "Este campo es obligatorio."
|
||||
|
||||
#: db/models/fields/__init__.py:427
|
||||
#: db/models/fields/__init__.py:448
|
||||
msgid "This value must be an integer."
|
||||
msgstr "Este valor debe ser un entero."
|
||||
|
||||
#: db/models/fields/__init__.py:466
|
||||
#: db/models/fields/__init__.py:487
|
||||
msgid "This value must be either True or False."
|
||||
msgstr "Este valor debe ser Verdadero o Falso."
|
||||
|
||||
#: db/models/fields/__init__.py:490
|
||||
#: db/models/fields/__init__.py:511
|
||||
msgid "This field cannot be null."
|
||||
msgstr "Este campo no puede estar vacío."
|
||||
|
||||
#: db/models/fields/__init__.py:668
|
||||
#: db/models/fields/__init__.py:689
|
||||
msgid "This value must be a decimal number."
|
||||
msgstr "Este valor debe ser un entero."
|
||||
|
||||
#: db/models/fields/__init__.py:779
|
||||
#: db/models/fields/__init__.py:800
|
||||
msgid "Enter a valid filename."
|
||||
msgstr "Introduzca un nombre de fichero válido"
|
||||
|
||||
#: db/models/fields/__init__.py:960
|
||||
#: db/models/fields/__init__.py:981
|
||||
msgid "This value must be either None, True or False."
|
||||
msgstr "Este valor debe ser Verdadero o Falso."
|
||||
|
||||
#: db/models/fields/related.py:93
|
||||
#: db/models/fields/related.py:94
|
||||
#, python-format
|
||||
msgid "Please enter a valid %s."
|
||||
msgstr "Por favor, introduzca un %s válido."
|
||||
|
||||
#: db/models/fields/related.py:701
|
||||
#: db/models/fields/related.py:721
|
||||
msgid "Separate multiple IDs with commas."
|
||||
msgstr "Separe múltiples IDs con comas."
|
||||
|
||||
#: db/models/fields/related.py:703
|
||||
#: db/models/fields/related.py:723
|
||||
msgid ""
|
||||
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
"Mantenga presionado \"Control\", o \"Command\" en un Mac, para seleccionar "
|
||||
"más de uno."
|
||||
|
||||
#: db/models/fields/related.py:750
|
||||
#: db/models/fields/related.py:770
|
||||
#, python-format
|
||||
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
|
||||
msgid_plural ""
|
||||
@ -4042,7 +4044,8 @@ msgstr "Escoja una opción válida. Esa opción no está entre las aceptadas."
|
||||
#: newforms/fields.py:599
|
||||
#, python-format
|
||||
msgid "Select a valid choice. %(value)s is not one of the available choices."
|
||||
msgstr "Escoja una opción válida. %(value)s no es una de las opciones disponibles."
|
||||
msgstr ""
|
||||
"Escoja una opción válida. %(value)s no es una de las opciones disponibles."
|
||||
|
||||
#: newforms/fields.py:600 newforms/fields.py:662 newforms/models.py:371
|
||||
msgid "Enter a list of values."
|
||||
@ -4404,6 +4407,9 @@ msgstr "Se actualizó con éxito el %(verbose_name)s."
|
||||
msgid "The %(verbose_name)s was deleted."
|
||||
msgstr "El %(verbose_name)s ha sido eliminado."
|
||||
|
||||
#~ msgid "Brazilian"
|
||||
#~ msgstr "Brasileño"
|
||||
|
||||
#~ msgid "Gaeilge"
|
||||
#~ msgstr "Gaeilge"
|
||||
|
||||
|
Binary file not shown.
@ -1,13 +1,12 @@
|
||||
# translation of django.po to Italiano
|
||||
# Nicola Larosa <nico@tekNico.net>, 2008.
|
||||
# Italian translation of Django.
|
||||
# Copyright (C) 2006 the Lawrence Journal-World
|
||||
# This file is distributed under the same license as the Django package.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: django\n"
|
||||
"Project-Id-Version: Django vSVN\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2008-05-18 18:39+0200\n"
|
||||
"POT-Creation-Date: 2008-06-02 18:40+0200\n"
|
||||
"PO-Revision-Date: 2008-05-18 19:13+0200\n"
|
||||
"Last-Translator: Nicola Larosa <nico@tekNico.net>\n"
|
||||
"Language-Team: Italiano\n"
|
||||
@ -1710,7 +1709,7 @@ msgstr "Inserire un codice postale nel formato NNNN o ANNNNAAA."
|
||||
#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
|
||||
#: contrib/localflavor/pe/forms.py:51
|
||||
msgid "This field requires only numbers."
|
||||
msgstr "In questo campo possono essere solo presenti numeri."
|
||||
msgstr "Questo campo può contenere solo numeri."
|
||||
|
||||
#: contrib/localflavor/ar/forms.py:50
|
||||
msgid "This field requires 7 or 8 digits."
|
||||
@ -2308,7 +2307,7 @@ msgstr "Inserire un codice postale valido."
|
||||
|
||||
#: contrib/localflavor/it/forms.py:43
|
||||
msgid "Enter a valid Social Security number."
|
||||
msgstr "Inserire un numero di assistenza sociale valido."
|
||||
msgstr "Inserire un numero di codice fiscale valido."
|
||||
|
||||
#: contrib/localflavor/it/forms.py:68
|
||||
msgid "Enter a valid VAT number."
|
||||
|
Binary file not shown.
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Django\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2008-03-16 16:53+0100\n"
|
||||
"PO-Revision-Date: 2008-03-02 00:49+0100\n"
|
||||
"POT-Creation-Date: 2008-05-26 10:58+0200\n"
|
||||
"PO-Revision-Date: 2008-05-26 11:15+0200\n"
|
||||
"Last-Translator: Ludvig Ericson <ludvig.ericson@gmail.com>\n"
|
||||
"Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -17,191 +17,191 @@ msgstr ""
|
||||
"X-Poedit-Language: Swedish\n"
|
||||
"X-Poedit-Country: SWEDEN\n"
|
||||
|
||||
#: conf/global_settings.py:39
|
||||
#: conf/global_settings.py:43
|
||||
msgid "Arabic"
|
||||
msgstr "Arabiska"
|
||||
|
||||
#: conf/global_settings.py:40
|
||||
#: conf/global_settings.py:44
|
||||
msgid "Bengali"
|
||||
msgstr "Bengaliska"
|
||||
|
||||
#: conf/global_settings.py:41
|
||||
#: conf/global_settings.py:45
|
||||
msgid "Bulgarian"
|
||||
msgstr "Bulgariska"
|
||||
|
||||
#: conf/global_settings.py:42
|
||||
#: conf/global_settings.py:46
|
||||
msgid "Catalan"
|
||||
msgstr "Katalanska"
|
||||
|
||||
#: conf/global_settings.py:43
|
||||
#: conf/global_settings.py:47
|
||||
msgid "Czech"
|
||||
msgstr "Tjeckiska"
|
||||
|
||||
#: conf/global_settings.py:44
|
||||
#: conf/global_settings.py:48
|
||||
msgid "Welsh"
|
||||
msgstr "Walesiska"
|
||||
|
||||
#: conf/global_settings.py:45
|
||||
#: conf/global_settings.py:49
|
||||
msgid "Danish"
|
||||
msgstr "Danska"
|
||||
|
||||
#: conf/global_settings.py:46
|
||||
#: conf/global_settings.py:50
|
||||
msgid "German"
|
||||
msgstr "Tyska"
|
||||
|
||||
#: conf/global_settings.py:47
|
||||
#: conf/global_settings.py:51
|
||||
msgid "Greek"
|
||||
msgstr "Grekiska"
|
||||
|
||||
#: conf/global_settings.py:48
|
||||
#: conf/global_settings.py:52
|
||||
msgid "English"
|
||||
msgstr "Engelska"
|
||||
|
||||
#: conf/global_settings.py:49
|
||||
#: conf/global_settings.py:53
|
||||
msgid "Spanish"
|
||||
msgstr "Spanska"
|
||||
|
||||
#: conf/global_settings.py:50
|
||||
#: conf/global_settings.py:54
|
||||
msgid "Argentinean Spanish"
|
||||
msgstr "Argentisk Spanska"
|
||||
|
||||
#: conf/global_settings.py:51
|
||||
#: conf/global_settings.py:55
|
||||
msgid "Basque"
|
||||
msgstr "Baskiska"
|
||||
|
||||
#: conf/global_settings.py:52
|
||||
#: conf/global_settings.py:56
|
||||
msgid "Persian"
|
||||
msgstr "Persiska"
|
||||
|
||||
#: conf/global_settings.py:53
|
||||
#: conf/global_settings.py:57
|
||||
msgid "Finnish"
|
||||
msgstr "Finska"
|
||||
|
||||
#: conf/global_settings.py:54
|
||||
#: conf/global_settings.py:58
|
||||
msgid "French"
|
||||
msgstr "Franska"
|
||||
|
||||
#: conf/global_settings.py:55
|
||||
#: conf/global_settings.py:59
|
||||
msgid "Irish"
|
||||
msgstr "Irländska"
|
||||
|
||||
#: conf/global_settings.py:56
|
||||
#: conf/global_settings.py:60
|
||||
msgid "Galician"
|
||||
msgstr "Galisiska"
|
||||
|
||||
#: conf/global_settings.py:57
|
||||
#: conf/global_settings.py:61
|
||||
msgid "Hungarian"
|
||||
msgstr "Ungerska"
|
||||
|
||||
#: conf/global_settings.py:58
|
||||
#: conf/global_settings.py:62
|
||||
msgid "Hebrew"
|
||||
msgstr "Hebreiska"
|
||||
|
||||
#: conf/global_settings.py:59
|
||||
#: conf/global_settings.py:63
|
||||
msgid "Croatian"
|
||||
msgstr "Kroatiska"
|
||||
|
||||
#: conf/global_settings.py:60
|
||||
#: conf/global_settings.py:64
|
||||
msgid "Icelandic"
|
||||
msgstr "Isländska"
|
||||
|
||||
#: conf/global_settings.py:61
|
||||
#: conf/global_settings.py:65
|
||||
msgid "Italian"
|
||||
msgstr "Italienska"
|
||||
|
||||
#: conf/global_settings.py:62
|
||||
#: conf/global_settings.py:66
|
||||
msgid "Japanese"
|
||||
msgstr "Japanska"
|
||||
|
||||
#: conf/global_settings.py:63
|
||||
#: conf/global_settings.py:67
|
||||
msgid "Georgian"
|
||||
msgstr "Georgiska"
|
||||
|
||||
#: conf/global_settings.py:64
|
||||
#: conf/global_settings.py:68
|
||||
msgid "Korean"
|
||||
msgstr "Koreanska"
|
||||
|
||||
#: conf/global_settings.py:65
|
||||
#: conf/global_settings.py:69
|
||||
msgid "Khmer"
|
||||
msgstr "Khmer"
|
||||
|
||||
#: conf/global_settings.py:66
|
||||
#: conf/global_settings.py:70
|
||||
msgid "Kannada"
|
||||
msgstr "Kannada"
|
||||
|
||||
#: conf/global_settings.py:67
|
||||
#: conf/global_settings.py:71
|
||||
msgid "Latvian"
|
||||
msgstr "Lettiska"
|
||||
|
||||
#: conf/global_settings.py:68
|
||||
#: conf/global_settings.py:72
|
||||
msgid "Macedonian"
|
||||
msgstr "Makedonska"
|
||||
|
||||
#: conf/global_settings.py:69
|
||||
#: conf/global_settings.py:73
|
||||
msgid "Dutch"
|
||||
msgstr "Holländska"
|
||||
|
||||
#: conf/global_settings.py:70
|
||||
#: conf/global_settings.py:74
|
||||
msgid "Norwegian"
|
||||
msgstr "Norska"
|
||||
|
||||
#: conf/global_settings.py:71
|
||||
#: conf/global_settings.py:75
|
||||
msgid "Polish"
|
||||
msgstr "Polska"
|
||||
|
||||
#: conf/global_settings.py:72
|
||||
#: conf/global_settings.py:76
|
||||
msgid "Portugese"
|
||||
msgstr "Portugisiska"
|
||||
|
||||
#: conf/global_settings.py:73
|
||||
msgid "Brazilian"
|
||||
msgstr "Brasilianska"
|
||||
#: conf/global_settings.py:77
|
||||
msgid "Brazilian Portuguese"
|
||||
msgstr "Brasiliensk portugisiska"
|
||||
|
||||
#: conf/global_settings.py:74
|
||||
#: conf/global_settings.py:78
|
||||
msgid "Romanian"
|
||||
msgstr "Rumänska"
|
||||
|
||||
#: conf/global_settings.py:75
|
||||
#: conf/global_settings.py:79
|
||||
msgid "Russian"
|
||||
msgstr "Ryska"
|
||||
|
||||
#: conf/global_settings.py:76
|
||||
#: conf/global_settings.py:80
|
||||
msgid "Slovak"
|
||||
msgstr "Slovakiska"
|
||||
|
||||
#: conf/global_settings.py:77
|
||||
#: conf/global_settings.py:81
|
||||
msgid "Slovenian"
|
||||
msgstr "Slovenska"
|
||||
|
||||
#: conf/global_settings.py:78
|
||||
#: conf/global_settings.py:82
|
||||
msgid "Serbian"
|
||||
msgstr "Serbiska"
|
||||
|
||||
#: conf/global_settings.py:79
|
||||
#: conf/global_settings.py:83
|
||||
msgid "Swedish"
|
||||
msgstr "Svenska"
|
||||
|
||||
#: conf/global_settings.py:80
|
||||
#: conf/global_settings.py:84
|
||||
msgid "Tamil"
|
||||
msgstr "Tamilska"
|
||||
|
||||
#: conf/global_settings.py:81
|
||||
#: conf/global_settings.py:85
|
||||
msgid "Telugu"
|
||||
msgstr "Telugu"
|
||||
|
||||
#: conf/global_settings.py:82
|
||||
#: conf/global_settings.py:86
|
||||
msgid "Turkish"
|
||||
msgstr "Turkiska"
|
||||
|
||||
#: conf/global_settings.py:83
|
||||
#: conf/global_settings.py:87
|
||||
msgid "Ukrainian"
|
||||
msgstr "Ukrainska"
|
||||
|
||||
#: conf/global_settings.py:84
|
||||
#: conf/global_settings.py:88
|
||||
msgid "Simplified Chinese"
|
||||
msgstr "Förenklad Kinesiska"
|
||||
|
||||
#: conf/global_settings.py:85
|
||||
#: conf/global_settings.py:89
|
||||
msgid "Traditional Chinese"
|
||||
msgstr "Traditionell Kinesiska"
|
||||
|
||||
@ -504,8 +504,8 @@ msgid ""
|
||||
"This object doesn't have a change history. It probably wasn't added via this "
|
||||
"admin site."
|
||||
msgstr ""
|
||||
"Detta objekt har ingen ändringshistorik. Det lades antagligen inte till "
|
||||
"via denna administrationssida."
|
||||
"Detta objekt har ingen ändringshistorik. Det lades antagligen inte till via "
|
||||
"denna administrationssida."
|
||||
|
||||
#: contrib/admin/templates/admin/pagination.html:10
|
||||
msgid "Show all"
|
||||
@ -729,8 +729,7 @@ msgstr "Ditt nya lösenord är: %(new_password)s"
|
||||
|
||||
#: contrib/admin/templates/registration/password_reset_email.html:7
|
||||
msgid "Feel free to change this password by going to this page:"
|
||||
msgstr ""
|
||||
"Du är välkommen att ändra detta lösenord genom att gå till denna sida:"
|
||||
msgstr "Du är välkommen att ändra detta lösenord genom att gå till denna sida:"
|
||||
|
||||
#: contrib/admin/templates/registration/password_reset_email.html:11
|
||||
msgid "Your username, in case you've forgotten:"
|
||||
@ -828,15 +827,15 @@ msgstr ""
|
||||
"Det verkar som att din webläsare inte är konfigurerad att acceptera cookies. "
|
||||
"Aktivera cookies, ladda om denna sida och försök igen."
|
||||
|
||||
#: contrib/admin/views/decorators.py:90
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
msgstr "Användarnamn får inte innehålla '@'-tecknet."
|
||||
|
||||
#: contrib/admin/views/decorators.py:92
|
||||
#: contrib/admin/views/decorators.py:89
|
||||
#, python-format
|
||||
msgid "Your e-mail address is not your username. Try '%s' instead."
|
||||
msgstr "Din e-postadress är inte ditt användarnamn. Försök med '%s' istället."
|
||||
|
||||
#: contrib/admin/views/decorators.py:93
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
msgstr "Användarnamn får inte innehålla '@'-tecknet."
|
||||
|
||||
#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
|
||||
#: contrib/admin/views/doc.py:52
|
||||
msgid "tag:"
|
||||
@ -960,7 +959,7 @@ msgstr "Text"
|
||||
msgid "Time"
|
||||
msgstr "Tid"
|
||||
|
||||
#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:7
|
||||
#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:8
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
@ -1067,7 +1066,7 @@ msgstr "Välj %s"
|
||||
msgid "Select %s to change"
|
||||
msgstr "Välj %s att ändra"
|
||||
|
||||
#: contrib/admin/views/main.py:784
|
||||
#: contrib/admin/views/main.py:765
|
||||
msgid "Database error"
|
||||
msgstr "Databasfel"
|
||||
|
||||
@ -1186,11 +1185,11 @@ msgstr "aktiv"
|
||||
|
||||
#: contrib/auth/models.py:137
|
||||
msgid ""
|
||||
"Designates whether this user can log into the Django admin. Unselect this "
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
"Anger om användaren kan logga in till Django-adminsidan. Avmarkera denna "
|
||||
"istället för att ta bort konton."
|
||||
"Anger om användaren skall betraktas som aktiv. Avmarkera detta istället "
|
||||
"för att ta bort konton."
|
||||
|
||||
#: contrib/auth/models.py:138
|
||||
msgid "superuser status"
|
||||
@ -1322,8 +1321,8 @@ msgid ""
|
||||
"Check this box if the comment is inappropriate. A \"This comment has been "
|
||||
"removed\" message will be displayed instead."
|
||||
msgstr ""
|
||||
"Bocka för denna ruta om kommentaren är olämplig. Ett \"Denna "
|
||||
"kommentar har tagits bort\"-meddelande kommer visas istället."
|
||||
"Bocka för denna ruta om kommentaren är olämplig. Ett \"Denna kommentar har "
|
||||
"tagits bort\"-meddelande kommer visas istället."
|
||||
|
||||
#: contrib/comments/models.py:96
|
||||
msgid "comments"
|
||||
@ -1488,13 +1487,13 @@ msgid_plural ""
|
||||
"\n"
|
||||
"%(text)s"
|
||||
msgstr[0] ""
|
||||
"Denna kommentar postades av en användare som har postat färre än %(count)"
|
||||
"s kommentar:\n"
|
||||
"Denna kommentar postades av en användare som har postat färre än %(count)s "
|
||||
"kommentar:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
msgstr[1] ""
|
||||
"Denna kommentar postades av en användare som har postat färre än %(count)"
|
||||
"s kommentarer:\n"
|
||||
"Denna kommentar postades av en användare som har postat färre än %(count)s "
|
||||
"kommentarer:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
|
||||
@ -1551,80 +1550,92 @@ msgstr "Ogiltigt kommentar-ID"
|
||||
msgid "No voting for yourself"
|
||||
msgstr "Du får inte rösta på dig själv"
|
||||
|
||||
#: contrib/contenttypes/models.py:37
|
||||
#: contrib/contenttypes/models.py:67
|
||||
msgid "python model class name"
|
||||
msgstr "python klassnamn för modell"
|
||||
|
||||
#: contrib/contenttypes/models.py:40
|
||||
#: contrib/contenttypes/models.py:71
|
||||
msgid "content type"
|
||||
msgstr "innehålls typ"
|
||||
|
||||
#: contrib/contenttypes/models.py:41
|
||||
#: contrib/contenttypes/models.py:72
|
||||
msgid "content types"
|
||||
msgstr "innehålls typer"
|
||||
|
||||
#: contrib/flatpages/models.py:8
|
||||
#: contrib/flatpages/models.py:9
|
||||
msgid ""
|
||||
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
|
||||
msgstr ""
|
||||
"Exempel: '/om/kontakt/'. Se till att ha inledande och avslutande snedstreck."
|
||||
|
||||
#: contrib/flatpages/models.py:9
|
||||
#: contrib/flatpages/models.py:10
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
#: contrib/flatpages/models.py:10
|
||||
#: contrib/flatpages/models.py:11
|
||||
msgid "content"
|
||||
msgstr "innehåll"
|
||||
|
||||
#: contrib/flatpages/models.py:11
|
||||
#: contrib/flatpages/models.py:12
|
||||
msgid "enable comments"
|
||||
msgstr "aktivera kommentarer"
|
||||
|
||||
#: contrib/flatpages/models.py:12
|
||||
#: contrib/flatpages/models.py:13
|
||||
msgid "template name"
|
||||
msgstr "mallnamn"
|
||||
|
||||
#: contrib/flatpages/models.py:13
|
||||
#: contrib/flatpages/models.py:14
|
||||
msgid ""
|
||||
"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
|
||||
"will use 'flatpages/default.html'."
|
||||
msgstr ""
|
||||
"Exempel: 'sidor/kontaktsida.html'. Om detta inte fylls i kommer systemet "
|
||||
"att använda 'flatpages/default.html'."
|
||||
"Exempel: 'sidor/kontaktsida.html'. Om detta inte fylls i kommer systemet att "
|
||||
"använda 'flatpages/default.html'."
|
||||
|
||||
#: contrib/flatpages/models.py:14
|
||||
#: contrib/flatpages/models.py:15
|
||||
msgid "registration required"
|
||||
msgstr "registrering krävs"
|
||||
|
||||
#: contrib/flatpages/models.py:14
|
||||
#: contrib/flatpages/models.py:15
|
||||
msgid "If this is checked, only logged-in users will be able to view the page."
|
||||
msgstr ""
|
||||
"Om detta bockas för kommer endast inloggade användare kunna se sidan."
|
||||
msgstr "Om detta bockas för kommer endast inloggade användare kunna se sidan."
|
||||
|
||||
#: contrib/flatpages/models.py:18
|
||||
#: contrib/flatpages/models.py:20
|
||||
msgid "flat page"
|
||||
msgstr "statisk sida"
|
||||
|
||||
#: contrib/flatpages/models.py:19
|
||||
#: contrib/flatpages/models.py:21
|
||||
msgid "flat pages"
|
||||
msgstr "statiska sidor"
|
||||
|
||||
#: contrib/flatpages/models.py:27
|
||||
msgid "Advanced options"
|
||||
msgstr "Avancerade inställningar"
|
||||
|
||||
# Setting these as fuzzy because they might not make sense in Swedish. Consider
|
||||
# the code's usage of them. They turn numbers such as 1 in to 1st, which isn't
|
||||
# how we do it in Swedish, we do it by textualizing the number: first, första.
|
||||
# For the time being, we'll leave these as fuzzy, IMO. // toxik
|
||||
|
||||
#: contrib/humanize/templatetags/humanize.py:19
|
||||
#,fuzzy
|
||||
msgid "th"
|
||||
msgstr ""
|
||||
msgstr ":a"
|
||||
|
||||
#: contrib/humanize/templatetags/humanize.py:19
|
||||
#,fuzzy
|
||||
msgid "st"
|
||||
msgstr ""
|
||||
msgstr ":a"
|
||||
|
||||
#: contrib/humanize/templatetags/humanize.py:19
|
||||
#,fuzzy
|
||||
msgid "nd"
|
||||
msgstr ""
|
||||
msgstr ":e"
|
||||
|
||||
#: contrib/humanize/templatetags/humanize.py:19
|
||||
#,fuzzy
|
||||
msgid "rd"
|
||||
msgstr ""
|
||||
msgstr ":e"
|
||||
|
||||
#: contrib/humanize/templatetags/humanize.py:51
|
||||
#, python-format
|
||||
@ -3551,8 +3562,7 @@ msgstr "webbplatser"
|
||||
|
||||
#: core/validators.py:72
|
||||
msgid "This value must contain only letters, numbers and underscores."
|
||||
msgstr ""
|
||||
"Detta värde får endast innehålla bokstäver, siffror och understreck."
|
||||
msgstr "Detta värde får endast innehålla bokstäver, siffror och understreck."
|
||||
|
||||
#: core/validators.py:76
|
||||
msgid ""
|
||||
@ -3600,7 +3610,7 @@ msgstr "Icke-numeriska tecken är inte tillåtna här."
|
||||
msgid "This value can't be comprised solely of digits."
|
||||
msgstr "Detta värde kan inte enbart bestå av siffror."
|
||||
|
||||
#: core/validators.py:128 newforms/fields.py:151
|
||||
#: core/validators.py:128 newforms/fields.py:152
|
||||
msgid "Enter a whole number."
|
||||
msgstr "Fyll i ett heltal."
|
||||
|
||||
@ -3617,7 +3627,7 @@ msgstr "Årtal måste vara 1900 eller senare."
|
||||
msgid "Invalid date: %s"
|
||||
msgstr "Ogiltigt datum: %s"
|
||||
|
||||
#: core/validators.py:156 db/models/fields/__init__.py:522
|
||||
#: core/validators.py:156 db/models/fields/__init__.py:548
|
||||
msgid "Enter a valid date in YYYY-MM-DD format."
|
||||
msgstr "Fyll i ett giltigt datum med formatet ÅÅÅÅ-MM-DD."
|
||||
|
||||
@ -3625,20 +3635,20 @@ msgstr "Fyll i ett giltigt datum med formatet ÅÅÅÅ-MM-DD."
|
||||
msgid "Enter a valid time in HH:MM format."
|
||||
msgstr "Fyll i ett giltigt klockslag med formatet TT:MM."
|
||||
|
||||
#: core/validators.py:165 db/models/fields/__init__.py:599
|
||||
#: core/validators.py:165 db/models/fields/__init__.py:625
|
||||
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
|
||||
msgstr "Fyll i en giltig tidpunkt med formatet ÅÅÅÅ-MM-DD TT:MM."
|
||||
|
||||
#: core/validators.py:170 newforms/fields.py:402
|
||||
#: core/validators.py:170 newforms/fields.py:403
|
||||
msgid "Enter a valid e-mail address."
|
||||
msgstr "Fyll i en giltig e-postadress."
|
||||
|
||||
#: core/validators.py:182 core/validators.py:474 newforms/fields.py:432
|
||||
#: core/validators.py:182 core/validators.py:474 newforms/fields.py:433
|
||||
#: oldforms/__init__.py:687
|
||||
msgid "No file was submitted. Check the encoding type on the form."
|
||||
msgstr "Ingen fil skickades. Kontrollera kodningnstypen i formuläret."
|
||||
|
||||
#: core/validators.py:193 newforms/fields.py:458
|
||||
#: core/validators.py:193 newforms/fields.py:459
|
||||
msgid ""
|
||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||
"corrupted image."
|
||||
@ -3874,57 +3884,57 @@ msgstr ""
|
||||
msgid "%(object)s with this %(type)s already exists for the given %(field)s."
|
||||
msgstr "%(object)s med typen %(type)s finns redan för %(field)s."
|
||||
|
||||
#: db/models/fields/__init__.py:52
|
||||
#: db/models/fields/__init__.py:54
|
||||
#, python-format
|
||||
msgid "%(optname)s with this %(fieldname)s already exists."
|
||||
msgstr "%(optname)s med detta %(fieldname)s finns redan."
|
||||
|
||||
#: db/models/fields/__init__.py:161 db/models/fields/__init__.py:322
|
||||
#: db/models/fields/__init__.py:754 db/models/fields/__init__.py:765
|
||||
#: newforms/fields.py:45 oldforms/__init__.py:374
|
||||
#: db/models/fields/__init__.py:179 db/models/fields/__init__.py:348
|
||||
#: db/models/fields/__init__.py:780 db/models/fields/__init__.py:791
|
||||
#: newforms/fields.py:46 oldforms/__init__.py:374
|
||||
msgid "This field is required."
|
||||
msgstr "Detta fält måste fyllas i."
|
||||
|
||||
#: db/models/fields/__init__.py:422
|
||||
#: db/models/fields/__init__.py:448
|
||||
msgid "This value must be an integer."
|
||||
msgstr "Detta värde måste vara ett heltal."
|
||||
|
||||
#: db/models/fields/__init__.py:461
|
||||
#: db/models/fields/__init__.py:487
|
||||
msgid "This value must be either True or False."
|
||||
msgstr "Detta värde måste vara antingen True eller False."
|
||||
|
||||
#: db/models/fields/__init__.py:485
|
||||
#: db/models/fields/__init__.py:511
|
||||
msgid "This field cannot be null."
|
||||
msgstr "Detta fält får inte vara null."
|
||||
|
||||
#: db/models/fields/__init__.py:663
|
||||
#: db/models/fields/__init__.py:689
|
||||
msgid "This value must be a decimal number."
|
||||
msgstr "Detta värde måste vara ett decimaltal."
|
||||
|
||||
#: db/models/fields/__init__.py:774
|
||||
#: db/models/fields/__init__.py:800
|
||||
msgid "Enter a valid filename."
|
||||
msgstr "Fyll i ett giltigt filnamn."
|
||||
|
||||
#: db/models/fields/__init__.py:945
|
||||
#: db/models/fields/__init__.py:981
|
||||
msgid "This value must be either None, True or False."
|
||||
msgstr "Detta värde måste vara antingen None, True eller False."
|
||||
|
||||
#: db/models/fields/related.py:93
|
||||
#: db/models/fields/related.py:94
|
||||
#, python-format
|
||||
msgid "Please enter a valid %s."
|
||||
msgstr "Var god fyll i giltig %s."
|
||||
|
||||
#: db/models/fields/related.py:694
|
||||
#: db/models/fields/related.py:721
|
||||
msgid "Separate multiple IDs with commas."
|
||||
msgstr "Separera flera ID-nummer med kommatecken."
|
||||
|
||||
#: db/models/fields/related.py:696
|
||||
#: db/models/fields/related.py:723
|
||||
msgid ""
|
||||
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
"Håll ner \"Control\" eller \"Command\" på en Mac för att välja fler än en."
|
||||
|
||||
#: db/models/fields/related.py:743
|
||||
#: db/models/fields/related.py:770
|
||||
#, python-format
|
||||
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
|
||||
msgid_plural ""
|
||||
@ -3934,101 +3944,101 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
"Var god och fyll giltiga %(self)s ID-nummer. Värdena %(value)r är ogiltiga."
|
||||
|
||||
#: newforms/fields.py:46
|
||||
#: newforms/fields.py:47
|
||||
msgid "Enter a valid value."
|
||||
msgstr "Fyll i ett giltigt värde."
|
||||
|
||||
#: newforms/fields.py:123
|
||||
#: newforms/fields.py:124
|
||||
#, python-format
|
||||
msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
|
||||
msgstr ""
|
||||
"Kontrollera att detta värde har högst %(max)d tecken (det har %(length)d)."
|
||||
|
||||
#: newforms/fields.py:124
|
||||
#: newforms/fields.py:125
|
||||
#, python-format
|
||||
msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
|
||||
msgstr ""
|
||||
"Kontrollera att detta värde har minst %(min)d tecken (det har %(length)d)."
|
||||
|
||||
#: newforms/fields.py:152 newforms/fields.py:181 newforms/fields.py:210
|
||||
#: newforms/fields.py:153 newforms/fields.py:182 newforms/fields.py:211
|
||||
#, python-format
|
||||
msgid "Ensure this value is less than or equal to %s."
|
||||
msgstr "Kontrollera att detta värde är mindre eller lika med %s."
|
||||
|
||||
#: newforms/fields.py:153 newforms/fields.py:182 newforms/fields.py:211
|
||||
#: newforms/fields.py:154 newforms/fields.py:183 newforms/fields.py:212
|
||||
#, python-format
|
||||
msgid "Ensure this value is greater than or equal to %s."
|
||||
msgstr "Kontrollera att detta värde är mer eller lika med %s."
|
||||
|
||||
#: newforms/fields.py:180 newforms/fields.py:209
|
||||
#: newforms/fields.py:181 newforms/fields.py:210
|
||||
msgid "Enter a number."
|
||||
msgstr "Fyll i ett tal."
|
||||
|
||||
#: newforms/fields.py:212
|
||||
#: newforms/fields.py:213
|
||||
#, python-format
|
||||
msgid "Ensure that there are no more than %s digits in total."
|
||||
msgstr "Kontrollera att det inte finns mer än totalt %s siffror."
|
||||
|
||||
#: newforms/fields.py:213
|
||||
#: newforms/fields.py:214
|
||||
#, python-format
|
||||
msgid "Ensure that there are no more than %s decimal places."
|
||||
msgstr "Kontrollera att det inte finns mer än %s decimaler."
|
||||
|
||||
#: newforms/fields.py:214
|
||||
#: newforms/fields.py:215
|
||||
#, python-format
|
||||
msgid "Ensure that there are no more than %s digits before the decimal point."
|
||||
msgstr "Kontrollera att det inte finns mer än %s siffror före decimaltecknet."
|
||||
|
||||
#: newforms/fields.py:262 newforms/fields.py:723
|
||||
#: newforms/fields.py:263 newforms/fields.py:751
|
||||
msgid "Enter a valid date."
|
||||
msgstr "Fyll i ett giltigt datum."
|
||||
|
||||
#: newforms/fields.py:295 newforms/fields.py:724
|
||||
#: newforms/fields.py:296 newforms/fields.py:752
|
||||
msgid "Enter a valid time."
|
||||
msgstr "Fyll i en giltig tid."
|
||||
|
||||
#: newforms/fields.py:334
|
||||
#: newforms/fields.py:335
|
||||
msgid "Enter a valid date/time."
|
||||
msgstr "Fyll i ett giltigt datum/tid."
|
||||
|
||||
#: newforms/fields.py:433
|
||||
#: newforms/fields.py:434
|
||||
msgid "No file was submitted."
|
||||
msgstr "Ingen fil skickades."
|
||||
|
||||
#: newforms/fields.py:434 oldforms/__init__.py:689
|
||||
#: newforms/fields.py:435 oldforms/__init__.py:689
|
||||
msgid "The submitted file is empty."
|
||||
msgstr "Den skickade filen är tom."
|
||||
|
||||
#: newforms/fields.py:496
|
||||
#: newforms/fields.py:497
|
||||
msgid "Enter a valid URL."
|
||||
msgstr "Fyll i en giltig URL."
|
||||
|
||||
#: newforms/fields.py:497
|
||||
#: newforms/fields.py:498
|
||||
msgid "This URL appears to be a broken link."
|
||||
msgstr "Denna URL verkar vara en trasig länk."
|
||||
|
||||
#: newforms/fields.py:559 newforms/models.py:300
|
||||
#: newforms/fields.py:560 newforms/models.py:299
|
||||
msgid "Select a valid choice. That choice is not one of the available choices."
|
||||
msgstr ""
|
||||
"Välj ett giltigt alternativ. Det valet finns inte bland tillgängliga "
|
||||
"alternativ."
|
||||
|
||||
#: newforms/fields.py:598
|
||||
#: newforms/fields.py:599
|
||||
#, python-format
|
||||
msgid "Select a valid choice. %(value)s is not one of the available choices."
|
||||
msgstr ""
|
||||
"Välj ett giltigt alternativ. %(value)s finns inte bland tillgängliga "
|
||||
"alternativ."
|
||||
|
||||
#: newforms/fields.py:599 newforms/fields.py:661 newforms/models.py:360
|
||||
#: newforms/fields.py:600 newforms/fields.py:662 newforms/models.py:371
|
||||
msgid "Enter a list of values."
|
||||
msgstr "Fyll i en lista med värden."
|
||||
|
||||
#: newforms/fields.py:752
|
||||
#: newforms/fields.py:780
|
||||
msgid "Enter a valid IPv4 address."
|
||||
msgstr "Fyll i en giltig IPv4 adress."
|
||||
|
||||
#: newforms/models.py:361
|
||||
#: newforms/models.py:372
|
||||
#, python-format
|
||||
msgid "Select a valid choice. %s is not one of the available choices."
|
||||
msgstr ""
|
||||
@ -4062,28 +4072,28 @@ msgstr "Fyll i ett positivt tal."
|
||||
msgid "Enter a whole number between 0 and 32,767."
|
||||
msgstr "Fyll i ett heltal mellan 0 och 32767."
|
||||
|
||||
#: template/defaultfilters.py:695
|
||||
#: template/defaultfilters.py:698
|
||||
msgid "yes,no,maybe"
|
||||
msgstr "ja,nej,kanske"
|
||||
|
||||
#: template/defaultfilters.py:726
|
||||
#: template/defaultfilters.py:729
|
||||
#, python-format
|
||||
msgid "%(size)d byte"
|
||||
msgid_plural "%(size)d bytes"
|
||||
msgstr[0] "%(size)d byte"
|
||||
msgstr[1] "%(size)d byte"
|
||||
|
||||
#: template/defaultfilters.py:728
|
||||
#: template/defaultfilters.py:731
|
||||
#, python-format
|
||||
msgid "%.1f KB"
|
||||
msgstr "%.1f KB"
|
||||
|
||||
#: template/defaultfilters.py:730
|
||||
#: template/defaultfilters.py:733
|
||||
#, python-format
|
||||
msgid "%.1f MB"
|
||||
msgstr "%.1f MB"
|
||||
|
||||
#: template/defaultfilters.py:731
|
||||
#: template/defaultfilters.py:734
|
||||
#, python-format
|
||||
msgid "%.1f GB"
|
||||
msgstr "%.1f GB"
|
||||
@ -4381,5 +4391,8 @@ msgstr "%(verbose_name)s uppdaterades."
|
||||
msgid "The %(verbose_name)s was deleted."
|
||||
msgstr "%(verbose_name)s togs bort."
|
||||
|
||||
#~ msgid "Brazilian"
|
||||
#~ msgstr "Brasilianska"
|
||||
|
||||
#~ msgid "Gaeilge"
|
||||
#~ msgstr "Gaeliska"
|
||||
|
@ -21,7 +21,7 @@ class Command(NoArgsCommand):
|
||||
def handle_noargs(self, **options):
|
||||
from django.db import connection, transaction, models
|
||||
from django.conf import settings
|
||||
from django.core.management.sql import table_list, installed_models, sql_model_create, sql_for_pending_references, many_to_many_sql_for_model, custom_sql_for_model, sql_indexes_for_model, emit_post_sync_signal
|
||||
from django.core.management.sql import table_names, installed_models, sql_model_create, sql_for_pending_references, many_to_many_sql_for_model, custom_sql_for_model, sql_indexes_for_model, emit_post_sync_signal
|
||||
|
||||
verbosity = int(options.get('verbosity', 1))
|
||||
interactive = options.get('interactive')
|
||||
@ -45,7 +45,7 @@ class Command(NoArgsCommand):
|
||||
table_name_converter = lambda x: x
|
||||
# Get a list of all existing database tables, so we know what needs to
|
||||
# be added.
|
||||
tables = [table_name_converter(name) for name in table_list()]
|
||||
tables = [table_name_converter(name) for name in table_names()]
|
||||
|
||||
# Get a list of already installed *models* so that references work right.
|
||||
seen_models = installed_models(tables)
|
||||
|
@ -7,13 +7,13 @@ try:
|
||||
except NameError:
|
||||
from sets import Set as set # Python 2.3 fallback
|
||||
|
||||
def table_list():
|
||||
def table_names():
|
||||
"Returns a list of all table names that exist in the database."
|
||||
from django.db import connection, get_introspection_module
|
||||
cursor = connection.cursor()
|
||||
return get_introspection_module().get_table_list(cursor)
|
||||
return set(get_introspection_module().get_table_list(cursor))
|
||||
|
||||
def django_table_list(only_existing=False):
|
||||
def django_table_names(only_existing=False):
|
||||
"""
|
||||
Returns a list of all table names that have associated Django models and
|
||||
are in INSTALLED_APPS.
|
||||
@ -22,14 +22,13 @@ def django_table_list(only_existing=False):
|
||||
that actually exist in the database.
|
||||
"""
|
||||
from django.db import models
|
||||
tables = []
|
||||
tables = set()
|
||||
for app in models.get_apps():
|
||||
for model in models.get_models(app):
|
||||
tables.append(model._meta.db_table)
|
||||
tables.extend([f.m2m_db_table() for f in model._meta.local_many_to_many])
|
||||
tables.add(model._meta.db_table)
|
||||
tables.update([f.m2m_db_table() for f in model._meta.local_many_to_many])
|
||||
if only_existing:
|
||||
existing = table_list()
|
||||
tables = [t for t in tables if t in existing]
|
||||
tables = [t for t in tables if t in table_names()]
|
||||
return tables
|
||||
|
||||
def installed_models(table_list):
|
||||
@ -82,7 +81,7 @@ def sql_create(app, style):
|
||||
# we can be conservative).
|
||||
app_models = models.get_models(app)
|
||||
final_output = []
|
||||
known_models = set([model for model in installed_models(table_list()) if model not in app_models])
|
||||
known_models = set([model for model in installed_models(table_names()) if model not in app_models])
|
||||
pending_references = {}
|
||||
|
||||
for model in app_models:
|
||||
@ -214,9 +213,9 @@ def sql_flush(style, only_django=False):
|
||||
"""
|
||||
from django.db import connection
|
||||
if only_django:
|
||||
tables = django_table_list()
|
||||
tables = django_table_names()
|
||||
else:
|
||||
tables = table_list()
|
||||
tables = table_names()
|
||||
statements = connection.ops.sql_flush(style, tables, sequence_list())
|
||||
return statements
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
from django.db import connection, transaction
|
||||
from django.db.models import signals, get_model
|
||||
from django.db.models.fields import AutoField, Field, IntegerField, PositiveIntegerField, PositiveSmallIntegerField, get_ul_class
|
||||
from django.db.models.fields import AutoField, Field, IntegerField, PositiveIntegerField, PositiveSmallIntegerField, get_ul_class, FieldDoesNotExist
|
||||
from django.db.models.related import RelatedObject
|
||||
from django.db.models.query_utils import QueryWrapper
|
||||
from django.utils.text import capfirst
|
||||
@ -165,7 +165,7 @@ class SingleRelatedObjectDescriptor(object):
|
||||
# SingleRelatedObjectDescriptor instance.
|
||||
def __init__(self, related):
|
||||
self.related = related
|
||||
self.cache_name = '_%s_cache' % related.field.name
|
||||
self.cache_name = '_%s_cache' % related.get_accessor_name()
|
||||
|
||||
def __get__(self, instance, instance_type=None):
|
||||
if instance is None:
|
||||
@ -182,14 +182,29 @@ class SingleRelatedObjectDescriptor(object):
|
||||
def __set__(self, instance, value):
|
||||
if instance is None:
|
||||
raise AttributeError, "%s must be accessed via instance" % self.related.opts.object_name
|
||||
|
||||
# The similarity of the code below to the code in
|
||||
# ReverseSingleRelatedObjectDescriptor is annoying, but there's a bunch
|
||||
# of small differences that would make a common base class convoluted.
|
||||
|
||||
# If null=True, we can assign null here, but otherwise the value needs
|
||||
# to be an instance of the related class.
|
||||
if value is None and self.related.field.null == False:
|
||||
raise ValueError('Cannot assign None: "%s.%s" does not allow null values.' %
|
||||
(instance._meta.object_name, self.related.get_accessor_name()))
|
||||
elif value is not None and not isinstance(value, self.related.model):
|
||||
raise ValueError('Cannot assign "%r": "%s.%s" must be a "%s" instance.' %
|
||||
(value, instance._meta.object_name,
|
||||
self.related.get_accessor_name(), self.related.opts.object_name))
|
||||
|
||||
# Set the value of the related field
|
||||
setattr(value, self.related.field.rel.get_related_field().attname, instance)
|
||||
|
||||
# Clear the cache, if it exists
|
||||
try:
|
||||
delattr(value, self.related.field.get_cache_name())
|
||||
except AttributeError:
|
||||
pass
|
||||
# Since we already know what the related object is, seed the related
|
||||
# object caches now, too. This avoids another db hit if you get the
|
||||
# object you just set.
|
||||
setattr(instance, self.cache_name, value)
|
||||
setattr(value, self.related.field.get_cache_name(), instance)
|
||||
|
||||
class ReverseSingleRelatedObjectDescriptor(object):
|
||||
# This class provides the functionality that makes the related-object
|
||||
@ -225,6 +240,17 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
||||
def __set__(self, instance, value):
|
||||
if instance is None:
|
||||
raise AttributeError, "%s must be accessed via instance" % self._field.name
|
||||
|
||||
# If null=True, we can assign null here, but otherwise the value needs
|
||||
# to be an instance of the related class.
|
||||
if value is None and self.field.null == False:
|
||||
raise ValueError('Cannot assign None: "%s.%s" does not allow null values.' %
|
||||
(instance._meta.object_name, self.field.name))
|
||||
elif value is not None and not isinstance(value, self.field.rel.to):
|
||||
raise ValueError('Cannot assign "%r": "%s.%s" must be a "%s" instance.' %
|
||||
(value, instance._meta.object_name,
|
||||
self.field.name, self.field.rel.to._meta.object_name))
|
||||
|
||||
# Set the value of the related field
|
||||
try:
|
||||
val = getattr(value, self.field.rel.get_related_field().attname)
|
||||
@ -232,11 +258,10 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
||||
val = None
|
||||
setattr(instance, self.field.attname, val)
|
||||
|
||||
# Clear the cache, if it exists
|
||||
try:
|
||||
delattr(instance, self.field.get_cache_name())
|
||||
except AttributeError:
|
||||
pass
|
||||
# Since we already know what the related object is, seed the related
|
||||
# object cache now, too. This avoids another db hit if you get the
|
||||
# object you just set.
|
||||
setattr(instance, self.field.get_cache_name(), value)
|
||||
|
||||
class ForeignRelatedObjectsDescriptor(object):
|
||||
# This class provides the functionality that makes the related-object
|
||||
|
@ -16,6 +16,10 @@ try:
|
||||
import thread
|
||||
except ImportError:
|
||||
import dummy_thread as thread
|
||||
try:
|
||||
from functools import wraps
|
||||
except ImportError:
|
||||
from django.utils.functional import wraps # Python 2.3, 2.4 fallback.
|
||||
from django.db import connection
|
||||
from django.conf import settings
|
||||
|
||||
@ -177,7 +181,7 @@ def autocommit(func):
|
||||
return func(*args, **kw)
|
||||
finally:
|
||||
leave_transaction_management()
|
||||
return _autocommit
|
||||
return wraps(func)(_autocommit)
|
||||
|
||||
def commit_on_success(func):
|
||||
"""
|
||||
@ -202,7 +206,7 @@ def commit_on_success(func):
|
||||
return res
|
||||
finally:
|
||||
leave_transaction_management()
|
||||
return _commit_on_success
|
||||
return wraps(func)(_commit_on_success)
|
||||
|
||||
def commit_manually(func):
|
||||
"""
|
||||
@ -219,4 +223,4 @@ def commit_manually(func):
|
||||
finally:
|
||||
leave_transaction_management()
|
||||
|
||||
return _commit_manually
|
||||
return wraps(func)(_commit_manually)
|
||||
|
@ -467,7 +467,7 @@ class FilterExpression(object):
|
||||
>>> len(fe.filters)
|
||||
2
|
||||
>>> fe.var
|
||||
'variable'
|
||||
<Variable: 'variable'>
|
||||
|
||||
This class should never be instantiated outside of the
|
||||
get_filters_from_token helper function.
|
||||
@ -598,15 +598,15 @@ class Variable(object):
|
||||
a hard-coded string (if it begins and ends with single or double quote
|
||||
marks)::
|
||||
|
||||
>>> c = {'article': {'section':'News'}}
|
||||
>>> c = {'article': {'section':u'News'}}
|
||||
>>> Variable('article.section').resolve(c)
|
||||
u'News'
|
||||
>>> Variable('article').resolve(c)
|
||||
{'section': 'News'}
|
||||
{'section': u'News'}
|
||||
>>> class AClass: pass
|
||||
>>> c = AClass()
|
||||
>>> c.article = AClass()
|
||||
>>> c.article.section = 'News'
|
||||
>>> c.article.section = u'News'
|
||||
>>> Variable('article.section').resolve(c)
|
||||
u'News'
|
||||
|
||||
|
@ -515,7 +515,7 @@ debug = register.tag(debug)
|
||||
#@register.tag(name="filter")
|
||||
def do_filter(parser, token):
|
||||
"""
|
||||
Filters the contents of the blog through variable filters.
|
||||
Filters the contents of the block through variable filters.
|
||||
|
||||
Filters can also be piped through each other, and they can have
|
||||
arguments -- just like in variable syntax.
|
||||
|
@ -46,7 +46,7 @@ def find_template_source(name, dirs=None):
|
||||
# circular import errors. See Django ticket #1292.
|
||||
global template_source_loaders
|
||||
if template_source_loaders is None:
|
||||
template_source_loaders = []
|
||||
loaders = []
|
||||
for path in settings.TEMPLATE_LOADERS:
|
||||
i = path.rfind('.')
|
||||
module, attr = path[:i], path[i+1:]
|
||||
@ -62,7 +62,8 @@ def find_template_source(name, dirs=None):
|
||||
import warnings
|
||||
warnings.warn("Your TEMPLATE_LOADERS setting includes %r, but your Python installation doesn't support that type of template loading. Consider removing that line from TEMPLATE_LOADERS." % path)
|
||||
else:
|
||||
template_source_loaders.append(func)
|
||||
loaders.append(func)
|
||||
template_source_loaders = tuple(loaders)
|
||||
for loader in template_source_loaders:
|
||||
try:
|
||||
source, display_name = loader(name, dirs)
|
||||
|
@ -18,7 +18,7 @@ def load_template_source(template_name, template_dirs=None):
|
||||
pkg_name = 'templates/' + template_name
|
||||
for app in settings.INSTALLED_APPS:
|
||||
try:
|
||||
return (resource_string(app, pkg_name), 'egg:%s:%s ' % (app, pkg_name)).decode(settings.FILE_CHARSET)
|
||||
return (resource_string(app, pkg_name).decode(settings.FILE_CHARSET), 'egg:%s:%s' % (app, pkg_name))
|
||||
except:
|
||||
pass
|
||||
raise TemplateDoesNotExist, template_name
|
||||
|
@ -1,5 +1,6 @@
|
||||
import urllib
|
||||
import sys
|
||||
import os
|
||||
from cStringIO import StringIO
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import authenticate, login
|
||||
@ -67,7 +68,7 @@ def encode_multipart(boundary, data):
|
||||
if isinstance(value, file):
|
||||
lines.extend([
|
||||
'--' + boundary,
|
||||
'Content-Disposition: form-data; name="%s"; filename="%s"' % (to_str(key), to_str(value.name)),
|
||||
'Content-Disposition: form-data; name="%s"; filename="%s"' % (to_str(key), to_str(os.path.basename(value.name))),
|
||||
'Content-Type: application/octet-stream',
|
||||
'',
|
||||
value.read()
|
||||
@ -178,10 +179,15 @@ class Client:
|
||||
if e.args != ('500.html',):
|
||||
raise
|
||||
|
||||
# Look for a signalled exception and reraise it
|
||||
# Look for a signalled exception, clear the current context
|
||||
# exception data, then re-raise the signalled exception.
|
||||
# Also make sure that the signalled exception is cleared from
|
||||
# the local cache!
|
||||
if self.exc_info:
|
||||
raise self.exc_info[1], None, self.exc_info[2]
|
||||
|
||||
exc_info = self.exc_info
|
||||
self.exc_info = None
|
||||
raise exc_info[1], None, exc_info[2]
|
||||
|
||||
# Save the client and request that stimulated the response
|
||||
response.client = self
|
||||
response.request = request
|
||||
|
@ -128,6 +128,18 @@ class TestCase(unittest.TestCase):
|
||||
self.failUnless(real_count != 0,
|
||||
"Couldn't find '%s' in response" % text)
|
||||
|
||||
def assertNotContains(self, response, text, status_code=200):
|
||||
"""
|
||||
Asserts that a response indicates that a page was retrieved
|
||||
successfully, (i.e., the HTTP status code was as expected), and that
|
||||
``text`` doesn't occurs in the content of the response.
|
||||
"""
|
||||
self.assertEqual(response.status_code, status_code,
|
||||
"Couldn't retrieve page: Response code was %d (expected %d)'" %
|
||||
(response.status_code, status_code))
|
||||
self.assertEqual(response.content.count(text), 0,
|
||||
"Response should not contain '%s'" % text)
|
||||
|
||||
def assertFormError(self, response, form, field, errors):
|
||||
"""
|
||||
Asserts that a form used to render the response has a specific field
|
||||
|
@ -118,7 +118,7 @@ def get_valid_filename(s):
|
||||
spaces are converted to underscores; and all non-filename-safe characters
|
||||
are removed.
|
||||
>>> get_valid_filename("john's portrait in 2004.jpg")
|
||||
'johns_portrait_in_2004.jpg'
|
||||
u'johns_portrait_in_2004.jpg'
|
||||
"""
|
||||
s = force_unicode(s).strip().replace(' ', '_')
|
||||
return re.sub(r'[^-A-Za-z0-9_.]', '', s)
|
||||
@ -127,15 +127,15 @@ get_valid_filename = allow_lazy(get_valid_filename, unicode)
|
||||
def get_text_list(list_, last_word=ugettext_lazy(u'or')):
|
||||
"""
|
||||
>>> get_text_list(['a', 'b', 'c', 'd'])
|
||||
'a, b, c or d'
|
||||
u'a, b, c or d'
|
||||
>>> get_text_list(['a', 'b', 'c'], 'and')
|
||||
'a, b and c'
|
||||
u'a, b and c'
|
||||
>>> get_text_list(['a', 'b'], 'and')
|
||||
'a and b'
|
||||
u'a and b'
|
||||
>>> get_text_list(['a'])
|
||||
'a'
|
||||
u'a'
|
||||
>>> get_text_list([])
|
||||
''
|
||||
u''
|
||||
"""
|
||||
if len(list_) == 0: return u''
|
||||
if len(list_) == 1: return force_unicode(list_[0])
|
||||
@ -198,14 +198,18 @@ javascript_quote = allow_lazy(javascript_quote, unicode)
|
||||
|
||||
smart_split_re = re.compile('("(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'|[^\\s]+)')
|
||||
def smart_split(text):
|
||||
"""
|
||||
r"""
|
||||
Generator that splits a string by spaces, leaving quoted phrases together.
|
||||
Supports both single and double quotes, and supports escaping quotes with
|
||||
backslashes. In the output, strings will keep their initial and trailing
|
||||
quote marks.
|
||||
|
||||
>>> list(smart_split('This is "a person\'s" test.'))
|
||||
['This', 'is', '"a person\'s"', 'test.']
|
||||
>>> list(smart_split(r'This is "a person\'s" test.'))
|
||||
[u'This', u'is', u'"a person\\\'s"', u'test.']
|
||||
>>> list(smart_split(r"Another 'person\'s' test."))
|
||||
[u'Another', u"'person's'", u'test.']
|
||||
>>> list(smart_split(r'A "\"funky\" style" test.'))
|
||||
[u'A', u'""funky" style"', u'test.']
|
||||
"""
|
||||
text = force_unicode(text)
|
||||
for bit in smart_split_re.finditer(text):
|
||||
|
@ -1061,7 +1061,12 @@ they query the database each time they're called.
|
||||
Returns the object matching the given lookup parameters, which should be in
|
||||
the format described in `Field lookups`_.
|
||||
|
||||
``get()`` raises ``AssertionError`` if more than one object was found.
|
||||
``get()`` raises ``MultipleObjectsReturned`` if more than one object was found.
|
||||
The ``MultipleObjectsReturned`` exception is an attribute of the model class.
|
||||
For example, the following will raise ``MultipleObjectsReturned`` if there
|
||||
are more than one authors with the name of 'John'::
|
||||
|
||||
Author.objects.get(name='John') # raises Author.MultipleObjectsReturned
|
||||
|
||||
``get()`` raises a ``DoesNotExist`` exception if an object wasn't found for the
|
||||
given parameters. The ``DoesNotExist`` exception is an attribute of the model
|
||||
|
@ -66,6 +66,17 @@ resort.
|
||||
|
||||
For more on middleware, read the `middleware docs`_.
|
||||
|
||||
.. admonition:: Ensure that your 404 template works
|
||||
|
||||
Note that the ``FlatpageFallbackMiddleware`` only steps in once
|
||||
another view has successfully produced a 404 response. If another
|
||||
view or middleware class attempts to produce a 404 but ends up
|
||||
raising an exception instead (such as a ``TemplateDoesNotExist``
|
||||
exception if your site does not have an appropriate template to
|
||||
use for HTTP 404 responses), the response will become an HTTP 500
|
||||
("Internal Server Error") and the ``FlatpageFallbackMiddleware``
|
||||
will not attempt to serve a flat page.
|
||||
|
||||
.. _SITE_ID: ../settings/#site-id
|
||||
.. _RequestContext: ../templates_python/#subclassing-context-djangocontext
|
||||
.. _middleware docs: ../middleware/
|
||||
|
@ -143,11 +143,14 @@ Further resources
|
||||
|
||||
* PDFlib_ is another PDF-generation library that has Python bindings. To
|
||||
use it with Django, just use the same concepts explained in this article.
|
||||
* `Pisa HTML2PDF`_ is yet another PDF-generation library. Pisa ships with
|
||||
an example of how to integrate Pisa with Django.
|
||||
* HTMLdoc_ is a command-line script that can convert HTML to PDF. It
|
||||
doesn't have a Python interface, but you can escape out to the shell
|
||||
using ``system`` or ``popen`` and retrieve the output in Python.
|
||||
* `forge_fdf in Python`_ is a library that fills in PDF forms.
|
||||
|
||||
.. _PDFlib: http://www.pdflib.org/
|
||||
.. _`Pisa HTML2PDF`: http://www.htmltopdf.org/
|
||||
.. _HTMLdoc: http://www.htmldoc.org/
|
||||
.. _forge_fdf in Python: http://www.accesspdf.com/article.php/20050421092951834
|
||||
|
@ -112,7 +112,7 @@ Django "ships" with a few included serializers:
|
||||
strings, etc.). Not really all that useful on its own, but
|
||||
used as a base for other serializers.
|
||||
|
||||
``yaml`` Serializes to YAML (Yet Another Markup Lanuage). This
|
||||
``yaml`` Serializes to YAML (YAML Ain't a Markup Language). This
|
||||
serializer is only available if PyYAML_ is installed.
|
||||
========== ==============================================================
|
||||
|
||||
|
@ -822,6 +822,10 @@ useful for testing Web applications:
|
||||
that ``text`` appears in the content of the response. If ``count`` is
|
||||
provided, ``text`` must occur exactly ``count`` times in the response.
|
||||
|
||||
``assertNotContains(response, text, status_code=200)``
|
||||
Asserts that a ``Response`` instance produced the given ``status_code`` and
|
||||
that ``text`` does not appears in the content of the response.
|
||||
|
||||
``assertFormError(response, form, field, errors)``
|
||||
Asserts that a field on a form raises the provided list of errors when
|
||||
rendered on the form.
|
||||
@ -837,6 +841,12 @@ useful for testing Web applications:
|
||||
``errors`` is an error string, or a list of error strings, that are
|
||||
expected as a result of form validation.
|
||||
|
||||
``assertTemplateUsed(response, template_name)``
|
||||
Asserts that the template with the given name was used in rendering the
|
||||
response.
|
||||
|
||||
The name is a string such as ``'admin/index.html'``.
|
||||
|
||||
``assertTemplateNotUsed(response, template_name)``
|
||||
Asserts that the template with the given name was *not* used in rendering
|
||||
the response.
|
||||
@ -846,12 +856,6 @@ useful for testing Web applications:
|
||||
it redirected to ``expected_url`` (including any GET data), and the subsequent
|
||||
page was received with ``target_status_code``.
|
||||
|
||||
``assertTemplateUsed(response, template_name)``
|
||||
Asserts that the template with the given name was used in rendering the
|
||||
response.
|
||||
|
||||
The name is a string such as ``'admin/index.html'``.
|
||||
|
||||
E-mail services
|
||||
---------------
|
||||
|
||||
|
@ -157,10 +157,10 @@ The URLconf searches against the requested URL, as a normal Python string. This
|
||||
does not include GET or POST parameters, or the domain name.
|
||||
|
||||
For example, in a request to ``http://www.example.com/myapp/``, the URLconf
|
||||
will look for ``/myapp/``.
|
||||
will look for ``myapp/``.
|
||||
|
||||
In a request to ``http://www.example.com/myapp/?page=3``, the URLconf will look
|
||||
for ``/myapp/``.
|
||||
for ``myapp/``.
|
||||
|
||||
The URLconf doesn't look at the request method. In other words, all request
|
||||
methods -- ``POST``, ``GET``, ``HEAD``, etc. -- will be routed to the same
|
||||
|
@ -401,8 +401,9 @@ True
|
||||
|
||||
# The 'select' argument to extra() supports names with dashes in them, as long
|
||||
# as you use values().
|
||||
>>> Article.objects.filter(pub_date__year=2008).extra(select={'dashed-value': '1'}).values('headline', 'dashed-value')
|
||||
[{'headline': u'Article 11', 'dashed-value': 1}, {'headline': u'Article 12', 'dashed-value': 1}]
|
||||
>>> dicts = Article.objects.filter(pub_date__year=2008).extra(select={'dashed-value': '1'}).values('headline', 'dashed-value')
|
||||
>>> [sorted(d.items()) for d in dicts]
|
||||
[[('dashed-value', 1), ('headline', u'Article 11')], [('dashed-value', 1), ('headline', u'Article 12')]]
|
||||
|
||||
# If you use 'select' with extra() and names containing dashes on a query
|
||||
# that's *not* a values() query, those extra 'select' values will silently be
|
||||
|
@ -80,11 +80,8 @@ DoesNotExist: Restaurant matching query does not exist.
|
||||
>>> r.place
|
||||
<Place: Ace Hardware the place>
|
||||
|
||||
# Set the place back again, using assignment in the reverse direction. Need to
|
||||
# reload restaurant object first, because the reverse set can't update the
|
||||
# existing restaurant instance
|
||||
# Set the place back again, using assignment in the reverse direction.
|
||||
>>> p1.restaurant = r
|
||||
>>> r.save()
|
||||
>>> p1.restaurant
|
||||
<Restaurant: Demon Dogs the restaurant>
|
||||
|
||||
|
@ -110,8 +110,9 @@ __test__ = {'API_TESTS':"""
|
||||
>>> Article.objects.filter(Q(headline__startswith='Hello') | Q(headline__contains='bye')).count()
|
||||
3
|
||||
|
||||
>>> list(Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye')).values())
|
||||
[{'headline': u'Hello and goodbye', 'pub_date': datetime.datetime(2005, 11, 29, 0, 0), 'id': 3}]
|
||||
>>> dicts = list(Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye')).values())
|
||||
>>> [sorted(d.items()) for d in dicts]
|
||||
[[('headline', u'Hello and goodbye'), ('id', 3), ('pub_date', datetime.datetime(2005, 11, 29, 0, 0))]]
|
||||
|
||||
>>> Article.objects.filter(Q(headline__startswith='Hello')).in_bulk([1,2])
|
||||
{1: <Article: Hello>}
|
||||
|
@ -34,5 +34,23 @@
|
||||
"email": "testclient@example.com",
|
||||
"date_joined": "2006-12-17 07:03:31"
|
||||
}
|
||||
},
|
||||
{
|
||||
"pk": "3",
|
||||
"model": "auth.user",
|
||||
"fields": {
|
||||
"username": "staff",
|
||||
"first_name": "Staff",
|
||||
"last_name": "Member",
|
||||
"is_active": true,
|
||||
"is_superuser": false,
|
||||
"is_staff": true,
|
||||
"last_login": "2006-12-17 07:03:31",
|
||||
"groups": [],
|
||||
"user_permissions": [],
|
||||
"password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
|
||||
"email": "testclient@example.com",
|
||||
"date_joined": "2006-12-17 07:03:31"
|
||||
}
|
||||
}
|
||||
]
|
@ -226,15 +226,17 @@ u'some <b>html</b> with alert("You smell") disallowed tags'
|
||||
>>> striptags(u'some <b>html</b> with <script>alert("You smell")</script> disallowed <img /> tags')
|
||||
u'some html with alert("You smell") disallowed tags'
|
||||
|
||||
>>> dictsort([{'age': 23, 'name': 'Barbara-Ann'},
|
||||
... {'age': 63, 'name': 'Ra Ra Rasputin'},
|
||||
... {'name': 'Jonny B Goode', 'age': 18}], 'age')
|
||||
[{'age': 18, 'name': 'Jonny B Goode'}, {'age': 23, 'name': 'Barbara-Ann'}, {'age': 63, 'name': 'Ra Ra Rasputin'}]
|
||||
>>> sorted_dicts = dictsort([{'age': 23, 'name': 'Barbara-Ann'},
|
||||
... {'age': 63, 'name': 'Ra Ra Rasputin'},
|
||||
... {'name': 'Jonny B Goode', 'age': 18}], 'age')
|
||||
>>> [sorted(dict.items()) for dict in sorted_dicts]
|
||||
[[('age', 18), ('name', 'Jonny B Goode')], [('age', 23), ('name', 'Barbara-Ann')], [('age', 63), ('name', 'Ra Ra Rasputin')]]
|
||||
|
||||
>>> dictsortreversed([{'age': 23, 'name': 'Barbara-Ann'},
|
||||
... {'age': 63, 'name': 'Ra Ra Rasputin'},
|
||||
... {'name': 'Jonny B Goode', 'age': 18}], 'age')
|
||||
[{'age': 63, 'name': 'Ra Ra Rasputin'}, {'age': 23, 'name': 'Barbara-Ann'}, {'age': 18, 'name': 'Jonny B Goode'}]
|
||||
>>> sorted_dicts = dictsortreversed([{'age': 23, 'name': 'Barbara-Ann'},
|
||||
... {'age': 63, 'name': 'Ra Ra Rasputin'},
|
||||
... {'name': 'Jonny B Goode', 'age': 18}], 'age')
|
||||
>>> [sorted(dict.items()) for dict in sorted_dicts]
|
||||
[[('age', 63), ('name', 'Ra Ra Rasputin')], [('age', 23), ('name', 'Barbara-Ann')], [('age', 18), ('name', 'Jonny B Goode')]]
|
||||
|
||||
>>> first([0,1,2])
|
||||
0
|
||||
|
@ -1,3 +1,7 @@
|
||||
"""
|
||||
Regression tests for a few FK bugs: #1578, #6886
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
|
||||
# If ticket #1578 ever slips back in, these models will not be able to be
|
||||
@ -25,10 +29,48 @@ class Child(models.Model):
|
||||
|
||||
|
||||
__test__ = {'API_TESTS':"""
|
||||
>>> Third.AddManipulator().save(dict(id='3', name='An example', another=None))
|
||||
>>> Third.objects.create(id='3', name='An example')
|
||||
<Third: Third object>
|
||||
>>> parent = Parent(name = 'fred')
|
||||
>>> parent.save()
|
||||
>>> Child.AddManipulator().save(dict(name='bam-bam', parent=parent.id))
|
||||
>>> Child.objects.create(name='bam-bam', parent=parent)
|
||||
<Child: Child object>
|
||||
|
||||
#
|
||||
# Tests of ForeignKey assignment and the related-object cache (see #6886)
|
||||
#
|
||||
>>> p = Parent.objects.create(name="Parent")
|
||||
>>> c = Child.objects.create(name="Child", parent=p)
|
||||
|
||||
# Look up the object again so that we get a "fresh" object
|
||||
>>> c = Child.objects.get(name="Child")
|
||||
>>> p = c.parent
|
||||
|
||||
# Accessing the related object again returns the exactly same object
|
||||
>>> c.parent is p
|
||||
True
|
||||
|
||||
# But if we kill the cache, we get a new object
|
||||
>>> del c._parent_cache
|
||||
>>> c.parent is p
|
||||
False
|
||||
|
||||
# Assigning a new object results in that object getting cached immediately
|
||||
>>> p2 = Parent.objects.create(name="Parent 2")
|
||||
>>> c.parent = p2
|
||||
>>> c.parent is p2
|
||||
True
|
||||
|
||||
# Assigning None fails: Child.parent is null=False
|
||||
>>> c.parent = None
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Cannot assign None: "Child.parent" does not allow null values.
|
||||
|
||||
# You also can't assign an object of the wrong type here
|
||||
>>> c.parent = First(id=1, second=1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Cannot assign "<First: First object>": "Child.parent" must be a "Parent" instance.
|
||||
|
||||
"""}
|
||||
|
@ -15,6 +15,13 @@ class Restaurant(models.Model):
|
||||
def __unicode__(self):
|
||||
return u"%s the restaurant" % self.place.name
|
||||
|
||||
class Bar(models.Model):
|
||||
place = models.OneToOneField(Place)
|
||||
serves_cocktails = models.BooleanField()
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the bar" % self.place.name
|
||||
|
||||
class Favorites(models.Model):
|
||||
name = models.CharField(max_length = 50)
|
||||
restaurants = models.ManyToManyField(Restaurant)
|
||||
@ -34,4 +41,51 @@ __test__ = {'API_TESTS':"""
|
||||
>>> f.restaurants = [r]
|
||||
>>> f.restaurants.all()
|
||||
[<Restaurant: Demon Dogs the restaurant>]
|
||||
|
||||
# Regression test for #7173: Check that the name of the cache for the
|
||||
# reverse object is correct.
|
||||
>>> b = Bar(place=p1, serves_cocktails=False)
|
||||
>>> b.save()
|
||||
>>> p1.restaurant
|
||||
<Restaurant: Demon Dogs the restaurant>
|
||||
>>> p1.bar
|
||||
<Bar: Demon Dogs the bar>
|
||||
|
||||
#
|
||||
# Regression test for #6886 (the related-object cache)
|
||||
#
|
||||
|
||||
# Look up the objects again so that we get "fresh" objects
|
||||
>>> p = Place.objects.get(name="Demon Dogs")
|
||||
>>> r = p.restaurant
|
||||
|
||||
# Accessing the related object again returns the exactly same object
|
||||
>>> p.restaurant is r
|
||||
True
|
||||
|
||||
# But if we kill the cache, we get a new object
|
||||
>>> del p._restaurant_cache
|
||||
>>> p.restaurant is r
|
||||
False
|
||||
|
||||
# Reassigning the Restaurant object results in an immediate cache update
|
||||
# We can't use a new Restaurant because that'll violate one-to-one, but
|
||||
# with a new *instance* the is test below will fail if #6886 regresses.
|
||||
>>> r2 = Restaurant.objects.get(pk=r.pk)
|
||||
>>> p.restaurant = r2
|
||||
>>> p.restaurant is r2
|
||||
True
|
||||
|
||||
# Assigning None fails: Place.restaurant is null=False
|
||||
>>> p.restaurant = None
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Cannot assign None: "Place.restaurant" does not allow null values.
|
||||
|
||||
# You also can't assign an object of the wrong type here
|
||||
>>> p.restaurant = p
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Cannot assign "<Place: Demon Dogs the place>": "Place.restaurant" must be a "Restaurant" instance.
|
||||
|
||||
"""}
|
||||
|
@ -503,8 +503,9 @@ True
|
||||
|
||||
# Despite having some extra aliases in the query, we can still omit them in a
|
||||
# values() query.
|
||||
>>> qs.values('id', 'rank').order_by('id')
|
||||
[{'id': 1, 'rank': 2}, {'id': 2, 'rank': 1}, {'id': 3, 'rank': 3}]
|
||||
>>> dicts = qs.values('id', 'rank').order_by('id')
|
||||
>>> [sorted(d.items()) for d in dicts]
|
||||
[[('id', 1), ('rank', 2)], [('id', 2), ('rank', 1)], [('id', 3), ('rank', 3)]]
|
||||
|
||||
Bugs #2874, #3002
|
||||
>>> qs = Item.objects.select_related().order_by('note__note', 'name')
|
||||
|
92
tests/regressiontests/templates/loaders.py
Normal file
92
tests/regressiontests/templates/loaders.py
Normal file
@ -0,0 +1,92 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Test cases for the template loaders
|
||||
"""
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
if __name__ == '__main__':
|
||||
settings.configure()
|
||||
|
||||
import unittest
|
||||
import sys
|
||||
import pkg_resources
|
||||
import imp
|
||||
import StringIO
|
||||
|
||||
from django.template import TemplateDoesNotExist
|
||||
from django.template.loaders.eggs import load_template_source as lts_egg
|
||||
|
||||
#Mock classes and objects for pkg_resources functions
|
||||
class MockProvider(pkg_resources.NullProvider):
|
||||
def __init__(self, module):
|
||||
pkg_resources.NullProvider.__init__(self, module)
|
||||
self.module = module
|
||||
|
||||
def _has(self, path):
|
||||
return path in self.module._resources
|
||||
|
||||
def _isdir(self,path):
|
||||
return False
|
||||
|
||||
def get_resource_stream(self, manager, resource_name):
|
||||
return self.module._resources[resource_name]
|
||||
|
||||
def _get(self, path):
|
||||
return self.module._resources[path].read()
|
||||
|
||||
class MockLoader(object): pass
|
||||
|
||||
def create_egg(name, resources):
|
||||
"""
|
||||
Creates a mock egg with a list of resources
|
||||
|
||||
name: The name of the module
|
||||
resources: A dictionary of resources. Keys are the names and values the the data.
|
||||
"""
|
||||
egg = imp.new_module(name)
|
||||
egg.__loader__ = MockLoader()
|
||||
egg._resources = resources
|
||||
sys.modules[name] = egg
|
||||
|
||||
|
||||
class EggLoader(unittest.TestCase):
|
||||
def setUp(self):
|
||||
pkg_resources._provider_factories[MockLoader] = MockProvider
|
||||
|
||||
self.empty_egg = create_egg("egg_empty", {})
|
||||
self.egg_1 = create_egg("egg_1", {
|
||||
'templates/y.html' : StringIO.StringIO("y"),
|
||||
'templates/x.txt' : StringIO.StringIO("x"),
|
||||
})
|
||||
self._old_installed_apps = settings.INSTALLED_APPS
|
||||
settings.INSTALLED_APPS = []
|
||||
|
||||
def tearDown(self):
|
||||
settings.INSTALLED_APPS = self._old_installed_apps
|
||||
|
||||
def test_empty(self):
|
||||
"Loading any template on an empty egg should fail"
|
||||
settings.INSTALLED_APPS = ['egg_empty']
|
||||
self.assertRaises(TemplateDoesNotExist, lts_egg, "not-existing.html")
|
||||
|
||||
def test_non_existing(self):
|
||||
"Template loading fails if the template is not in the egg"
|
||||
settings.INSTALLED_APPS = ['egg_1']
|
||||
self.assertRaises(TemplateDoesNotExist, lts_egg, "not-existing.html")
|
||||
|
||||
def test_existing(self):
|
||||
"A template can be loaded from an egg"
|
||||
settings.INSTALLED_APPS = ['egg_1']
|
||||
contents, template_name = lts_egg("y.html")
|
||||
self.assertEqual(contents, "y")
|
||||
self.assertEqual(template_name, "egg:egg_1:templates/y.html")
|
||||
|
||||
def test_not_installed(self):
|
||||
"Loading an existent template from an egg not included in INSTALLED_APPS should fail"
|
||||
settings.INSTALLED_APPS = []
|
||||
self.assertRaises(TemplateDoesNotExist, lts_egg, "y.html")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
@ -19,12 +19,15 @@ from django.utils.tzinfo import LocalTimezone
|
||||
|
||||
from unicode import unicode_tests
|
||||
from context import context_tests
|
||||
|
||||
from loaders import *
|
||||
|
||||
import filters
|
||||
|
||||
# Some other tests we would like to run
|
||||
__test__ = {
|
||||
'unicode': unicode_tests,
|
||||
'context': context_tests,
|
||||
'unicode': unicode_tests,
|
||||
'context': context_tests
|
||||
}
|
||||
|
||||
#################################
|
||||
|
@ -16,5 +16,41 @@
|
||||
"email": "testclient@example.com",
|
||||
"date_joined": "2006-12-17 07:03:31"
|
||||
}
|
||||
},
|
||||
{
|
||||
"pk": "2",
|
||||
"model": "auth.user",
|
||||
"fields": {
|
||||
"username": "inactive",
|
||||
"first_name": "Inactive",
|
||||
"last_name": "User",
|
||||
"is_active": false,
|
||||
"is_superuser": false,
|
||||
"is_staff": false,
|
||||
"last_login": "2006-12-17 07:03:31",
|
||||
"groups": [],
|
||||
"user_permissions": [],
|
||||
"password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
|
||||
"email": "testclient@example.com",
|
||||
"date_joined": "2006-12-17 07:03:31"
|
||||
}
|
||||
},
|
||||
{
|
||||
"pk": "3",
|
||||
"model": "auth.user",
|
||||
"fields": {
|
||||
"username": "staff",
|
||||
"first_name": "Staff",
|
||||
"last_name": "Member",
|
||||
"is_active": true,
|
||||
"is_superuser": false,
|
||||
"is_staff": true,
|
||||
"last_login": "2006-12-17 07:03:31",
|
||||
"groups": [],
|
||||
"user_permissions": [],
|
||||
"password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
|
||||
"email": "testclient@example.com",
|
||||
"date_joined": "2006-12-17 07:03:31"
|
||||
}
|
||||
}
|
||||
]
|
@ -4,6 +4,7 @@ Regression tests for the Test Client, especially the customized assertions.
|
||||
"""
|
||||
from django.test import Client, TestCase
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.exceptions import SuspiciousOperation
|
||||
import os
|
||||
|
||||
class AssertContainsTests(TestCase):
|
||||
@ -11,12 +12,18 @@ class AssertContainsTests(TestCase):
|
||||
"Responses can be inspected for content, including counting repeated substrings"
|
||||
response = self.client.get('/test_client_regress/no_template_view/')
|
||||
|
||||
self.assertNotContains(response, 'never')
|
||||
self.assertContains(response, 'never', 0)
|
||||
self.assertContains(response, 'once')
|
||||
self.assertContains(response, 'once', 1)
|
||||
self.assertContains(response, 'twice')
|
||||
self.assertContains(response, 'twice', 2)
|
||||
|
||||
try:
|
||||
self.assertNotContains(response, 'once')
|
||||
except AssertionError, e:
|
||||
self.assertEquals(str(e), "Response should not contain 'once'")
|
||||
|
||||
try:
|
||||
self.assertContains(response, 'never', 1)
|
||||
except AssertionError, e:
|
||||
@ -288,4 +295,26 @@ class URLEscapingTests(TestCase):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.content, 'Hi, Arthur')
|
||||
|
||||
class ExceptionTests(TestCase):
|
||||
fixtures = ['testdata.json']
|
||||
|
||||
def test_exception_cleared(self):
|
||||
"#5836 - A stale user exception isn't re-raised by the test client."
|
||||
|
||||
login = self.client.login(username='testclient',password='password')
|
||||
self.failUnless(login, 'Could not log in')
|
||||
try:
|
||||
response = self.client.get("/test_client_regress/staff_only/")
|
||||
self.fail("General users should not be able to visit this page")
|
||||
except SuspiciousOperation:
|
||||
pass
|
||||
|
||||
# At this point, an exception has been raised, and should be cleared.
|
||||
|
||||
# This next operation should be successful; if it isn't we have a problem.
|
||||
login = self.client.login(username='staff', password='password')
|
||||
self.failUnless(login, 'Could not log in')
|
||||
try:
|
||||
self.client.get("/test_client_regress/staff_only/")
|
||||
except SuspiciousOperation:
|
||||
self.fail("Staff should be able to visit this page")
|
||||
|
@ -4,6 +4,7 @@ import views
|
||||
urlpatterns = patterns('',
|
||||
(r'^no_template_view/$', views.no_template_view),
|
||||
(r'^file_upload/$', views.file_upload_view),
|
||||
(r'^staff_only/$', views.staff_only_view),
|
||||
(r'^get_view/$', views.get_view),
|
||||
url(r'^arg_view/(?P<name>.+)/$', views.view_with_argument, name='arg_view'),
|
||||
(r'^login_protected_redirect_view/$', views.login_protected_redirect_view)
|
||||
|
@ -1,5 +1,8 @@
|
||||
import os
|
||||
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseServerError
|
||||
from django.core.exceptions import SuspiciousOperation
|
||||
|
||||
def no_template_view(request):
|
||||
"A simple view that expects a GET request, and returns a rendered template"
|
||||
@ -13,10 +16,21 @@ def file_upload_view(request):
|
||||
form_data = request.POST.copy()
|
||||
form_data.update(request.FILES)
|
||||
if isinstance(form_data['file_field'], dict) and isinstance(form_data['name'], unicode):
|
||||
# If a file is posted, the dummy client should only post the file name,
|
||||
# not the full path.
|
||||
if os.path.dirname(form_data['file_field']['filename']) != '':
|
||||
return HttpResponseServerError()
|
||||
return HttpResponse('')
|
||||
else:
|
||||
return HttpResponseServerError()
|
||||
|
||||
def staff_only_view(request):
|
||||
"A view that can only be visited by staff. Non staff members get an exception"
|
||||
if request.user.is_staff:
|
||||
return HttpResponse('')
|
||||
else:
|
||||
raise SuspiciousOperation()
|
||||
|
||||
def get_view(request):
|
||||
"A simple login protected view"
|
||||
return HttpResponse("Hello world")
|
||||
|
@ -118,7 +118,6 @@ def django_tests(verbosity, interactive, test_labels):
|
||||
get_apps()
|
||||
|
||||
# Load all the test model apps.
|
||||
test_models = []
|
||||
for model_dir, model_name in get_test_models():
|
||||
model_label = '.'.join([model_dir, model_name])
|
||||
try:
|
||||
@ -143,7 +142,13 @@ def django_tests(verbosity, interactive, test_labels):
|
||||
if not test_labels or model_name in test_labels:
|
||||
print >> sys.stderr,'****', model_label
|
||||
extra_tests.append(InvalidModelTestCase(model_label))
|
||||
|
||||
try:
|
||||
# Invalid models are not working apps, so we cannot pass them into
|
||||
# the test runner with the other test_labels
|
||||
test_labels.remove(model_name)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# Run the test suite, including the extra validation tests.
|
||||
from django.test.simple import run_tests
|
||||
failures = run_tests(test_labels, verbosity=verbosity, interactive=interactive, extra_tests=extra_tests)
|
||||
|
Loading…
x
Reference in New Issue
Block a user