diff --git a/AUTHORS b/AUTHORS index 1c33bb9a7b..564cd0a139 100644 --- a/AUTHORS +++ b/AUTHORS @@ -42,6 +42,7 @@ people who have submitted patches, reported bugs, added translations, helped answer newbie questions, and generally made Django that much better: adurdin@gmail.com + alang@bright-green.com Daniel Alves Barbosa de Oliveira Vaz Andreas andy@jadedplanet.net @@ -164,11 +165,11 @@ answer newbie questions, and generally made Django that much better: Robin Munn Robert Myers Nebojša Dorđević + Gopal Narayanan Fraser Nevett Sam Newman Neal Norwitz oggie rob - onaiort@gmail.com Jay Parlar pavithran s Barry Pederson @@ -187,9 +188,11 @@ answer newbie questions, and generally made Django that much better: Brian Ray remco@diji.biz rhettg@gmail.com + Henrique Romano Armin Ronacher Oliver Rutherfurd Ivan Sagalaev (Maniac) + Vinay Sajip David Schein scott@staplefish.com serbaut@gmail.com @@ -213,6 +216,7 @@ answer newbie questions, and generally made Django that much better: torne-django@wolfpuppy.org.uk Karen Tracey Makoto Tsuyuki + tt@gurgle.no Amit Upadhyay Geert Vanderkelen viestards.lists@gmail.com diff --git a/django/conf/locale/el/LC_MESSAGES/django.mo b/django/conf/locale/el/LC_MESSAGES/django.mo index 4a7d8e41f0..a048d87976 100644 Binary files a/django/conf/locale/el/LC_MESSAGES/django.mo and b/django/conf/locale/el/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/el/LC_MESSAGES/django.po b/django/conf/locale/el/LC_MESSAGES/django.po index 06099eb9da..d041a275e5 100644 --- a/django/conf/locale/el/LC_MESSAGES/django.po +++ b/django/conf/locale/el/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-05-16 10:13+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: panos laganakos \n" +"Last-Translator: Orestis Markou \n" "Language-Team: Greek\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -164,9 +164,9 @@ msgid "" "\n" "%(text)s" msgstr "" -"Αυτο το σχόλιο σημειώθηκε απο %(χρήστη)ες\n" +"Αυτο το σχόλιο σημειώθηκε απο %(user)s\n" "\n" -"%(κείμενο)α" +"%(text)s" #: contrib/comments/models.py:265 msgid "flag date" diff --git a/django/conf/locale/no/LC_MESSAGES/django.mo b/django/conf/locale/no/LC_MESSAGES/django.mo index 1dc12ae50e..7048e3079d 100644 Binary files a/django/conf/locale/no/LC_MESSAGES/django.mo and b/django/conf/locale/no/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/no/LC_MESSAGES/django.po b/django/conf/locale/no/LC_MESSAGES/django.po index 85b7d49d09..ea388cfd81 100644 --- a/django/conf/locale/no/LC_MESSAGES/django.po +++ b/django/conf/locale/no/LC_MESSAGES/django.po @@ -1,4 +1,4 @@ -# SOME DESCRIPTIVE TITLE. +# translation of django.po to # Copyright (C) 2005 and beyond # This file is distributed under the same license as the PACKAGE package. # Espen Grindhaug , Nov 2005. @@ -6,74 +6,73 @@ # 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: Espen Grndhaug \n" -"Language-Team: Norwegian\n" +"PO-Revision-Date: 2007-04-27 06:48+0200\n" +"Last-Translator: \n" +"Language-Team: \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 "Vis 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 "innhold" +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/tid for innsendelse" #: contrib/comments/models.py:84 contrib/comments/models.py:170 msgid "is public" -msgstr "" +msgstr "er tilgjengelig for alle" #: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 msgid "IP address" @@ -81,23 +80,21 @@ 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 "Aktiver denne avkryssningsboksen hvis kommentaren er upasende. Beskjeden \"Denne kommentaren er blitt fjernet\" vil bli vist istedet." #: contrib/comments/models.py:91 -#, fuzzy msgid "comments" -msgstr "innhold" +msgstr "kommentarer" #: contrib/comments/models.py:131 contrib/comments/models.py:207 -#, fuzzy msgid "Content object" -msgstr "innholds type" +msgstr "innholdsobjekt" #: contrib/comments/models.py:159 #, python-format @@ -108,101 +105,97 @@ msgid "" "\n" "http://%(domain)s%(url)s" msgstr "" +"Sendt av %(user)s på %(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 "IP adresse" #: contrib/comments/models.py:173 msgid "approved by staff" -msgstr "" +msgstr "godkjent av moderator" #: contrib/comments/models.py:176 -#, fuzzy msgid "free comment" -msgstr "tillat kommentarer" +msgstr "åpen kommentar" #: contrib/comments/models.py:177 -#, fuzzy msgid "free comments" -msgstr "tillat kommentarer" +msgstr "åpne kommentarer" #: contrib/comments/models.py:233 msgid "score" -msgstr "" +msgstr "poeng" #: contrib/comments/models.py:234 -#, fuzzy msgid "score date" -msgstr "utløpsdato" +msgstr "poeng dato" #: contrib/comments/models.py:237 msgid "karma score" -msgstr "" +msgstr "karma poeng" #: contrib/comments/models.py:238 msgid "karma scores" -msgstr "" +msgstr "karma poeng" #: contrib/comments/models.py:242 #, python-format msgid "%(score)d rating by %(user)s" -msgstr "" +msgstr "%(score)d rangering av %(user)s" #: contrib/comments/models.py:258 -#, fuzzy, python-format +#, python-format msgid "" "This comment was flagged by %(user)s:\n" "\n" "%(text)s" msgstr "" -"Denne kommentaren er skrevet med lite omtanke:\n" +"Denne kommentaren er flagget av %(user)s:\n" "\n" "%(text)s" #: contrib/comments/models.py:265 -#, fuzzy msgid "flag date" -msgstr "flatside" +msgstr "flagg dato" #: contrib/comments/models.py:268 -#, fuzzy msgid "user flag" -msgstr "Bruker" +msgstr "brukerflag" #: contrib/comments/models.py:269 -#, fuzzy msgid "user flags" -msgstr "Brukere" +msgstr "brukerflag" #: contrib/comments/models.py:273 #, python-format msgid "Flag by %r" -msgstr "" +msgstr "Flagg med %r" #: contrib/comments/models.py:278 -#, fuzzy msgid "deletion date" -msgstr "sesjon data" +msgstr "fjernet dato" #: contrib/comments/models.py:280 msgid "moderator deletion" -msgstr "" +msgstr "fjernet av moderator" #: contrib/comments/models.py:281 msgid "moderator deletions" -msgstr "" +msgstr "fjernet av moderator" #: contrib/comments/models.py:285 #, python-format msgid "Moderator deletion by %r" -msgstr "" +msgstr "Fjernet av moderator med %r" #: contrib/comments/views/karma.py:19 msgid "Anonymous users cannot vote" @@ -214,16 +207,14 @@ msgstr "Ikke gyldig kommentar ID" #: contrib/comments/views/karma.py:25 msgid "No voting for yourself" -msgstr "Du kan ikke stemme selv" +msgstr "Du kan ikke stemme på deg selv" #: contrib/comments/views/comments.py:28 -#, fuzzy -msgid "" -"This rating is required because you've entered at least one other rating." -msgstr "Denne bla bla.." +msgid "This rating is required because you've entered at least one other rating." +msgstr "Denne rangeringen er påkrevd fordi du har rangert en eller flere ting fra før " #: contrib/comments/views/comments.py:112 -#, fuzzy, python-format +#, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " "comment:\n" @@ -246,13 +237,13 @@ msgstr[1] "" "%(text)s" #: contrib/comments/views/comments.py:117 -#, fuzzy, python-format +#, python-format msgid "" "This comment was posted by a sketchy user:\n" "\n" "%(text)s" msgstr "" -"Denne kommentaren er skrevet med lite omtanke:\n" +"Denne kommentaren er skrevet av en upålitelig bruker:\n" "\n" "%(text)s" @@ -281,8 +272,7 @@ msgstr "Skjemaet hadde en ugyldig verdi - objekt IDen var ugyldig" #: contrib/comments/views/comments.py:257 #: contrib/comments/views/comments.py:321 msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "" -"Kommentar skjemaet returnerte ikke et 'forhåndsvisning' eller 'post' objekt" +msgstr "Kommentar skjemaet returnerte ikke et 'forhåndsvisning' eller 'post' objekt" #: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:8 @@ -296,9 +286,8 @@ msgid "Password:" msgstr "Passord:" #: contrib/comments/templates/comments/form.html:6 -#, fuzzy msgid "Forgotten your password?" -msgstr "Endre passord" +msgstr "Har du glemt passordet ditt ?" #: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/object_history.html:3 @@ -323,38 +312,35 @@ msgstr "Log ut" #: 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åkrevd" #: 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 "Send et foto" #: contrib/comments/templates/comments/form.html:27 #: contrib/comments/templates/comments/freeform.html:5 -#, fuzzy msgid "Comment:" -msgstr "tillat kommentarer" +msgstr "Kommentar:" #: contrib/comments/templates/comments/form.html:32 #: contrib/comments/templates/comments/freeform.html:9 -#, fuzzy msgid "Preview comment" -msgstr "tillat kommentarer" +msgstr "Forhåndvis kommentar" #: contrib/comments/templates/comments/freeform.html:4 -#, fuzzy msgid "Your name:" -msgstr "brukernavn" +msgstr "Ditt navn:" #: contrib/admin/filterspecs.py:40 #, python-format @@ -416,7 +402,7 @@ msgstr "objekt repr" #: contrib/admin/models.py:21 msgid "action flag" -msgstr "handlings flagg" +msgstr "handlingsflagg" #: contrib/admin/models.py:22 msgid "change message" @@ -424,11 +410,11 @@ msgstr "endre melding" #: contrib/admin/models.py:25 msgid "log entry" -msgstr "logg notis" +msgstr "logg post" #: contrib/admin/models.py:26 msgid "log entries" -msgstr "logg innlegg" +msgstr "logg poster" #: contrib/admin/templatetags/admin_list.py:228 msgid "All dates" @@ -440,8 +426,8 @@ msgid "" "Please enter a correct username and password. Note that both fields are case-" "sensitive." msgstr "" -"Vær snill å angi korrekt brukernavn og passord. La merke til at små og " -"store bokstaver er betraktet ulik." +"Vennligst angi korrekt brukernavn og passord. Merk at små og " +"store bokstaver er betraktet ulikt." #: contrib/admin/views/decorators.py:23 #: contrib/admin/templates/admin/login.html:25 @@ -452,18 +438,15 @@ msgstr "Logg inn" msgid "" "Please log in again, because your session has expired. Don't worry: Your " "submission has been saved." -msgstr "" -"Du må logge inn igjen, fordi sesjonen din har gått ut på dato, men ikke ikke " -"bekjymr deg informasjonen du sendte ble lagret." +msgstr "Du må logge inn igjen, fordi økten din har gått ut, men innlegget ditt ble lagret." #: 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 "" -"Det ser ut som om nettleseren din ikke vill ta i mot informasjonskapsler " -"('cookies'). Vennligst omkonfigurer nettleseren din, last siden på ny og " -"prøv igjen." +"Det ser ut som om nettleseren din ikke støtter informasjonskapsler " +"('cookies'). Vennligst konfigurer nettleseren din, og prøv igjen." #: contrib/admin/views/decorators.py:82 msgid "Usernames cannot contain the '@' character." @@ -500,7 +483,7 @@ msgstr "Ny %s" #: contrib/admin/views/main.py:336 #, python-format msgid "Added %s." -msgstr "Lagt til %s" +msgstr "La til %s" #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:340 @@ -528,8 +511,7 @@ msgstr "%(name)s \"%(obj)s\" ble endret." #: contrib/admin/views/main.py:354 #, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "%(name)s \"%(obj)s\" ble endret. Du kan endre det igjen under." #: contrib/admin/views/main.py:392 @@ -742,8 +724,8 @@ 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 "" -"Det har vært en feil. Feilen er blitt rapportert til administrator via e-" -"mail, og vill bli fikset snart. Takk for din tålmodighet." +"Det har oppstått en feil. Feilen er blitt rapportert til administrator via e-" +"post, og vil bli fikset snart. Takk for din tålmodighet." #: contrib/admin/templates/admin/404.html:4 #: contrib/admin/templates/admin/404.html:8 @@ -909,7 +891,7 @@ msgstr "Tilbakestill mitt passord" #: contrib/admin/templates/registration/logged_out.html:8 msgid "Thanks for spending some quality time with the Web site today." -msgstr "Takk for å bruke tid på internett siden i dag." +msgstr "Takk for at du valgte å bruke kvalitetstid på nettstedet idag." #: contrib/admin/templates/registration/logged_out.html:10 msgid "Log in again" @@ -954,8 +936,7 @@ msgstr "Endre passord" #: contrib/admin/templates/registration/password_reset_email.html:2 msgid "You're receiving this e-mail because you requested a password reset" -msgstr "" -"Du har mottatt denne e-posten fordi du ba om å tilbakestille passordet ditt" +msgstr "Du har mottatt denne e-posten fordi du ba om å tilbakestille passordet ditt" #: contrib/admin/templates/registration/password_reset_email.html:3 #, python-format @@ -1002,6 +983,12 @@ msgid "" "as \"internal\" (talk to your system administrator if you aren't sure if\n" "your computer is \"internal\").

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

