diff --git a/AUTHORS b/AUTHORS
index b291f22400..f49210d303 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -51,6 +51,7 @@ answer newbie questions, and generally made Django that much better:
Jiri Barton
Ned Batchelder
Shannon -jj Behrens
+ Esdras Beleza
James Bennett
Paul Bissex
Simon Blanchard
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 79d3afe81b..15bddeb25a 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -101,7 +101,7 @@ DATABASE_USER = '' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
-DATABASE_OPTIONS = {} # Set to empy dictionary for default.
+DATABASE_OPTIONS = {} # Set to empty dictionary for default.
# Optional named database connections in addition to the default.
OTHER_DATABASES = {}
diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo
index aef68099d3..0dd2b26dff 100644
Binary files a/django/conf/locale/de/LC_MESSAGES/django.mo and b/django/conf/locale/de/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po
index 614ea69247..c5e3f4282a 100644
--- a/django/conf/locale/de/LC_MESSAGES/django.po
+++ b/django/conf/locale/de/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django 1.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-09-25 16:04+0200\n"
+"POT-Creation-Date: 2006-11-15 18:35+0100\n"
"PO-Revision-Date: 2005-10-08 00:03+0200\n"
"Last-Translator: Georg Bauer \n"
"MIME-Version: 1.0\n"
@@ -452,7 +452,7 @@ msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
msgstr ""
-"Es sieht danach aus, das der Browser keine Cookies akzeptiert. Bitte im "
+"Es sieht danach aus, dass der Browser keine Cookies akzeptiert. Bitte im "
"Browser Cookies aktivieren und diese Seite neu laden."
#: contrib/admin/views/decorators.py:83
@@ -470,13 +470,13 @@ msgstr ""
msgid "Site administration"
msgstr "Website Verwaltung"
-#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:18
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefgt."
#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
-#: contrib/admin/views/auth.py:22
+#: contrib/admin/views/auth.py:23
msgid "You may edit it again below."
msgstr "Das Element kann jetzt weiter gendert werden."
@@ -496,7 +496,7 @@ msgid "Added %s."
msgstr "%s hinzugefgt."
#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339
+#: contrib/admin/views/main.py:339 db/models/manipulators.py:306
msgid "and"
msgstr "und"
@@ -702,7 +702,7 @@ msgstr "XML Text"
msgid "%s does not appear to be a urlpattern object"
msgstr "%s ist scheinbar kein urlpattern Objekt"
-#: contrib/admin/views/auth.py:28
+#: contrib/admin/views/auth.py:29
msgid "Add user"
msgstr "Benutzer zufgen"
@@ -861,10 +861,6 @@ msgstr "Keine vorhanden"
msgid "Add %(name)s"
msgstr "%(name)s zufgen"
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you forgotten your password?"
-msgstr "Haben Sie ihr Passwort vergessen?"
-
#: contrib/admin/templates/admin/base.html:25
msgid "Welcome,"
msgstr "Willkommen,"
@@ -891,7 +887,7 @@ msgid ""
"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
"All of the following related items will be deleted:"
msgstr ""
-"Sind Sie sicher, das Sie %(object_name)s \"%(escaped_object)s\" lschen "
+"Sind Sie sicher, dass 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
@@ -1061,7 +1057,7 @@ msgid ""
"password twice so we can verify you typed it in correctly."
msgstr ""
"Bitte geben Sie aus Sicherheitsgrnden erst Ihr altes Kennwort und darunter "
-"dann zweimal (um sicherzustellen, das Sie es korrekt eingegeben haben) das "
+"dann zweimal (um sicherzustellen, dass Sie es korrekt eingegeben haben) das "
"neue Kennwort ein."
#: contrib/admin/templates/registration/password_change_form.html:17
@@ -1087,7 +1083,7 @@ msgstr "Sie erhalten diese Mail, weil Sie ein neues Kennwort"
#: contrib/admin/templates/registration/password_reset_email.html:3
#, python-format
msgid "for your user account at %(site_name)s"
-msgstr "fr ihren Benutzer bei %(site_name)s angefordert haben."
+msgstr "fr Ihren Benutzer bei %(site_name)s angefordert haben."
#: contrib/admin/templates/registration/password_reset_email.html:5
#, python-format
@@ -1104,7 +1100,7 @@ msgstr "Ihr Benutzername, falls Sie ihn vergessen haben:"
#: contrib/admin/templates/registration/password_reset_email.html:13
msgid "Thanks for using our site!"
-msgstr "Vielen Dank, das Sie unsere Seiten benutzen!"
+msgstr "Vielen Dank, dass Sie unsere Seiten benutzen!"
#: contrib/admin/templates/registration/password_reset_email.html:15
#, python-format
@@ -1367,7 +1363,7 @@ msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
-"Bestimmt, das dieser Benutzer alle Berechtigungen hat, ohne diese einzeln "
+"Bestimmt, dass dieser Benutzer alle Berechtigungen hat, ohne diese einzeln "
"zuweisen zu mssen."
#: contrib/auth/models.py:98
@@ -1414,10 +1410,18 @@ msgstr "Wichtige Daten"
msgid "Groups"
msgstr "Gruppen"
-#: contrib/auth/models.py:256
+#: contrib/auth/models.py:258
msgid "message"
msgstr "Mitteilung"
+#: contrib/auth/forms.py:16
+msgid "The two password fields didn't match."
+msgstr "Die zwei Passwrter sind nicht gleich."
+
+#: contrib/auth/forms.py:24
+msgid "A user with that username already exists."
+msgstr "Ein Benutzer mit diesem Namen existiert bereits."
+
#: contrib/auth/forms.py:52
msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
@@ -1432,10 +1436,10 @@ 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 "
+"That e-mail address doesn't have an associated user account. Are you sure "
"you've registered?"
msgstr ""
-"Die Email-Adresse hat keinen Benutzer zugeordnet. Sicher, das die Adresse "
+"Die Email-Adresse hat keinen Benutzer zugeordnet. Sicher, dass die Adresse "
"hier angemeldet ist?"
#: contrib/auth/forms.py:116
@@ -1783,58 +1787,62 @@ msgid "Norwegian"
msgstr "Norwegisch"
#: conf/global_settings.py:59
+msgid "Polish"
+msgstr "Polnisch"
+
+#: conf/global_settings.py:60
msgid "Brazilian"
msgstr "Brasilianisch"
-#: conf/global_settings.py:60
+#: conf/global_settings.py:61
msgid "Romanian"
msgstr "Rumnisch"
-#: conf/global_settings.py:61
+#: conf/global_settings.py:62
msgid "Russian"
msgstr "Russisch"
-#: conf/global_settings.py:62
+#: conf/global_settings.py:63
msgid "Slovak"
msgstr "Slowakisch"
-#: conf/global_settings.py:63
+#: conf/global_settings.py:64
msgid "Slovenian"
msgstr "Slowenisch"
-#: conf/global_settings.py:64
+#: conf/global_settings.py:65
msgid "Serbian"
msgstr "Serbisch"
-#: conf/global_settings.py:65
+#: conf/global_settings.py:66
msgid "Swedish"
msgstr "Schwedisch"
-#: conf/global_settings.py:66
+#: conf/global_settings.py:67
msgid "Tamil"
msgstr "Tamilisch"
-#: conf/global_settings.py:67
+#: conf/global_settings.py:68
msgid "Turkish"
msgstr "Trkisch"
-#: conf/global_settings.py:68
+#: conf/global_settings.py:69
msgid "Ukrainian"
msgstr "Ukrainisch"
-#: conf/global_settings.py:69
+#: conf/global_settings.py:70
msgid "Simplified Chinese"
msgstr "Vereinfachtes Chinesisch"
-#: conf/global_settings.py:70
+#: conf/global_settings.py:71
msgid "Traditional Chinese"
msgstr "Traditionelles Chinesisch"
-#: core/validators.py:63
+#: core/validators.py:64
msgid "This value must contain only letters, numbers and underscores."
msgstr "Dieser Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten."
-#: core/validators.py:67
+#: core/validators.py:68
msgid ""
"This value must contain only letters, numbers, underscores, dashes or "
"slashes."
@@ -1842,85 +1850,85 @@ msgstr ""
"Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Schrgstriche "
"enthalten."
-#: core/validators.py:71
+#: core/validators.py:72
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
+#: core/validators.py:76
msgid "Uppercase letters are not allowed here."
msgstr "Grobuchstaben sind hier nicht erlaubt."
-#: core/validators.py:79
+#: core/validators.py:80
msgid "Lowercase letters are not allowed here."
msgstr "Kleinbuchstaben sind hier nicht erlaubt."
-#: core/validators.py:86
+#: core/validators.py:87
msgid "Enter only digits separated by commas."
msgstr "Hier sind nur durch Komma getrennte Ziffern erlaubt."
-#: core/validators.py:98
+#: core/validators.py:99
msgid "Enter valid e-mail addresses separated by commas."
msgstr "Bitte mit Komma getrennte, gltige eMail-Adressen eingeben."
-#: core/validators.py:102
+#: core/validators.py:103
msgid "Please enter a valid IP address."
msgstr "Bitte eine gltige IP-Adresse eingeben."
-#: core/validators.py:106
+#: core/validators.py:107
msgid "Empty values are not allowed here."
msgstr "Dieses Feld darf nicht leer sein."
-#: core/validators.py:110
+#: core/validators.py:111
msgid "Non-numeric characters aren't allowed here."
msgstr "Nichtnumerische Zeichen sind hier nicht erlaubt."
-#: core/validators.py:114
+#: core/validators.py:115
msgid "This value can't be comprised solely of digits."
msgstr "Dieser Wert darf nicht nur aus Ziffern bestehen."
-#: core/validators.py:119
+#: core/validators.py:120
msgid "Enter a whole number."
msgstr "Bitte eine ganze Zahl eingeben."
-#: core/validators.py:123
+#: core/validators.py:124
msgid "Only alphabetical characters are allowed here."
msgstr "Nur alphabetische Zeichen sind hier erlaubt."
-#: core/validators.py:138
+#: core/validators.py:139
msgid "Year must be 1900 or later."
msgstr "Das Jahr muss 1900 oder spter sein."
-#: core/validators.py:142
+#: core/validators.py:143
#, python-format
msgid "Invalid date: %s."
msgstr "Ungltiges Datum: %s"
-#: core/validators.py:146 db/models/fields/__init__.py:415
+#: core/validators.py:147 db/models/fields/__init__.py:424
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "Bitte ein gltiges Datum im Format JJJJ-MM-TT eingeben."
-#: core/validators.py:151
+#: core/validators.py:152
msgid "Enter a valid time in HH:MM format."
msgstr "Bitte eine gltige Zeit im Format SS:MM eingeben."
-#: core/validators.py:155 db/models/fields/__init__.py:477
+#: core/validators.py:156 db/models/fields/__init__.py:488
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:160
+#: core/validators.py:161
msgid "Enter a valid e-mail address."
msgstr "Bitte eine gltige eMail-Adresse eingeben"
-#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
+#: core/validators.py:173 core/validators.py:442 forms/__init__.py:667
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
+#: core/validators.py:177
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -1928,27 +1936,27 @@ msgstr ""
"Bitte ein Bild hochladen. Die Datei, die hochgeladen wurde, ist kein Bild "
"oder ist defekt."
-#: core/validators.py:183
+#: core/validators.py:184
#, 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:187
+#: core/validators.py:188
#, 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:195
+#: core/validators.py:196
#, 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:199
+#: core/validators.py:200
msgid "A valid URL is required."
msgstr "Eine gltige URL ist hier verlangt."
-#: core/validators.py:213
+#: core/validators.py:214
#, python-format
msgid ""
"Valid HTML is required. Specific errors are:\n"
@@ -1957,71 +1965,83 @@ msgstr ""
"Bitte gltiges HTML eingeben. Fehler sind:\n"
"%s"
-#: core/validators.py:220
+#: core/validators.py:221
#, python-format
msgid "Badly formed XML: %s"
msgstr "Ungltiges XML: %s"
-#: core/validators.py:230
+#: core/validators.py:238
#, python-format
msgid "Invalid URL: %s"
msgstr "Ungltige URL: %s"
-#: core/validators.py:234 core/validators.py:236
+#: core/validators.py:243 core/validators.py:245
#, python-format
msgid "The URL %s is a broken link."
msgstr "Die URL %s funktioniert nicht."
-#: core/validators.py:242
+#: core/validators.py:251
msgid "Enter a valid U.S. state abbreviation."
msgstr "Bitte eine gltige Abkrzung fr einen US-Staat eingeben."
-#: core/validators.py:256
+#: core/validators.py:265
#, 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:263
+#: core/validators.py:272
#, python-format
msgid "This field must match the '%s' field."
msgstr "Dieses Feld muss zum Feld '%s' passen."
-#: core/validators.py:282
+#: core/validators.py:291
msgid "Please enter something for at least one field."
msgstr "Bitte mindestens eines der Felder ausfllen."
-#: core/validators.py:291 core/validators.py:302
+#: core/validators.py:300 core/validators.py:311
msgid "Please enter both fields or leave them both empty."
msgstr "Bitte entweder beide Felder ausfllen, oder beide leer lassen."
-#: core/validators.py:309
+#: core/validators.py:318
#, 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:321
+#: core/validators.py:330
#, 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:340
+#: core/validators.py:349
msgid "Duplicate values are not allowed."
msgstr "Doppelte Werte sind hier nicht erlaubt."
-#: core/validators.py:363
+#: core/validators.py:364
+msgid "This value must be between %s and %s."
+msgstr "Dieser Wert muss zwischen %s und %s sein."
+
+#: core/validators.py:366
+msgid "This value must be at least %s."
+msgstr "Dieser Wert muss mindestens %s sein."
+
+#: core/validators.py:368
+msgid "This value must be no more than %s."
+msgstr "Dieser Wert darf maximal %s sein."
+
+#: core/validators.py:404
#, python-format
msgid "This value must be a power of %s."
msgstr "Dieser Wert muss eine Potenz von %s sein."
-#: core/validators.py:374
+#: core/validators.py:415
msgid "Please enter a valid decimal number."
msgstr "Bitte eine gltige Dezimalzahl eingeben."
-#: core/validators.py:378
+#: core/validators.py:419
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
@@ -2029,7 +2049,7 @@ 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:381
+#: core/validators.py:422
#, python-format
msgid ""
"Please enter a valid decimal number with a whole part of at most %s digit."
@@ -2038,7 +2058,7 @@ 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:384
+#: core/validators.py:425
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
@@ -2048,39 +2068,39 @@ msgstr[0] ""
msgstr[1] ""
"Bitte eine gltige Dezimalzahl mit maximal %s Dezimalstellen eingeben."
-#: core/validators.py:394
+#: core/validators.py:435
#, 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:395
+#: core/validators.py:436
#, 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:412
+#: core/validators.py:453
msgid "The format for this field is wrong."
msgstr "Das Format fr dieses Feld ist falsch."
-#: core/validators.py:427
+#: core/validators.py:468
msgid "This field is invalid."
msgstr "Dieses Feld ist ungltig."
-#: core/validators.py:463
+#: core/validators.py:504
#, python-format
msgid "Could not retrieve anything from %s."
msgstr "Konnte nichts von %s empfangen."
-#: core/validators.py:466
+#: core/validators.py:507
#, 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:499
+#: core/validators.py:540
#, python-format
msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
@@ -2089,7 +2109,7 @@ msgstr ""
"Bitte das ungeschlossene %(tag)s Tag in Zeile %(line)s schlieen. Die Zeile "
"beginnt mit \"%(start)s\"."
-#: core/validators.py:503
+#: core/validators.py:544
#, python-format
msgid ""
"Some text starting on line %(line)s is not allowed in that context. (Line "
@@ -2098,7 +2118,7 @@ msgstr ""
"In Zeile %(line)s ist Text, der nicht in dem Kontext erlaubt ist. Die Zeile "
"beginnt mit \"%(start)s\"."
-#: core/validators.py:508
+#: core/validators.py:549
#, python-format
msgid ""
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
@@ -2107,7 +2127,7 @@ msgstr ""
"Das Attribute %(attr)s in Zeile %(line)s ist ungltig. Die Zeile beginnt mit "
"\"%(start)s\"."
-#: core/validators.py:513
+#: core/validators.py:554
#, python-format
msgid ""
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
@@ -2116,7 +2136,7 @@ msgstr ""
"<%(tag)s> in Zeile %(line)s ist ungltig. Die Zeile beginnt mit \"%(start)s"
"\"."
-#: core/validators.py:517
+#: core/validators.py:558
#, python-format
msgid ""
"A tag on line %(line)s is missing one or more required attributes. (Line "
@@ -2125,7 +2145,7 @@ msgstr ""
"Ein Tag in Zeile %(line)s hat eines oder mehrere Pflichtattribute nicht. Die "
"Zeile beginnt mit \"%(start)s\"."
-#: core/validators.py:522
+#: core/validators.py:563
#, python-format
msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
@@ -2149,37 +2169,37 @@ msgstr "%(verbose_name)s wurde erfolgreich aktualisiert."
msgid "The %(verbose_name)s was deleted."
msgstr "%(verbose_name)s wurde gelscht"
-#: db/models/manipulators.py:302
+#: db/models/manipulators.py:305
#, python-format
msgid "%(object)s with this %(type)s already exists for the given %(field)s."
msgstr ""
"Ein '%(object)s' in dieser '%(type)s' existiert bereits fr dieses '%(field)"
"s'."
-#: db/models/fields/__init__.py:40
+#: db/models/fields/__init__.py:41
#, python-format
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "Ein '%(optname)s' mit diesem '%(fieldname)s' existiert bereits."
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
-#: forms/__init__.py:346
+#: db/models/fields/__init__.py:115 db/models/fields/__init__.py:266
+#: db/models/fields/__init__.py:569 db/models/fields/__init__.py:580
+#: forms/__init__.py:352
msgid "This field is required."
msgstr "Dieses Feld ist zwingend."
-#: db/models/fields/__init__.py:340
+#: db/models/fields/__init__.py:349
msgid "This value must be an integer."
msgstr "Dieser Wert muss eine Ganzzahl sein."
-#: db/models/fields/__init__.py:372
+#: db/models/fields/__init__.py:381
msgid "This value must be either True or False."
msgstr "Dieser Wert muss wahr oder falsch sein."
-#: db/models/fields/__init__.py:388
+#: db/models/fields/__init__.py:397
msgid "This field cannot be null."
msgstr "Dieses Feld darf nicht leer sein."
-#: db/models/fields/__init__.py:571
+#: db/models/fields/__init__.py:589
msgid "Enter a valid filename."
msgstr "Bitte einen gltigen Dateinamen eingeben"
@@ -2209,36 +2229,36 @@ msgstr[0] ""
msgstr[1] ""
"Bitte gltige IDs fr %(self)s eingeben. Die Werte %(value)r sind ungltig."
-#: forms/__init__.py:381
+#: forms/__init__.py:387
#, 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."
+msgstr[0] "Bitte sicherstellen, dass der Text weniger als %s Zeichen hat."
+msgstr[1] "Bitte sicherstellen, dass der Text weniger als %s Zeichen hat."
-#: forms/__init__.py:386
+#: forms/__init__.py:392
msgid "Line breaks are not allowed here."
msgstr "Zeilenumbrche sind hier nicht erlaubt."
-#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
+#: forms/__init__.py:493 forms/__init__.py:566 forms/__init__.py:605
#, 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:663
+#: forms/__init__.py:669
msgid "The submitted file is empty."
msgstr "Die ausgewhlte Datei ist leer."
-#: forms/__init__.py:719
+#: forms/__init__.py:725
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:729
+#: forms/__init__.py:735
msgid "Enter a positive number."
msgstr "Bitte eine ganze, positive Zahl eingeben."
-#: forms/__init__.py:739
+#: forms/__init__.py:745
msgid "Enter a whole number between 0 and 32,767."
msgstr "Bitte eine ganze Zahl zwischen 0 und 32.767 eingeben."
diff --git a/django/conf/locale/el/LC_MESSAGES/django.mo b/django/conf/locale/el/LC_MESSAGES/django.mo
index 1c95d6b5d9..4a7d8e41f0 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 173b300d04..06099eb9da 100644
--- a/django/conf/locale/el/LC_MESSAGES/django.po
+++ b/django/conf/locale/el/LC_MESSAGES/django.po
@@ -107,6 +107,11 @@ msgid ""
"\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"
@@ -141,11 +146,11 @@ msgstr "ημερομηνία βαθμολογίας"
#: contrib/comments/models.py:237
#, fuzzy
msgid "karma score"
-msgstr "βαθμολογία"
+msgstr "karma"
#: contrib/comments/models.py:238
msgid "karma scores"
-msgstr ""
+msgstr "karma"
#: contrib/comments/models.py:242
#, python-format
@@ -159,7 +164,7 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
-"Αυτο το σχόλιο σημειώθει απο %(χρήστη)ες\n"
+"Αυτο το σχόλιο σημειώθηκε απο %(χρήστη)ες\n"
"\n"
"%(κείμενο)α"
@@ -245,7 +250,7 @@ msgstr ""
#: 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 "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υπεβλήθει"
#: contrib/comments/views/comments.py:197
#: contrib/comments/views/comments.py:286
@@ -268,7 +273,7 @@ msgstr ""
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/login.html:17
msgid "Username:"
-msgstr ""
+msgstr "Όνομα χρήστη:"
#: contrib/comments/templates/comments/form.html:6
#: contrib/admin/templates/admin/login.html:20
@@ -298,21 +303,21 @@ msgstr "Ξεχάσατε τον κωδικό σας;"
#: contrib/admin/templates/admin_doc/index.html:4
#: contrib/admin/templates/admin_doc/model_index.html:5
msgid "Log out"
-msgstr ""
+msgstr "Αποσύνδεση"
#: contrib/comments/templates/comments/form.html:12
msgid "Ratings"
-msgstr ""
+msgstr "Βαθμολογίες"
#: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23
msgid "Required"
-msgstr ""
+msgstr "Απαραίτητο"
#: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23
msgid "Optional"
-msgstr ""
+msgstr "Προαιρετικό"
#: contrib/comments/templates/comments/form.html:23
msgid "Post a photo"
@@ -326,11 +331,11 @@ msgstr "Σχόλιο:"
#: contrib/comments/templates/comments/form.html:32
#: contrib/comments/templates/comments/freeform.html:9
msgid "Preview comment"
-msgstr ""
+msgstr "Προεπισκόπηση σχολίου"
#: contrib/comments/templates/comments/freeform.html:4
msgid "Your name:"
-msgstr ""
+msgstr "Το όνομα σας:"
#: contrib/admin/filterspecs.py:40
#, python-format
@@ -338,15 +343,17 @@ 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 ""
+msgstr "Όλα"
#: contrib/admin/filterspecs.py:109
msgid "Any date"
-msgstr ""
+msgstr "Όλες οι ημερομηνίες"
#: contrib/admin/filterspecs.py:110
msgid "Today"
@@ -354,7 +361,7 @@ msgstr "Σήμερα"
#: contrib/admin/filterspecs.py:113
msgid "Past 7 days"
-msgstr ""
+msgstr "Τις προηγούμενες 7 ημέρες"
#: contrib/admin/filterspecs.py:115
msgid "This month"
@@ -374,7 +381,7 @@ msgstr "Όχι"
#: contrib/admin/filterspecs.py:150
msgid "Unknown"
-msgstr "’γνωστο"
+msgstr "Άγνωστο"
#: contrib/admin/models.py:16
msgid "action time"
@@ -441,7 +448,7 @@ msgstr ""
#: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character."
-msgstr "Τα ονόματα των Χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'."
+msgstr "Τα ονόματα των χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'."
#: contrib/admin/views/decorators.py:84
#, python-format
@@ -452,16 +459,16 @@ msgstr ""
#: contrib/admin/views/main.py:226
msgid "Site administration"
-msgstr "Διαχείριση του Διαδυκτιακού χώρου"
+msgstr "Διαχείριση του Διαδικτυακού χώρου"
#: contrib/admin/views/main.py:260
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
+msgstr "Το %(name)s \"%(obj)s\" αποθηκεύτηκε επιτυχώς."
#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
msgid "You may edit it again below."
-msgstr ""
+msgstr "Μπορείτε να το επεξεργαστείτε ξανα παρακάτω."
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format
@@ -471,12 +478,12 @@ msgstr "Μπορείτε να προσθέσετε ακόμα ένα %s απο
#: contrib/admin/views/main.py:290
#, python-format
msgid "Add %s"
-msgstr ""
+msgstr "Προσθήκη %s"
#: contrib/admin/views/main.py:336
#, python-format
msgid "Added %s."
-msgstr ""
+msgstr "Προστέθηκε %s."
#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
#: contrib/admin/views/main.py:340
@@ -486,32 +493,33 @@ msgstr "και"
#: contrib/admin/views/main.py:338
#, python-format
msgid "Changed %s."
-msgstr ""
+msgstr "Επεξεργάσθηκε %s."
#: contrib/admin/views/main.py:340
#, python-format
msgid "Deleted %s."
-msgstr ""
+msgstr "Διεγράφη %s."
#: contrib/admin/views/main.py:343
msgid "No fields changed."
-msgstr ""
+msgstr "Κανένα πεδίο δεν άλλαξε."
#: contrib/admin/views/main.py:346
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
+msgstr "Το %(name)s \"%(obj)s\" επεξεργάσθηκε επιτυχώς."
#: 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\" αποθηκεύθηκε επιτυχώς. Μπορείτε να το επεξεργαστείτε πάλι παρακάτω."
#: contrib/admin/views/main.py:392
#, python-format
msgid "Change %s"
-msgstr ""
+msgstr "Αλλαγή %s"
#: contrib/admin/views/main.py:470
#, python-format
@@ -535,17 +543,17 @@ msgstr "Είστε σίγουρος;"
#: contrib/admin/views/main.py:533
#, python-format
msgid "Change history: %s"
-msgstr ""
+msgstr "Ιστορικό Αλλαγών: %s"
#: contrib/admin/views/main.py:565
#, python-format
msgid "Select %s"
-msgstr ""
+msgstr "Επιλογή %s"
#: contrib/admin/views/main.py:565
#, python-format
msgid "Select %s to change"
-msgstr ""
+msgstr "Επιλέξτε %s προς αλλαγή"
#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
@@ -555,7 +563,7 @@ msgstr "Ακέραιος"
#: contrib/admin/views/doc.py:278
msgid "Boolean (Either True or False)"
-msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
+msgstr "Boolean (Είτε Αληθές ή Ψέυδές)"
#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
#, python-format
@@ -580,7 +588,7 @@ msgstr "Ηλεκτρονική διεύθυνση"
#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
msgid "File path"
-msgstr ""
+msgstr "Τοποθεσία Αρχείου"
#: contrib/admin/views/doc.py:285
msgid "Decimal number"
@@ -592,7 +600,7 @@ msgstr ""
#: contrib/admin/views/doc.py:292
msgid "Relation to parent model"
-msgstr ""
+msgstr "Σχέση με το γονεϊκό μοντέλο"
#: contrib/admin/views/doc.py:293
msgid "Phone number"
@@ -627,7 +635,7 @@ msgstr ""
#: contrib/admin/templates/registration/password_change_form.html:3
#: contrib/admin/templates/admin_doc/bookmarklets.html:3
msgid "Documentation"
-msgstr ""
+msgstr "Τεκμηρίωση"
#: contrib/admin/templates/admin/object_history.html:3
#: contrib/admin/templates/admin/change_list.html:5
@@ -667,11 +675,11 @@ msgstr "Home"
#: contrib/admin/templates/admin/object_history.html:5
#: contrib/admin/templates/admin/change_form.html:20
msgid "History"
-msgstr ""
+msgstr "Ιστορικό"
#: contrib/admin/templates/admin/object_history.html:18
msgid "Date/time"
-msgstr ""
+msgstr "Ημερομηνία/Ώρα"
#: contrib/admin/templates/admin/object_history.html:19
msgid "User"
@@ -679,7 +687,7 @@ msgstr "Χρήστης"
#: contrib/admin/templates/admin/object_history.html:20
msgid "Action"
-msgstr ""
+msgstr "Δράση"
#: contrib/admin/templates/admin/object_history.html:26
msgid "DATE_WITH_TIME_FULL"
@@ -697,19 +705,19 @@ msgstr "Διαχειριστής ιστοσελίδας Django"
#: contrib/admin/templates/admin/base_site.html:7
msgid "Django administration"
-msgstr ""
+msgstr "Διαχείριση Django"
#: contrib/admin/templates/admin/500.html:4
msgid "Server error"
-msgstr ""
+msgstr "Σφάλμα Διακομιστή"
#: contrib/admin/templates/admin/500.html:6
msgid "Server error (500)"
-msgstr ""
+msgstr "Σφάλμα Διακομιστή (500)"
#: contrib/admin/templates/admin/500.html:9
msgid "Server Error (500)"
-msgstr ""
+msgstr "Σφάλμα Διακομιστή (500)"
#: contrib/admin/templates/admin/500.html:10
msgid ""
@@ -720,7 +728,7 @@ msgstr ""
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
msgid "Page not found"
-msgstr ""
+msgstr "Η σελίδα δε βρέθηκε."
#: contrib/admin/templates/admin/404.html:10
msgid "We're sorry, but the requested page could not be found."
@@ -729,24 +737,24 @@ msgstr ""
#: contrib/admin/templates/admin/index.html:17
#, python-format
msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Διαθέσιμα μοντέλα στην εφαρμογή %(name)s."
#: contrib/admin/templates/admin/index.html:28
#: contrib/admin/templates/admin/change_form.html:15
msgid "Add"
-msgstr ""
+msgstr "Προσθήκη"
#: contrib/admin/templates/admin/index.html:34
msgid "Change"
-msgstr ""
+msgstr "Επεξεργασία"
#: contrib/admin/templates/admin/index.html:44
msgid "You don't have permission to edit anything."
-msgstr ""
+msgstr "Δεν έχετε άδεια να επεξεργαστείτε τίποτα."
#: contrib/admin/templates/admin/index.html:52
msgid "Recent Actions"
-msgstr ""
+msgstr "Πρόσφατες Πράξεις"
#: contrib/admin/templates/admin/index.html:53
msgid "My Actions"
@@ -754,16 +762,16 @@ msgstr "Οι πράξεις μου"
#: contrib/admin/templates/admin/index.html:57
msgid "None available"
-msgstr ""
+msgstr "Κανένα διαθέσιμο"
#: contrib/admin/templates/admin/change_list.html:11
#, python-format
msgid "Add %(name)s"
-msgstr ""
+msgstr "Προσθήκη %(name)s"
#: contrib/admin/templates/admin/login.html:22
msgid "Have you forgotten your password?"
-msgstr ""
+msgstr "Ξεχάσατε τον κωδικό σας; "
#: contrib/admin/templates/admin/base.html:23
msgid "Welcome,"
@@ -772,7 +780,7 @@ msgstr "Καλωσήρθατε,"
#: contrib/admin/templates/admin/delete_confirmation.html:9
#: contrib/admin/templates/admin/submit_line.html:3
msgid "Delete"
-msgstr ""
+msgstr "Διαγραφή"
#: contrib/admin/templates/admin/delete_confirmation.html:14
#, python-format
@@ -800,37 +808,37 @@ msgstr ""
#: contrib/admin/templates/admin/search_form.html:8
msgid "Go"
-msgstr ""
+msgstr "Πήγαινε"
#: contrib/admin/templates/admin/change_form.html:21
msgid "View on site"
-msgstr ""
+msgstr "Προβολή στην ιστοσελίδα"
#: 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] "Παρακαλώ διορθώστε το παρακάτω λάθος."
+msgstr[1] "Παρακαλώ διορθώστε τα παρακάτω λάθη."
#: contrib/admin/templates/admin/change_form.html:48
msgid "Ordering"
-msgstr ""
+msgstr "Σειρά"
#: contrib/admin/templates/admin/change_form.html:51
msgid "Order:"
-msgstr ""
+msgstr "Σειρά:"
#: contrib/admin/templates/admin/submit_line.html:4
msgid "Save as new"
-msgstr ""
+msgstr "Αποθήκευση καινούριου"
#: contrib/admin/templates/admin/submit_line.html:5
msgid "Save and add another"
-msgstr ""
+msgstr "Αποθήκευση και προσθήκη καινούριου."
#: contrib/admin/templates/admin/submit_line.html:6
msgid "Save and continue editing"
-msgstr ""
+msgstr "Αποθήκευση και συνέχεια επεξεργασίας"
#: contrib/admin/templates/admin/submit_line.html:7
msgid "Save"
@@ -841,12 +849,12 @@ msgstr "Αποθήκευση"
#: contrib/admin/templates/registration/password_change_form.html:6
#: contrib/admin/templates/registration/password_change_form.html:10
msgid "Password change"
-msgstr ""
+msgstr "Αλλαγή Κωδικού"
#: contrib/admin/templates/registration/password_change_done.html:6
#: contrib/admin/templates/registration/password_change_done.html:10
msgid "Password change successful"
-msgstr ""
+msgstr "Αλλαγή κωδικού επιτυχής"
#: contrib/admin/templates/registration/password_change_done.html:12
msgid "Your password was changed."
@@ -857,7 +865,7 @@ msgstr "Ο κωδίκός σας άλλαξε."
#: contrib/admin/templates/registration/password_reset_form.html:10
#: contrib/admin/templates/registration/password_reset_done.html:4
msgid "Password reset"
-msgstr ""
+msgstr "Επαναφορά κωδικού"
#: contrib/admin/templates/registration/password_reset_form.html:12
msgid ""
@@ -867,11 +875,11 @@ msgstr ""
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "E-mail address:"
-msgstr ""
+msgstr "E-mail διεύθυνση:"
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "Reset my password"
-msgstr ""
+msgstr "Επαναφορά του κωδικού μου"
#: contrib/admin/templates/registration/logged_out.html:8
msgid "Thanks for spending some quality time with the Web site today."
@@ -880,7 +888,7 @@ msgstr ""
#: contrib/admin/templates/registration/logged_out.html:10
msgid "Log in again"
-msgstr ""
+msgstr "Εισαγωγή ξανά"
#: contrib/admin/templates/registration/password_reset_done.html:6
#: contrib/admin/templates/registration/password_reset_done.html:10
@@ -909,11 +917,11 @@ msgstr "Νέος κωδικός:"
#: contrib/admin/templates/registration/password_change_form.html:21
msgid "Confirm password:"
-msgstr ""
+msgstr "Επιβεβαίωση κωδικού"
#: contrib/admin/templates/registration/password_change_form.html:23
msgid "Change my password"
-msgstr ""
+msgstr "Αλλαγή του κωδικού μου"
#: contrib/admin/templates/registration/password_reset_email.html:2
msgid "You're receiving this e-mail because you requested a password reset"
@@ -1003,19 +1011,19 @@ msgstr ""
#: contrib/admin/templates/widget/date_time.html:3
msgid "Date:"
-msgstr ""
+msgstr "Ημ/νία:"
#: contrib/admin/templates/widget/date_time.html:4
msgid "Time:"
-msgstr ""
+msgstr " Ώρα:"
#: contrib/admin/templates/widget/file.html:2
msgid "Currently:"
-msgstr ""
+msgstr "Τρέχον:"
#: contrib/admin/templates/widget/file.html:3
msgid "Change:"
-msgstr ""
+msgstr "Αλλαγή:"
#: contrib/redirects/models.py:7
msgid "redirect from"
@@ -1271,192 +1279,192 @@ msgstr "P"
#: utils/dates.py:6
msgid "Monday"
-msgstr ""
+msgstr "Δευτέρα"
#: utils/dates.py:6
msgid "Tuesday"
-msgstr ""
+msgstr "Τρίτη"
#: utils/dates.py:6
msgid "Wednesday"
-msgstr ""
+msgstr "Τετάρτη"
#: utils/dates.py:6
msgid "Thursday"
-msgstr ""
+msgstr "Πέμπτη"
#: utils/dates.py:6
msgid "Friday"
-msgstr ""
+msgstr "Παρασκευή"
#: utils/dates.py:7
msgid "Saturday"
-msgstr ""
+msgstr "Σάββατο"
#: utils/dates.py:7
msgid "Sunday"
-msgstr ""
+msgstr "Κυριακή"
#: utils/dates.py:14
msgid "January"
-msgstr ""
+msgstr "Ιανουάριος"
#: utils/dates.py:14
msgid "February"
-msgstr ""
+msgstr "Φεβρουάριος"
#: utils/dates.py:14 utils/dates.py:27
msgid "March"
-msgstr ""
+msgstr "Μάρτιος"
#: utils/dates.py:14 utils/dates.py:27
msgid "April"
-msgstr ""
+msgstr "Απρίλιος"
#: utils/dates.py:14 utils/dates.py:27
msgid "May"
-msgstr ""
+msgstr "Μάιος"
#: utils/dates.py:14 utils/dates.py:27
msgid "June"
-msgstr ""
+msgstr "Ιούνιος"
#: utils/dates.py:15 utils/dates.py:27
msgid "July"
-msgstr ""
+msgstr "Ιούλιος"
#: utils/dates.py:15
msgid "August"
-msgstr ""
+msgstr "Αύγουστος"
#: utils/dates.py:15
msgid "September"
-msgstr ""
+msgstr "Σεπτέμβριος"
#: utils/dates.py:15
msgid "October"
-msgstr ""
+msgstr "Οκτώβριος"
#: utils/dates.py:15
msgid "November"
-msgstr ""
+msgstr "Νοέμβριος"
#: utils/dates.py:16
msgid "December"
-msgstr ""
+msgstr "Δεκέμβριος"
#: utils/dates.py:19
#, fuzzy
msgid "jan"
-msgstr "και"
+msgstr "Ιαν"
#: utils/dates.py:19
msgid "feb"
-msgstr ""
+msgstr "Φεβ"
#: utils/dates.py:19
msgid "mar"
-msgstr ""
+msgstr "Μάρ"
#: utils/dates.py:19
msgid "apr"
-msgstr ""
+msgstr "Απρ"
#: utils/dates.py:19
msgid "may"
-msgstr ""
+msgstr "Μάι"
#: utils/dates.py:19
msgid "jun"
-msgstr ""
+msgstr "Ιούν"
#: utils/dates.py:20
msgid "jul"
-msgstr ""
+msgstr "Ιούλ"
#: utils/dates.py:20
msgid "aug"
-msgstr ""
+msgstr "Αύγ"
#: utils/dates.py:20
msgid "sep"
-msgstr ""
+msgstr "Σεπ"
#: utils/dates.py:20
msgid "oct"
-msgstr ""
+msgstr "Οκτ"
#: utils/dates.py:20
msgid "nov"
-msgstr ""
+msgstr "Νοέ"
#: utils/dates.py:20
msgid "dec"
-msgstr ""
+msgstr "Δεκ"
#: utils/dates.py:27
msgid "Jan."
-msgstr ""
+msgstr "Ιάν."
#: utils/dates.py:27
msgid "Feb."
-msgstr ""
+msgstr "Φεβ."
#: utils/dates.py:28
msgid "Aug."
-msgstr ""
+msgstr "Αύγ."
#: utils/dates.py:28
msgid "Sept."
-msgstr ""
+msgstr "Σεπτ."
#: utils/dates.py:28
msgid "Oct."
-msgstr ""
+msgstr "Οκτ."
#: utils/dates.py:28
msgid "Nov."
-msgstr ""
+msgstr "Νοέ."
#: utils/dates.py:28
msgid "Dec."
-msgstr ""
+msgstr "Δεκ."
#: utils/timesince.py:12
msgid "year"
msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "χρόνος"
+msgstr[1] "χρόνια"
#: utils/timesince.py:13
msgid "month"
msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "μήνας"
+msgstr[1] "μήνες"
#: utils/timesince.py:14
msgid "week"
msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "εβδομάδα"
+msgstr[1] "εβδομάδες"
#: utils/timesince.py:15
msgid "day"
msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ημέρα"
+msgstr[1] "ημέρες"
#: utils/timesince.py:16
msgid "hour"
msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ώρα"
+msgstr[1] "ώρες"
#: utils/timesince.py:17
msgid "minute"
msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "λεπτό"
+msgstr[1] "λεπτά"
#: conf/global_settings.py:37
msgid "Bengali"
@@ -1630,7 +1638,7 @@ msgstr ""
#: core/validators.py:136
msgid "Enter a valid e-mail address."
-msgstr ""
+msgstr "Εισάγετε ένα σωστό e-mail."
#: core/validators.py:148
msgid ""
@@ -1745,12 +1753,12 @@ msgstr[1] ""
#: core/validators.py:362
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Σιγουρευτείτε ότι το αρχείου που ανεβάζετε είναι %s bytes τουλάχιστον."
+msgstr "Σιγουρευτείτε ότι το αρχείο που ανεβάζετε είναι %s bytes τουλάχιστον."
#: core/validators.py:363
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr ""
+msgstr "Σιγουρευτείτε ότι το αρχείο που ανεβάζετε έχει μέγεθος μέχρι %s bytes."
#: core/validators.py:376
msgid "The format for this field is wrong."
@@ -1827,7 +1835,7 @@ msgstr ""
#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
#: forms/__init__.py:346
msgid "This field is required."
-msgstr ""
+msgstr "Αυτό το πεδίο είναι απαραίτητο"
#: db/models/fields/__init__.py:337
msgid "This value must be an integer."
@@ -1836,12 +1844,12 @@ msgstr ""
#: db/models/fields/__init__.py:369
#, fuzzy
msgid "This value must be either True or False."
-msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
+msgstr "Boolean (Είτε Αληθές ή Ψευδές)"
#: db/models/fields/__init__.py:385
#, fuzzy
msgid "This field cannot be null."
-msgstr "Αυτό το πεδίο είναι άκυρο"
+msgstr "Αυτό το πεδίο δεν μπορεί να είναι κενό (null)"
#: db/models/fields/__init__.py:562
msgid "Enter a valid filename."
@@ -1850,7 +1858,7 @@ msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου"
#: db/models/fields/related.py:43
#, python-format
msgid "Please enter a valid %s."
-msgstr ""
+msgstr "Παρακαλώ εισάγετε ένα/μία έγκυρο/η %s"
#: db/models/fields/related.py:579
#, fuzzy
diff --git a/django/conf/locale/el/LC_MESSAGES/djangojs.mo b/django/conf/locale/el/LC_MESSAGES/djangojs.mo
new file mode 100644
index 0000000000..7d43b315fe
Binary files /dev/null and b/django/conf/locale/el/LC_MESSAGES/djangojs.mo differ
diff --git a/django/conf/locale/el/LC_MESSAGES/djangojs.po b/django/conf/locale/el/LC_MESSAGES/djangojs.po
new file mode 100644
index 0000000000..545f9f8601
--- /dev/null
+++ b/django/conf/locale/el/LC_MESSAGES/djangojs.po
@@ -0,0 +1,109 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2006 and beyond.
+# This file is distributed under the same license as the Django package.
+# Orestis Markou , 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\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: Orestis Markou \n"
+"Language-Team: Greek\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
+#, perl-format
+msgid "Available %s"
+msgstr "Διαθέσιμο %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Επιλογή Όλων"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Προσθήκη"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Αφαίρεση"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "Επιλεχθέντα %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "Επιλέξτε και κάντε κλικ."
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Καθαρισμός όλων"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr "Ιανουάριος Φεβρουάριος Μάρτιος Απρίλιος Μάιος Ιούνιος Ιούλιος Αύγουστος Σεπτέμβριος Οκτώβριος Νοέμβριος "
+"Δεκέμβριος"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Κυριακή Δευτέρα Τρίτη Τετάρτη Πέμπτη Παρασκευή Σάββατο"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "Κ Δ Τ Τ Π Π Σ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "Τώρα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "Ρολόι"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "Διαλέξτε ώρα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "Μεσάνυχτα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "6 π.μ."
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "Μεσημέρι"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "Άκυρο"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "Σήμερα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "Ημερολόγιο"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "Χθες"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "Αύριο"
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.mo b/django/conf/locale/es_AR/LC_MESSAGES/django.mo
index dd96bf99ce..a247bb2385 100644
Binary files a/django/conf/locale/es_AR/LC_MESSAGES/django.mo and b/django/conf/locale/es_AR/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.po b/django/conf/locale/es_AR/LC_MESSAGES/django.po
index e5169e9c4a..36cae2f7f2 100644
--- a/django/conf/locale/es_AR/LC_MESSAGES/django.po
+++ b/django/conf/locale/es_AR/LC_MESSAGES/django.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-08-18 18:57-0300\n"
-"PO-Revision-Date: 2006-08-21 18:06-0300\n"
+"POT-Creation-Date: 2006-11-05 19:57-0300\n"
+"PO-Revision-Date: 2006-11-05 20:00-0300\n"
"Last-Translator: Ramiro Morales \n"
"Language-Team: Spanish \n"
"MIME-Version: 1.0\n"
@@ -165,10 +165,18 @@ msgstr "Fechas importantes"
msgid "Groups"
msgstr "Grupos"
-#: contrib/auth/models.py:256
+#: contrib/auth/models.py:258
msgid "message"
msgstr "mensaje"
+#: contrib/auth/forms.py:16
+msgid "The two password fields didn't match."
+msgstr "Los dos campos de contraseas no coinciden entre si."
+
+#: contrib/auth/forms.py:24
+msgid "A user with that username already exists."
+msgstr "Ya existe un usuario con ese nombre."
+
#: contrib/auth/forms.py:52
msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
@@ -189,6 +197,24 @@ msgstr ""
msgid "This account is inactive."
msgstr "Esta cuenta est inactiva"
+#: contrib/auth/forms.py:84
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Esa direccin de e-mail no est asociada a ninguna cuenta de usuario. Est "
+"seguro de que ya se ha registrado?"
+
+#: contrib/auth/forms.py:116
+msgid "The two 'new password' fields didn't match."
+msgstr "Los dos campos 'nueva contrasea' no coinciden entre si."
+
+#: contrib/auth/forms.py:123
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr ""
+"La antigua contrasea ingresada es incorrecta. Por favor ingrsela "
+"nuevamente."
+
#: contrib/redirects/models.py:7
msgid "redirect from"
msgstr "redirigir desde"
@@ -754,13 +780,13 @@ msgstr ""
msgid "Site administration"
msgstr "Sitio administrativo"
-#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:14
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:18
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Se agreg con xito el %(name)s \"%(obj)s\"."
+msgstr "Se agreg con xito %(name)s \"%(obj)s\"."
#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
-#: contrib/admin/views/auth.py:19
+#: contrib/admin/views/auth.py:23
msgid "You may edit it again below."
msgstr "Puede modificarlo nuevamente abajo."
@@ -780,7 +806,7 @@ msgid "Added %s."
msgstr "Agregado %s."
#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339
+#: contrib/admin/views/main.py:339 db/models/manipulators.py:306
msgid "and"
msgstr "y"
@@ -801,15 +827,14 @@ msgstr "No ha modificado ning
#: contrib/admin/views/main.py:345
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Se modific con xito el %(name)s \"%(obj)s."
+msgstr "Se modific con xito %(name)s \"%(obj)s."
#: contrib/admin/views/main.py:353
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
-"Se agreg con xito el %(name)s \"%(obj)s. Puede modificarlo nuevamente "
-"abajo."
+"Se agreg con xito %(name)s \"%(obj)s. Puede modificarlo nuevamente abajo."
#: contrib/admin/views/main.py:391
#, python-format
@@ -829,7 +854,7 @@ msgstr "Uno o m
#: contrib/admin/views/main.py:511
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Se elimin con xito el %(name)s \"%(obj)s\"."
+msgstr "Se elimin con xito %(name)s \"%(obj)s\"."
#: contrib/admin/views/main.py:514
msgid "Are you sure?"
@@ -850,7 +875,7 @@ msgstr "Seleccione %s"
msgid "Select %s to change"
msgstr "Seleccione %s a modificar"
-#: contrib/admin/views/main.py:756
+#: contrib/admin/views/main.py:758
msgid "Database error"
msgstr "Error de base de datos"
@@ -977,12 +1002,12 @@ msgstr "Estado de los EEUU (dos letras may
msgid "XML text"
msgstr "Texto XML"
-#: contrib/admin/views/doc.py:339
+#: contrib/admin/views/doc.py:343
#, python-format
msgid "%s does not appear to be a urlpattern object"
msgstr "%s no parece ser un objeto urlpattern"
-#: contrib/admin/views/auth.py:25
+#: contrib/admin/views/auth.py:29
msgid "Add user"
msgstr "Agregar usuario"
@@ -1181,10 +1206,6 @@ msgstr "P
msgid "We're sorry, but the requested page could not be found."
msgstr "Lo sentimos, pero no se encuentra la pgina solicitada."
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you forgotten your password?"
-msgstr "Ha olvidado su contrasea?"
-
#: contrib/admin/templates/admin/filters.html:4
msgid "Filter"
msgstr "Filtrar"
@@ -1726,123 +1747,134 @@ msgid "Argentinean Spanish"
msgstr "Espaol Argentino"
#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "Finlands"
+
+#: conf/global_settings.py:50
msgid "French"
msgstr "Francs"
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
msgid "Galician"
msgstr "Gallego"
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
msgid "Hungarian"
msgstr "Hngaro"
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
msgid "Hebrew"
msgstr "Hebreo"
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
msgid "Icelandic"
msgstr "Islands"
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
msgid "Italian"
msgstr "Italiano"
-#: conf/global_settings.py:55
+#: conf/global_settings.py:56
msgid "Japanese"
msgstr "Japons"
-#: conf/global_settings.py:56
+#: conf/global_settings.py:57
msgid "Dutch"
msgstr "Holands"
-#: conf/global_settings.py:57
+#: conf/global_settings.py:58
msgid "Norwegian"
msgstr "Noruego"
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
+msgid "Polish"
+msgstr "Polaco"
+
+#: conf/global_settings.py:60
msgid "Brazilian"
msgstr "Brasileo"
-#: conf/global_settings.py:59
+#: conf/global_settings.py:61
msgid "Romanian"
msgstr "Rumano"
-#: conf/global_settings.py:60
+#: conf/global_settings.py:62
msgid "Russian"
msgstr "Ruso"
-#: conf/global_settings.py:61
+#: conf/global_settings.py:63
msgid "Slovak"
msgstr "Eslovaco"
-#: conf/global_settings.py:62
+#: conf/global_settings.py:64
msgid "Slovenian"
msgstr "Esloveno"
-#: conf/global_settings.py:63
+#: conf/global_settings.py:65
msgid "Serbian"
msgstr "Serbio"
-#: conf/global_settings.py:64
+#: conf/global_settings.py:66
msgid "Swedish"
msgstr "Sueco"
-#: conf/global_settings.py:65
+#: conf/global_settings.py:67
msgid "Tamil"
msgstr "Tamil"
-#: conf/global_settings.py:66
+#: conf/global_settings.py:68
+msgid "Turkish"
+msgstr "Turco"
+
+#: conf/global_settings.py:69
msgid "Ukrainian"
msgstr "Ucraniano"
-#: conf/global_settings.py:67
+#: conf/global_settings.py:70
msgid "Simplified Chinese"
msgstr "Chino simplificado"
-#: conf/global_settings.py:68
+#: conf/global_settings.py:71
msgid "Traditional Chinese"
msgstr "Chino tradicional"
-#: db/models/manipulators.py:302
+#: db/models/manipulators.py:305
#, python-format
msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-"Ya existen %(object)s con este %(type)s para el %(field)s especificado."
+msgstr "Ya existe un(a) %(object)s con este/a %(type)s para %(field)s."
-#: db/models/fields/__init__.py:40
+#: db/models/fields/__init__.py:41
#, python-format
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "Ya existe %(optname)s con este %(fieldname)s."
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
-#: forms/__init__.py:346
+#: db/models/fields/__init__.py:115 db/models/fields/__init__.py:266
+#: db/models/fields/__init__.py:569 db/models/fields/__init__.py:580
+#: forms/__init__.py:347
msgid "This field is required."
msgstr "Este campo es obligatorio."
-#: db/models/fields/__init__.py:340
+#: db/models/fields/__init__.py:349
msgid "This value must be an integer."
msgstr "Este valor debe ser un nmero entero."
-#: db/models/fields/__init__.py:372
+#: db/models/fields/__init__.py:381
msgid "This value must be either True or False."
msgstr "Este valor debe ser True o False."
-#: db/models/fields/__init__.py:388
+#: db/models/fields/__init__.py:397
msgid "This field cannot be null."
msgstr "Este campo no puede ser nulo."
-#: db/models/fields/__init__.py:415 core/validators.py:127
+#: db/models/fields/__init__.py:424 core/validators.py:146
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "Introduzca una fecha vlida en formato AAAA-MM-DD."
-#: db/models/fields/__init__.py:477 core/validators.py:135
+#: db/models/fields/__init__.py:488 core/validators.py:155
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
msgstr "Introduzca una fecha/hora vlida en formato YYYY-MM-DD HH:MM."
-#: db/models/fields/__init__.py:571
+#: db/models/fields/__init__.py:589
msgid "Enter a valid filename."
msgstr "Introduzca un nombre de achivo vlido"
@@ -1859,7 +1891,8 @@ msgstr " Separe m
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
-"Pulse \"Control\", o \"Command\" en un Mac, para seleccionar ms de uno."
+"Mantenga presionada \"Control\" (\"Command\" en un Mac) para seleccionar ms "
+"de uno."
#: db/models/fields/related.py:664
#, python-format
@@ -1873,42 +1906,42 @@ msgstr[1] ""
"Por favor, introduzca IDs de %(self)s vlidos. Los valores %(value)r no son "
"vlidos."
-#: forms/__init__.py:381
+#: forms/__init__.py:382
#, python-format
msgid "Ensure your text is less than %s character."
msgid_plural "Ensure your text is less than %s characters."
msgstr[0] "Asegrese de que su texto tiene menos de %s carcter."
msgstr[1] "Asegrese de que su texto tiene menos de %s caracteres."
-#: forms/__init__.py:386
+#: forms/__init__.py:387
msgid "Line breaks are not allowed here."
msgstr "No se permiten saltos de lnea."
-#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
+#: forms/__init__.py:488 forms/__init__.py:561 forms/__init__.py:600
#, python-format
msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
msgstr "Seleccione una opcin vlida; '%(data)s' no est en %(choices)s."
-#: forms/__init__.py:661 core/validators.py:151 core/validators.py:379
+#: forms/__init__.py:662 core/validators.py:172 core/validators.py:401
msgid "No file was submitted. Check the encoding type on the form."
msgstr ""
"No se envi un archivo. Verifique el tipo de codificacin en el formulario."
-#: forms/__init__.py:663
+#: forms/__init__.py:664
msgid "The submitted file is empty."
msgstr "El archivo enviado est vaco."
-#: forms/__init__.py:719
+#: forms/__init__.py:720
msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Introduzca un nmero entero entre -32,768 y 32,767."
+msgstr "Introduzca un nmero entero entre -32.768 y 32.767."
-#: forms/__init__.py:729
+#: forms/__init__.py:730
msgid "Enter a positive number."
msgstr "Introduzca un nmero positivo."
-#: forms/__init__.py:739
+#: forms/__init__.py:740
msgid "Enter a whole number between 0 and 32,767."
-msgstr "Introduzca un nmero entero entre 0 y 32,767."
+msgstr "Introduzca un nmero entero entre 0 y 32.767."
#: core/validators.py:63
msgid "This value must contain only letters, numbers and underscores."
@@ -1919,8 +1952,13 @@ msgid ""
"This value must contain only letters, numbers, underscores, dashes or "
"slashes."
msgstr ""
-"Este valor debe contener slo letras, nmeros, guiones bajos, barras (/) o "
-"slashes."
+"Este valor debe contener slo letras, nmeros, guiones bajos, guiones o "
+"barras (/)"
+
+#: core/validators.py:71
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+"Este valor debe contener slo letras, nmeros, guiones bajos o guiones."
#: core/validators.py:75
msgid "Uppercase letters are not allowed here."
@@ -1962,15 +2000,24 @@ msgstr "Introduzca un n
msgid "Only alphabetical characters are allowed here."
msgstr "Slo se admiten caracteres alfabticos."
-#: core/validators.py:131
+#: core/validators.py:138
+msgid "Year must be 1900 or later."
+msgstr "El ao debe ser 1900 o posterior."
+
+#: core/validators.py:142
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Fecha no vlida: %s."
+
+#: core/validators.py:151
msgid "Enter a valid time in HH:MM format."
msgstr "Introduzca una hora vlida en formato HH:MM."
-#: core/validators.py:139
+#: core/validators.py:160
msgid "Enter a valid e-mail address."
msgstr "Introduzca una direccin de correo electrnico vlida"
-#: core/validators.py:155
+#: core/validators.py:176
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -1978,28 +2025,28 @@ msgstr ""
"Enve una imagen vlida. El archivo que ha enviado no era una imagen o se "
"trataba de una imagen corrupta."
-#: core/validators.py:162
+#: core/validators.py:183
#, python-format
msgid "The URL %s does not point to a valid image."
msgstr "La URL %s no apunta a una imagen vlida."
-#: core/validators.py:166
+#: core/validators.py:187
#, python-format
msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
msgstr ""
-"Los nmeros de telfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" "
-"no es vlido."
+"Los nmeros telefnicos deben respetar el formato XXX-XXX-XXXX. \"%s\" no es "
+"vlido."
-#: core/validators.py:174
+#: core/validators.py:195
#, python-format
msgid "The URL %s does not point to a valid QuickTime video."
msgstr "La URL %s no apunta a un vdeo QuickTime vlido."
-#: core/validators.py:178
+#: core/validators.py:199
msgid "A valid URL is required."
msgstr "Se precisa una URL vlida."
-#: core/validators.py:192
+#: core/validators.py:213
#, python-format
msgid ""
"Valid HTML is required. Specific errors are:\n"
@@ -2008,69 +2055,69 @@ msgstr ""
"Se precisa HTML vlido. Los errores especficos son:\n"
"%s"
-#: core/validators.py:199
+#: core/validators.py:220
#, python-format
msgid "Badly formed XML: %s"
msgstr "XML mal formado: %s"
-#: core/validators.py:209
+#: core/validators.py:230
#, python-format
msgid "Invalid URL: %s"
msgstr "URL no vlida: %s"
-#: core/validators.py:213 core/validators.py:215
+#: core/validators.py:234 core/validators.py:236
#, python-format
msgid "The URL %s is a broken link."
msgstr "La URL %s es un enlace roto."
-#: core/validators.py:221
+#: core/validators.py:242
msgid "Enter a valid U.S. state abbreviation."
msgstr "Introduzca una abreviatura vlida de estado de los EEUU."
-#: core/validators.py:236
+#: 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] "Vigila tu boca! Aqu no admitimos la palabra %s."
msgstr[1] "Vigila tu boca! Aqu no admitimos las palabras %s."
-#: core/validators.py:243
+#: core/validators.py:263
#, python-format
msgid "This field must match the '%s' field."
msgstr "Este campo debe concordar con el campo '%s'."
-#: core/validators.py:262
+#: core/validators.py:282
msgid "Please enter something for at least one field."
msgstr "Por favor, introduzca algo en al menos un campo."
-#: core/validators.py:271 core/validators.py:282
+#: core/validators.py:291 core/validators.py:302
msgid "Please enter both fields or leave them both empty."
msgstr "Por favor, rellene ambos campos o deje ambos vacos."
-#: core/validators.py:289
+#: core/validators.py:309
#, python-format
msgid "This field must be given if %(field)s is %(value)s"
msgstr "Se debe proporcionar este campo si %(field)s es %(value)s"
-#: core/validators.py:301
+#: core/validators.py:321
#, python-format
msgid "This field must be given if %(field)s is not %(value)s"
msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s"
-#: core/validators.py:320
+#: core/validators.py:340
msgid "Duplicate values are not allowed."
msgstr "No se admiten valores duplicados."
-#: core/validators.py:343
+#: core/validators.py:363
#, python-format
msgid "This value must be a power of %s."
msgstr "Este valor debe ser una potencia de %s."
-#: core/validators.py:354
+#: core/validators.py:374
msgid "Please enter a valid decimal number."
msgstr "Por favor, introduzca un nmero decimal vlido."
-#: core/validators.py:356
+#: core/validators.py:378
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
@@ -2082,7 +2129,7 @@ msgstr[1] ""
"Por favor, introduzca un nmero decimal vlido con un maximo de %s dgitos "
"en total."
-#: core/validators.py:359
+#: core/validators.py:381
#, python-format
msgid ""
"Please enter a valid decimal number with a whole part of at most %s digit."
@@ -2095,7 +2142,7 @@ msgstr[1] ""
"Por favor, introduzca un nmero decimal vlido con un mximo de %s dgitos "
"enteros."
-#: core/validators.py:362
+#: core/validators.py:384
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
@@ -2107,30 +2154,30 @@ msgstr[1] ""
"Por favor, introduzca un nmero decimal vlido con un mximo de %s "
"posiciones decimales."
-#: core/validators.py:372
+#: core/validators.py:394
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
msgstr "Asegrese de que el archivo que enva tiene al menos %s bytes."
-#: core/validators.py:373
+#: core/validators.py:395
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
msgstr "Asegrese de que el archivo que enva tiene como mximo %s bytes."
-#: core/validators.py:390
+#: core/validators.py:412
msgid "The format for this field is wrong."
msgstr "El formato de este campo es incorrecto."
-#: core/validators.py:405
+#: core/validators.py:427
msgid "This field is invalid."
msgstr "Este campo no es vlido."
-#: core/validators.py:441
+#: core/validators.py:463
#, python-format
msgid "Could not retrieve anything from %s."
msgstr "No pude obtener nada de %s."
-#: core/validators.py:444
+#: core/validators.py:466
#, python-format
msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
@@ -2138,7 +2185,7 @@ msgstr ""
"La URL %(url)s devolvi la cabecera Content-Type '%(contenttype)s', que no "
"es vlida."
-#: core/validators.py:477
+#: core/validators.py:499
#, python-format
msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
@@ -2147,7 +2194,7 @@ msgstr ""
"Por favor, cierre la etiqueta %(tag)s de la lnea %(line)s. (La lnea "
"empieza por \"%(start)s\".)"
-#: core/validators.py:481
+#: core/validators.py:503
#, python-format
msgid ""
"Some text starting on line %(line)s is not allowed in that context. (Line "
@@ -2156,7 +2203,7 @@ msgstr ""
"Parte del texto que comienza en la lnea %(line)s no est permitido en ese "
"contexto. (La lnea empieza por \"%(start)s\".)"
-#: core/validators.py:486
+#: core/validators.py:508
#, python-format
msgid ""
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
@@ -2165,7 +2212,7 @@ msgstr ""
"El \"%(attr)s\" de la lnea %(line)s no es un atributo vlido. (La lnea "
"empieza por \"%(start)s\".)"
-#: core/validators.py:491
+#: core/validators.py:513
#, python-format
msgid ""
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
@@ -2174,7 +2221,7 @@ msgstr ""
"La \"<%(tag)s>\" de la lnea %(line)s no es una etiqueta vlida. (La lnea "
"empieza por \"%(start)s\".)"
-#: core/validators.py:495
+#: core/validators.py:517
#, python-format
msgid ""
"A tag on line %(line)s is missing one or more required attributes. (Line "
@@ -2183,7 +2230,7 @@ msgstr ""
"A una etiqueta de la lnea %(line)s le faltan uno o ms atributos "
"requeridos. (La lnea empieza por \"%(start)s\".)"
-#: core/validators.py:500
+#: core/validators.py:522
#, python-format
msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
@@ -2199,17 +2246,20 @@ msgstr "si,no,tal vez"
#: views/generic/create_update.py:43
#, python-format
msgid "The %(verbose_name)s was created successfully."
-msgstr "Se cre con xito el %(verbose_name)."
+msgstr "Se cre con xito %(verbose_name)."
#: views/generic/create_update.py:117
#, python-format
msgid "The %(verbose_name)s was updated successfully."
-msgstr "Se actualiz con xito el %(verbose_name)s."
+msgstr "Se actualiz con xito %(verbose_name)s."
#: views/generic/create_update.py:184
#, python-format
msgid "The %(verbose_name)s was deleted."
-msgstr "Se elimin el %(verbose_name)s."
+msgstr "Se elimin %(verbose_name)s."
+
+#~ msgid "Have you forgotten your password?"
+#~ msgstr "Ha olvidado su contrasea?"
#~ msgid "%(content_type_name)s"
#~ msgstr "tipos de contenido"
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
index f24c9a12d0..3f89e3e33f 100644
Binary files a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo and b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo differ
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
index 49d3856d3c..1865de9450 100644
--- a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django JavaScript 1.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-06-19 12:15-0300\n"
+"POT-Creation-Date: 2006-09-25 15:09-0300\n"
"PO-Revision-Date: 2006-05-16 10:20-0300\n"
"Last-Translator: Ramiro Morales \n"
"MIME-Version: 1.0\n"
@@ -39,7 +39,7 @@ msgstr "%s elegidos"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
-msgstr "Haga sus elecciones y haga click en "
+msgstr "Seleccione los items a agregar y haga click en "
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
@@ -51,7 +51,7 @@ msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
-"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre "
+"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Setiembre Octubre "
"Noviembre Diciembre"
#: contrib/admin/media/js/dateparse.js:33
@@ -71,49 +71,49 @@ msgstr "Mostrar"
msgid "Hide"
msgstr "Ocultar"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:89
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr "Ahora"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr "Reloj"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr "Elija una hora"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:90
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr "Medianoche"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr "6 a.m."
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr "Medioda"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:96
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:187
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr "Cancelar"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:120
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:181
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr "Hoy"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:123
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr "Calendario"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr "Ayer"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr "Maana"
diff --git a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
index 77c536b865..b1504fc819 100644
--- a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
+++ b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
@@ -44,7 +44,7 @@ var DateTimeShortcuts = {
var shortcuts_span = document.createElement('span');
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
var now_link = document.createElement('a');
- now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());");
+ now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());");
now_link.appendChild(document.createTextNode(gettext('Now')));
var clock_link = document.createElement('a');
clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');');
@@ -80,10 +80,10 @@ var DateTimeShortcuts = {
quickElement('h2', clock_box, gettext('Choose a time'));
time_list = quickElement('ul', clock_box, '');
time_list.className = 'timelist';
- quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());")
- quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00');")
- quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00');")
- quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00');")
+ quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());")
+ quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00:00');")
+ quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00:00');")
+ quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00:00');")
cancel_p = quickElement('p', clock_box, '');
cancel_p.className = 'calendar-cancel';
diff --git a/django/contrib/admin/media/js/core.js b/django/contrib/admin/media/js/core.js
index d35bd29c1c..a17ac8a4d2 100644
--- a/django/contrib/admin/media/js/core.js
+++ b/django/contrib/admin/media/js/core.js
@@ -119,6 +119,10 @@ Date.prototype.getTwoDigitMinute = function() {
return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
}
+Date.prototype.getTwoDigitSecond = function() {
+ return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
+}
+
Date.prototype.getISODate = function() {
return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate();
}
@@ -127,6 +131,10 @@ Date.prototype.getHourMinute = function() {
return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
}
+Date.prototype.getHourMinuteSecond = function() {
+ return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
+}
+
// ----------------------------------------------------------------------------
// String object extensions
// ----------------------------------------------------------------------------
diff --git a/django/contrib/sitemaps/templates/sitemap.xml b/django/contrib/sitemaps/templates/sitemap.xml
index ad24c045d4..16d9a0bbe0 100644
--- a/django/contrib/sitemaps/templates/sitemap.xml
+++ b/django/contrib/sitemaps/templates/sitemap.xml
@@ -1,5 +1,5 @@
-
+
{% spaceless %}
{% for url in urlset %}
diff --git a/django/contrib/sitemaps/templates/sitemap_index.xml b/django/contrib/sitemaps/templates/sitemap_index.xml
index c89b192ecc..9f39bb879f 100644
--- a/django/contrib/sitemaps/templates/sitemap_index.xml
+++ b/django/contrib/sitemaps/templates/sitemap_index.xml
@@ -1,4 +1,4 @@
-
+
{% for location in sitemaps %}{{ location|escape }}{% endfor %}
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index 2998bd31f6..7dc1a4a5eb 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -157,7 +157,8 @@ class WSGIRequest(http.HttpRequest):
return self._raw_post_data
except AttributeError:
buf = StringIO()
- content_length = int(self.environ['CONTENT_LENGTH'])
+ # CONTENT_LENGTH might be absent if POST doesn't have content at all (lighttpd)
+ content_length = int(self.environ.get('CONTENT_LENGTH', 0))
safe_copyfileobj(self.environ['wsgi.input'], buf, size=content_length)
self._raw_post_data = buf.getvalue()
buf.close()
diff --git a/django/core/mail.py b/django/core/mail.py
index da4cacbe29..a5af6e610f 100644
--- a/django/core/mail.py
+++ b/django/core/mail.py
@@ -4,6 +4,11 @@ from django.conf import settings
from email.MIMEText import MIMEText
from email.Header import Header
import smtplib, rfc822
+import socket
+import time
+import random
+
+DNS_NAME = socket.getfqdn() # Cache the hostname
class BadHeaderError(ValueError):
pass
@@ -50,6 +55,11 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=settings.EMAIL_HOST
msg['From'] = from_email
msg['To'] = ', '.join(recipient_list)
msg['Date'] = rfc822.formatdate()
+ try:
+ random_bits = str(random.getrandbits(64))
+ except AttributeError: # Python 2.3 doesn't have random.getrandbits().
+ random_bits = ''.join([random.choice('1234567890') for i in range(19)])
+ msg['Message-ID'] = "<%d.%s@%s>" % (time.time(), random_bits, DNS_NAME)
try:
server.sendmail(from_email, recipient_list, msg.as_string())
num_sent += 1
diff --git a/django/core/xheaders.py b/django/core/xheaders.py
index 69f6115839..3beb930158 100644
--- a/django/core/xheaders.py
+++ b/django/core/xheaders.py
@@ -17,6 +17,6 @@ def populate_xheaders(request, response, model, object_id):
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 or (request.user.is_authenticated() and request.user.is_staff):
+ if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or (hasattr(request, 'user') and 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/middleware/gzip.py b/django/middleware/gzip.py
index 7d860abdb1..a7c74481d0 100644
--- a/django/middleware/gzip.py
+++ b/django/middleware/gzip.py
@@ -25,4 +25,5 @@ class GZipMiddleware(object):
response.content = compress_string(response.content)
response['Content-Encoding'] = 'gzip'
+ response['Content-Length'] = str(len(response.content))
return response
diff --git a/django/newforms/fields.py b/django/newforms/fields.py
index 54089cb3c3..40fc18bd3e 100644
--- a/django/newforms/fields.py
+++ b/django/newforms/fields.py
@@ -2,7 +2,7 @@
Field classes
"""
-from util import ValidationError, DEFAULT_ENCODING
+from util import ValidationError, DEFAULT_ENCODING, smart_unicode
from widgets import TextInput, CheckboxInput, Select, SelectMultiple
import datetime
import re
@@ -28,6 +28,9 @@ except NameError:
class Field(object):
widget = TextInput # Default widget to use when rendering this type of Field.
+ # Tracks each time a Field instance is created. Used to retain order.
+ creation_counter = 0
+
def __init__(self, required=True, widget=None):
self.required = required
widget = widget or self.widget
@@ -35,6 +38,10 @@ class Field(object):
widget = widget()
self.widget = widget
+ # Increase the creation counter, and save our local copy.
+ self.creation_counter = Field.creation_counter
+ Field.creation_counter += 1
+
def clean(self, value):
"""
Validates the given value and returns its "cleaned" value as an
@@ -55,10 +62,7 @@ class CharField(Field):
"Validates max_length and min_length. Returns a Unicode object."
Field.clean(self, value)
if value in EMPTY_VALUES: value = u''
- if not isinstance(value, basestring):
- value = unicode(str(value), DEFAULT_ENCODING)
- elif not isinstance(value, unicode):
- value = unicode(value, DEFAULT_ENCODING)
+ value = smart_unicode(value)
if self.max_length is not None and len(value) > self.max_length:
raise ValidationError(u'Ensure this value has at most %d characters.' % self.max_length)
if self.min_length is not None and len(value) < self.min_length:
@@ -165,10 +169,7 @@ class RegexField(Field):
"""
Field.clean(self, value)
if value in EMPTY_VALUES: value = u''
- if not isinstance(value, basestring):
- value = unicode(str(value), DEFAULT_ENCODING)
- elif not isinstance(value, unicode):
- value = unicode(value, DEFAULT_ENCODING)
+ value = smart_unicode(value)
if not self.regex.search(value):
raise ValidationError(self.error_message)
return value
@@ -215,7 +216,7 @@ class URLField(RegexField):
"User-Agent": self.user_agent,
}
try:
- req = urllib2.Request(field_data, None, headers)
+ req = urllib2.Request(value, None, headers)
u = urllib2.urlopen(req)
except ValueError:
raise ValidationError(u'Enter a valid URL.')
@@ -244,10 +245,7 @@ class ChoiceField(Field):
"""
value = Field.clean(self, value)
if value in EMPTY_VALUES: value = u''
- if not isinstance(value, basestring):
- value = unicode(str(value), DEFAULT_ENCODING)
- elif not isinstance(value, unicode):
- value = unicode(value, DEFAULT_ENCODING)
+ value = smart_unicode(value)
valid_values = set([str(k) for k, v in self.choices])
if value not in valid_values:
raise ValidationError(u'Select a valid choice. %s is not one of the available choices.' % value)
@@ -267,11 +265,8 @@ class MultipleChoiceField(ChoiceField):
raise ValidationError(u'This field is required.')
new_value = []
for val in value:
- if not isinstance(val, basestring):
- value = unicode(str(val), DEFAULT_ENCODING)
- elif not isinstance(val, unicode):
- value = unicode(val, DEFAULT_ENCODING)
- new_value.append(value)
+ val = smart_unicode(val)
+ new_value.append(val)
# Validate that each value in the value list is in self.choices.
valid_values = set([k for k, v in self.choices])
for val in new_value:
diff --git a/django/newforms/forms.py b/django/newforms/forms.py
index e490d0d5f9..b8264fb691 100644
--- a/django/newforms/forms.py
+++ b/django/newforms/forms.py
@@ -2,6 +2,7 @@
Form classes
"""
+from django.utils.datastructures import SortedDict
from fields import Field
from widgets import TextInput, Textarea
from util import ErrorDict, ErrorList, ValidationError
@@ -13,18 +14,30 @@ def pretty_name(name):
name = name[0].upper() + name[1:]
return name.replace('_', ' ')
+class SortedDictFromList(SortedDict):
+ "A dictionary that keeps its keys in the order in which they're inserted."
+ # This is different than django.utils.datastructures.SortedDict, because
+ # this takes a list/tuple as the argument to __init__().
+ def __init__(self, data=None):
+ if data is None: data = []
+ self.keyOrder = [d[0] for d in data]
+ dict.__init__(self, dict(data))
+
class DeclarativeFieldsMetaclass(type):
"Metaclass that converts Field attributes to a dictionary called 'fields'."
def __new__(cls, name, bases, attrs):
- attrs['fields'] = dict([(name, attrs.pop(name)) for name, obj in attrs.items() if isinstance(obj, Field)])
+ fields = [(name, attrs.pop(name)) for name, obj in attrs.items() if isinstance(obj, Field)]
+ fields.sort(lambda x, y: cmp(x[1].creation_counter, y[1].creation_counter))
+ attrs['fields'] = SortedDictFromList(fields)
return type.__new__(cls, name, bases, attrs)
class Form(object):
"A collection of Fields, plus their associated data."
__metaclass__ = DeclarativeFieldsMetaclass
- def __init__(self, data=None): # TODO: prefix stuff
+ def __init__(self, data=None, auto_id=False): # TODO: prefix stuff
self.data = data or {}
+ self.auto_id = auto_id
self.clean_data = None # Stores the data after clean() has been called.
self.__errors = None # Stores the errors after clean() has been called.
@@ -63,17 +76,15 @@ class Form(object):
return not bool(self.errors())
def as_table(self):
- "Returns this form rendered as an HTML
."
- output = u'\n'.join(['
%s:
%s
' % (pretty_name(name), BoundField(self, field, name)) for name, field in self.fields.items()])
- return '
\n%s\n
' % output
+ "Returns this form rendered as HTML
s -- excluding the
."
+ return u'\n'.join(['
%s:
%s
' % (pretty_name(name), BoundField(self, field, name)) for name, field in self.fields.items()])
def as_ul(self):
- "Returns this form rendered as an HTML
."
- output = u'\n'.join(['
%s: %s
' % (pretty_name(name), BoundField(self, field, name)) for name, field in self.fields.items()])
- return '
\n%s\n
' % output
+ "Returns this form rendered as HTML
s -- excluding the
."
+ return u'\n'.join(['
%s: %s
' % (pretty_name(name), BoundField(self, field, name)) for name, field in self.fields.items()])
def as_table_with_errors(self):
- "Returns this form rendered as an HTML
, with errors."
+ "Returns this form rendered as HTML
s, with errors."
output = []
if self.errors().get(NON_FIELD_ERRORS):
# Errors not corresponding to a particular field are displayed at the top.
@@ -83,10 +94,10 @@ class Form(object):
if bf.errors:
output.append('
%s
' % '\n'.join(['
%s
' % e for e in bf.errors]))
output.append('
%s:
%s
' % (pretty_name(name), bf))
- return '
\n%s\n
' % '\n'.join(output)
+ return u'\n'.join(output)
def as_ul_with_errors(self):
- "Returns this form rendered as an HTML
, with errors."
+ "Returns this form rendered as HTML
s, with errors."
output = []
if self.errors().get(NON_FIELD_ERRORS):
# Errors not corresponding to a particular field are displayed at the top.
@@ -98,7 +109,7 @@ class Form(object):
line += '
%s
' % '\n'.join(['
%s
' % e for e in bf.errors])
line += '%s: %s' % (pretty_name(name), bf)
output.append(line)
- return '
\n%s\n
' % '\n'.join(output)
+ return u'\n'.join(output)
def full_clean(self):
"""
@@ -156,6 +167,10 @@ class BoundField(object):
errors = property(_errors)
def as_widget(self, widget, attrs=None):
+ attrs = attrs or {}
+ auto_id = self.auto_id
+ if not attrs.has_key('id') and not widget.attrs.has_key('id') and auto_id:
+ attrs['id'] = auto_id
return widget.render(self._name, self._form.data.get(self._name, None), attrs=attrs)
def as_text(self, attrs=None):
@@ -167,3 +182,16 @@ class BoundField(object):
def as_textarea(self, attrs=None):
"Returns a string of HTML for representing this as a