From 420f19aa353ee6568c93f34dfe2e6eef24bc528d Mon Sep 17 00:00:00 2001 From: Brian Rosner Date: Mon, 23 Jun 2008 21:05:02 +0000 Subject: [PATCH] newforms-admin: Merged from trunk up to [7729]. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7730 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/conf/locale/ca/LC_MESSAGES/django.mo | Bin 67276 -> 67353 bytes django/conf/locale/ca/LC_MESSAGES/django.po | 316 ++--- django/conf/locale/de/LC_MESSAGES/django.mo | Bin 48100 -> 52607 bytes django/conf/locale/de/LC_MESSAGES/django.po | 1096 +++++++---------- django/conf/locale/de/LC_MESSAGES/djangojs.mo | Bin 1556 -> 1571 bytes django/conf/locale/de/LC_MESSAGES/djangojs.po | 123 +- django/contrib/sessions/backends/base.py | 11 +- django/contrib/sessions/backends/cache.py | 3 +- django/contrib/sessions/backends/db.py | 6 +- django/contrib/sessions/backends/file.py | 16 +- django/contrib/sessions/middleware.py | 2 +- django/contrib/sessions/models.py | 9 +- django/contrib/sites/management.py | 1 + django/contrib/sites/models.py | 10 +- django/contrib/sites/tests.py | 13 + django/db/models/base.py | 19 +- django/db/models/loading.py | 12 +- django/db/models/query.py | 116 +- django/newforms/models.py | 17 +- docs/contributing.txt | 45 +- docs/db-api.txt | 2 +- docs/model-api.txt | 4 +- docs/modelforms.txt | 7 + extras/django_bash_completion | 2 +- tests/modeltests/delete/__init__.py | 1 + tests/modeltests/delete/models.py | 179 +++ 26 files changed, 1056 insertions(+), 954 deletions(-) create mode 100644 django/contrib/sites/tests.py create mode 100644 tests/modeltests/delete/__init__.py create mode 100644 tests/modeltests/delete/models.py diff --git a/django/conf/locale/ca/LC_MESSAGES/django.mo b/django/conf/locale/ca/LC_MESSAGES/django.mo index 4f61dfbbcd288496f6b914c1ba8cdbec02c44467..1775e0a8498bb559967a8155af3f0dff9d926f41 100644 GIT binary patch delta 21689 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∨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 delta 21611 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 diff --git a/django/conf/locale/ca/LC_MESSAGES/django.po b/django/conf/locale/ca/LC_MESSAGES/django.po index 36511eb58c..783fd99760 100644 --- a/django/conf/locale/ca/LC_MESSAGES/django.po +++ b/django/conf/locale/ca/LC_MESSAGES/django.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: Django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-05-26 10:35+0200\n" -"PO-Revision-Date: 2008-05-14 11:15+0200\n" +"POT-Creation-Date: 2008-06-20 12:36+0200\n" +"PO-Revision-Date: 2008-06-20 12:48+0200\n" "Last-Translator: Django Catalan Group \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" @@ -14,193 +14,201 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: conf/global_settings.py:43 -msgid "Arabic" -msgstr "Arabic" - #: conf/global_settings.py:44 -msgid "Bengali" -msgstr "Bengalí" +msgid "Arabic" +msgstr "aràbic" #: conf/global_settings.py:45 -msgid "Bulgarian" -msgstr "Búlgar" +msgid "Bengali" +msgstr "bengalí" #: conf/global_settings.py:46 -msgid "Catalan" -msgstr "Català" +msgid "Bulgarian" +msgstr "búlgar" #: conf/global_settings.py:47 -msgid "Czech" -msgstr "Txec" +msgid "Catalan" +msgstr "català" #: conf/global_settings.py:48 -msgid "Welsh" -msgstr "Galès" +msgid "Czech" +msgstr "txec" #: conf/global_settings.py:49 -msgid "Danish" -msgstr "Danès" +msgid "Welsh" +msgstr "galès" #: conf/global_settings.py:50 -msgid "German" -msgstr "Alemany" +msgid "Danish" +msgstr "danès" #: conf/global_settings.py:51 -msgid "Greek" -msgstr "Grec" +msgid "German" +msgstr "alemany" #: conf/global_settings.py:52 -msgid "English" -msgstr "Anglès" +msgid "Greek" +msgstr "grec" #: conf/global_settings.py:53 -msgid "Spanish" -msgstr "Espanyol" +msgid "English" +msgstr "anglès" #: conf/global_settings.py:54 -msgid "Argentinean Spanish" -msgstr "Castellà Argentí" +msgid "Spanish" +msgstr "espanyol" #: conf/global_settings.py:55 -msgid "Basque" -msgstr "Euskera" +msgid "Estonian" +msgstr "estonià" #: conf/global_settings.py:56 -msgid "Persian" -msgstr "Persa" +msgid "Argentinean Spanish" +msgstr "castellà argentí" #: conf/global_settings.py:57 -msgid "Finnish" -msgstr "Finlandès" +msgid "Basque" +msgstr "euskera" #: conf/global_settings.py:58 -msgid "French" -msgstr "Francès" +msgid "Persian" +msgstr "persa" #: conf/global_settings.py:59 -msgid "Irish" -msgstr "Irlandès" +msgid "Finnish" +msgstr "finlandès" #: conf/global_settings.py:60 -msgid "Galician" -msgstr "Gallec" +msgid "French" +msgstr "francès" #: conf/global_settings.py:61 -msgid "Hungarian" -msgstr "Húngar" +msgid "Irish" +msgstr "irlandès" #: conf/global_settings.py:62 -msgid "Hebrew" -msgstr "Hebreu" +msgid "Galician" +msgstr "gallec" #: conf/global_settings.py:63 -msgid "Croatian" -msgstr "Croat" +msgid "Hungarian" +msgstr "húngar" #: conf/global_settings.py:64 -msgid "Icelandic" -msgstr "Islandès" +msgid "Hebrew" +msgstr "hebreu" #: conf/global_settings.py:65 -msgid "Italian" -msgstr "Italià" +msgid "Croatian" +msgstr "croat" #: conf/global_settings.py:66 -msgid "Japanese" -msgstr "Japonès" +msgid "Icelandic" +msgstr "islandès" #: conf/global_settings.py:67 -msgid "Georgian" -msgstr "Georgià" +msgid "Italian" +msgstr "italià" #: conf/global_settings.py:68 -msgid "Korean" -msgstr "Coreà" +msgid "Japanese" +msgstr "japonès" #: conf/global_settings.py:69 -msgid "Khmer" -msgstr "Khmer" +msgid "Georgian" +msgstr "georgià" #: conf/global_settings.py:70 -msgid "Kannada" -msgstr "Canès" +msgid "Korean" +msgstr "coreà" #: conf/global_settings.py:71 -msgid "Latvian" -msgstr "Letó" +msgid "khmer" +msgstr "khmer" #: conf/global_settings.py:72 -msgid "Macedonian" -msgstr "Macedoni" +msgid "Kannada" +msgstr "canès" #: conf/global_settings.py:73 -msgid "Dutch" -msgstr "Holandès" +msgid "Latvian" +msgstr "letó" #: conf/global_settings.py:74 -msgid "Norwegian" -msgstr "Norueg" +msgid "Lithuanian" +msgstr "lituà" #: conf/global_settings.py:75 -msgid "Polish" -msgstr "Polac" +msgid "Macedonian" +msgstr "macedoni" #: conf/global_settings.py:76 -msgid "Portugese" -msgstr "Portuguès" +msgid "Dutch" +msgstr "holandès" #: conf/global_settings.py:77 -msgid "Brazilian Portuguese" -msgstr "Portuguès de Brasil" +msgid "Norwegian" +msgstr "norueg" #: conf/global_settings.py:78 -msgid "Romanian" -msgstr "Rumanès" +msgid "Polish" +msgstr "polac" #: conf/global_settings.py:79 -msgid "Russian" -msgstr "Rús" +msgid "Portugese" +msgstr "portuguès" #: conf/global_settings.py:80 -msgid "Slovak" -msgstr "Eslovac" +msgid "Brazilian Portuguese" +msgstr "portuguès de brasil" #: conf/global_settings.py:81 -msgid "Slovenian" -msgstr "Esloveni" +msgid "Romanian" +msgstr "rumanès" #: conf/global_settings.py:82 -msgid "Serbian" -msgstr "Serbi" +msgid "Russian" +msgstr "rús" #: conf/global_settings.py:83 -msgid "Swedish" -msgstr "Suec" +msgid "Slovak" +msgstr "eslovac" #: conf/global_settings.py:84 -msgid "Tamil" -msgstr "Tàmil" +msgid "Slovenian" +msgstr "esloveni" #: conf/global_settings.py:85 -msgid "Telugu" -msgstr "Telugu" +msgid "Serbian" +msgstr "serbi" #: conf/global_settings.py:86 -msgid "Turkish" -msgstr "Turc" +msgid "Swedish" +msgstr "suec" #: conf/global_settings.py:87 -msgid "Ukrainian" -msgstr "Ucranià" +msgid "Tamil" +msgstr "tàmil" #: conf/global_settings.py:88 -msgid "Simplified Chinese" -msgstr "Xinès simplificat" +msgid "Telugu" +msgstr "telugu" #: conf/global_settings.py:89 +msgid "Turkish" +msgstr "turc" + +#: conf/global_settings.py:90 +msgid "Ukrainian" +msgstr "ucranià" + +#: conf/global_settings.py:91 +msgid "Simplified Chinese" +msgstr "xinès simplificat" + +#: conf/global_settings.py:92 msgid "Traditional Chinese" -msgstr "Xinès tradicional" +msgstr "xinès tradicional" #: contrib/admin/filterspecs.py:44 #, python-format @@ -1137,15 +1145,15 @@ msgstr "permisos" msgid "group" msgstr "grup" -#: contrib/auth/models.py:98 contrib/auth/models.py:141 +#: contrib/auth/models.py:98 contrib/auth/models.py:148 msgid "groups" msgstr "grups" -#: contrib/auth/models.py:131 +#: contrib/auth/models.py:138 msgid "username" msgstr "nom d'usuari" -#: contrib/auth/models.py:131 +#: contrib/auth/models.py:138 msgid "" "Required. 30 characters or fewer. Alphanumeric characters only (letters, " "digits and underscores)." @@ -1153,23 +1161,23 @@ msgstr "" "Obligatori. 30 o menys caràcters. Només caràcters alfanumèrics (lletres, " "dígits i el guió baix)." -#: contrib/auth/models.py:132 +#: contrib/auth/models.py:139 msgid "first name" msgstr "nom propi" -#: contrib/auth/models.py:133 +#: contrib/auth/models.py:140 msgid "last name" msgstr "cognoms" -#: contrib/auth/models.py:134 +#: contrib/auth/models.py:141 msgid "e-mail address" msgstr "adreça de correu electrònic" -#: contrib/auth/models.py:135 +#: contrib/auth/models.py:142 msgid "password" msgstr "contrasenya" -#: contrib/auth/models.py:135 +#: contrib/auth/models.py:142 msgid "" "Use '[algo]$[salt]$[hexdigest]' or use the change " "password form." @@ -1177,19 +1185,19 @@ msgstr "" "Utilitzeu '[algo]$[salt]$[hexdigest]' o el formulari " "de canvi de contrasenya." -#: contrib/auth/models.py:136 +#: contrib/auth/models.py:143 msgid "staff status" msgstr "membre del personal" -#: contrib/auth/models.py:136 +#: contrib/auth/models.py:143 msgid "Designates whether the user can log into this admin site." msgstr "Indica si l'usuari pot entrar en el lloc administratiu." -#: contrib/auth/models.py:137 +#: contrib/auth/models.py:144 msgid "active" msgstr "actiu" -#: contrib/auth/models.py:137 +#: contrib/auth/models.py:144 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." @@ -1197,11 +1205,11 @@ msgstr "" "Designa si aquest usuari ha de ser tractat com a actiu. Deseleccioneu-ho " "enlloc d'esborrar comptes d'usuari." -#: contrib/auth/models.py:138 +#: contrib/auth/models.py:145 msgid "superuser status" msgstr "estat de superusuari" -#: contrib/auth/models.py:138 +#: contrib/auth/models.py:145 msgid "" "Designates that this user has all permissions without explicitly assigning " "them." @@ -1209,15 +1217,15 @@ msgstr "" "Designa que aquest usuari té tots els permissos sense assignar-los " "explícitament." -#: contrib/auth/models.py:139 +#: contrib/auth/models.py:146 msgid "last login" msgstr "últim inici de sessió" -#: contrib/auth/models.py:140 +#: contrib/auth/models.py:147 msgid "date joined" msgstr "data de creació" -#: contrib/auth/models.py:142 +#: contrib/auth/models.py:149 msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." @@ -1225,39 +1233,39 @@ msgstr "" "Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els " "permissos dels grups dels que sigui membre." -#: contrib/auth/models.py:143 +#: contrib/auth/models.py:150 msgid "user permissions" msgstr "permissos de l'usuari" -#: contrib/auth/models.py:147 +#: contrib/auth/models.py:154 msgid "user" msgstr "usuari" -#: contrib/auth/models.py:148 +#: contrib/auth/models.py:155 msgid "users" msgstr "usuaris" -#: contrib/auth/models.py:154 +#: contrib/auth/models.py:161 msgid "Personal info" msgstr "Informació personal" -#: contrib/auth/models.py:155 +#: contrib/auth/models.py:162 msgid "Permissions" msgstr "permisos" -#: contrib/auth/models.py:156 +#: contrib/auth/models.py:163 msgid "Important dates" msgstr "Dates importants" -#: contrib/auth/models.py:157 +#: contrib/auth/models.py:164 msgid "Groups" msgstr "Grups" -#: contrib/auth/models.py:316 +#: contrib/auth/models.py:323 msgid "message" msgstr "missatge" -#: contrib/auth/views.py:47 +#: contrib/auth/views.py:48 msgid "Logged out" msgstr "Sessió finalitzada" @@ -3897,12 +3905,12 @@ msgstr "" msgid "%(object)s with this %(type)s already exists for the given %(field)s." msgstr "Ja existeix un %(object)s del tipus %(type)s amb aquest %(field)s." -#: db/models/fields/__init__.py:54 +#: db/models/fields/__init__.py:51 #, python-format msgid "%(optname)s with this %(fieldname)s already exists." msgstr "Ja existeix %(optname)s amb aquest %(fieldname)s." -#: db/models/fields/__init__.py:179 db/models/fields/__init__.py:348 +#: db/models/fields/__init__.py:176 db/models/fields/__init__.py:348 #: db/models/fields/__init__.py:780 db/models/fields/__init__.py:791 #: newforms/fields.py:46 oldforms/__init__.py:374 msgid "This field is required." @@ -3937,18 +3945,18 @@ msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)" msgid "Please enter a valid %s." msgstr "Si us plau, introduïu un %s vàlid." -#: db/models/fields/related.py:721 +#: db/models/fields/related.py:746 msgid "Separate multiple IDs with commas." msgstr "Separi múltiples IDs amb comes." -#: db/models/fields/related.py:723 +#: db/models/fields/related.py:748 msgid "" "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Premeu la tecla \"Control\" -o \"Command\" en un Mac- per seleccionar més " "d'un valor." -#: db/models/fields/related.py:770 +#: db/models/fields/related.py:795 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." msgid_plural "" @@ -4007,11 +4015,11 @@ msgstr "Assegureu-vos de que no hi ha més de %s decimals." msgid "Ensure that there are no more than %s digits before the decimal point." msgstr "Assegureu-vos de que no hi ha més de %s dígits decimals." -#: newforms/fields.py:263 newforms/fields.py:751 +#: newforms/fields.py:263 newforms/fields.py:750 msgid "Enter a valid date." msgstr "Introduïu una data vàlida." -#: newforms/fields.py:296 newforms/fields.py:752 +#: newforms/fields.py:296 newforms/fields.py:751 msgid "Enter a valid time." msgstr "Introduïu una hora vàlida." @@ -4035,25 +4043,25 @@ msgstr "Introduïu una URL vàlida." msgid "This URL appears to be a broken link." msgstr "Aquesta URL sembla ser un enllaç trencat." -#: newforms/fields.py:560 newforms/models.py:299 +#: newforms/fields.py:559 newforms/models.py:305 msgid "Select a valid choice. That choice is not one of the available choices." msgstr "" "Escolli una opció vàlida; Aquesta opció no és una de les opcions disponibles." -#: newforms/fields.py:599 +#: newforms/fields.py:598 #, python-format msgid "Select a valid choice. %(value)s is not one of the available choices." msgstr "Esculliu una opció vàlida. %(value)s no és una de les opcions vàlides." -#: newforms/fields.py:600 newforms/fields.py:662 newforms/models.py:371 +#: newforms/fields.py:599 newforms/fields.py:661 newforms/models.py:372 msgid "Enter a list of values." msgstr "Introduïu una llista de valors." -#: newforms/fields.py:780 +#: newforms/fields.py:779 msgid "Enter a valid IPv4 address." msgstr "Introduïu una adreça IPv4 vàlida." -#: newforms/models.py:372 +#: newforms/models.py:373 #, python-format msgid "Select a valid choice. %s is not one of the available choices." msgstr "Escolliu una opció vàlida; %s' no és una de les opcions vàlides." @@ -4194,51 +4202,51 @@ msgstr "Dg" #: utils/dates.py:18 msgid "January" -msgstr "Gener" +msgstr "gener" #: utils/dates.py:18 msgid "February" -msgstr "Febrer" +msgstr "febrer" #: utils/dates.py:18 utils/dates.py:31 msgid "March" -msgstr "Març" +msgstr "març" #: utils/dates.py:18 utils/dates.py:31 msgid "April" -msgstr "Abril" +msgstr "abril" #: utils/dates.py:18 utils/dates.py:31 msgid "May" -msgstr "Maig" +msgstr "maig" #: utils/dates.py:18 utils/dates.py:31 msgid "June" -msgstr "Juny" +msgstr "juny" #: utils/dates.py:19 utils/dates.py:31 msgid "July" -msgstr "Juliol" +msgstr "juliol" #: utils/dates.py:19 msgid "August" -msgstr "Agost" +msgstr "agost" #: utils/dates.py:19 msgid "September" -msgstr "Setembre" +msgstr "setembre" #: utils/dates.py:19 msgid "October" -msgstr "Octubre" +msgstr "octubre" #: utils/dates.py:19 msgid "November" -msgstr "Novembre" +msgstr "novembre" #: utils/dates.py:20 msgid "December" -msgstr "Desembre" +msgstr "desembre" #: utils/dates.py:23 msgid "jan" @@ -4290,31 +4298,31 @@ msgstr "des" #: utils/dates.py:31 msgid "Jan." -msgstr "Gen." +msgstr "gen." #: utils/dates.py:31 msgid "Feb." -msgstr "Feb." +msgstr "feb." #: utils/dates.py:32 msgid "Aug." -msgstr "Ago." +msgstr "ago." #: utils/dates.py:32 msgid "Sept." -msgstr "Set." +msgstr "set." #: utils/dates.py:32 msgid "Oct." -msgstr "Oct." +msgstr "oct." #: utils/dates.py:32 msgid "Nov." -msgstr "Nov." +msgstr "nov." #: utils/dates.py:32 msgid "Dec." -msgstr "Des." +msgstr "des." #: utils/text.py:127 msgid "or" diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo index 226c64c560d98106f707a91810be9a4feaeedab5..234819f87931ef3854bf5b0851a31b0efeccf80e 100644 GIT binary patch delta 15949 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 delta 12887 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 Rp|5A}+u4OZy*`Zg`#%Tg#d`n% diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po index 754c840de0..f529167baa 100644 --- a/django/conf/locale/de/LC_MESSAGES/django.po +++ b/django/conf/locale/de/LC_MESSAGES/django.po @@ -1,14 +1,14 @@ # Translation of django.po to German # -# Copyright (C) 2005-2007, +# Copyright (C) 2005-2008, # This file is distributed under the same license as the django package. # msgid "" msgstr "" "Project-Id-Version: Django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-03-18 15:10-0500\n" -"PO-Revision-Date: 2008-03-03 16:10+0100\n" +"POT-Creation-Date: 2008-06-23 20:23+0200\n" +"PO-Revision-Date: 2008-06-23 20:51+0100\n" "Last-Translator: Jannis Leidel \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -19,191 +19,199 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: conf/global_settings.py:39 +#: conf/global_settings.py:44 msgid "Arabic" msgstr "Arabisch" -#: conf/global_settings.py:40 +#: conf/global_settings.py:45 msgid "Bengali" msgstr "Bengali" -#: conf/global_settings.py:41 +#: conf/global_settings.py:46 msgid "Bulgarian" msgstr "Bulgarisch" -#: conf/global_settings.py:42 +#: conf/global_settings.py:47 msgid "Catalan" msgstr "Katalanisch" -#: conf/global_settings.py:43 +#: conf/global_settings.py:48 msgid "Czech" msgstr "Tschechisch" -#: conf/global_settings.py:44 +#: conf/global_settings.py:49 msgid "Welsh" msgstr "Walisisch" -#: conf/global_settings.py:45 +#: conf/global_settings.py:50 msgid "Danish" msgstr "Dänisch" -#: conf/global_settings.py:46 +#: conf/global_settings.py:51 msgid "German" msgstr "Deutsch" -#: conf/global_settings.py:47 +#: conf/global_settings.py:52 msgid "Greek" msgstr "Griechisch" -#: conf/global_settings.py:48 +#: conf/global_settings.py:53 msgid "English" msgstr "Englisch" -#: conf/global_settings.py:49 +#: conf/global_settings.py:54 msgid "Spanish" msgstr "Spanisch" -#: conf/global_settings.py:50 +#: conf/global_settings.py:55 +msgid "Estonian" +msgstr "Estnisch" + +#: conf/global_settings.py:56 msgid "Argentinean Spanish" msgstr "Argentinisches Spanisch" -#: conf/global_settings.py:51 +#: conf/global_settings.py:57 msgid "Basque" msgstr "Baskisch" -#: conf/global_settings.py:52 +#: conf/global_settings.py:58 msgid "Persian" msgstr "Persisch" -#: conf/global_settings.py:53 +#: conf/global_settings.py:59 msgid "Finnish" msgstr "Finnisch" -#: conf/global_settings.py:54 +#: conf/global_settings.py:60 msgid "French" msgstr "Französisch" -#: conf/global_settings.py:55 +#: conf/global_settings.py:61 msgid "Irish" msgstr "Irisch" -#: conf/global_settings.py:56 +#: conf/global_settings.py:62 msgid "Galician" msgstr "Galicisch" -#: conf/global_settings.py:57 +#: conf/global_settings.py:63 msgid "Hungarian" msgstr "Ungarisch" -#: conf/global_settings.py:58 +#: conf/global_settings.py:64 msgid "Hebrew" msgstr "Hebräisch" -#: conf/global_settings.py:59 +#: conf/global_settings.py:65 msgid "Croatian" msgstr "Kroatisch" -#: conf/global_settings.py:60 +#: conf/global_settings.py:66 msgid "Icelandic" msgstr "Isländisch" -#: conf/global_settings.py:61 +#: conf/global_settings.py:67 msgid "Italian" msgstr "Italienisch" -#: conf/global_settings.py:62 +#: conf/global_settings.py:68 msgid "Japanese" msgstr "Japanisch" -#: conf/global_settings.py:63 +#: conf/global_settings.py:69 msgid "Georgian" msgstr "Georgisch" -#: conf/global_settings.py:64 +#: conf/global_settings.py:70 msgid "Korean" msgstr "Koreanisch" -#: conf/global_settings.py:65 +#: conf/global_settings.py:71 msgid "Khmer" msgstr "Khmer" -#: conf/global_settings.py:66 +#: conf/global_settings.py:72 msgid "Kannada" msgstr "Kannada" -#: conf/global_settings.py:67 +#: conf/global_settings.py:73 msgid "Latvian" msgstr "Lettisch" -#: conf/global_settings.py:68 +#: conf/global_settings.py:74 +msgid "Lithuanian" +msgstr "Litauisch" + +#: conf/global_settings.py:75 msgid "Macedonian" msgstr "Mazedonisch" -#: conf/global_settings.py:69 +#: conf/global_settings.py:76 msgid "Dutch" msgstr "Holländisch" -#: conf/global_settings.py:70 +#: conf/global_settings.py:77 msgid "Norwegian" msgstr "Norwegisch" -#: conf/global_settings.py:71 +#: conf/global_settings.py:78 msgid "Polish" msgstr "Polnisch" -#: conf/global_settings.py:72 +#: conf/global_settings.py:79 msgid "Portugese" msgstr "Portugiesisch" -#: conf/global_settings.py:73 -msgid "Brazilian" +#: conf/global_settings.py:80 +msgid "Brazilian Portuguese" msgstr "Brasilianisches Portugiesisch" -#: conf/global_settings.py:74 +#: conf/global_settings.py:81 msgid "Romanian" msgstr "Rumänisch" -#: conf/global_settings.py:75 +#: conf/global_settings.py:82 msgid "Russian" msgstr "Russisch" -#: conf/global_settings.py:76 +#: conf/global_settings.py:83 msgid "Slovak" msgstr "Slowakisch" -#: conf/global_settings.py:77 +#: conf/global_settings.py:84 msgid "Slovenian" msgstr "Slowenisch" -#: conf/global_settings.py:78 +#: conf/global_settings.py:85 msgid "Serbian" msgstr "Serbisch" -#: conf/global_settings.py:79 +#: conf/global_settings.py:86 msgid "Swedish" msgstr "Schwedisch" -#: conf/global_settings.py:80 +#: conf/global_settings.py:87 msgid "Tamil" msgstr "Tamilisch" -#: conf/global_settings.py:81 +#: conf/global_settings.py:88 msgid "Telugu" msgstr "Telugisch" -#: conf/global_settings.py:82 +#: conf/global_settings.py:89 msgid "Turkish" msgstr "Türkisch" -#: conf/global_settings.py:83 +#: conf/global_settings.py:90 msgid "Ukrainian" msgstr "Ukrainisch" -#: conf/global_settings.py:84 +#: conf/global_settings.py:91 msgid "Simplified Chinese" msgstr "Vereinfachtes Chinesisch" -#: conf/global_settings.py:85 +#: conf/global_settings.py:92 msgid "Traditional Chinese" msgstr "Traditionelles Chinesisch" @@ -216,8 +224,10 @@ 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" @@ -241,17 +251,20 @@ 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" @@ -291,8 +304,7 @@ 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 @@ -324,13 +336,8 @@ 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,23 +408,13 @@ 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" @@ -463,14 +460,8 @@ 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 @@ -505,12 +496,8 @@ 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" @@ -549,12 +536,8 @@ 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" @@ -578,9 +561,7 @@ 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 ein." #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Bookmarklets" @@ -601,12 +582,9 @@ 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" @@ -616,24 +594,16 @@ 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)" @@ -641,9 +611,7 @@ 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)" @@ -651,8 +619,7 @@ 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." @@ -679,13 +646,8 @@ 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:" @@ -716,12 +678,8 @@ 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" @@ -755,12 +713,8 @@ 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:" @@ -790,12 +744,14 @@ 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." @@ -813,52 +769,42 @@ 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 +#: contrib/admin/views/decorators.py:89 +#, 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." + +#: contrib/admin/views/decorators.py:93 msgid "Usernames cannot contain the '@' character." 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." - -#: 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:" @@ -878,8 +824,10 @@ 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:" @@ -903,9 +851,12 @@ 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" @@ -913,7 +864,8 @@ 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)" @@ -938,7 +890,8 @@ 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" @@ -947,7 +900,8 @@ 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" @@ -971,7 +925,8 @@ 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:8 msgid "URL" msgstr "Adresse (URL)" @@ -992,7 +947,8 @@ 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." @@ -1007,8 +963,10 @@ 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" @@ -1034,11 +992,8 @@ 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 @@ -1079,11 +1034,12 @@ msgstr "%s auswählen" msgid "Select %s to change" msgstr "%s zur Änderung auswählen" -#: contrib/admin/views/main.py:784 +#: contrib/admin/views/main.py:765 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." @@ -1092,24 +1048,16 @@ 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 @@ -1124,7 +1072,8 @@ 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" @@ -1136,7 +1085,8 @@ 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" @@ -1144,133 +1094,113 @@ 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:148 msgid "groups" msgstr "Gruppen" -#: contrib/auth/models.py:131 +#: contrib/auth/models.py:138 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)." +#: contrib/auth/models.py:138 +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 +#: contrib/auth/models.py:139 msgid "first name" msgstr "Vorname" -#: contrib/auth/models.py:133 +#: contrib/auth/models.py:140 msgid "last name" msgstr "Nachname" -#: contrib/auth/models.py:134 +#: contrib/auth/models.py:141 msgid "e-mail address" msgstr "E-Mail-Adresse" -#: contrib/auth/models.py:135 +#: contrib/auth/models.py:142 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." +#: contrib/auth/models.py:142 +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 +#: contrib/auth/models.py:143 msgid "staff status" msgstr "Administrator" -#: contrib/auth/models.py:136 +#: contrib/auth/models.py:143 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 +#: contrib/auth/models.py:144 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." +#: contrib/auth/models.py:144 +msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." +msgstr "Legt fest, ob dieser Benutzer aktiv ist. Kann deaktiviert werden, anstatt Benutzer zu löschen." -#: contrib/auth/models.py:138 +#: contrib/auth/models.py:145 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." +#: contrib/auth/models.py:145 +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 +#: contrib/auth/models.py:146 msgid "last login" msgstr "Letzte Anmeldung" -#: contrib/auth/models.py:140 +#: contrib/auth/models.py:147 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." +#: contrib/auth/models.py:149 +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 +#: contrib/auth/models.py:150 msgid "user permissions" msgstr "Berechtigungen" -#: contrib/auth/models.py:147 +#: contrib/auth/models.py:154 msgid "user" msgstr "Benutzer" -#: contrib/auth/models.py:148 +#: contrib/auth/models.py:155 msgid "users" msgstr "Benutzer" -#: contrib/auth/models.py:154 +#: contrib/auth/models.py:161 msgid "Personal info" msgstr "Persönliche Infos" -#: contrib/auth/models.py:155 +#: contrib/auth/models.py:162 msgid "Permissions" msgstr "Berechtigungen" -#: contrib/auth/models.py:156 +#: contrib/auth/models.py:163 msgid "Important dates" msgstr "Wichtige Daten" -#: contrib/auth/models.py:157 +#: contrib/auth/models.py:164 msgid "Groups" msgstr "Gruppen" -#: contrib/auth/models.py:316 +#: contrib/auth/models.py:323 msgid "message" msgstr "Mitteilung" -#: contrib/auth/views.py:47 +#: contrib/auth/views.py:48 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" @@ -1278,7 +1208,8 @@ 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" @@ -1319,11 +1250,13 @@ 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" @@ -1332,18 +1265,15 @@ 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" @@ -1485,32 +1415,25 @@ 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" @@ -1538,23 +1461,17 @@ 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" @@ -1580,54 +1497,50 @@ msgstr "Inhaltstyp" 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: Am Anfang und Ende muss ein / stehen." - #: contrib/flatpages/models.py:9 +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:10 msgid "title" msgstr "Titel" -#: contrib/flatpages/models.py:10 +#: contrib/flatpages/models.py:11 msgid "content" msgstr "Inhalt" -#: contrib/flatpages/models.py:11 +#: contrib/flatpages/models.py:12 msgid "enable comments" msgstr "Kommentare aktivieren" -#: contrib/flatpages/models.py:12 +#: contrib/flatpages/models.py:13 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." - #: contrib/flatpages/models.py:14 +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:15 msgid "registration required" msgstr "Registrierung erforderlich" -#: contrib/flatpages/models.py:14 +#: contrib/flatpages/models.py:15 msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "" -"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 +#: contrib/flatpages/models.py:20 msgid "flat page" msgstr "Webseite" -#: contrib/flatpages/models.py:19 +#: contrib/flatpages/models.py:21 msgid "flat pages" msgstr "Webseiten" +#: contrib/flatpages/models.py:27 +msgid "Advanced options" +msgstr "Erweiterte Optionen" + #: contrib/humanize/templatetags/humanize.py:19 msgid "th" msgstr "." @@ -1714,31 +1627,26 @@ msgid "yesterday" 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 NNNN oder ANNNNAAA 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 darf nur Ziffern enthalten." #: contrib/localflavor/ar/forms.py:50 -#, fuzzy msgid "This field requires 7 or 8 digits." 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 CUIT im Format XX-XXXXXXXX-X oder XXXXXXXXXXXX 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 CUIT." @@ -1755,10 +1663,7 @@ msgid "Phone numbers must be in XX-XXXX-XXXX format." 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." +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 @@ -1766,7 +1671,6 @@ msgid "Invalid CPF number." msgstr "Ungültige CPF-Nummer." #: contrib/localflavor/br/forms.py:95 -#, fuzzy msgid "This field requires at most 11 digits or 14 characters." msgstr "Dieses Feld benötigt mindestens 11 Ziffern oder 14 Zeichen." @@ -1775,21 +1679,16 @@ msgid "Invalid CNPJ number." msgstr "Ungültige CNPJ-Nummer." #: contrib/localflavor/br/forms.py:136 -#, fuzzy msgid "This field requires at least 14 digits" msgstr "Dieses Feld benötigt mindestens 14 Ziffern." #: contrib/localflavor/ca/forms.py:17 -#, fuzzy msgid "Enter a postal code in the format XXX XXX." -msgstr "Bitte eine gültige Postleitzahl im Format XXXXX eingeben." +msgstr "Bitte eine gültige Postleitzahl im Format XXX XXX 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 kanadische Sozialversicherungsnummer im Format XXX-" -"XXX-XXX eingeben." +msgstr "Bitte eine gültige kanadische Sozialversicherungsnummer im Format XXX-XXX-XXX eingeben." #: contrib/localflavor/ch/ch_states.py:5 msgid "Aargau" @@ -1812,7 +1711,6 @@ msgid "Basel-Land" msgstr "" #: contrib/localflavor/ch/ch_states.py:10 -#, fuzzy msgid "Berne" msgstr "Bern" @@ -1825,22 +1723,20 @@ msgid "Geneva" msgstr "Genf" #: contrib/localflavor/ch/ch_states.py:13 -#, fuzzy msgid "Glarus" -msgstr "Gruppen" +msgstr "" #: contrib/localflavor/ch/ch_states.py:14 msgid "Graubuenden" -msgstr "" +msgstr "Graubünden" #: contrib/localflavor/ch/ch_states.py:15 msgid "Jura" msgstr "" #: contrib/localflavor/ch/ch_states.py:16 -#, fuzzy msgid "Lucerne" -msgstr "Benutzername" +msgstr "Luzern" #: contrib/localflavor/ch/ch_states.py:17 msgid "Neuchatel" @@ -1871,7 +1767,6 @@ msgid "St. Gallen" msgstr "" #: contrib/localflavor/ch/ch_states.py:24 -#, fuzzy msgid "Thurgau" msgstr "" @@ -1880,7 +1775,6 @@ msgid "Ticino" msgstr "" #: contrib/localflavor/ch/ch_states.py:26 -#, fuzzy msgid "Uri" msgstr "" @@ -1893,41 +1787,33 @@ msgid "Vaud" msgstr "" #: contrib/localflavor/ch/ch_states.py:29 -#, fuzzy msgid "Zug" msgstr "" #: contrib/localflavor/ch/ch_states.py:30 -#, fuzzy msgid "Zurich" 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." -msgstr "" -"Bitte eine gültige Schweizer Identifikations- oder Reisepassnummer im Format" -"X1234567<0 oder 1234567890 eingeben." +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 FormatX1234567<0 oder 1234567890 eingeben." #: contrib/localflavor/cl/forms.py:29 -#, fuzzy msgid "Enter a valid Chilean RUT." -msgstr "Bitte einen gültige chilenische RUT eingeben." +msgstr "Bitte eine 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 chilenische RUT im Format XX.XXX.XXX-X eingeben." #: contrib/localflavor/cl/forms.py:31 -#, fuzzy msgid "The Chilean RUT is not valid." -msgstr "Dieses Feld ist ungültig." +msgstr "Diese chilenische RUT ist ungültig." #: contrib/localflavor/de/de_states.py:5 msgid "Baden-Wuerttemberg" @@ -1993,18 +1879,15 @@ 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" @@ -2023,7 +1906,6 @@ msgid "Almeria" msgstr "" #: contrib/localflavor/es/es_provinces.py:9 -#, fuzzy msgid "Avila" msgstr "" @@ -2036,7 +1918,6 @@ msgid "Illes Balears" msgstr "" #: contrib/localflavor/es/es_provinces.py:12 -#, fuzzy msgid "Barcelona" msgstr "" @@ -2077,7 +1958,6 @@ msgid "Girona" msgstr "" #: contrib/localflavor/es/es_provinces.py:22 -#, fuzzy msgid "Granada" msgstr "" @@ -2094,17 +1974,14 @@ msgid "Huelva" msgstr "" #: contrib/localflavor/es/es_provinces.py:26 -#, fuzzy msgid "Huesca" msgstr "" #: contrib/localflavor/es/es_provinces.py:27 -#, fuzzy msgid "Jaen" msgstr "" #: contrib/localflavor/es/es_provinces.py:28 -#, fuzzy msgid "Leon" msgstr "" @@ -2147,7 +2024,6 @@ msgid "Asturias" msgstr "" #: contrib/localflavor/es/es_provinces.py:38 -#, fuzzy msgid "Palencia" msgstr "" @@ -2169,12 +2045,10 @@ msgstr "" #: contrib/localflavor/es/es_provinces.py:43 #: contrib/localflavor/es/es_regions.py:11 -#, fuzzy msgid "Cantabria" msgstr "" #: contrib/localflavor/es/es_provinces.py:44 -#, fuzzy msgid "Segovia" msgstr "" @@ -2183,7 +2057,6 @@ msgid "Seville" msgstr "" #: contrib/localflavor/es/es_provinces.py:46 -#, fuzzy msgid "Soria" msgstr "" @@ -2192,7 +2065,6 @@ msgid "Tarragona" msgstr "" #: contrib/localflavor/es/es_provinces.py:48 -#, fuzzy msgid "Teruel" msgstr "" @@ -2201,7 +2073,6 @@ msgid "Toledo" msgstr "" #: contrib/localflavor/es/es_provinces.py:50 -#, fuzzy msgid "Valencia" msgstr "" @@ -2250,7 +2121,6 @@ msgid "Basque Country" msgstr "" #: contrib/localflavor/es/es_regions.py:10 -#, fuzzy msgid "Canary Islands" msgstr "" @@ -2263,7 +2133,6 @@ msgid "Castile and Leon" msgstr "" #: contrib/localflavor/es/es_regions.py:14 -#, fuzzy msgid "Catalonia" msgstr "" @@ -2272,7 +2141,6 @@ msgid "Extremadura" msgstr "" #: contrib/localflavor/es/es_regions.py:16 -#, fuzzy msgid "Galicia" msgstr "Galicien" @@ -2289,27 +2157,18 @@ msgid "Valencian Community" 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 01XXX bis 52XXX 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 Telefonnummer in einem der folgenden Formate eingeben " -"6XXXXXXXX, 8XXXXXXXX oder 9XXXXXXXX." +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 NIF, NIE oder CIF eingeben." #: contrib/localflavor/es/forms.py:67 -#, fuzzy msgid "Please enter a valid NIF or NIE." msgstr "Bitte eine gültige NIF oder NIE eingeben." @@ -2326,11 +2185,8 @@ msgid "Invalid checksum for CIF." 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 Kontonummer im Format XXXX-XXXX-XX-XXXXXXXXXX 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." @@ -2341,41 +2197,32 @@ msgid "Enter a valid Finnish social security number." 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 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 isländische Identifikationsnummer im Format XXXXXX-XXXX " -"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 "Die isländische Identifikationsnummer ist nicht gültig." #: contrib/localflavor/it/forms.py:14 -#, fuzzy msgid "Enter a valid zip code." -msgstr "Bitte eine Postleitzahl eingeben." +msgstr "Bitte eine gültige Postleitzahl eingeben." #: contrib/localflavor/it/forms.py:43 -#, fuzzy msgid "Enter a valid Social Security number." 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 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" @@ -2578,7 +2425,6 @@ msgid "Baja California Sur" msgstr "" #: contrib/localflavor/mx/mx_states.py:15 -#, fuzzy msgid "Campeche" msgstr "" @@ -2607,7 +2453,6 @@ msgid "Durango" msgstr "" #: contrib/localflavor/mx/mx_states.py:22 -#, fuzzy msgid "Guerrero" msgstr "" @@ -2660,7 +2505,6 @@ msgid "Quintana Roo" msgstr "" #: contrib/localflavor/mx/mx_states.py:35 -#, fuzzy msgid "Sinaloa" msgstr "" @@ -2697,22 +2541,18 @@ msgid "Zacatecas" msgstr "" #: contrib/localflavor/nl/forms.py:21 -#, fuzzy msgid "Enter a valid postal code" msgstr "Bitte eine gültige Postleitzahl eingeben." #: contrib/localflavor/nl/forms.py:52 -#, fuzzy msgid "Enter a valid phone number" 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 SoFi-Nummer eingeben." #: contrib/localflavor/nl/nl_provinces.py:4 -#, fuzzy msgid "Drente" msgstr "" @@ -2725,17 +2565,14 @@ msgid "Friesland" msgstr "" #: contrib/localflavor/nl/nl_provinces.py:7 -#, fuzzy msgid "Gelderland" msgstr "" #: contrib/localflavor/nl/nl_provinces.py:8 -#, fuzzy msgid "Groningen" msgstr "" #: contrib/localflavor/nl/nl_provinces.py:9 -#, fuzzy msgid "Limburg" msgstr "" @@ -2752,12 +2589,10 @@ msgid "Overijssel" msgstr "" #: contrib/localflavor/nl/nl_provinces.py:13 -#, fuzzy msgid "Utrecht" msgstr "" #: contrib/localflavor/nl/nl_provinces.py:14 -#, fuzzy msgid "Zeeland" msgstr "" @@ -2770,12 +2605,10 @@ msgid "Enter a valid Norwegian social security number." msgstr "Bitte eine gültige norwegische Sozialversicherungsnummer eingeben." #: contrib/localflavor/pe/forms.py:24 -#, fuzzy msgid "This field requires 8 digits." msgstr "Dieses Feld benötigt 8 Zeichen." #: contrib/localflavor/pe/forms.py:52 -#, fuzzy msgid "This field requires 11 digits." msgstr "Dieses Feld benötigt 11 Zeichen." @@ -2788,12 +2621,8 @@ msgid "Wrong checksum for the National Identification Number." 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 Steuernummer (NIP) im Format XXX-XXX-XX-XX oder XX-XX-XXX-XXX " -"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)." @@ -2801,21 +2630,17 @@ 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 "Nationale Geschäftsregistrierungsnummer (REGON) besteht aus 7 oder " -"9 Zeichen." +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 "Falsche Prüfsumme für die nationale Geschäftsregistrierungsnummer " -"(REGON)." +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 XX-XXX eingeben." #: contrib/localflavor/pl/pl_voivodeships.py:8 -#, fuzzy msgid "Lower Silesia" msgstr "" @@ -2844,7 +2669,6 @@ msgid "Masovia" msgstr "" #: contrib/localflavor/pl/pl_voivodeships.py:15 -#, fuzzy msgid "Opole" msgstr "" @@ -2857,12 +2681,10 @@ msgid "Podlasie" msgstr "" #: contrib/localflavor/pl/pl_voivodeships.py:18 -#, fuzzy msgid "Pomerania" msgstr "" #: contrib/localflavor/pl/pl_voivodeships.py:19 -#, fuzzy msgid "Silesia" msgstr "" @@ -2879,15 +2701,12 @@ msgid "Greater Poland" msgstr "" #: contrib/localflavor/pl/pl_voivodeships.py:23 -#, fuzzy msgid "West Pomerania" 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 XXXXX oder XXX XX eingeben." +msgstr "Bitte eine gültige Postleitzahl im Format XXXXX oder XXX XX eingeben." #: contrib/localflavor/sk/sk_districts.py:8 msgid "Banska Bystrica" @@ -2906,7 +2725,6 @@ msgid "Banovce nad Bebravou" msgstr "" #: contrib/localflavor/sk/sk_districts.py:12 -#, fuzzy msgid "Brezno" msgstr "" @@ -2951,12 +2769,10 @@ msgid "Dunajska Streda" msgstr "" #: contrib/localflavor/sk/sk_districts.py:23 -#, fuzzy msgid "Galanta" msgstr "" #: contrib/localflavor/sk/sk_districts.py:24 -#, fuzzy msgid "Gelnica" msgstr "" @@ -2977,7 +2793,6 @@ msgid "Kezmarok" msgstr "" #: contrib/localflavor/sk/sk_districts.py:29 -#, fuzzy msgid "Komarno" msgstr "" @@ -3026,12 +2841,10 @@ msgid "Lucenec" msgstr "" #: contrib/localflavor/sk/sk_districts.py:41 -#, fuzzy msgid "Malacky" msgstr "" #: contrib/localflavor/sk/sk_districts.py:42 -#, fuzzy msgid "Martin" msgstr "" @@ -3072,7 +2885,6 @@ msgid "Pezinok" msgstr "" #: contrib/localflavor/sk/sk_districts.py:52 -#, fuzzy msgid "Piestany" msgstr "" @@ -3117,7 +2929,6 @@ msgid "Ruzomberok" msgstr "" #: contrib/localflavor/sk/sk_districts.py:63 -#, fuzzy msgid "Sabinov" msgstr "" @@ -3126,17 +2937,14 @@ msgid "Senec" msgstr "" #: contrib/localflavor/sk/sk_districts.py:65 -#, fuzzy msgid "Senica" msgstr "" #: contrib/localflavor/sk/sk_districts.py:66 -#, fuzzy msgid "Skalica" msgstr "" #: contrib/localflavor/sk/sk_districts.py:67 -#, fuzzy msgid "Snina" msgstr "" @@ -3161,7 +2969,6 @@ msgid "Svidnik" msgstr "" #: contrib/localflavor/sk/sk_districts.py:73 -#, fuzzy msgid "Sala" msgstr "" @@ -3174,7 +2981,6 @@ msgid "Trebisov" msgstr "" #: contrib/localflavor/sk/sk_districts.py:76 -#, fuzzy msgid "Trencin" msgstr "" @@ -3251,7 +3057,6 @@ msgid "Zilina region" msgstr "" #: contrib/localflavor/uk/forms.py:21 -#, fuzzy msgid "Enter a valid postcode." msgstr "Bitte eine gültige Postleitzahl eingeben." @@ -3280,7 +3085,6 @@ msgid "Derbyshire" msgstr "" #: contrib/localflavor/uk/uk_regions.py:18 -#, fuzzy msgid "Devon" msgstr "" @@ -3321,7 +3125,6 @@ msgid "Hertfordshire" msgstr "" #: contrib/localflavor/uk/uk_regions.py:28 -#, fuzzy msgid "Kent" msgstr "" @@ -3386,9 +3189,8 @@ msgid "Suffolk" msgstr "" #: contrib/localflavor/uk/uk_regions.py:44 -#, fuzzy msgid "Surrey" -msgstr "Derzeit:" +msgstr "" #: contrib/localflavor/uk/uk_regions.py:45 msgid "Tyne and Wear" @@ -3475,7 +3277,6 @@ msgid "West Glamorgan" msgstr "" #: contrib/localflavor/uk/uk_regions.py:75 -#, fuzzy msgid "Borders" msgstr "" @@ -3488,12 +3289,10 @@ msgid "Dumfries and Galloway" msgstr "" #: contrib/localflavor/uk/uk_regions.py:78 -#, fuzzy msgid "Fife" msgstr "" #: contrib/localflavor/uk/uk_regions.py:79 -#, fuzzy msgid "Grampian" msgstr "" @@ -3502,7 +3301,6 @@ msgid "Highland" msgstr "" #: contrib/localflavor/uk/uk_regions.py:81 -#, fuzzy msgid "Lothian" msgstr "" @@ -3527,7 +3325,6 @@ msgid "Western Isles" msgstr "" #: contrib/localflavor/uk/uk_regions.py:90 -#, fuzzy msgid "England" msgstr "England" @@ -3536,48 +3333,38 @@ msgid "Northern Ireland" msgstr "Nordirland" #: contrib/localflavor/uk/uk_regions.py:92 -#, fuzzy msgid "Scotland" msgstr "Schottland" #: contrib/localflavor/uk/uk_regions.py:93 -#, fuzzy msgid "Wales" -msgstr "Wales" +msgstr "" #: 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 südafrikanische Sozialversicherungsnummer eingeben." +msgstr "Bitte eine gültige südafrikanische Identifikationsnummer eingeben." #: contrib/localflavor/za/forms.py:54 -#, fuzzy msgid "Enter a valid South African postal code" msgstr "Bitte eine gültige südafrikanische Postleitzahl eingeben." #: contrib/localflavor/za/za_provinces.py:4 -#, fuzzy msgid "Eastern Cape" msgstr "" #: contrib/localflavor/za/za_provinces.py:5 -#, fuzzy msgid "Free State" msgstr "" #: contrib/localflavor/za/za_provinces.py:6 -#, fuzzy msgid "Gauteng" msgstr "" @@ -3598,12 +3385,10 @@ msgid "Northern Cape" msgstr "" #: contrib/localflavor/za/za_provinces.py:11 -#, fuzzy msgid "North West" msgstr "" #: contrib/localflavor/za/za_provinces.py:12 -#, fuzzy msgid "Western Cape" msgstr "" @@ -3612,24 +3397,16 @@ 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" @@ -3639,23 +3416,23 @@ msgstr "Umleitung" msgid "redirects" msgstr "Umleitungen" -#: contrib/sessions/models.py:41 +#: contrib/sessions/models.py:45 msgid "session key" msgstr "Sitzungs-ID" -#: contrib/sessions/models.py:42 +#: contrib/sessions/models.py:47 msgid "session data" msgstr "Sitzungsdaten" -#: contrib/sessions/models.py:43 +#: contrib/sessions/models.py:48 msgid "expire date" msgstr "Verfallsdatum" -#: contrib/sessions/models.py:48 +#: contrib/sessions/models.py:53 msgid "session" msgstr "Sitzung" -#: contrib/sessions/models.py:49 +#: contrib/sessions/models.py:54 msgid "sessions" msgstr "Sitzungen" @@ -3680,18 +3457,12 @@ 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." @@ -3725,7 +3496,8 @@ 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:152 msgid "Enter a whole number." msgstr "Bitte eine ganze Zahl eingeben." @@ -3742,7 +3514,8 @@ 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:527 +#: core/validators.py:156 +#: db/models/fields/__init__.py:548 msgid "Enter a valid date in YYYY-MM-DD format." msgstr "Bitte ein gültiges Datum im Format JJJJ-MM-TT eingeben." @@ -3750,29 +3523,27 @@ 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:604 +#: core/validators.py:165 +#: db/models/fields/__init__.py:625 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." -msgstr "" -"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:403 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:433 #: 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:459 +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 @@ -3782,8 +3553,7 @@ 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 @@ -3813,7 +3583,8 @@ 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." @@ -3838,21 +3609,20 @@ 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." @@ -3885,33 +3655,23 @@ 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." @@ -3920,15 +3680,12 @@ 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." @@ -3945,226 +3702,202 @@ 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 +#: db/models/fields/__init__.py:51 #, 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:327 -#: db/models/fields/__init__.py:759 db/models/fields/__init__.py:770 -#: newforms/fields.py:45 oldforms/__init__.py:374 +#: db/models/fields/__init__.py:176 +#: db/models/fields/__init__.py:348 +#: db/models/fields/__init__.py:780 +#: db/models/fields/__init__.py:791 +#: newforms/fields.py:46 +#: oldforms/__init__.py:374 msgid "This field is required." msgstr "Dieses Feld ist zwingend erforderlich." -#: db/models/fields/__init__.py:427 +#: db/models/fields/__init__.py:448 msgid "This value must be an integer." msgstr "Dieser Wert muss eine Ganzzahl sein." -#: db/models/fields/__init__.py:466 +#: db/models/fields/__init__.py:487 msgid "This value must be either True or False." msgstr "Dieser Wert muss wahr oder falsch sein." -#: db/models/fields/__init__.py:490 +#: db/models/fields/__init__.py:511 msgid "This field cannot be null." msgstr "Dieses Feld darf nicht leer sein." -#: db/models/fields/__init__.py:668 +#: db/models/fields/__init__.py:689 msgid "This value must be a decimal number." msgstr "Dieser Wert muss eine Ganzzahl sein." -#: db/models/fields/__init__.py:779 +#: db/models/fields/__init__.py:800 msgid "Enter a valid filename." msgstr "Bitte einen gültigen Dateinamen eingeben." -#: db/models/fields/__init__.py:950 +#: db/models/fields/__init__.py:981 msgid "This value must be either None, True or False." msgstr "Dieser Wert muss None, True oder False sein." -#: db/models/fields/related.py:93 +#: db/models/fields/related.py:94 #, python-format msgid "Please enter a valid %s." msgstr "Bitte ein gültiges '%s' eingeben." -#: db/models/fields/related.py:694 +#: db/models/fields/related.py:746 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." +#: db/models/fields/related.py:748 +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 +#: db/models/fields/related.py:795 #, 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 +#: newforms/fields.py:47 msgid "Enter a valid value." 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)." - #: 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.)" +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)." -#: newforms/fields.py:152 newforms/fields.py:181 newforms/fields.py:210 +#: newforms/fields.py:125 +#, 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.)" + +#: newforms/fields.py:153 +#: newforms/fields.py:182 +#: newforms/fields.py:211 #, python-format msgid "Ensure this value is less than or equal to %s." msgstr "Dieser Wert darf maximal %s sein." -#: newforms/fields.py:153 newforms/fields.py:182 newforms/fields.py:211 +#: newforms/fields.py:154 +#: newforms/fields.py:183 +#: newforms/fields.py:212 #, python-format msgid "Ensure this value is greater than or equal to %s." msgstr "Dieser Wert muss größer oder gleich %s sein." -#: newforms/fields.py:180 newforms/fields.py:209 +#: newforms/fields.py:181 +#: newforms/fields.py:210 msgid "Enter a number." msgstr "Bitte eine Zahl eingeben." -#: newforms/fields.py:212 +#: newforms/fields.py:213 #, python-format msgid "Ensure that there are no more than %s digits in total." msgstr "Bitte geben Sie nicht mehr als insgesamt %s Ziffern ein." -#: newforms/fields.py:213 +#: newforms/fields.py:214 #, python-format msgid "Ensure that there are no more than %s decimal places." msgstr "Bitte geben Sie nicht mehr als %s Dezimalstellen ein." -#: newforms/fields.py:214 +#: newforms/fields.py:215 #, python-format msgid "Ensure that there are no more than %s digits before the decimal point." msgstr "Bitte geben Sie nicht mehr als %s Ziffern vor dem Komma ein." -#: newforms/fields.py:262 newforms/fields.py:723 +#: newforms/fields.py:263 +#: newforms/fields.py:750 msgid "Enter a valid date." msgstr "Bitte ein gültiges Datum eingeben." -#: newforms/fields.py:295 newforms/fields.py:724 +#: newforms/fields.py:296 +#: newforms/fields.py:751 msgid "Enter a valid time." msgstr "Bitte eine gültige Uhrzeit eingeben." -#: newforms/fields.py:334 +#: newforms/fields.py:335 msgid "Enter a valid date/time." msgstr "Bitte gültiges Datum und Uhrzeit eingeben." -#: newforms/fields.py:433 +#: newforms/fields.py:434 msgid "No file was submitted." msgstr "Es wurde keine Datei übertragen." -#: newforms/fields.py:434 oldforms/__init__.py:689 +#: newforms/fields.py:435 +#: oldforms/__init__.py:689 msgid "The submitted file is empty." msgstr "Die ausgewählte Datei ist leer." -#: newforms/fields.py:496 +#: newforms/fields.py:497 msgid "Enter a valid URL." msgstr "Bitte eine gültige Adresse eingeben." -#: newforms/fields.py:497 +#: newforms/fields.py:498 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:305 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:372 msgid "Enter a list of values." msgstr "Eine Liste mit Werten eingeben." -#: newforms/fields.py:752 +#: newforms/fields.py:779 msgid "Enter a valid IPv4 address." msgstr "Bitte eine gültige IPv4-Adresse eingeben." -#: newforms/models.py:361 +#: newforms/models.py:373 #, python-format msgid "Select a valid choice. %s is not one of the available choices." msgstr "Bitte eine gültige Auswahl treffen. %s ist keine gültige Auswahl." @@ -4180,11 +3913,12 @@ 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." @@ -4198,28 +3932,28 @@ msgstr "Bitte eine ganze, positive Zahl eingeben." msgid "Enter a whole number between 0 and 32,767." msgstr "Bitte eine ganze Zahl zwischen 0 und 32.767 eingeben." -#: template/defaultfilters.py:695 +#: template/defaultfilters.py:698 msgid "yes,no,maybe" msgstr "Ja,Nein,Vielleicht" -#: template/defaultfilters.py:726 +#: template/defaultfilters.py:729 #, python-format msgid "%(size)d byte" msgid_plural "%(size)d bytes" msgstr[0] "%(size)d Byte" msgstr[1] "%(size)d Bytes" -#: template/defaultfilters.py:728 +#: template/defaultfilters.py:731 #, python-format msgid "%.1f KB" msgstr "%.1f KB" -#: template/defaultfilters.py:730 +#: template/defaultfilters.py:733 #, python-format msgid "%.1f MB" msgstr "%.1f MB" -#: template/defaultfilters.py:731 +#: template/defaultfilters.py:734 #, python-format msgid "%.1f GB" msgstr "%.1f GB" @@ -4312,23 +4046,28 @@ 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" @@ -4516,3 +4255,4 @@ msgstr "%(verbose_name)s wurde erfolgreich aktualisiert." #, python-format msgid "The %(verbose_name)s was deleted." msgstr "%(verbose_name)s wurde gelöscht" + diff --git a/django/conf/locale/de/LC_MESSAGES/djangojs.mo b/django/conf/locale/de/LC_MESSAGES/djangojs.mo index 55f527318a5d5617e177d1b32b80ef3d208e88b4..fcf656818da4ce71d8e52b2300d11fab9470c5e3 100644 GIT binary patch delta 373 zcmX}my-UMD7zXgSHqlyZTR}k);RJD!NE)d~ETTgf&1OcI(_Cuwyh1+E%|%3TQ6h*q zy6EEK=Hw=>or{zIg1b+m2ru{JdAWPIo61Aws((6LAUZD+=|uFX5skoSScR{!1V7*~ z?7<<}hjsV`Yw-I|9VMuu30Q_xa2w9StoH;C!ZV1WOP$v8;%lT)Ebie9e1ciQJ6wf5 zh@mQ8X9eRpvX4x^+!dMw^%cWhHmoIPnRe4!Fs<~nINAPRHf$5ihG~`^9>sb1uwWzd_M7vTbFCEh_ h<`IthzGQJId|xP*D35K)VDFIe#HV(key_gi?hloGN>=~? delta 358 zcmXZWze~eF6bJBEo3vV^7IAPqCkIK%RWmddvEYxz&En(|?KLUJ6E0UOI*5x1E<#)~ zIXE~tx`|t6adHz!{{&b4rWGFV!}sxccMsN`b^CcSTOhhB5}8Dl8bp)u9!|q2I1XRn z1k7L=zQHQ|fHUy>-yeumRKl@*zXEsR9L(>Aumm+k(YZ-$!^KOaDGY8PgDD(744cRq zMA0u=e!xV_KVm(n1$V6K+PrQ%4aT|W@+F5SU&Z;Y(Qt+FWv`wO9jCJ6$J%ZyU&fKI zPn5?tdg_R6#)n}f6kF{e)x;>R2gj#1DRj~__LE0LmG^`?5GqI(%\n" +"POT-Creation-Date: 2008-06-23 20:52+0200\n" +"PO-Revision-Date: 2008-06-23 21:02+0100\n" +"Last-Translator: Jannis Leidel \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language-Team: \n" #: contrib/admin/media/js/SelectFilter2.js:33 #, perl-format @@ -38,82 +39,78 @@ msgstr "Ausgewählte %s" #: contrib/admin/media/js/SelectFilter2.js:54 msgid "Select your choice(s) and click " -msgstr "Gewünschte Auswahl treffen und " +msgstr "Auswahl treffen und Klick auf" #: contrib/admin/media/js/SelectFilter2.js:59 msgid "Clear all" msgstr "Alles abwählen" -#: contrib/admin/media/js/dateparse.js:26 #: contrib/admin/media/js/calendar.js:24 -msgid "" -"January February March April May June July August September October November " -"December" -msgstr "" -"Januar Februar März April Mai Juni Juli August September Oktober November " -"Dezember" - -#: contrib/admin/media/js/dateparse.js:27 -msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" -msgstr "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag" +#: contrib/admin/media/js/dateparse.js:32 +msgid "January February March April May June July August September October November December" +msgstr "Januar Februar März April Mai Juni Juli August September Oktober November Dezember" #: contrib/admin/media/js/calendar.js:25 msgid "S M T W T F S" msgstr "S M D M D F S" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80 -msgid "Now" -msgstr "Jetzt" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48 -msgid "Clock" -msgstr "Uhr" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77 -msgid "Choose a time" -msgstr "Uhrzeit" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 -msgid "Midnight" -msgstr "Mitternacht" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 -msgid "6 a.m." -msgstr "6 Uhr" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 -msgid "Noon" -msgstr "Mittag" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168 -msgid "Cancel" -msgstr "Abbrechen" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162 -msgid "Today" -msgstr "Heute" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114 -msgid "Calendar" -msgstr "Kalender" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160 -msgid "Yesterday" -msgstr "Gestern" - -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164 -msgid "Tomorrow" -msgstr "Morgen" +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag" #: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 #: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 msgid "Show" -msgstr "Anzeigen" +msgstr "Einblenden" #: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 msgid "Hide" -msgstr "Verbergen" +msgstr "Ausblenden" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "Jetzt" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "Uhr" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "Uhrzeit" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "Mitternacht" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "6 Uhr" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "Mittag" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "Abbrechen" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "Heute" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "Kalender" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "Gestern" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "Morgen" diff --git a/django/contrib/sessions/backends/base.py b/django/contrib/sessions/backends/base.py index 1f9c20871b..b40fba6e6e 100644 --- a/django/contrib/sessions/backends/base.py +++ b/django/contrib/sessions/backends/base.py @@ -5,14 +5,15 @@ import random import sys import time from datetime import datetime, timedelta -from django.conf import settings -from django.core.exceptions import SuspiciousOperation - try: import cPickle as pickle except ImportError: import pickle +from django.conf import settings +from django.core.exceptions import SuspiciousOperation + + class SessionBase(object): """ Base class for all Session classes. @@ -169,8 +170,8 @@ class SessionBase(object): def set_expiry(self, value): """ - Sets a custom expiration for the session. ``value`` can be an integer, a - Python ``datetime`` or ``timedelta`` object or ``None``. + Sets a custom expiration for the session. ``value`` can be an integer, + a Python ``datetime`` or ``timedelta`` object or ``None``. If ``value`` is an integer, the session will expire after that many seconds of inactivity. If set to ``0`` then the session will expire on diff --git a/django/contrib/sessions/backends/cache.py b/django/contrib/sessions/backends/cache.py index 7626163a13..7e171e8309 100644 --- a/django/contrib/sessions/backends/cache.py +++ b/django/contrib/sessions/backends/cache.py @@ -2,6 +2,7 @@ from django.conf import settings from django.contrib.sessions.backends.base import SessionBase from django.core.cache import cache + class SessionStore(SessionBase): """ A cache-based session store. @@ -23,4 +24,4 @@ class SessionStore(SessionBase): return False def delete(self, session_key): - self._cache.delete(session_key) \ No newline at end of file + self._cache.delete(session_key) diff --git a/django/contrib/sessions/backends/db.py b/django/contrib/sessions/backends/db.py index b1c1097865..67132c7560 100644 --- a/django/contrib/sessions/backends/db.py +++ b/django/contrib/sessions/backends/db.py @@ -1,12 +1,14 @@ +import datetime + from django.conf import settings from django.contrib.sessions.models import Session from django.contrib.sessions.backends.base import SessionBase from django.core.exceptions import SuspiciousOperation -import datetime + class SessionStore(SessionBase): """ - Implements database session store + Implements database session store. """ def __init__(self, session_key=None): super(SessionStore, self).__init__(session_key) diff --git a/django/contrib/sessions/backends/file.py b/django/contrib/sessions/backends/file.py index d65c81c101..49a7045244 100644 --- a/django/contrib/sessions/backends/file.py +++ b/django/contrib/sessions/backends/file.py @@ -1,9 +1,11 @@ import os import tempfile + from django.conf import settings from django.contrib.sessions.backends.base import SessionBase from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured + class SessionStore(SessionBase): """ Implements a file based session store. @@ -15,10 +17,10 @@ class SessionStore(SessionBase): # Make sure the storage path is valid. if not os.path.isdir(self.storage_path): - raise ImproperlyConfigured("The session storage path %r doesn't exist. "\ - "Please set your SESSION_FILE_PATH setting "\ - "to an existing directory in which Django "\ - "can store session data." % self.storage_path) + raise ImproperlyConfigured( + "The session storage path %r doesn't exist. Please set your" + " SESSION_FILE_PATH setting to an existing directory in which" + " Django can store session data." % self.storage_path) self.file_prefix = settings.SESSION_COOKIE_NAME super(SessionStore, self).__init__(session_key) @@ -31,9 +33,11 @@ class SessionStore(SessionBase): session_key = self.session_key # Make sure we're not vulnerable to directory traversal. Session keys - # should always be md5s, so they should never contain directory components. + # should always be md5s, so they should never contain directory + # components. if os.path.sep in session_key: - raise SuspiciousOperation("Invalid characters (directory components) in session key") + raise SuspiciousOperation( + "Invalid characters (directory components) in session key") return os.path.join(self.storage_path, self.file_prefix + session_key) diff --git a/django/contrib/sessions/middleware.py b/django/contrib/sessions/middleware.py index a7b376dde0..238d6095e5 100644 --- a/django/contrib/sessions/middleware.py +++ b/django/contrib/sessions/middleware.py @@ -7,6 +7,7 @@ from django.utils.http import cookie_date TEST_COOKIE_NAME = 'testcookie' TEST_COOKIE_VALUE = 'worked' + class SessionMiddleware(object): def process_request(self, request): @@ -40,5 +41,4 @@ class SessionMiddleware(object): expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, path=settings.SESSION_COOKIE_PATH, secure=settings.SESSION_COOKIE_SECURE or None) - return response diff --git a/django/contrib/sessions/models.py b/django/contrib/sessions/models.py index 4769e63b1b..70fce3b226 100644 --- a/django/contrib/sessions/models.py +++ b/django/contrib/sessions/models.py @@ -6,9 +6,12 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.conf import settings + class SessionManager(models.Manager): def encode(self, session_dict): - "Returns the given session dictionary pickled and encoded as a string." + """ + Returns the given session dictionary pickled and encoded as a string. + """ pickled = pickle.dumps(session_dict) pickled_md5 = md5.new(pickled + settings.SECRET_KEY).hexdigest() return base64.encodestring(pickled + pickled_md5) @@ -21,6 +24,7 @@ class SessionManager(models.Manager): s.delete() # Clear sessions with no data. return s + class Session(models.Model): """ Django provides full support for anonymous sessions. The session @@ -38,7 +42,8 @@ class Session(models.Model): the sessions documentation that is shipped with Django (also available on the Django website). """ - session_key = models.CharField(_('session key'), max_length=40, primary_key=True) + session_key = models.CharField(_('session key'), max_length=40, + primary_key=True) session_data = models.TextField(_('session data')) expire_date = models.DateTimeField(_('expire date')) objects = SessionManager() diff --git a/django/contrib/sites/management.py b/django/contrib/sites/management.py index 6831cab96d..5cecfb4ec0 100644 --- a/django/contrib/sites/management.py +++ b/django/contrib/sites/management.py @@ -13,5 +13,6 @@ def create_default_site(app, created_models, verbosity): print "Creating example.com Site object" s = Site(domain="example.com", name="example.com") s.save() + Site.objects.clear_cache() dispatcher.connect(create_default_site, sender=site_app, signal=signals.post_syncdb) diff --git a/django/contrib/sites/models.py b/django/contrib/sites/models.py index d6c76d9f21..5f06333ae8 100644 --- a/django/contrib/sites/models.py +++ b/django/contrib/sites/models.py @@ -41,7 +41,15 @@ class Site(models.Model): def __unicode__(self): return self.domain - + + def delete(self): + pk = self.pk + super(Site, self).delete() + try: + del(SITE_CACHE[pk]) + except KeyError: + pass + # Register the admin options for these models. # TODO: Maybe this should live in a separate module admin.py, but how would we # ensure that module was loaded? diff --git a/django/contrib/sites/tests.py b/django/contrib/sites/tests.py new file mode 100644 index 0000000000..d2ec331eca --- /dev/null +++ b/django/contrib/sites/tests.py @@ -0,0 +1,13 @@ +""" +>>> # Make sure that get_current() does not return a deleted Site object. +>>> from django.contrib.sites.models import Site +>>> s = Site.objects.get_current() +>>> s + + +>>> s.delete() +>>> Site.objects.get_current() +Traceback (most recent call last): +... +DoesNotExist: Site matching query does not exist. +""" diff --git a/django/db/models/base.py b/django/db/models/base.py index a253f38f47..d7e2c299cc 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -10,7 +10,7 @@ from django.core import validators from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError from django.db.models.fields import AutoField, ImageField, FieldDoesNotExist from django.db.models.fields.related import OneToOneRel, ManyToOneRel, OneToOneField -from django.db.models.query import delete_objects, Q +from django.db.models.query import delete_objects, Q, CollectedObjects from django.db.models.options import Options from django.db import connection, transaction from django.db.models import signals @@ -365,17 +365,16 @@ class Model(object): error_dict[f.name] = errors return error_dict - def _collect_sub_objects(self, seen_objs): + def _collect_sub_objects(self, seen_objs, parent=None, nullable=False): """ Recursively populates seen_objs with all objects related to this object. - When done, seen_objs will be in the format: - {model_class: {pk_val: obj, pk_val: obj, ...}, - model_class: {pk_val: obj, pk_val: obj, ...}, ...} + When done, seen_objs.items() will be in the format: + [(model_class, {pk_val: obj, pk_val: obj, ...}), + (model_class, {pk_val: obj, pk_val: obj, ...}),...] """ pk_val = self._get_pk_val() - if pk_val in seen_objs.setdefault(self.__class__, {}): + if seen_objs.add(self.__class__, pk_val, self, parent, nullable): return - seen_objs.setdefault(self.__class__, {})[pk_val] = self for related in self._meta.get_all_related_objects(): rel_opts_name = related.get_accessor_name() @@ -385,16 +384,16 @@ class Model(object): except ObjectDoesNotExist: pass else: - sub_obj._collect_sub_objects(seen_objs) + sub_obj._collect_sub_objects(seen_objs, self.__class__, related.field.null) else: for sub_obj in getattr(self, rel_opts_name).all(): - sub_obj._collect_sub_objects(seen_objs) + sub_obj._collect_sub_objects(seen_objs, self.__class__, related.field.null) def delete(self): assert self._get_pk_val() is not None, "%s object can't be deleted because its %s attribute is set to None." % (self._meta.object_name, self._meta.pk.attname) # Find all the objects than need to be deleted - seen_objs = SortedDict() + seen_objs = CollectedObjects() self._collect_sub_objects(seen_objs) # Actually delete the objects diff --git a/django/db/models/loading.py b/django/db/models/loading.py index e62188adf7..6837e070ac 100644 --- a/django/db/models/loading.py +++ b/django/db/models/loading.py @@ -2,6 +2,8 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured +from django.utils.datastructures import SortedDict + import sys import os import threading @@ -18,10 +20,10 @@ class AppCache(object): # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66531. __shared_state = dict( # Keys of app_store are the model modules for each application. - app_store = {}, + app_store = SortedDict(), # Mapping of app_labels to a dictionary of model names to model code. - app_models = {}, + app_models = SortedDict(), # Mapping of app_labels to errors raised when trying to import the app. app_errors = {}, @@ -133,7 +135,7 @@ class AppCache(object): """ self._populate() if app_mod: - return self.app_models.get(app_mod.__name__.split('.')[-2], {}).values() + return self.app_models.get(app_mod.__name__.split('.')[-2], SortedDict()).values() else: model_list = [] for app_entry in self.app_models.itervalues(): @@ -149,7 +151,7 @@ class AppCache(object): """ if seed_cache: self._populate() - return self.app_models.get(app_label, {}).get(model_name.lower()) + return self.app_models.get(app_label, SortedDict()).get(model_name.lower()) def register_models(self, app_label, *models): """ @@ -159,7 +161,7 @@ class AppCache(object): # Store as 'name: model' pair in a dictionary # in the app_models dictionary model_name = model._meta.object_name.lower() - model_dict = self.app_models.setdefault(app_label, {}) + model_dict = self.app_models.setdefault(app_label, SortedDict()) if model_name in model_dict: # The same model may be imported via different paths (e.g. # appname.models and project.appname.models). We use the source diff --git a/django/db/models/query.py b/django/db/models/query.py index fb6d116a6e..8714cffb7f 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -16,6 +16,92 @@ ITER_CHUNK_SIZE = CHUNK_SIZE # Pull into this namespace for backwards compatibility EmptyResultSet = sql.EmptyResultSet +class CyclicDependency(Exception): + pass + +class CollectedObjects(object): + """ + A container that stores keys and lists of values along with + remembering the parent objects for all the keys. + + This is used for the database object deletion routines so that we + can calculate the 'leaf' objects which should be deleted first. + """ + + def __init__(self): + self.data = {} + self.children = {} + + def add(self, model, pk, obj, parent_model, nullable=False): + """ + Adds an item. + model is the class of the object being added, + pk is the primary key, obj is the object itself, + parent_model is the model of the parent object + that this object was reached through, nullable should + be True if this relation is nullable. + + If the item already existed in the structure, + returns true, otherwise false. + """ + d = self.data.setdefault(model, SortedDict()) + retval = pk in d + d[pk] = obj + # Nullable relationships can be ignored -- they + # are nulled out before deleting, and therefore + # do not affect the order in which objects have + # to be deleted. + if parent_model is not None and not nullable: + self.children.setdefault(parent_model, []).append(model) + + return retval + + def __contains__(self, key): + return self.data.__contains__(key) + + def __getitem__(self, key): + return self.data[key] + + def __nonzero__(self): + return bool(self.data) + + def iteritems(self): + for k in self.ordered_keys(): + yield k, self[k] + + def items(self): + return list(self.iteritems()) + + def keys(self): + return self.ordered_keys() + + def ordered_keys(self): + """ + Returns the models in the order that they should be + dealth with i.e. models with no dependencies first. + """ + dealt_with = SortedDict() + # Start with items that have no children + models = self.data.keys() + while len(dealt_with) < len(models): + found = False + for model in models: + children = self.children.setdefault(model, []) + if len([c for c in children if c not in dealt_with]) == 0: + dealt_with[model] = None + found = True + if not found: + raise CyclicDependency("There is a cyclic dependency of items to be processed.") + + return dealt_with.keys() + + def unordered_keys(self): + """ + Fallback for the case where is a cyclic dependency but we + don't care. + """ + return self.data.keys() + class QuerySet(object): "Represents a lazy database lookup for a set of objects" def __init__(self, model=None, query=None): @@ -275,7 +361,7 @@ class QuerySet(object): while 1: # Collect all the objects to be deleted in this chunk, and all the # objects that are related to the objects that are to be deleted. - seen_objs = SortedDict() + seen_objs = CollectedObjects() for object in del_query[:CHUNK_SIZE]: object._collect_sub_objects(seen_objs) @@ -682,19 +768,27 @@ def delete_objects(seen_objs): Iterate through a list of seen classes, and remove any instances that are referred to. """ - ordered_classes = seen_objs.keys() - ordered_classes.reverse() + try: + ordered_classes = seen_objs.keys() + except CyclicDependency: + # if there is a cyclic dependency, we cannot in general delete + # the objects. However, if an appropriate transaction is set + # up, or if the database is lax enough, it will succeed. + # So for now, we go ahead and try anway. + ordered_classes = seen_objs.unordered_keys() + obj_pairs = {} for cls in ordered_classes: - seen_objs[cls] = seen_objs[cls].items() - seen_objs[cls].sort() + items = seen_objs[cls].items() + items.sort() + obj_pairs[cls] = items # Pre notify all instances to be deleted - for pk_val, instance in seen_objs[cls]: + for pk_val, instance in items: dispatcher.send(signal=signals.pre_delete, sender=cls, instance=instance) - pk_list = [pk for pk,instance in seen_objs[cls]] + pk_list = [pk for pk,instance in items] del_query = sql.DeleteQuery(cls, connection) del_query.delete_batch_related(pk_list) @@ -705,15 +799,17 @@ def delete_objects(seen_objs): # Now delete the actual data for cls in ordered_classes: - seen_objs[cls].reverse() - pk_list = [pk for pk,instance in seen_objs[cls]] + items = obj_pairs[cls] + items.reverse() + + pk_list = [pk for pk,instance in items] del_query = sql.DeleteQuery(cls, connection) del_query.delete_batch(pk_list) # Last cleanup; set NULLs where there once was a reference to the # object, NULL the primary key of the found objects, and perform # post-notification. - for pk_val, instance in seen_objs[cls]: + for pk_val, instance in items: for field in cls._meta.fields: if field.rel and field.null and field.rel.to in seen_objs: setattr(instance, field.attname, None) diff --git a/django/newforms/models.py b/django/newforms/models.py index e515071162..3117abbafe 100644 --- a/django/newforms/models.py +++ b/django/newforms/models.py @@ -483,11 +483,17 @@ class ModelChoiceIterator(object): def __iter__(self): if self.field.empty_label is not None: yield (u"", self.field.empty_label) - for obj in self.queryset: - yield (obj.pk, self.field.label_from_instance(obj)) - # Clear the QuerySet cache if required. - if not self.field.cache_choices: - self.queryset._result_cache = None + if self.field.cache_choices: + if self.field.choice_cache is None: + self.field.choice_cache = [ + (obj.pk, self.field.label_from_instance(obj)) + for obj in self.queryset.all() + ] + for choice in self.field.choice_cache: + yield choice + else: + for obj in self.queryset.all(): + yield (obj.pk, self.field.label_from_instance(obj)) class ModelChoiceField(ChoiceField): """A ChoiceField whose choices are a model QuerySet.""" @@ -509,6 +515,7 @@ class ModelChoiceField(ChoiceField): Field.__init__(self, required, widget, label, initial, help_text, *args, **kwargs) self.queryset = queryset + self.choice_cache = None def _get_queryset(self): return self._queryset diff --git a/docs/contributing.txt b/docs/contributing.txt index c5f98bec11..b73e3601bc 100644 --- a/docs/contributing.txt +++ b/docs/contributing.txt @@ -702,13 +702,8 @@ Django tarball. It's our policy to make sure all tests pass at all times. The tests cover: * Models and the database API (``tests/modeltests/``). - * The cache system (``tests/regressiontests/cache.py``). - * The ``django.utils.dateformat`` module (``tests/regressiontests/dateformat/``). - * Database typecasts (``tests/regressiontests/db_typecasts/``). - * The template system (``tests/regressiontests/templates/`` and - ``tests/regressiontests/defaultfilters/``). - * ``QueryDict`` objects (``tests/regressiontests/httpwrappers/``). - * Markup template tags (``tests/regressiontests/markup/``). + * Everything else in core Django code (``tests/regressiontests``) + * Contrib apps (``django/contrib//tests``, see below) We appreciate any and all contributions to the test suite! @@ -744,6 +739,26 @@ If you're using another backend: deleted when the tests are finished. This means your user account needs permission to execute ``CREATE DATABASE``. +If you want to run the full suite of tests, there are a number of dependencies that +you should install: + + * PyYAML_ + * Markdown_ + * Textile_ + * Docutils_ + * setuptools_ + +Of these dependencies, setuptools_ is the only dependency that is required - if +setuptools_ is not installed, you will get import errors when running one of +the template tests. The tests using the other libraries will be skipped if the +dependency can't be found. + +.. _PyYAML: http://pyyaml.org/wiki/PyYAML +.. _Markdown: http://pypi.python.org/pypi/Markdown/1.7 +.. _Textile: http://pypi.python.org/pypi/textile +.. _docutils: http://pypi.python.org/pypi/docutils/0.4 +.. _setuptools: http://pypi.python.org/pypi/setuptools/ + To run a subset of the unit tests, append the names of the test modules to the ``runtests.py`` command line. See the list of directories in ``tests/modeltests`` and ``tests/regressiontests`` for module names. @@ -755,6 +770,22 @@ for generic relations and internationalization, type:: PYTHONPATH=.. ./runtests.py --settings=settings generic_relations i18n +Contrib apps +------------ + +Tests for apps in ``django/contrib/`` go in their respective directories, +in a ``tests.py`` file. (You can split the tests over multiple modules +by using a ``tests`` folder in the normal Python way). + +For the tests to be found, a ``models.py`` file must exist (it doesn't +have to have anything in it). If you have URLs that need to be +mapped, you must add them in ``tests/urls.py``. + +To run tests for just one contrib app (e.g. ``markup``), use the same +method as above:: + + ./runtests.py --settings=settings markup + Requesting features =================== diff --git a/docs/db-api.txt b/docs/db-api.txt index 4e1c2c5791..3202bd4f9f 100644 --- a/docs/db-api.txt +++ b/docs/db-api.txt @@ -1382,7 +1382,7 @@ and then converted into a query using the ``query`` attribute:: This queryset will be evaluated as subselect statement:: - SELET ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE '%Cheddar%') + SELECT ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE '%Cheddar%') startswith ~~~~~~~~~~ diff --git a/docs/model-api.txt b/docs/model-api.txt index 314c8ea4b5..6dc2d0835a 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -648,8 +648,8 @@ Django will automatically add this field:: Thus, you don't need to set ``primary_key=True`` on any of your fields unless you want to override the default primary-key behavior. -``primary_key=True`` implies ``blank=False``, ``null=False`` and -``unique=True``. Only one primary key is allowed on an object. +``primary_key=True`` implies ``null=False`` and ``unique=True``. Only +one primary key is allowed on an object. ``unique`` ~~~~~~~~~~ diff --git a/docs/modelforms.txt b/docs/modelforms.txt index fae860944e..5cff11fdeb 100644 --- a/docs/modelforms.txt +++ b/docs/modelforms.txt @@ -182,6 +182,13 @@ supplied, ``save()`` will update that instance. If it's not supplied, # Create a form to edit an existing Article. >>> a = Article.objects.get(pk=1) >>> f = ArticleForm(instance=a) + >>> f.save() + + # Create a form to edit an existing Article, but use + # POST data to populate the form. + >>> a = Article.objects.get(pk=1) + >>> f = ArticleForm(request.POST, instance=a) + >>> f.save() Note that ``save()`` will raise a ``ValueError`` if the data in the form doesn't validate -- i.e., ``if form.errors``. diff --git a/extras/django_bash_completion b/extras/django_bash_completion index 686f090b95..c0f7c3516d 100755 --- a/extras/django_bash_completion +++ b/extras/django_bash_completion @@ -44,7 +44,7 @@ _django_completion() # Standalone options opts="--help --settings --pythonpath --noinput --noreload --format --indent --verbosity --adminmedia --version" # Actions - actions="adminindex createcachetable dbshell diffsettings \ + actions="adminindex createcachetable createsuperuser dbshell diffsettings \ dumpdata flush inspectdb loaddata reset runfcgi runserver \ shell sql sqlall sqlclear sqlcustom sqlflush sqlindexes \ sqlreset sqlsequencereset startapp startproject \ diff --git a/tests/modeltests/delete/__init__.py b/tests/modeltests/delete/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/tests/modeltests/delete/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/modeltests/delete/models.py b/tests/modeltests/delete/models.py new file mode 100644 index 0000000000..f5b423e9ff --- /dev/null +++ b/tests/modeltests/delete/models.py @@ -0,0 +1,179 @@ +# coding: utf-8 +""" +Tests for some corner cases with deleting. +""" + +from django.db import models + +class DefaultRepr(object): + def __repr__(self): + return u"<%s: %s>" % (self.__class__.__name__, self.__dict__) + +class A(DefaultRepr, models.Model): + pass + +class B(DefaultRepr, models.Model): + a = models.ForeignKey(A) + +class C(DefaultRepr, models.Model): + b = models.ForeignKey(B) + +class D(DefaultRepr, models.Model): + c = models.ForeignKey(C) + a = models.ForeignKey(A) + +# Simplified, we have: +# A +# B -> A +# C -> B +# D -> C +# D -> A + +# So, we must delete Ds first of all, then Cs then Bs then As. +# However, if we start at As, we might find Bs first (in which +# case things will be nice), or find Ds first. + +# Some mutually dependent models, but nullable +class E(DefaultRepr, models.Model): + f = models.ForeignKey('F', null=True, related_name='e_rel') + +class F(DefaultRepr, models.Model): + e = models.ForeignKey(E, related_name='f_rel') + + +__test__ = {'API_TESTS': """ +# First, some tests for the datastructure we use + +>>> from django.db.models.query import CollectedObjects + +>>> g = CollectedObjects() +>>> g.add("key1", 1, "item1", None) +False +>>> g["key1"] +{1: 'item1'} +>>> g.add("key2", 1, "item1", "key1") +False +>>> g.add("key2", 2, "item2", "key1") +False +>>> g["key2"] +{1: 'item1', 2: 'item2'} +>>> g.add("key3", 1, "item1", "key1") +False +>>> g.add("key3", 1, "item1", "key2") +True +>>> g.ordered_keys() +['key3', 'key2', 'key1'] + +>>> g.add("key2", 1, "item1", "key3") +True +>>> g.ordered_keys() +Traceback (most recent call last): + ... +CyclicDependency: There is a cyclic dependency of items to be processed. + + + +# Due to the way that transactions work in the test harness, +# doing m.delete() here can work but fail in a real situation, +# since it may delete all objects, but not in the right order. +# So we manually check that the order of deletion is correct. + +# Also, it is possible that the order is correct 'accidentally', due +# solely to order of imports etc. To check this, we set the order +# that 'get_models()' will retrieve to a known 'nice' order, and +# then try again with a known 'tricky' order. Slightly naughty +# access to internals here :-) + +>>> from django.db.models.loading import cache + +# Nice order +>>> cache.app_models['delete'].keyOrder = ['a', 'b', 'c', 'd'] +>>> del A._meta._related_objects_cache +>>> del B._meta._related_objects_cache +>>> del C._meta._related_objects_cache +>>> del D._meta._related_objects_cache + +>>> a1 = A() +>>> a1.save() +>>> b1 = B(a=a1) +>>> b1.save() +>>> c1 = C(b=b1) +>>> c1.save() +>>> d1 = D(c=c1, a=a1) +>>> d1.save() + +>>> o = CollectedObjects() +>>> a1._collect_sub_objects(o) +>>> o.keys() +[, , , ] +>>> a1.delete() + +# Same again with a known bad order +>>> cache.app_models['delete'].keyOrder = ['d', 'c', 'b', 'a'] +>>> del A._meta._related_objects_cache +>>> del B._meta._related_objects_cache +>>> del C._meta._related_objects_cache +>>> del D._meta._related_objects_cache + +>>> a2 = A() +>>> a2.save() +>>> b2 = B(a=a2) +>>> b2.save() +>>> c2 = C(b=b2) +>>> c2.save() +>>> d2 = D(c=c2, a=a2) +>>> d2.save() + +>>> o = CollectedObjects() +>>> a2._collect_sub_objects(o) +>>> o.keys() +[, , , ] +>>> a2.delete() + +# Tests for nullable related fields + +>>> g = CollectedObjects() +>>> g.add("key1", 1, "item1", None) +False +>>> g.add("key2", 1, "item1", "key1", nullable=True) +False +>>> g.add("key1", 1, "item1", "key2") +True +>>> g.ordered_keys() +['key1', 'key2'] + +>>> e1 = E() +>>> e1.save() +>>> f1 = F(e=e1) +>>> f1.save() +>>> e1.f = f1 +>>> e1.save() + +# Since E.f is nullable, we should delete F first (after nulling out +# the E.f field), then E. + +>>> o = CollectedObjects() +>>> e1._collect_sub_objects(o) +>>> o.keys() +[, ] + +>>> e1.delete() + +>>> e2 = E() +>>> e2.save() +>>> f2 = F(e=e2) +>>> f2.save() +>>> e2.f = f2 +>>> e2.save() + +# Same deal as before, though we are starting from the other object. + +>>> o = CollectedObjects() +>>> f2._collect_sub_objects(o) +>>> o.keys() +[, ] + +>>> f2.delete() + +""" +}