diff --git a/AUTHORS b/AUTHORS index bad8008d86..3c2542cb0d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -42,6 +42,7 @@ And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS -- people who have submitted patches, reported bugs, added translations, helped answer newbie questions, and generally made Django that much better: + adurdin@gmail.com akaihola Andreas ant9000@netwise.it @@ -68,15 +69,19 @@ answer newbie questions, and generally made Django that much better: Alex Dedul deric@monowerks.com dne@mayonnaise.net + Maximillian Dornseif + dummy@habmalnefrage.de Jeremy Dunck Andy Dustman Clint Ecker + favo@exoweb.net gandalf@owca.info Baishampayan Ghose martin.glueck@gmail.com Simon Greenhill Espen Grindhaug Brant Harris + heckj@mac.com hipertracker@gmail.com Ian Holsman Kieran Holland @@ -96,6 +101,7 @@ answer newbie questions, and generally made Django that much better: lakin.wecker@gmail.com Stuart Langridge Eugene Lazutkin + Jeong-Min Lee Christopher Lenz limodou Martin Maney @@ -122,6 +128,7 @@ answer newbie questions, and generally made Django that much better: Daniel Poelzleithner J. Rademaker Michael Radziej + ramiro Brian Ray rhettg@gmail.com Oliver Rutherfurd @@ -144,8 +151,10 @@ answer newbie questions, and generally made Django that much better: Milton Waddams Dan Watson Rachel Willmer + Gary Wilson wojtek ye7cakf02@sneakemail.com + ymasuda@ethercube.com Cheng Zhang A big THANK YOU goes to: diff --git a/README b/README index d52451d3ba..084f863a1e 100644 --- a/README +++ b/README @@ -25,10 +25,10 @@ http://code.djangoproject.com/newticket To get more help: * Join the #django channel on irc.freenode.net. Lots of helpful people - hang out there. Read the archives at http://loglibrary.com/179 . + hang out there. Read the archives at http://simon.bofh.ms/logger/django/ . * Join the django-users mailing list, or read the archives, at - http://groups-beta.google.com/group/django-users. + http://groups.google.com/group/django-users. To contribute to Django: diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index dee39867c6..dc30d3f1f4 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -64,6 +64,7 @@ LANGUAGES = ( ('sr', gettext_noop('Serbian')), ('sv', gettext_noop('Swedish')), ('ta', gettext_noop('Tamil')), + ('tr', gettext_noop('Turkish')), ('uk', gettext_noop('Ukrainian')), ('zh-cn', gettext_noop('Simplified Chinese')), ('zh-tw', gettext_noop('Traditional Chinese')), @@ -272,6 +273,10 @@ CACHE_MIDDLEWARE_KEY_PREFIX = '' COMMENTS_ALLOW_PROFANITIES = False +# The profanities that will trigger a validation error in the +# 'hasNoProfanities' validator. All of these should be in lower-case. +PROFANITIES_LIST = ['asshat', 'asshead', 'asshole', 'cunt', 'fuck', 'gook', 'nigger', 'shit'] + # The group ID that designates which users are banned. # Set to None if you're not using it. COMMENTS_BANNED_USERS_GROUP = None diff --git a/django/conf/locale/da/LC_MESSAGES/django.mo b/django/conf/locale/da/LC_MESSAGES/django.mo index 668f02cbef..9f86e56407 100644 Binary files a/django/conf/locale/da/LC_MESSAGES/django.mo and b/django/conf/locale/da/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/da/LC_MESSAGES/django.po b/django/conf/locale/da/LC_MESSAGES/django.po index 9bf20cf833..7688907694 100644 --- a/django/conf/locale/da/LC_MESSAGES/django.po +++ b/django/conf/locale/da/LC_MESSAGES/django.po @@ -1,104 +1,100 @@ -# SOME DESCRIPTIVE TITLE. +# translation of django.po to Dansk +# Rune Rønde Laursen , 2006. # Copyright (C) 2005 and beyond # This file is distributed under the same license as the PACKAGE package. # Morten Bagai , Nov 2005. -# -# +# Rune Rønde Laursen , Sept 2006. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-05-16 10:12+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Morten Bagai \n" -"Language-Team: Danish\n" +"PO-Revision-Date: 2006-09-24 10:34+0200\n" +"Last-Translator: Rune Rønde Laursen \n" +"Language-Team: Dansk \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" #: contrib/comments/models.py:67 contrib/comments/models.py:166 -#, fuzzy msgid "object ID" -msgstr "objekt id" +msgstr "objekt ID" #: contrib/comments/models.py:68 msgid "headline" -msgstr "" +msgstr "overskrift" #: contrib/comments/models.py:69 contrib/comments/models.py:90 #: contrib/comments/models.py:167 -#, fuzzy msgid "comment" -msgstr "indhold" +msgstr "kommentar" #: contrib/comments/models.py:70 msgid "rating #1" -msgstr "" +msgstr "rangering # 1" #: contrib/comments/models.py:71 msgid "rating #2" -msgstr "" +msgstr "rangering # 2" #: contrib/comments/models.py:72 msgid "rating #3" -msgstr "" +msgstr "rangering # 3" #: contrib/comments/models.py:73 msgid "rating #4" -msgstr "" +msgstr "rangering # 4" #: contrib/comments/models.py:74 msgid "rating #5" -msgstr "" +msgstr "rangering # 5" #: contrib/comments/models.py:75 msgid "rating #6" -msgstr "" +msgstr "rangering # 6" #: contrib/comments/models.py:76 msgid "rating #7" -msgstr "" +msgstr "rangering # 7" #: contrib/comments/models.py:77 msgid "rating #8" -msgstr "" +msgstr "rangering # 8" #: contrib/comments/models.py:82 msgid "is valid rating" -msgstr "" +msgstr "er gyldig rangering" #: contrib/comments/models.py:83 contrib/comments/models.py:169 msgid "date/time submitted" -msgstr "" +msgstr "dato/tidspunkt oprettet" #: contrib/comments/models.py:84 contrib/comments/models.py:170 msgid "is public" -msgstr "" +msgstr "er offentlig" #: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -#, fuzzy msgid "IP address" -msgstr "e-mail adresse" +msgstr "IP-adresse" #: contrib/comments/models.py:86 msgid "is removed" -msgstr "" +msgstr "er fjernet" #: contrib/comments/models.py:86 msgid "" "Check this box if the comment is inappropriate. A \"This comment has been " "removed\" message will be displayed instead." -msgstr "" +msgstr "Afkryds denne boks hvis kommentaren er upassende. Beskeden \"Denne kommentar er blevet fjernet\" vil blive vist istedet." #: contrib/comments/models.py:91 -#, fuzzy msgid "comments" -msgstr "indhold" +msgstr "kommentarer" #: contrib/comments/models.py:131 contrib/comments/models.py:207 -#, fuzzy msgid "Content object" -msgstr "indholdstype" +msgstr "Indholdsobjekt" #: contrib/comments/models.py:159 #, python-format @@ -109,52 +105,52 @@ msgid "" "\n" "http://%(domain)s%(url)s" msgstr "" +"Indsendt af %(user)s den %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" #: contrib/comments/models.py:168 -#, fuzzy msgid "person's name" -msgstr "fornavn" +msgstr "personens navn" #: contrib/comments/models.py:171 -#, fuzzy msgid "ip address" -msgstr "e-mail adresse" +msgstr "IP-adresse" #: contrib/comments/models.py:173 msgid "approved by staff" -msgstr "" +msgstr "godkendt af personale" #: contrib/comments/models.py:176 -#, fuzzy msgid "free comment" -msgstr "tillad kommentarer" +msgstr "fri kommentar" #: contrib/comments/models.py:177 -#, fuzzy msgid "free comments" -msgstr "tillad kommentarer" +msgstr "frie kommentarer" #: contrib/comments/models.py:233 msgid "score" -msgstr "" +msgstr "score" #: contrib/comments/models.py:234 -#, fuzzy msgid "score date" -msgstr "udløbsdato" +msgstr "scoringsdato" #: contrib/comments/models.py:237 msgid "karma score" -msgstr "" +msgstr "karma score" #: contrib/comments/models.py:238 msgid "karma scores" -msgstr "" +msgstr "karma score" #: contrib/comments/models.py:242 #, python-format msgid "%(score)d rating by %(user)s" -msgstr "" +msgstr "%(score)d rangering efter %(user)s" #: contrib/comments/models.py:258 #, python-format @@ -163,62 +159,59 @@ msgid "" "\n" "%(text)s" msgstr "" +"Denne kommentar blev markeret af %(user)s:\n" +"\n" +"%(text)s" #: contrib/comments/models.py:265 -#, fuzzy msgid "flag date" -msgstr "flad side" +msgstr "mærkedato" #: contrib/comments/models.py:268 -#, fuzzy msgid "user flag" -msgstr "Bruger" +msgstr "bruger-mærke" #: contrib/comments/models.py:269 -#, fuzzy msgid "user flags" -msgstr "Brugere" +msgstr "bruger-mærker" #: contrib/comments/models.py:273 #, python-format msgid "Flag by %r" -msgstr "" +msgstr "Mærket af %r" #: contrib/comments/models.py:278 -#, fuzzy msgid "deletion date" -msgstr "sessionsdata" +msgstr "sletningsdato" #: contrib/comments/models.py:280 msgid "moderator deletion" -msgstr "" +msgstr "moderator-sletning" #: contrib/comments/models.py:281 msgid "moderator deletions" -msgstr "" +msgstr "moderator-sletninger" #: contrib/comments/models.py:285 #, python-format msgid "Moderator deletion by %r" -msgstr "" +msgstr "Moderator-sletning af %r" #: contrib/comments/views/karma.py:19 msgid "Anonymous users cannot vote" -msgstr "" +msgstr "Anonyme brugere kan ikke stemme" #: contrib/comments/views/karma.py:23 -#, fuzzy msgid "Invalid comment ID" -msgstr "tillad kommentarer" +msgstr "Ugyldigt kommentar-ID" #: contrib/comments/views/karma.py:25 msgid "No voting for yourself" -msgstr "" +msgstr "Du kan ikke selv stemme" #: contrib/comments/views/comments.py:28 -msgid "" -"This rating is required because you've entered at least one other rating." -msgstr "" +msgid "This rating is required because you've entered at least one other rating." +msgstr "Denne rangering er påkrævet fordi du har indtastet mindst en anden rangering." #: contrib/comments/views/comments.py:112 #, python-format @@ -233,7 +226,13 @@ msgid_plural "" "\n" "%(text)s" msgstr[0] "" +"Denne kommentar blev indsendt af en bruger som har indsendt færre end %(count)s kommentar:\n" +"\n" +"%(text)s" msgstr[1] "" +"Denne kommentar blev indsendt af en bruger som har indsendt færre end %(count)s kommentarer:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:117 #, python-format @@ -242,33 +241,36 @@ msgid "" "\n" "%(text)s" msgstr "" +"Denne kommentar blev indsendt af en overfladisk bruger:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:189 #: contrib/comments/views/comments.py:280 msgid "Only POSTs are allowed" -msgstr "" +msgstr "Kun POST er tilladt" #: contrib/comments/views/comments.py:193 #: contrib/comments/views/comments.py:284 msgid "One or more of the required fields wasn't submitted" -msgstr "" +msgstr "En eller flere af de påkrævede felter blev ikke indsendt" #: contrib/comments/views/comments.py:197 #: contrib/comments/views/comments.py:286 msgid "Somebody tampered with the comment form (security violation)" -msgstr "" +msgstr "Nogen har misbrugt kommentarformularen (sikkerhedsovertrædelse)" #: contrib/comments/views/comments.py:207 #: contrib/comments/views/comments.py:292 msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " "invalid" -msgstr "" +msgstr "Kommentarformularen havde en ugyldigt 'target'-parameter -- objekt-ID'var ugyldigt" #: contrib/comments/views/comments.py:257 #: contrib/comments/views/comments.py:321 msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "" +msgstr "Kommentarformularen tilbød ikke hverken 'forhåndsvis' eller 'indsend'" #: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:8 @@ -282,9 +284,8 @@ msgid "Password:" msgstr "Adgangskode:" #: contrib/comments/templates/comments/form.html:6 -#, fuzzy msgid "Forgotten your password?" -msgstr "Ændre adgangskode" +msgstr "Har du glemt dit kodeord?" #: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/object_history.html:3 @@ -309,38 +310,35 @@ msgstr "Log ud" #: contrib/comments/templates/comments/form.html:12 msgid "Ratings" -msgstr "" +msgstr "Rangeringer" #: contrib/comments/templates/comments/form.html:12 #: contrib/comments/templates/comments/form.html:23 msgid "Required" -msgstr "" +msgstr "Påkrævet" #: contrib/comments/templates/comments/form.html:12 #: contrib/comments/templates/comments/form.html:23 msgid "Optional" -msgstr "" +msgstr "Valgfri" #: contrib/comments/templates/comments/form.html:23 msgid "Post a photo" -msgstr "" +msgstr "Indsend et foto" #: contrib/comments/templates/comments/form.html:27 #: contrib/comments/templates/comments/freeform.html:5 -#, fuzzy msgid "Comment:" -msgstr "tillad kommentarer" +msgstr "Kommentar:" #: contrib/comments/templates/comments/form.html:32 #: contrib/comments/templates/comments/freeform.html:9 -#, fuzzy msgid "Preview comment" -msgstr "tillad kommentarer" +msgstr "Forhåndsvis kommentar" #: contrib/comments/templates/comments/freeform.html:4 -#, fuzzy msgid "Your name:" -msgstr "brugernavn" +msgstr "Dit navn:" #: contrib/admin/filterspecs.py:40 #, python-format @@ -348,45 +346,45 @@ msgid "" "

By %s:

