diff --git a/AUTHORS b/AUTHORS
index 6c9a7d40db..2329c8b86b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -59,6 +59,7 @@ answer newbie questions, and generally made Django that much better:
Arthur
David Avsajanishvili
axiak@mit.edu
+ Niran Babalola
Morten Bagai
Mikaël Barbero
Jiri Barton
@@ -145,6 +146,7 @@ answer newbie questions, and generally made Django that much better:
Jorge Gajon
gandalf@owca.info
Marc Garcia
+ Alex Gaynor
Andy Gayton
Baishampayan Ghose
Dimitris Glezos
@@ -243,6 +245,7 @@ answer newbie questions, and generally made Django that much better:
michael.mcewan@gmail.com
michal@plovarna.cz
Mikko Hellsing
+ Daniel Lindsley
Orestis Markou
Slawek Mikula
mitakummaa@gmail.com
@@ -256,6 +259,7 @@ answer newbie questions, and generally made Django that much better:
Robin Munn
Robert Myers
Nebojša Dorđević
+ Doug Napoleone
Gopal Narayanan
Fraser Nevett
Sam Newman
@@ -269,6 +273,7 @@ answer newbie questions, and generally made Django that much better:
Barry Pederson
permonik@mesias.brnonet.cz
petr.marhoun@gmail.com
+ peter@mymart.com
pgross@thoughtworks.com
phaedo
phil@produxion.net
@@ -307,6 +312,7 @@ answer newbie questions, and generally made Django that much better:
serbaut@gmail.com
John Shaffer
Pete Shinners
+ Leo Shklovskii
jason.sidabras@gmail.com
Jozko Skrablin
Ben Slavin
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 6be789a853..3917d40943 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -287,7 +287,7 @@ SESSION_COOKIE_PATH = '/' # The path of the sessio
SESSION_SAVE_EVERY_REQUEST = False # Whether to save the session data on every request.
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Whether sessions expire when a user closes his browser.
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # The module to store session data
-SESSION_FILE_PATH = '/tmp/' # Directory to store session files if using the file session module
+SESSION_FILE_PATH = None # Directory to store session files if using the file session module. If set to None the backend will use a sensible default.
#########
# CACHE #
diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo
index 683848a50d..226c64c560 100644
Binary files a/django/conf/locale/de/LC_MESSAGES/django.mo and b/django/conf/locale/de/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po
index 1601d2c3b2..754c840de0 100644
--- a/django/conf/locale/de/LC_MESSAGES/django.po
+++ b/django/conf/locale/de/LC_MESSAGES/django.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-03 15:46+0100\n"
+"POT-Creation-Date: 2008-03-18 15:10-0500\n"
"PO-Revision-Date: 2008-03-03 16:10+0100\n"
-"Last-Translator: Michael Radziej \n"
+"Last-Translator: Jannis Leidel \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,7 +18,6 @@ msgstr ""
"X-Poedit-Country: GERMANY\n"
"X-Poedit-SourceCharset: utf-8\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: KBabel 1.11.4\n"
#: conf/global_settings.py:39
msgid "Arabic"
@@ -217,10 +216,8 @@ msgstr ""
"
Nach %s:
\n"
"
\n"
-#: contrib/admin/filterspecs.py:74
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
+#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
msgid "All"
msgstr "Alle"
@@ -244,20 +241,17 @@ msgstr "Diesen Monat"
msgid "This year"
msgstr "Dieses Jahr"
-#: contrib/admin/filterspecs.py:147
-#: newforms/widgets.py:231
+#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231
#: oldforms/__init__.py:592
msgid "Yes"
msgstr "Ja"
-#: contrib/admin/filterspecs.py:147
-#: newforms/widgets.py:231
+#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231
#: oldforms/__init__.py:592
msgid "No"
msgstr "Nein"
-#: contrib/admin/filterspecs.py:154
-#: newforms/widgets.py:231
+#: contrib/admin/filterspecs.py:154 newforms/widgets.py:231
#: oldforms/__init__.py:592
msgid "Unknown"
msgstr "Unbekannt"
@@ -297,7 +291,8 @@ msgstr "Seite nicht gefunden"
#: contrib/admin/templates/admin/404.html:10
msgid "We're sorry, but the requested page could not be found."
-msgstr "Es tut uns leid, aber die angeforderte Seite konnte nicht gefunden werden."
+msgstr ""
+"Es tut uns leid, aber die angeforderte Seite konnte nicht gefunden werden."
#: contrib/admin/templates/admin/500.html:4
#: contrib/admin/templates/admin/base.html:37
@@ -329,8 +324,13 @@ msgid "Server Error (500)"
msgstr "Serverfehler (500)"
#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Ein Fehler ist aufgetreten. Dieser Fehler wurde an die Serververwalter per E-Mail weitergegeben und sollte bald behoben sein. Vielen Dank für Ihr Verständnis."
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Ein Fehler ist aufgetreten. Dieser Fehler wurde an die Serververwalter per E-"
+"Mail weitergegeben und sollte bald behoben sein. Vielen Dank für Ihr "
+"Verständnis."
#: contrib/admin/templates/admin/base.html:26
msgid "Welcome,"
@@ -401,13 +401,23 @@ msgstr "Löschen"
#: contrib/admin/templates/admin/delete_confirmation.html:13
#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Die Löschung des %(object_name)s '%(escaped_object)s' hätte die Löschung von abhängigen Daten zur Folge, aber Sie haben nicht die nötigen Rechte um die folgenden abhängigen Daten zu löschen:"
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"Die Löschung des %(object_name)s '%(escaped_object)s' hätte die Löschung von "
+"abhängigen Daten zur Folge, aber Sie haben nicht die nötigen Rechte um die "
+"folgenden abhängigen Daten zu löschen:"
#: contrib/admin/templates/admin/delete_confirmation.html:20
#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "Sind Sie sicher, dass Sie %(object_name)s \"%(escaped_object)s\" löschen wollen? Es werden zusätzlich die folgenden abhängigen Daten mit gelöscht:"
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"Sind Sie sicher, dass Sie %(object_name)s \"%(escaped_object)s\" löschen "
+"wollen? Es werden zusätzlich die folgenden abhängigen Daten mit gelöscht:"
#: contrib/admin/templates/admin/delete_confirmation.html:25
msgid "Yes, I'm sure"
@@ -438,7 +448,7 @@ msgstr "Ändern"
#: contrib/admin/templates/admin/index.html:44
msgid "You don't have permission to edit anything."
-msgstr "Sie haben keine Berechtigung irgendwas zu ändern."
+msgstr "Sie haben keine Berechtigung, irgendetwas zu ändern."
#: contrib/admin/templates/admin/index.html:52
msgid "Recent Actions"
@@ -453,8 +463,14 @@ msgid "None available"
msgstr "Keine vorhanden"
#: contrib/admin/templates/admin/invalid_setup.html:8
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Etwas stimmt nicht mit der Datenbankkonfiguration. Bitte sicherstellen, dass die richtigen Datenbanktabellen angelegt wurden und die Datenbank vom verwendeten Datenbankbenutzer auch lesbar ist."
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"Etwas stimmt nicht mit der Datenbankkonfiguration. Bitte sicherstellen, dass "
+"die richtigen Datenbanktabellen angelegt wurden und die Datenbank vom "
+"verwendeten Datenbankbenutzer auch lesbar ist."
#: contrib/admin/templates/admin/login.html:17
#: contrib/comments/templates/comments/form.html:6
@@ -489,8 +505,12 @@ msgid "DATE_WITH_TIME_FULL"
msgstr "j. N Y, H:i"
#: contrib/admin/templates/admin/object_history.html:35
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Dieses Objekt hat keine Änderungsgeschichte. Es wurde möglicherweise nicht über diese Verwaltungsseiten angelegt."
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Dieses Objekt hat keine Änderungsgeschichte. Es wurde möglicherweise nicht "
+"über diese Verwaltungsseiten angelegt."
#: contrib/admin/templates/admin/pagination.html:10
msgid "Show all"
@@ -529,8 +549,12 @@ msgid "Save"
msgstr "Sichern"
#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Zuerst einen Benutzer und ein Passwort eingeben. Danach können weitere Optionen für den Benutzer geändert werden."
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"Zuerst einen Benutzer und ein Passwort eingeben. Danach können weitere "
+"Optionen für den Benutzer geändert werden."
#: contrib/admin/templates/admin/auth/user/add_form.html:12
msgid "Username"
@@ -554,7 +578,9 @@ msgstr "Bitte das gleiche Passwort zur Überprüfung nochmal eingeben."
#: contrib/admin/templates/admin/auth/user/change_password.html:27
#, python-format
msgid "Enter a new password for the user %(username)s."
-msgstr "Bitte geben Sie ein neues Passwort für den Benutzer %(username)s ein."
+msgstr ""
+"Bitte geben Sie ein neues Passwort für den Benutzer %(username)s"
+"strong> ein."
#: contrib/admin/templates/admin_doc/bookmarklets.html:3
msgid "Bookmarklets"
@@ -575,9 +601,12 @@ msgid ""
"your computer is \"internal\").
\n"
msgstr ""
"\n"
-"
Um Bookmarklets zu installieren, müssen diese Links in die\n"
-"Browser-Werkzeugleiste gezogen werden, oder mittels rechter Maustaste in die\n"
-"Bookmarks gespeichert werden. Danach können die Bookmarklets von jeder Seite\n"
+"
Um Bookmarklets zu installieren, müssen diese Links in "
+"die\n"
+"Browser-Werkzeugleiste gezogen werden, oder mittels rechter Maustaste in "
+"die\n"
+"Bookmarks gespeichert werden. Danach können die Bookmarklets von jeder "
+"Seite\n"
"aufgerufen werden. Einige Bookmarklets sind für den Zugriff von 'internen'\n"
"Rechnern eingeschränkt. Falls nicht klar ist, ob ein Rechner als 'intern'\n"
"bewertet wird, bitte den Administrator fragen.
\n"
@@ -587,16 +616,24 @@ msgid "Documentation for this page"
msgstr "Dokumentation für diese Seite"
#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Springt von jeder Seite zu der Dokumentation für den View der diese Seite erzeugt."
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+"Springt von jeder Seite zu der Dokumentation für den View der diese Seite "
+"erzeugt."
#: contrib/admin/templates/admin_doc/bookmarklets.html:21
msgid "Show object ID"
msgstr "Objekt-ID anzeigen"
#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Zeigt den Content-Type und die eindeutige ID für Seiten die ein einzelnes Objekt repräsentieren."
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Zeigt den Content-Type und die eindeutige ID für Seiten die ein einzelnes "
+"Objekt repräsentieren."
#: contrib/admin/templates/admin_doc/bookmarklets.html:24
msgid "Edit this object (current window)"
@@ -604,7 +641,9 @@ msgstr "Dieses Objekt im aktuellen Fenster ändern."
#: contrib/admin/templates/admin_doc/bookmarklets.html:25
msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Springt zu der Administrationsseite für dieses Objekt, wenn diese Seite ein Objekt repräsentiert."
+msgstr ""
+"Springt zu der Administrationsseite für dieses Objekt, wenn diese Seite ein "
+"Objekt repräsentiert."
#: contrib/admin/templates/admin_doc/bookmarklets.html:27
msgid "Edit this object (new window)"
@@ -612,7 +651,8 @@ msgstr "Dieses Objekt in einem neuen Fenster ändern."
#: contrib/admin/templates/admin_doc/bookmarklets.html:28
msgid "As above, but opens the admin page in a new window."
-msgstr "Wie zuvor, aber öffnet die Administrationsseite in einem neuen Fenster."
+msgstr ""
+"Wie zuvor, aber öffnet die Administrationsseite in einem neuen Fenster."
#: contrib/admin/templates/registration/logged_out.html:8
msgid "Thanks for spending some quality time with the Web site today."
@@ -639,8 +679,13 @@ msgid "Your password was changed."
msgstr "Ihr Passwort wurde geändert."
#: contrib/admin/templates/registration/password_change_form.html:11
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Bitte geben Sie aus Sicherheitsgründen erst Ihr altes Passwort und darunter dann zweimal (um sicherzustellen, dass Sie es korrekt eingegeben haben) das neue Kennwort ein."
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Bitte geben Sie aus Sicherheitsgründen erst Ihr altes Passwort und darunter "
+"dann zweimal (um sicherzustellen, dass Sie es korrekt eingegeben haben) das "
+"neue Kennwort ein."
#: contrib/admin/templates/registration/password_change_form.html:16
msgid "Old password:"
@@ -671,8 +716,12 @@ msgid "Password reset successful"
msgstr "Passwort wurde erfolgreich zurückgesetzt"
#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Wir haben ein neues Passwort an die von Ihnen angegebene E-Mail-Adresse geschickt. Sie sollten es in Kürze erhalten."
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+"Wir haben ein neues Passwort an die von Ihnen angegebene E-Mail-Adresse "
+"geschickt. Sie sollten es in Kürze erhalten."
#: contrib/admin/templates/registration/password_reset_email.html:2
msgid "You're receiving this e-mail because you requested a password reset"
@@ -706,8 +755,12 @@ msgid "The %(site_name)s team"
msgstr "Das Team von %(site_name)s"
#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
-msgstr "Passwort vergessen? Einfach die E-Mail-Adresse eingeben und wir setzen das Passwort zurück und lassen es Ihnen per E-Mail zukommen."
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr ""
+"Passwort vergessen? Einfach die E-Mail-Adresse eingeben und wir setzen das "
+"Passwort zurück und lassen es Ihnen per E-Mail zukommen."
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "E-mail address:"
@@ -737,14 +790,12 @@ msgstr "Ändern:"
msgid "All dates"
msgstr "Alle Tage"
-#: contrib/admin/views/auth.py:20
-#: contrib/admin/views/main.py:267
+#: contrib/admin/views/auth.py:20 contrib/admin/views/main.py:267
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt."
-#: contrib/admin/views/auth.py:25
-#: contrib/admin/views/main.py:271
+#: contrib/admin/views/auth.py:25 contrib/admin/views/main.py:271
#: contrib/admin/views/main.py:356
msgid "You may edit it again below."
msgstr "Das Element kann jetzt weiter bearbeitet werden."
@@ -762,18 +813,29 @@ msgstr "Passwort erfolgreich geändert."
msgid "Change password: %s"
msgstr "Passwort ändern: %s"
-#: contrib/admin/views/decorators.py:17
-#: contrib/auth/forms.py:60
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Bitte einen gültigen Benutzernamen und ein Passwort eingeben. Beide Felder berücksichtigen die Groß-/Kleinschreibung."
+#: contrib/admin/views/decorators.py:17 contrib/auth/forms.py:60
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"Bitte einen gültigen Benutzernamen und ein Passwort eingeben. Beide Felder "
+"berücksichtigen die Groß-/Kleinschreibung."
#: contrib/admin/views/decorators.py:69
-msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
-msgstr "Bitte neu anmelden, da die Session ausgelaufen ist. Keine Angst, die Beiträge wurden gesichert."
+msgid ""
+"Please log in again, because your session has expired. Don't worry: Your "
+"submission has been saved."
+msgstr ""
+"Bitte neu anmelden, da die Session ausgelaufen ist. Keine Angst, die "
+"Beiträge wurden gesichert."
#: contrib/admin/views/decorators.py:76
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Es sieht danach aus, dass der Browser keine Cookies akzeptiert. Bitte im Browser Cookies aktivieren und diese Seite neu laden."
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+"Es sieht danach aus, dass der Browser keine Cookies akzeptiert. Bitte im "
+"Browser Cookies aktivieren und diese Seite neu laden."
#: contrib/admin/views/decorators.py:90
msgid "Usernames cannot contain the '@' character."
@@ -782,22 +844,21 @@ msgstr "Benutzernamen dürfen das Zeichen '@' nicht enthalten."
#: contrib/admin/views/decorators.py:92
#, python-format
msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Die E-Mail-Adresse entspricht nicht Ihrem Benutzernamen. Bitte stattdessen '%s' versuchen."
+msgstr ""
+"Die E-Mail-Adresse entspricht nicht Ihrem Benutzernamen. Bitte stattdessen "
+"'%s' versuchen."
-#: contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
+#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
#: contrib/admin/views/doc.py:52
msgid "tag:"
msgstr "Schlagwort:"
-#: contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
+#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81
#: contrib/admin/views/doc.py:83
msgid "filter:"
msgstr "Filter:"
-#: contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
+#: contrib/admin/views/doc.py:137 contrib/admin/views/doc.py:139
#: contrib/admin/views/doc.py:141
msgid "view:"
msgstr "Ansicht:"
@@ -817,10 +878,8 @@ msgstr "Modell %(name)r wurde nicht in Anwendung %(label)r gefunden"
msgid "the related `%(label)s.%(type)s` object"
msgstr "Das verknüpfte `%(label)s.%(type)s` Objekt"
-#: contrib/admin/views/doc.py:185
-#: contrib/admin/views/doc.py:207
-#: contrib/admin/views/doc.py:221
-#: contrib/admin/views/doc.py:226
+#: contrib/admin/views/doc.py:185 contrib/admin/views/doc.py:207
+#: contrib/admin/views/doc.py:221 contrib/admin/views/doc.py:226
msgid "model:"
msgstr "Modell:"
@@ -844,12 +903,9 @@ msgstr "Anzahl von %s"
msgid "Fields on %s objects"
msgstr "Felder am %s Objekt"
-#: contrib/admin/views/doc.py:293
-#: contrib/admin/views/doc.py:304
-#: contrib/admin/views/doc.py:306
-#: contrib/admin/views/doc.py:312
-#: contrib/admin/views/doc.py:313
-#: contrib/admin/views/doc.py:315
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:304
+#: contrib/admin/views/doc.py:306 contrib/admin/views/doc.py:312
+#: contrib/admin/views/doc.py:313 contrib/admin/views/doc.py:315
msgid "Integer"
msgstr "Ganzzahl"
@@ -857,8 +913,7 @@ msgstr "Ganzzahl"
msgid "Boolean (Either True or False)"
msgstr "Boolscher Wert (True oder False)"
-#: contrib/admin/views/doc.py:295
-#: contrib/admin/views/doc.py:314
+#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:314
#, python-format
msgid "String (up to %(max_length)s)"
msgstr "Zeichenkette (bis zu %(max_length)s Zeichen)"
@@ -883,8 +938,7 @@ msgstr "Dezimalzahl"
msgid "E-mail address"
msgstr "E-Mail-Adresse"
-#: contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302
#: contrib/admin/views/doc.py:305
msgid "File path"
msgstr "Dateipfad"
@@ -893,8 +947,7 @@ msgstr "Dateipfad"
msgid "Floating point number"
msgstr "Fließkommazahl"
-#: contrib/admin/views/doc.py:307
-#: contrib/comments/models.py:89
+#: contrib/admin/views/doc.py:307 contrib/comments/models.py:89
msgid "IP address"
msgstr "IP-Adresse"
@@ -918,8 +971,7 @@ msgstr "Text"
msgid "Time"
msgstr "Zeit"
-#: contrib/admin/views/doc.py:318
-#: contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:7
msgid "URL"
msgstr "Adresse (URL)"
@@ -940,8 +992,7 @@ msgstr "%s ist scheinbar kein urlpattern Objekt"
msgid "Site administration"
msgstr "Website-Verwaltung"
-#: contrib/admin/views/main.py:280
-#: contrib/admin/views/main.py:365
+#: contrib/admin/views/main.py:280 contrib/admin/views/main.py:365
#, python-format
msgid "You may add another %s below."
msgstr "Jetzt kann ein weiteres Element vom Typ %s angelegt werden."
@@ -956,10 +1007,8 @@ msgstr "%s hinzufügen"
msgid "Added %s."
msgstr "%s hinzugefügt."
-#: contrib/admin/views/main.py:344
-#: contrib/admin/views/main.py:346
-#: contrib/admin/views/main.py:348
-#: core/validators.py:283
+#: contrib/admin/views/main.py:344 contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:348 core/validators.py:283
#: db/models/manipulators.py:309
msgid "and"
msgstr "und"
@@ -985,8 +1034,11 @@ msgstr "%(name)s \"%(obj)s\" wurde erfolgreich geändert."
#: contrib/admin/views/main.py:362
#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt. Das Element kann jetzt geändert werden."
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt. Das Element kann jetzt "
+"geändert werden."
#: contrib/admin/views/main.py:400
#, python-format
@@ -1031,8 +1083,7 @@ msgstr "%s zur Änderung auswählen"
msgid "Database error"
msgstr "Datenbankfehler"
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:138
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
msgid "The two password fields didn't match."
msgstr "Die beiden Passwörter sind nicht identisch."
@@ -1041,16 +1092,24 @@ msgid "A user with that username already exists."
msgstr "Ein Benutzer mit diesem Namen existiert bereits."
#: contrib/auth/forms.py:53
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Der Webbrowser scheint keine Cookies aktiviert zu haben. Cookies sind für die Anmeldung zwingend erforderlich."
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Der Webbrowser scheint keine Cookies aktiviert zu haben. Cookies sind für "
+"die Anmeldung zwingend erforderlich."
#: contrib/auth/forms.py:62
msgid "This account is inactive."
msgstr "Dieser Benutzer ist inaktiv."
#: contrib/auth/forms.py:84
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Zu dieser E-Mail-Adresse existiert kein Benutzer. Sicher, dass Sie sich mit dieser Adresse angemeldet haben?"
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Zu dieser E-Mail-Adresse existiert kein Benutzer. Sicher, dass Sie sich mit "
+"dieser Adresse angemeldet haben?"
#: contrib/auth/forms.py:107
#, python-format
@@ -1065,8 +1124,7 @@ msgstr "Die beiden neuen Passwörter sind nicht identisch."
msgid "Your old password was entered incorrectly. Please enter it again."
msgstr "Das alte Passwort war falsch. Bitte neu eingeben."
-#: contrib/auth/models.py:73
-#: contrib/auth/models.py:93
+#: contrib/auth/models.py:73 contrib/auth/models.py:93
msgid "name"
msgstr "Name"
@@ -1078,8 +1136,7 @@ msgstr "Codename"
msgid "permission"
msgstr "Berechtigung"
-#: contrib/auth/models.py:79
-#: contrib/auth/models.py:94
+#: contrib/auth/models.py:79 contrib/auth/models.py:94
msgid "permissions"
msgstr "Berechtigungen"
@@ -1087,8 +1144,7 @@ msgstr "Berechtigungen"
msgid "group"
msgstr "Gruppe"
-#: contrib/auth/models.py:98
-#: contrib/auth/models.py:141
+#: contrib/auth/models.py:98 contrib/auth/models.py:141
msgid "groups"
msgstr "Gruppen"
@@ -1097,8 +1153,12 @@ msgid "username"
msgstr "Benutzername"
#: contrib/auth/models.py:131
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "Erforderlich. 30 Zeichen oder weniger. Alphanumerische Zeichen (Buchstaben, Ziffern und Unterstriche sind erlaubt)."
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+"Erforderlich. 30 Zeichen oder weniger. Alphanumerische Zeichen (Buchstaben, "
+"Ziffern und Unterstriche sind erlaubt)."
#: contrib/auth/models.py:132
msgid "first name"
@@ -1117,8 +1177,12 @@ msgid "password"
msgstr "Passwort"
#: contrib/auth/models.py:135
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the change password form."
-msgstr "Die Form '[algo]$[salt]$[hexdigest]' verwenden, oder das Passwort ändern Formular benutzen."
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the change "
+"password form."
+msgstr ""
+"Die Form '[algo]$[salt]$[hexdigest]' verwenden, oder das Passwort ändern Formular benutzen."
#: contrib/auth/models.py:136
msgid "staff status"
@@ -1126,23 +1190,33 @@ msgstr "Administrator"
#: contrib/auth/models.py:136
msgid "Designates whether the user can log into this admin site."
-msgstr "Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann."
+msgstr ""
+"Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann."
#: contrib/auth/models.py:137
msgid "active"
msgstr "Aktiv"
#: contrib/auth/models.py:137
-msgid "Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."
-msgstr "Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann. Anstatt einen Benutzer zu löschen, kann er hier auch einfach deaktiviert werden."
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann. "
+"Anstatt einen Benutzer zu löschen, kann er hier auch einfach deaktiviert "
+"werden."
#: contrib/auth/models.py:138
msgid "superuser status"
msgstr "Hauptadmin."
#: contrib/auth/models.py:138
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Legt fest, dass der Benutzer alle Berechtigungen hat, ohne diese einzeln zuweisen zu müssen."
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Legt fest, dass der Benutzer alle Berechtigungen hat, ohne diese einzeln "
+"zuweisen zu müssen."
#: contrib/auth/models.py:139
msgid "last login"
@@ -1153,8 +1227,12 @@ msgid "date joined"
msgstr "Mitglied seit"
#: contrib/auth/models.py:142
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Zusätzlich zu den manuell angelegten Rechten erhält dieser Benutzer auch alle Rechte, die seine zugewiesenen Gruppen haben."
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Zusätzlich zu den manuell angelegten Rechten erhält dieser Benutzer auch "
+"alle Rechte, die seine zugewiesenen Gruppen haben."
#: contrib/auth/models.py:143
msgid "user permissions"
@@ -1192,8 +1270,7 @@ msgstr "Mitteilung"
msgid "Logged out"
msgstr "Abgemeldet"
-#: contrib/comments/models.py:71
-#: contrib/comments/models.py:176
+#: contrib/comments/models.py:71 contrib/comments/models.py:176
msgid "object ID"
msgstr "Objekt-ID"
@@ -1201,8 +1278,7 @@ msgstr "Objekt-ID"
msgid "headline"
msgstr "Überschrift"
-#: contrib/comments/models.py:73
-#: contrib/comments/models.py:95
+#: contrib/comments/models.py:73 contrib/comments/models.py:95
#: contrib/comments/models.py:177
msgid "comment"
msgstr "Kommentar"
@@ -1243,13 +1319,11 @@ msgstr "Bewertung #8"
msgid "is valid rating"
msgstr "ist eine Bewertung"
-#: contrib/comments/models.py:87
-#: contrib/comments/models.py:179
+#: contrib/comments/models.py:87 contrib/comments/models.py:179
msgid "date/time submitted"
msgstr "Datum/Zeit Erstellung"
-#: contrib/comments/models.py:88
-#: contrib/comments/models.py:180
+#: contrib/comments/models.py:88 contrib/comments/models.py:180
msgid "is public"
msgstr "ist öffentlich"
@@ -1258,15 +1332,18 @@ msgid "is removed"
msgstr "ist gelöscht"
#: contrib/comments/models.py:90
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Hier einen Haken setzen, wenn der Kommentar unpassend ist. Stattdessen wird dann \"Dieser Kommentar wurde entfernt\" Meldung angezeigt."
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Hier einen Haken setzen, wenn der Kommentar unpassend ist. Stattdessen wird "
+"dann \"Dieser Kommentar wurde entfernt\" Meldung angezeigt."
#: contrib/comments/models.py:96
msgid "comments"
msgstr "Kommentare"
-#: contrib/comments/models.py:140
-#: contrib/comments/models.py:222
+#: contrib/comments/models.py:140 contrib/comments/models.py:222
msgid "Content object"
msgstr "Inhaltsobjekt"
@@ -1408,25 +1485,32 @@ msgid "Your name:"
msgstr "Ihr Name:"
#: contrib/comments/views/comments.py:28
-msgid "This rating is required because you've entered at least one other rating."
-msgstr "Diese Abstimmung ist zwingend erforderlich, da Sie an mindestens einer weiteren Abstimmung teilnehmen."
+msgid ""
+"This rating is required because you've entered at least one other rating."
+msgstr ""
+"Diese Abstimmung ist zwingend erforderlich, da Sie an mindestens einer "
+"weiteren Abstimmung teilnehmen."
#: contrib/comments/views/comments.py:112
#, python-format
msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s comment:\n"
+"This comment was posted by a user who has posted fewer than %(count)s "
+"comment:\n"
"\n"
"%(text)s"
msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
+"This comment was posted by a user who has posted fewer than %(count)s "
+"comments:\n"
"\n"
"%(text)s"
msgstr[0] ""
-"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s Kommentar:\n"
+"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s "
+"Kommentar:\n"
"\n"
"%(text)s"
msgstr[1] ""
-"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s Kommentaren:\n"
+"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s "
+"Kommentaren:\n"
"\n"
"%(text)s"
@@ -1454,17 +1538,23 @@ msgstr "Eines oder mehrere der erforderlichen Felder fehlen"
#: contrib/comments/views/comments.py:198
#: contrib/comments/views/comments.py:289
msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Jemand hat mit dem Kommentarformular herumgespielt (Sicherheitsverletzung)"
+msgstr ""
+"Jemand hat mit dem Kommentarformular herumgespielt (Sicherheitsverletzung)"
#: contrib/comments/views/comments.py:208
#: contrib/comments/views/comments.py:295
-msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
-msgstr "Das Kommentarformular hatte einen falschen 'target' Parameter -- die Objekt-ID ist ungültig."
+msgid ""
+"The comment form had an invalid 'target' parameter -- the object ID was "
+"invalid"
+msgstr ""
+"Das Kommentarformular hatte einen falschen 'target' Parameter -- die Objekt-"
+"ID ist ungültig."
#: contrib/comments/views/comments.py:259
#: contrib/comments/views/comments.py:324
msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Das Kommentarformular wurde nicht mit 'preview' oder 'post' abgeschickt"
+msgstr ""
+"Das Kommentarformular wurde nicht mit 'preview' oder 'post' abgeschickt"
#: contrib/comments/views/karma.py:21
msgid "Anonymous users cannot vote"
@@ -1478,21 +1568,23 @@ msgstr "Ungültige Kommentar-ID"
msgid "No voting for yourself"
msgstr "Keine Abstimmung für dich selbst"
-#: contrib/contenttypes/models.py:37
+#: contrib/contenttypes/models.py:67
msgid "python model class name"
msgstr "Python Model-Klassenname"
-#: contrib/contenttypes/models.py:40
+#: contrib/contenttypes/models.py:71
msgid "content type"
msgstr "Inhaltstyp"
-#: contrib/contenttypes/models.py:41
+#: contrib/contenttypes/models.py:72
msgid "content types"
msgstr "Inhaltstypen"
#: contrib/flatpages/models.py:8
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Beispiel: '/about/contact/'. Wichtig: vorne und hinten muss ein / stehen."
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Beispiel: '/about/contact/'. Wichtig: Am Anfang und Ende muss ein / stehen."
#: contrib/flatpages/models.py:9
msgid "title"
@@ -1511,8 +1603,12 @@ msgid "template name"
msgstr "Name der Vorlage"
#: contrib/flatpages/models.py:13
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Beispiel: 'flatpages/contact_page.html'. Wenn dieses Feld nicht gefüllt ist, wird 'flatpages/default.html' als Standard gewählt."
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Beispiel: 'flatpages/contact_page.html'. Wenn dieses Feld nicht gefüllt ist, "
+"wird 'flatpages/default.html' als Standard gewählt."
#: contrib/flatpages/models.py:14
msgid "registration required"
@@ -1520,7 +1616,9 @@ msgstr "Registrierung erforderlich"
#: contrib/flatpages/models.py:14
msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Wenn hier ein Haken gesetzt ist, können nur angemeldete Benutzer diese Seite sehen."
+msgstr ""
+"Wenn hier ein Haken gesetzt ist, können nur angemeldete Benutzer diese Seite "
+"sehen."
#: contrib/flatpages/models.py:18
msgid "flat page"
@@ -1618,31 +1716,31 @@ msgstr "gestern"
#: contrib/localflavor/ar/forms.py:27
#, fuzzy
msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
+msgstr ""
+"Bitte eine gültige Postleitzahl im Format NNNN oder ANNNNAAA eingeben."
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
+#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
+#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
#: contrib/localflavor/pe/forms.py:51
#, fuzzy
msgid "This field requires only numbers."
-msgstr "Dieses Feld ist zwingend erforderlich."
+msgstr "Dieses Feld darf nur Ziffern enthalten."
#: contrib/localflavor/ar/forms.py:50
#, fuzzy
msgid "This field requires 7 or 8 digits."
-msgstr "Dieses Feld ist zwingend erforderlich."
+msgstr "Dieses Feld benötigt 7 oder 8 Ziffern."
#: contrib/localflavor/ar/forms.py:79
#, fuzzy
msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Bitte eine gültige deutsche Personalausweisnummer im Format XXXXXXXXXXX-XXXXXXX-XXXXXXX-X eingeben."
+msgstr ""
+"Bitte eine gültige CUIT im Format XX-XXXXXXXX-X oder XXXXXXXXXXXX eingeben."
#: contrib/localflavor/ar/forms.py:80
#, fuzzy
msgid "Invalid CUIT."
-msgstr "Ungültige URL: %s"
+msgstr "Ungültige CUIT."
#: contrib/localflavor/au/forms.py:16
msgid "Enter a 4 digit post code."
@@ -1654,30 +1752,32 @@ msgstr "Bitte eine gültige Postleitzahl im Format XXXXX-XXX eingeben."
#: contrib/localflavor/br/forms.py:30
msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonnummern müssen das Format XXX-XXX-XXXX haben."
+msgstr "Telefonnummern müssen das Format XX-XXXX-XXXX haben."
#: contrib/localflavor/br/forms.py:58
#, fuzzy
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Bitte eine gültige Auswahl treffen."
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr "Bitte einen gültigen brasilianischen Bundesstaat auswählen."
#: contrib/localflavor/br/forms.py:94
msgid "Invalid CPF number."
-msgstr ""
+msgstr "Ungültige CPF-Nummer."
#: contrib/localflavor/br/forms.py:95
#, fuzzy
msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Bitte sicherstellen, dass der Text maximal %d Zeichen hat."
+msgstr "Dieses Feld benötigt mindestens 11 Ziffern oder 14 Zeichen."
#: contrib/localflavor/br/forms.py:134
msgid "Invalid CNPJ number."
-msgstr ""
+msgstr "Ungültige CNPJ-Nummer."
#: contrib/localflavor/br/forms.py:136
#, fuzzy
msgid "This field requires at least 14 digits"
-msgstr "Dieses Feld ist zwingend erforderlich."
+msgstr "Dieses Feld benötigt mindestens 14 Ziffern."
#: contrib/localflavor/ca/forms.py:17
#, fuzzy
@@ -1687,7 +1787,9 @@ msgstr "Bitte eine gültige Postleitzahl im Format XXXXX eingeben."
#: contrib/localflavor/ca/forms.py:88
#, fuzzy
msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Bitte eine gültige US-amerikanische Sozialversicherungsnummer im Format XXX-XX-XXXX eingeben."
+msgstr ""
+"Bitte eine gültige kanadische Sozialversicherungsnummer im Format XXX-"
+"XXX-XXX eingeben."
#: contrib/localflavor/ch/ch_states.py:5
msgid "Aargau"
@@ -1712,15 +1814,15 @@ msgstr ""
#: contrib/localflavor/ch/ch_states.py:10
#, fuzzy
msgid "Berne"
-msgstr "Berlin"
+msgstr "Bern"
#: contrib/localflavor/ch/ch_states.py:11
msgid "Fribourg"
-msgstr ""
+msgstr "Freiburg"
#: contrib/localflavor/ch/ch_states.py:12
msgid "Geneva"
-msgstr ""
+msgstr "Genf"
#: contrib/localflavor/ch/ch_states.py:13
#, fuzzy
@@ -1771,7 +1873,7 @@ msgstr ""
#: contrib/localflavor/ch/ch_states.py:24
#, fuzzy
msgid "Thurgau"
-msgstr "Thüringen"
+msgstr ""
#: contrib/localflavor/ch/ch_states.py:25
msgid "Ticino"
@@ -1780,7 +1882,7 @@ msgstr ""
#: contrib/localflavor/ch/ch_states.py:26
#, fuzzy
msgid "Uri"
-msgstr "Fr"
+msgstr ""
#: contrib/localflavor/ch/ch_states.py:27
msgid "Valais"
@@ -1793,31 +1895,34 @@ msgstr ""
#: contrib/localflavor/ch/ch_states.py:29
#, fuzzy
msgid "Zug"
-msgstr "Aug"
+msgstr ""
#: contrib/localflavor/ch/ch_states.py:30
#, fuzzy
msgid "Zurich"
-msgstr "Türkisch"
+msgstr "Zürich"
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/ch/forms.py:16 contrib/localflavor/no/forms.py:12
msgid "Enter a zip code in the format XXXX."
msgstr "Bitte eine gültige Postleitzahl im Format XXXX eingeben."
#: contrib/localflavor/ch/forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
msgstr ""
+"Bitte eine gültige Schweizer Identifikations- oder Reisepassnummer im Format"
+"X1234567<0 oder 1234567890 eingeben."
#: contrib/localflavor/cl/forms.py:29
#, fuzzy
msgid "Enter a valid Chilean RUT."
-msgstr "Bitte einen gültigen Dateinamen eingeben."
+msgstr "Bitte einen gültige chilenische RUT eingeben."
#: contrib/localflavor/cl/forms.py:30
#, fuzzy
msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX-XXX eingeben."
+msgstr "Bitte eine chilenische RUT im Format XX.XXX.XXX-X eingeben."
#: contrib/localflavor/cl/forms.py:31
#, fuzzy
@@ -1888,15 +1993,18 @@ msgstr "Schleswig-Holstein"
msgid "Thuringia"
msgstr "Thüringen"
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
+#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
#: contrib/localflavor/fr/forms.py:15
msgid "Enter a zip code in the format XXXXX."
msgstr "Bitte eine gültige Postleitzahl im Format XXXXX eingeben."
#: contrib/localflavor/de/forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Bitte eine gültige deutsche Personalausweisnummer im Format XXXXXXXXXXX-XXXXXXX-XXXXXXX-X eingeben."
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+"Bitte eine gültige deutsche Personalausweisnummer im Format XXXXXXXXXXX-"
+"XXXXXXX-XXXXXXX-X eingeben."
#: contrib/localflavor/es/es_provinces.py:5
msgid "Arava"
@@ -1917,7 +2025,7 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:9
#, fuzzy
msgid "Avila"
-msgstr "April"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:10
msgid "Badajoz"
@@ -1930,7 +2038,7 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:12
#, fuzzy
msgid "Barcelona"
-msgstr "Mazedonisch"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:13
msgid "Burgos"
@@ -1971,7 +2079,7 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:22
#, fuzzy
msgid "Granada"
-msgstr "Kannada"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:23
msgid "Guadalajara"
@@ -1988,17 +2096,17 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:26
#, fuzzy
msgid "Huesca"
-msgstr "Dienstag"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:27
#, fuzzy
msgid "Jaen"
-msgstr "Jan."
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:28
#, fuzzy
msgid "Leon"
-msgstr "Anmelden"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:29
msgid "Lleida"
@@ -2041,7 +2149,7 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:38
#, fuzzy
msgid "Palencia"
-msgstr "Galicisch"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:39
msgid "Las Palmas"
@@ -2063,12 +2171,12 @@ msgstr ""
#: contrib/localflavor/es/es_regions.py:11
#, fuzzy
msgid "Cantabria"
-msgstr "Katalanisch"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:44
#, fuzzy
msgid "Segovia"
-msgstr "Slowenisch"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:45
msgid "Seville"
@@ -2077,7 +2185,7 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:46
#, fuzzy
msgid "Soria"
-msgstr "Serbisch"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:47
msgid "Tarragona"
@@ -2086,7 +2194,7 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:48
#, fuzzy
msgid "Teruel"
-msgstr "Di"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:49
msgid "Toledo"
@@ -2095,7 +2203,7 @@ msgstr ""
#: contrib/localflavor/es/es_provinces.py:50
#, fuzzy
msgid "Valencia"
-msgstr "Galicisch"
+msgstr ""
#: contrib/localflavor/es/es_provinces.py:51
msgid "Valladolid"
@@ -2144,7 +2252,7 @@ msgstr ""
#: contrib/localflavor/es/es_regions.py:10
#, fuzzy
msgid "Canary Islands"
-msgstr "Saarland"
+msgstr ""
#: contrib/localflavor/es/es_regions.py:12
msgid "Castile-La Mancha"
@@ -2157,7 +2265,7 @@ msgstr ""
#: contrib/localflavor/es/es_regions.py:14
#, fuzzy
msgid "Catalonia"
-msgstr "Katalanisch"
+msgstr ""
#: contrib/localflavor/es/es_regions.py:15
msgid "Extremadura"
@@ -2166,7 +2274,7 @@ msgstr ""
#: contrib/localflavor/es/es_regions.py:16
#, fuzzy
msgid "Galicia"
-msgstr "Galicisch"
+msgstr "Galicien"
#: contrib/localflavor/es/es_regions.py:19
msgid "Region of Murcia"
@@ -2183,43 +2291,50 @@ msgstr ""
#: contrib/localflavor/es/forms.py:19
#, fuzzy
msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
+msgstr ""
+"Bitte eine gültige Postleitzahl im Format 01XXX bis 52XXX eingeben."
#: contrib/localflavor/es/forms.py:39
#, fuzzy
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"Bitte eine gültige Telefonnummer in einem der folgenden Formate eingeben "
+"6XXXXXXXX, 8XXXXXXXX oder 9XXXXXXXX."
#: contrib/localflavor/es/forms.py:66
#, fuzzy
msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Bitte eine gültige IP-Adresse eingeben."
+msgstr "Bitte eine gültige NIF, NIE oder CIF eingeben."
#: contrib/localflavor/es/forms.py:67
#, fuzzy
msgid "Please enter a valid NIF or NIE."
-msgstr "Bitte ein gültiges '%s' eingeben."
+msgstr "Bitte eine gültige NIF oder NIE eingeben."
#: contrib/localflavor/es/forms.py:68
msgid "Invalid checksum for NIF."
-msgstr ""
+msgstr "Ungültige Prüfsumme für NIF."
#: contrib/localflavor/es/forms.py:69
msgid "Invalid checksum for NIE."
-msgstr ""
+msgstr "Ungültige Prüfsumme für NIE."
#: contrib/localflavor/es/forms.py:70
msgid "Invalid checksum for CIF."
-msgstr ""
+msgstr "Ungültige Prüfsumme für CIF."
#: contrib/localflavor/es/forms.py:142
#, fuzzy
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Bitte eine gültige deutsche Personalausweisnummer im Format XXXXXXXXXXX-XXXXXXX-XXXXXXX-X eingeben."
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+"Bitte eine gültige Kontonummer im Format XXXX-XXXX-XX-XXXXXXXXXX eingeben."
#: contrib/localflavor/es/forms.py:143
msgid "Invalid checksum for bank account number."
-msgstr ""
+msgstr "Ungültige Prüfsumme für Kontonummer."
#: contrib/localflavor/fi/forms.py:28
msgid "Enter a valid Finnish social security number."
@@ -2228,35 +2343,39 @@ msgstr "Bitte eine gültige finnische Sozialversicherungsnummer eingeben."
#: contrib/localflavor/in_/forms.py:14
#, fuzzy
msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX-XXX eingeben."
+msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX eingeben."
#: contrib/localflavor/is_/forms.py:17
#, fuzzy
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX-XXX eingeben."
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+"Bitte eine gültige isländische Identifikationsnummer im Format XXXXXX-XXXX "
+"eingeben."
#: contrib/localflavor/is_/forms.py:18
msgid "The Icelandic identification number is not valid."
-msgstr ""
+msgstr "Die isländische Identifikationsnummer ist nicht gültig."
#: contrib/localflavor/it/forms.py:14
#, fuzzy
msgid "Enter a valid zip code."
-msgstr "Bitte ein gültiges Datum eingeben."
+msgstr "Bitte eine Postleitzahl eingeben."
#: contrib/localflavor/it/forms.py:43
#, fuzzy
msgid "Enter a valid Social Security number."
-msgstr "Bitte eine gültige finnische Sozialversicherungsnummer eingeben."
+msgstr "Bitte eine gültige Sozialversicherungsnummer eingeben."
#: contrib/localflavor/it/forms.py:68
#, fuzzy
msgid "Enter a valid VAT number."
-msgstr "Bitte eine gültige Uhrzeit eingeben."
+msgstr "Bitte eine gültige Umsatzsteuernummer eingeben."
#: contrib/localflavor/jp/forms.py:17
msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
+msgstr ""
+"Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
#: contrib/localflavor/jp/jp_prefectures.py:4
msgid "Hokkaido"
@@ -2408,7 +2527,7 @@ msgstr ""
#: contrib/localflavor/jp/jp_prefectures.py:41
msgid "Ehime"
-msgstr "Zeit"
+msgstr ""
#: contrib/localflavor/jp/jp_prefectures.py:42
msgid "Kochi"
@@ -2461,7 +2580,7 @@ msgstr ""
#: contrib/localflavor/mx/mx_states.py:15
#, fuzzy
msgid "Campeche"
-msgstr "Tschechisch"
+msgstr ""
#: contrib/localflavor/mx/mx_states.py:16
msgid "Chihuahua"
@@ -2490,7 +2609,7 @@ msgstr ""
#: contrib/localflavor/mx/mx_states.py:22
#, fuzzy
msgid "Guerrero"
-msgstr "Serverfehler"
+msgstr ""
#: contrib/localflavor/mx/mx_states.py:23
msgid "Guanajuato"
@@ -2543,7 +2662,7 @@ msgstr ""
#: contrib/localflavor/mx/mx_states.py:35
#, fuzzy
msgid "Sinaloa"
-msgstr "Slowakisch"
+msgstr ""
#: contrib/localflavor/mx/mx_states.py:36
msgid "San Luis Potosí"
@@ -2580,22 +2699,22 @@ msgstr ""
#: contrib/localflavor/nl/forms.py:21
#, fuzzy
msgid "Enter a valid postal code"
-msgstr "Bitte einen gültigen Wert eingeben."
+msgstr "Bitte eine gültige Postleitzahl eingeben."
#: contrib/localflavor/nl/forms.py:52
#, fuzzy
msgid "Enter a valid phone number"
-msgstr "Bitte eine ganze Zahl eingeben."
+msgstr "Bitte eine gültige Telefonnummer eingeben."
#: contrib/localflavor/nl/forms.py:78
#, fuzzy
msgid "Enter a valid SoFi number"
-msgstr "Bitte eine gültige Uhrzeit eingeben."
+msgstr "Bitte eine gültige SoFi-Nummer eingeben."
#: contrib/localflavor/nl/nl_provinces.py:4
#, fuzzy
msgid "Drente"
-msgstr "Löschen"
+msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:5
msgid "Flevoland"
@@ -2608,17 +2727,17 @@ msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:7
#, fuzzy
msgid "Gelderland"
-msgstr "Deutsch"
+msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:8
#, fuzzy
msgid "Groningen"
-msgstr "neun"
+msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:9
#, fuzzy
msgid "Limburg"
-msgstr "Hamburg"
+msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:10
msgid "Noord-Brabant"
@@ -2635,12 +2754,12 @@ msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:13
#, fuzzy
msgid "Utrecht"
-msgstr "Französisch"
+msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:14
#, fuzzy
msgid "Zeeland"
-msgstr "Isländisch"
+msgstr ""
#: contrib/localflavor/nl/nl_provinces.py:15
msgid "Zuid-Holland"
@@ -2653,47 +2772,52 @@ msgstr "Bitte eine gültige norwegische Sozialversicherungsnummer eingeben."
#: contrib/localflavor/pe/forms.py:24
#, fuzzy
msgid "This field requires 8 digits."
-msgstr "Dieses Feld ist zwingend erforderlich."
+msgstr "Dieses Feld benötigt 8 Zeichen."
#: contrib/localflavor/pe/forms.py:52
#, fuzzy
msgid "This field requires 11 digits."
-msgstr "Dieses Feld ist zwingend erforderlich."
+msgstr "Dieses Feld benötigt 11 Zeichen."
#: contrib/localflavor/pl/forms.py:39
msgid "National Identification Number consists of 11 digits."
-msgstr ""
+msgstr "Nationale Identifikationsnummer besteht aus 11 Ziffern."
#: contrib/localflavor/pl/forms.py:40
msgid "Wrong checksum for the National Identification Number."
-msgstr ""
+msgstr "Falsche Prüfsumme für die nationale Identifikationsnummer."
#: contrib/localflavor/pl/forms.py:72
#, fuzzy
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr ""
+"Bitte eine Steuernummer (NIP) im Format XXX-XXX-XX-XX oder XX-XX-XXX-XXX "
+"eingeben."
#: contrib/localflavor/pl/forms.py:73
msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
+msgstr "Falsche Prüfsumme für die Steuernummer (NIP)."
#: contrib/localflavor/pl/forms.py:112
msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
+msgstr "Nationale Geschäftsregistrierungsnummer (REGON) besteht aus 7 oder "
+"9 Zeichen."
#: contrib/localflavor/pl/forms.py:113
msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
+msgstr "Falsche Prüfsumme für die nationale Geschäftsregistrierungsnummer "
+"(REGON)."
#: contrib/localflavor/pl/forms.py:156
#, fuzzy
msgid "Enter a postal code in the format XX-XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX eingeben."
+msgstr "Bitte eine gültige Postleitzahl im Format XX-XXX eingeben."
#: contrib/localflavor/pl/pl_voivodeships.py:8
#, fuzzy
msgid "Lower Silesia"
-msgstr "Niedersachsen"
+msgstr ""
#: contrib/localflavor/pl/pl_voivodeships.py:9
msgid "Kuyavia-Pomerania"
@@ -2722,7 +2846,7 @@ msgstr ""
#: contrib/localflavor/pl/pl_voivodeships.py:15
#, fuzzy
msgid "Opole"
-msgstr "Optional"
+msgstr ""
#: contrib/localflavor/pl/pl_voivodeships.py:16
msgid "Subcarpatia"
@@ -2735,12 +2859,12 @@ msgstr ""
#: contrib/localflavor/pl/pl_voivodeships.py:18
#, fuzzy
msgid "Pomerania"
-msgstr "Rumänisch"
+msgstr ""
#: contrib/localflavor/pl/pl_voivodeships.py:19
#, fuzzy
msgid "Silesia"
-msgstr "Slowenisch"
+msgstr ""
#: contrib/localflavor/pl/pl_voivodeships.py:20
msgid "Swietokrzyskie"
@@ -2757,12 +2881,13 @@ msgstr ""
#: contrib/localflavor/pl/pl_voivodeships.py:23
#, fuzzy
msgid "West Pomerania"
-msgstr "Mecklenburg-Vorpommern"
+msgstr ""
#: contrib/localflavor/sk/forms.py:30
#, fuzzy
msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
+msgstr ""
+"Bitte eine gültige Postleitzahl im Format XXXXX oder XXX XX eingeben."
#: contrib/localflavor/sk/sk_districts.py:8
msgid "Banska Bystrica"
@@ -2783,7 +2908,7 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:12
#, fuzzy
msgid "Brezno"
-msgstr "Bremen"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:13
msgid "Bratislava I"
@@ -2828,12 +2953,12 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:23
#, fuzzy
msgid "Galanta"
-msgstr "Galicisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:24
#, fuzzy
msgid "Gelnica"
-msgstr "Galicisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:25
msgid "Hlohovec"
@@ -2854,7 +2979,7 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:29
#, fuzzy
msgid "Komarno"
-msgstr "Koreanisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:30
msgid "Kosice I"
@@ -2903,12 +3028,12 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:41
#, fuzzy
msgid "Malacky"
-msgstr "Mai"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:42
#, fuzzy
msgid "Martin"
-msgstr "Lettisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:43
msgid "Medzilaborce"
@@ -2949,7 +3074,7 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:52
#, fuzzy
msgid "Piestany"
-msgstr "Persisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:53
msgid "Poltar"
@@ -2994,7 +3119,7 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:63
#, fuzzy
msgid "Sabinov"
-msgstr "Nov"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:64
msgid "Senec"
@@ -3003,17 +3128,17 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:65
#, fuzzy
msgid "Senica"
-msgstr "Slowenisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:66
#, fuzzy
msgid "Skalica"
-msgstr "Galicisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:67
#, fuzzy
msgid "Snina"
-msgstr "neun"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:68
msgid "Sobrance"
@@ -3038,7 +3163,7 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:73
#, fuzzy
msgid "Sala"
-msgstr "Saarland"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:74
msgid "Topolcany"
@@ -3051,7 +3176,7 @@ msgstr ""
#: contrib/localflavor/sk/sk_districts.py:76
#, fuzzy
msgid "Trencin"
-msgstr "Französisch"
+msgstr ""
#: contrib/localflavor/sk/sk_districts.py:77
msgid "Trnava"
@@ -3128,7 +3253,7 @@ msgstr ""
#: contrib/localflavor/uk/forms.py:21
#, fuzzy
msgid "Enter a valid postcode."
-msgstr "Bitte ein gültiges Datum eingeben."
+msgstr "Bitte eine gültige Postleitzahl eingeben."
#: contrib/localflavor/uk/uk_regions.py:11
msgid "Bedfordshire"
@@ -3157,7 +3282,7 @@ msgstr ""
#: contrib/localflavor/uk/uk_regions.py:18
#, fuzzy
msgid "Devon"
-msgstr "sieben"
+msgstr ""
#: contrib/localflavor/uk/uk_regions.py:19
msgid "Dorset"
@@ -3198,7 +3323,7 @@ msgstr ""
#: contrib/localflavor/uk/uk_regions.py:28
#, fuzzy
msgid "Kent"
-msgstr "Koreanisch"
+msgstr ""
#: contrib/localflavor/uk/uk_regions.py:29
msgid "Lancashire"
@@ -3352,7 +3477,7 @@ msgstr ""
#: contrib/localflavor/uk/uk_regions.py:75
#, fuzzy
msgid "Borders"
-msgstr "Reihenfolge:"
+msgstr ""
#: contrib/localflavor/uk/uk_regions.py:76
msgid "Central Scotland"
@@ -3365,12 +3490,12 @@ msgstr ""
#: contrib/localflavor/uk/uk_regions.py:78
#, fuzzy
msgid "Fife"
-msgstr "Filter"
+msgstr ""
#: contrib/localflavor/uk/uk_regions.py:79
#, fuzzy
msgid "Grampian"
-msgstr "Deutsch"
+msgstr ""
#: contrib/localflavor/uk/uk_regions.py:80
msgid "Highland"
@@ -3379,7 +3504,7 @@ msgstr ""
#: contrib/localflavor/uk/uk_regions.py:81
#, fuzzy
msgid "Lothian"
-msgstr "Lettisch"
+msgstr ""
#: contrib/localflavor/uk/uk_regions.py:82
msgid "Orkney Islands"
@@ -3404,54 +3529,57 @@ msgstr ""
#: contrib/localflavor/uk/uk_regions.py:90
#, fuzzy
msgid "England"
-msgstr "und"
+msgstr "England"
#: contrib/localflavor/uk/uk_regions.py:91
msgid "Northern Ireland"
-msgstr ""
+msgstr "Nordirland"
#: contrib/localflavor/uk/uk_regions.py:92
#, fuzzy
msgid "Scotland"
-msgstr "Saarland"
+msgstr "Schottland"
#: contrib/localflavor/uk/uk_regions.py:93
#, fuzzy
msgid "Wales"
-msgstr "Walisisch"
+msgstr "Wales"
#: contrib/localflavor/us/forms.py:16
msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX oder XXXXX-XXXX eingeben."
+msgstr ""
+"Bitte eine gültige Postleitzahl im Format XXXXX oder XXXXX-XXXX eingeben."
#: contrib/localflavor/us/forms.py:54
msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Bitte eine gültige US-amerikanische Sozialversicherungsnummer im Format XXX-XX-XXXX eingeben."
+msgstr ""
+"Bitte eine gültige US-amerikanische Sozialversicherungsnummer im Format XXX-"
+"XX-XXXX eingeben."
#: contrib/localflavor/za/forms.py:20
#, fuzzy
msgid "Enter a valid South African ID number"
-msgstr "Bitte eine gültige norwegische Sozialversicherungsnummer eingeben."
+msgstr "Bitte eine gültige südafrikanische Sozialversicherungsnummer eingeben."
#: contrib/localflavor/za/forms.py:54
#, fuzzy
msgid "Enter a valid South African postal code"
-msgstr "Bitte eine gültige vierstellige Postleitzahl eingeben."
+msgstr "Bitte eine gültige südafrikanische Postleitzahl eingeben."
#: contrib/localflavor/za/za_provinces.py:4
#, fuzzy
msgid "Eastern Cape"
-msgstr "Benutzername"
+msgstr ""
#: contrib/localflavor/za/za_provinces.py:5
#, fuzzy
msgid "Free State"
-msgstr "Bewertungsdatum"
+msgstr ""
#: contrib/localflavor/za/za_provinces.py:6
#, fuzzy
msgid "Gauteng"
-msgstr "Aug"
+msgstr ""
#: contrib/localflavor/za/za_provinces.py:7
msgid "KwaZulu-Natal"
@@ -3472,28 +3600,36 @@ msgstr ""
#: contrib/localflavor/za/za_provinces.py:11
#, fuzzy
msgid "North West"
-msgstr "Nordrhein-Westfalen"
+msgstr ""
#: contrib/localflavor/za/za_provinces.py:12
#, fuzzy
msgid "Western Cape"
-msgstr "Benutzername"
+msgstr ""
#: contrib/redirects/models.py:7
msgid "redirect from"
msgstr "Umleitung von"
#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: '/events/search/'."
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: '/"
+"events/search/'."
#: contrib/redirects/models.py:9
msgid "redirect to"
msgstr "Umleitung zu"
#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Hier muss entweder ein absoluter Pfad oder eine komplette URL mit http:// am Anfang stehen."
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Hier muss entweder ein absoluter Pfad oder eine komplette URL mit http:// am "
+"Anfang stehen."
#: contrib/redirects/models.py:13
msgid "redirect"
@@ -3544,12 +3680,18 @@ msgid "This value must contain only letters, numbers and underscores."
msgstr "Dieser Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten."
#: core/validators.py:76
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Schrägstriche enthalten."
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Schrägstriche "
+"enthalten."
#: core/validators.py:80
msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten."
+msgstr ""
+"Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Bindestriche "
+"enthalten."
#: core/validators.py:84
msgid "Uppercase letters are not allowed here."
@@ -3583,8 +3725,7 @@ msgstr "Nichtnumerische Zeichen sind hier nicht erlaubt."
msgid "This value can't be comprised solely of digits."
msgstr "Dieser Wert darf nicht nur aus Ziffern bestehen."
-#: core/validators.py:128
-#: newforms/fields.py:151
+#: core/validators.py:128 newforms/fields.py:151
msgid "Enter a whole number."
msgstr "Bitte eine ganze Zahl eingeben."
@@ -3601,8 +3742,7 @@ msgstr "Das Jahr muss 1900 oder später sein."
msgid "Invalid date: %s"
msgstr "Ungültiges Datum: %s"
-#: core/validators.py:156
-#: db/models/fields/__init__.py:522
+#: core/validators.py:156 db/models/fields/__init__.py:527
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "Bitte ein gültiges Datum im Format JJJJ-MM-TT eingeben."
@@ -3610,27 +3750,29 @@ msgstr "Bitte ein gültiges Datum im Format JJJJ-MM-TT eingeben."
msgid "Enter a valid time in HH:MM format."
msgstr "Bitte eine gültige Zeit im Format SS:MM eingeben."
-#: core/validators.py:165
-#: db/models/fields/__init__.py:599
+#: core/validators.py:165 db/models/fields/__init__.py:604
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Bitte eine gültige Datums- und Zeitangabe im Format JJJJ-MM-TT SS:MM eingeben."
+msgstr ""
+"Bitte eine gültige Datums- und Zeitangabe im Format JJJJ-MM-TT SS:MM "
+"eingeben."
-#: core/validators.py:170
-#: newforms/fields.py:402
+#: core/validators.py:170 newforms/fields.py:402
msgid "Enter a valid e-mail address."
msgstr "Bitte eine gültige E-Mail-Adresse eingeben."
-#: core/validators.py:182
-#: core/validators.py:474
-#: newforms/fields.py:432
+#: core/validators.py:182 core/validators.py:474 newforms/fields.py:432
#: oldforms/__init__.py:687
msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Es wurde keine Datei übermittelt. Eventuell ist das Formular-Encoding falsch."
+msgstr ""
+"Es wurde keine Datei übermittelt. Eventuell ist das Formular-Encoding falsch."
-#: core/validators.py:193
-#: newforms/fields.py:458
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Bitte ein Bild hochladen. Die hochgeladene Datei ist kein Bild, oder ist defekt."
+#: core/validators.py:193 newforms/fields.py:458
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Bitte ein Bild hochladen. Die hochgeladene Datei ist kein Bild, oder ist "
+"defekt."
#: core/validators.py:200
#, python-format
@@ -3640,7 +3782,8 @@ msgstr "Die URL %s zeigt nicht auf ein gültiges Bild."
#: core/validators.py:204
#, python-format
msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Telefonnummern müssen das Format XXX-XXX-XXXX haben. \"%s\" ist ungültig."
+msgstr ""
+"Telefonnummern müssen das Format XXX-XXX-XXXX haben. \"%s\" ist ungültig."
#: core/validators.py:212
#, python-format
@@ -3670,8 +3813,7 @@ msgstr "Ungültiges XML: %s"
msgid "Invalid URL: %s"
msgstr "Ungültige URL: %s"
-#: core/validators.py:259
-#: core/validators.py:261
+#: core/validators.py:259 core/validators.py:261
#, python-format
msgid "The URL %s is a broken link."
msgstr "Die URL %s funktioniert nicht."
@@ -3696,20 +3838,21 @@ msgstr "Dieses Feld muss zum Feld '%s' passen."
msgid "Please enter something for at least one field."
msgstr "Bitte mindestens eines der Felder ausfüllen."
-#: core/validators.py:316
-#: core/validators.py:327
+#: core/validators.py:316 core/validators.py:327
msgid "Please enter both fields or leave them both empty."
msgstr "Bitte entweder beide Felder ausfüllen, oder beide leer lassen."
#: core/validators.py:335
#, python-format
msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Dieses Feld muss gefüllt sein, wenn Feld %(field)s den Wert %(value)s hat."
+msgstr ""
+"Dieses Feld muss gefüllt sein, wenn Feld %(field)s den Wert %(value)s hat."
#: core/validators.py:348
#, python-format
msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Dieses Feld muss gefüllt sein, wenn Feld %(field)s nicht %(value)s ist."
+msgstr ""
+"Dieses Feld muss gefüllt sein, wenn Feld %(field)s nicht %(value)s ist."
#: core/validators.py:367
msgid "Duplicate values are not allowed."
@@ -3742,23 +3885,33 @@ msgstr "Bitte eine gültige Dezimalzahl eingeben."
#: core/validators.py:444
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s total digits."
msgstr[0] "Bitte eine gültige Dezimalzahl mit maximal %s Ziffer eingeben."
msgstr[1] "Bitte eine gültige Dezimalzahl mit maximal %s Ziffern eingeben."
#: core/validators.py:447
#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "Bitte eine gültige Dezimalzahl mit einer Gesamtzahl von maximal %s Ziffer eingeben."
-msgstr[1] "Bitte eine gültige Dezimalzahl mit einer Gesamtzahl von maximal %s Ziffern eingeben."
+msgid ""
+"Please enter a valid decimal number with a whole part of at most %s digit."
+msgid_plural ""
+"Please enter a valid decimal number with a whole part of at most %s digits."
+msgstr[0] ""
+"Bitte eine gültige Dezimalzahl mit einer Gesamtzahl von maximal %s Ziffer "
+"eingeben."
+msgstr[1] ""
+"Bitte eine gültige Dezimalzahl mit einer Gesamtzahl von maximal %s Ziffern "
+"eingeben."
#: core/validators.py:450
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstelle eingeben."
-msgstr[1] "Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstellen eingeben."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] ""
+"Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstelle eingeben."
+msgstr[1] ""
+"Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstellen eingeben."
#: core/validators.py:458
msgid "Please enter a valid floating point number."
@@ -3767,12 +3920,15 @@ msgstr "Bitte eine gültige Dezimalzahl eingeben."
#: core/validators.py:467
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Bitte sicherstellen, dass die hochgeladene Datei mindestens %s Bytes groß ist."
+msgstr ""
+"Bitte sicherstellen, dass die hochgeladene Datei mindestens %s Bytes groß "
+"ist."
#: core/validators.py:468
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Bitte sicherstellen, dass die hochgeladene Datei maximal %s Bytes groß ist."
+msgstr ""
+"Bitte sicherstellen, dass die hochgeladene Datei maximal %s Bytes groß ist."
#: core/validators.py:485
msgid "The format for this field is wrong."
@@ -3789,79 +3945,103 @@ msgstr "Konnte nichts von %s empfangen."
#: core/validators.py:539
#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr "Die URL %(url)s lieferte den falschen Content-Type '%(contenttype)s'."
#: core/validators.py:572
#, python-format
-msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
-msgstr "Bitte das ungeschlossene %(tag)s Tag in Zeile %(line)s schließen. Die Zeile beginnt mit \"%(start)s\"."
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Bitte das ungeschlossene %(tag)s Tag in Zeile %(line)s schließen. Die Zeile "
+"beginnt mit \"%(start)s\"."
#: core/validators.py:576
#, python-format
-msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
-msgstr "In Zeile %(line)s ist Text, der nicht in dem Kontext erlaubt ist. Die Zeile beginnt mit \"%(start)s\"."
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"In Zeile %(line)s ist Text, der nicht in dem Kontext erlaubt ist. Die Zeile "
+"beginnt mit \"%(start)s\"."
#: core/validators.py:581
#, python-format
-msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
-msgstr "Das Attribute %(attr)s in Zeile %(line)s ist ungültig. Die Zeile beginnt mit \"%(start)s\"."
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"Das Attribute %(attr)s in Zeile %(line)s ist ungültig. Die Zeile beginnt mit "
+"\"%(start)s\"."
#: core/validators.py:586
#, python-format
-msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
-msgstr "<%(tag)s> in Zeile %(line)s ist ungültig. Die Zeile beginnt mit \"%(start)s\"."
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"<%(tag)s> in Zeile %(line)s ist ungültig. Die Zeile beginnt mit \"%(start)s"
+"\"."
#: core/validators.py:590
#, python-format
-msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
-msgstr "Ein Tag in Zeile %(line)s hat eines oder mehrere Pflichtattribute nicht. Die Zeile beginnt mit \"%(start)s\"."
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Ein Tag in Zeile %(line)s hat eines oder mehrere Pflichtattribute nicht. Die "
+"Zeile beginnt mit \"%(start)s\"."
#: core/validators.py:595
#, python-format
-msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
-msgstr "Das Attribut %(attr)s in Zeile %(line)s hat einen ungültigen Wert. Die Zeile beginnt mit \"%(start)s\"."
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Das Attribut %(attr)s in Zeile %(line)s hat einen ungültigen Wert. Die Zeile "
+"beginnt mit \"%(start)s\"."
#: db/models/manipulators.py:308
#, python-format
msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "Ein '%(object)s' in dieser '%(type)s' existiert bereits für dieses '%(field)s'."
+msgstr ""
+"Ein '%(object)s' in dieser '%(type)s' existiert bereits für dieses '%(field)"
+"s'."
#: db/models/fields/__init__.py:52
#, python-format
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "Ein '%(optname)s' mit diesem '%(fieldname)s' existiert bereits."
-#: 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:161 db/models/fields/__init__.py:327
+#: db/models/fields/__init__.py:759 db/models/fields/__init__.py:770
+#: newforms/fields.py:45 oldforms/__init__.py:374
msgid "This field is required."
msgstr "Dieses Feld ist zwingend erforderlich."
-#: db/models/fields/__init__.py:422
+#: db/models/fields/__init__.py:427
msgid "This value must be an integer."
msgstr "Dieser Wert muss eine Ganzzahl sein."
-#: db/models/fields/__init__.py:461
+#: db/models/fields/__init__.py:466
msgid "This value must be either True or False."
msgstr "Dieser Wert muss wahr oder falsch sein."
-#: db/models/fields/__init__.py:485
+#: db/models/fields/__init__.py:490
msgid "This field cannot be null."
msgstr "Dieses Feld darf nicht leer sein."
-#: db/models/fields/__init__.py:663
+#: db/models/fields/__init__.py:668
msgid "This value must be a decimal number."
msgstr "Dieser Wert muss eine Ganzzahl sein."
-#: db/models/fields/__init__.py:774
+#: db/models/fields/__init__.py:779
msgid "Enter a valid filename."
msgstr "Bitte einen gültigen Dateinamen eingeben."
-#: db/models/fields/__init__.py:945
+#: db/models/fields/__init__.py:950
msgid "This value must be either None, True or False."
msgstr "Dieser Wert muss None, True oder False sein."
@@ -3875,15 +4055,21 @@ msgid "Separate multiple IDs with commas."
msgstr "Mehrere IDs können mit Komma getrennt werden."
#: db/models/fields/related.py:696
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Um mehr als eine Selektion zu treffen, \"Strg\", oder auf dem Mac \"Command\", beim Klicken gedrückt halten."
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Um mehr als eine Selektion zu treffen, \"Strg\", oder auf dem Mac \"Command"
+"\", beim Klicken gedrückt halten."
#: db/models/fields/related.py:743
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Bitte gültige IDs für %(self)s eingeben. Der Wert %(value)r ist ungültig."
-msgstr[1] "Bitte gültige IDs für %(self)s eingeben. Die Werte %(value)r sind ungültig."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] ""
+"Bitte gültige IDs für %(self)s eingeben. Der Wert %(value)r ist ungültig."
+msgstr[1] ""
+"Bitte gültige IDs für %(self)s eingeben. Die Werte %(value)r sind ungültig."
#: newforms/fields.py:46
msgid "Enter a valid value."
@@ -3892,29 +4078,28 @@ msgstr "Bitte einen gültigen Wert eingeben."
#: newforms/fields.py:123
#, python-format
msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Bitte sicherstellen, dass der Text maximal %(max)d Zeichen hat. (Er hat %(length)d)."
+msgstr ""
+"Bitte sicherstellen, dass der Text maximal %(max)d Zeichen hat. (Er hat %"
+"(length)d)."
#: newforms/fields.py:124
#, python-format
msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Bitte sicherstellen, dass der Text wenigstens %(min)d Zeichen hat. (Er hat %(length)d.)"
+msgstr ""
+"Bitte sicherstellen, dass der Text wenigstens %(min)d Zeichen hat. (Er hat %"
+"(length)d.)"
-#: newforms/fields.py:152
-#: newforms/fields.py:181
-#: newforms/fields.py:210
+#: newforms/fields.py:152 newforms/fields.py:181 newforms/fields.py:210
#, python-format
msgid "Ensure this value is less than or equal to %s."
msgstr "Dieser Wert darf maximal %s sein."
-#: newforms/fields.py:153
-#: newforms/fields.py:182
-#: newforms/fields.py:211
+#: newforms/fields.py:153 newforms/fields.py:182 newforms/fields.py:211
#, python-format
msgid "Ensure this value is greater than or equal to %s."
msgstr "Dieser Wert muss größer oder gleich %s sein."
-#: newforms/fields.py:180
-#: newforms/fields.py:209
+#: newforms/fields.py:180 newforms/fields.py:209
msgid "Enter a number."
msgstr "Bitte eine Zahl eingeben."
@@ -3933,13 +4118,11 @@ msgstr "Bitte geben Sie nicht mehr als %s Dezimalstellen ein."
msgid "Ensure that there are no more than %s digits before the decimal point."
msgstr "Bitte geben Sie nicht mehr als %s Ziffern vor dem Komma ein."
-#: newforms/fields.py:262
-#: newforms/fields.py:723
+#: newforms/fields.py:262 newforms/fields.py:723
msgid "Enter a valid date."
msgstr "Bitte ein gültiges Datum eingeben."
-#: newforms/fields.py:295
-#: newforms/fields.py:724
+#: newforms/fields.py:295 newforms/fields.py:724
msgid "Enter a valid time."
msgstr "Bitte eine gültige Uhrzeit eingeben."
@@ -3951,8 +4134,7 @@ msgstr "Bitte gültiges Datum und Uhrzeit eingeben."
msgid "No file was submitted."
msgstr "Es wurde keine Datei übertragen."
-#: newforms/fields.py:434
-#: oldforms/__init__.py:689
+#: newforms/fields.py:434 oldforms/__init__.py:689
msgid "The submitted file is empty."
msgstr "Die ausgewählte Datei ist leer."
@@ -3964,19 +4146,17 @@ msgstr "Bitte eine gültige Adresse eingeben."
msgid "This URL appears to be a broken link."
msgstr "Diese Adresse scheint nicht gültig zu sein."
-#: newforms/fields.py:559
-#: newforms/models.py:300
+#: newforms/fields.py:559 newforms/models.py:300
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr "Bitte eine gültige Auswahl treffen."
#: newforms/fields.py:598
#, python-format
msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Bitte eine gültige Auswahl treffen. %(value)s ist keine gültige Auswahl."
+msgstr ""
+"Bitte eine gültige Auswahl treffen. %(value)s ist keine gültige Auswahl."
-#: newforms/fields.py:599
-#: newforms/fields.py:661
-#: newforms/models.py:360
+#: newforms/fields.py:599 newforms/fields.py:661 newforms/models.py:360
msgid "Enter a list of values."
msgstr "Eine Liste mit Werten eingeben."
@@ -4000,12 +4180,11 @@ msgstr[1] "Bitte sicherstellen, dass der Text weniger als %s Zeichen hat."
msgid "Line breaks are not allowed here."
msgstr "Zeilenumbrüche sind hier nicht erlaubt."
-#: oldforms/__init__.py:512
-#: oldforms/__init__.py:586
-#: oldforms/__init__.py:625
+#: oldforms/__init__.py:512 oldforms/__init__.py:586 oldforms/__init__.py:625
#, python-format
msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Bitte eine gültige Auswahl treffen; '%(data)s' ist nicht in %(choices)s."
+msgstr ""
+"Bitte eine gültige Auswahl treffen; '%(data)s' ist nicht in %(choices)s."
#: oldforms/__init__.py:745
msgid "Enter a whole number between -32,768 and 32,767."
@@ -4133,28 +4312,23 @@ msgstr "Januar"
msgid "February"
msgstr "Februar"
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
msgid "March"
msgstr "März"
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
msgid "April"
msgstr "April"
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
msgid "May"
msgstr "Mai"
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
msgid "June"
msgstr "Juni"
-#: utils/dates.py:19
-#: utils/dates.py:31
+#: utils/dates.py:19 utils/dates.py:31
msgid "July"
msgstr "Juli"
@@ -4308,23 +4482,23 @@ msgstr "%(number)d %(type)s"
msgid ", %(number)d %(type)s"
msgstr ", %(number)d %(type)s"
-#: utils/translation/trans_real.py:404
+#: utils/translation/trans_real.py:403
msgid "DATE_FORMAT"
msgstr "j. N Y"
-#: utils/translation/trans_real.py:405
+#: utils/translation/trans_real.py:404
msgid "DATETIME_FORMAT"
msgstr "j. N Y, H:i"
-#: utils/translation/trans_real.py:406
+#: utils/translation/trans_real.py:405
msgid "TIME_FORMAT"
msgstr "H:i"
-#: utils/translation/trans_real.py:422
+#: utils/translation/trans_real.py:421
msgid "YEAR_MONTH_FORMAT"
msgstr "F Y"
-#: utils/translation/trans_real.py:423
+#: utils/translation/trans_real.py:422
msgid "MONTH_DAY_FORMAT"
msgstr "j. F"
@@ -4342,10 +4516,3 @@ msgstr "%(verbose_name)s wurde erfolgreich aktualisiert."
#, python-format
msgid "The %(verbose_name)s was deleted."
msgstr "%(verbose_name)s wurde gelöscht"
-
-#~ msgid ""
-#~ "Enter a postcode. A space is required between the two postcode parts."
-#~ msgstr ""
-#~ "Bitte eine gültige Postleitzahl eingeben. Ein Leerzeichen trennt die zwei "
-#~ "Teile."
-
diff --git a/django/contrib/admin/templates/admin_doc/index.html b/django/contrib/admin/templates/admin_doc/index.html
index 64766fb46f..750dd2f5ac 100644
--- a/django/contrib/admin/templates/admin_doc/index.html
+++ b/django/contrib/admin/templates/admin_doc/index.html
@@ -1,27 +1,27 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block breadcrumbs %}
Models are descriptions of all the objects in the system and their associated fields. Each model has a list of fields which can be accessed as template variables.
Each page on the public site is generated by a view. The view defines which template is used to generate the page and which objects are available to that template.
Models are descriptions of all the objects in the system and their associated fields. Each model has a list of fields which can be accessed as template variables.
Each page on the public site is generated by a view. The view defines which template is used to generate the page and which objects are available to that template.
+{% endblock %}
+
diff --git a/django/contrib/formtools/wizard.py b/django/contrib/formtools/wizard.py
index da2f0d56de..a197c3e659 100644
--- a/django/contrib/formtools/wizard.py
+++ b/django/contrib/formtools/wizard.py
@@ -1,246 +1,246 @@
-"""
-FormWizard class -- implements a multi-page form, validating between each
-step and storing the form's state as HTML hidden fields so that no state is
-stored on the server side.
-"""
-
-from django import newforms as forms
-from django.conf import settings
-from django.http import Http404
-from django.shortcuts import render_to_response
-from django.template.context import RequestContext
-import cPickle as pickle
-import md5
-
-class FormWizard(object):
- # Dictionary of extra template context variables.
- extra_context = {}
-
- # The HTML (and POST data) field name for the "step" variable.
- step_field_name="wizard_step"
-
- # METHODS SUBCLASSES SHOULDN'T OVERRIDE ###################################
-
- def __init__(self, form_list, initial=None):
- "form_list should be a list of Form classes (not instances)."
- self.form_list = form_list[:]
- self.initial = initial or {}
- self.step = 0 # A zero-based counter keeping track of which step we're in.
-
- def __repr__(self):
- return "step: %d\nform_list: %s\ninitial_data: %s" % (self.step, self.form_list, self.initial)
-
- def get_form(self, step, data=None):
- "Helper method that returns the Form instance for the given step."
- return self.form_list[step](data, prefix=self.prefix_for_step(step), initial=self.initial.get(step, None))
-
- def num_steps(self):
- "Helper method that returns the number of steps."
- # You might think we should just set "self.form_list = len(form_list)"
- # in __init__(), but this calculation needs to be dynamic, because some
- # hook methods might alter self.form_list.
- return len(self.form_list)
-
- def __call__(self, request, *args, **kwargs):
- """
- Main method that does all the hard work, conforming to the Django view
- interface.
- """
- if 'extra_context' in kwargs:
- self.extra_context.update(kwargs['extra_context'])
- current_step = self.determine_step(request, *args, **kwargs)
- self.parse_params(request, *args, **kwargs)
-
- # Sanity check.
- if current_step >= self.num_steps():
- raise Http404('Step %s does not exist' % current_step)
-
- # For each previous step, verify the hash and process.
- # TODO: Move "hash_%d" to a method to make it configurable.
- for i in range(current_step):
- form = self.get_form(i, request.POST)
- if request.POST.get("hash_%d" % i, '') != self.security_hash(request, form):
- return self.render_hash_failure(request, i)
- self.process_step(request, form, i)
-
- # Process the current step. If it's valid, go to the next step or call
- # done(), depending on whether any steps remain.
- if request.method == 'POST':
- form = self.get_form(current_step, request.POST)
- else:
- form = self.get_form(current_step)
- if form.is_valid():
- self.process_step(request, form, current_step)
- next_step = current_step + 1
-
- # If this was the last step, validate all of the forms one more
- # time, as a sanity check, and call done().
- num = self.num_steps()
- if next_step == num:
- final_form_list = [self.get_form(i, request.POST) for i in range(num)]
-
- # Validate all the forms. If any of them fail validation, that
- # must mean the validator relied on some other input, such as
- # an external Web site.
- for i, f in enumerate(final_form_list):
- if not f.is_valid():
- return self.render_revalidation_failure(request, i, f)
- return self.done(request, final_form_list)
-
- # Otherwise, move along to the next step.
- else:
- form = self.get_form(next_step)
- current_step = next_step
-
- return self.render(form, request, current_step)
-
- def render(self, form, request, step, context=None):
- "Renders the given Form object, returning an HttpResponse."
- old_data = request.POST
- prev_fields = []
- if old_data:
- hidden = forms.HiddenInput()
- # Collect all data from previous steps and render it as HTML hidden fields.
- for i in range(step):
- old_form = self.get_form(i, old_data)
- hash_name = 'hash_%s' % i
- prev_fields.extend([bf.as_hidden() for bf in old_form])
- prev_fields.append(hidden.render(hash_name, old_data.get(hash_name, self.security_hash(request, old_form))))
- return self.render_template(request, form, ''.join(prev_fields), step, context)
-
- # METHODS SUBCLASSES MIGHT OVERRIDE IF APPROPRIATE ########################
-
- def prefix_for_step(self, step):
- "Given the step, returns a Form prefix to use."
- return str(step)
-
- def render_hash_failure(self, request, step):
- """
- Hook for rendering a template if a hash check failed.
-
- step is the step that failed. Any previous step is guaranteed to be
- valid.
-
- This default implementation simply renders the form for the given step,
- but subclasses may want to display an error message, etc.
- """
- return self.render(self.get_form(step), request, step, context={'wizard_error': 'We apologize, but your form has expired. Please continue filling out the form from this page.'})
-
- def render_revalidation_failure(self, request, step, form):
- """
- Hook for rendering a template if final revalidation failed.
-
- It is highly unlikely that this point would ever be reached, but See
- the comment in __call__() for an explanation.
- """
- return self.render(form, request, step)
-
- def security_hash(self, request, form):
- """
- Calculates the security hash for the given HttpRequest and Form instances.
-
- This creates a list of the form field names/values in a deterministic
- order, pickles the result with the SECRET_KEY setting and takes an md5
- hash of that.
-
- Subclasses may want to take into account request-specific information,
- such as the IP address.
- """
- data = [(bf.name, bf.data or '') for bf in form] + [settings.SECRET_KEY]
- # Use HIGHEST_PROTOCOL because it's the most efficient. It requires
- # Python 2.3, but Django requires 2.3 anyway, so that's OK.
- pickled = pickle.dumps(data, protocol=pickle.HIGHEST_PROTOCOL)
- return md5.new(pickled).hexdigest()
-
- def determine_step(self, request, *args, **kwargs):
- """
- Given the request object and whatever *args and **kwargs were passed to
- __call__(), returns the current step (which is zero-based).
-
- Note that the result should not be trusted. It may even be a completely
- invalid number. It's not the job of this method to validate it.
- """
- if not request.POST:
- return 0
- try:
- step = int(request.POST.get(self.step_field_name, 0))
- except ValueError:
- return 0
- return step
-
- def parse_params(self, request, *args, **kwargs):
- """
- Hook for setting some state, given the request object and whatever
- *args and **kwargs were passed to __call__(), sets some state.
-
- This is called at the beginning of __call__().
- """
- pass
-
- def get_template(self, step):
- """
- Hook for specifying the name of the template to use for a given step.
-
- Note that this can return a tuple of template names if you'd like to
- use the template system's select_template() hook.
- """
- return 'forms/wizard.html'
-
- def render_template(self, request, form, previous_fields, step, context=None):
- """
- Renders the template for the given step, returning an HttpResponse object.
-
- Override this method if you want to add a custom context, return a
- different MIME type, etc. If you only need to override the template
- name, use get_template() instead.
-
- The template will be rendered with the following context:
- step_field -- The name of the hidden field containing the step.
- step0 -- The current step (zero-based).
- step -- The current step (one-based).
- step_count -- The total number of steps.
- form -- The Form instance for the current step (either empty
- or with errors).
- previous_fields -- A string representing every previous data field,
- plus hashes for completed forms, all in the form of
- hidden fields. Note that you'll need to run this
- through the "safe" template filter, to prevent
- auto-escaping, because it's raw HTML.
- """
- context = context or {}
- context.update(self.extra_context)
- return render_to_response(self.get_template(self.step), dict(context,
- step_field=self.step_field_name,
- step0=step,
- step=step + 1,
- step_count=self.num_steps(),
- form=form,
- previous_fields=previous_fields
- ), context_instance=RequestContext(request))
-
- def process_step(self, request, form, step):
- """
- Hook for modifying the FormWizard's internal state, given a fully
- validated Form object. The Form is guaranteed to have clean, valid
- data.
-
- This method should *not* modify any of that data. Rather, it might want
- to set self.extra_context or dynamically alter self.form_list, based on
- previously submitted forms.
-
- Note that this method is called every time a page is rendered for *all*
- submitted steps.
- """
- pass
-
- # METHODS SUBCLASSES MUST OVERRIDE ########################################
-
- def done(self, request, form_list):
- """
- Hook for doing something with the validated data. This is responsible
- for the final processing.
-
- form_list is a list of Form instances, each containing clean, valid
- data.
- """
- raise NotImplementedError("Your %s class has not defined a done() method, which is required." % self.__class__.__name__)
+"""
+FormWizard class -- implements a multi-page form, validating between each
+step and storing the form's state as HTML hidden fields so that no state is
+stored on the server side.
+"""
+
+from django import newforms as forms
+from django.conf import settings
+from django.http import Http404
+from django.shortcuts import render_to_response
+from django.template.context import RequestContext
+import cPickle as pickle
+import md5
+
+class FormWizard(object):
+ # Dictionary of extra template context variables.
+ extra_context = {}
+
+ # The HTML (and POST data) field name for the "step" variable.
+ step_field_name="wizard_step"
+
+ # METHODS SUBCLASSES SHOULDN'T OVERRIDE ###################################
+
+ def __init__(self, form_list, initial=None):
+ "form_list should be a list of Form classes (not instances)."
+ self.form_list = form_list[:]
+ self.initial = initial or {}
+ self.step = 0 # A zero-based counter keeping track of which step we're in.
+
+ def __repr__(self):
+ return "step: %d\nform_list: %s\ninitial_data: %s" % (self.step, self.form_list, self.initial)
+
+ def get_form(self, step, data=None):
+ "Helper method that returns the Form instance for the given step."
+ return self.form_list[step](data, prefix=self.prefix_for_step(step), initial=self.initial.get(step, None))
+
+ def num_steps(self):
+ "Helper method that returns the number of steps."
+ # You might think we should just set "self.form_list = len(form_list)"
+ # in __init__(), but this calculation needs to be dynamic, because some
+ # hook methods might alter self.form_list.
+ return len(self.form_list)
+
+ def __call__(self, request, *args, **kwargs):
+ """
+ Main method that does all the hard work, conforming to the Django view
+ interface.
+ """
+ if 'extra_context' in kwargs:
+ self.extra_context.update(kwargs['extra_context'])
+ current_step = self.determine_step(request, *args, **kwargs)
+ self.parse_params(request, *args, **kwargs)
+
+ # Sanity check.
+ if current_step >= self.num_steps():
+ raise Http404('Step %s does not exist' % current_step)
+
+ # For each previous step, verify the hash and process.
+ # TODO: Move "hash_%d" to a method to make it configurable.
+ for i in range(current_step):
+ form = self.get_form(i, request.POST)
+ if request.POST.get("hash_%d" % i, '') != self.security_hash(request, form):
+ return self.render_hash_failure(request, i)
+ self.process_step(request, form, i)
+
+ # Process the current step. If it's valid, go to the next step or call
+ # done(), depending on whether any steps remain.
+ if request.method == 'POST':
+ form = self.get_form(current_step, request.POST)
+ else:
+ form = self.get_form(current_step)
+ if form.is_valid():
+ self.process_step(request, form, current_step)
+ next_step = current_step + 1
+
+ # If this was the last step, validate all of the forms one more
+ # time, as a sanity check, and call done().
+ num = self.num_steps()
+ if next_step == num:
+ final_form_list = [self.get_form(i, request.POST) for i in range(num)]
+
+ # Validate all the forms. If any of them fail validation, that
+ # must mean the validator relied on some other input, such as
+ # an external Web site.
+ for i, f in enumerate(final_form_list):
+ if not f.is_valid():
+ return self.render_revalidation_failure(request, i, f)
+ return self.done(request, final_form_list)
+
+ # Otherwise, move along to the next step.
+ else:
+ form = self.get_form(next_step)
+ current_step = next_step
+
+ return self.render(form, request, current_step)
+
+ def render(self, form, request, step, context=None):
+ "Renders the given Form object, returning an HttpResponse."
+ old_data = request.POST
+ prev_fields = []
+ if old_data:
+ hidden = forms.HiddenInput()
+ # Collect all data from previous steps and render it as HTML hidden fields.
+ for i in range(step):
+ old_form = self.get_form(i, old_data)
+ hash_name = 'hash_%s' % i
+ prev_fields.extend([bf.as_hidden() for bf in old_form])
+ prev_fields.append(hidden.render(hash_name, old_data.get(hash_name, self.security_hash(request, old_form))))
+ return self.render_template(request, form, ''.join(prev_fields), step, context)
+
+ # METHODS SUBCLASSES MIGHT OVERRIDE IF APPROPRIATE ########################
+
+ def prefix_for_step(self, step):
+ "Given the step, returns a Form prefix to use."
+ return str(step)
+
+ def render_hash_failure(self, request, step):
+ """
+ Hook for rendering a template if a hash check failed.
+
+ step is the step that failed. Any previous step is guaranteed to be
+ valid.
+
+ This default implementation simply renders the form for the given step,
+ but subclasses may want to display an error message, etc.
+ """
+ return self.render(self.get_form(step), request, step, context={'wizard_error': 'We apologize, but your form has expired. Please continue filling out the form from this page.'})
+
+ def render_revalidation_failure(self, request, step, form):
+ """
+ Hook for rendering a template if final revalidation failed.
+
+ It is highly unlikely that this point would ever be reached, but See
+ the comment in __call__() for an explanation.
+ """
+ return self.render(form, request, step)
+
+ def security_hash(self, request, form):
+ """
+ Calculates the security hash for the given HttpRequest and Form instances.
+
+ This creates a list of the form field names/values in a deterministic
+ order, pickles the result with the SECRET_KEY setting and takes an md5
+ hash of that.
+
+ Subclasses may want to take into account request-specific information,
+ such as the IP address.
+ """
+ data = [(bf.name, bf.data or '') for bf in form] + [settings.SECRET_KEY]
+ # Use HIGHEST_PROTOCOL because it's the most efficient. It requires
+ # Python 2.3, but Django requires 2.3 anyway, so that's OK.
+ pickled = pickle.dumps(data, protocol=pickle.HIGHEST_PROTOCOL)
+ return md5.new(pickled).hexdigest()
+
+ def determine_step(self, request, *args, **kwargs):
+ """
+ Given the request object and whatever *args and **kwargs were passed to
+ __call__(), returns the current step (which is zero-based).
+
+ Note that the result should not be trusted. It may even be a completely
+ invalid number. It's not the job of this method to validate it.
+ """
+ if not request.POST:
+ return 0
+ try:
+ step = int(request.POST.get(self.step_field_name, 0))
+ except ValueError:
+ return 0
+ return step
+
+ def parse_params(self, request, *args, **kwargs):
+ """
+ Hook for setting some state, given the request object and whatever
+ *args and **kwargs were passed to __call__(), sets some state.
+
+ This is called at the beginning of __call__().
+ """
+ pass
+
+ def get_template(self, step):
+ """
+ Hook for specifying the name of the template to use for a given step.
+
+ Note that this can return a tuple of template names if you'd like to
+ use the template system's select_template() hook.
+ """
+ return 'forms/wizard.html'
+
+ def render_template(self, request, form, previous_fields, step, context=None):
+ """
+ Renders the template for the given step, returning an HttpResponse object.
+
+ Override this method if you want to add a custom context, return a
+ different MIME type, etc. If you only need to override the template
+ name, use get_template() instead.
+
+ The template will be rendered with the following context:
+ step_field -- The name of the hidden field containing the step.
+ step0 -- The current step (zero-based).
+ step -- The current step (one-based).
+ step_count -- The total number of steps.
+ form -- The Form instance for the current step (either empty
+ or with errors).
+ previous_fields -- A string representing every previous data field,
+ plus hashes for completed forms, all in the form of
+ hidden fields. Note that you'll need to run this
+ through the "safe" template filter, to prevent
+ auto-escaping, because it's raw HTML.
+ """
+ context = context or {}
+ context.update(self.extra_context)
+ return render_to_response(self.get_template(self.step), dict(context,
+ step_field=self.step_field_name,
+ step0=step,
+ step=step + 1,
+ step_count=self.num_steps(),
+ form=form,
+ previous_fields=previous_fields
+ ), context_instance=RequestContext(request))
+
+ def process_step(self, request, form, step):
+ """
+ Hook for modifying the FormWizard's internal state, given a fully
+ validated Form object. The Form is guaranteed to have clean, valid
+ data.
+
+ This method should *not* modify any of that data. Rather, it might want
+ to set self.extra_context or dynamically alter self.form_list, based on
+ previously submitted forms.
+
+ Note that this method is called every time a page is rendered for *all*
+ submitted steps.
+ """
+ pass
+
+ # METHODS SUBCLASSES MUST OVERRIDE ########################################
+
+ def done(self, request, form_list):
+ """
+ Hook for doing something with the validated data. This is responsible
+ for the final processing.
+
+ form_list is a list of Form instances, each containing clean, valid
+ data.
+ """
+ raise NotImplementedError("Your %s class has not defined a done() method, which is required." % self.__class__.__name__)
diff --git a/django/contrib/sessions/backends/file.py b/django/contrib/sessions/backends/file.py
index cd3e3d9c75..d65c81c101 100644
--- a/django/contrib/sessions/backends/file.py
+++ b/django/contrib/sessions/backends/file.py
@@ -9,7 +9,9 @@ class SessionStore(SessionBase):
Implements a file based session store.
"""
def __init__(self, session_key=None):
- self.storage_path = getattr(settings, "SESSION_FILE_PATH", tempfile.gettempdir())
+ self.storage_path = getattr(settings, "SESSION_FILE_PATH", None)
+ if not self.storage_path:
+ self.storage_path = tempfile.gettempdir()
# Make sure the storage path is valid.
if not os.path.isdir(self.storage_path):
diff --git a/django/contrib/syndication/feeds.py b/django/contrib/syndication/feeds.py
index 45b97d970a..85af79cc27 100644
--- a/django/contrib/syndication/feeds.py
+++ b/django/contrib/syndication/feeds.py
@@ -3,7 +3,8 @@ from django.template import Context, loader, Template, TemplateDoesNotExist
from django.contrib.sites.models import Site, RequestSite
from django.utils import feedgenerator
from django.utils.encoding import smart_unicode, iri_to_uri
-from django.conf import settings
+from django.conf import settings
+from django.template import RequestContext
def add_domain(domain, url):
if not (url.startswith('http://') or url.startswith('https://')):
@@ -55,18 +56,23 @@ class Feed(object):
return attr()
return attr
+ def get_object(self, bits):
+ return None
+
def get_feed(self, url=None):
"""
Returns a feedgenerator.DefaultFeed object, fully populated, for
this feed. Raises FeedDoesNotExist for invalid parameters.
"""
if url:
- try:
- obj = self.get_object(url.split('/'))
- except (AttributeError, ObjectDoesNotExist):
- raise FeedDoesNotExist
+ bits = url.split('/')
else:
- obj = None
+ bits = []
+
+ try:
+ obj = self.get_object(bits)
+ except ObjectDoesNotExist:
+ raise FeedDoesNotExist
if Site._meta.installed:
current_site = Site.objects.get_current()
@@ -119,9 +125,9 @@ class Feed(object):
else:
author_email = author_link = None
feed.add_item(
- title = title_tmp.render(Context({'obj': item, 'site': current_site})),
+ title = title_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})),
link = link,
- description = description_tmp.render(Context({'obj': item, 'site': current_site})),
+ description = description_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})),
unique_id = self.__get_dynamic_attr('item_guid', item, link),
enclosure = enc,
pubdate = self.__get_dynamic_attr('item_pubdate', item),
diff --git a/django/core/mail.py b/django/core/mail.py
index 72343cb4df..bf48dcb882 100644
--- a/django/core/mail.py
+++ b/django/core/mail.py
@@ -2,20 +2,21 @@
Tools for sending email.
"""
-from django.conf import settings
-from django.utils.encoding import smart_str, force_unicode
-from email import Charset, Encoders
-from email.MIMEText import MIMEText
-from email.MIMEMultipart import MIMEMultipart
-from email.MIMEBase import MIMEBase
-from email.Header import Header
-from email.Utils import formatdate, parseaddr, formataddr
import mimetypes
import os
import smtplib
import socket
import time
import random
+from email import Charset, Encoders
+from email.MIMEText import MIMEText
+from email.MIMEMultipart import MIMEMultipart
+from email.MIMEBase import MIMEBase
+from email.Header import Header
+from email.Utils import formatdate, parseaddr, formataddr
+
+from django.conf import settings
+from django.utils.encoding import smart_str, force_unicode
# Don't BASE64-encode UTF-8 messages so that we avoid unwanted attention from
# some spam filters.
@@ -38,8 +39,9 @@ class CachedDnsName(object):
DNS_NAME = CachedDnsName()
-# Copied from Python standard library and modified to used the cached hostname
-# for performance.
+# Copied from Python standard library, with the following modifications:
+# * Used cached hostname for performance.
+# * Added try/except to support lack of getpid() in Jython (#5496).
def make_msgid(idstring=None):
"""Returns a string suitable for RFC 2822 compliant Message-ID, e.g:
@@ -53,7 +55,7 @@ def make_msgid(idstring=None):
try:
pid = os.getpid()
except AttributeError:
- # Not getpid() in Jython, for example.
+ # No getpid() in Jython, for example.
pid = 1
randint = random.randrange(100000)
if idstring is None:
@@ -68,7 +70,7 @@ class BadHeaderError(ValueError):
pass
def forbid_multi_line_headers(name, val):
- "Forbids multi-line headers, to prevent header injection."
+ """Forbids multi-line headers, to prevent header injection."""
if '\n' in val or '\r' in val:
raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name))
try:
@@ -101,7 +103,7 @@ class SMTPConnection(object):
"""
def __init__(self, host=None, port=None, username=None, password=None,
- use_tls=None, fail_silently=False):
+ use_tls=None, fail_silently=False):
self.host = host or settings.EMAIL_HOST
self.port = port or settings.EMAIL_PORT
self.username = username or settings.EMAIL_HOST_USER
@@ -112,14 +114,17 @@ class SMTPConnection(object):
def open(self):
"""
- Ensure we have a connection to the email server. Returns whether or not
- a new connection was required.
+ Ensures we have a connection to the email server. Returns whether or
+ not a new connection was required (True or False).
"""
if self.connection:
# Nothing to do if the connection is already open.
return False
try:
- self.connection = smtplib.SMTP(self.host, self.port)
+ # If local_hostname is not specified, socket.getfqdn() gets used.
+ # For performance, we use the cached FQDN for local_hostname.
+ self.connection = smtplib.SMTP(self.host, self.port,
+ local_hostname=DNS_NAME.get_fqdn())
if self.use_tls:
self.connection.ehlo()
self.connection.starttls()
@@ -132,7 +137,7 @@ class SMTPConnection(object):
raise
def close(self):
- """Close the connection to the email server."""
+ """Closes the connection to the email server."""
try:
try:
self.connection.quit()
@@ -149,7 +154,7 @@ class SMTPConnection(object):
def send_messages(self, email_messages):
"""
- Send one or more EmailMessage objects and return the number of email
+ Sends one or more EmailMessage objects and returns the number of email
messages sent.
"""
if not email_messages:
@@ -192,7 +197,7 @@ class EmailMessage(object):
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
connection=None, attachments=None, headers=None):
"""
- Initialise a single email message (which can be sent to multiple
+ Initialize a single email message (which can be sent to multiple
recipients).
All strings used to create the message can be unicode strings (or UTF-8
@@ -221,7 +226,8 @@ class EmailMessage(object):
def message(self):
encoding = self.encoding or settings.DEFAULT_CHARSET
- msg = SafeMIMEText(smart_str(self.body, settings.DEFAULT_CHARSET), self.content_subtype, encoding)
+ msg = SafeMIMEText(smart_str(self.body, settings.DEFAULT_CHARSET),
+ self.content_subtype, encoding)
if self.attachments:
body_msg = msg
msg = SafeMIMEMultipart(_subtype=self.multipart_subtype)
@@ -237,8 +243,6 @@ class EmailMessage(object):
msg['To'] = ', '.join(self.to)
msg['Date'] = formatdate()
msg['Message-ID'] = make_msgid()
- if self.bcc:
- msg['Bcc'] = ', '.join(self.bcc)
for name, value in self.extra_headers.items():
msg[name] = value
return msg
@@ -251,7 +255,7 @@ class EmailMessage(object):
return self.to + self.bcc
def send(self, fail_silently=False):
- """Send the email message."""
+ """Sends the email message."""
return self.get_connection(fail_silently).send_messages([self])
def attach(self, filename=None, content=None, mimetype=None):
@@ -278,7 +282,7 @@ class EmailMessage(object):
def _create_attachment(self, filename, content, mimetype=None):
"""
- Convert the filename, content, mimetype triple into a MIME attachment
+ Converts the filename, content, mimetype triple into a MIME attachment
object.
"""
if mimetype is None:
@@ -295,7 +299,8 @@ class EmailMessage(object):
attachment.set_payload(content)
Encoders.encode_base64(attachment)
if filename:
- attachment.add_header('Content-Disposition', 'attachment', filename=filename)
+ attachment.add_header('Content-Disposition', 'attachment',
+ filename=filename)
return attachment
class EmailMultiAlternatives(EmailMessage):
@@ -310,7 +315,8 @@ class EmailMultiAlternatives(EmailMessage):
"""Attach an alternative content representation."""
self.attach(content=content, mimetype=mimetype)
-def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None):
+def send_mail(subject, message, from_email, recipient_list,
+ fail_silently=False, auth_user=None, auth_password=None):
"""
Easy wrapper for sending a single message to a recipient list. All members
of the recipient list will see the other recipients in the 'To' field.
@@ -322,10 +328,12 @@ def send_mail(subject, message, from_email, recipient_list, fail_silently=False,
functionality should use the EmailMessage class directly.
"""
connection = SMTPConnection(username=auth_user, password=auth_password,
- fail_silently=fail_silently)
- return EmailMessage(subject, message, from_email, recipient_list, connection=connection).send()
+ fail_silently=fail_silently)
+ return EmailMessage(subject, message, from_email, recipient_list,
+ connection=connection).send()
-def send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password=None):
+def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
+ auth_password=None):
"""
Given a datatuple of (subject, message, from_email, recipient_list), sends
each message to each recipient list. Returns the number of e-mails sent.
@@ -339,19 +347,19 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password
functionality should use the EmailMessage class directly.
"""
connection = SMTPConnection(username=auth_user, password=auth_password,
- fail_silently=fail_silently)
- messages = [EmailMessage(subject, message, sender, recipient) for subject, message, sender, recipient in datatuple]
+ fail_silently=fail_silently)
+ messages = [EmailMessage(subject, message, sender, recipient)
+ for subject, message, sender, recipient in datatuple]
return connection.send_messages(messages)
def mail_admins(subject, message, fail_silently=False):
- "Sends a message to the admins, as defined by the ADMINS setting."
+ """Sends a message to the admins, as defined by the ADMINS setting."""
EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
- settings.SERVER_EMAIL, [a[1] for a in
- settings.ADMINS]).send(fail_silently=fail_silently)
+ settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS]
+ ).send(fail_silently=fail_silently)
def mail_managers(subject, message, fail_silently=False):
- "Sends a message to the managers, as defined by the MANAGERS setting."
+ """Sends a message to the managers, as defined by the MANAGERS setting."""
EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
- settings.SERVER_EMAIL, [a[1] for a in
- settings.MANAGERS]).send(fail_silently=fail_silently)
-
+ settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS]
+ ).send(fail_silently=fail_silently)
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py
index d78e2eda0b..819b19a366 100644
--- a/django/core/management/__init__.py
+++ b/django/core/management/__init__.py
@@ -243,7 +243,7 @@ def setup_environ(settings_mod):
# way. For example, if this file (manage.py) lives in a directory
# "myproject", this code would add "/path/to/myproject" to sys.path.
project_directory, settings_filename = os.path.split(settings_mod.__file__)
- if not project_directory:
+ if project_directory == os.curdir or not project_directory:
project_directory = os.getcwd()
project_name = os.path.basename(project_directory)
settings_name = os.path.splitext(settings_filename)[0]
diff --git a/django/core/management/commands/startproject.py b/django/core/management/commands/startproject.py
index ab4f409f15..867d4fd3da 100644
--- a/django/core/management/commands/startproject.py
+++ b/django/core/management/commands/startproject.py
@@ -20,8 +20,13 @@ class Command(LabelCommand):
# the parent directory.
directory = os.getcwd()
- if project_name in INVALID_PROJECT_NAMES:
- raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name." % project_name)
+ try:
+ proj_name = __import__(project_name)
+ if proj_name:
+ raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name." % project_name)
+ except ImportError:
+ if project_name in INVALID_PROJECT_NAMES:
+ raise CommandError("%r contains an invalid project name. Please try another name." % project_name)
copy_helper(self.style, 'project', project_name, directory)
diff --git a/django/core/paginator.py b/django/core/paginator.py
index 71a5479fd5..04cc4bf481 100644
--- a/django/core/paginator.py
+++ b/django/core/paginator.py
@@ -1,46 +1,149 @@
class InvalidPage(Exception):
pass
-class ObjectPaginator(object):
- """
- This class makes pagination easy. Feed it a QuerySet or list, plus the number
- of objects you want on each page. Then read the hits and pages properties to
- see how many pages it involves. Call get_page with a page number (starting
- at 0) to get back a list of objects for that page.
+class Paginator(object):
+ def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True):
+ self.object_list = object_list
+ self.per_page = per_page
+ self.orphans = orphans
+ self.allow_empty_first_page = allow_empty_first_page
+ self._num_pages = self._count = None
- Finally, check if a page number has a next/prev page using
- has_next_page(page_number) and has_previous_page(page_number).
-
- Use orphans to avoid small final pages. For example:
- 13 records, num_per_page=10, orphans=2 --> pages==2, len(self.get_page(0))==10
- 12 records, num_per_page=10, orphans=2 --> pages==1, len(self.get_page(0))==12
+ def validate_number(self, number):
+ "Validates the given 1-based page number."
+ try:
+ number = int(number)
+ except ValueError:
+ raise InvalidPage('That page number is not an integer')
+ if number < 1:
+ raise InvalidPage('That page number is less than 1')
+ if number > self.num_pages:
+ if number == 1 and self.allow_empty_first_page:
+ pass
+ else:
+ raise InvalidPage('That page contains no results')
+ return number
+
+ def page(self, number):
+ "Returns a Page object for the given 1-based page number."
+ number = self.validate_number(number)
+ bottom = (number - 1) * self.per_page
+ top = bottom + self.per_page
+ if top + self.orphans >= self.count:
+ top = self.count
+ return Page(self.object_list[bottom:top], number, self)
+
+ def _get_count(self):
+ "Returns the total number of objects, across all pages."
+ if self._count is None:
+ self._count = len(self.object_list)
+ return self._count
+ count = property(_get_count)
+
+ def _get_num_pages(self):
+ "Returns the total number of pages."
+ if self._num_pages is None:
+ hits = self.count - 1 - self.orphans
+ if hits < 1:
+ hits = 0
+ if hits == 0 and not self.allow_empty_first_page:
+ self._num_pages = 0
+ else:
+ self._num_pages = hits // self.per_page + 1
+ return self._num_pages
+ num_pages = property(_get_num_pages)
+
+ def _get_page_range(self):
+ """
+ Returns a 1-based range of pages for iterating through within
+ a template for loop.
+ """
+ return range(1, self.num_pages + 1)
+ page_range = property(_get_page_range)
+
+class QuerySetPaginator(Paginator):
+ """
+ Like Paginator, but works on QuerySets.
+ """
+ def _get_count(self):
+ if self._count is None:
+ self._count = self.object_list.count()
+ return self._count
+ count = property(_get_count)
+
+class Page(object):
+ def __init__(self, object_list, number, paginator):
+ self.object_list = object_list
+ self.number = number
+ self.paginator = paginator
+
+ def __repr__(self):
+ return '' % (self.number, self.paginator.num_pages)
+
+ def has_next(self):
+ return self.number < self.paginator.num_pages
+
+ def has_previous(self):
+ return self.number > 1
+
+ def has_other_pages(self):
+ return self.has_previous() or self.has_next()
+
+ def next_page_number(self):
+ return self.number + 1
+
+ def previous_page_number(self):
+ return self.number - 1
+
+ def start_index(self):
+ """
+ Returns the 1-based index of the first object on this page,
+ relative to total objects in the paginator.
+ """
+ return (self.paginator.per_page * (self.number - 1)) + 1
+
+ def end_index(self):
+ """
+ Returns the 1-based index of the last object on this page,
+ relative to total objects found (hits).
+ """
+ if self.number == self.paginator.num_pages:
+ return self.paginator.count
+ return self.number * self.paginator.per_page
+
+class ObjectPaginator(Paginator):
+ """
+ Legacy ObjectPaginator class, for backwards compatibility.
+
+ Note that each method on this class that takes page_number expects a
+ zero-based page number, whereas the new API (Paginator/Page) uses one-based
+ page numbers.
"""
def __init__(self, query_set, num_per_page, orphans=0):
+ Paginator.__init__(self, query_set, num_per_page, orphans)
+ import warnings
+ warnings.warn("The ObjectPaginator is deprecated. Use django.core.paginator.Paginator instead.", DeprecationWarning)
+
+ # Keep these attributes around for backwards compatibility.
self.query_set = query_set
self.num_per_page = num_per_page
- self.orphans = orphans
self._hits = self._pages = None
- self._page_range = None
def validate_page_number(self, page_number):
try:
- page_number = int(page_number)
+ page_number = int(page_number) + 1
except ValueError:
raise InvalidPage
- if page_number < 0 or page_number > self.pages - 1:
- raise InvalidPage
- return page_number
+ return self.validate_number(page_number)
def get_page(self, page_number):
- page_number = self.validate_page_number(page_number)
- bottom = page_number * self.num_per_page
- top = bottom + self.num_per_page
- if top + self.orphans >= self.hits:
- top = self.hits
- return self.query_set[bottom:top]
+ try:
+ page_number = int(page_number) + 1
+ except ValueError:
+ raise InvalidPage
+ return self.page(page_number).object_list
def has_next_page(self, page_number):
- "Does page $page_number have a 'next' page?"
return page_number < self.pages - 1
def has_previous_page(self, page_number):
@@ -52,7 +155,7 @@ class ObjectPaginator(object):
relative to total objects found (hits).
"""
page_number = self.validate_page_number(page_number)
- return (self.num_per_page * page_number) + 1
+ return (self.num_per_page * (page_number - 1)) + 1
def last_on_page(self, page_number):
"""
@@ -60,40 +163,23 @@ class ObjectPaginator(object):
relative to total objects found (hits).
"""
page_number = self.validate_page_number(page_number)
- page_number += 1 # 1-base
- if page_number == self.pages:
- return self.hits
+ if page_number == self.num_pages:
+ return self.count
return page_number * self.num_per_page
- def _get_hits(self):
- if self._hits is None:
- # Try .count() or fall back to len().
+ def _get_count(self):
+ # The old API allowed for self.object_list to be either a QuerySet or a
+ # list. Here, we handle both.
+ if self._count is None:
try:
- self._hits = int(self.query_set.count())
- except (AttributeError, TypeError, ValueError):
- # AttributeError if query_set has no object count.
- # TypeError if query_set.count() required arguments.
- # ValueError if int() fails.
- self._hits = len(self.query_set)
- return self._hits
+ self._count = self.object_list.count()
+ except TypeError:
+ self._count = len(self.object_list)
+ return self._count
+ count = property(_get_count)
- def _get_pages(self):
- if self._pages is None:
- hits = (self.hits - 1 - self.orphans)
- if hits < 1:
- hits = 0
- self._pages = hits // self.num_per_page + 1
- return self._pages
-
- def _get_page_range(self):
- """
- Returns a 1-based range of pages for iterating through within
- a template for loop.
- """
- if self._page_range is None:
- self._page_range = range(1, self.pages + 1)
- return self._page_range
+ # The old API called it "hits" instead of "count".
+ hits = count
- hits = property(_get_hits)
- pages = property(_get_pages)
- page_range = property(_get_page_range)
+ # The old API called it "pages" instead of "num_pages".
+ pages = Paginator.num_pages
diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py
index 3c7dcfa02e..2c92e2afad 100644
--- a/django/core/serializers/base.py
+++ b/django/core/serializers/base.py
@@ -22,10 +22,10 @@ class Serializer(object):
Abstract serializer base class.
"""
- # Indicates if the implemented serializer is only available for
+ # Indicates if the implemented serializer is only available for
# internal Django use.
internal_use_only = False
-
+
def serialize(self, queryset, **options):
"""
Serialize a queryset.
@@ -60,8 +60,6 @@ class Serializer(object):
"""
if isinstance(field, models.DateTimeField):
value = getattr(obj, field.name).strftime("%Y-%m-%d %H:%M:%S")
- elif isinstance(field, models.FileField):
- value = getattr(obj, "get_%s_url" % field.name, lambda: None)()
else:
value = field.flatten_data(follow=None, obj=obj).get(field.name, "")
return smart_unicode(value)
@@ -162,9 +160,9 @@ class DeserializedObject(object):
return "" % smart_str(self.object)
def save(self, save_m2m=True):
- # Call save on the Model baseclass directly. This bypasses any
+ # Call save on the Model baseclass directly. This bypasses any
# model-defined save. The save is also forced to be raw.
- # This ensures that the data that is deserialized is literally
+ # This ensures that the data that is deserialized is literally
# what came from the file, not post-processed by pre_save/save
# methods.
models.Model.save(self.object, raw=True)
diff --git a/django/core/servers/fastcgi.py b/django/core/servers/fastcgi.py
index de04a5af62..d7145e15ec 100644
--- a/django/core/servers/fastcgi.py
+++ b/django/core/servers/fastcgi.py
@@ -37,7 +37,9 @@ Optional Fcgi settings: (setting=value)
maxchildren=NUMBER hard limit number of processes / threads
daemonize=BOOL whether to detach from terminal.
pidfile=FILE write the spawned process-id to this file.
- workdir=DIRECTORY change to this directory when daemonizing
+ workdir=DIRECTORY change to this directory when daemonizing.
+ outlog=FILE write stdout to this file.
+ errlog=FILE write stderr to this file.
Examples:
Run a "standard" fastcgi process on a file-descriptor
@@ -69,6 +71,8 @@ FASTCGI_OPTIONS = {
'minspare': 2,
'maxchildren': 50,
'maxrequests': 0,
+ 'outlog': None,
+ 'errlog': None,
}
def fastcgi_help(message=None):
@@ -150,9 +154,15 @@ def runfastcgi(argset=[], **kwargs):
else:
return fastcgi_help("ERROR: Invalid option for daemonize parameter.")
+ daemon_kwargs = {}
+ if options['outlog']:
+ daemon_kwargs['out_log'] = options['outlog']
+ if options['errlog']:
+ daemon_kwargs['err_log'] = options['errlog']
+
if daemonize:
from django.utils.daemonize import become_daemon
- become_daemon(our_home_dir=options["workdir"])
+ become_daemon(our_home_dir=options["workdir"], **daemon_kwargs)
if options["pidfile"]:
fp = open(options["pidfile"], "w")
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 9ef767b998..45d437a63a 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -846,6 +846,16 @@ class FilePathField(Field):
self.path, self.match, self.recursive = path, match, recursive
kwargs['max_length'] = kwargs.get('max_length', 100)
Field.__init__(self, verbose_name, name, **kwargs)
+
+ def formfield(self, **kwargs):
+ defaults = {
+ 'path': self.path,
+ 'match': self.match,
+ 'recursive': self.recursive,
+ 'form_class': forms.FilePathField,
+ }
+ defaults.update(kwargs)
+ return super(FilePathField, self).formfield(**defaults)
def get_manipulator_field_objs(self):
return [curry(oldforms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)]
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index ab23fee210..3d2c21b023 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -548,6 +548,13 @@ class ForeignKey(RelatedField, Field):
params['choices'] = self.get_choices_default()
return field_objs, params
+ def get_default(self):
+ "Here we check if the default value is an object and return the to_field if so."
+ field_default = super(ForeignKey, self).get_default()
+ if isinstance(field_default, self.rel.to):
+ return getattr(field_default, self.rel.get_related_field().attname)
+ return field_default
+
def get_manipulator_field_objs(self):
rel_field = self.rel.get_related_field()
if self.rel.raw_id_admin and not isinstance(rel_field, AutoField):
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 0bc36f425a..a3d00c2ead 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1,5 +1,5 @@
from django.conf import settings
-from django.db import connection, transaction
+from django.db import connection, transaction, IntegrityError
from django.db.models.fields import DateField, FieldDoesNotExist
from django.db.models import signals, loading
from django.dispatch import dispatcher
@@ -285,11 +285,14 @@ class _QuerySet(object):
try:
return self.get(**kwargs), False
except self.model.DoesNotExist:
- params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
- params.update(defaults)
- obj = self.model(**params)
- obj.save()
- return obj, True
+ try:
+ params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
+ params.update(defaults)
+ obj = self.model(**params)
+ obj.save()
+ return obj, True
+ except IntegrityError, e:
+ return self.get(**kwargs), False
def latest(self, field_name=None):
"""
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 5439aa6c63..7faa3c875e 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -82,6 +82,9 @@ class HttpRequest(object):
def is_secure(self):
return os.environ.get("HTTPS") == "on"
+ def is_ajax(self):
+ return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
+
def _set_encoding(self, val):
"""
Sets the encoding used for GET/POST accesses. If the GET or POST
diff --git a/django/newforms/extras/widgets.py b/django/newforms/extras/widgets.py
index 0097ba3f54..e3ef1d7f69 100644
--- a/django/newforms/extras/widgets.py
+++ b/django/newforms/extras/widgets.py
@@ -3,6 +3,7 @@ Extra HTML Widget classes
"""
import datetime
+import re
from django.newforms.widgets import Widget, Select
from django.utils.dates import MONTHS
@@ -10,6 +11,8 @@ from django.utils.safestring import mark_safe
__all__ = ('SelectDateWidget',)
+RE_DATE = re.compile(r'(\d{4})-(\d\d?)-(\d\d?)$')
+
class SelectDateWidget(Widget):
"""
A Widget that splits date input into three