From 1bb4fa2cb66269b1eff3b7d73f8c7864c0622368 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Mon, 25 Sep 2006 15:39:20 +0000 Subject: [PATCH] sqlalchemy: Merged revisions 3770 to 3831 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/sqlalchemy@3832 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- AUTHORS | 9 + README | 4 +- django/conf/global_settings.py | 5 + django/conf/locale/da/LC_MESSAGES/django.mo | Bin 16153 -> 32010 bytes django/conf/locale/da/LC_MESSAGES/django.po | 708 +++--- django/conf/locale/de/LC_MESSAGES/django.mo | Bin 32926 -> 37729 bytes django/conf/locale/de/LC_MESSAGES/django.po | 717 +++++-- django/conf/locale/en/LC_MESSAGES/django.mo | Bin 536 -> 627 bytes django/conf/locale/en/LC_MESSAGES/django.po | 678 ++++-- django/conf/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 14429 bytes django/conf/locale/tr/LC_MESSAGES/django.po | 1898 +++++++++++++++++ .../conf/locale/zh_CN/LC_MESSAGES/django.mo | Bin 30798 -> 30798 bytes .../conf/locale/zh_CN/LC_MESSAGES/django.po | 4 +- .../conf/locale/zh_CN/LC_MESSAGES/djangojs.mo | Bin 1513 -> 1505 bytes .../conf/locale/zh_CN/LC_MESSAGES/djangojs.po | 28 +- .../admin/templatetags/admin_modify.py | 4 +- django/contrib/admin/views/main.py | 2 + django/contrib/auth/decorators.py | 8 + django/contrib/auth/forms.py | 6 +- django/contrib/auth/handlers/modpython.py | 31 +- django/core/context_processors.py | 6 +- django/core/handlers/modpython.py | 28 +- django/core/handlers/wsgi.py | 49 +- django/core/management.py | 24 +- django/core/serializers/json.py | 2 +- django/core/servers/basehttp.py | 9 +- django/core/servers/fastcgi.py | 2 +- django/core/validators.py | 32 +- django/core/xheaders.py | 5 +- django/db/backends/sqlite3/base.py | 12 +- django/db/backends/util.py | 6 +- django/db/models/fields/generic.py | 2 +- django/db/models/manipulators.py | 4 +- django/db/models/query.py | 14 +- django/forms/__init__.py | 31 +- django/http/__init__.py | 31 +- django/middleware/common.py | 3 +- django/middleware/doc.py | 9 +- django/template/defaultfilters.py | 2 +- django/template/defaulttags.py | 12 +- django/test/doctest.py | 7 +- django/utils/datastructures.py | 3 + django/utils/simplejson/scanner.py | 3 +- django/utils/text.py | 6 +- django/views/debug.py | 2 +- docs/authentication.txt | 24 +- docs/contributing.txt | 33 +- docs/db-api.txt | 12 +- docs/django-admin.txt | 18 +- docs/forms.txt | 33 +- docs/model-api.txt | 4 +- docs/serialization.txt | 15 + docs/settings.txt | 6 + docs/templates_python.txt | 17 +- setup.py | 1 + tests/modeltests/basic/models.py | 4 + tests/modeltests/custom_pk/models.py | 4 + tests/regressiontests/defaultfilters/tests.py | 3 + .../initial_sql_regress/sql/simple.sql | 1 + tests/regressiontests/templates/tests.py | 5 + 60 files changed, 3585 insertions(+), 1001 deletions(-) create mode 100644 django/conf/locale/tr/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/tr/LC_MESSAGES/django.po 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 668f02cbefb088c5a34a1e77fcb7834cc7023dcb..9f86e56407653f78b699b4e95b2a4df457b2e6ae 100644 GIT binary patch literal 32010 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 Q+7tIzlRf>g4T{nI5A$&YHvj+t delta 6739 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 COaW8? 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 a4f4af172e4528b05d0d1084b67b3cf23e69fb0e..aef68099d31c60505f1b2b69b9eb48d6ac10ef9f 100644 GIT binary patch delta 13304 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\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 0a4947bfc18009b629a11b77c2afd2e5d5a3fa64..6c4dbe4b4ef18e42500d5eb273abe9a38f71ee2b 100644 GIT binary patch delta 259 zcmbQi@|mUno)F7a1|VPuVi_O~0b*_-?g3&D*a5`+K)e%(LEfHa6752TrabS97nDlucog$m?D1Q=L>l0YT{ z3lPHq$N-Qg5CA!pVPdO^y05=qh)2AOV`RLWe~_FO914^}a8Zw!~E cu92yNp{bRL@nmJj&s=T_SquRTZVHhM0B~|4761SM delta 169 zcmey&GJ~c5o)F7a1|VPsVi_QI0b+I_&H-W&=m27VAnpWWZXlis#KJ(l6w2QTq)iza z7>)vIP9XjbWU~QjRwf9a2S@{j7{s77kO>CNKoV#t8v{_Bfo0-W6P6H9U)RY3j4@oM Vx`t*7h6YxK29wJeKQjd|004=@5%B;3 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 0000000000000000000000000000000000000000..ba3dd15be8fe596f57cf90359964f3680ddff7c2 GIT binary patch literal 14429 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, 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 9fc04b9395f1b130baf7c390706c64e409a8a7f8..0d6bf90c0ee6f3de4ac035c8640733427dbc1031 100644 GIT binary patch delta 37 tcmX^2f$`i2#tl4vT$Z{9h6+YTRtBb<#r(pB*`Cd9emQf(=HkTLVgLzh4wL`@ delta 37 tcmX^2f$`i2#tl4vT&B8)<_d5 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 983a8a7154e7e138dcde32216d80c155ef1253c9..ec7580a8629f346ef84074a06bd51e93dd549820 100644 GIT binary patch delta 435 zcmaFK{g8XYnR+Wm1_m2u1_mw$28MDL1_m}D-2|jLfpjO7KN(8T0@6Z2@r6+S79h<7 zDA_&Fe*0OVhV^37N$YcWdcN&|(0SQ!}Pfpi{_b_LRXKpJG_6)1fhN*wf!{ax`;rN~Eh}kgl)4u8X6BhrgAtr*@RTpDUM7VsVLX zNKs;5aZX}Mevy@eTd0qZf}f+WtAb5#VueF$MSgi|l3reFi5*aFUV3R_da7, 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}, ""),