For å installere bokmerker, dra linken til verktøylinja\n" +"for bokmerker, eller høyreklikk og legg til i bokmerker. Nå kan du du velge\n" +"bokmerket fra hvilken som helst side på nettstedet. Noen av disse\n" +"bokmerkene krever at datamaskinen du bruker er markert som \"intern\"\n" +"(kontakt din systemadministrator hvis du er usikker på om maskinen din er \"intern\").

\n" #: contrib/admin/templates/admin_doc/bookmarklets.html:19 msgid "Documentation for this page" @@ -1033,8 +1020,7 @@ msgstr "Endre dette objektet (åpnes i dette vinduet)" #: contrib/admin/templates/admin_doc/bookmarklets.html:26 msgid "Jumps to the admin page for pages that represent a single object." -msgstr "" -"Hopp til administrasjonsiden for sidene som representerer et enkelt objekt." +msgstr "Hopp til administrasjonsiden for sidene som representerer et enkelt objekt." #: contrib/admin/templates/admin_doc/bookmarklets.html:28 msgid "Edit this object (new window)" @@ -1069,7 +1055,7 @@ msgid "" "This should be an absolute path, excluding the domain name. Example: '/" "events/search/'." msgstr "" -"Denne burde vær en fullstendig sti, uten domene navnet. Foreksempel: '/" +"Dette burde vært en fullstendig sti, uten domene navnet. Foreksempel: '/" "nyheter/les/" #: contrib/redirects/models.py:9 @@ -1081,7 +1067,7 @@ msgid "" "This can be either an absolute path (as above) or a full URL starting with " "'http://'." msgstr "" -"Denne kan enten være en fullstendig sti (som over), eller en hel " +"Dette kan enten være en fullstendig sti (som over), eller en hel " "internettadresse som starter med 'http://'" #: contrib/redirects/models.py:12 @@ -1093,10 +1079,8 @@ msgid "redirects" msgstr "omadresserelser" #: 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åstrek forran og bak." +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åstrek forran og bak." #: contrib/flatpages/models.py:9 msgid "title" @@ -1186,7 +1170,7 @@ msgstr "passord" #: contrib/auth/models.py:59 msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "" +msgstr "Bruk '[algo]$[salt]$[hexdigest]'" #: contrib/auth/models.py:60 msgid "staff status" @@ -1256,7 +1240,7 @@ msgstr "Melding" msgid "" "Your Web browser doesn't appear to have cookies enabled. Cookies are " "required for logging in." -msgstr "" +msgstr "Din nettleser ser ikkeut til å støtte informasjonskapsler (cookies). Informasjonskapsler er påkrevd for å logge inn." #: contrib/contenttypes/models.py:25 msgid "python model class name" @@ -1698,8 +1682,7 @@ msgstr "Internettadressen %s peker ikke til et godkjent bilde." #: core/validators.py:159 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." -msgstr "" -"Telefon nummeret må være i XXX-XXX-XXXX format. \"%s\" er ikke godkjent." +msgstr "Telefon nummeret må være i XXX-XXX-XXXX format. \"%s\" er ikke godkjent." #: core/validators.py:167 #, python-format @@ -1784,30 +1767,26 @@ msgstr "Vennligst skriv inn et godkjent desimal tall." #: 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." +msgid_plural "Please enter a valid decimal number with at most %s total digits." msgstr[0] "Skriv inn et desimal tall med maksimum %s total antall tall." msgstr[1] "Skriv inn et desimal tall med maksimum %s total antall tall." #: 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." +msgid_plural "Please enter a valid decimal number with at most %s decimal places." msgstr[0] "Skriv inn et desimal tall med maksimum %s tall bak komma. " msgstr[1] "Skriv inn et desimal tall med maksimum %s tall bak komma. " #: core/validators.py:362 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "" -"Vær sikker på at fila du prøver å laste opp er minimum %s bytes stor." +msgstr "Vær sikker på at fila du prøver å laste opp er minimum %s bytes stor." #: core/validators.py:363 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "" -"Vær sikker på at fila du prøver å laste opp er maksimum %s bytes stor." +msgstr "Vær sikker på at fila du prøver å laste opp er maksimum %s bytes stor." #: core/validators.py:376 msgid "The format for this field is wrong." @@ -1824,8 +1803,7 @@ msgstr "Klarte ikke å motta noe fra %s." #: core/validators.py:429 #, python-format -msgid "" -"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." msgstr "" "Internettadressen %(url)s returnerte en ikke godkjent Content-Type '%" "(contenttype)s'." @@ -1926,16 +1904,13 @@ msgid "Separate multiple IDs with commas." msgstr "Separer Id-ene med kommaer." #: db/models/fields/related.py:581 -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" -"Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mere enn en." +msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mere enn 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." +msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid." msgstr[0] "Skriv inn gyldige %(self)s ID-er. Verdien %(value)r er ikke gyldig." msgstr[1] "Skriv inn gyldige %(self)s ID-er. Verdiene %(value)r er ikke gyldige." diff --git a/django/conf/locale/no/LC_MESSAGES/djangojs.mo b/django/conf/locale/no/LC_MESSAGES/djangojs.mo index 4b23aba4e0..da2854f72e 100644 Binary files a/django/conf/locale/no/LC_MESSAGES/djangojs.mo and b/django/conf/locale/no/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/no/LC_MESSAGES/djangojs.po b/django/conf/locale/no/LC_MESSAGES/djangojs.po index c6087646e0..ab3d3b965d 100644 --- a/django/conf/locale/no/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/no/LC_MESSAGES/djangojs.po @@ -1,19 +1,20 @@ -# SOME DESCRIPTIVE TITLE. +# translation of djangojs.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Espen Grindhaug , 2006. # msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: djangojs\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-12-09 11:51+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Espen Grindhaug \n" -"Language-Team: no\n" +"PO-Revision-Date: 2007-04-27 06:51+0200\n" +"Last-Translator: \n" +"Language-Team: \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/admin/media/js/SelectFilter2.js:33 #, perl-format @@ -21,7 +22,6 @@ msgid "Available %s" msgstr "%s er tilgjengelige" #: contrib/admin/media/js/SelectFilter2.js:41 -#, fuzzy msgid "Choose all" msgstr "Velg alle" @@ -116,3 +116,4 @@ msgstr "I går" #: contrib/admin/media/js/admin/DateTimeShortcuts.js:164 msgid "Tomorrow" msgstr "I morgen" + diff --git a/django/core/management.py b/django/core/management.py index d696794fc6..4a08b1e54d 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -173,6 +173,8 @@ def _get_sql_model_create(model, known_models=set()): for f in opts.fields: if isinstance(f, (models.ForeignKey, models.OneToOneField)): rel_field = f.rel.get_related_field() + while isinstance(rel_field, (models.ForeignKey, models.OneToOneField)): + rel_field = rel_field.rel.get_related_field() data_type = get_rel_data_type(rel_field) else: rel_field = f @@ -1377,6 +1379,8 @@ def load_data(fixture_labels, verbosity=1): from django.conf import settings import sys + disable_termcolors() + # Keep a count of the installed objects and fixtures count = [0,0] models = set() diff --git a/django/newforms/forms.py b/django/newforms/forms.py index 3df7a9e834..9fafd20787 100644 --- a/django/newforms/forms.py +++ b/django/newforms/forms.py @@ -122,7 +122,14 @@ class BaseForm(StrAndUnicode): else: if errors_on_separate_row and bf_errors: output.append(error_row % bf_errors) - label = bf.label and bf.label_tag(escape(bf.label + ':')) or '' + if bf.label: + label = escape(bf.label) + # Only add a colon if the label does not end in punctuation. + if label[-1] not in ':?.!': + label += ':' + label = bf.label_tag(label) or '' + else: + label = '' if field.help_text: help_text = help_text_html % field.help_text else: diff --git a/django/template/__init__.py b/django/template/__init__.py index a592765db6..6478636889 100644 --- a/django/template/__init__.py +++ b/django/template/__init__.py @@ -193,18 +193,27 @@ class Lexer(object): def tokenize(self): "Return a list of tokens from a given template_string" - # remove all empty strings, because the regex has a tendency to add them - bits = filter(None, tag_re.split(self.template_string)) - return map(self.create_token, bits) + in_tag = False + result = [] + for bit in tag_re.split(self.template_string): + if bit: + result.append(self.create_token(bit, in_tag)) + in_tag = not in_tag + return result - def create_token(self,token_string): - "Convert the given token string into a new Token object and return it" - if token_string.startswith(VARIABLE_TAG_START): - token = Token(TOKEN_VAR, token_string[len(VARIABLE_TAG_START):-len(VARIABLE_TAG_END)].strip()) - elif token_string.startswith(BLOCK_TAG_START): - token = Token(TOKEN_BLOCK, token_string[len(BLOCK_TAG_START):-len(BLOCK_TAG_END)].strip()) - elif token_string.startswith(COMMENT_TAG_START): - token = Token(TOKEN_COMMENT, '') + def create_token(self, token_string, in_tag): + """ + Convert the given token string into a new Token object and return it. + If tag is True, we are processing something that matched a tag, + otherwise it should be treated as a literal string. + """ + if in_tag: + if token_string.startswith(VARIABLE_TAG_START): + token = Token(TOKEN_VAR, token_string[len(VARIABLE_TAG_START):-len(VARIABLE_TAG_END)].strip()) + elif token_string.startswith(BLOCK_TAG_START): + token = Token(TOKEN_BLOCK, token_string[len(BLOCK_TAG_START):-len(BLOCK_TAG_END)].strip()) + elif token_string.startswith(COMMENT_TAG_START): + token = Token(TOKEN_COMMENT, '') else: token = Token(TOKEN_TEXT, token_string) return token @@ -215,21 +224,21 @@ class DebugLexer(Lexer): def tokenize(self): "Return a list of tokens from a given template_string" - token_tups, upto = [], 0 + result, upto = [], 0 for match in tag_re.finditer(self.template_string): start, end = match.span() if start > upto: - token_tups.append( (self.template_string[upto:start], (upto, start)) ) + result.append(self.create_token(self.template_string[upto:start], (upto, start), False)) upto = start - token_tups.append( (self.template_string[start:end], (start,end)) ) + result.append(self.create_token(self.template_string[start:end], (start, end), True)) upto = end last_bit = self.template_string[upto:] if last_bit: - token_tups.append( (last_bit, (upto, upto + len(last_bit))) ) - return [self.create_token(tok, (self.origin, loc)) for tok, loc in token_tups] + result.append(self.create_token(last_bit, (upto, upto + len(last_bit)), False)) + return result - def create_token(self, token_string, source): - token = super(DebugLexer, self).create_token(token_string) + def create_token(self, token_string, source, in_tag): + token = super(DebugLexer, self).create_token(token_string, in_tag) token.source = source return token diff --git a/docs/email.txt b/docs/email.txt index 1f4ce4ef42..cbe909c03c 100644 --- a/docs/email.txt +++ b/docs/email.txt @@ -19,13 +19,23 @@ In two lines:: send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False) - + +Mail will be sent using the SMTP host and port specified in the `EMAIL_HOST`_ +and `EMAIL_PORT`_ settings. The `EMAIL_HOST_USER`_ and `EMAIL_HOST_PASSWORD`_ +settings, if set, will be used to authenticate to the +SMTP server. + .. note:: The character set of email sent with ``django.core.mail`` will be set to the value of your `DEFAULT_CHARSET setting`_. - + .. _DEFAULT_CHARSET setting: ../settings/#DEFAULT_CHARSET +.. _EMAIL_HOST: ../settings/#EMAIL_HOST +.. _EMAIL_PORT: ../settings/#EMAIL_PORT +.. _EMAIL_HOST_USER: ../settings/#EMAIL_HOST_USER +.. _EMAIL_HOST_PASSWORD: ../settings/#EMAIL_HOST_PASSWORD + send_mail() =========== diff --git a/docs/forms.txt b/docs/forms.txt index 144b70f13b..329e84a1b1 100644 --- a/docs/forms.txt +++ b/docs/forms.txt @@ -517,7 +517,7 @@ to put punctuation at the end of your validation messages. When are validators called? --------------------------- -After a form has been submitted, Django validates each field in turn. First, +After a form has been submitted, Django validates each field in turn. First, if the field is required, Django checks that it is present and non-empty. Then, if that test passes *and the form submission contained data* for that field, all the validators for that field are called in turn. The emphasized portion in the @@ -615,15 +615,19 @@ fails. If no message is passed in, a default message is used. ``other_value``, then the validators in ``validator_list`` are all run against the current field. +``RequiredIfOtherFieldGiven`` + Takes a field name of the current field is only required if the other + field has a value. + +``RequiredIfOtherFieldsGiven`` + Similar to ``RequiredIfOtherFieldGiven``, except that it takes a list of + field names and if any one of the supplied fields has a value provided, + the current field being validated is required. + ``RequiredIfOtherFieldNotGiven`` Takes the name of the other field and this field is only required if the other field has no value. -``RequiredIfOtherFieldsNotGiven`` - Similar to ``RequiredIfOtherFieldNotGiven``, except that it takes a list - of field names and if any one of the supplied fields does not have a value - provided, the field being validated is required. - ``RequiredIfOtherFieldEquals`` and ``RequiredIfOtherFieldDoesNotEqual`` Each of these validator classes takes a field name and a value (in that order). If the given field does (or does not have, in the latter case) the @@ -650,8 +654,8 @@ fails. If no message is passed in, a default message is used. ``NumberIsInRange`` Takes two boundary numbers, ``lower`` and ``upper``, and checks that the field is greater than ``lower`` (if given) and less than ``upper`` (if - given). - + given). + Both checks are inclusive. That is, ``NumberIsInRange(10, 20)`` will allow values of both 10 and 20. This validator only checks numeric values (e.g., float and integer values). diff --git a/docs/settings.txt b/docs/settings.txt index 9ab5f5ff82..583c258bd3 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -395,8 +395,9 @@ EMAIL_HOST_PASSWORD Default: ``''`` (Empty string) -Username to use for the SMTP server defined in ``EMAIL_HOST``. If empty, -Django won't attempt authentication. +Password to use for the SMTP server defined in ``EMAIL_HOST``. This setting is +used in conjunction with EMAIL_HOST_USER when authenticating to the SMTP server. +If either of these settings is empty, Django won't attempt authenticaion. See also ``EMAIL_HOST_USER``. diff --git a/tests/regressiontests/forms/localflavor.py b/tests/regressiontests/forms/localflavor.py index 0efec8cfa8..f725fb38b7 100644 --- a/tests/regressiontests/forms/localflavor.py +++ b/tests/regressiontests/forms/localflavor.py @@ -874,6 +874,60 @@ ValidationError: [u'This field requires only numbers.'] >>> f.clean('') u'' +# BRCPFField ################################################################# + +>>> from django.contrib.localflavor.br.forms import BRCPFField +>>> f = BRCPFField() +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('489.294.654-54') +Traceback (most recent call last): +... +ValidationError: [u'Invalid CPF number.'] +>>> f.clean('295.669.575-98') +Traceback (most recent call last): +... +ValidationError: [u'Invalid CPF number.'] +>>> f.clean('539.315.127-22') +Traceback (most recent call last): +... +ValidationError: [u'Invalid CPF number.'] +>>> f.clean('663.256.017-26') +u'663.256.017-26' +>>> f.clean('66325601726') +u'66325601726' +>>> f.clean('375.788.573-20') +u'375.788.573-20' +>>> f.clean('84828509895') +u'84828509895' +>>> f.clean('375.788.573-XX') +Traceback (most recent call last): +... +ValidationError: [u'This field requires only numbers.'] +>>> f.clean('375.788.573-000') +Traceback (most recent call last): +... +ValidationError: [u'Ensure this value has at most 14 characters.'] +>>> f.clean('123.456.78') +Traceback (most recent call last): +... +ValidationError: [u'Ensure this value has at least 11 characters.'] +>>> f.clean('123456789555') +Traceback (most recent call last): +... +ValidationError: [u'This field requires at most 11 digits or 14 characters.'] +>>> f = BRCPFField(required=False) +>>> f.clean('') +u'' +>>> f.clean(None) +u'' + # BRPhoneNumberField ######################################################### >>> from django.contrib.localflavor.br.forms import BRPhoneNumberField diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index e0d05a2c89..0d3a65277c 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -2601,6 +2601,27 @@ underscores converted to spaces, and the initial letter capitalized.
  • Password1:
  • Password (again):
  • +Labels for as_* methods will only end in a colon if they don't end in other +punctuation already. +>>> class Questions(Form): +... q1 = CharField(label='The first question') +... q2 = CharField(label='What is your name?') +... q3 = CharField(label='The answer to life is:') +... q4 = CharField(label='Answer this question!') +... q5 = CharField(label='The last question. Period.') +>>> print Questions(auto_id=False).as_p() +

    The first question:

    +

    What is your name?

    +

    The answer to life is:

    +

    Answer this question!

    +

    The last question. Period.

    +>>> print Questions().as_p() +

    +

    +

    +

    +

    + A label can be a Unicode object or a bytestring with special characters. >>> class UserRegistration(Form): ... username = CharField(max_length=10, label='ŠĐĆŽćžšđ') diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index f996f63049..4e321b2d2b 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -127,6 +127,18 @@ class Templates(unittest.TestCase): # Fail silently when accessing a non-simple method 'basic-syntax20': ("{{ var.method2 }}", {"var": SomeClass()}, ("","INVALID")), + # Don't get confused when parsing something that is almost, but not + # quite, a template tag. + 'basic-syntax21': ("a {{ moo %} b", {}, "a {{ moo %} b"), + 'basic-syntax22': ("{{ moo #}", {}, "{{ moo #}"), + + # Will try to treat "moo #} {{ cow" as the variable. Not ideal, but + # costly to work around, so this triggers an error. + 'basic-syntax23': ("{{ moo #} {{ cow }}", {"cow": "cow"}, template.TemplateSyntaxError), + + # Embedded newlines make it not-a-tag. + 'basic-syntax24': ("{{ moo\n }}", {}, "{{ moo\n }}"), + # List-index syntax allows a template to access a certain item of a subscriptable object. 'list-index01': ("{{ var.1 }}", {"var": ["first item", "second item"]}, "second item"), @@ -151,60 +163,61 @@ class Templates(unittest.TestCase): 'list-index07': ("{{ var.1 }}", {"var": {'1': "hello", 1: "world"}}, "hello"), # Basic filter usage - 'basic-syntax21': ("{{ var|upper }}", {"var": "Django is the greatest!"}, "DJANGO IS THE GREATEST!"), + 'filter-syntax01': ("{{ var|upper }}", {"var": "Django is the greatest!"}, "DJANGO IS THE GREATEST!"), # Chained filters - 'basic-syntax22': ("{{ var|upper|lower }}", {"var": "Django is the greatest!"}, "django is the greatest!"), + 'filter-syntax02': ("{{ var|upper|lower }}", {"var": "Django is the greatest!"}, "django is the greatest!"), # Raise TemplateSyntaxError for space between a variable and filter pipe - 'basic-syntax23': ("{{ var |upper }}", {}, template.TemplateSyntaxError), + 'filter-syntax03': ("{{ var |upper }}", {}, template.TemplateSyntaxError), # Raise TemplateSyntaxError for space after a filter pipe - 'basic-syntax24': ("{{ var| upper }}", {}, template.TemplateSyntaxError), + 'filter-syntax04': ("{{ var| upper }}", {}, template.TemplateSyntaxError), # Raise TemplateSyntaxError for a nonexistent filter - 'basic-syntax25': ("{{ var|does_not_exist }}", {}, template.TemplateSyntaxError), + 'filter-syntax05': ("{{ var|does_not_exist }}", {}, template.TemplateSyntaxError), # Raise TemplateSyntaxError when trying to access a filter containing an illegal character - 'basic-syntax26': ("{{ var|fil(ter) }}", {}, template.TemplateSyntaxError), + 'filter-syntax06': ("{{ var|fil(ter) }}", {}, template.TemplateSyntaxError), # Raise TemplateSyntaxError for invalid block tags - 'basic-syntax27': ("{% nothing_to_see_here %}", {}, template.TemplateSyntaxError), + 'filter-syntax07': ("{% nothing_to_see_here %}", {}, template.TemplateSyntaxError), # Raise TemplateSyntaxError for empty block tags - 'basic-syntax28': ("{% %}", {}, template.TemplateSyntaxError), + 'filter-syntax08': ("{% %}", {}, template.TemplateSyntaxError), # Chained filters, with an argument to the first one - 'basic-syntax29': ('{{ var|removetags:"b i"|upper|lower }}', {"var": "Yes"}, "yes"), + 'filter-syntax09': ('{{ var|removetags:"b i"|upper|lower }}', {"var": "Yes"}, "yes"), # Escaped string as argument - 'basic-syntax30': (r'{{ var|default_if_none:" endquote\" hah" }}', {"var": None}, ' endquote" hah'), + 'filter-syntax10': (r'{{ var|default_if_none:" endquote\" hah" }}', {"var": None}, ' endquote" hah'), # Variable as argument - 'basic-syntax31': (r'{{ var|default_if_none:var2 }}', {"var": None, "var2": "happy"}, 'happy'), + 'filter-syntax11': (r'{{ var|default_if_none:var2 }}', {"var": None, "var2": "happy"}, 'happy'), # Default argument testing - 'basic-syntax32': (r'{{ var|yesno:"yup,nup,mup" }} {{ var|yesno }}', {"var": True}, 'yup yes'), + 'filter-syntax12': (r'{{ var|yesno:"yup,nup,mup" }} {{ var|yesno }}', {"var": True}, 'yup yes'), - # Fail silently for methods that raise an exception with a "silent_variable_failure" attribute - 'basic-syntax33': (r'1{{ var.method3 }}2', {"var": SomeClass()}, ("12", "1INVALID2")), + # Fail silently for methods that raise an exception with a + # "silent_variable_failure" attribute + 'filter-syntax13': (r'1{{ var.method3 }}2', {"var": SomeClass()}, ("12", "1INVALID2")), - # In methods that raise an exception without a "silent_variable_attribute" set to True, - # the exception propagates - 'basic-syntax34': (r'1{{ var.method4 }}2', {"var": SomeClass()}, SomeOtherException), + # In methods that raise an exception without a + # "silent_variable_attribute" set to True, the exception propagates + 'filter-syntax14': (r'1{{ var.method4 }}2', {"var": SomeClass()}, SomeOtherException), # Escaped backslash in argument - 'basic-syntax35': (r'{{ var|default_if_none:"foo\bar" }}', {"var": None}, r'foo\bar'), + 'filter-syntax15': (r'{{ var|default_if_none:"foo\bar" }}', {"var": None}, r'foo\bar'), # Escaped backslash using known escape char - 'basic-syntax35': (r'{{ var|default_if_none:"foo\now" }}', {"var": None}, r'foo\now'), + 'filter-syntax16': (r'{{ var|default_if_none:"foo\now" }}', {"var": None}, r'foo\now'), # Empty strings can be passed as arguments to filters - 'basic-syntax36': (r'{{ var|join:"" }}', {'var': ['a', 'b', 'c']}, 'abc'), + 'filter-syntax17': (r'{{ var|join:"" }}', {'var': ['a', 'b', 'c']}, 'abc'), - # If a variable has a __str__() that returns a Unicode object, the value - # will be converted to a bytestring. - 'basic-syntax37': (r'{{ var }}', {'var': UnicodeInStrClass()}, '\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91'), + # If a variable has a __str__() that returns a Unicode object, the + # value will be converted to a bytestring. + 'basic-syntax18': (r'{{ var }}', {'var': UnicodeInStrClass()}, '\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91'), ### COMMENT SYNTAX ######################################################## 'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),