\n" "
    \n" msgstr "" +"

    Af %s:

    \n" +"
      \n" #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 #: contrib/admin/filterspecs.py:143 msgid "All" -msgstr "" +msgstr "Alle" #: contrib/admin/filterspecs.py:109 msgid "Any date" -msgstr "" +msgstr "Når som helst" #: contrib/admin/filterspecs.py:110 -#, fuzzy msgid "Today" -msgstr "Mandag" +msgstr "Idag" #: contrib/admin/filterspecs.py:113 msgid "Past 7 days" -msgstr "" +msgstr "De sidste 7 dage" #: contrib/admin/filterspecs.py:115 msgid "This month" -msgstr "" +msgstr "Denne måned" #: contrib/admin/filterspecs.py:117 msgid "This year" -msgstr "" +msgstr "Dette år" #: contrib/admin/filterspecs.py:143 msgid "Yes" -msgstr "" +msgstr "Ja" #: contrib/admin/filterspecs.py:143 -#, fuzzy msgid "No" -msgstr "Nov." +msgstr "Nej" #: contrib/admin/filterspecs.py:150 msgid "Unknown" -msgstr "" +msgstr "Ukendt" #: contrib/admin/models.py:16 msgid "action time" @@ -394,7 +392,7 @@ msgstr "handlingstid" #: contrib/admin/models.py:19 msgid "object id" -msgstr "objekt id" +msgstr "objekt-ID" #: contrib/admin/models.py:20 msgid "object repr" @@ -418,14 +416,14 @@ msgstr "logmeddelelser" #: contrib/admin/templatetags/admin_list.py:228 msgid "All dates" -msgstr "" +msgstr "Alle datoer" #: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 #: contrib/auth/forms.py:41 msgid "" "Please enter a correct username and password. Note that both fields are case-" "sensitive." -msgstr "" +msgstr "Indtast venligst et korrekt brugernavn og kodeord. Læg mærke til at begge felter er versalfølsomme." #: contrib/admin/views/decorators.py:23 #: contrib/admin/templates/admin/login.html:25 @@ -436,196 +434,189 @@ msgstr "Log ind" msgid "" "Please log in again, because your session has expired. Don't worry: Your " "submission has been saved." -msgstr "" +msgstr "Log venligst ind igen, da din session er udløbet. Der er ingen grund til bekymring, informationen du indsendte er blevet gemt." #: contrib/admin/views/decorators.py:68 msgid "" "Looks like your browser isn't configured to accept cookies. Please enable " "cookies, reload this page, and try again." -msgstr "" +msgstr "Det ser ud til din browser ikke er indstillet til at acceptere cookier. Slå venligst cookier til, genindlæs denne side og prøv igen." #: contrib/admin/views/decorators.py:82 msgid "Usernames cannot contain the '@' character." -msgstr "" +msgstr "Brugernavne kan ikke indeholde tegnet '@'." #: contrib/admin/views/decorators.py:84 #, python-format msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "" +msgstr "Din e-mail-adresse er ikke dit brugernavn. Prøv '%s' i stedet." #: contrib/admin/views/main.py:226 -#, fuzzy msgid "Site administration" -msgstr "Django administration" +msgstr "Website-administration" #: contrib/admin/views/main.py:260 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "" +msgstr "%(name)s \"%(obj)s\" blev tilføjet i databasen." #: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 msgid "You may edit it again below." -msgstr "" +msgstr "Du kan redigere det igen herunder." #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 #, python-format msgid "You may add another %s below." -msgstr "" +msgstr "Du kan tilføje endnu en %s herunder." #: contrib/admin/views/main.py:290 -#, fuzzy, python-format +#, python-format msgid "Add %s" -msgstr "Tilføj" +msgstr "Tilføj %s" #: contrib/admin/views/main.py:336 #, python-format msgid "Added %s." -msgstr "" +msgstr "Tilføjede %s." #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:340 msgid "and" -msgstr "" +msgstr "og" #: contrib/admin/views/main.py:338 -#, fuzzy, python-format +#, python-format msgid "Changed %s." -msgstr "Ændre" +msgstr "Ændrede %s." #: contrib/admin/views/main.py:340 #, python-format msgid "Deleted %s." -msgstr "" +msgstr "Slettede %s." #: contrib/admin/views/main.py:343 msgid "No fields changed." -msgstr "" +msgstr "Ingen filer ændret." #: contrib/admin/views/main.py:346 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "" +msgstr "%(name)s \"%(obj)s\" blev ændret." #: contrib/admin/views/main.py:354 #, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "" +msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "%(name)s \"%(obj)s\" blev tilføjet. Du kan redigere det igen herunder." #: contrib/admin/views/main.py:392 -#, fuzzy, python-format +#, python-format msgid "Change %s" -msgstr "Ændre" +msgstr "Ændr %s" #: contrib/admin/views/main.py:470 #, python-format msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "" +msgstr "Et eller flere %(fieldname)s i %(name)s: %(obj)s" #: contrib/admin/views/main.py:475 #, python-format msgid "One or more %(fieldname)s in %(name)s:" -msgstr "" +msgstr "Et eller flere %(fieldname)s i %(name)s:" #: contrib/admin/views/main.py:508 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "" +msgstr "%(name)s \"%(obj)s\" blev slettet." #: contrib/admin/views/main.py:511 msgid "Are you sure?" -msgstr "" +msgstr "Er du sikker?" #: contrib/admin/views/main.py:533 -#, fuzzy, python-format +#, python-format msgid "Change history: %s" -msgstr "Ændre adgangskode" +msgstr "Ændringshistorik: %s" #: contrib/admin/views/main.py:565 #, python-format msgid "Select %s" -msgstr "" +msgstr "Vælg %s" #: contrib/admin/views/main.py:565 #, python-format msgid "Select %s to change" -msgstr "" +msgstr "Vælg %s for at ændre" #: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 #: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 msgid "Integer" -msgstr "" +msgstr "Heltal" #: contrib/admin/views/doc.py:278 msgid "Boolean (Either True or False)" -msgstr "" +msgstr "Boolsk (enten \"true\" eller \"false\")" #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 #, python-format msgid "String (up to %(maxlength)s)" -msgstr "" +msgstr "Tekst (op til %(maxlength)s)" #: contrib/admin/views/doc.py:280 msgid "Comma-separated integers" -msgstr "" +msgstr "Kommaadskilte heltal" #: contrib/admin/views/doc.py:281 -#, fuzzy msgid "Date (without time)" -msgstr "handlingstid" +msgstr "Dato (uden tid)" #: contrib/admin/views/doc.py:282 -#, fuzzy msgid "Date (with time)" -msgstr "Dato/tid" +msgstr "Dato (med tid)" #: contrib/admin/views/doc.py:283 -#, fuzzy msgid "E-mail address" -msgstr "E-mail adresse:" +msgstr "E-mail-adresse" #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 msgid "File path" -msgstr "" +msgstr "Filsti" #: contrib/admin/views/doc.py:285 -#, fuzzy msgid "Decimal number" -msgstr "December" +msgstr "Decimaltal" #: contrib/admin/views/doc.py:291 msgid "Boolean (Either True, False or None)" -msgstr "" +msgstr "Boolsk (enten \"true\", \"false\", eller \"none\")" #: contrib/admin/views/doc.py:292 msgid "Relation to parent model" -msgstr "" +msgstr "Relation-til-forælder-model" #: contrib/admin/views/doc.py:293 -#, fuzzy msgid "Phone number" -msgstr "Indtast et heltal." +msgstr "Telefonnummer" #: contrib/admin/views/doc.py:298 msgid "Text" -msgstr "" +msgstr "Tekst" #: contrib/admin/views/doc.py:299 msgid "Time" -msgstr "" +msgstr "Tid" #: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 msgid "URL" -msgstr "Internetadresse" +msgstr "URL" #: contrib/admin/views/doc.py:301 msgid "U.S. state (two uppercase letters)" -msgstr "" +msgstr "Stat (i USA, to store bogstaver)" #: contrib/admin/views/doc.py:302 msgid "XML text" -msgstr "" +msgstr "XML tekst" #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 @@ -636,7 +627,7 @@ msgstr "" #: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Documentation" -msgstr "" +msgstr "Dokumentation" #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 @@ -704,7 +695,7 @@ msgstr "" #: contrib/admin/templates/admin/base_site.html:4 msgid "Django site admin" -msgstr "Django site administration" +msgstr "Django website-administration" #: contrib/admin/templates/admin/base_site.html:7 msgid "Django administration" @@ -726,9 +717,7 @@ msgstr "Serverfejl (500)" 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 "" -"Der opstod en fejl. Fejlen er rapporteret til site-administratoren via e-" -"mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed." +msgstr "Der opstod en fejl. Fejlen er rapporteret til website-administratoren via e-mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed." #: contrib/admin/templates/admin/404.html:4 #: contrib/admin/templates/admin/404.html:8 @@ -737,12 +726,12 @@ msgstr "Siden blev ikke fundet" #: contrib/admin/templates/admin/404.html:10 msgid "We're sorry, but the requested page could not be found." -msgstr "Vi Beklager, men den ønskede side kunne ikke findes" +msgstr "Vi beklager, men den ønskede side kunne ikke findes" #: contrib/admin/templates/admin/index.html:17 #, python-format msgid "Models available in the %(name)s application." -msgstr "" +msgstr "Modeller til rådighed i %(name)s applikationen." #: contrib/admin/templates/admin/index.html:28 #: contrib/admin/templates/admin/change_form.html:15 @@ -751,11 +740,11 @@ msgstr "Tilføj" #: contrib/admin/templates/admin/index.html:34 msgid "Change" -msgstr "Ændre" +msgstr "Ændr" #: contrib/admin/templates/admin/index.html:44 msgid "You don't have permission to edit anything." -msgstr "Du har ikke rettigehed til at foretage ændringer" +msgstr "Du har ikke rettigheder til at foretage ændringer." #: contrib/admin/templates/admin/index.html:52 msgid "Recent Actions" @@ -772,7 +761,7 @@ msgstr "Ingen tilgængelige" #: contrib/admin/templates/admin/change_list.html:11 #, python-format msgid "Add %(name)s" -msgstr "" +msgstr "Tilføj %(name)s" #: contrib/admin/templates/admin/login.html:22 msgid "Have you forgotten your password?" @@ -780,12 +769,12 @@ msgstr "Har du glemt din adgangskode?" #: contrib/admin/templates/admin/base.html:23 msgid "Welcome," -msgstr "Velkommen" +msgstr "Velkommen," #: contrib/admin/templates/admin/delete_confirmation.html:9 #: contrib/admin/templates/admin/submit_line.html:3 msgid "Delete" -msgstr "" +msgstr "Slet" #: contrib/admin/templates/admin/delete_confirmation.html:14 #, python-format @@ -795,16 +784,14 @@ msgid "" "types of objects:" msgstr "" "Hvis du sletter %(object_name)s '%(object)s' vil du også slette relaterede " -"objekter, men du har ikke rettigheder til at slette flg. typer objekter:" +"objekter, men du har ikke rettigheder til at slette følgende objekttyper:" #: contrib/admin/templates/admin/delete_confirmation.html:21 #, python-format msgid "" "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " "the following related items will be deleted:" -msgstr "" -"Er du sikker på at du vil slette %(object_name) \"%(object)s\"? Alle de " -"følgende relaterede objekter vil blive slettet:" +msgstr "Er du sikker på du vil slette %(object_name)s \"%(object)s\"? Alle følgende relaterede objekter vil blive slettet:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" @@ -813,62 +800,61 @@ msgstr "Ja, jeg er sikker" #: contrib/admin/templates/admin/filter.html:2 #, python-format msgid " By %(title)s " -msgstr "" +msgstr " Efter %(title)s " #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" -msgstr "" +msgstr "Kør" #: contrib/admin/templates/admin/change_form.html:21 msgid "View on site" -msgstr "" +msgstr "Se på website" #: contrib/admin/templates/admin/change_form.html:30 msgid "Please correct the error below." msgid_plural "Please correct the errors below." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Ret venligst fejlen herunder." +msgstr[1] "Ret venligst fejlene herunder." #: contrib/admin/templates/admin/change_form.html:48 msgid "Ordering" -msgstr "" +msgstr "Rækkefølge" #: contrib/admin/templates/admin/change_form.html:51 msgid "Order:" -msgstr "" +msgstr "Rækkefølge:" #: contrib/admin/templates/admin/submit_line.html:4 msgid "Save as new" -msgstr "" +msgstr "Gem som ny" #: contrib/admin/templates/admin/submit_line.html:5 msgid "Save and add another" -msgstr "" +msgstr "Gem og tilføj endnu en" #: contrib/admin/templates/admin/submit_line.html:6 msgid "Save and continue editing" -msgstr "" +msgstr "Gem og fortsæt med at redigere" #: contrib/admin/templates/admin/submit_line.html:7 -#, fuzzy msgid "Save" -msgstr "aktiv" +msgstr "Gem" #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 #: contrib/admin/templates/registration/password_change_form.html:10 msgid "Password change" -msgstr "Ændre passord" +msgstr "Ændr adgangskode" #: contrib/admin/templates/registration/password_change_done.html:6 #: contrib/admin/templates/registration/password_change_done.html:10 msgid "Password change successful" -msgstr "Adgangskoden er ændret" +msgstr "Adgangskoden blev ændret" #: contrib/admin/templates/registration/password_change_done.html:12 msgid "Your password was changed." -msgstr "Din adgangskode er ændret" +msgstr "Din adgangskode blev ændret." #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/password_reset_form.html:6 @@ -881,13 +867,11 @@ msgstr "Nulstil adgangskode" 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 "" -"Har din adgangskode? Indtast din email-adresse nedenfor, så sender vi dig en " -"ny kode via e-mail" +msgstr "Har du glemt din adgangskode? Indtast din e-mail-adresse herunder, så sender vi dig en ny adgangskode." #: contrib/admin/templates/registration/password_reset_form.html:16 msgid "E-mail address:" -msgstr "E-mail adresse:" +msgstr "E-mail-adresse:" #: contrib/admin/templates/registration/password_reset_form.html:16 msgid "Reset my password" @@ -895,7 +879,7 @@ msgstr "Nulstil min adgangskode" #: contrib/admin/templates/registration/logged_out.html:8 msgid "Thanks for spending some quality time with the Web site today." -msgstr "Tak for den tid du brugte på sitet idag" +msgstr "Tak for den kvalitetstid du brugte på websitet idag." #: contrib/admin/templates/registration/logged_out.html:10 msgid "Log in again" @@ -910,18 +894,16 @@ msgstr "Adgangskoden blev nulstillet" msgid "" "We've e-mailed a new password to the e-mail address you submitted. You " "should be receiving it shortly." -msgstr "" -"Vi har e-mailet en ny adgangskode til dig. Du skulle modtage den om ganske " -"kort tid." +msgstr "Vi har sendt en ny adgangskode til din e-mail-adresse. Du skulle modtage den om ganske kort tid." #: contrib/admin/templates/registration/password_change_form.html:12 msgid "" "Please enter your old password, for security's sake, and then enter your new " "password twice so we can verify you typed it in correctly." msgstr "" -"Indtast venligst din gamle adgangskode af sikkerhedsgrunde, og indtast så " -"dit nye password to gange, så vi kan være sikre på, at det er indtastet " -"korrekt" +"Indtast venligst din gamle adgangskode, for en sikkerheds skyld og indtast så " +"din nye adgangskode to gange, så vi kan være sikre på, at den er indtastet " +"korrekt." #: contrib/admin/templates/registration/password_change_form.html:17 msgid "Old password:" @@ -937,17 +919,16 @@ msgstr "Bekræft ny adgangskode:" #: contrib/admin/templates/registration/password_change_form.html:23 msgid "Change my password" -msgstr "Ændre adgangskode" +msgstr "Ændr min adgangskode" #: contrib/admin/templates/registration/password_reset_email.html:2 msgid "You're receiving this e-mail because you requested a password reset" -msgstr "" -"Du modtager denne e-mail, fordi du har bedt om at få nulstillet dit password" +msgstr "Du modtager denne e-mail, fordi du har bedt om at få nulstillet din adgangskode" #: contrib/admin/templates/registration/password_reset_email.html:3 #, python-format msgid "for your user account at %(site_name)s" -msgstr "for din konto hos %(site_name)s" +msgstr "til din brugerkonto ved %(site_name)s" #: contrib/admin/templates/registration/password_reset_email.html:5 #, python-format @@ -956,15 +937,15 @@ msgstr "Din nye adgangskode er: %(new_password)s" #: contrib/admin/templates/registration/password_reset_email.html:7 msgid "Feel free to change this password by going to this page:" -msgstr "Du kan ændre din adgangskode ved at gå til denne side" +msgstr "Du kan ændre din adgangskode ved at gå til denne side:" #: contrib/admin/templates/registration/password_reset_email.html:11 msgid "Your username, in case you've forgotten:" -msgstr "I det tilfælde, at du har glemt dit brugernavn er det:" +msgstr "I det tilfælde at du har glemt dit brugernavn er det:" #: contrib/admin/templates/registration/password_reset_email.html:13 msgid "Thanks for using our site!" -msgstr "Tak, fordi du brugte vores site!" +msgstr "Tak fordi du brugte vores website!" #: contrib/admin/templates/registration/password_reset_email.html:15 #, python-format @@ -973,11 +954,11 @@ msgstr "Med venlig hilsen %(site_name)s" #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Bookmarklets" -msgstr "" +msgstr "Bookmarklets" #: contrib/admin/templates/admin_doc/bookmarklets.html:5 msgid "Documentation bookmarklets" -msgstr "" +msgstr "Documentation bookmarklets" #: contrib/admin/templates/admin_doc/bookmarklets.html:9 msgid "" @@ -989,60 +970,64 @@ msgid "" "as \"internal\" (talk to your system administrator if you aren't sure if\n" "your computer is \"internal\").

      \n" msgstr "" +"\n" +"

      For at installere bookmarklets, træk linket til din bogmærkelinje\n, eller højreklik på linket og tilføj det til dine bogmærker. Du kan nu\n" +"markere bookmarkletten fra enhver side på websitet. Bid mærke i at nogle af disse \n" +"bookmarkletter kræver at du ser på websitet fra en computer der opfattes \n" +"som \"intern\" (tal med din systemadministrator, hvis du ikke er sikker på om\n" +"din computer er \"intern\").

      \n" #: contrib/admin/templates/admin_doc/bookmarklets.html:19 msgid "Documentation for this page" -msgstr "" +msgstr "Dokumentation for denne side" #: contrib/admin/templates/admin_doc/bookmarklets.html:20 msgid "" "Jumps you from any page to the documentation for the view that generates " "that page." -msgstr "" +msgstr "Bringer dig fra en hvilken som helst side til dokumentationen for det view der genererer den pågældende side." #: contrib/admin/templates/admin_doc/bookmarklets.html:22 -#, fuzzy msgid "Show object ID" -msgstr "objekt id" +msgstr "Vis objekt-ID" #: contrib/admin/templates/admin_doc/bookmarklets.html:23 msgid "" "Shows the content-type and unique ID for pages that represent a single " "object." -msgstr "" +msgstr "Viser indholdstypen og unikt ID for sider der repræsenterer et enkelt objekt." #: contrib/admin/templates/admin_doc/bookmarklets.html:25 msgid "Edit this object (current window)" -msgstr "" +msgstr "Redigér dette objekt (i det aktuelle vindue)" #: contrib/admin/templates/admin_doc/bookmarklets.html:26 msgid "Jumps to the admin page for pages that represent a single object." -msgstr "" +msgstr "Springer til administrationssiden for sider der repræsenterer et enkelt objekt." #: contrib/admin/templates/admin_doc/bookmarklets.html:28 msgid "Edit this object (new window)" -msgstr "" +msgstr "Redigér dette objekt (i nyt vindue)" #: contrib/admin/templates/admin_doc/bookmarklets.html:29 msgid "As above, but opens the admin page in a new window." -msgstr "" +msgstr "Som ovenfor, men åbner administrationssiden i et nyt vindue." #: contrib/admin/templates/widget/date_time.html:3 msgid "Date:" -msgstr "" +msgstr "Dato:" #: contrib/admin/templates/widget/date_time.html:4 msgid "Time:" -msgstr "" +msgstr "Tid:" #: contrib/admin/templates/widget/file.html:2 msgid "Currently:" -msgstr "" +msgstr "Nuværende:" #: contrib/admin/templates/widget/file.html:3 -#, fuzzy msgid "Change:" -msgstr "Ændre" +msgstr "Ændr:" #: contrib/redirects/models.py:7 msgid "redirect from" @@ -1054,7 +1039,7 @@ msgid "" "events/search/'." msgstr "" "Dette skal være en absolut sti uden domænenavnet. For eksempel: '/nyheder/" -"find/" +"søg/" #: contrib/redirects/models.py:9 msgid "redirect to" @@ -1065,7 +1050,7 @@ msgid "" "This can be either an absolute path (as above) or a full URL starting with " "'http://'." msgstr "" -"Dette kan enten være en absolut sti (som over), eller en komplet URL " +"Dette kan enten være en absolut sti (som ovenfor), eller en komplet URL " "startende med 'http://'" #: contrib/redirects/models.py:12 @@ -1077,11 +1062,8 @@ msgid "redirects" msgstr "omaddresseringer" #: contrib/flatpages/models.py:8 -msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "" -"Eksempel: '/om/kontakt/'. Vær sikker på at du har en skråstreg foran og og " -"bagefter." +msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "Eksempel: '/om/kontakt/'. Vær sikker på at du har en skråstreg foran og bagved." #: contrib/flatpages/models.py:9 msgid "title" @@ -1100,22 +1082,19 @@ msgid "template name" msgstr "skabelonnavn" #: contrib/flatpages/models.py:13 -#, fuzzy msgid "" "Example: 'flatpages/contact_page'. If this isn't provided, the system will " "use 'flatpages/default'." -msgstr "" -"Eksempel: 'fladesider/kontakt_side'. Vist denne ikke denne er gitt, vill " -"'flatfiles/default' bli brukt." +msgstr "Eksempel: 'fladesider/kontakt_side'. Hvis dette ikke tilbydes, bruger systemet 'fladesider/default'." #: contrib/flatpages/models.py:14 msgid "registration required" -msgstr "registrering kreves" +msgstr "registrering påkrævet" #: contrib/flatpages/models.py:14 msgid "If this is checked, only logged-in users will be able to view the page." msgstr "" -"Hvis denne box er krydset af, vil kun brugere, der er logget ind, kunne se " +"Hvis denne boks er markeret, vil kun brugere der er logget ind, kunne se " "siden." #: contrib/flatpages/models.py:18 @@ -1135,24 +1114,20 @@ msgid "codename" msgstr "kodenavn" #: contrib/auth/models.py:17 -#, fuzzy msgid "permission" -msgstr "Rettighed" +msgstr "rettighed" #: contrib/auth/models.py:18 contrib/auth/models.py:27 -#, fuzzy msgid "permissions" -msgstr "Rettigheder" +msgstr "rettigheder" #: contrib/auth/models.py:29 -#, fuzzy msgid "group" -msgstr "Gruppe" +msgstr "gruppe" #: contrib/auth/models.py:30 contrib/auth/models.py:65 -#, fuzzy msgid "groups" -msgstr "Grupper" +msgstr "grupper" #: contrib/auth/models.py:55 msgid "username" @@ -1168,7 +1143,7 @@ msgstr "efternavn" #: contrib/auth/models.py:58 msgid "e-mail address" -msgstr "e-mail adresse" +msgstr "e-mail-adresse" #: contrib/auth/models.py:59 msgid "password" @@ -1176,7 +1151,7 @@ msgstr "adgangskode" #: contrib/auth/models.py:59 msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "" +msgstr "Brug '[algo]$[salt]$[hexdigest]'" #: contrib/auth/models.py:60 msgid "staff status" @@ -1184,7 +1159,7 @@ msgstr "administrationsstatus" #: contrib/auth/models.py:60 msgid "Designates whether the user can log into this admin site." -msgstr "Bestemmer om brugeren kan logge ind på dette administrationssite" +msgstr "Bestemmer om brugeren kan logge ind på dette administrationswebsite." #: contrib/auth/models.py:61 msgid "active" @@ -1192,7 +1167,7 @@ msgstr "aktiv" #: contrib/auth/models.py:62 msgid "superuser status" -msgstr "superbruger" +msgstr "superbrugerstatus" #: contrib/auth/models.py:63 msgid "last login" @@ -1207,23 +1182,20 @@ msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." msgstr "" -"I tillæg til de rettighder, som manuelt er tildelt brugeren, vil denne også " -"få alle rettigheder tildelt hver gruppe han/hun er medlem af" +"Udover de rettigheder, der manuelt er tildelt brugeren, vil denne også " +"få alle rettigheder der er tildelt hver gruppe, brugeren er medlem af." #: contrib/auth/models.py:67 -#, fuzzy msgid "user permissions" -msgstr "Rettigheder" +msgstr "brugerrettigheder" #: contrib/auth/models.py:70 -#, fuzzy msgid "user" -msgstr "Bruger" +msgstr "bruger" #: contrib/auth/models.py:71 -#, fuzzy msgid "users" -msgstr "Brugere" +msgstr "brugere" #: contrib/auth/models.py:76 msgid "Personal info" @@ -1242,20 +1214,18 @@ msgid "Groups" msgstr "Grupper" #: contrib/auth/models.py:219 -#, fuzzy msgid "message" -msgstr "Meddelelse" +msgstr "meddelelse" #: contrib/auth/forms.py:30 msgid "" "Your Web browser doesn't appear to have cookies enabled. Cookies are " "required for logging in." -msgstr "" +msgstr "Din browser ser ud til ikke at have cookier aktiveret. Cookier er påkrævet for at kunne logge ind." #: contrib/contenttypes/models.py:25 -#, fuzzy msgid "python model class name" -msgstr "python modulnavn" +msgstr "python model klassenavn" #: contrib/contenttypes/models.py:28 msgid "content type" @@ -1295,11 +1265,11 @@ msgstr "vist navn" #: contrib/sites/models.py:15 msgid "site" -msgstr "side" +msgstr "website" #: contrib/sites/models.py:16 msgid "sites" -msgstr "sider" +msgstr "websites" #: utils/translation.py:360 msgid "DATE_FORMAT" @@ -1391,52 +1361,51 @@ msgstr "December" #: utils/dates.py:19 msgid "jan" -msgstr "" +msgstr "jan" #: utils/dates.py:19 msgid "feb" -msgstr "" +msgstr "feb" #: utils/dates.py:19 msgid "mar" -msgstr "" +msgstr "mar" #: utils/dates.py:19 msgid "apr" -msgstr "" +msgstr "apr" #: utils/dates.py:19 -#, fuzzy msgid "may" -msgstr "Maj" +msgstr "maj" #: utils/dates.py:19 msgid "jun" -msgstr "" +msgstr "jun" #: utils/dates.py:20 msgid "jul" -msgstr "" +msgstr "jul" #: utils/dates.py:20 msgid "aug" -msgstr "" +msgstr "aug" #: utils/dates.py:20 msgid "sep" -msgstr "" +msgstr "sept" #: utils/dates.py:20 msgid "oct" -msgstr "" +msgstr "okt" #: utils/dates.py:20 msgid "nov" -msgstr "" +msgstr "nov" #: utils/dates.py:20 msgid "dec" -msgstr "" +msgstr "dec" #: utils/dates.py:27 msgid "Jan." @@ -1469,44 +1438,42 @@ msgstr "Dec." #: utils/timesince.py:12 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "år" +msgstr[1] "år" #: utils/timesince.py:13 msgid "month" msgid_plural "months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "måned" +msgstr[1] "måneder" #: utils/timesince.py:14 msgid "week" msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "uge" +msgstr[1] "uger" #: utils/timesince.py:15 -#, fuzzy msgid "day" msgid_plural "days" -msgstr[0] "Maj" -msgstr[1] "Maj" +msgstr[0] "dag" +msgstr[1] "dage" #: utils/timesince.py:16 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "time" +msgstr[1] "timer" #: utils/timesince.py:17 -#, fuzzy msgid "minute" msgid_plural "minutes" -msgstr[0] "side" -msgstr[1] "side" +msgstr[0] "minut" +msgstr[1] "minutter" #: conf/global_settings.py:37 msgid "Bengali" -msgstr "" +msgstr "Bengalsk" #: conf/global_settings.py:38 msgid "Czech" @@ -1517,9 +1484,8 @@ msgid "Welsh" msgstr "Walisisk" #: conf/global_settings.py:40 -#, fuzzy msgid "Danish" -msgstr "Spansk" +msgstr "Dansk" #: conf/global_settings.py:41 msgid "German" @@ -1527,7 +1493,7 @@ msgstr "Tysk" #: conf/global_settings.py:42 msgid "Greek" -msgstr "" +msgstr "Græsk" #: conf/global_settings.py:43 msgid "English" @@ -1547,11 +1513,11 @@ msgstr "Galicisk" #: conf/global_settings.py:47 msgid "Hungarian" -msgstr "" +msgstr "Ungarsk" #: conf/global_settings.py:48 msgid "Hebrew" -msgstr "" +msgstr "Hebræisk" #: conf/global_settings.py:49 msgid "Icelandic" @@ -1563,11 +1529,11 @@ msgstr "Italiensk" #: conf/global_settings.py:51 msgid "Japanese" -msgstr "" +msgstr "Japansk" #: conf/global_settings.py:52 msgid "Dutch" -msgstr "" +msgstr "Hollandsk" #: conf/global_settings.py:53 msgid "Norwegian" @@ -1590,9 +1556,8 @@ msgid "Slovak" msgstr "Slovakisk" #: conf/global_settings.py:58 -#, fuzzy msgid "Slovenian" -msgstr "Slovakisk" +msgstr "Slovensk" #: conf/global_settings.py:59 msgid "Serbian" @@ -1603,9 +1568,8 @@ msgid "Swedish" msgstr "Svensk" #: conf/global_settings.py:61 -#, fuzzy msgid "Ukrainian" -msgstr "Brasiliansk" +msgstr "Ukrainsk" #: conf/global_settings.py:62 msgid "Simplified Chinese" @@ -1620,20 +1584,18 @@ msgid "This value must contain only letters, numbers and underscores." msgstr "Dette felt må kun indeholde bogstaver, tal og understreger." #: core/validators.py:64 -#, fuzzy msgid "" "This value must contain only letters, numbers, underscores, dashes or " "slashes." -msgstr "" -"Dette felt må kun indeholde bogstaver, tal, understreger og skråstreger." +msgstr "Dette felt må kun indeholde bogstaver, tal, understreger, streger eller skråstreger." #: core/validators.py:72 msgid "Uppercase letters are not allowed here." -msgstr "Store bogstaver er ikke tilladt her" +msgstr "Store bogstaver er ikke tilladt her." #: core/validators.py:76 msgid "Lowercase letters are not allowed here." -msgstr "Små bogstaver er ikke tilladt her" +msgstr "Små bogstaver er ikke tilladt her." #: core/validators.py:83 msgid "Enter only digits separated by commas." @@ -1641,11 +1603,11 @@ msgstr "Indtast kun tal adskilt af kommaer." #: core/validators.py:95 msgid "Enter valid e-mail addresses separated by commas." -msgstr "Indtast gyldige email-adresser adskilt af kommaer" +msgstr "Indtast gyldige e-mail-adresser adskilt af kommaer." #: core/validators.py:99 msgid "Please enter a valid IP address." -msgstr "Venlist indtast en gyldig email-adresse." +msgstr "Indtast venligst en gyldig IP-adresse." #: core/validators.py:103 msgid "Empty values are not allowed here." @@ -1653,11 +1615,11 @@ msgstr "Dette felt kan ikke være tomt." #: core/validators.py:107 msgid "Non-numeric characters aren't allowed here." -msgstr "Der må kun være tal her" +msgstr "Der må kun være tal i dette felt." #: core/validators.py:111 msgid "This value can't be comprised solely of digits." -msgstr "Denne værdi kan ikke kun bestå af tal." +msgstr "Denne værdi kan ikke udelukkende bestå af tal." #: core/validators.py:116 msgid "Enter a whole number." @@ -1681,26 +1643,25 @@ msgstr "Indtast dato og tid i ÅÅÅÅ-MM-DD TT:MM format." #: core/validators.py:136 msgid "Enter a valid e-mail address." -msgstr "Indtast en gyldig email-adresse." +msgstr "Indtast en gyldig e-mail-adresse." #: core/validators.py:148 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "" -"Upload en billed-fil. Filen du uploadede var enten ikke et billede eller en " -"ødelagt billed-fil" +"Indsend en billedfil. Filen du indsendte var enten ikke et billede eller en " +"ødelagt billedfil." #: core/validators.py:155 #, python-format msgid "The URL %s does not point to a valid image." -msgstr "URLen %s viser ikke til en gyldig billed-fil" +msgstr "URLen %s viser ikke til en gyldig billedfil." #: core/validators.py:159 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." -msgstr "" -"Telefonnumre skal være i XXX-XXX-XXXX formatet. \"%s\" er ikke godkjent." +msgstr "Telefonnumre skal være i formatet XXXXXXXX. \"%s\" er ikke godkendt." #: core/validators.py:167 #, python-format @@ -1709,7 +1670,7 @@ msgstr "URLen %s viser ikke til en gyldig QuickTime-film." #: core/validators.py:171 msgid "A valid URL is required." -msgstr "En gyldig URL er påkrævet" +msgstr "En gyldig URL er påkrævet." #: core/validators.py:185 #, python-format @@ -1733,11 +1694,11 @@ msgstr "Ugyldig URL: %s" #: core/validators.py:206 core/validators.py:208 #, python-format msgid "The URL %s is a broken link." -msgstr "Denne URL %s linker ikke til en gyldig side eller fil" +msgstr "Denne URL %s linker ikke til en gyldig side eller fil." #: core/validators.py:214 msgid "Enter a valid U.S. state abbreviation." -msgstr "Indtast en gyldig amerikansk statsforkortelse" +msgstr "Indtast en gyldig amerikansk statsforkortelse." #: core/validators.py:229 #, python-format @@ -1753,25 +1714,25 @@ msgstr "Dette felt skal matche '%s' feltet." #: core/validators.py:255 msgid "Please enter something for at least one field." -msgstr "Indtast venligst noget i mindst et felt" +msgstr "Indtast venligst noget, i mindst ét felt" #: core/validators.py:264 core/validators.py:275 msgid "Please enter both fields or leave them both empty." -msgstr "Udfyld begge felter, eller lad dem begge være blanke" +msgstr "Udfyld begge felter, eller lad dem begge være tomme." #: core/validators.py:282 #, python-format msgid "This field must be given if %(field)s is %(value)s" -msgstr "Dette felt skal udfyldes, hvis %(field)s er lig %(value)s" +msgstr "Dette felt skal udfyldes, hvis %(field)s er lig %(value)s." #: core/validators.py:294 #, python-format msgid "This field must be given if %(field)s is not %(value)s" -msgstr "Dette felt skal udfyldes, hvis %(field)s ikke er lig %(value)s" +msgstr "Dette felt skal udfyldes, hvis %(field)s ikke er lig %(value)s." #: core/validators.py:313 msgid "Duplicate values are not allowed." -msgstr "Duplikate værdier er ikke tilladt her" +msgstr "Identiske værdier er ikke tilladt her." #: core/validators.py:336 #, python-format @@ -1783,34 +1744,32 @@ msgid "Please enter a valid decimal number." msgstr "Indtast venligst et gyldigt decimaltal." #: core/validators.py:349 -#, fuzzy, python-format +#, 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." -msgstr[0] "Indtast en gyldig decimal med max %s tal ialt" -msgstr[1] "Indtast en gyldig decimal med max %s tal ialt" +msgid_plural "Please enter a valid decimal number with at most %s total digits." +msgstr[0] "Indtast et gyldigt decimaltal med maksimalt %s ciffer i alt." +msgstr[1] "Indtast et gyldigt decimaltal med maksimalt %s cifre i alt." #: core/validators.py:352 #, 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] "Indtast en gyldig decimal med max %s tal efter kommaet" -msgstr[1] "Indtast en gyldig decimal med max %s tal efter kommaet" +msgid_plural "Please enter a valid decimal number with at most %s decimal places." +msgstr[0] "Indtast en gyldig decimal med maksimalt %s tal efter kommaet" +msgstr[1] "Indtast en gyldig decimal med maksimalt %s tal efter kommaet" #: core/validators.py:362 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "Tjek at den uploadede fil er mindst % bytes." +msgstr "Tjek at den indsendte fil er mindst %s bytes." #: core/validators.py:363 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "Tjek at den uploadede file er max %s bytes." +msgstr "Tjek at den indsendte fil er maksimalt %s bytes." #: core/validators.py:376 msgid "The format for this field is wrong." -msgstr "Formatet i dette feltet er feil." +msgstr "Formatet i dette felt er forkert." #: core/validators.py:391 msgid "This field is invalid." @@ -1823,18 +1782,15 @@ msgstr "Kunne ikke finde noget i %s." #: core/validators.py:429 #, python-format -msgid "" -"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "" -"URLen %(url)s returnerede ikke en godkendt Content-Type '%(contenttype)s'." +msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "URLen %(url)s returnerede ikke en godkendt Content-Type header '%(contenttype)s'." #: core/validators.py:462 #, python-format msgid "" "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " "\"%(start)s\".)" -msgstr "" -"Luk venligst %(tag)s på linje %(line)s. (Linjen starer med \"%(start)s\".)" +msgstr "Luk venligst %(tag)s på linje %(line)s. (Linjen starter med \"%(start)s\".)" #: core/validators.py:466 #, python-format @@ -1860,8 +1816,8 @@ msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" "(start)s\".)" msgstr "" -"\"<%(tag)s>\" på linje %(line)s er ikke et gyldigt tag. (Linjen starter med " -"\"%(start)s\".)" +"\"<%(tag)s>\" på linje %(line)s er et ugyldigt tag. (Linjen starter med \"%" +"(start)s\".)" #: core/validators.py:480 #, python-format @@ -1869,7 +1825,7 @@ msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " "starts with \"%(start)s\".)" msgstr "" -"Et tag på linje %(line)s mangler en obligatorisk attribut. (Linjen starter " +"Et tag på linje %(line)s mangler en påkrævet attribut. (Linjen starter " "med \"%(start)s\".)" #: core/validators.py:485 @@ -1878,120 +1834,94 @@ msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " "starts with \"%(start)s\".)" msgstr "" -"\"%(attr)s\" attributten på linje $(line)s har en ugyldig værdi. (Linjen " +"\"%(attr)s\" attributten på linje %(line)s har en ugyldig værdi. (Linjen " "starter med \"%(start)s\".)" #: db/models/manipulators.py:302 #, python-format msgid "%(object)s with this %(type)s already exists for the given %(field)s." -msgstr "" +msgstr "%(object)s med denne %(type)s eksisterer allerede for den givne %(field)s." #: db/models/fields/__init__.py:40 #, python-format msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "" +msgstr "%(optname)s med dette %(fieldname)s eksisterer allerede." #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 #: forms/__init__.py:346 -#, fuzzy msgid "This field is required." -msgstr "Dette felt er ugyldigt." +msgstr "Dette felt er påkrævet." #: db/models/fields/__init__.py:337 -#, fuzzy msgid "This value must be an integer." -msgstr "Denne værdi skal være en potens af %s." +msgstr "Denne værdi skal et heltal." #: db/models/fields/__init__.py:369 -#, fuzzy msgid "This value must be either True or False." -msgstr "Denne værdi skal være en potens af %s." +msgstr "Denne værdi skal være enten true eller false." #: db/models/fields/__init__.py:385 -#, fuzzy msgid "This field cannot be null." -msgstr "Dette felt er ugyldigt." +msgstr "Dette felt kan ikke være null." #: db/models/fields/__init__.py:562 -#, fuzzy msgid "Enter a valid filename." -msgstr "Indtast en gyldig email-adresse." +msgstr "Indtast et gyldigt filnavn." #: db/models/fields/related.py:43 -#, fuzzy, python-format +#, python-format msgid "Please enter a valid %s." -msgstr "Venlist indtast en gyldig email-adresse." +msgstr "Indtast venligst en gyldig %s." #: db/models/fields/related.py:579 -#, fuzzy msgid "Separate multiple IDs with commas." -msgstr "Adskil id'er med kommaer." +msgstr "Adskil flere ID'er med kommaer." #: db/models/fields/related.py:581 -#, fuzzy -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" -"Hold \"Kontrol\", eller \"Æbletasten\" på Mac, nede for at vælge mere end en." +msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "Hold \"Kontrol\", eller \"Æbletasten\" på Mac nede, for at vælge mere end en." #: db/models/fields/related.py:625 #, 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] "" -msgstr[1] "" +msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid." +msgstr[0] "Indtast venligst et gyldigt %(self)s-ID. Værdien %(value)r er ugyldig." +msgstr[1] "Indtast venligst gyldige %(self)s-ID'er. Værdierne %(value)r er ugyldige." #: forms/__init__.py:380 #, python-format msgid "Ensure your text is less than %s character." msgid_plural "Ensure your text is less than %s characters." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Sørg for din tekst er kortere end %s tegn." +msgstr[1] "Sørg for din tekst er kortere end %s tegn." #: forms/__init__.py:385 -#, fuzzy msgid "Line breaks are not allowed here." -msgstr "Små bogstaver er ikke tilladt her" +msgstr "Linjebrud er ikke tilladt her." #: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 #, python-format msgid "Select a valid choice; '%(data)s' is not in %(choices)s." -msgstr "" +msgstr "Markér et gyldigt valg; '%(data)s' er ikke i %(choices)s." #: forms/__init__.py:645 msgid "The submitted file is empty." -msgstr "" +msgstr "Den indsendte fil er tom." #: forms/__init__.py:699 -#, fuzzy msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Indtast et heltal." +msgstr "Indtast et heltal mellem -32,768 og 32,767." #: forms/__init__.py:708 -#, fuzzy msgid "Enter a positive number." -msgstr "Indtast et heltal." +msgstr "Indtast et positivt tal." #: forms/__init__.py:717 -#, fuzzy msgid "Enter a whole number between 0 and 32,767." -msgstr "Indtast et heltal." +msgstr "Indtast et heltal mellem 0 og 32,767." #: template/defaultfilters.py:379 msgid "yes,no,maybe" -msgstr "" +msgstr "ja,nej,måske" -#, fuzzy -#~ msgid "Comments" -#~ msgstr "tillad kommentarer" - -#~ msgid "label" -#~ msgstr "mærkat" - -#~ msgid "package" -#~ msgstr "pakke" - -#~ msgid "packages" -#~ msgstr "pakker" diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo index a4f4af172e..aef68099d3 100644 Binary files a/django/conf/locale/de/LC_MESSAGES/django.mo and b/django/conf/locale/de/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po index 99212a4f53..614ea69247 100644 --- a/django/conf/locale/de/LC_MESSAGES/django.po +++ b/django/conf/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Django 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-05-16 10:11+0200\n" +"POT-Creation-Date: 2006-09-25 16:04+0200\n" "PO-Revision-Date: 2005-10-08 00:03+0200\n" "Last-Translator: Georg Bauer \n" "MIME-Version: 1.0\n" @@ -71,7 +71,7 @@ msgstr "Datum/Zeit Erstellung" msgid "is public" msgstr "ist ffentlich" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 msgid "IP address" msgstr "IP-Adresse" @@ -208,14 +208,14 @@ msgstr "Ung msgid "No voting for yourself" msgstr "Keine Abstimmung bei Dir selber" -#: contrib/comments/views/comments.py:28 +#: contrib/comments/views/comments.py:27 msgid "" "This rating is required because you've entered at least one other rating." msgstr "" "Die Abstimmung ist zwangsweise, weil Du an mindestens einer anderen " "Abstimmung teilnimmst." -#: contrib/comments/views/comments.py:112 +#: contrib/comments/views/comments.py:111 #, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " @@ -238,7 +238,7 @@ msgstr[1] "" "\n" "%(text)s" -#: contrib/comments/views/comments.py:117 +#: contrib/comments/views/comments.py:116 #, python-format msgid "" "This comment was posted by a sketchy user:\n" @@ -249,23 +249,23 @@ msgstr "" "\n" "%(text)s" -#: contrib/comments/views/comments.py:189 +#: contrib/comments/views/comments.py:188 #: contrib/comments/views/comments.py:280 msgid "Only POSTs are allowed" msgstr "Nur POST ist erlaubt" -#: contrib/comments/views/comments.py:193 +#: contrib/comments/views/comments.py:192 #: contrib/comments/views/comments.py:284 msgid "One or more of the required fields wasn't submitted" msgstr "Eines oder mehrere der erforderlichen Felder fehlt" -#: contrib/comments/views/comments.py:197 +#: contrib/comments/views/comments.py:196 #: contrib/comments/views/comments.py:286 msgid "Somebody tampered with the comment form (security violation)" msgstr "" "Jemand hat mit dem Kommentarformular herumgespielt (Sicherheitsverletzung)" -#: contrib/comments/views/comments.py:207 +#: contrib/comments/views/comments.py:206 #: contrib/comments/views/comments.py:292 msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " @@ -287,18 +287,9 @@ msgid "Username:" msgstr "Benutzername:" #: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Passwort:" - -#: contrib/comments/templates/comments/form.html:6 -msgid "Forgotten your password?" -msgstr "Kennwort vergessen?" - -#: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 #: contrib/admin/templates/registration/password_change_done.html:3 @@ -316,6 +307,15 @@ msgstr "Kennwort vergessen?" msgid "Log out" msgstr "Abmelden" +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "Passwort:" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Kennwort vergessen?" + #: contrib/comments/templates/comments/form.html:12 msgid "Ratings" msgstr "Bewertungen" @@ -334,13 +334,13 @@ msgstr "Optional" msgid "Post a photo" msgstr "Ein Bild verffentlichen" -#: contrib/comments/templates/comments/form.html:27 +#: contrib/comments/templates/comments/form.html:28 #: contrib/comments/templates/comments/freeform.html:5 msgid "Comment:" msgstr "Kommentar:" -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 msgid "Preview comment" msgstr "Kommentarvorschau" @@ -358,7 +358,7 @@ msgstr "" "
        \n" #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 msgid "All" msgstr "Alle" @@ -422,12 +422,11 @@ msgstr "Logeintrag" msgid "log entries" msgstr "Logeintrge" -#: contrib/admin/templatetags/admin_list.py:228 +#: contrib/admin/templatetags/admin_list.py:230 msgid "All dates" msgstr "Alle Tage" -#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 -#: contrib/auth/forms.py:41 +#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59 msgid "" "Please enter a correct username and password. Note that both fields are case-" "sensitive." @@ -435,12 +434,12 @@ msgstr "" "Bitte einen Benutzernamen und ein Kennwort eingeben. Beide Felder " "bercksichtigen die Gro-/Kleinschreibung." -#: contrib/admin/views/decorators.py:23 +#: contrib/admin/views/decorators.py:24 #: contrib/admin/templates/admin/login.html:25 msgid "Log in" msgstr "Anmelden" -#: contrib/admin/views/decorators.py:61 +#: contrib/admin/views/decorators.py:62 msgid "" "Please log in again, because your session has expired. Don't worry: Your " "submission has been saved." @@ -448,7 +447,7 @@ msgstr "" "Bitte neu anmelden, da die Session ausgelaufen ist. Keine Angst: die " "Beitrge wurden gesichert." -#: contrib/admin/views/decorators.py:68 +#: contrib/admin/views/decorators.py:69 msgid "" "Looks like your browser isn't configured to accept cookies. Please enable " "cookies, reload this page, and try again." @@ -456,70 +455,71 @@ msgstr "" "Es sieht danach aus, das der Browser keine Cookies akzeptiert. Bitte im " "Browser Cookies aktivieren und diese Seite neu laden." -#: contrib/admin/views/decorators.py:82 +#: contrib/admin/views/decorators.py:83 msgid "Usernames cannot contain the '@' character." msgstr "Benutzernamen knnen das Zeichen '@' nicht enthalten." -#: contrib/admin/views/decorators.py:84 +#: contrib/admin/views/decorators.py:85 #, python-format msgid "Your e-mail address is not your username. Try '%s' instead." msgstr "" "Die eMail-Adresse ist nicht der Benutzername. Bitte '%s' stattdessen " "versuchen." -#: contrib/admin/views/main.py:226 +#: contrib/admin/views/main.py:223 msgid "Site administration" msgstr "Website Verwaltung" -#: contrib/admin/views/main.py:260 +#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefgt." -#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 +#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347 +#: contrib/admin/views/auth.py:22 msgid "You may edit it again below." msgstr "Das Element kann jetzt weiter gendert werden." -#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 #, python-format msgid "You may add another %s below." msgstr "Jetzt kann ein weiteres Element vom Typ %s angelegt werden." -#: contrib/admin/views/main.py:290 +#: contrib/admin/views/main.py:289 #, python-format msgid "Add %s" msgstr "%s zufgen" -#: contrib/admin/views/main.py:336 +#: contrib/admin/views/main.py:335 #, python-format msgid "Added %s." msgstr "%s hinzugefgt." -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 +#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:339 msgid "and" msgstr "und" -#: contrib/admin/views/main.py:338 +#: contrib/admin/views/main.py:337 #, python-format msgid "Changed %s." msgstr "%s gendert" -#: contrib/admin/views/main.py:340 +#: contrib/admin/views/main.py:339 #, python-format msgid "Deleted %s." msgstr "%s gelscht." -#: contrib/admin/views/main.py:343 +#: contrib/admin/views/main.py:342 msgid "No fields changed." msgstr "Keine Felder gendert." -#: contrib/admin/views/main.py:346 +#: contrib/admin/views/main.py:345 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gendert." -#: contrib/admin/views/main.py:354 +#: contrib/admin/views/main.py:353 #, python-format msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." @@ -527,119 +527,188 @@ msgstr "" "%(name)s \"%(obj)s\" wurde erfolgreich zugefgt. Das Element kann jetzt " "gendert werden." -#: contrib/admin/views/main.py:392 +#: contrib/admin/views/main.py:391 #, python-format msgid "Change %s" msgstr "%s ndern" -#: contrib/admin/views/main.py:470 +#: contrib/admin/views/main.py:473 #, python-format msgid "One or more %(fieldname)s in %(name)s: %(obj)s" msgstr "Ein oder mehrere %(fieldname)s in %(name)s: %(obj)s" -#: contrib/admin/views/main.py:475 +#: contrib/admin/views/main.py:478 #, python-format msgid "One or more %(fieldname)s in %(name)s:" msgstr "Ein oder mehrere %(fieldname)s in %(name)s:" -#: contrib/admin/views/main.py:508 +#: contrib/admin/views/main.py:511 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gelscht." -#: contrib/admin/views/main.py:511 +#: contrib/admin/views/main.py:514 msgid "Are you sure?" msgstr "Sicher? Ganz sicher?" -#: contrib/admin/views/main.py:533 +#: contrib/admin/views/main.py:536 #, python-format msgid "Change history: %s" msgstr "nderungsgeschichte: %s" -#: contrib/admin/views/main.py:565 +#: contrib/admin/views/main.py:570 #, python-format msgid "Select %s" msgstr "%s auswhlen" -#: contrib/admin/views/main.py:565 +#: contrib/admin/views/main.py:570 #, python-format msgid "Select %s to change" msgstr "%s zur nderung auswhlen" -#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 -#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 -#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 +#: contrib/admin/views/main.py:758 +msgid "Database error" +msgstr "Datenbankfehler" + +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "Schlagwort:" + +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "Filter:" + +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "Ansicht:" + +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "Anwendung %r nicht gefunden" + +#: contrib/admin/views/doc.py:171 +#, python-format +msgid "Model %r not found in app %r" +msgstr "Modell %r wurde nicht in Anwendung %r gefunden" + +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%s.%s` object" +msgstr "Das verknpfte `%s.%s` Objekt" + +#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 +#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 +msgid "model:" +msgstr "Modell:" + +#: contrib/admin/views/doc.py:214 +#, python-format +msgid "related `%s.%s` objects" +msgstr "verknpftes `%s.%s` Objekt" + +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "Alle %s" + +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "Anzahl von %s" + +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "Felder am %s Objekt" + +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 +#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 +#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 msgid "Integer" msgstr "Ganzzahl" -#: contrib/admin/views/doc.py:278 +#: contrib/admin/views/doc.py:292 msgid "Boolean (Either True or False)" msgstr "Wahrheitswert (Wahr oder Falsch)" -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 #, python-format msgid "String (up to %(maxlength)s)" msgstr "Zeichenkette (bis zu %(maxlength)s Zeichen)" -#: contrib/admin/views/doc.py:280 +#: contrib/admin/views/doc.py:294 msgid "Comma-separated integers" msgstr "Kommaseparierte Liste von Zahlen" -#: contrib/admin/views/doc.py:281 +#: contrib/admin/views/doc.py:295 msgid "Date (without time)" msgstr "Datum (ohne Zeit)" -#: contrib/admin/views/doc.py:282 +#: contrib/admin/views/doc.py:296 msgid "Date (with time)" msgstr "Datum (mit Zeit)" -#: contrib/admin/views/doc.py:283 +#: contrib/admin/views/doc.py:297 msgid "E-mail address" msgstr "E-mail-Adresse" -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 +#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 +#: contrib/admin/views/doc.py:302 msgid "File path" msgstr "Dateipfad" -#: contrib/admin/views/doc.py:285 +#: contrib/admin/views/doc.py:300 msgid "Decimal number" msgstr "Dezimalzahl" -#: contrib/admin/views/doc.py:291 +#: contrib/admin/views/doc.py:306 msgid "Boolean (Either True, False or None)" msgstr "Wahrheitswert (Wahr, Falsch oder Nichts)" -#: contrib/admin/views/doc.py:292 +#: contrib/admin/views/doc.py:307 msgid "Relation to parent model" msgstr "Beziehung zum bermodell" -#: contrib/admin/views/doc.py:293 +#: contrib/admin/views/doc.py:308 msgid "Phone number" msgstr "Telefonnummer" -#: contrib/admin/views/doc.py:298 +#: contrib/admin/views/doc.py:313 msgid "Text" msgstr "Text" -#: contrib/admin/views/doc.py:299 +#: contrib/admin/views/doc.py:314 msgid "Time" msgstr "Zeit" -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 +#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 msgid "URL" msgstr "URL" -#: contrib/admin/views/doc.py:301 +#: contrib/admin/views/doc.py:316 msgid "U.S. state (two uppercase letters)" msgstr "U.S. Bundesstaat (zwei Grossbuchstaben)" -#: contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:317 msgid "XML text" msgstr "XML Text" +#: contrib/admin/views/doc.py:343 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ist scheinbar kein urlpattern Objekt" + +#: contrib/admin/views/auth.py:28 +msgid "Add user" +msgstr "Benutzer zufgen" + #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 #: contrib/admin/templates/registration/password_change_done.html:3 @@ -650,7 +719,7 @@ msgstr "Dokumentation" #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 #: contrib/admin/templates/registration/password_change_done.html:3 @@ -671,9 +740,10 @@ msgstr "Passwort #: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/500.html:4 #: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/base.html:28 +#: contrib/admin/templates/admin/base.html:30 #: contrib/admin/templates/admin/delete_confirmation.html:6 #: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/invalid_setup.html:4 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 @@ -754,7 +824,12 @@ msgstr "" #: contrib/admin/templates/admin/index.html:17 #, python-format msgid "Models available in the %(name)s application." -msgstr "" +msgstr "Modelle, die in der Anwendung %(name)s vorhanden sind." + +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "%(name)s" #: contrib/admin/templates/admin/index.html:28 #: contrib/admin/templates/admin/change_form.html:15 @@ -790,7 +865,7 @@ msgstr "%(name)s zuf msgid "Have you forgotten your password?" msgstr "Haben Sie ihr Passwort vergessen?" -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 msgid "Welcome," msgstr "Willkommen," @@ -802,22 +877,22 @@ msgstr "L #: contrib/admin/templates/admin/delete_confirmation.html:14 #, python-format msgid "" -"Deleting the %(object_name)s '%(object)s' would result in deleting related " -"objects, but your account doesn't have permission to delete the following " -"types of objects:" +"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 Lschung des %(object_name)s '%(object)s' htte die Lschung von " +"Die Lschung des %(object_name)s '%(escaped_object)s' htte die Lschung von " "abhngigen Daten zur Folge, aber Sie haben nicht die ntigen Rechte um die " "folgenden abhngigen Daten zu lschen:" #: contrib/admin/templates/admin/delete_confirmation.html:21 #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " -"the following related items will be deleted:" +"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, das Sie %(object_name)s \"%(object)s\" lschen wollen? Es " -"werden zustzlich die folgenden abhngigen Daten mit gelscht:" +"Sind Sie sicher, das Sie %(object_name)s \"%(escaped_object)s\" lschen " +"wollen? Es werden zustzlich die folgenden abhngigen Daten mit gelscht:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" @@ -825,13 +900,33 @@ msgstr "Ja, ich bin sicher" #: contrib/admin/templates/admin/filter.html:2 #, python-format -msgid " By %(title)s " -msgstr " Nach %(title)s " +msgid " By %(filter_title)s " +msgstr " Nach %(filter_title)s " #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" msgstr "Los" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s gesamt" + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Zeige alle" + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filter" + #: contrib/admin/templates/admin/change_form.html:21 msgid "View on site" msgstr "Im Web Anzeigen" @@ -866,6 +961,40 @@ msgstr "Sichern und weiter bearbeiten" msgid "Save" msgstr "Sichern" +#: 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 "" +"Irgendetwas ist falsch mit der Datenbankkonfiguration. Bitte sicherstellen, " +"das die richtigen Datenbanktabellen angelegt wurden und bitte sicherstellen, " +"das die Datenbank vom verwendeten Datenbankbenutzer auch lesbar ist." + +#: 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 knnen weitere " +"Optionen fr den Benutzer gendert werden." + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Benutzername" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +msgid "Password" +msgstr "Passwort" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +msgid "Password (again)" +msgstr "Kennwort (wiederholen)" + +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +msgid "Enter the same password as above, for verification." +msgstr "Bitte das gleiche Passwort zur Prfung nochmal eingeben." + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -1093,11 +1222,11 @@ msgstr "" "Hier muss entweder ein absoluter Pfad oder eine komplette URL mit http:// am " "Anfang stehen." -#: contrib/redirects/models.py:12 +#: contrib/redirects/models.py:13 msgid "redirect" msgstr "Umleitung" -#: contrib/redirects/models.py:13 +#: contrib/redirects/models.py:14 msgid "redirects" msgstr "Umleitungen" @@ -1125,11 +1254,11 @@ msgstr "Name der Vorlage" #: contrib/flatpages/models.py:13 msgid "" -"Example: 'flatpages/contact_page'. If this isn't provided, the system will " -"use 'flatpages/default'." +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." msgstr "" -"Beispiel: 'flatpages/contact_page'. Wenn dieses Feld nicht gefllt ist, wird " -"'flatpages/default' als Standard gewhlt." +"Beispiel: 'flatpages/contact_page.html'. Wenn dieses Feld nicht gefllt ist, " +"wird 'flatpages/default.html' als Standard gewhlt." #: contrib/flatpages/models.py:14 msgid "registration required" @@ -1148,80 +1277,108 @@ msgstr "Webseite" msgid "flat pages" msgstr "Webseiten" -#: contrib/auth/models.py:13 contrib/auth/models.py:26 +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "Abgemeldet" + +#: contrib/auth/models.py:38 contrib/auth/models.py:57 msgid "name" msgstr "Name" -#: contrib/auth/models.py:15 +#: contrib/auth/models.py:40 msgid "codename" msgstr "Codename" -#: contrib/auth/models.py:17 +#: contrib/auth/models.py:42 msgid "permission" msgstr "Berechtigung" -#: contrib/auth/models.py:18 contrib/auth/models.py:27 +#: contrib/auth/models.py:43 contrib/auth/models.py:58 msgid "permissions" msgstr "Berechtigungen" -#: contrib/auth/models.py:29 +#: contrib/auth/models.py:60 msgid "group" msgstr "Gruppe" -#: contrib/auth/models.py:30 contrib/auth/models.py:65 +#: contrib/auth/models.py:61 contrib/auth/models.py:100 msgid "groups" msgstr "Gruppen" -#: contrib/auth/models.py:55 +#: contrib/auth/models.py:90 msgid "username" msgstr "Benutzername" -#: contrib/auth/models.py:56 +#: contrib/auth/models.py:90 +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:91 msgid "first name" msgstr "Vorname" -#: contrib/auth/models.py:57 +#: contrib/auth/models.py:92 msgid "last name" msgstr "Nachname" -#: contrib/auth/models.py:58 +#: contrib/auth/models.py:93 msgid "e-mail address" msgstr "eMail-Adresse" -#: contrib/auth/models.py:59 +#: contrib/auth/models.py:94 msgid "password" msgstr "Kennwort" -#: contrib/auth/models.py:59 +#: contrib/auth/models.py:94 msgid "Use '[algo]$[salt]$[hexdigest]'" msgstr "Im Format '[algo]$[salt]$[hexdigest]'" -#: contrib/auth/models.py:60 +#: contrib/auth/models.py:95 msgid "staff status" msgstr "Administrator" -#: contrib/auth/models.py:60 +#: contrib/auth/models.py:95 msgid "Designates whether the user can log into this admin site." msgstr "" "Gibt an, ob der Benutzer sich an der Administrationsseite anmelden kann." -#: contrib/auth/models.py:61 +#: contrib/auth/models.py:96 msgid "active" msgstr "Aktiv" -#: contrib/auth/models.py:62 +#: contrib/auth/models.py:96 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" +"Gibt an, ob der Benutzer sich an der Administrationsseite anmelden kann. " +"Anstelle Benutzer zu lschen, kann das hier auch einfach abgeschaltet werden." + +#: contrib/auth/models.py:97 msgid "superuser status" msgstr "Hauptadmin." -#: contrib/auth/models.py:63 +#: contrib/auth/models.py:97 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Bestimmt, das dieser Benutzer alle Berechtigungen hat, ohne diese einzeln " +"zuweisen zu mssen." + +#: contrib/auth/models.py:98 msgid "last login" msgstr "letzte Anmeldung" -#: contrib/auth/models.py:64 +#: contrib/auth/models.py:99 msgid "date joined" msgstr "Mitglied seit" -#: contrib/auth/models.py:66 +#: contrib/auth/models.py:101 msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." @@ -1229,39 +1386,39 @@ msgstr "" "Zustzlich zu den manuell angelegten Rechten erhlt dieser Benutzer auch " "alle Rechte, die seine zugewiesenen Gruppen haben." -#: contrib/auth/models.py:67 +#: contrib/auth/models.py:102 msgid "user permissions" msgstr "Berechtigungen" -#: contrib/auth/models.py:70 +#: contrib/auth/models.py:105 msgid "user" msgstr "Benutzer" -#: contrib/auth/models.py:71 +#: contrib/auth/models.py:106 msgid "users" msgstr "Benutzer" -#: contrib/auth/models.py:76 +#: contrib/auth/models.py:111 msgid "Personal info" msgstr "Persnliche Infos" -#: contrib/auth/models.py:77 +#: contrib/auth/models.py:112 msgid "Permissions" msgstr "Berechtigungen" -#: contrib/auth/models.py:78 +#: contrib/auth/models.py:113 msgid "Important dates" msgstr "Wichtige Daten" -#: contrib/auth/models.py:79 +#: contrib/auth/models.py:114 msgid "Groups" msgstr "Gruppen" -#: contrib/auth/models.py:219 +#: contrib/auth/models.py:256 msgid "message" msgstr "Mitteilung" -#: contrib/auth/forms.py:30 +#: contrib/auth/forms.py:52 msgid "" "Your Web browser doesn't appear to have cookies enabled. Cookies are " "required for logging in." @@ -1269,35 +1426,55 @@ msgstr "" "Der Webbrowser scheint keine Cookies aktiviert zu haben. Cookies sind fr " "die Anmeldung zwingend notwendig." -#: contrib/contenttypes/models.py:25 +#: contrib/auth/forms.py:61 +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 acount. Are you sure " +"you've registered?" +msgstr "" +"Die Email-Adresse hat keinen Benutzer zugeordnet. Sicher, das die Adresse " +"hier angemeldet ist?" + +#: contrib/auth/forms.py:116 +msgid "The two 'new password' fields didn't match." +msgstr "Die zwei Passwrter sind nicht gleich." + +#: contrib/auth/forms.py:123 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Das alte Passwort war falsch. Bitte neu eingeben." + +#: contrib/contenttypes/models.py:20 msgid "python model class name" msgstr "Python Model-Klassenname" -#: contrib/contenttypes/models.py:28 +#: contrib/contenttypes/models.py:23 msgid "content type" msgstr "Inhaltstyp" -#: contrib/contenttypes/models.py:29 +#: contrib/contenttypes/models.py:24 msgid "content types" msgstr "Inhaltstypen" -#: contrib/sessions/models.py:35 +#: contrib/sessions/models.py:51 msgid "session key" msgstr "Sitzungs-ID" -#: contrib/sessions/models.py:36 +#: contrib/sessions/models.py:52 msgid "session data" msgstr "Sitzungsdaten" -#: contrib/sessions/models.py:37 +#: contrib/sessions/models.py:53 msgid "expire date" msgstr "Verfallsdatum" -#: contrib/sessions/models.py:41 +#: contrib/sessions/models.py:57 msgid "session" msgstr "Sitzung" -#: contrib/sessions/models.py:42 +#: contrib/sessions/models.py:58 msgid "sessions" msgstr "Sitzungen" @@ -1317,18 +1494,6 @@ msgstr "Website" msgid "sites" msgstr "Websites" -#: utils/translation.py:360 -msgid "DATE_FORMAT" -msgstr "j. N Y" - -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "j. N Y, H:i" - -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "H:i" - #: utils/dates.py:6 msgid "Monday" msgstr "Montag" @@ -1517,119 +1682,159 @@ msgid_plural "minutes" msgstr[0] "Minute" msgstr[1] "Minuten" -#: conf/global_settings.py:37 +#: utils/translation/trans_real.py:362 +msgid "DATE_FORMAT" +msgstr "j. N Y" + +#: utils/translation/trans_real.py:363 +msgid "DATETIME_FORMAT" +msgstr "j. N Y, H:i" + +#: utils/translation/trans_real.py:364 +msgid "TIME_FORMAT" +msgstr "H:i" + +#: utils/translation/trans_real.py:380 +msgid "YEAR_MONTH_FORMAT" +msgstr "F Y" + +#: utils/translation/trans_real.py:381 +msgid "MONTH_DAY_FORMAT" +msgstr "j. F" + +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "Arabisch" + +#: conf/global_settings.py:40 msgid "Bengali" msgstr "Bengali" -#: conf/global_settings.py:38 +#: conf/global_settings.py:41 msgid "Czech" msgstr "Tschechisch" -#: conf/global_settings.py:39 +#: conf/global_settings.py:42 msgid "Welsh" msgstr "Walisisch" -#: conf/global_settings.py:40 +#: conf/global_settings.py:43 msgid "Danish" msgstr "Dnisch" -#: conf/global_settings.py:41 +#: conf/global_settings.py:44 msgid "German" msgstr "Deutsch" -#: conf/global_settings.py:42 +#: conf/global_settings.py:45 msgid "Greek" msgstr "Griechisch" -#: conf/global_settings.py:43 +#: conf/global_settings.py:46 msgid "English" msgstr "Englisch" -#: conf/global_settings.py:44 +#: conf/global_settings.py:47 msgid "Spanish" msgstr "Spanisch" -#: conf/global_settings.py:45 +#: conf/global_settings.py:48 +msgid "Argentinean Spanish" +msgstr "Argentinisches Spanisch" + +#: conf/global_settings.py:49 +msgid "Finnish" +msgstr "Finnisch" + +#: conf/global_settings.py:50 msgid "French" msgstr "Franzsisch" -#: conf/global_settings.py:46 +#: conf/global_settings.py:51 msgid "Galician" msgstr "Galicisch" -#: conf/global_settings.py:47 +#: conf/global_settings.py:52 msgid "Hungarian" -msgstr "" +msgstr "Ungarisch" -#: conf/global_settings.py:48 +#: conf/global_settings.py:53 msgid "Hebrew" msgstr "Hebrisch" -#: conf/global_settings.py:49 +#: conf/global_settings.py:54 msgid "Icelandic" msgstr "Islndisch" -#: conf/global_settings.py:50 +#: conf/global_settings.py:55 msgid "Italian" msgstr "Italienisch" -#: conf/global_settings.py:51 +#: conf/global_settings.py:56 msgid "Japanese" msgstr "Japanisch" -#: conf/global_settings.py:52 +#: conf/global_settings.py:57 msgid "Dutch" msgstr "Hollndisch" -#: conf/global_settings.py:53 +#: conf/global_settings.py:58 msgid "Norwegian" msgstr "Norwegisch" -#: conf/global_settings.py:54 +#: conf/global_settings.py:59 msgid "Brazilian" msgstr "Brasilianisch" -#: conf/global_settings.py:55 +#: conf/global_settings.py:60 msgid "Romanian" msgstr "Rumnisch" -#: conf/global_settings.py:56 +#: conf/global_settings.py:61 msgid "Russian" msgstr "Russisch" -#: conf/global_settings.py:57 +#: conf/global_settings.py:62 msgid "Slovak" msgstr "Slowakisch" -#: conf/global_settings.py:58 +#: conf/global_settings.py:63 msgid "Slovenian" msgstr "Slowenisch" -#: conf/global_settings.py:59 +#: conf/global_settings.py:64 msgid "Serbian" msgstr "Serbisch" -#: conf/global_settings.py:60 +#: conf/global_settings.py:65 msgid "Swedish" msgstr "Schwedisch" -#: conf/global_settings.py:61 +#: conf/global_settings.py:66 +msgid "Tamil" +msgstr "Tamilisch" + +#: conf/global_settings.py:67 +msgid "Turkish" +msgstr "Trkisch" + +#: conf/global_settings.py:68 msgid "Ukrainian" msgstr "Ukrainisch" -#: conf/global_settings.py:62 +#: conf/global_settings.py:69 msgid "Simplified Chinese" msgstr "Vereinfachtes Chinesisch" -#: conf/global_settings.py:63 +#: conf/global_settings.py:70 msgid "Traditional Chinese" msgstr "Traditionelles Chinesisch" -#: core/validators.py:60 +#: core/validators.py:63 msgid "This value must contain only letters, numbers and underscores." msgstr "Dieser Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten." -#: core/validators.py:64 +#: core/validators.py:67 msgid "" "This value must contain only letters, numbers, underscores, dashes or " "slashes." @@ -1637,65 +1842,85 @@ msgstr "" "Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Schrgstriche " "enthalten." -#: core/validators.py:72 +#: core/validators.py:71 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "" +"Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Bindestriche " +"enthalten." + +#: core/validators.py:75 msgid "Uppercase letters are not allowed here." msgstr "Grobuchstaben sind hier nicht erlaubt." -#: core/validators.py:76 +#: core/validators.py:79 msgid "Lowercase letters are not allowed here." msgstr "Kleinbuchstaben sind hier nicht erlaubt." -#: core/validators.py:83 +#: core/validators.py:86 msgid "Enter only digits separated by commas." msgstr "Hier sind nur durch Komma getrennte Ziffern erlaubt." -#: core/validators.py:95 +#: core/validators.py:98 msgid "Enter valid e-mail addresses separated by commas." msgstr "Bitte mit Komma getrennte, gltige eMail-Adressen eingeben." -#: core/validators.py:99 +#: core/validators.py:102 msgid "Please enter a valid IP address." msgstr "Bitte eine gltige IP-Adresse eingeben." -#: core/validators.py:103 +#: core/validators.py:106 msgid "Empty values are not allowed here." msgstr "Dieses Feld darf nicht leer sein." -#: core/validators.py:107 +#: core/validators.py:110 msgid "Non-numeric characters aren't allowed here." msgstr "Nichtnumerische Zeichen sind hier nicht erlaubt." -#: core/validators.py:111 +#: core/validators.py:114 msgid "This value can't be comprised solely of digits." msgstr "Dieser Wert darf nicht nur aus Ziffern bestehen." -#: core/validators.py:116 +#: core/validators.py:119 msgid "Enter a whole number." msgstr "Bitte eine ganze Zahl eingeben." -#: core/validators.py:120 +#: core/validators.py:123 msgid "Only alphabetical characters are allowed here." msgstr "Nur alphabetische Zeichen sind hier erlaubt." -#: core/validators.py:124 +#: core/validators.py:138 +msgid "Year must be 1900 or later." +msgstr "Das Jahr muss 1900 oder spter sein." + +#: core/validators.py:142 +#, python-format +msgid "Invalid date: %s." +msgstr "Ungltiges Datum: %s" + +#: core/validators.py:146 db/models/fields/__init__.py:415 msgid "Enter a valid date in YYYY-MM-DD format." msgstr "Bitte ein gltiges Datum im Format JJJJ-MM-TT eingeben." -#: core/validators.py:128 +#: core/validators.py:151 msgid "Enter a valid time in HH:MM format." msgstr "Bitte eine gltige Zeit im Format SS:MM eingeben." -#: core/validators.py:132 db/models/fields/__init__.py:468 +#: core/validators.py:155 db/models/fields/__init__.py:477 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." msgstr "" "Bitte eine gltige Datums- und Zeitangabe im Format JJJJ-MM-TT SS:MM " "eingeben." -#: core/validators.py:136 +#: core/validators.py:160 msgid "Enter a valid e-mail address." msgstr "Bitte eine gltige eMail-Adresse eingeben" -#: core/validators.py:148 +#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Es wurde keine Datei geschickt. Eventuell ist das Formular-Encoding falsch." + +#: core/validators.py:176 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." @@ -1703,27 +1928,27 @@ msgstr "" "Bitte ein Bild hochladen. Die Datei, die hochgeladen wurde, ist kein Bild " "oder ist defekt." -#: core/validators.py:155 +#: core/validators.py:183 #, python-format msgid "The URL %s does not point to a valid image." msgstr "Die URL %s zeigt nicht auf ein gltiges Bild." -#: core/validators.py:159 +#: core/validators.py:187 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." msgstr "" "Telefonnummern mssen im Format XXX-XXX-XXXX sein. \"%s\" ist ungltig." -#: core/validators.py:167 +#: core/validators.py:195 #, python-format msgid "The URL %s does not point to a valid QuickTime video." msgstr "Die URL %s zeigt nicht auf ein gltiges QuickTime video." -#: core/validators.py:171 +#: core/validators.py:199 msgid "A valid URL is required." msgstr "Eine gltige URL ist hier verlangt." -#: core/validators.py:185 +#: core/validators.py:213 #, python-format msgid "" "Valid HTML is required. Specific errors are:\n" @@ -1732,71 +1957,71 @@ msgstr "" "Bitte gltiges HTML eingeben. Fehler sind:\n" "%s" -#: core/validators.py:192 +#: core/validators.py:220 #, python-format msgid "Badly formed XML: %s" msgstr "Ungltiges XML: %s" -#: core/validators.py:202 +#: core/validators.py:230 #, python-format msgid "Invalid URL: %s" msgstr "Ungltige URL: %s" -#: core/validators.py:206 core/validators.py:208 +#: core/validators.py:234 core/validators.py:236 #, python-format msgid "The URL %s is a broken link." msgstr "Die URL %s funktioniert nicht." -#: core/validators.py:214 +#: core/validators.py:242 msgid "Enter a valid U.S. state abbreviation." msgstr "Bitte eine gltige Abkrzung fr einen US-Staat eingeben." -#: core/validators.py:229 +#: core/validators.py:256 #, python-format msgid "Watch your mouth! The word %s is not allowed here." msgid_plural "Watch your mouth! The words %s are not allowed here." msgstr[0] "Keine Schimpfworte! Das Wort %s ist hier nicht gern gesehen!" msgstr[1] "Keine Schimpfworte! Die Wrter %s sind hier nicht gern gesehen!" -#: core/validators.py:236 +#: core/validators.py:263 #, python-format msgid "This field must match the '%s' field." msgstr "Dieses Feld muss zum Feld '%s' passen." -#: core/validators.py:255 +#: core/validators.py:282 msgid "Please enter something for at least one field." msgstr "Bitte mindestens eines der Felder ausfllen." -#: core/validators.py:264 core/validators.py:275 +#: core/validators.py:291 core/validators.py:302 msgid "Please enter both fields or leave them both empty." msgstr "Bitte entweder beide Felder ausfllen, oder beide leer lassen." -#: core/validators.py:282 +#: core/validators.py:309 #, python-format msgid "This field must be given if %(field)s is %(value)s" msgstr "" "Dieses Feld muss gefllt sein, wenn Feld %(field)s den Wert %(value)s hat." -#: core/validators.py:294 +#: core/validators.py:321 #, python-format msgid "This field must be given if %(field)s is not %(value)s" msgstr "" "Dieses Feld muss gefllt sein, wenn Feld %(field)s nicht %(value)s ist." -#: core/validators.py:313 +#: core/validators.py:340 msgid "Duplicate values are not allowed." msgstr "Doppelte Werte sind hier nicht erlaubt." -#: core/validators.py:336 +#: core/validators.py:363 #, python-format msgid "This value must be a power of %s." msgstr "Dieser Wert muss eine Potenz von %s sein." -#: core/validators.py:347 +#: core/validators.py:374 msgid "Please enter a valid decimal number." msgstr "Bitte eine gltige Dezimalzahl eingeben." -#: core/validators.py:349 +#: core/validators.py:378 #, python-format msgid "Please enter a valid decimal number with at most %s total digit." msgid_plural "" @@ -1804,7 +2029,16 @@ msgid_plural "" msgstr[0] "Bitte eine gltige Dezimalzahl mit maximal %s Ziffer eingeben." msgstr[1] "Bitte eine gltige Dezimalzahl mit maximal %s Ziffern eingeben." -#: core/validators.py:352 +#: core/validators.py:381 +#, 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 gltige Dezimalzahl mit maximal %s Ziffer eingeben." +msgstr[1] "Bitte eine gltige Dezimalzahl mit maximal %s Ziffern eingeben." + +#: core/validators.py:384 #, python-format msgid "Please enter a valid decimal number with at most %s decimal place." msgid_plural "" @@ -1814,39 +2048,39 @@ msgstr[0] "" msgstr[1] "" "Bitte eine gltige Dezimalzahl mit maximal %s Dezimalstellen eingeben." -#: core/validators.py:362 +#: core/validators.py:394 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." msgstr "" "Bitte sicherstellen, da die hochgeladene Datei mindestens %s Bytes gross " "ist." -#: core/validators.py:363 +#: core/validators.py:395 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." msgstr "" "Bitte sicherstellen, da die hochgeladene Datei maximal %s Bytes gross ist." -#: core/validators.py:376 +#: core/validators.py:412 msgid "The format for this field is wrong." msgstr "Das Format fr dieses Feld ist falsch." -#: core/validators.py:391 +#: core/validators.py:427 msgid "This field is invalid." msgstr "Dieses Feld ist ungltig." -#: core/validators.py:426 +#: core/validators.py:463 #, python-format msgid "Could not retrieve anything from %s." msgstr "Konnte nichts von %s empfangen." -#: core/validators.py:429 +#: core/validators.py:466 #, python-format 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:462 +#: core/validators.py:499 #, python-format msgid "" "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " @@ -1855,7 +2089,7 @@ msgstr "" "Bitte das ungeschlossene %(tag)s Tag in Zeile %(line)s schlieen. Die Zeile " "beginnt mit \"%(start)s\"." -#: core/validators.py:466 +#: core/validators.py:503 #, python-format msgid "" "Some text starting on line %(line)s is not allowed in that context. (Line " @@ -1864,7 +2098,7 @@ msgstr "" "In Zeile %(line)s ist Text, der nicht in dem Kontext erlaubt ist. Die Zeile " "beginnt mit \"%(start)s\"." -#: core/validators.py:471 +#: core/validators.py:508 #, python-format msgid "" "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" @@ -1873,7 +2107,7 @@ msgstr "" "Das Attribute %(attr)s in Zeile %(line)s ist ungltig. Die Zeile beginnt mit " "\"%(start)s\"." -#: core/validators.py:476 +#: core/validators.py:513 #, python-format msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" @@ -1882,7 +2116,7 @@ msgstr "" "<%(tag)s> in Zeile %(line)s ist ungltig. Die Zeile beginnt mit \"%(start)s" "\"." -#: core/validators.py:480 +#: core/validators.py:517 #, python-format msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " @@ -1891,7 +2125,7 @@ msgstr "" "Ein Tag in Zeile %(line)s hat eines oder mehrere Pflichtattribute nicht. Die " "Zeile beginnt mit \"%(start)s\"." -#: core/validators.py:485 +#: core/validators.py:522 #, python-format msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " @@ -1900,6 +2134,21 @@ msgstr "" "Das Attribut %(attr)s in Zeile %(line)s hat einen ungltigen Wert. Die Zeile " "beginnt mit \"%(start)s\"." +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "%(verbose_name)s wurde erfolgreich angelegt." + +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "%(verbose_name)s wurde erfolgreich aktualisiert." + +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "%(verbose_name)s wurde gelscht" + #: db/models/manipulators.py:302 #, python-format msgid "%(object)s with this %(type)s already exists for the given %(field)s." @@ -1913,44 +2162,44 @@ msgid "%(optname)s with this %(fieldname)s already exists." msgstr "Ein '%(optname)s' mit diesem '%(fieldname)s' existiert bereits." #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 -#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 +#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562 #: forms/__init__.py:346 msgid "This field is required." msgstr "Dieses Feld ist zwingend." -#: db/models/fields/__init__.py:337 +#: db/models/fields/__init__.py:340 msgid "This value must be an integer." msgstr "Dieser Wert muss eine Ganzzahl sein." -#: db/models/fields/__init__.py:369 +#: db/models/fields/__init__.py:372 msgid "This value must be either True or False." msgstr "Dieser Wert muss wahr oder falsch sein." -#: db/models/fields/__init__.py:385 +#: db/models/fields/__init__.py:388 msgid "This field cannot be null." msgstr "Dieses Feld darf nicht leer sein." -#: db/models/fields/__init__.py:562 +#: db/models/fields/__init__.py:571 msgid "Enter a valid filename." msgstr "Bitte einen gltigen Dateinamen eingeben" -#: db/models/fields/related.py:43 +#: db/models/fields/related.py:51 #, python-format msgid "Please enter a valid %s." msgstr "Bitte ein gltiges '%s' eingeben." -#: db/models/fields/related.py:579 +#: db/models/fields/related.py:618 msgid "Separate multiple IDs with commas." msgstr "Mehrere IDs knnen mit Komma getrennt werden." -#: db/models/fields/related.py:581 +#: db/models/fields/related.py:620 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 gedrckt halten." -#: db/models/fields/related.py:625 +#: db/models/fields/related.py:664 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." msgid_plural "" @@ -1960,39 +2209,39 @@ msgstr[0] "" msgstr[1] "" "Bitte gltige IDs fr %(self)s eingeben. Die Werte %(value)r sind ungltig." -#: forms/__init__.py:380 +#: forms/__init__.py:381 #, python-format msgid "Ensure your text is less than %s character." msgid_plural "Ensure your text is less than %s characters." msgstr[0] "Bitte sicherstellen, das der Text weniger als %s Zeichen hat." msgstr[1] "Bitte sicherstellen, das der Text weniger als %s Zeichen hat." -#: forms/__init__.py:385 +#: forms/__init__.py:386 msgid "Line breaks are not allowed here." msgstr "Zeilenumbrche sind hier nicht erlaubt." -#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 +#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599 #, python-format msgid "Select a valid choice; '%(data)s' is not in %(choices)s." msgstr "" "Bitte eine gltige Auswahl treffen; '%(data)s' ist nicht in %(choices)s." -#: forms/__init__.py:645 +#: forms/__init__.py:663 msgid "The submitted file is empty." msgstr "Die ausgewhlte Datei ist leer." -#: forms/__init__.py:699 +#: forms/__init__.py:719 msgid "Enter a whole number between -32,768 and 32,767." msgstr "Bitte eine ganze Zahl zwischen -32.768 und 32.767 eingeben." -#: forms/__init__.py:708 +#: forms/__init__.py:729 msgid "Enter a positive number." msgstr "Bitte eine ganze, positive Zahl eingeben." -#: forms/__init__.py:717 +#: forms/__init__.py:739 msgid "Enter a whole number between 0 and 32,767." msgstr "Bitte eine ganze Zahl zwischen 0 und 32.767 eingeben." -#: template/defaultfilters.py:379 +#: template/defaultfilters.py:401 msgid "yes,no,maybe" msgstr "Ja,Nein,Vielleicht" diff --git a/django/conf/locale/en/LC_MESSAGES/django.mo b/django/conf/locale/en/LC_MESSAGES/django.mo index 0a4947bfc1..6c4dbe4b4e 100644 Binary files a/django/conf/locale/en/LC_MESSAGES/django.mo and b/django/conf/locale/en/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/en/LC_MESSAGES/django.po b/django/conf/locale/en/LC_MESSAGES/django.po index 625c3b04f1..feba39f7cd 100644 --- a/django/conf/locale/en/LC_MESSAGES/django.po +++ b/django/conf/locale/en/LC_MESSAGES/django.po @@ -3,12 +3,11 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-05-16 10:10+0200\n" +"POT-Creation-Date: 2006-09-25 15:43+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -73,7 +72,7 @@ msgstr "" msgid "is public" msgstr "" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 msgid "IP address" msgstr "" @@ -200,12 +199,12 @@ msgstr "" msgid "No voting for yourself" msgstr "" -#: contrib/comments/views/comments.py:28 +#: contrib/comments/views/comments.py:27 msgid "" "This rating is required because you've entered at least one other rating." msgstr "" -#: contrib/comments/views/comments.py:112 +#: contrib/comments/views/comments.py:111 #, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " @@ -220,7 +219,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: contrib/comments/views/comments.py:117 +#: contrib/comments/views/comments.py:116 #, python-format msgid "" "This comment was posted by a sketchy user:\n" @@ -228,22 +227,22 @@ msgid "" "%(text)s" msgstr "" -#: contrib/comments/views/comments.py:189 +#: contrib/comments/views/comments.py:188 #: contrib/comments/views/comments.py:280 msgid "Only POSTs are allowed" msgstr "" -#: contrib/comments/views/comments.py:193 +#: contrib/comments/views/comments.py:192 #: contrib/comments/views/comments.py:284 msgid "One or more of the required fields wasn't submitted" msgstr "" -#: contrib/comments/views/comments.py:197 +#: contrib/comments/views/comments.py:196 #: contrib/comments/views/comments.py:286 msgid "Somebody tampered with the comment form (security violation)" msgstr "" -#: contrib/comments/views/comments.py:207 +#: contrib/comments/views/comments.py:206 #: contrib/comments/views/comments.py:292 msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " @@ -262,18 +261,9 @@ msgid "Username:" msgstr "" #: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "" - -#: contrib/comments/templates/comments/form.html:6 -msgid "Forgotten your password?" -msgstr "" - -#: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 #: contrib/admin/templates/registration/password_change_done.html:3 @@ -291,6 +281,15 @@ msgstr "" msgid "Log out" msgstr "" +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "" + #: contrib/comments/templates/comments/form.html:12 msgid "Ratings" msgstr "" @@ -309,13 +308,13 @@ msgstr "" msgid "Post a photo" msgstr "" -#: contrib/comments/templates/comments/form.html:27 +#: contrib/comments/templates/comments/form.html:28 #: contrib/comments/templates/comments/freeform.html:5 msgid "Comment:" msgstr "" -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 msgid "Preview comment" msgstr "" @@ -331,7 +330,7 @@ msgid "" msgstr "" #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 msgid "All" msgstr "" @@ -395,214 +394,283 @@ msgstr "" msgid "log entries" msgstr "" -#: contrib/admin/templatetags/admin_list.py:228 +#: contrib/admin/templatetags/admin_list.py:230 msgid "All dates" msgstr "" -#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 -#: contrib/auth/forms.py:41 +#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59 msgid "" "Please enter a correct username and password. Note that both fields are case-" "sensitive." msgstr "" -#: contrib/admin/views/decorators.py:23 +#: contrib/admin/views/decorators.py:24 #: contrib/admin/templates/admin/login.html:25 msgid "Log in" msgstr "" -#: contrib/admin/views/decorators.py:61 +#: contrib/admin/views/decorators.py:62 msgid "" "Please log in again, because your session has expired. Don't worry: Your " "submission has been saved." msgstr "" -#: contrib/admin/views/decorators.py:68 +#: contrib/admin/views/decorators.py:69 msgid "" "Looks like your browser isn't configured to accept cookies. Please enable " "cookies, reload this page, and try again." msgstr "" -#: contrib/admin/views/decorators.py:82 +#: contrib/admin/views/decorators.py:83 msgid "Usernames cannot contain the '@' character." msgstr "" -#: contrib/admin/views/decorators.py:84 +#: contrib/admin/views/decorators.py:85 #, python-format msgid "Your e-mail address is not your username. Try '%s' instead." msgstr "" -#: contrib/admin/views/main.py:226 +#: contrib/admin/views/main.py:223 msgid "Site administration" msgstr "" -#: contrib/admin/views/main.py:260 +#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." msgstr "" -#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 +#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347 +#: contrib/admin/views/auth.py:22 msgid "You may edit it again below." msgstr "" -#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 #, python-format msgid "You may add another %s below." msgstr "" -#: contrib/admin/views/main.py:290 +#: contrib/admin/views/main.py:289 #, python-format msgid "Add %s" msgstr "" -#: contrib/admin/views/main.py:336 +#: contrib/admin/views/main.py:335 #, python-format msgid "Added %s." msgstr "" -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 +#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:339 msgid "and" msgstr "" -#: contrib/admin/views/main.py:338 +#: contrib/admin/views/main.py:337 #, python-format msgid "Changed %s." msgstr "" -#: contrib/admin/views/main.py:340 +#: contrib/admin/views/main.py:339 #, python-format msgid "Deleted %s." msgstr "" -#: contrib/admin/views/main.py:343 +#: contrib/admin/views/main.py:342 msgid "No fields changed." msgstr "" -#: contrib/admin/views/main.py:346 +#: contrib/admin/views/main.py:345 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." msgstr "" -#: contrib/admin/views/main.py:354 +#: contrib/admin/views/main.py:353 #, python-format msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "" -#: contrib/admin/views/main.py:392 +#: contrib/admin/views/main.py:391 #, python-format msgid "Change %s" msgstr "" -#: contrib/admin/views/main.py:470 +#: contrib/admin/views/main.py:473 #, python-format msgid "One or more %(fieldname)s in %(name)s: %(obj)s" msgstr "" -#: contrib/admin/views/main.py:475 +#: contrib/admin/views/main.py:478 #, python-format msgid "One or more %(fieldname)s in %(name)s:" msgstr "" -#: contrib/admin/views/main.py:508 +#: contrib/admin/views/main.py:511 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." msgstr "" -#: contrib/admin/views/main.py:511 +#: contrib/admin/views/main.py:514 msgid "Are you sure?" msgstr "" -#: contrib/admin/views/main.py:533 +#: contrib/admin/views/main.py:536 #, python-format msgid "Change history: %s" msgstr "" -#: contrib/admin/views/main.py:565 +#: contrib/admin/views/main.py:570 #, python-format msgid "Select %s" msgstr "" -#: contrib/admin/views/main.py:565 +#: contrib/admin/views/main.py:570 #, python-format msgid "Select %s to change" msgstr "" -#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 -#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 -#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 +#: contrib/admin/views/main.py:758 +msgid "Database error" +msgstr "" + +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "" + +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "" + +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "" + +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "" + +#: contrib/admin/views/doc.py:171 +#, python-format +msgid "Model %r not found in app %r" +msgstr "" + +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%s.%s` object" +msgstr "" + +#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 +#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 +msgid "model:" +msgstr "" + +#: contrib/admin/views/doc.py:214 +#, python-format +msgid "related `%s.%s` objects" +msgstr "" + +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "" + +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "" + +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "" + +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 +#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 +#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 msgid "Integer" msgstr "" -#: contrib/admin/views/doc.py:278 +#: contrib/admin/views/doc.py:292 msgid "Boolean (Either True or False)" msgstr "" -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 #, python-format msgid "String (up to %(maxlength)s)" msgstr "" -#: contrib/admin/views/doc.py:280 +#: contrib/admin/views/doc.py:294 msgid "Comma-separated integers" msgstr "" -#: contrib/admin/views/doc.py:281 +#: contrib/admin/views/doc.py:295 msgid "Date (without time)" msgstr "" -#: contrib/admin/views/doc.py:282 +#: contrib/admin/views/doc.py:296 msgid "Date (with time)" msgstr "" -#: contrib/admin/views/doc.py:283 +#: contrib/admin/views/doc.py:297 msgid "E-mail address" msgstr "" -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 +#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 +#: contrib/admin/views/doc.py:302 msgid "File path" msgstr "" -#: contrib/admin/views/doc.py:285 +#: contrib/admin/views/doc.py:300 msgid "Decimal number" msgstr "" -#: contrib/admin/views/doc.py:291 +#: contrib/admin/views/doc.py:306 msgid "Boolean (Either True, False or None)" msgstr "" -#: contrib/admin/views/doc.py:292 +#: contrib/admin/views/doc.py:307 msgid "Relation to parent model" msgstr "" -#: contrib/admin/views/doc.py:293 +#: contrib/admin/views/doc.py:308 msgid "Phone number" msgstr "" -#: contrib/admin/views/doc.py:298 +#: contrib/admin/views/doc.py:313 msgid "Text" msgstr "" -#: contrib/admin/views/doc.py:299 +#: contrib/admin/views/doc.py:314 msgid "Time" msgstr "" -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 +#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 msgid "URL" msgstr "" -#: contrib/admin/views/doc.py:301 +#: contrib/admin/views/doc.py:316 msgid "U.S. state (two uppercase letters)" msgstr "" -#: contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:317 msgid "XML text" msgstr "" +#: contrib/admin/views/doc.py:343 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" + +#: contrib/admin/views/auth.py:28 +msgid "Add user" +msgstr "" + #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 #: contrib/admin/templates/registration/password_change_done.html:3 @@ -613,7 +681,7 @@ msgstr "" #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 #: contrib/admin/templates/registration/password_change_done.html:3 @@ -634,9 +702,10 @@ msgstr "" #: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/500.html:4 #: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/base.html:28 +#: contrib/admin/templates/admin/base.html:30 #: contrib/admin/templates/admin/delete_confirmation.html:6 #: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/invalid_setup.html:4 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 @@ -713,6 +782,11 @@ msgstr "" msgid "Models available in the %(name)s application." msgstr "" +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "" + #: contrib/admin/templates/admin/index.html:28 #: contrib/admin/templates/admin/change_form.html:15 msgid "Add" @@ -747,7 +821,7 @@ msgstr "" msgid "Have you forgotten your password?" msgstr "" -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 msgid "Welcome," msgstr "" @@ -759,16 +833,16 @@ msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:14 #, python-format msgid "" -"Deleting the %(object_name)s '%(object)s' would result in deleting related " -"objects, but your account doesn't have permission to delete the following " -"types of objects:" +"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 "" #: contrib/admin/templates/admin/delete_confirmation.html:21 #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " -"the following related items will be deleted:" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:26 @@ -777,13 +851,33 @@ msgstr "" #: contrib/admin/templates/admin/filter.html:2 #, python-format -msgid " By %(title)s " +msgid " By %(filter_title)s " msgstr "" #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" msgstr "" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "" + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "" + #: contrib/admin/templates/admin/change_form.html:21 msgid "View on site" msgstr "" @@ -818,6 +912,35 @@ msgstr "" msgid "Save" msgstr "" +#: 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 "" + +#: 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 "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +msgid "Password" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +msgid "Password (again)" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +msgid "Enter the same password as above, for verification." +msgstr "" + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -1018,11 +1141,11 @@ msgid "" "'http://'." msgstr "" -#: contrib/redirects/models.py:12 +#: contrib/redirects/models.py:13 msgid "redirect" msgstr "" -#: contrib/redirects/models.py:13 +#: contrib/redirects/models.py:14 msgid "redirects" msgstr "" @@ -1049,8 +1172,8 @@ msgstr "" #: contrib/flatpages/models.py:13 msgid "" -"Example: 'flatpages/contact_page'. If this isn't provided, the system will " -"use 'flatpages/default'." +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." msgstr "" #: contrib/flatpages/models.py:14 @@ -1069,151 +1192,177 @@ msgstr "" msgid "flat pages" msgstr "" -#: contrib/auth/models.py:13 contrib/auth/models.py:26 +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "" + +#: contrib/auth/models.py:38 contrib/auth/models.py:57 msgid "name" msgstr "" -#: contrib/auth/models.py:15 +#: contrib/auth/models.py:40 msgid "codename" msgstr "" -#: contrib/auth/models.py:17 +#: contrib/auth/models.py:42 msgid "permission" msgstr "" -#: contrib/auth/models.py:18 contrib/auth/models.py:27 +#: contrib/auth/models.py:43 contrib/auth/models.py:58 msgid "permissions" msgstr "" -#: contrib/auth/models.py:29 +#: contrib/auth/models.py:60 msgid "group" msgstr "" -#: contrib/auth/models.py:30 contrib/auth/models.py:65 +#: contrib/auth/models.py:61 contrib/auth/models.py:100 msgid "groups" msgstr "" -#: contrib/auth/models.py:55 +#: contrib/auth/models.py:90 msgid "username" msgstr "" -#: contrib/auth/models.py:56 +#: contrib/auth/models.py:90 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" + +#: contrib/auth/models.py:91 msgid "first name" msgstr "" -#: contrib/auth/models.py:57 +#: contrib/auth/models.py:92 msgid "last name" msgstr "" -#: contrib/auth/models.py:58 +#: contrib/auth/models.py:93 msgid "e-mail address" msgstr "" -#: contrib/auth/models.py:59 +#: contrib/auth/models.py:94 msgid "password" msgstr "" -#: contrib/auth/models.py:59 +#: contrib/auth/models.py:94 msgid "Use '[algo]$[salt]$[hexdigest]'" msgstr "" -#: contrib/auth/models.py:60 +#: contrib/auth/models.py:95 msgid "staff status" msgstr "" -#: contrib/auth/models.py:60 +#: contrib/auth/models.py:95 msgid "Designates whether the user can log into this admin site." msgstr "" -#: contrib/auth/models.py:61 +#: contrib/auth/models.py:96 msgid "active" msgstr "" -#: contrib/auth/models.py:62 +#: contrib/auth/models.py:96 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" + +#: contrib/auth/models.py:97 msgid "superuser status" msgstr "" -#: contrib/auth/models.py:63 +#: contrib/auth/models.py:97 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +#: contrib/auth/models.py:98 msgid "last login" msgstr "" -#: contrib/auth/models.py:64 +#: contrib/auth/models.py:99 msgid "date joined" msgstr "" -#: contrib/auth/models.py:66 +#: contrib/auth/models.py:101 msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." msgstr "" -#: contrib/auth/models.py:67 +#: contrib/auth/models.py:102 msgid "user permissions" msgstr "" -#: contrib/auth/models.py:70 +#: contrib/auth/models.py:105 msgid "user" msgstr "" -#: contrib/auth/models.py:71 +#: contrib/auth/models.py:106 msgid "users" msgstr "" -#: contrib/auth/models.py:76 +#: contrib/auth/models.py:111 msgid "Personal info" msgstr "" -#: contrib/auth/models.py:77 +#: contrib/auth/models.py:112 msgid "Permissions" msgstr "" -#: contrib/auth/models.py:78 +#: contrib/auth/models.py:113 msgid "Important dates" msgstr "" -#: contrib/auth/models.py:79 +#: contrib/auth/models.py:114 msgid "Groups" msgstr "" -#: contrib/auth/models.py:219 +#: contrib/auth/models.py:256 msgid "message" msgstr "" -#: contrib/auth/forms.py:30 +#: contrib/auth/forms.py:52 msgid "" "Your Web browser doesn't appear to have cookies enabled. Cookies are " "required for logging in." msgstr "" -#: contrib/contenttypes/models.py:25 +#: contrib/auth/forms.py:61 +msgid "This account is inactive." +msgstr "" + +#: contrib/contenttypes/models.py:20 msgid "python model class name" msgstr "" -#: contrib/contenttypes/models.py:28 +#: contrib/contenttypes/models.py:23 msgid "content type" msgstr "" -#: contrib/contenttypes/models.py:29 +#: contrib/contenttypes/models.py:24 msgid "content types" msgstr "" -#: contrib/sessions/models.py:35 +#: contrib/sessions/models.py:51 msgid "session key" msgstr "" -#: contrib/sessions/models.py:36 +#: contrib/sessions/models.py:52 msgid "session data" msgstr "" -#: contrib/sessions/models.py:37 +#: contrib/sessions/models.py:53 msgid "expire date" msgstr "" -#: contrib/sessions/models.py:41 +#: contrib/sessions/models.py:57 msgid "session" msgstr "" -#: contrib/sessions/models.py:42 +#: contrib/sessions/models.py:58 msgid "sessions" msgstr "" @@ -1233,18 +1382,6 @@ msgstr "" msgid "sites" msgstr "" -#: utils/translation.py:360 -msgid "DATE_FORMAT" -msgstr "N j, Y" - -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "N j, Y, P" - -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "P" - #: utils/dates.py:6 msgid "Monday" msgstr "" @@ -1433,275 +1570,332 @@ msgid_plural "minutes" msgstr[0] "" msgstr[1] "" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "" +#: utils/translation/trans_real.py:362 +msgid "DATE_FORMAT" +msgstr "N j, Y" -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "" +#: utils/translation/trans_real.py:363 +msgid "DATETIME_FORMAT" +msgstr "N j, Y, P" + +#: utils/translation/trans_real.py:364 +msgid "TIME_FORMAT" +msgstr "P" + +#: utils/translation/trans_real.py:380 +msgid "YEAR_MONTH_FORMAT" +msgstr "F Y" + +#: utils/translation/trans_real.py:381 +msgid "MONTH_DAY_FORMAT" +msgstr "F j" #: conf/global_settings.py:39 -msgid "Welsh" +msgid "Arabic" msgstr "" #: conf/global_settings.py:40 -msgid "Danish" +msgid "Bengali" msgstr "" #: conf/global_settings.py:41 -msgid "German" +msgid "Czech" msgstr "" #: conf/global_settings.py:42 -msgid "Greek" +msgid "Welsh" msgstr "" #: conf/global_settings.py:43 -msgid "English" +msgid "Danish" msgstr "" #: conf/global_settings.py:44 -msgid "Spanish" +msgid "German" msgstr "" #: conf/global_settings.py:45 -msgid "French" +msgid "Greek" msgstr "" #: conf/global_settings.py:46 -msgid "Galician" +msgid "English" msgstr "" #: conf/global_settings.py:47 -msgid "Hungarian" +msgid "Spanish" msgstr "" #: conf/global_settings.py:48 -msgid "Hebrew" +msgid "Argentinean Spanish" msgstr "" #: conf/global_settings.py:49 -msgid "Icelandic" +msgid "Finnish" msgstr "" #: conf/global_settings.py:50 -msgid "Italian" +msgid "French" msgstr "" #: conf/global_settings.py:51 -msgid "Japanese" +msgid "Galician" msgstr "" #: conf/global_settings.py:52 -msgid "Dutch" +msgid "Hungarian" msgstr "" #: conf/global_settings.py:53 -msgid "Norwegian" +msgid "Hebrew" msgstr "" #: conf/global_settings.py:54 -msgid "Brazilian" +msgid "Icelandic" msgstr "" #: conf/global_settings.py:55 -msgid "Romanian" +msgid "Italian" msgstr "" #: conf/global_settings.py:56 -msgid "Russian" +msgid "Japanese" msgstr "" #: conf/global_settings.py:57 -msgid "Slovak" +msgid "Dutch" msgstr "" #: conf/global_settings.py:58 -msgid "Slovenian" +msgid "Norwegian" msgstr "" #: conf/global_settings.py:59 -msgid "Serbian" +msgid "Brazilian" msgstr "" #: conf/global_settings.py:60 -msgid "Swedish" +msgid "Romanian" msgstr "" #: conf/global_settings.py:61 -msgid "Ukrainian" +msgid "Russian" msgstr "" #: conf/global_settings.py:62 -msgid "Simplified Chinese" +msgid "Slovak" msgstr "" #: conf/global_settings.py:63 +msgid "Slovenian" +msgstr "" + +#: conf/global_settings.py:64 +msgid "Serbian" +msgstr "" + +#: conf/global_settings.py:65 +msgid "Swedish" +msgstr "" + +#: conf/global_settings.py:66 +msgid "Tamil" +msgstr "" + +#: conf/global_settings.py:67 +msgid "Turkish" +msgstr "" + +#: conf/global_settings.py:68 +msgid "Ukrainian" +msgstr "" + +#: conf/global_settings.py:69 +msgid "Simplified Chinese" +msgstr "" + +#: conf/global_settings.py:70 msgid "Traditional Chinese" msgstr "" -#: core/validators.py:60 +#: core/validators.py:63 msgid "This value must contain only letters, numbers and underscores." msgstr "" -#: core/validators.py:64 +#: core/validators.py:67 msgid "" "This value must contain only letters, numbers, underscores, dashes or " "slashes." msgstr "" -#: core/validators.py:72 +#: core/validators.py:71 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "" + +#: core/validators.py:75 msgid "Uppercase letters are not allowed here." msgstr "" -#: core/validators.py:76 +#: core/validators.py:79 msgid "Lowercase letters are not allowed here." msgstr "" -#: core/validators.py:83 +#: core/validators.py:86 msgid "Enter only digits separated by commas." msgstr "" -#: core/validators.py:95 +#: core/validators.py:98 msgid "Enter valid e-mail addresses separated by commas." msgstr "" -#: core/validators.py:99 +#: core/validators.py:102 msgid "Please enter a valid IP address." msgstr "" -#: core/validators.py:103 +#: core/validators.py:106 msgid "Empty values are not allowed here." msgstr "" -#: core/validators.py:107 +#: core/validators.py:110 msgid "Non-numeric characters aren't allowed here." msgstr "" -#: core/validators.py:111 +#: core/validators.py:114 msgid "This value can't be comprised solely of digits." msgstr "" -#: core/validators.py:116 +#: core/validators.py:119 msgid "Enter a whole number." msgstr "" -#: core/validators.py:120 +#: core/validators.py:123 msgid "Only alphabetical characters are allowed here." msgstr "" -#: core/validators.py:124 +#: core/validators.py:138 +msgid "Year must be 1900 or later." +msgstr "" + +#: core/validators.py:142 +#, python-format +msgid "Invalid date: %s." +msgstr "" + +#: core/validators.py:146 db/models/fields/__init__.py:415 msgid "Enter a valid date in YYYY-MM-DD format." msgstr "" -#: core/validators.py:128 +#: core/validators.py:151 msgid "Enter a valid time in HH:MM format." msgstr "" -#: core/validators.py:132 db/models/fields/__init__.py:468 +#: core/validators.py:155 db/models/fields/__init__.py:477 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." msgstr "" -#: core/validators.py:136 +#: core/validators.py:160 msgid "Enter a valid e-mail address." msgstr "" -#: core/validators.py:148 +#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +#: core/validators.py:176 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "" -#: core/validators.py:155 +#: core/validators.py:183 #, python-format msgid "The URL %s does not point to a valid image." msgstr "" -#: core/validators.py:159 +#: core/validators.py:187 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." msgstr "" -#: core/validators.py:167 +#: core/validators.py:195 #, python-format msgid "The URL %s does not point to a valid QuickTime video." msgstr "" -#: core/validators.py:171 +#: core/validators.py:199 msgid "A valid URL is required." msgstr "" -#: core/validators.py:185 +#: core/validators.py:213 #, python-format msgid "" "Valid HTML is required. Specific errors are:\n" "%s" msgstr "" -#: core/validators.py:192 +#: core/validators.py:220 #, python-format msgid "Badly formed XML: %s" msgstr "" -#: core/validators.py:202 +#: core/validators.py:230 #, python-format msgid "Invalid URL: %s" msgstr "" -#: core/validators.py:206 core/validators.py:208 +#: core/validators.py:234 core/validators.py:236 #, python-format msgid "The URL %s is a broken link." msgstr "" -#: core/validators.py:214 +#: core/validators.py:242 msgid "Enter a valid U.S. state abbreviation." msgstr "" -#: core/validators.py:229 +#: core/validators.py:256 #, python-format msgid "Watch your mouth! The word %s is not allowed here." msgid_plural "Watch your mouth! The words %s are not allowed here." msgstr[0] "" msgstr[1] "" -#: core/validators.py:236 +#: core/validators.py:263 #, python-format msgid "This field must match the '%s' field." msgstr "" -#: core/validators.py:255 +#: core/validators.py:282 msgid "Please enter something for at least one field." msgstr "" -#: core/validators.py:264 core/validators.py:275 +#: core/validators.py:291 core/validators.py:302 msgid "Please enter both fields or leave them both empty." msgstr "" -#: core/validators.py:282 +#: core/validators.py:309 #, python-format msgid "This field must be given if %(field)s is %(value)s" msgstr "" -#: core/validators.py:294 +#: core/validators.py:321 #, python-format msgid "This field must be given if %(field)s is not %(value)s" msgstr "" -#: core/validators.py:313 +#: core/validators.py:340 msgid "Duplicate values are not allowed." msgstr "" -#: core/validators.py:336 +#: core/validators.py:363 #, python-format msgid "This value must be a power of %s." msgstr "" -#: core/validators.py:347 +#: core/validators.py:374 msgid "Please enter a valid decimal number." msgstr "" -#: core/validators.py:349 +#: core/validators.py:378 #, python-format msgid "Please enter a valid decimal number with at most %s total digit." msgid_plural "" @@ -1709,7 +1903,16 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: core/validators.py:352 +#: core/validators.py:381 +#, 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] "" +msgstr[1] "" + +#: core/validators.py:384 #, python-format msgid "Please enter a valid decimal number with at most %s decimal place." msgid_plural "" @@ -1717,77 +1920,92 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: core/validators.py:362 +#: core/validators.py:394 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." msgstr "" -#: core/validators.py:363 +#: core/validators.py:395 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." msgstr "" -#: core/validators.py:376 +#: core/validators.py:412 msgid "The format for this field is wrong." msgstr "" -#: core/validators.py:391 +#: core/validators.py:427 msgid "This field is invalid." msgstr "" -#: core/validators.py:426 +#: core/validators.py:463 #, python-format msgid "Could not retrieve anything from %s." msgstr "" -#: core/validators.py:429 +#: core/validators.py:466 #, python-format msgid "" "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." msgstr "" -#: core/validators.py:462 +#: core/validators.py:499 #, python-format msgid "" "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " "\"%(start)s\".)" msgstr "" -#: core/validators.py:466 +#: core/validators.py:503 #, python-format msgid "" "Some text starting on line %(line)s is not allowed in that context. (Line " "starts with \"%(start)s\".)" msgstr "" -#: core/validators.py:471 +#: core/validators.py:508 #, python-format msgid "" "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" "(start)s\".)" msgstr "" -#: core/validators.py:476 +#: core/validators.py:513 #, python-format msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" "(start)s\".)" msgstr "" -#: core/validators.py:480 +#: core/validators.py:517 #, python-format msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " "starts with \"%(start)s\".)" msgstr "" -#: core/validators.py:485 +#: core/validators.py:522 #, python-format msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " "starts with \"%(start)s\".)" msgstr "" +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "" + +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "" + +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "" + #: db/models/manipulators.py:302 #, python-format msgid "%(object)s with this %(type)s already exists for the given %(field)s." @@ -1799,42 +2017,42 @@ msgid "%(optname)s with this %(fieldname)s already exists." msgstr "" #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 -#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 +#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562 #: forms/__init__.py:346 msgid "This field is required." msgstr "" -#: db/models/fields/__init__.py:337 +#: db/models/fields/__init__.py:340 msgid "This value must be an integer." msgstr "" -#: db/models/fields/__init__.py:369 +#: db/models/fields/__init__.py:372 msgid "This value must be either True or False." msgstr "" -#: db/models/fields/__init__.py:385 +#: db/models/fields/__init__.py:388 msgid "This field cannot be null." msgstr "" -#: db/models/fields/__init__.py:562 +#: db/models/fields/__init__.py:571 msgid "Enter a valid filename." msgstr "" -#: db/models/fields/related.py:43 +#: db/models/fields/related.py:51 #, python-format msgid "Please enter a valid %s." msgstr "" -#: db/models/fields/related.py:579 +#: db/models/fields/related.py:618 msgid "Separate multiple IDs with commas." msgstr "" -#: db/models/fields/related.py:581 +#: db/models/fields/related.py:620 msgid "" "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" -#: db/models/fields/related.py:625 +#: db/models/fields/related.py:664 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." msgid_plural "" @@ -1842,38 +2060,38 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms/__init__.py:380 +#: forms/__init__.py:381 #, python-format msgid "Ensure your text is less than %s character." msgid_plural "Ensure your text is less than %s characters." msgstr[0] "" msgstr[1] "" -#: forms/__init__.py:385 +#: forms/__init__.py:386 msgid "Line breaks are not allowed here." msgstr "" -#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 +#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599 #, python-format msgid "Select a valid choice; '%(data)s' is not in %(choices)s." msgstr "" -#: forms/__init__.py:645 +#: forms/__init__.py:663 msgid "The submitted file is empty." msgstr "" -#: forms/__init__.py:699 +#: forms/__init__.py:719 msgid "Enter a whole number between -32,768 and 32,767." msgstr "" -#: forms/__init__.py:708 +#: forms/__init__.py:729 msgid "Enter a positive number." msgstr "" -#: forms/__init__.py:717 +#: forms/__init__.py:739 msgid "Enter a whole number between 0 and 32,767." msgstr "" -#: template/defaultfilters.py:379 +#: template/defaultfilters.py:401 msgid "yes,no,maybe" msgstr "" diff --git a/django/conf/locale/tr/LC_MESSAGES/django.mo b/django/conf/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..ba3dd15be8 Binary files /dev/null and b/django/conf/locale/tr/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/tr/LC_MESSAGES/django.po b/django/conf/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 0000000000..390c8e7d0b --- /dev/null +++ b/django/conf/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,1898 @@ +# Django Turkish translation. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Baurzhan Ismagulov , 2006. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Django 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-05-16 10:10+0200\n" +"PO-Revision-Date: 2006-09-12 23:43+0200\n" +"Last-Translator: Baurzhan Ismagulov \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/comments/models.py:67 contrib/comments/models.py:166 +msgid "object ID" +msgstr "nesne kodu" + +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "başlık" + +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "yorum" + +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "rating #1" + +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "rating #2" + +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "rating #3" + +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "rating #4" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "rating #5" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "rating #6" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "rating #7" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "rating #8" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "geçerli bir rating'dir" + +#: contrib/comments/models.py:83 contrib/comments/models.py:169 +msgid "date/time submitted" +msgstr "girildiği tarih/saat" + +#: contrib/comments/models.py:84 contrib/comments/models.py:170 +msgid "is public" +msgstr "geneldir" + +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 +msgid "IP address" +msgstr "IP adresi" + +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "silinmiştir" + +#: contrib/comments/models.py:86 +msgid "" +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." +msgstr "Yorum uygun değilse bu alanı işaretleyin. Yerine \"Bu yorum silinmiştir\" yazısı gözükür." + +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "yorumlar" + +#: contrib/comments/models.py:131 contrib/comments/models.py:207 +msgid "Content object" +msgstr "İçerik nesnesi" + +#: contrib/comments/models.py:159 +#, python-format +msgid "" +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" +msgstr "" +"%(user)s, %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" + +#: contrib/comments/models.py:168 +msgid "person's name" +msgstr "kişinin adı" + +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "IP adresi" + +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "personel tarafından onaylanmış" + +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "serbest yorum" + +#: contrib/comments/models.py:177 +msgid "free comments" +msgstr "serbest yorum" + +#: contrib/comments/models.py:233 +msgid "score" +msgstr "puan" + +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "puan tarihi" + +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "karma puanı" + +#: contrib/comments/models.py:238 +msgid "karma scores" +msgstr "karma puanları" + +#: contrib/comments/models.py:242 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "%(score)d rating by %(user)s" + +#: contrib/comments/models.py:258 +#, python-format +msgid "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" +"Bu yorum, %(user)s tarafından işaretlenmiştir:\n" +"\n" +"%(text)s" + +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "işaretleme tarihi" + +#: contrib/comments/models.py:268 +msgid "user flag" +msgstr "kullanıcı işareti" + +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "kullanıcı işaretleri" + +#: contrib/comments/models.py:273 +#, python-format +msgid "Flag by %r" +msgstr "Flag by %r" + +#: contrib/comments/models.py:278 +msgid "deletion date" +msgstr "silme tarihi" + +#: contrib/comments/models.py:280 +msgid "moderator deletion" +msgstr "moderator deletion" + +#: contrib/comments/models.py:281 +msgid "moderator deletions" +msgstr "moderator deletions" + +#: contrib/comments/models.py:285 +#, python-format +msgid "Moderator deletion by %r" +msgstr "Moderator deletion by %r" + +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "Kayıtlı olmayan kullanıcılar oy veremez" + +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "Geçersiz yorum kodu" + +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "Kendinize oy veremezsiniz" + +#: contrib/comments/views/comments.py:28 +msgid "" +"This rating is required because you've entered at least one other rating." +msgstr "Bu rating zorunludur, çünkü en az bir başka rating girdiniz." + +#: 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" +"\n" +"%(text)s" +msgid_plural "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comments:\n" +"\n" +"%(text)s" +msgstr[0] "" +"Bu yorum, %(count)s'den az yorum yazmış bir kullanıcı tarafından yazılmıştır:\n" +"\n" +"%(text)s" +msgstr[1] "" +"Bu yorum, %(count)s'den az yorum yazmış bir kullanıcı tarafından yazılmıştır:\n" +"\n" +"%(text)s" + +#: contrib/comments/views/comments.py:117 +#, python-format +msgid "" +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" +msgstr "" +"Bu yorum, yüzeysel bir kullanıcı tarafından yazılmıştır:\n" +"\n" +"%(text)s" + +#: contrib/comments/views/comments.py:189 +#: contrib/comments/views/comments.py:280 +msgid "Only POSTs are allowed" +msgstr "Yalnızca POST kabul edilir" + +#: contrib/comments/views/comments.py:193 +#: contrib/comments/views/comments.py:284 +msgid "One or more of the required fields wasn't submitted" +msgstr "En az bir zorunlu alan doldurulmamıştır" + +#: contrib/comments/views/comments.py:197 +#: contrib/comments/views/comments.py:286 +msgid "Somebody tampered with the comment form (security violation)" +msgstr "Yorum formu ile oynanmış (güvenlik problemi)" + +#: contrib/comments/views/comments.py:207 +#: contrib/comments/views/comments.py:292 +msgid "" +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" +msgstr "Yorum formunun 'target' parametresi geçersiz, nesne kodu geçersiz" + +#: contrib/comments/views/comments.py:257 +#: contrib/comments/views/comments.py:321 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "Yorum formunda ne 'preview', ne de 'post' var" + +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:17 +msgid "Username:" +msgstr "Kullanıcı adı:" + +#: contrib/comments/templates/comments/form.html:6 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "Şifre:" + +#: contrib/comments/templates/comments/form.html:6 +msgid "Forgotten your password?" +msgstr "Şifremi unuttum" + +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/model_index.html:5 +msgid "Log out" +msgstr "Çıkış" + +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Rating'ler" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Zorunlu" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "İsteğe bağlı" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Resim ekle" + +#: contrib/comments/templates/comments/form.html:27 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "Yorum:" + +#: contrib/comments/templates/comments/form.html:32 +#: contrib/comments/templates/comments/freeform.html:9 +msgid "Preview comment" +msgstr "Yorum önizleme" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Adınız:" + +#: contrib/admin/filterspecs.py:40 +#, python-format +msgid "" +"

        By %s:

        \n" +"
          \n" +msgstr "" +"

          %s:

          \n" +"
            \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 +msgid "All" +msgstr "Hepsi" + +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "Herhangi bir tarih" + +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Bugün" + +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "Son 7 gün" + +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "Bu ay" + +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Bu yıl" + +#: contrib/admin/filterspecs.py:143 +msgid "Yes" +msgstr "Evet" + +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "Hayır" + +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "Bilinmiyor" + +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "hareket saati" + +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "nesne kodu" + +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "nesne repr gösterimi" + +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "hareket işareti" + +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "değişiklik mesajı" + +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "günlük kaydı" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "günlük kayıtları" + +#: contrib/admin/templatetags/admin_list.py:228 +msgid "All dates" +msgstr "Tüm tarihler" + +#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 +#: contrib/auth/forms.py:41 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "Geçerli bir kullanıcı adı ve şifre giriniz. Her ikisinde de büyük ve küçük harfler farklıdır." + +#: contrib/admin/views/decorators.py:23 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "Giriş" + +#: contrib/admin/views/decorators.py:61 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "Oturumunuzun süresi dolmuştur, yeniden giriniz. Merak etmeyin, verileriniz kaydedilmiştir." + +#: contrib/admin/views/decorators.py:68 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "Tarayıcınızın cookie desteği kapalıdır. Cookie desteğini açın, bu sayfayı yeniden yükleyin ve tekrar deneyin." + +#: contrib/admin/views/decorators.py:82 +msgid "Usernames cannot contain the '@' character." +msgstr "Kullanıcı adında '@' karakterini kullanamazsınız." + +#: contrib/admin/views/decorators.py:84 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "E-posta adresiniz, kullanıcı adınız değildir. Yerine '%s' deneyin." + +#: contrib/admin/views/main.py:226 +msgid "Site administration" +msgstr "Site yönetimi" + +#: contrib/admin/views/main.py:260 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "%(name)s \\\"%(obj)s\\\" başarı ile eklenmiştir." + +#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 +msgid "You may edit it again below." +msgstr "Aşağıda değiştirebilirsiniz." + +#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 +#, python-format +msgid "You may add another %s below." +msgstr "Aşağıda bir %s daha ekleyebilirsiniz." + +#: contrib/admin/views/main.py:290 +#, python-format +msgid "Add %s" +msgstr "%s ekle" + +#: contrib/admin/views/main.py:336 +#, python-format +msgid "Added %s." +msgstr "%s eklenmiştir." + +#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 +#: contrib/admin/views/main.py:340 +msgid "and" +msgstr "ve" + +#: contrib/admin/views/main.py:338 +#, python-format +msgid "Changed %s." +msgstr "%s değiştirilmiştir." + +#: contrib/admin/views/main.py:340 +#, python-format +msgid "Deleted %s." +msgstr "%s silinmiştir." + +#: contrib/admin/views/main.py:343 +msgid "No fields changed." +msgstr "Herhangi bir alan değiştirilmemiştir." + +#: contrib/admin/views/main.py:346 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "%(name)s \"%(obj)s\" başarı ile değiştirilmiştir." + +#: contrib/admin/views/main.py:354 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "%(name)s \\\"%(obj)s\\\" başarı ile eklenmiştir. Aşağida değiştirebilirsiniz." + +#: contrib/admin/views/main.py:392 +#, python-format +msgid "Change %s" +msgstr "%s değiştir" + +#: contrib/admin/views/main.py:470 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "%(name)s'daki bir ya da birden fazla %(fieldname)s: %(obj)s" + +#: contrib/admin/views/main.py:475 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "%(name)s'daki bir ya da birden fazla %(fieldname)s:" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" başarı ile silinmiştir." + +#: contrib/admin/views/main.py:511 +msgid "Are you sure?" +msgstr "Emin misiniz?" + +#: contrib/admin/views/main.py:533 +#, python-format +msgid "Change history: %s" +msgstr "Değişiklik tarihçesi: %s" + +#: contrib/admin/views/main.py:565 +#, python-format +msgid "Select %s" +msgstr "%s seç" + +#: contrib/admin/views/main.py:565 +#, python-format +msgid "Select %s to change" +msgstr "Değiştirmek için %s seçiniz" + +#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 +#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 +#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 +msgid "Integer" +msgstr "Tamsayı" + +#: contrib/admin/views/doc.py:278 +msgid "Boolean (Either True or False)" +msgstr "Boolean (True ya da False)" + +#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 +#, python-format +msgid "String (up to %(maxlength)s)" +msgstr "String (en fazla %(maxlength)s karakter)" + +#: contrib/admin/views/doc.py:280 +msgid "Comma-separated integers" +msgstr "Virgül ile ayrılmış tamsayılar" + +#: contrib/admin/views/doc.py:281 +msgid "Date (without time)" +msgstr "Tarih (saat yok)" + +#: contrib/admin/views/doc.py:282 +msgid "Date (with time)" +msgstr "Tarih (saat ile)" + +#: contrib/admin/views/doc.py:283 +msgid "E-mail address" +msgstr "E-posta adresi" + +#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 +msgid "File path" +msgstr "Dosya yolu" + +#: contrib/admin/views/doc.py:285 +msgid "Decimal number" +msgstr "Ondalık sayı" + +#: contrib/admin/views/doc.py:291 +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (True, False, ya da None)" + +#: contrib/admin/views/doc.py:292 +msgid "Relation to parent model" +msgstr "Ana model ile ilişki" + +#: contrib/admin/views/doc.py:293 +msgid "Phone number" +msgstr "Telefon numarası" + +#: contrib/admin/views/doc.py:298 +msgid "Text" +msgstr "Metin" + +#: contrib/admin/views/doc.py:299 +msgid "Time" +msgstr "Saat" + +#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "URL" + +#: contrib/admin/views/doc.py:301 +msgid "U.S. state (two uppercase letters)" +msgstr "ABD eyaleti (iki büyük harf)" + +#: contrib/admin/views/doc.py:302 +msgid "XML text" +msgstr "XML metni" + +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokümantasyon" + +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/model_index.html:5 +msgid "Change password" +msgstr "Şifre değiştirme" + +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/change_list.html:6 +#: contrib/admin/templates/admin/base.html:28 +#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/registration/password_change_done.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/logged_out.html:4 +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Home" +msgstr "Ana sayfa" + +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:20 +msgid "History" +msgstr "Tarihçe" + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Tarih/saat" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "Kullanıcı" + +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Hareket" + +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j N Y, H:i" + +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "Bu nesne ile ilgili bir tarihçe yoktur. Muhtemelen bu yönetim arayüzü aracılığıyla eklenmemiştir." + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Django site yöneticisi" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Django yönetimi" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Sunucu hatası" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Sunucu hatası (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Sunucu hatası (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 "Bir hata oluştu. Site yöneticilerine e-posta ile gönderildi ve en kısa zamanda düzeltilir. Sabrınız için teşekkür ederiz." + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Sayfa bulunamamıştır" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Özür dileriz, sayfa bulunamamıştır." + +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "%(name)s uygulamasındaki modeller." + +#: contrib/admin/templates/admin/index.html:28 +#: contrib/admin/templates/admin/change_form.html:15 +msgid "Add" +msgstr "Ekle" + +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Değiştir" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "Değiştirme yetkiniz yoktur." + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Son yapılanlar" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Hareketlerim" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Yok" + +#: contrib/admin/templates/admin/change_list.html:11 +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s ekle" + +#: contrib/admin/templates/admin/login.html:22 +msgid "Have you forgotten your password?" +msgstr "Şifremi unuttum" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Hoş geldiniz," + +#: contrib/admin/templates/admin/delete_confirmation.html:9 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Sil" + +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(object)s' would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "%(object_name)s '%(object)s' silinmesi, ilgili nesnelerin silinmesini gerektirir, ancak şu nesneleri silmeye yetkiniz yoktur:" + +#: contrib/admin/templates/admin/delete_confirmation.html:21 +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " +"the following related items will be deleted:" +msgstr "%(object_name)s \"%(object)s\" silmek istediğinizden emin misiniz? Şunların tamamı silinecektir:" + +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "Evet, eminim" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(title)s " +msgstr " By %(title)s " + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Yap" + +#: contrib/admin/templates/admin/change_form.html:21 +msgid "View on site" +msgstr "Görüntüle" + +#: contrib/admin/templates/admin/change_form.html:30 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Aşağıdaki hatayı düzeltin." +msgstr[1] "Aşağıdaki hataları düzeltin." + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Ordering" +msgstr "Sıralama" + +#: contrib/admin/templates/admin/change_form.html:51 +msgid "Order:" +msgstr "Sırala:" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Yeni olarak kaydet" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Kaydet ve bir tane daha ekle" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Kaydet ve düzenlemeye devam et" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Kaydet" + +#: contrib/admin/templates/registration/password_change_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_form.html:6 +#: contrib/admin/templates/registration/password_change_form.html:10 +msgid "Password change" +msgstr "Şifre değişikliği" + +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "Şifre değiştirilmiştir" + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "Şifreniz değiştirilmiştir" + +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:6 +#: contrib/admin/templates/registration/password_reset_form.html:10 +#: contrib/admin/templates/registration/password_reset_done.html:4 +msgid "Password reset" +msgstr "Şifreyi resetle" + +#: 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 "Şifrenizi unuttuysanız, aşağıdaki alana e-posta adresinizi giriniz. Yeni bir şifre otomatik olarak üretilir ve e-posta ile gönderilir." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "E-posta:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Şifremi resetle" + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Sitemizde zaman geçirdiğiniz için teşekkür ederiz." + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Yeniden giriniz" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Şifre resetlendi" + +#: 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 "Yeni şifre, verdiğiniz e-posta adresine gönderilmiştir." + +#: contrib/admin/templates/registration/password_change_form.html:12 +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "Güvenliğiniz için eski şifrenizi giriniz, daha sonra yeni şifrenizi iki kez giriniz." + +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "Eski şifre:" + +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "Yeni şifre:" + +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "Yeni şifre (tekrar):" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "Şifremi değiştir" + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "Bu mektubu, %(site_name)s'daki kullanıcı hesabınız için yeni şifrenin" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "üretilmesini istediğiniz için aldınız" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "Yeni şifreniz: %(new_password)s" + +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "Şifrenizi şu sayfadan değiştirebilirsiniz:" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

            To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

            \n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "" + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +#: contrib/redirects/models.py:12 +msgid "redirect" +msgstr "" + +#: contrib/redirects/models.py:13 +msgid "redirects" +msgstr "" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page'. If this isn't provided, the system will " +"use 'flatpages/default'." +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "" + +#: contrib/auth/models.py:13 contrib/auth/models.py:26 +msgid "name" +msgstr "" + +#: contrib/auth/models.py:15 +msgid "codename" +msgstr "" + +#: contrib/auth/models.py:17 +msgid "permission" +msgstr "" + +#: contrib/auth/models.py:18 contrib/auth/models.py:27 +msgid "permissions" +msgstr "" + +#: contrib/auth/models.py:29 +msgid "group" +msgstr "" + +#: contrib/auth/models.py:30 contrib/auth/models.py:65 +msgid "groups" +msgstr "" + +#: contrib/auth/models.py:55 +msgid "username" +msgstr "" + +#: contrib/auth/models.py:56 +msgid "first name" +msgstr "" + +#: contrib/auth/models.py:57 +msgid "last name" +msgstr "" + +#: contrib/auth/models.py:58 +msgid "e-mail address" +msgstr "" + +#: contrib/auth/models.py:59 +msgid "password" +msgstr "" + +#: contrib/auth/models.py:59 +msgid "Use '[algo]$[salt]$[hexdigest]'" +msgstr "" + +#: contrib/auth/models.py:60 +msgid "staff status" +msgstr "" + +#: contrib/auth/models.py:60 +msgid "Designates whether the user can log into this admin site." +msgstr "" + +#: contrib/auth/models.py:61 +msgid "active" +msgstr "" + +#: contrib/auth/models.py:62 +msgid "superuser status" +msgstr "" + +#: contrib/auth/models.py:63 +msgid "last login" +msgstr "" + +#: contrib/auth/models.py:64 +msgid "date joined" +msgstr "" + +#: contrib/auth/models.py:66 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" + +#: contrib/auth/models.py:67 +msgid "user permissions" +msgstr "" + +#: contrib/auth/models.py:70 +msgid "user" +msgstr "" + +#: contrib/auth/models.py:71 +msgid "users" +msgstr "" + +#: contrib/auth/models.py:76 +msgid "Personal info" +msgstr "" + +#: contrib/auth/models.py:77 +msgid "Permissions" +msgstr "" + +#: contrib/auth/models.py:78 +msgid "Important dates" +msgstr "" + +#: contrib/auth/models.py:79 +msgid "Groups" +msgstr "" + +#: contrib/auth/models.py:219 +msgid "message" +msgstr "" + +#: contrib/auth/forms.py:30 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" + +#: contrib/contenttypes/models.py:25 +msgid "python model class name" +msgstr "" + +#: contrib/contenttypes/models.py:28 +msgid "content type" +msgstr "" + +#: contrib/contenttypes/models.py:29 +msgid "content types" +msgstr "" + +#: contrib/sessions/models.py:35 +msgid "session key" +msgstr "" + +#: contrib/sessions/models.py:36 +msgid "session data" +msgstr "" + +#: contrib/sessions/models.py:37 +msgid "expire date" +msgstr "" + +#: contrib/sessions/models.py:41 +msgid "session" +msgstr "" + +#: contrib/sessions/models.py:42 +msgid "sessions" +msgstr "" + +#: contrib/sites/models.py:10 +msgid "domain name" +msgstr "" + +#: contrib/sites/models.py:11 +msgid "display name" +msgstr "" + +#: contrib/sites/models.py:15 +msgid "site" +msgstr "" + +#: contrib/sites/models.py:16 +msgid "sites" +msgstr "" + +#: utils/translation.py:360 +msgid "DATE_FORMAT" +msgstr "j N Y" + +#: utils/translation.py:361 +msgid "DATETIME_FORMAT" +msgstr "j N Y, H:i" + +#: utils/translation.py:362 +msgid "TIME_FORMAT" +msgstr "H:i" + +#: utils/dates.py:6 +msgid "Monday" +msgstr "" + +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Thursday" +msgstr "" + +#: utils/dates.py:6 +msgid "Friday" +msgstr "" + +#: utils/dates.py:7 +msgid "Saturday" +msgstr "" + +#: utils/dates.py:7 +msgid "Sunday" +msgstr "" + +#: utils/dates.py:14 +msgid "January" +msgstr "" + +#: utils/dates.py:14 +msgid "February" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "March" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "April" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "May" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "June" +msgstr "" + +#: utils/dates.py:15 utils/dates.py:27 +msgid "July" +msgstr "" + +#: utils/dates.py:15 +msgid "August" +msgstr "" + +#: utils/dates.py:15 +msgid "September" +msgstr "" + +#: utils/dates.py:15 +msgid "October" +msgstr "" + +#: utils/dates.py:15 +msgid "November" +msgstr "" + +#: utils/dates.py:16 +msgid "December" +msgstr "" + +#: utils/dates.py:19 +msgid "jan" +msgstr "" + +#: utils/dates.py:19 +msgid "feb" +msgstr "" + +#: utils/dates.py:19 +msgid "mar" +msgstr "" + +#: utils/dates.py:19 +msgid "apr" +msgstr "" + +#: utils/dates.py:19 +msgid "may" +msgstr "" + +#: utils/dates.py:19 +msgid "jun" +msgstr "" + +#: utils/dates.py:20 +msgid "jul" +msgstr "" + +#: utils/dates.py:20 +msgid "aug" +msgstr "" + +#: utils/dates.py:20 +msgid "sep" +msgstr "" + +#: utils/dates.py:20 +msgid "oct" +msgstr "" + +#: utils/dates.py:20 +msgid "nov" +msgstr "" + +#: utils/dates.py:20 +msgid "dec" +msgstr "" + +#: utils/dates.py:27 +msgid "Jan." +msgstr "" + +#: utils/dates.py:27 +msgid "Feb." +msgstr "" + +#: utils/dates.py:28 +msgid "Aug." +msgstr "" + +#: utils/dates.py:28 +msgid "Sept." +msgstr "" + +#: utils/dates.py:28 +msgid "Oct." +msgstr "" + +#: utils/dates.py:28 +msgid "Nov." +msgstr "" + +#: utils/dates.py:28 +msgid "Dec." +msgstr "" + +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: conf/global_settings.py:37 +msgid "Bengali" +msgstr "" + +#: conf/global_settings.py:38 +msgid "Czech" +msgstr "" + +#: conf/global_settings.py:39 +msgid "Welsh" +msgstr "" + +#: conf/global_settings.py:40 +msgid "Danish" +msgstr "" + +#: conf/global_settings.py:41 +msgid "German" +msgstr "" + +#: conf/global_settings.py:42 +msgid "Greek" +msgstr "" + +#: conf/global_settings.py:43 +msgid "English" +msgstr "" + +#: conf/global_settings.py:44 +msgid "Spanish" +msgstr "" + +#: conf/global_settings.py:45 +msgid "French" +msgstr "" + +#: conf/global_settings.py:46 +msgid "Galician" +msgstr "" + +#: conf/global_settings.py:47 +msgid "Hungarian" +msgstr "" + +#: conf/global_settings.py:48 +msgid "Hebrew" +msgstr "" + +#: conf/global_settings.py:49 +msgid "Icelandic" +msgstr "" + +#: conf/global_settings.py:50 +msgid "Italian" +msgstr "" + +#: conf/global_settings.py:51 +msgid "Japanese" +msgstr "" + +#: conf/global_settings.py:52 +msgid "Dutch" +msgstr "" + +#: conf/global_settings.py:53 +msgid "Norwegian" +msgstr "" + +#: conf/global_settings.py:54 +msgid "Brazilian" +msgstr "" + +#: conf/global_settings.py:55 +msgid "Romanian" +msgstr "" + +#: conf/global_settings.py:56 +msgid "Russian" +msgstr "" + +#: conf/global_settings.py:57 +msgid "Slovak" +msgstr "" + +#: conf/global_settings.py:58 +msgid "Slovenian" +msgstr "" + +#: conf/global_settings.py:59 +msgid "Serbian" +msgstr "" + +#: conf/global_settings.py:60 +msgid "Swedish" +msgstr "" + +#: conf/global_settings.py:61 +msgid "Ukrainian" +msgstr "" + +#: conf/global_settings.py:62 +msgid "Simplified Chinese" +msgstr "" + +#: conf/global_settings.py:63 +msgid "Traditional Chinese" +msgstr "" + +#: core/validators.py:60 +msgid "This value must contain only letters, numbers and underscores." +msgstr "" + +#: core/validators.py:64 +msgid "" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." +msgstr "" + +#: core/validators.py:72 +msgid "Uppercase letters are not allowed here." +msgstr "" + +#: core/validators.py:76 +msgid "Lowercase letters are not allowed here." +msgstr "" + +#: core/validators.py:83 +msgid "Enter only digits separated by commas." +msgstr "" + +#: core/validators.py:95 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "" + +#: core/validators.py:99 +msgid "Please enter a valid IP address." +msgstr "" + +#: core/validators.py:103 +msgid "Empty values are not allowed here." +msgstr "" + +#: core/validators.py:107 +msgid "Non-numeric characters aren't allowed here." +msgstr "" + +#: core/validators.py:111 +msgid "This value can't be comprised solely of digits." +msgstr "" + +#: core/validators.py:116 +msgid "Enter a whole number." +msgstr "" + +#: core/validators.py:120 +msgid "Only alphabetical characters are allowed here." +msgstr "" + +#: core/validators.py:124 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "" + +#: core/validators.py:128 +msgid "Enter a valid time in HH:MM format." +msgstr "" + +#: core/validators.py:132 db/models/fields/__init__.py:468 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "" + +#: core/validators.py:136 +msgid "Enter a valid e-mail address." +msgstr "" + +#: core/validators.py:148 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: core/validators.py:155 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "" + +#: core/validators.py:159 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" + +#: core/validators.py:167 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "" + +#: core/validators.py:171 +msgid "A valid URL is required." +msgstr "" + +#: core/validators.py:185 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" + +#: core/validators.py:192 +#, python-format +msgid "Badly formed XML: %s" +msgstr "" + +#: core/validators.py:202 +#, python-format +msgid "Invalid URL: %s" +msgstr "" + +#: core/validators.py:206 core/validators.py:208 +#, python-format +msgid "The URL %s is a broken link." +msgstr "" + +#: core/validators.py:214 +msgid "Enter a valid U.S. state abbreviation." +msgstr "" + +#: core/validators.py:229 +#, python-format +msgid "Watch your mouth! The word %s is not allowed here." +msgid_plural "Watch your mouth! The words %s are not allowed here." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:236 +#, python-format +msgid "This field must match the '%s' field." +msgstr "" + +#: core/validators.py:255 +msgid "Please enter something for at least one field." +msgstr "" + +#: core/validators.py:264 core/validators.py:275 +msgid "Please enter both fields or leave them both empty." +msgstr "" + +#: core/validators.py:282 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "" + +#: core/validators.py:294 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "" + +#: core/validators.py:313 +msgid "Duplicate values are not allowed." +msgstr "" + +#: core/validators.py:336 +#, python-format +msgid "This value must be a power of %s." +msgstr "" + +#: core/validators.py:347 +msgid "Please enter a valid decimal number." +msgstr "" + +#: core/validators.py:349 +#, 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." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:352 +#, 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] "" +msgstr[1] "" + +#: core/validators.py:362 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "" + +#: core/validators.py:363 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "" + +#: core/validators.py:376 +msgid "The format for this field is wrong." +msgstr "" + +#: core/validators.py:391 +msgid "This field is invalid." +msgstr "" + +#: core/validators.py:426 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "" + +#: core/validators.py:429 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" + +#: core/validators.py:462 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" + +#: core/validators.py:466 +#, python-format +msgid "" +"Some text starting on line %(line)s is not allowed in that context. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: core/validators.py:471 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" + +#: core/validators.py:476 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" + +#: core/validators.py:480 +#, python-format +msgid "" +"A tag on line %(line)s is missing one or more required attributes. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: core/validators.py:485 +#, python-format +msgid "" +"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: db/models/manipulators.py:302 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "" + +#: db/models/fields/__init__.py:40 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 +#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 +#: forms/__init__.py:346 +msgid "This field is required." +msgstr "" + +#: db/models/fields/__init__.py:337 +msgid "This value must be an integer." +msgstr "" + +#: db/models/fields/__init__.py:369 +msgid "This value must be either True or False." +msgstr "" + +#: db/models/fields/__init__.py:385 +msgid "This field cannot be null." +msgstr "" + +#: db/models/fields/__init__.py:562 +msgid "Enter a valid filename." +msgstr "" + +#: db/models/fields/related.py:43 +#, python-format +msgid "Please enter a valid %s." +msgstr "" + +#: db/models/fields/related.py:579 +msgid "Separate multiple IDs with commas." +msgstr "" + +#: db/models/fields/related.py:581 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#: db/models/fields/related.py:625 +#, 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] "" +msgstr[1] "" + +#: forms/__init__.py:380 +#, python-format +msgid "Ensure your text is less than %s character." +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: forms/__init__.py:385 +msgid "Line breaks are not allowed here." +msgstr "" + +#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: forms/__init__.py:645 +msgid "The submitted file is empty." +msgstr "" + +#: forms/__init__.py:699 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "" + +#: forms/__init__.py:708 +msgid "Enter a positive number." +msgstr "" + +#: forms/__init__.py:717 +msgid "Enter a whole number between 0 and 32,767." +msgstr "" + +#: template/defaultfilters.py:379 +msgid "yes,no,maybe" +msgstr "" diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo index 9fc04b9395..0d6bf90c0e 100644 Binary files a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo and b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.po b/django/conf/locale/zh_CN/LC_MESSAGES/django.po index 7718514299..2552b677bd 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/django.po +++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: django v1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-05-16 10:10+0200\n" -"PO-Revision-Date: 2006-05-17 13:47+0800\n" +"PO-Revision-Date: 2006-09-01 22:05+0800\n" "Last-Translator: limodou \n" "Language-Team: Simplified Chinese \n" "MIME-Version: 1.0\n" @@ -1167,7 +1167,7 @@ msgstr "个人信息" #: contrib/auth/models.py:77 msgid "Permissions" -msgstr "许可" +msgstr "权限" #: contrib/auth/models.py:78 msgid "Important dates" diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo index 983a8a7154..ec7580a862 100644 Binary files a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo and b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po index 1e9e7dbeb7..610e61d17a 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po @@ -3,22 +3,21 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Django 0.95\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-03-21 18:43+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2006-09-25 08:35+0800\n" +"Last-Translator: limodou \n" +"Language-Team: limodou \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: contrib/admin/media/js/SelectFilter2.js:33 msgid "Available %s" -msgstr "可行 %s" +msgstr "可用 %s" #: contrib/admin/media/js/SelectFilter2.js:41 msgid "Choose all" @@ -30,34 +29,32 @@ msgstr "增加" #: contrib/admin/media/js/SelectFilter2.js:48 msgid "Remove" -msgstr "移出" +msgstr "删除" #: contrib/admin/media/js/SelectFilter2.js:53 msgid "Chosen %s" -msgstr "选择 %s" +msgstr "选中的 %s" #: contrib/admin/media/js/SelectFilter2.js:54 msgid "Select your choice(s) and click " -msgstr "挑选你的选择并且点击 " +msgstr "选择并点击 " #: contrib/admin/media/js/SelectFilter2.js:59 msgid "Clear all" -msgstr "清除所有" +msgstr "清除全部" #: contrib/admin/media/js/dateparse.js:32 #: contrib/admin/media/js/calendar.js:24 -msgid "" -"January February March April May June July August September October November " -"December" +msgid "January February March April May June July August September October November December" msgstr "一月 二月 三月 四月 五月 六月 六月 七月 八月 九月 十月 十一月 十二月" #: contrib/admin/media/js/dateparse.js:33 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" -msgstr "星期天 星期一 星期二 星期三 星期四 星期五 星期六" +msgstr "星期日 星期一 星期二 星期三 星期四 星期五 星期六" #: contrib/admin/media/js/calendar.js:25 msgid "S M T W T F S" -msgstr "日 月 火 水 木 金 土" +msgstr "日 一 二 三 四 五 六" #: contrib/admin/media/js/admin/DateTimeShortcuts.js:45 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:80 @@ -105,3 +102,4 @@ msgstr "昨天" #: contrib/admin/media/js/admin/DateTimeShortcuts.js:164 msgid "Tomorrow" msgstr "明天" + diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py index 55d8bb2b95..875e61f959 100644 --- a/django/contrib/admin/templatetags/admin_modify.py +++ b/django/contrib/admin/templatetags/admin_modify.py @@ -160,8 +160,10 @@ class EditInlineNode(template.Node): context.push() if relation.field.rel.edit_inline == models.TABULAR: bound_related_object_class = TabularBoundRelatedObject - else: + elif relation.field.rel.edit_inline == models.STACKED: bound_related_object_class = StackedBoundRelatedObject + else: + bound_related_object_class = relation.field.rel.edit_inline original = context.get('original', None) bound_related_object = relation.bind(context['form'], original, bound_related_object_class) context['bound_related_object'] = bound_related_object diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 7c942ca5b8..38d64bd73b 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -727,6 +727,8 @@ class ChangeList(object): for bit in self.query.split(): or_queries = [models.Q(**{construct_search(field_name): bit}) for field_name in self.lookup_opts.admin.search_fields] other_qs = QuerySet(self.model) + if qs._select_related: + other_qs = other_qs.select_related() other_qs = other_qs.filter(reduce(operator.or_, or_queries)) qs = qs & other_qs diff --git a/django/contrib/auth/decorators.py b/django/contrib/auth/decorators.py index 0102496a33..8164d8314e 100644 --- a/django/contrib/auth/decorators.py +++ b/django/contrib/auth/decorators.py @@ -26,3 +26,11 @@ login_required.__doc__ = ( to the log-in page if necessary. """ ) + +def permission_required(perm, login_url=LOGIN_URL): + """ + Decorator for views that checks if a user has a particular permission + enabled, redirectiing to the log-in page if necessary. + """ + return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url) + diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py index ad8d423ebf..206cd06e06 100644 --- a/django/contrib/auth/forms.py +++ b/django/contrib/auth/forms.py @@ -81,7 +81,7 @@ class PasswordResetForm(forms.Manipulator): try: self.user_cache = User.objects.get(email__iexact=new_data) except User.DoesNotExist: - raise validators.ValidationError, "That e-mail address doesn't have an associated user acount. Are you sure you've registered?" + raise validators.ValidationError, _("That e-mail address doesn't have an associated user acount. Are you sure you've registered?") def save(self, domain_override=None, email_template_name='registration/password_reset_email.html'): "Calculates a new password randomly and sends it to the user" @@ -113,14 +113,14 @@ class PasswordChangeForm(forms.Manipulator): forms.PasswordField(field_name="old_password", length=30, maxlength=30, is_required=True, validator_list=[self.isValidOldPassword]), forms.PasswordField(field_name="new_password1", length=30, maxlength=30, is_required=True, - validator_list=[validators.AlwaysMatchesOtherField('new_password2', "The two 'new password' fields didn't match.")]), + validator_list=[validators.AlwaysMatchesOtherField('new_password2', _("The two 'new password' fields didn't match."))]), forms.PasswordField(field_name="new_password2", length=30, maxlength=30, is_required=True), ) def isValidOldPassword(self, new_data, all_data): "Validates that the old_password field is correct." if not self.user.check_password(new_data): - raise validators.ValidationError, "Your old password was entered incorrectly. Please enter it again." + raise validators.ValidationError, _("Your old password was entered incorrectly. Please enter it again.") def save(self, new_data): "Saves the new password." diff --git a/django/contrib/auth/handlers/modpython.py b/django/contrib/auth/handlers/modpython.py index e6719794a1..c7d921313d 100644 --- a/django/contrib/auth/handlers/modpython.py +++ b/django/contrib/auth/handlers/modpython.py @@ -22,6 +22,8 @@ def authenhandler(req, **kwargs): os.environ['DJANGO_SETTINGS_MODULE'] = settings_module from django.contrib.auth.models import User + from django import db + db.reset_queries() # check that the username is valid kwargs = {'username': req.user, 'is_active': True} @@ -30,18 +32,21 @@ def authenhandler(req, **kwargs): if superuser_only: kwargs['is_superuser'] = True try: - user = User.objects.get(**kwargs) - except User.DoesNotExist: - return apache.HTTP_UNAUTHORIZED - - # check the password and any permission given - if user.check_password(req.get_basic_auth_pw()): - if permission_name: - if user.has_perm(permission_name): - return apache.OK + try: + user = User.objects.get(**kwargs) + except User.DoesNotExist: + return apache.HTTP_UNAUTHORIZED + + # check the password and any permission given + if user.check_password(req.get_basic_auth_pw()): + if permission_name: + if user.has_perm(permission_name): + return apache.OK + else: + return apache.HTTP_UNAUTHORIZED else: - return apache.HTTP_UNAUTHORIZED + return apache.OK else: - return apache.OK - else: - return apache.HTTP_UNAUTHORIZED + return apache.HTTP_UNAUTHORIZED + finally: + db.connection.close() diff --git a/django/core/context_processors.py b/django/core/context_processors.py index 2ae9a6d972..f4b288dfc4 100644 --- a/django/core/context_processors.py +++ b/django/core/context_processors.py @@ -51,15 +51,19 @@ def request(request): class PermLookupDict(object): def __init__(self, user, module_name): self.user, self.module_name = user, module_name + def __repr__(self): - return str(self.user.get_permission_list()) + return str(self.user.get_all_permissions()) + def __getitem__(self, perm_name): return self.user.has_perm("%s.%s" % (self.module_name, perm_name)) + def __nonzero__(self): return self.user.has_module_perms(self.module_name) class PermWrapper(object): def __init__(self, user): self.user = user + def __getitem__(self, module_name): return PermLookupDict(self.user, module_name) diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py index 07c98e3b59..41d9a578c5 100644 --- a/django/core/handlers/modpython.py +++ b/django/core/handlers/modpython.py @@ -16,9 +16,26 @@ class ModPythonRequest(http.HttpRequest): self.path = req.uri def __repr__(self): + # Since this is called as part of error handling, we need to be very + # robust against potentially malformed input. + try: + get = pformat(self.GET) + except: + get = '' + try: + post = pformat(self.POST) + except: + post = '' + try: + cookies = pformat(self.COOKIES) + except: + cookies = '' + try: + meta = pformat(self.META) + except: + meta = '' return '' % \ - (self.path, pformat(self.GET), pformat(self.POST), pformat(self.COOKIES), - pformat(self.META)) + (self.path, get, post, cookies, meta) def get_full_path(self): return '%s%s' % (self.path, self._req.args and ('?' + self._req.args) or '') @@ -155,8 +172,11 @@ def populate_apache_request(http_response, mod_python_req): for c in http_response.cookies.values(): mod_python_req.headers_out.add('Set-Cookie', c.output(header='')) mod_python_req.status = http_response.status_code - for chunk in http_response.iterator: - mod_python_req.write(chunk) + try: + for chunk in http_response: + mod_python_req.write(chunk) + finally: + http_response.close() def handler(req): # mod_python hooks into this function. diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index 5c48c9dace..85e234c8d2 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -4,6 +4,11 @@ from django.dispatch import dispatcher from django.utils import datastructures from django import http from pprint import pformat +from shutil import copyfileobj +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html STATUS_CODE_TEXT = { @@ -50,6 +55,21 @@ STATUS_CODE_TEXT = { 505: 'HTTP VERSION NOT SUPPORTED', } +def safe_copyfileobj(fsrc, fdst, length=16*1024, size=0): + """ + A version of shutil.copyfileobj that will not read more than 'size' bytes. + This makes it safe from clients sending more than CONTENT_LENGTH bytes of + data in the body. + """ + if not size: + return copyfileobj(fsrc, fdst, length) + while size > 0: + buf = fsrc.read(min(length, size)) + if not buf: + break + fdst.write(buf) + size -= len(buf) + class WSGIRequest(http.HttpRequest): def __init__(self, environ): self.environ = environ @@ -58,9 +78,26 @@ class WSGIRequest(http.HttpRequest): self.method = environ['REQUEST_METHOD'].upper() def __repr__(self): + # Since this is called as part of error handling, we need to be very + # robust against potentially malformed input. + try: + get = pformat(self.GET) + except: + get = '' + try: + post = pformat(self.POST) + except: + post = '' + try: + cookies = pformat(self.COOKIES) + except: + cookies = '' + try: + meta = pformat(self.META) + except: + meta = '' return '' % \ - (pformat(self.GET), pformat(self.POST), pformat(self.COOKIES), - pformat(self.META)) + (get, post, cookies, meta) def get_full_path(self): return '%s%s' % (self.path, self.environ.get('QUERY_STRING', '') and ('?' + self.environ.get('QUERY_STRING', '')) or '') @@ -119,7 +156,11 @@ class WSGIRequest(http.HttpRequest): try: return self._raw_post_data except AttributeError: - self._raw_post_data = self.environ['wsgi.input'].read(int(self.environ["CONTENT_LENGTH"])) + buf = StringIO() + content_length = int(self.environ['CONTENT_LENGTH']) + safe_copyfileobj(self.environ['wsgi.input'], buf, size=content_length) + self._raw_post_data = buf.getvalue() + buf.close() return self._raw_post_data GET = property(_get_get, _set_get) @@ -163,4 +204,4 @@ class WSGIHandler(BaseHandler): for c in response.cookies.values(): response_headers.append(('Set-Cookie', c.output(header=''))) start_response(status, response_headers) - return response.iterator + return response diff --git a/django/core/management.py b/django/core/management.py index 16c9d6b693..87e5053791 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -347,7 +347,7 @@ def get_sql_initial_data_for_model(model): os.path.join(app_dir, "%s.sql" % opts.object_name.lower())] for sql_file in sql_files: if os.path.exists(sql_file): - fp = open(sql_file) + fp = open(sql_file, 'U') for statement in statements.split(fp.read()): if statement.strip(): output.append(statement + ";") @@ -958,7 +958,8 @@ def get_validation_errors(outfile, app=None): try: f = opts.get_field(fn) except models.FieldDoesNotExist: - e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn) + if not hasattr(cls, fn): + e.add(opts, '"admin.list_display_links" refers to %r, which isn\'t an attribute, method or property.' % fn) if fn not in opts.admin.list_display: e.add(opts, '"admin.list_display_links" refers to %r, which is not defined in "admin.list_display".' % fn) # list_filter @@ -1016,10 +1017,12 @@ def get_validation_errors(outfile, app=None): return len(e.errors) -def validate(outfile=sys.stdout): +def validate(outfile=sys.stdout, silent_success=False): "Validates all installed models." try: num_errors = get_validation_errors(outfile) + if silent_success and num_errors == 0: + return outfile.write('%s error%s found.\n' % (num_errors, num_errors != 1 and 's' or '')) except ImproperlyConfigured: outfile.write("Skipping validation because things aren't configured properly.") @@ -1042,7 +1045,7 @@ def _check_for_validation_errors(app=None): sys.stderr.write(s.read()) sys.exit(1) -def runserver(addr, port, use_reloader=True): +def runserver(addr, port, use_reloader=True, admin_media_dir=''): "Starts a lightweight Web server for development." from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException from django.core.handlers.wsgi import WSGIHandler @@ -1060,7 +1063,10 @@ def runserver(addr, port, use_reloader=True): print "Development server is running at http://%s:%s/" % (addr, port) print "Quit the server with %s." % quit_command try: - run(addr, int(port), AdminMediaHandler(WSGIHandler())) + import django + path = admin_media_dir or django.__path__[0] + '/contrib/admin/media' + handler = AdminMediaHandler(WSGIHandler(), path) + run(addr, int(port), handler) except WSGIServerException, e: # Use helpful error messages instead of ugly tracebacks. ERRORS = { @@ -1081,7 +1087,7 @@ def runserver(addr, port, use_reloader=True): autoreload.main(inner_run) else: inner_run() -runserver.args = '[--noreload] [optional port number, or ipaddr:port]' +runserver.args = '[--noreload] [--adminmedia=ADMIN_MEDIA_PATH] [optional port number, or ipaddr:port]' def createcachetable(tablename): "Creates the table needed to use the SQL cache backend" @@ -1267,7 +1273,8 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): help='Tells Django to NOT use the auto-reloader when running the development server.') parser.add_option('--verbosity', action='store', dest='verbosity', default='2', type='choice', choices=['0', '1', '2'], - help='Verbosity level; 0=minimal output, 1=normal output, 2=all output') + help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), + parser.add_option('--adminmedia', dest='admin_media_path', default='', help='Lets you manually specify the directory to serve admin media from when running the development server.'), options, args = parser.parse_args(argv[1:]) @@ -1331,11 +1338,12 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): addr, port = args[1].split(':') except ValueError: addr, port = '', args[1] - action_mapping[action](addr, port, options.use_reloader) + action_mapping[action](addr, port, options.use_reloader, options.admin_media_path) elif action == 'runfcgi': action_mapping[action](args[1:]) else: from django.db import models + validate(silent_success=True) try: mod_list = [models.get_app(app_label) for app_label in args[1:]] except ImportError, e: diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py index 72234a624b..15770f160e 100644 --- a/django/core/serializers/json.py +++ b/django/core/serializers/json.py @@ -16,7 +16,7 @@ class Serializer(PythonSerializer): Convert a queryset to JSON. """ def end_serialization(self): - simplejson.dump(self.objects, self.stream, cls=DateTimeAwareJSONEncoder) + simplejson.dump(self.objects, self.stream, cls=DateTimeAwareJSONEncoder, **self.options) def getvalue(self): return self.stream.getvalue() diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py index 4bd0e50e53..fe534d5da0 100644 --- a/django/core/servers/basehttp.py +++ b/django/core/servers/basehttp.py @@ -594,11 +594,14 @@ class AdminMediaHandler(object): Use this ONLY LOCALLY, for development! This hasn't been tested for security and is not super efficient. """ - def __init__(self, application): + def __init__(self, application, media_dir = None): from django.conf import settings - import django self.application = application - self.media_dir = django.__path__[0] + '/contrib/admin/media' + if not media_dir: + import django + self.media_dir = django.__path__[0] + '/contrib/admin/media' + else: + self.media_dir = media_dir self.media_url = settings.ADMIN_MEDIA_PREFIX def __call__(self, environ, start_response): diff --git a/django/core/servers/fastcgi.py b/django/core/servers/fastcgi.py index 7377bed1c5..c6507fe173 100644 --- a/django/core/servers/fastcgi.py +++ b/django/core/servers/fastcgi.py @@ -74,7 +74,7 @@ def fastcgi_help(message=None): print message return False -def runfastcgi(argset, **kwargs): +def runfastcgi(argset=[], **kwargs): options = FASTCGI_OPTIONS.copy() options.update(kwargs) for x in argset: diff --git a/django/core/validators.py b/django/core/validators.py index 8f40ceb51a..f2f3f44914 100644 --- a/django/core/validators.py +++ b/django/core/validators.py @@ -13,7 +13,7 @@ from django.utils.translation import gettext, gettext_lazy, ngettext from django.utils.functional import Promise, lazy import re -_datere = r'(19|2\d)\d{2}-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[12][0-9])|(?:3[0-1]))' +_datere = r'\d{4}-\d{1,2}-\d{1,2}' _timere = r'(?:[01]?[0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?' alnum_re = re.compile(r'^\w+$') alnumurl_re = re.compile(r'^[-\w/]+$') @@ -122,9 +122,29 @@ def isOnlyLetters(field_data, all_data): if not field_data.isalpha(): raise ValidationError, gettext("Only alphabetical characters are allowed here.") +def _isValidDate(date_string): + """ + A helper function used by isValidANSIDate and isValidANSIDatetime to + check if the date is valid. The date string is assumed to already be in + YYYY-MM-DD format. + """ + from datetime import date + # Could use time.strptime here and catch errors, but datetime.date below + # produces much friendlier error messages. + year, month, day = map(int, date_string.split('-')) + # This check is needed because strftime is used when saving the date + # value to the database, and strftime requires that the year be >=1900. + if year < 1900: + raise ValidationError, gettext('Year must be 1900 or later.') + try: + date(year, month, day) + except ValueError, e: + raise ValidationError, gettext('Invalid date: %s.' % e) + def isValidANSIDate(field_data, all_data): if not ansi_date_re.search(field_data): raise ValidationError, gettext('Enter a valid date in YYYY-MM-DD format.') + _isValidDate(field_data) def isValidANSITime(field_data, all_data): if not ansi_time_re.search(field_data): @@ -133,6 +153,7 @@ def isValidANSITime(field_data, all_data): def isValidANSIDatetime(field_data, all_data): if not ansi_datetime_re.search(field_data): raise ValidationError, gettext('Enter a valid date/time in YYYY-MM-DD HH:MM format.') + _isValidDate(field_data.split()[0]) def isValidEmail(field_data, all_data): if not email_re.search(field_data): @@ -227,9 +248,8 @@ def hasNoProfanities(field_data, all_data): catch 'motherfucker' as well. Raises a ValidationError such as: Watch your mouth! The words "f--k" and "s--t" are not allowed here. """ - bad_words = ['asshat', 'asshead', 'asshole', 'cunt', 'fuck', 'gook', 'nigger', 'shit'] # all in lower case field_data = field_data.lower() # normalize - words_seen = [w for w in bad_words if field_data.find(w) > -1] + words_seen = [w for w in settings.PROFANITIES_LIST if field_data.find(w) > -1] if words_seen: from django.utils.text import get_text_list plural = len(words_seen) > 1 @@ -352,10 +372,12 @@ class IsValidFloat(object): float(data) except ValueError: raise ValidationError, gettext("Please enter a valid decimal number.") - if len(data) > (self.max_digits + 1): + # Negative floats require more space to input. + max_allowed_length = data.startswith('-') and (self.max_digits + 2) or (self.max_digits + 1) + if len(data) > max_allowed_length: raise ValidationError, ngettext("Please enter a valid decimal number with at most %s total digit.", "Please enter a valid decimal number with at most %s total digits.", self.max_digits) % self.max_digits - if (not '.' in data and len(data) > (self.max_digits - self.decimal_places)) or ('.' in data and len(data) > (self.max_digits - (self.decimal_places - len(data.split('.')[1])) + 1)): + if (not '.' in data and len(data) > (max_allowed_length - self.decimal_places)) or ('.' in data and len(data) > (self.max_digits - (self.decimal_places - len(data.split('.')[1])) + 1)): raise ValidationError, ngettext( "Please enter a valid decimal number with a whole part of at most %s digit.", "Please enter a valid decimal number with a whole part of at most %s digits.", str(self.max_digits-self.decimal_places)) % str(self.max_digits-self.decimal_places) if '.' in data and len(data.split('.')[1]) > self.decimal_places: diff --git a/django/core/xheaders.py b/django/core/xheaders.py index e173bcbca8..69f6115839 100644 --- a/django/core/xheaders.py +++ b/django/core/xheaders.py @@ -13,9 +13,10 @@ def populate_xheaders(request, response, model, object_id): """ Adds the "X-Object-Type" and "X-Object-Id" headers to the given HttpResponse according to the given model and object_id -- but only if the - given HttpRequest object has an IP address within the INTERNAL_IPS setting. + given HttpRequest object has an IP address within the INTERNAL_IPS setting + or if the request is from a logged in staff member. """ from django.conf import settings - if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS: + if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or (request.user.is_authenticated() and request.user.is_staff): response['X-Object-Type'] = "%s.%s" % (model._meta.app_label, model._meta.object_name.lower()) response['X-Object-Id'] = str(object_id) diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index a3e8f0d584..3fe7eb43ac 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -4,10 +4,18 @@ SQLite3 backend for django. Requires pysqlite2 (http://pysqlite.org/). from django.db.backends import util try: - from pysqlite2 import dbapi2 as Database + try: + from sqlite3 import dbapi2 as Database + except ImportError: + from pysqlite2 import dbapi2 as Database except ImportError, e: + import sys from django.core.exceptions import ImproperlyConfigured - raise ImproperlyConfigured, "Error loading pysqlite2 module: %s" % e + if sys.version_info < (2, 5, 0): + module = 'pysqlite2' + else: + module = 'sqlite3' + raise ImproperlyConfigured, "Error loading %s module: %s" % (module, e) DatabaseError = Database.DatabaseError diff --git a/django/db/backends/util.py b/django/db/backends/util.py index 88318941c8..3ec1b41485 100644 --- a/django/db/backends/util.py +++ b/django/db/backends/util.py @@ -110,9 +110,11 @@ def dictfetchone(cursor): def dictfetchmany(cursor, number): "Returns a certain number of rows from a cursor as a dict" desc = cursor.description - return [_dict_helper(desc, row) for row in cursor.fetchmany(number)] + for row in cursor.fetchmany(number): + yield _dict_helper(desc, row) def dictfetchall(cursor): "Returns all rows from a cursor as a dict" desc = cursor.description - return [_dict_helper(desc, row) for row in cursor.fetchall()] + for row in cursor.fetchall(): + yield _dict_helper(desc, row) diff --git a/django/db/models/fields/generic.py b/django/db/models/fields/generic.py index 5f4de40e69..7d7651029c 100644 --- a/django/db/models/fields/generic.py +++ b/django/db/models/fields/generic.py @@ -117,7 +117,7 @@ class GenericRelation(RelatedField, Field): return self.object_id_field_name def m2m_reverse_name(self): - return self.model._meta.pk.attname + return self.object_id_field_name def contribute_to_class(self, cls, name): super(GenericRelation, self).contribute_to_class(cls, name) diff --git a/django/db/models/manipulators.py b/django/db/models/manipulators.py index b0ce48dec5..faf453b86b 100644 --- a/django/db/models/manipulators.py +++ b/django/db/models/manipulators.py @@ -215,8 +215,8 @@ class AutomaticManipulator(forms.Manipulator): # Save many-to-many objects. for f in related.opts.many_to_many: if child_follow.get(f.name, None) and not f.rel.edit_inline: - was_changed = getattr(new_rel_obj, 'set_%s' % f.name)(rel_new_data[f.attname]) - if self.change and was_changed: + setattr(new_rel_obj, f.name, f.rel.to.objects.filter(pk__in=rel_new_data[f.attname])) + if self.change: self.fields_changed.append('%s for %s "%s"' % (f.verbose_name, related.opts.verbose_name, new_rel_obj)) # If, in the change stage, all of the core fields were blank and diff --git a/django/db/models/query.py b/django/db/models/query.py index 0b85c3f515..eb4b3b63ae 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -712,14 +712,10 @@ def parse_lookup(kwarg_items, opts): # Extract the last elements of the kwarg. # The very-last is the lookup_type (equals, like, etc). # The second-last is the table column on which the lookup_type is - # to be performed. - # The exceptions to this are: - # 1) "pk", which is an implicit id__exact; - # if we find "pk", make the lookup_type "exact', and insert - # a dummy name of None, which we will replace when - # we know which table column to grab as the primary key. - # 2) If there is only one part, or the last part is not a query - # term, assume that the query is an __exact + # to be performed. If this name is 'pk', it will be substituted with + # the name of the primary key. + # If there is only one part, or the last part is not a query + # term, assume that the query is an __exact lookup_type = path.pop() if lookup_type == 'pk': lookup_type = 'exact' @@ -766,7 +762,7 @@ def lookup_inner(path, lookup_type, value, opts, table, column): name = path.pop(0) # Has the primary key been requested? If so, expand it out # to be the name of the current class' primary key - if name is None: + if name is None or name == 'pk': name = current_opts.pk.name # Try to find the name in the fields associated with the current class diff --git a/django/forms/__init__.py b/django/forms/__init__.py index 730f7a54da..759a32ba81 100644 --- a/django/forms/__init__.py +++ b/django/forms/__init__.py @@ -2,7 +2,7 @@ from django.core import validators from django.core.exceptions import PermissionDenied from django.utils.html import escape from django.conf import settings -from django.utils.translation import gettext, gettext_lazy, ngettext +from django.utils.translation import gettext, ngettext FORM_FIELD_ID_PREFIX = 'id_' @@ -343,7 +343,7 @@ class FormField(object): def get_validation_errors(self, new_data): errors = {} if self.is_required and not new_data.get(self.field_name, False): - errors.setdefault(self.field_name, []).append(gettext_lazy('This field is required.')) + errors.setdefault(self.field_name, []).append(gettext('This field is required.')) return errors try: for validator in self.validator_list: @@ -434,11 +434,11 @@ class HiddenField(FormField): (self.get_id(), self.field_name, escape(data)) class CheckboxField(FormField): - def __init__(self, field_name, checked_by_default=False, validator_list=None): + def __init__(self, field_name, checked_by_default=False, validator_list=None, is_required=False): if validator_list is None: validator_list = [] self.field_name = field_name self.checked_by_default = checked_by_default - self.is_required = False # because the validator looks for these + self.is_required = is_required self.validator_list = validator_list[:] def render(self, data): @@ -639,8 +639,8 @@ class CheckboxSelectMultipleField(SelectMultipleField): checked_html = ' checked="checked"' field_name = '%s%s' % (self.field_name, value) output.append('
          • ' % \ - (self.get_id() + value , self.__class__.__name__, field_name, checked_html, - self.get_id() + value, choice)) + (self.get_id() + escape(value), self.__class__.__name__, field_name, checked_html, + self.get_id() + escape(value), choice)) output.append('
          ') return '\n'.join(output) @@ -743,7 +743,7 @@ class FloatField(TextField): if validator_list is None: validator_list = [] self.max_digits, self.decimal_places = max_digits, decimal_places validator_list = [self.isValidFloat] + validator_list - TextField.__init__(self, field_name, max_digits+1, max_digits+1, is_required, validator_list) + TextField.__init__(self, field_name, max_digits+2, max_digits+2, is_required, validator_list) def isValidFloat(self, field_data, all_data): v = validators.IsValidFloat(self.max_digits, self.decimal_places) @@ -952,10 +952,7 @@ class USStateField(TextField): raise validators.CriticalValidationError, e.messages def html2python(data): - if data: - return data.upper() # Should always be stored in upper case - else: - return None + return data.upper() # Should always be stored in upper case html2python = staticmethod(html2python) class CommaSeparatedIntegerField(TextField): @@ -972,9 +969,19 @@ class CommaSeparatedIntegerField(TextField): except validators.ValidationError, e: raise validators.CriticalValidationError, e.messages + def render(self, data): + if data is None: + data = '' + elif isinstance(data, (list, tuple)): + data = ','.join(data) + return super(CommaSeparatedIntegerField, self).render(data) + class RawIdAdminField(CommaSeparatedIntegerField): def html2python(data): - return data.split(',') + if data: + return data.split(',') + else: + return [] html2python = staticmethod(html2python) class XMLLargeTextField(LargeTextField): diff --git a/django/http/__init__.py b/django/http/__init__.py index c4ac302ec5..bb0e973aae 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -161,10 +161,10 @@ class HttpResponse(object): if not mimetype: mimetype = "%s; charset=%s" % (settings.DEFAULT_CONTENT_TYPE, settings.DEFAULT_CHARSET) if hasattr(content, '__iter__'): - self._iterator = content + self._container = content self._is_string = False else: - self._iterator = [content] + self._container = [content] self._is_string = True self.headers = {'Content-Type': mimetype} self.cookies = SimpleCookie() @@ -213,32 +213,37 @@ class HttpResponse(object): self.cookies[key]['max-age'] = 0 def _get_content(self): - content = ''.join(self._iterator) + content = ''.join(self._container) if isinstance(content, unicode): content = content.encode(self._charset) return content def _set_content(self, value): - self._iterator = [value] + self._container = [value] self._is_string = True content = property(_get_content, _set_content) - def _get_iterator(self): - "Output iterator. Converts data into client charset if necessary." - for chunk in self._iterator: - if isinstance(chunk, unicode): - chunk = chunk.encode(self._charset) - yield chunk + def __iter__(self): + self._iterator = self._container.__iter__() + return self - iterator = property(_get_iterator) + def next(self): + chunk = self._iterator.next() + if isinstance(chunk, unicode): + chunk = chunk.encode(self._charset) + return chunk + + def close(self): + if hasattr(self._container, 'close'): + self._container.close() # The remaining methods partially implement the file-like object interface. # See http://docs.python.org/lib/bltin-file-objects.html def write(self, content): if not self._is_string: raise Exception, "This %s instance is not writable" % self.__class__ - self._iterator.append(content) + self._container.append(content) def flush(self): pass @@ -246,7 +251,7 @@ class HttpResponse(object): def tell(self): if not self._is_string: raise Exception, "This %s instance cannot tell its position" % self.__class__ - return sum([len(chunk) for chunk in self._iterator]) + return sum([len(chunk) for chunk in self._container]) class HttpResponseRedirect(HttpResponse): def __init__(self, redirect_to): diff --git a/django/middleware/common.py b/django/middleware/common.py index d63b71fed7..4f060b8590 100644 --- a/django/middleware/common.py +++ b/django/middleware/common.py @@ -64,8 +64,9 @@ class CommonMiddleware(object): is_internal = referer and (domain in referer) path = request.get_full_path() if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer): + ua = request.META.get('HTTP_USER_AGENT','') mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain), - "Referrer: %s\nRequested URL: %s\n" % (referer, request.get_full_path())) + "Referrer: %s\nRequested URL: %s\nUser Agent: %s\n" % (referer, request.get_full_path(), ua)) return response # Use ETags, if requested. diff --git a/django/middleware/doc.py b/django/middleware/doc.py index 6600e588cd..48c155c392 100644 --- a/django/middleware/doc.py +++ b/django/middleware/doc.py @@ -7,11 +7,12 @@ class XViewMiddleware(object): """ def process_view(self, request, view_func, view_args, view_kwargs): """ - If the request method is HEAD and the IP is internal, quickly return - with an x-header indicating the view function. This is used by the - documentation module to lookup the view function for an arbitrary page. + If the request method is HEAD and either the IP is internal or the + user is a logged-in staff member, quickly return with an x-header + indicating the view function. This is used by the documentation module + to lookup the view function for an arbitrary page. """ - if request.method == 'HEAD' and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS: + if request.method == 'HEAD' and (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or (request.user.is_authenticated() and request.user.is_staff)): response = http.HttpResponse() response['X-View'] = "%s.%s" % (view_func.__module__, view_func.__name__) return response diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py index a2e9d2f405..cf1d3d5f6d 100644 --- a/django/template/defaultfilters.py +++ b/django/template/defaultfilters.py @@ -15,7 +15,7 @@ register = Library() def addslashes(value): "Adds slashes - useful for passing strings to JavaScript, for example." - return value.replace('"', '\\"').replace("'", "\\'") + return value.replace('\\', '\\\\').replace('"', '\\"').replace("'", "\\'") def capfirst(value): "Capitalizes the first character of the value" diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 691b40f332..07e579bf9d 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -13,14 +13,18 @@ class CommentNode(Node): return '' class CycleNode(Node): - def __init__(self, cyclevars): + def __init__(self, cyclevars, variable_name=None): self.cyclevars = cyclevars self.cyclevars_len = len(cyclevars) self.counter = -1 + self.variable_name = variable_name def render(self, context): self.counter += 1 - return self.cyclevars[self.counter % self.cyclevars_len] + value = self.cyclevars[self.counter % self.cyclevars_len] + if self.variable_name: + context[self.variable_name] = value + return value class DebugNode(Node): def render(self, context): @@ -125,6 +129,8 @@ class IfChangedNode(Node): self._last_seen = None def render(self, context): + if context.has_key('forloop') and context['forloop']['first']: + self._last_seen = None content = self.nodelist.render(context) if content != self._last_seen: firstloop = (self._last_seen == None) @@ -385,7 +391,7 @@ def cycle(parser, token): raise TemplateSyntaxError("Second 'cycle' argument must be 'as'") cyclevars = [v for v in args[1].split(",") if v] # split and kill blanks name = args[3] - node = CycleNode(cyclevars) + node = CycleNode(cyclevars, name) if not hasattr(parser, '_namedCycleNodes'): parser._namedCycleNodes = {} diff --git a/django/test/doctest.py b/django/test/doctest.py index d600d15e52..3b364f0a75 100644 --- a/django/test/doctest.py +++ b/django/test/doctest.py @@ -1319,13 +1319,16 @@ class DocTestRunner: __LINECACHE_FILENAME_RE = re.compile(r'[\w\.]+)' r'\[(?P\d+)\]>$') - def __patched_linecache_getlines(self, filename): + def __patched_linecache_getlines(self, filename, module_globals=None): m = self.__LINECACHE_FILENAME_RE.match(filename) if m and m.group('name') == self.test.name: example = self.test.examples[int(m.group('examplenum'))] return example.source.splitlines(True) else: - return self.save_linecache_getlines(filename) + if sys.version_info < (2, 5, 0): + return self.save_linecache_getlines(filename) + else: + return self.save_linecache_getlines(filename, module_globals) def run(self, test, compileflags=None, out=None, clear_globs=True): """ diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py index 6aef313d35..cecb4da170 100644 --- a/django/utils/datastructures.py +++ b/django/utils/datastructures.py @@ -14,6 +14,9 @@ class MergeDict(object): pass raise KeyError + def __contains__(self, key): + return self.has_key(key) + def get(self, key, default): try: return self[key] diff --git a/django/utils/simplejson/scanner.py b/django/utils/simplejson/scanner.py index c2e9b6eb89..b9244cfed1 100644 --- a/django/utils/simplejson/scanner.py +++ b/django/utils/simplejson/scanner.py @@ -3,12 +3,11 @@ Iterator based sre token scanner """ import sre_parse, sre_compile, sre_constants from sre_constants import BRANCH, SUBPATTERN -from sre import VERBOSE, MULTILINE, DOTALL import re __all__ = ['Scanner', 'pattern'] -FLAGS = (VERBOSE | MULTILINE | DOTALL) +FLAGS = (re.VERBOSE | re.MULTILINE | re.DOTALL) class Scanner(object): def __init__(self, lexicon, flags=FLAGS): self.actions = [None] diff --git a/django/utils/text.py b/django/utils/text.py index 7df9bc03b7..9e7bb3b6c4 100644 --- a/django/utils/text.py +++ b/django/utils/text.py @@ -94,7 +94,8 @@ def compress_string(s): return zbuf.getvalue() ustring_re = re.compile(u"([\u0080-\uffff])") -def javascript_quote(s): + +def javascript_quote(s, quote_double_quotes=False): def fix(match): return r"\u%04x" % ord(match.group(1)) @@ -104,9 +105,12 @@ def javascript_quote(s): elif type(s) != unicode: raise TypeError, s s = s.replace('\\', '\\\\') + s = s.replace('\r', '\\r') s = s.replace('\n', '\\n') s = s.replace('\t', '\\t') s = s.replace("'", "\\'") + if quote_double_quotes: + s = s.replace('"', '"') return str(ustring_re.sub(fix, s)) smart_split_re = re.compile('("(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'|[^\\s]+)') diff --git a/django/views/debug.py b/django/views/debug.py index 6178bdb83b..a7f44d17b3 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -4,7 +4,7 @@ from django.utils.html import escape from django.http import HttpResponseServerError, HttpResponseNotFound import os, re -HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD') +HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD|PROFANITIES_LIST') def linebreak_iter(template_source): yield 0 diff --git a/docs/authentication.txt b/docs/authentication.txt index f161e9d357..31a894512a 100644 --- a/docs/authentication.txt +++ b/docs/authentication.txt @@ -456,6 +456,10 @@ As a shortcut, you can use the convenient ``user_passes_test`` decorator:: # ... my_view = user_passes_test(lambda u: u.has_perm('polls.can_vote'))(my_view) +We are using this particular test as a relatively simple example, however be +aware that if you just want to test if a permission is available to a user, +you can use the ``permission_required()`` decorator described below. + Here's the same thing, using Python 2.4's decorator syntax:: from django.contrib.auth.decorators import user_passes_test @@ -488,6 +492,24 @@ Example in Python 2.4 syntax:: def my_view(request): # ... +The permission_required decorator +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since checking whether a user has a particular permission available to them is a +relatively common operation, Django provides a shortcut for that particular +case: the ``permission_required()`` decorator. Using this decorator, the +earlier example can be written as:: + + from django.contrib.auth.decorators import permission_required + + def my_view(request): + # ... + + my_view = permission_required('polls.can_vote')(my_view) + +Note that ``permission_required()`` also takes an optional ``login_url`` +parameter. + Limiting access to generic views -------------------------------- @@ -677,7 +699,7 @@ timestamps. Messages are used by the Django admin after successful actions. For example, ``"The poll Foo was created successfully."`` is a message. -The API is simple:: +The API is simple: * To create a new message, use ``user_obj.message_set.create(message='message_text')``. diff --git a/docs/contributing.txt b/docs/contributing.txt index 3d101c3241..7ecda7425c 100644 --- a/docs/contributing.txt +++ b/docs/contributing.txt @@ -247,18 +247,23 @@ Django tarball. It's our policy to make sure all tests pass at all times. The tests cover: - * Models and the database API (``tests/testapp/models``). - * The cache system (``tests/otherthests/cache.py``). - * The ``django.utils.dateformat`` module (``tests/othertests/dateformat.py``). - * Database typecasts (``tests/othertests/db_typecasts.py``). - * The template system (``tests/othertests/templates.py`` and - ``tests/othertests/defaultfilters.py``). - * ``QueryDict`` objects (``tests/othertests/httpwrappers.py``). - * Markup template tags (``tests/othertests/markup.py``). - * The ``django.utils.timesince`` module (``tests/othertests/timesince.py``). + * 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/``). We appreciate any and all contributions to the test suite! +The Django tests all use the testing infrastructure that ships with Django for +testing applications. See `Testing Django Applications`_ for an explanation of +how to write new tests. + +.. _Testing Django Applications: http://www.djangoproject.com/documentation/testing/ + Running the unit tests ---------------------- @@ -268,10 +273,14 @@ To run the tests, ``cd`` to the ``tests/`` directory and type:: Yes, the unit tests need a settings module, but only for database connection info -- the ``DATABASE_ENGINE``, ``DATABASE_USER`` and ``DATABASE_PASSWORD``. +You will also need a ``ROOT_URLCONF`` setting (it's value is ignored; it just +needs to be present) and a ``SITE_ID`` setting (any integer value will do) in +order for all the tests to pass. -The unit tests will not touch your database; they create a new database, called -``django_test_db``, which is deleted when the tests are finished. This means -your user account needs permission to execute ``CREATE DATABASE``. +The unit tests will not touch your existing databases; they create a new +database, called ``django_test_db``, which is deleted when the tests are +finished. This means your user account needs permission to execute ``CREATE +DATABASE``. Requesting features =================== diff --git a/docs/db-api.txt b/docs/db-api.txt index bd178dbd7d..0d1f049601 100644 --- a/docs/db-api.txt +++ b/docs/db-api.txt @@ -1140,7 +1140,7 @@ The pk lookup shortcut ---------------------- For convenience, Django provides a ``pk`` lookup type, which stands for -"primary_key". This is shorthand for "an exact lookup on the primary-key." +"primary_key". In the example ``Blog`` model, the primary key is the ``id`` field, so these three statements are equivalent:: @@ -1149,6 +1149,14 @@ three statements are equivalent:: Blog.objects.get(id=14) # __exact is implied Blog.objects.get(pk=14) # pk implies id__exact +The use of ``pk`` isn't limited to ``__exact`` queries -- any query term +can be combined with ``pk`` to perform a query on the primary key of a model:: + + # Get blogs entries with id 1, 4 and 7 + Blog.objects.filter(pk__in=[1,4,7]) + # Get all blog entries with id > 14 + Blog.objects.filter(pk__gt=14) + ``pk`` lookups also work across joins. For example, these three statements are equivalent:: @@ -1511,7 +1519,7 @@ Many-to-many relationships -------------------------- Both ends of a many-to-many relationship get automatic API access to the other -end. The API works just as a "backward" one-to-many relationship. See _Backward +end. The API works just as a "backward" one-to-many relationship. See Backward_ above. The only difference is in the attribute naming: The model that defines the diff --git a/docs/django-admin.txt b/docs/django-admin.txt index ffafc83972..ed162f0520 100644 --- a/docs/django-admin.txt +++ b/docs/django-admin.txt @@ -352,8 +352,9 @@ options. **New in Django development version** -Inform django-admin that the user should NOT be prompted for any input. Useful if -the django-admin script will be executed as an unattended, automated script. +Inform django-admin that the user should NOT be prompted for any input. Useful +if the django-admin script will be executed as an unattended, automated +script. --noreload ---------- @@ -383,6 +384,19 @@ Verbosity determines the amount of notification and debug information that will be printed to the console. '0' is no output, '1' is normal output, and `2` is verbose output. +--adminmedia +------------ + +**New in Django development version** + +Example usage:: + django-admin.py manage.py --adminmedia=/tmp/new-admin-style/ + +Tell Django where to find the various stylesheets and Javascript files for the +admin interface when running the development server. Normally these files are +served out of the Django source tree, but since some designers change these +files for their site, this option allows you to test against custom versions. + Extra niceties ============== diff --git a/docs/forms.txt b/docs/forms.txt index d6ef6f791b..0ffb0bdcb7 100644 --- a/docs/forms.txt +++ b/docs/forms.txt @@ -136,7 +136,7 @@ template:: {% endblock %} Before we get back to the problems with these naive set of views, let's go over -some salient points of the above template:: +some salient points of the above template: * Field "widgets" are handled for you: ``{{ form.field }}`` automatically creates the "right" type of widget for the form, as you can see with the @@ -148,8 +148,8 @@ some salient points of the above template:: If you must use tables, use tables. If you're a semantic purist, you can probably find better HTML than in the above template. - * To avoid name conflicts, the ``id``s of form elements take the form - "id_*fieldname*". + * To avoid name conflicts, the ``id`` values of form elements take the + form "id_*fieldname*". By creating a creation form we've solved problem number 3 above, but we still don't have any validation. Let's revise the validation issue by writing a new @@ -481,6 +481,33 @@ the data being validated. Also, because consistency in user interfaces is important, we strongly urge you to put punctuation at the end of your validation messages. +When Are Validators Called? +--------------------------- + +After a form has been submitted, Django first checks to see that all the +required fields are present and non-empty. For each field that passes that +test *and if the form submission contained data* for that field, all the +validators for that field are called in turn. The emphasised portion in the +last sentence is important: if a form field is not submitted (because it +contains no data -- which is normal HTML behaviour), the validators are not +run against the field. + +This feature is particularly important for models using +``models.BooleanField`` or custom manipulators using things like +``forms.CheckBoxField``. If the checkbox is not selected, it will not +contribute to the form submission. + +If you would like your validator to *always* run, regardless of whether the +field it is attached to contains any data, set the ``always_test`` attribute +on the validator function. For example:: + + def my_custom_validator(field_data, all_data): + # ... + + my_custom_validator.always_test = True + +This validator will always be executed for any field it is attached to. + Ready-made Validators --------------------- diff --git a/docs/model-api.txt b/docs/model-api.txt index b46a11c463..c6c4200239 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -543,7 +543,9 @@ The default value for the field. ``editable`` ~~~~~~~~~~~~ -If ``False``, the field will not be editable in the admin. Default is ``True``. +If ``False``, the field will not be editable in the admin or via form +processing using the object's ``AddManipulator`` or ``ChangeManipulator`` +classes. Default is ``True``. ``help_text`` ~~~~~~~~~~~~~ diff --git a/docs/serialization.txt b/docs/serialization.txt index 25199e7a50..694e2d25db 100644 --- a/docs/serialization.txt +++ b/docs/serialization.txt @@ -96,6 +96,21 @@ Django "ships" with a few included serializers: .. _json: http://json.org/ .. _simplejson: http://undefined.org/python/#simplejson +Notes For Specific Serialization Formats +---------------------------------------- + +json +~~~~ + +If you are using UTF-8 (or any other non-ASCII encoding) data with the JSON +serializer, you must pass ``ensure_ascii=False`` as a parameter to the +``serialize()`` call. Otherwise the output will not be encoded correctly. + +For example:: + + json_serializer = serializers.get_serializer("json") + json_serializer.serialize(queryset, ensure_ascii=False, stream=response) + Writing custom serializers `````````````````````````` diff --git a/docs/settings.txt b/docs/settings.txt index b927b62ca7..65113b3c30 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -596,6 +596,12 @@ Whether to prepend the "www." subdomain to URLs that don't have it. This is only used if ``CommonMiddleware`` is installed (see the `middleware docs`_). See also ``APPEND_SLASH``. +PROFANITIES_LIST +---------------- + +A list of profanities that will trigger a validation error when the +``hasNoProfanities`` validator is called. + ROOT_URLCONF ------------ diff --git a/docs/templates_python.txt b/docs/templates_python.txt index 950b122339..bc05d769ad 100644 --- a/docs/templates_python.txt +++ b/docs/templates_python.txt @@ -763,17 +763,17 @@ will use the function's name as the tag name. Shortcut for simple tags ~~~~~~~~~~~~~~~~~~~~~~~~ -Many template tags take a single argument -- a string or a template variable -reference -- and return a string after doing some processing based solely on +Many template tags take a number of arguments -- strings or a template variables +-- and return a string after doing some processing based solely on the input argument and some external information. For example, the ``current_time`` tag we wrote above is of this variety: we give it a format string, it returns the time as a string. To ease the creation of the types of tags, Django provides a helper function, ``simple_tag``. This function, which is a method of -``django.template.Library``, takes a function that accepts one argument, wraps -it in a ``render`` function and the other necessary bits mentioned above and -registers it with the template system. +``django.template.Library``, takes a function that accepts any number of +arguments, wraps it in a ``render`` function and the other necessary bits +mentioned above and registers it with the template system. Our earlier ``current_time`` function could thus be written like this:: @@ -789,11 +789,16 @@ In Python 2.4, the decorator syntax also works:: ... A couple of things to note about the ``simple_tag`` helper function: - * Only the (single) argument is passed into our function. * Checking for the required number of arguments, etc, has already been done by the time our function is called, so we don't need to do that. * The quotes around the argument (if any) have already been stripped away, so we just receive a plain string. + * If the argument was a template variable, our function is passed the + current value of the variable, not the variable itself. + +When your template tag does not need access to the current context, writing a +function to work with the input values and using the ``simple_tag`` helper is +the easiest way to create a new tag. Inclusion tags ~~~~~~~~~~~~~~ diff --git a/setup.py b/setup.py index 1d5c5a0cda..a8d3e9fbb7 100644 --- a/setup.py +++ b/setup.py @@ -26,6 +26,7 @@ setup( 'media/js/*.js', 'media/js/admin/*js'], 'django.contrib.comments': ['templates/comments/*.html'], + 'django.contrib.sitemaps': ['templates/*.xml'], }, scripts = ['django/bin/django-admin.py'], zip_safe = False, diff --git a/tests/modeltests/basic/models.py b/tests/modeltests/basic/models.py index acbea0d1e0..5638865f31 100644 --- a/tests/modeltests/basic/models.py +++ b/tests/modeltests/basic/models.py @@ -86,6 +86,10 @@ DoesNotExist: Article matching query does not exist. >>> Article.objects.get(pk=1) +# pk can be used as a shortcut for the primary key name in any query +>>> Article.objects.filter(pk__in=[1]) +[] + # Model instances of the same type and same ID are considered equal. >>> a = Article.objects.get(pk=1) >>> b = Article.objects.get(pk=1) diff --git a/tests/modeltests/custom_pk/models.py b/tests/modeltests/custom_pk/models.py index ca788f6aa5..fd0901da3c 100644 --- a/tests/modeltests/custom_pk/models.py +++ b/tests/modeltests/custom_pk/models.py @@ -51,6 +51,10 @@ DoesNotExist: Employee matching query does not exist. >>> Employee.objects.get(employee_code__exact='ABC123') +# pk can be used as a substitute for the primary key. +>>> Employee.objects.filter(pk__in=['ABC123','XYZ456']) +[, ] + # Fran got married and changed her last name. >>> fran = Employee.objects.get(pk='XYZ456') >>> fran.last_name = 'Jones' diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index 9b1cfda833..32d6ef5202 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -15,6 +15,9 @@ r""" >>> addslashes('"double quotes" and \'single quotes\'') '\\"double quotes\\" and \\\'single quotes\\\'' +>>> addslashes(r'\ : backslashes, too') +'\\\\ : backslashes, too' + >>> capfirst('hello world') 'Hello world' diff --git a/tests/regressiontests/initial_sql_regress/sql/simple.sql b/tests/regressiontests/initial_sql_regress/sql/simple.sql index ddb08bc91f..ca9bd40dab 100644 --- a/tests/regressiontests/initial_sql_regress/sql/simple.sql +++ b/tests/regressiontests/initial_sql_regress/sql/simple.sql @@ -4,4 +4,5 @@ INSERT INTO initial_sql_regress_simple (name) VALUES ('Ringo'); INSERT INTO initial_sql_regress_simple (name) VALUES ('George'); INSERT INTO initial_sql_regress_simple (name) VALUES ('Miles O''Brien'); INSERT INTO initial_sql_regress_simple (name) VALUES ('Semicolon;Man'); +INSERT INTO initial_sql_regress_simple (name) VALUES ('This line has a Windows line ending'); diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 5a8dd2d6a2..368a46b8fb 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -187,6 +187,7 @@ class Templates(unittest.TestCase): 'cycle05': ('{% cycle %}', {}, template.TemplateSyntaxError), 'cycle06': ('{% cycle a %}', {}, template.TemplateSyntaxError), 'cycle07': ('{% cycle a,b,c as foo %}{% cycle bar %}', {}, template.TemplateSyntaxError), + 'cycle08': ('{% cycle a,b,c as foo %}{% cycle foo %}{{ foo }}{{ foo }}{% cycle foo %}{{ foo }}', {}, 'abbbcc'), ### EXCEPTIONS ############################################################ @@ -304,6 +305,10 @@ class Templates(unittest.TestCase): 'ifchanged01': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,2,3) }, '123'), 'ifchanged02': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,3) }, '13'), 'ifchanged03': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,1) }, '1'), + 'ifchanged04': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 2, 3), 'numx': (2, 2, 2)}, '122232'), + 'ifchanged05': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (1, 2, 3)}, '1123123123'), + 'ifchanged06': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2)}, '1222'), + 'ifchanged07': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% for y in numy %}{% ifchanged %}{{ y }}{% endifchanged %}{% endfor %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2), 'numy': (3, 3, 3)}, '1233323332333'), ### IFEQUAL TAG ########################################################### 'ifequal01': ("{% ifequal a b %}yes{% endifequal %}", {"a": 1, "b": 2}, ""),