summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-11-29 20:38:41 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-11-29 20:38:41 +0000
commitdfe05d94b853073e2762250e1b4cd64ce9ef1df0 (patch)
tree4e6aea30920e85556903dd67ca329fe69e9f2a7d
parentb43a0180322b42925c4c27b5ccdf2e876309c53b (diff)
queryset-refactor: Merged from trunk up to [6752].
git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@6753 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS4
-rw-r--r--django/conf/locale/en/LC_MESSAGES/django.po3681
-rw-r--r--django/conf/locale/en/LC_MESSAGES/djangojs.po49
-rw-r--r--django/contrib/admin/templates/admin_doc/template_filter_index.html2
-rw-r--r--django/contrib/admin/templates/admin_doc/template_tag_index.html2
-rw-r--r--django/contrib/admin/templates/admin_doc/view_index.html4
-rw-r--r--django/contrib/comments/models.py10
-rw-r--r--django/contrib/comments/tests.py13
-rw-r--r--django/contrib/formtools/models.py1
-rw-r--r--django/contrib/formtools/test_urls.py12
-rw-r--r--django/contrib/formtools/tests.py93
-rw-r--r--django/contrib/localflavor/ca/ca_provinces.py2
-rw-r--r--django/db/models/base.py4
-rw-r--r--django/db/models/fields/__init__.py2
-rw-r--r--django/db/models/fields/subclassing.py4
-rw-r--r--django/middleware/cache.py23
-rw-r--r--django/newforms/fields.py13
-rw-r--r--django/template/defaultfilters.py6
-rw-r--r--django/utils/cache.py22
-rw-r--r--django/utils/datastructures.py5
-rw-r--r--django/utils/tzinfo.py8
-rw-r--r--django/views/i18n.py8
-rw-r--r--django/views/static.py1
-rw-r--r--docs/authentication.txt2
-rw-r--r--docs/cache.txt14
-rw-r--r--docs/django-admin.txt8
-rw-r--r--docs/install.txt25
-rw-r--r--docs/model-api.txt4
-rw-r--r--docs/newforms.txt42
-rw-r--r--docs/release_notes_0.96.txt2
-rw-r--r--docs/syndication_feeds.txt15
-rw-r--r--docs/templates_python.txt2
-rw-r--r--docs/tutorial01.txt2
-rw-r--r--docs/url_dispatch.txt2
-rw-r--r--tests/modeltests/field_subclassing/models.py10
-rw-r--r--tests/modeltests/model_forms/models.py73
-rw-r--r--tests/regressiontests/dateformat/tests.py4
-rw-r--r--tests/regressiontests/defaultfilters/tests.py2
-rw-r--r--tests/regressiontests/forms/fields.py14
-rw-r--r--tests/regressiontests/forms/localflavor/ca.py4
-rw-r--r--tests/regressiontests/forms/widgets.py7
-rw-r--r--tests/regressiontests/templates/filters.py16
-rw-r--r--tests/regressiontests/templates/tests.py7
-rw-r--r--tests/regressiontests/utils/datastructures.py51
-rw-r--r--tests/regressiontests/utils/tests.py13
-rw-r--r--tests/regressiontests/utils/timesince.py2
-rw-r--r--tests/regressiontests/views/tests/static.py10
47 files changed, 2933 insertions, 1367 deletions
diff --git a/AUTHORS b/AUTHORS
index 326d8e3de8..f8511e1707 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -71,6 +71,7 @@ answer newbie questions, and generally made Django that much better:
Jonathan Buchanan <jonathan.buchanan@gmail.com>
Trevor Caira <trevor@caira.com>
Ricardo Javier Cárdenes Medina <ricardo.cardenes@gmail.com>
+ Graham Carlyle <graham.carlyle@maplecroft.net>
Antonio Cavedoni <http://cavedoni.com/>
C8E
cedric@terramater.net
@@ -100,6 +101,7 @@ answer newbie questions, and generally made Django that much better:
Alex Dedul
deric@monowerks.com
Max Derkachev <mderk@yandex.ru>
+ Rajesh Dhawan <rajesh.dhawan@gmail.com>
Sander Dijkhuis <sander.dijkhuis@gmail.com>
Jordan Dimov <s3x3y1@gmail.com>
dne@mayonnaise.net
@@ -187,6 +189,7 @@ answer newbie questions, and generally made Django that much better:
krzysiek.pawlik@silvermedia.pl
Joseph Kocherhans
konrad@gwu.edu
+ knox <christobzr@gmail.com>
kurtiss@meetro.com
lakin.wecker@gmail.com
Nick Lane <nick.lane.au@gmail.com>
@@ -273,6 +276,7 @@ answer newbie questions, and generally made Django that much better:
Vinay Sajip <vinay_sajip@yahoo.co.uk>
David Schein
scott@staplefish.com
+ Ilya Semenov <semenov@inetss.com>
serbaut@gmail.com
John Shaffer <jshaffer2112@gmail.com>
Pete Shinners <pete@shinners.org>
diff --git a/django/conf/locale/en/LC_MESSAGES/django.po b/django/conf/locale/en/LC_MESSAGES/django.po
index 7e36c6358c..a2dd52978b 100644
--- a/django/conf/locale/en/LC_MESSAGES/django.po
+++ b/django/conf/locale/en/LC_MESSAGES/django.po
@@ -7,86 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-04-05 01:32+1000\n"
+"POT-Creation-Date: 2007-11-29 10:57-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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"
-#: db/models/manipulators.py:307
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-
-#: db/models/manipulators.py:308 contrib/admin/views/main.py:335
-#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339
-msgid "and"
-msgstr ""
-
-#: db/models/fields/related.py:53
-#, python-format
-msgid "Please enter a valid %s."
-msgstr ""
-
-#: db/models/fields/related.py:642
-msgid "Separate multiple IDs with commas."
-msgstr ""
-
-#: db/models/fields/related.py:644
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-
-#: db/models/fields/related.py:691
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-msgstr[1] ""
-
-#: db/models/fields/__init__.py:42
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr ""
-
-#: db/models/fields/__init__.py:117 db/models/fields/__init__.py:274
-#: db/models/fields/__init__.py:610 db/models/fields/__init__.py:621
-#: oldforms/__init__.py:357 newforms/fields.py:80 newforms/fields.py:376
-#: newforms/fields.py:452 newforms/fields.py:463 newforms/models.py:178
-msgid "This field is required."
-msgstr ""
-
-#: db/models/fields/__init__.py:367
-msgid "This value must be an integer."
-msgstr ""
-
-#: db/models/fields/__init__.py:402
-msgid "This value must be either True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:423
-msgid "This field cannot be null."
-msgstr ""
-
-#: db/models/fields/__init__.py:457 core/validators.py:148
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr ""
-
-#: db/models/fields/__init__.py:526 core/validators.py:157
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr ""
-
-#: db/models/fields/__init__.py:630
-msgid "Enter a valid filename."
-msgstr ""
-
-#: db/models/fields/__init__.py:751
-msgid "This value must be either None, True or False."
-msgstr ""
-
#: conf/global_settings.py:39
msgid "Arabic"
msgstr ""
@@ -96,1088 +24,1171 @@ msgid "Bengali"
msgstr ""
#: conf/global_settings.py:41
-msgid "Catalan"
+msgid "Bulgarian"
msgstr ""
#: conf/global_settings.py:42
-msgid "Czech"
+msgid "Catalan"
msgstr ""
#: conf/global_settings.py:43
-msgid "Welsh"
+msgid "Czech"
msgstr ""
#: conf/global_settings.py:44
-msgid "Danish"
+msgid "Welsh"
msgstr ""
#: conf/global_settings.py:45
-msgid "German"
+msgid "Danish"
msgstr ""
#: conf/global_settings.py:46
-msgid "Greek"
+msgid "German"
msgstr ""
#: conf/global_settings.py:47
-msgid "English"
+msgid "Greek"
msgstr ""
#: conf/global_settings.py:48
-msgid "Spanish"
+msgid "English"
msgstr ""
#: conf/global_settings.py:49
-msgid "Argentinean Spanish"
+msgid "Spanish"
msgstr ""
#: conf/global_settings.py:50
-msgid "Finnish"
+msgid "Argentinean Spanish"
msgstr ""
#: conf/global_settings.py:51
-msgid "French"
+msgid "Persian"
msgstr ""
#: conf/global_settings.py:52
-msgid "Galician"
+msgid "Finnish"
msgstr ""
#: conf/global_settings.py:53
-msgid "Hungarian"
+msgid "French"
msgstr ""
#: conf/global_settings.py:54
-msgid "Hebrew"
+msgid "Gaeilge"
msgstr ""
#: conf/global_settings.py:55
-msgid "Icelandic"
+msgid "Galician"
msgstr ""
#: conf/global_settings.py:56
-msgid "Italian"
+msgid "Hungarian"
msgstr ""
#: conf/global_settings.py:57
-msgid "Japanese"
+msgid "Hebrew"
msgstr ""
#: conf/global_settings.py:58
-msgid "Kannada"
+msgid "Croatian"
msgstr ""
#: conf/global_settings.py:59
-msgid "Latvian"
+msgid "Icelandic"
msgstr ""
#: conf/global_settings.py:60
-msgid "Macedonian"
+msgid "Italian"
msgstr ""
#: conf/global_settings.py:61
-msgid "Dutch"
+msgid "Japanese"
msgstr ""
#: conf/global_settings.py:62
-msgid "Norwegian"
+msgid "Korean"
msgstr ""
#: conf/global_settings.py:63
-msgid "Polish"
+msgid "Khmer"
msgstr ""
#: conf/global_settings.py:64
-msgid "Portugese"
+msgid "Kannada"
msgstr ""
#: conf/global_settings.py:65
-msgid "Brazilian"
+msgid "Latvian"
msgstr ""
#: conf/global_settings.py:66
-msgid "Romanian"
+msgid "Macedonian"
msgstr ""
#: conf/global_settings.py:67
-msgid "Russian"
+msgid "Dutch"
msgstr ""
#: conf/global_settings.py:68
-msgid "Slovak"
+msgid "Norwegian"
msgstr ""
#: conf/global_settings.py:69
-msgid "Slovenian"
+msgid "Polish"
msgstr ""
#: conf/global_settings.py:70
-msgid "Serbian"
+msgid "Portugese"
msgstr ""
#: conf/global_settings.py:71
-msgid "Swedish"
+msgid "Brazilian"
msgstr ""
#: conf/global_settings.py:72
-msgid "Tamil"
+msgid "Romanian"
msgstr ""
#: conf/global_settings.py:73
-msgid "Telugu"
+msgid "Russian"
msgstr ""
#: conf/global_settings.py:74
-msgid "Turkish"
+msgid "Slovak"
msgstr ""
#: conf/global_settings.py:75
-msgid "Ukrainian"
+msgid "Slovenian"
msgstr ""
#: conf/global_settings.py:76
-msgid "Simplified Chinese"
+msgid "Serbian"
msgstr ""
#: conf/global_settings.py:77
-msgid "Traditional Chinese"
+msgid "Swedish"
msgstr ""
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/dates.py:6
-msgid "Monday"
+#: conf/global_settings.py:78
+msgid "Tamil"
msgstr ""
-#: utils/dates.py:6
-msgid "Tuesday"
+#: conf/global_settings.py:79
+msgid "Telugu"
msgstr ""
-#: utils/dates.py:6
-msgid "Wednesday"
+#: conf/global_settings.py:80
+msgid "Turkish"
msgstr ""
-#: utils/dates.py:6
-msgid "Thursday"
+#: conf/global_settings.py:81
+msgid "Ukrainian"
msgstr ""
-#: utils/dates.py:6
-msgid "Friday"
+#: conf/global_settings.py:82
+msgid "Simplified Chinese"
msgstr ""
-#: utils/dates.py:7
-msgid "Saturday"
+#: conf/global_settings.py:83
+msgid "Traditional Chinese"
msgstr ""
-#: utils/dates.py:7
-msgid "Sunday"
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
msgstr ""
-#: utils/dates.py:14
-msgid "January"
+#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
msgstr ""
-#: utils/dates.py:14
-msgid "February"
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
msgstr ""
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
msgstr ""
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
msgstr ""
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
msgstr ""
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
msgstr ""
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
+#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231
+#: oldforms/__init__.py:592
+msgid "Yes"
msgstr ""
-#: utils/dates.py:15
-msgid "August"
+#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231
+#: oldforms/__init__.py:592
+msgid "No"
msgstr ""
-#: utils/dates.py:15
-msgid "September"
+#: contrib/admin/filterspecs.py:154 newforms/widgets.py:231
+#: oldforms/__init__.py:592
+msgid "Unknown"
msgstr ""
-#: utils/dates.py:15
-msgid "October"
+#: contrib/admin/models.py:18
+msgid "action time"
msgstr ""
-#: utils/dates.py:15
-msgid "November"
+#: contrib/admin/models.py:21
+msgid "object id"
msgstr ""
-#: utils/dates.py:16
-msgid "December"
+#: contrib/admin/models.py:22
+msgid "object repr"
msgstr ""
-#: utils/dates.py:19
-msgid "jan"
+#: contrib/admin/models.py:23
+msgid "action flag"
msgstr ""
-#: utils/dates.py:19
-msgid "feb"
+#: contrib/admin/models.py:24
+msgid "change message"
msgstr ""
-#: utils/dates.py:19
-msgid "mar"
+#: contrib/admin/models.py:27
+msgid "log entry"
msgstr ""
-#: utils/dates.py:19
-msgid "apr"
+#: contrib/admin/models.py:28
+msgid "log entries"
msgstr ""
-#: utils/dates.py:19
-msgid "may"
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
msgstr ""
-#: utils/dates.py:19
-msgid "jun"
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
msgstr ""
-#: utils/dates.py:20
-msgid "jul"
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:37
+#: contrib/admin/templates/admin/change_form.html:12
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/delete_confirmation.html:5
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:4
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+msgid "Home"
msgstr ""
-#: utils/dates.py:20
-msgid "aug"
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
msgstr ""
-#: utils/dates.py:20
-msgid "sep"
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
msgstr ""
-#: utils/dates.py:20
-msgid "oct"
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
msgstr ""
-#: utils/dates.py:20
-msgid "nov"
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
msgstr ""
-#: utils/dates.py:20
-msgid "dec"
+#: contrib/admin/templates/admin/base.html:26
+msgid "Welcome,"
msgstr ""
-#: utils/dates.py:27
-msgid "Jan."
+#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
msgstr ""
-#: utils/dates.py:27
-msgid "Feb."
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/admin/auth/user/change_password.html:14
+#: contrib/admin/templates/admin/auth/user/change_password.html:45
+msgid "Change password"
msgstr ""
-#: utils/dates.py:28
-msgid "Aug."
+#: contrib/admin/templates/admin/base.html:30
+#: contrib/comments/templates/comments/form.html:6
+msgid "Log out"
msgstr ""
-#: utils/dates.py:28
-msgid "Sept."
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
msgstr ""
-#: utils/dates.py:28
-msgid "Oct."
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
msgstr ""
-#: utils/dates.py:28
-msgid "Nov."
+#: contrib/admin/templates/admin/change_form.html:14
+#: contrib/admin/templates/admin/index.html:28
+msgid "Add"
msgstr ""
-#: utils/dates.py:28
-msgid "Dec."
+#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/object_history.html:4
+msgid "History"
msgstr ""
-#: utils/dateformat.py:40
-msgid "p.m."
+#: contrib/admin/templates/admin/change_form.html:21
+msgid "View on site"
msgstr ""
-#: utils/dateformat.py:41
-msgid "a.m."
-msgstr ""
+#: contrib/admin/templates/admin/change_form.html:31
+#: contrib/admin/templates/admin/auth/user/change_password.html:23
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
-#: utils/dateformat.py:46
-msgid "PM"
+#: contrib/admin/templates/admin/change_form.html:49
+msgid "Ordering"
msgstr ""
-#: utils/dateformat.py:47
-msgid "AM"
+#: contrib/admin/templates/admin/change_form.html:52
+msgid "Order:"
msgstr ""
-#: utils/dateformat.py:95
-msgid "midnight"
+#: contrib/admin/templates/admin/change_list.html:11
+#, python-format
+msgid "Add %(name)s"
msgstr ""
-#: utils/dateformat.py:97
-msgid "noon"
+#: contrib/admin/templates/admin/delete_confirmation.html:8
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Delete"
msgstr ""
-#: utils/translation/trans_real.py:358
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:359
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: utils/translation/trans_real.py:360
-msgid "TIME_FORMAT"
-msgstr "P"
+#: contrib/admin/templates/admin/delete_confirmation.html:13
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
-#: utils/translation/trans_real.py:376
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
+#: contrib/admin/templates/admin/delete_confirmation.html:20
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
-#: utils/translation/trans_real.py:377
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
+#: contrib/admin/templates/admin/delete_confirmation.html:25
+msgid "Yes, I'm sure"
+msgstr ""
-#: oldforms/__init__.py:392
+#: contrib/admin/templates/admin/filter.html:2
#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] ""
-msgstr[1] ""
+msgid " By %(filter_title)s "
+msgstr ""
-#: oldforms/__init__.py:397
-msgid "Line breaks are not allowed here."
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
msgstr ""
-#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610
+#: contrib/admin/templates/admin/index.html:17
#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgid "Models available in the %(name)s application."
msgstr ""
-#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:150
-#: newforms/widgets.py:174
-msgid "Unknown"
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
msgstr ""
-#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143
-#: newforms/widgets.py:174
-msgid "Yes"
+#: contrib/admin/templates/admin/index.html:34
+msgid "Change"
msgstr ""
-#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143
-#: newforms/widgets.py:174
-msgid "No"
+#: contrib/admin/templates/admin/index.html:44
+msgid "You don't have permission to edit anything."
msgstr ""
-#: oldforms/__init__.py:672 core/validators.py:174 core/validators.py:445
-msgid "No file was submitted. Check the encoding type on the form."
+#: contrib/admin/templates/admin/index.html:52
+msgid "Recent Actions"
msgstr ""
-#: oldforms/__init__.py:674
-msgid "The submitted file is empty."
+#: contrib/admin/templates/admin/index.html:53
+msgid "My Actions"
msgstr ""
-#: oldforms/__init__.py:730
-msgid "Enter a whole number between -32,768 and 32,767."
+#: contrib/admin/templates/admin/index.html:57
+msgid "None available"
msgstr ""
-#: oldforms/__init__.py:740
-msgid "Enter a positive number."
+#: contrib/admin/templates/admin/invalid_setup.html:8
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
msgstr ""
-#: oldforms/__init__.py:750
-msgid "Enter a whole number between 0 and 32,767."
+#: contrib/admin/templates/admin/login.html:17
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
+msgid "Username:"
msgstr ""
-#: contrib/localflavor/no/forms.py:15
-msgid "Enter a zip code in the format XXXX."
+#: contrib/admin/templates/admin/login.html:20
+#: contrib/comments/templates/comments/form.html:8
+msgid "Password:"
msgstr ""
-#: contrib/localflavor/no/forms.py:36
-msgid "Enter a valid Norwegian social security number."
+#: contrib/admin/templates/admin/login.html:25
+#: contrib/admin/views/decorators.py:25
+msgid "Log in"
msgstr ""
-#: contrib/localflavor/it/forms.py:14 contrib/localflavor/fr/forms.py:17
-#: contrib/localflavor/fi/forms.py:14 contrib/localflavor/de/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
+#: contrib/admin/templates/admin/object_history.html:17
+msgid "Date/time"
msgstr ""
-#: contrib/localflavor/jp/forms.py:21
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "User"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
+#: contrib/admin/templates/admin/object_history.html:19
+msgid "Action"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
+#: contrib/admin/templates/admin/object_history.html:25
+msgid "DATE_WITH_TIME_FULL"
+msgstr "N j, Y, P"
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
+#: contrib/admin/templates/admin/object_history.html:35
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
+#: contrib/admin/templates/admin/auth/user/add_form.html:6
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+#: contrib/admin/templates/admin/auth/user/change_password.html:33
+msgid "Password"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+#: contrib/admin/templates/admin/auth/user/change_password.html:38
+msgid "Password (again)"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+msgid "Enter the same password as above, for verification."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
+#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site. Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:9
+msgid "Password change"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
+#: contrib/admin/templates/registration/password_change_done.html:5
+#: contrib/admin/templates/registration/password_change_done.html:9
+msgid "Password change successful"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
+#: contrib/admin/templates/registration/password_change_done.html:11
+msgid "Your password was changed."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
+#: contrib/admin/templates/registration/password_change_form.html:11
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
+#: contrib/admin/templates/registration/password_change_form.html:16
+msgid "Old password:"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
+#: contrib/admin/templates/registration/password_change_form.html:18
+msgid "New password:"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
+#: contrib/admin/templates/registration/password_change_form.html:20
+msgid "Confirm password:"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
+#: contrib/admin/templates/registration/password_change_form.html:22
+msgid "Change my password"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
+#: contrib/admin/templates/registration/password_reset_email.html:7
+msgid "Feel free to change this password by going to this page:"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
msgstr ""
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
msgstr ""
-#: contrib/localflavor/br/forms.py:18
-msgid "Enter a zip code in the format XXXXX-XXX."
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
msgstr ""
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
msgstr ""
-#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:46
-msgid "Enter a valid Finnish social security number."
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
msgstr ""
-#: contrib/localflavor/uk/forms.py:18
-msgid "Enter a postcode. A space is required between the two postcode parts."
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
msgstr ""
-#: contrib/localflavor/de/forms.py:63
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format"
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
msgstr ""
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
msgstr ""
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
msgstr ""
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
+#: contrib/admin/templatetags/admin_list.py:257
+msgid "All dates"
msgstr ""
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
+#: contrib/admin/views/auth.py:20 contrib/admin/views/main.py:267
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr ""
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
+#: contrib/admin/views/auth.py:25 contrib/admin/views/main.py:271
+#: contrib/admin/views/main.py:356
+msgid "You may edit it again below."
msgstr ""
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
+#: contrib/admin/views/auth.py:31
+msgid "Add user"
msgstr ""
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
+#: contrib/admin/views/auth.py:58
+msgid "Password changed successfully."
msgstr ""
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
+#: contrib/admin/views/auth.py:65
+#, python-format
+msgid "Change password: %s"
msgstr ""
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
+#: contrib/admin/views/decorators.py:11 contrib/auth/forms.py:60
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
msgstr ""
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
+#: contrib/admin/views/decorators.py:63
+msgid ""
+"Please log in again, because your session has expired. Don't worry: Your "
+"submission has been saved."
msgstr ""
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
+#: contrib/admin/views/decorators.py:70
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
msgstr ""
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
+#: contrib/admin/views/decorators.py:84
+msgid "Usernames cannot contain the '@' character."
msgstr ""
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
+#: contrib/admin/views/decorators.py:86
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
msgstr ""
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
+#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
+#: contrib/admin/views/doc.py:52
+msgid "tag:"
msgstr ""
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
+#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81
+#: contrib/admin/views/doc.py:83
+msgid "filter:"
msgstr ""
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
+#: contrib/admin/views/doc.py:137 contrib/admin/views/doc.py:139
+#: contrib/admin/views/doc.py:141
+msgid "view:"
msgstr ""
-#: contrib/localflavor/usa/forms.py:18
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+#: contrib/admin/views/doc.py:166
+#, python-format
+msgid "App %r not found"
msgstr ""
-#: contrib/localflavor/usa/forms.py:51
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+#: contrib/admin/views/doc.py:173
+#, python-format
+msgid "Model %(name)r not found in app %(label)r"
msgstr ""
-#: contrib/sessions/models.py:68
-msgid "session key"
+#: contrib/admin/views/doc.py:185
+#, python-format
+msgid "the related `%(label)s.%(type)s` object"
msgstr ""
-#: contrib/sessions/models.py:69
-msgid "session data"
+#: contrib/admin/views/doc.py:185 contrib/admin/views/doc.py:207
+#: contrib/admin/views/doc.py:221 contrib/admin/views/doc.py:226
+msgid "model:"
msgstr ""
-#: contrib/sessions/models.py:70
-msgid "expire date"
+#: contrib/admin/views/doc.py:216
+#, python-format
+msgid "related `%(label)s.%(name)s` objects"
msgstr ""
-#: contrib/sessions/models.py:74
-msgid "session"
+#: contrib/admin/views/doc.py:221
+#, python-format
+msgid "all %s"
msgstr ""
-#: contrib/sessions/models.py:75
-msgid "sessions"
+#: contrib/admin/views/doc.py:226
+#, python-format
+msgid "number of %s"
msgstr ""
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
-msgid "The two password fields didn't match."
+#: contrib/admin/views/doc.py:231
+#, python-format
+msgid "Fields on %s objects"
msgstr ""
-#: contrib/auth/forms.py:25
-msgid "A user with that username already exists."
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:304
+#: contrib/admin/views/doc.py:306 contrib/admin/views/doc.py:312
+#: contrib/admin/views/doc.py:313 contrib/admin/views/doc.py:315
+msgid "Integer"
msgstr ""
-#: contrib/auth/forms.py:53
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
+#: contrib/admin/views/doc.py:294
+msgid "Boolean (Either True or False)"
msgstr ""
-#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
+#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:314
+#, python-format
+msgid "String (up to %(max_length)s)"
msgstr ""
-#: contrib/auth/forms.py:62
-msgid "This account is inactive."
+#: contrib/admin/views/doc.py:296
+msgid "Comma-separated integers"
msgstr ""
-#: contrib/auth/forms.py:85
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
+#: contrib/admin/views/doc.py:297
+msgid "Date (without time)"
msgstr ""
-#: contrib/auth/forms.py:117
-msgid "The two 'new password' fields didn't match."
+#: contrib/admin/views/doc.py:298
+msgid "Date (with time)"
msgstr ""
-#: contrib/auth/forms.py:124
-msgid "Your old password was entered incorrectly. Please enter it again."
+#: contrib/admin/views/doc.py:299
+msgid "Decimal number"
msgstr ""
-#: contrib/auth/views.py:39
-msgid "Logged out"
+#: contrib/admin/views/doc.py:300
+msgid "E-mail address"
msgstr ""
-#: contrib/auth/models.py:38 contrib/auth/models.py:57
-msgid "name"
+#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:305
+msgid "File path"
msgstr ""
-#: contrib/auth/models.py:40
-msgid "codename"
+#: contrib/admin/views/doc.py:303
+msgid "Floating point number"
msgstr ""
-#: contrib/auth/models.py:42
-msgid "permission"
+#: contrib/admin/views/doc.py:307 contrib/comments/models.py:85
+msgid "IP address"
msgstr ""
-#: contrib/auth/models.py:43 contrib/auth/models.py:58
-msgid "permissions"
+#: contrib/admin/views/doc.py:309
+msgid "Boolean (Either True, False or None)"
msgstr ""
-#: contrib/auth/models.py:60
-msgid "group"
+#: contrib/admin/views/doc.py:310
+msgid "Relation to parent model"
msgstr ""
-#: contrib/auth/models.py:61 contrib/auth/models.py:100
-msgid "groups"
+#: contrib/admin/views/doc.py:311
+msgid "Phone number"
msgstr ""
-#: contrib/auth/models.py:90
-msgid "username"
+#: contrib/admin/views/doc.py:316
+msgid "Text"
msgstr ""
-#: contrib/auth/models.py:90
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/admin/views/doc.py:317
+msgid "Time"
msgstr ""
-#: contrib/auth/models.py:91
-msgid "first name"
+#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:7
+msgid "URL"
msgstr ""
-#: contrib/auth/models.py:92
-msgid "last name"
+#: contrib/admin/views/doc.py:319
+msgid "U.S. state (two uppercase letters)"
msgstr ""
-#: contrib/auth/models.py:93
-msgid "e-mail address"
+#: contrib/admin/views/doc.py:320
+msgid "XML text"
msgstr ""
-#: contrib/auth/models.py:94
-msgid "password"
+#: contrib/admin/views/doc.py:346
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
msgstr ""
-#: contrib/auth/models.py:94
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
+#: contrib/admin/views/main.py:233
+msgid "Site administration"
msgstr ""
-#: contrib/auth/models.py:95
-msgid "staff status"
+#: contrib/admin/views/main.py:280 contrib/admin/views/main.py:365
+#, python-format
+msgid "You may add another %s below."
msgstr ""
-#: contrib/auth/models.py:95
-msgid "Designates whether the user can log into this admin site."
+#: contrib/admin/views/main.py:298
+#, python-format
+msgid "Add %s"
msgstr ""
-#: contrib/auth/models.py:96
-msgid "active"
+#: contrib/admin/views/main.py:344
+#, python-format
+msgid "Added %s."
msgstr ""
-#: contrib/auth/models.py:96
-msgid ""
-"Designates whether this user can log into the Django admin. Unselect this "
-"instead of deleting accounts."
+#: contrib/admin/views/main.py:344 contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:348 core/validators.py:283
+#: db/models/manipulators.py:309
+msgid "and"
msgstr ""
-#: contrib/auth/models.py:97
-msgid "superuser status"
+#: contrib/admin/views/main.py:346
+#, python-format
+msgid "Changed %s."
msgstr ""
-#: contrib/auth/models.py:97
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
+#: contrib/admin/views/main.py:348
+#, python-format
+msgid "Deleted %s."
msgstr ""
-#: contrib/auth/models.py:98
-msgid "last login"
+#: contrib/admin/views/main.py:351
+msgid "No fields changed."
msgstr ""
-#: contrib/auth/models.py:99
-msgid "date joined"
+#: contrib/admin/views/main.py:354
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr ""
-#: contrib/auth/models.py:101
+#: contrib/admin/views/main.py:362
+#, python-format
msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
-#: contrib/auth/models.py:102
-msgid "user permissions"
+#: contrib/admin/views/main.py:400
+#, python-format
+msgid "Change %s"
msgstr ""
-#: contrib/auth/models.py:105
-msgid "user"
+#: contrib/admin/views/main.py:487
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
msgstr ""
-#: contrib/auth/models.py:106
-msgid "users"
+#: contrib/admin/views/main.py:492
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
msgstr ""
-#: contrib/auth/models.py:111
-msgid "Personal info"
+#: contrib/admin/views/main.py:524
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr ""
-#: contrib/auth/models.py:112
-msgid "Permissions"
+#: contrib/admin/views/main.py:527
+msgid "Are you sure?"
msgstr ""
-#: contrib/auth/models.py:113
-msgid "Important dates"
+#: contrib/admin/views/main.py:549
+#, python-format
+msgid "Change history: %s"
msgstr ""
-#: contrib/auth/models.py:114
-msgid "Groups"
+#: contrib/admin/views/main.py:583
+#, python-format
+msgid "Select %s"
msgstr ""
-#: contrib/auth/models.py:258
-msgid "message"
+#: contrib/admin/views/main.py:583
+#, python-format
+msgid "Select %s to change"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "th"
+#: contrib/admin/views/main.py:784
+msgid "Database error"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "st"
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "nd"
+#: contrib/auth/forms.py:25
+msgid "A user with that username already exists."
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "rd"
+#: contrib/auth/forms.py:53
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:47
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
+#: contrib/auth/forms.py:62
+msgid "This account is inactive."
+msgstr ""
-#: contrib/humanize/templatetags/humanize.py:50
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
+#: contrib/auth/forms.py:84
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
-#: contrib/humanize/templatetags/humanize.py:53
+#: contrib/auth/forms.py:107
#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Password reset on %s"
+msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "one"
+#: contrib/auth/forms.py:117
+msgid "The two 'new password' fields didn't match."
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "two"
+#: contrib/auth/forms.py:124
+msgid "Your old password was entered incorrectly. Please enter it again."
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "three"
+#: contrib/auth/models.py:73 contrib/auth/models.py:93
+msgid "name"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "four"
+#: contrib/auth/models.py:75
+msgid "codename"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "five"
+#: contrib/auth/models.py:78
+msgid "permission"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "six"
+#: contrib/auth/models.py:79 contrib/auth/models.py:94
+msgid "permissions"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "seven"
+#: contrib/auth/models.py:97
+msgid "group"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "eight"
+#: contrib/auth/models.py:98 contrib/auth/models.py:141
+msgid "groups"
msgstr ""
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "nine"
+#: contrib/auth/models.py:131
+msgid "username"
msgstr ""
-#: contrib/contenttypes/models.py:36
-msgid "python model class name"
+#: contrib/auth/models.py:131
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
msgstr ""
-#: contrib/contenttypes/models.py:39
-msgid "content type"
+#: contrib/auth/models.py:132
+msgid "first name"
msgstr ""
-#: contrib/contenttypes/models.py:40
-msgid "content types"
+#: contrib/auth/models.py:133
+msgid "last name"
msgstr ""
-#: contrib/redirects/models.py:7
-msgid "redirect from"
+#: contrib/auth/models.py:134
+msgid "e-mail address"
msgstr ""
-#: contrib/redirects/models.py:8
+#: contrib/auth/models.py:135
+msgid "password"
+msgstr ""
+
+#: contrib/auth/models.py:135
msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
msgstr ""
-#: contrib/redirects/models.py:9
-msgid "redirect to"
+#: contrib/auth/models.py:136
+msgid "staff status"
msgstr ""
-#: contrib/redirects/models.py:10
+#: contrib/auth/models.py:136
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: contrib/auth/models.py:137
+msgid "active"
+msgstr ""
+
+#: contrib/auth/models.py:137
msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
msgstr ""
-#: contrib/redirects/models.py:13
-msgid "redirect"
+#: contrib/auth/models.py:138
+msgid "superuser status"
msgstr ""
-#: contrib/redirects/models.py:14
-msgid "redirects"
+#: contrib/auth/models.py:138
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
msgstr ""
-#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315
-msgid "URL"
+#: contrib/auth/models.py:139
+msgid "last login"
msgstr ""
-#: contrib/flatpages/models.py:8
+#: contrib/auth/models.py:140
+msgid "date joined"
+msgstr ""
+
+#: contrib/auth/models.py:142
msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
msgstr ""
-#: contrib/flatpages/models.py:9
-msgid "title"
+#: contrib/auth/models.py:143
+msgid "user permissions"
msgstr ""
-#: contrib/flatpages/models.py:10
-msgid "content"
+#: contrib/auth/models.py:147
+msgid "user"
msgstr ""
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
+#: contrib/auth/models.py:148
+msgid "users"
msgstr ""
-#: contrib/flatpages/models.py:12
-msgid "template name"
+#: contrib/auth/models.py:154
+msgid "Personal info"
msgstr ""
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
+#: contrib/auth/models.py:155
+msgid "Permissions"
msgstr ""
-#: contrib/flatpages/models.py:14
-msgid "registration required"
+#: contrib/auth/models.py:156
+msgid "Important dates"
msgstr ""
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
+#: contrib/auth/models.py:157
+msgid "Groups"
msgstr ""
-#: contrib/flatpages/models.py:18
-msgid "flat page"
+#: contrib/auth/models.py:316
+msgid "message"
msgstr ""
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
+#: contrib/auth/views.py:47
+msgid "Logged out"
msgstr ""
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
+#: contrib/comments/models.py:67 contrib/comments/models.py:169
msgid "object ID"
msgstr ""
@@ -1186,7 +1197,7 @@ msgid "headline"
msgstr ""
#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
+#: contrib/comments/models.py:170
msgid "comment"
msgstr ""
@@ -1226,18 +1237,14 @@ msgstr ""
msgid "is valid rating"
msgstr ""
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
+#: contrib/comments/models.py:83 contrib/comments/models.py:172
msgid "date/time submitted"
msgstr ""
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
+#: contrib/comments/models.py:84 contrib/comments/models.py:173
msgid "is public"
msgstr ""
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
-msgid "IP address"
-msgstr ""
-
#: contrib/comments/models.py:86
msgid "is removed"
msgstr ""
@@ -1252,11 +1259,11 @@ msgstr ""
msgid "comments"
msgstr ""
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
+#: contrib/comments/models.py:134 contrib/comments/models.py:213
msgid "Content object"
msgstr ""
-#: contrib/comments/models.py:159
+#: contrib/comments/models.py:162
#, python-format
msgid ""
"Posted by %(user)s at %(date)s\n"
@@ -1266,48 +1273,48 @@ msgid ""
"http://%(domain)s%(url)s"
msgstr ""
-#: contrib/comments/models.py:168
+#: contrib/comments/models.py:171
msgid "person's name"
msgstr ""
-#: contrib/comments/models.py:171
+#: contrib/comments/models.py:174
msgid "ip address"
msgstr ""
-#: contrib/comments/models.py:173
+#: contrib/comments/models.py:176
msgid "approved by staff"
msgstr ""
-#: contrib/comments/models.py:176
+#: contrib/comments/models.py:179
msgid "free comment"
msgstr ""
-#: contrib/comments/models.py:177
+#: contrib/comments/models.py:180
msgid "free comments"
msgstr ""
-#: contrib/comments/models.py:233
+#: contrib/comments/models.py:239
msgid "score"
msgstr ""
-#: contrib/comments/models.py:234
+#: contrib/comments/models.py:240
msgid "score date"
msgstr ""
-#: contrib/comments/models.py:237
+#: contrib/comments/models.py:243
msgid "karma score"
msgstr ""
-#: contrib/comments/models.py:238
+#: contrib/comments/models.py:244
msgid "karma scores"
msgstr ""
-#: contrib/comments/models.py:242
+#: contrib/comments/models.py:248
#, python-format
msgid "%(score)d rating by %(user)s"
msgstr ""
-#: contrib/comments/models.py:258
+#: contrib/comments/models.py:264
#, python-format
msgid ""
"This comment was flagged by %(user)s:\n"
@@ -1315,73 +1322,40 @@ msgid ""
"%(text)s"
msgstr ""
-#: contrib/comments/models.py:265
+#: contrib/comments/models.py:271
msgid "flag date"
msgstr ""
-#: contrib/comments/models.py:268
+#: contrib/comments/models.py:274
msgid "user flag"
msgstr ""
-#: contrib/comments/models.py:269
+#: contrib/comments/models.py:275
msgid "user flags"
msgstr ""
-#: contrib/comments/models.py:273
+#: contrib/comments/models.py:279
#, python-format
msgid "Flag by %r"
msgstr ""
-#: contrib/comments/models.py:278
+#: contrib/comments/models.py:284
msgid "deletion date"
msgstr ""
-#: contrib/comments/models.py:280
+#: contrib/comments/models.py:286
msgid "moderator deletion"
msgstr ""
-#: contrib/comments/models.py:281
+#: contrib/comments/models.py:287
msgid "moderator deletions"
msgstr ""
-#: contrib/comments/models.py:285
+#: contrib/comments/models.py:291
#, python-format
msgid "Moderator deletion by %r"
msgstr ""
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-msgid "Log out"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr ""
-
#: contrib/comments/templates/comments/form.html:8
msgid "Forgotten your password?"
msgstr ""
@@ -1418,24 +1392,12 @@ msgstr ""
msgid "Your name:"
msgstr ""
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr ""
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr ""
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr ""
-
-#: contrib/comments/views/comments.py:27
+#: contrib/comments/views/comments.py:28
msgid ""
"This rating is required because you've entered at least one other rating."
msgstr ""
-#: contrib/comments/views/comments.py:111
+#: contrib/comments/views/comments.py:112
#, python-format
msgid ""
"This comment was posted by a user who has posted fewer than %(count)s "
@@ -1450,7 +1412,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: contrib/comments/views/comments.py:116
+#: contrib/comments/views/comments.py:117
#, python-format
msgid ""
"This comment was posted by a sketchy user:\n"
@@ -1458,1097 +1420,1757 @@ msgid ""
"%(text)s"
msgstr ""
-#: contrib/comments/views/comments.py:188
-#: contrib/comments/views/comments.py:280
+#: contrib/comments/views/comments.py:190
+#: contrib/comments/views/comments.py:283
msgid "Only POSTs are allowed"
msgstr ""
-#: contrib/comments/views/comments.py:192
-#: contrib/comments/views/comments.py:284
+#: contrib/comments/views/comments.py:194
+#: contrib/comments/views/comments.py:287
msgid "One or more of the required fields wasn't submitted"
msgstr ""
-#: contrib/comments/views/comments.py:196
-#: contrib/comments/views/comments.py:286
+#: contrib/comments/views/comments.py:198
+#: contrib/comments/views/comments.py:289
msgid "Somebody tampered with the comment form (security violation)"
msgstr ""
-#: contrib/comments/views/comments.py:206
-#: contrib/comments/views/comments.py:292
+#: contrib/comments/views/comments.py:208
+#: contrib/comments/views/comments.py:295
msgid ""
"The comment form had an invalid 'target' parameter -- the object ID was "
"invalid"
msgstr ""
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
+#: contrib/comments/views/comments.py:259
+#: contrib/comments/views/comments.py:324
msgid "The comment form didn't provide either 'preview' or 'post'"
msgstr ""
-#: contrib/sites/models.py:10
-msgid "domain name"
+#: contrib/comments/views/karma.py:21
+msgid "Anonymous users cannot vote"
msgstr ""
-#: contrib/sites/models.py:11
-msgid "display name"
+#: contrib/comments/views/karma.py:25
+msgid "Invalid comment ID"
msgstr ""
-#: contrib/sites/models.py:15
-msgid "site"
+#: contrib/comments/views/karma.py:27
+msgid "No voting for yourself"
msgstr ""
-#: contrib/sites/models.py:16
-msgid "sites"
+#: contrib/contenttypes/models.py:37
+msgid "python model class name"
msgstr ""
-#: contrib/admin/filterspecs.py:40
-#, python-format
+#: contrib/contenttypes/models.py:40
+msgid "content type"
+msgstr ""
+
+#: contrib/contenttypes/models.py:41
+msgid "content types"
+msgstr ""
+
+#: contrib/flatpages/models.py:8
msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgstr ""
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
-msgid "All"
+#: contrib/flatpages/models.py:9
+msgid "title"
msgstr ""
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
+#: contrib/flatpages/models.py:10
+msgid "content"
msgstr ""
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
msgstr ""
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
+#: contrib/flatpages/models.py:12
+msgid "template name"
msgstr ""
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
msgstr ""
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
+#: contrib/flatpages/models.py:14
+msgid "registration required"
msgstr ""
-#: contrib/admin/models.py:16
-msgid "action time"
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
msgstr ""
-#: contrib/admin/models.py:19
-msgid "object id"
+#: contrib/flatpages/models.py:18
+msgid "flat page"
msgstr ""
-#: contrib/admin/models.py:20
-msgid "object repr"
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
msgstr ""
-#: contrib/admin/models.py:21
-msgid "action flag"
+#: contrib/humanize/templatetags/humanize.py:20
+msgid "th"
msgstr ""
-#: contrib/admin/models.py:22
-msgid "change message"
+#: contrib/humanize/templatetags/humanize.py:20
+msgid "st"
msgstr ""
-#: contrib/admin/models.py:25
-msgid "log entry"
+#: contrib/humanize/templatetags/humanize.py:20
+msgid "nd"
msgstr ""
-#: contrib/admin/models.py:26
-msgid "log entries"
+#: contrib/humanize/templatetags/humanize.py:20
+msgid "rd"
msgstr ""
-#: contrib/admin/templatetags/admin_list.py:247
-msgid "All dates"
+#: contrib/humanize/templatetags/humanize.py:52
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:55
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:58
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "one"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/auth/user/change_password.html:12
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-msgid "Home"
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "two"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-msgid "Documentation"
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "three"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "four"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-msgid "Change password"
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "five"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "six"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "seven"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "eight"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
+#: contrib/humanize/templatetags/humanize.py:74
+msgid "nine"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
+#: contrib/humanize/templatetags/humanize.py:94
+msgid "today"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:96
+msgid "tomorrow"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:98
+msgid "yesterday"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+#: contrib/localflavor/ar/forms.py:30 contrib/localflavor/ar/forms.py:38
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:61 contrib/localflavor/br/forms.py:103
+#: contrib/localflavor/pe/forms.py:34 contrib/localflavor/pe/forms.py:57
+msgid "This field requires only numbers."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:64
+msgid "This field requires 7 or 8 digits."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:75
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:88
+msgid "Invalid CUIT."
+msgstr ""
+
+#: contrib/localflavor/au/forms.py:18
+msgid "Enter a 4 digit post code."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:23
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:35
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:68
msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
+"Select a valid brazilian state. That state is not one of the available "
+"states."
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
+#: contrib/localflavor/br/forms.py:105
+msgid "This field requires at most 11 digits or 14 characters."
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
+#: contrib/localflavor/br/forms.py:115
+msgid "Invalid CPF number."
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
msgstr ""
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
+#: contrib/localflavor/br/forms.py:147
+msgid "Invalid CNPJ number."
msgstr ""
-#: contrib/admin/templates/admin/submit_line.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-msgid "Delete"
+#: contrib/localflavor/ca/forms.py:19
+msgid "Enter a postal code in the format XXX XXX."
msgstr ""
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
+#: contrib/localflavor/ca/forms.py:81
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXXX format."
msgstr ""
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
msgstr ""
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
msgstr ""
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
msgstr ""
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
msgstr ""
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
msgstr ""
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
msgstr ""
-#: contrib/admin/templates/admin/500.html:10
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr ""
+
+#: contrib/localflavor/ch/forms.py:18 contrib/localflavor/no/forms.py:14
+msgid "Enter a zip code in the format XXXX."
+msgstr ""
+
+#: contrib/localflavor/ch/forms.py:90
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."
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
msgstr ""
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
+#: contrib/localflavor/cl/forms.py:32
+msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X."
msgstr ""
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
+#: contrib/localflavor/cl/forms.py:37
+msgid "Enter valid a Chilean RUT"
msgstr ""
-#: contrib/admin/templates/admin/invalid_setup.html:8
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:16 contrib/localflavor/fi/forms.py:14
+#: contrib/localflavor/fr/forms.py:17
+msgid "Enter a zip code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:60
msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
msgstr ""
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
msgstr ""
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] ""
-msgstr[1] ""
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr ""
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
msgstr ""
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "History"
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
msgstr ""
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
msgstr ""
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
msgstr ""
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
msgstr ""
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "N j, Y, P"
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr ""
-#: contrib/admin/templates/admin/object_history.html:36
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:22
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:39
msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
msgstr ""
-#: contrib/admin/templates/admin/delete_confirmation.html:14
+#: contrib/localflavor/es/forms.py:73 contrib/localflavor/es/forms.py:108
+#: db/models/fields/related.py:55
#, python-format
+msgid "Please enter a valid %s."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:91
+msgid "Invalid checksum for NIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:97
+msgid "Invalid checksum for NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:106
+msgid "Invalid checksum for CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:136
msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
msgstr ""
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
+#: contrib/localflavor/es/forms.py:150
+msgid "Invalid checksum for bank account number."
+msgstr ""
+
+#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45
+msgid "Enter a valid Finnish social security number."
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:16
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:17
msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
msgstr ""
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
+#: contrib/localflavor/is_/forms.py:31
+msgid "The Icelandic identification number is not valid."
msgstr ""
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
+#: contrib/localflavor/it/forms.py:16
+msgid "Enter a valid zip code."
msgstr ""
-#: contrib/admin/templates/admin/change_list.html:12
-#, python-format
-msgid "Add %(name)s"
+#: contrib/localflavor/it/forms.py:41
+msgid "Enter a valid Social Security number."
msgstr ""
-#: contrib/admin/templates/admin/change_form.html:15
-#: contrib/admin/templates/admin/index.html:28
-msgid "Add"
+#: contrib/localflavor/it/forms.py:68
+msgid "Enter a valid VAT number."
msgstr ""
-#: contrib/admin/templates/admin/change_form.html:22
-msgid "View on site"
+#: contrib/localflavor/jp/forms.py:21
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
msgstr ""
-#: contrib/admin/templates/admin/change_form.html:32
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr ""
-#: contrib/admin/templates/admin/change_form.html:50
-msgid "Ordering"
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
msgstr ""
-#: contrib/admin/templates/admin/change_form.html:53
-msgid "Order:"
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
msgstr ""
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
msgstr ""
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
msgstr ""
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
msgstr ""
-#: contrib/admin/templates/admin/login.html:25
-#: contrib/admin/views/decorators.py:24
-msgid "Log in"
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
msgstr ""
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
msgstr ""
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
msgstr ""
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
msgstr ""
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
msgstr ""
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
msgstr ""
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
msgstr ""
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
msgstr ""
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
msgstr ""
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
msgstr ""
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
msgstr ""
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
msgstr ""
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-msgid "Password"
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
msgstr ""
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-msgid "Password (again)"
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
msgstr ""
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
msgstr ""
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
msgstr ""
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
msgstr ""
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
msgstr ""
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
msgstr ""
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
msgstr ""
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
msgstr ""
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed a new password to the e-mail address you submitted. You "
-"should be receiving it shortly."
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
msgstr ""
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:4
-msgid "Password change"
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
msgstr ""
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
msgstr ""
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
msgstr ""
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
msgstr ""
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
msgstr ""
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
msgstr ""
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
msgstr ""
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll reset "
-"your password and e-mail the new one to you."
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
+#: contrib/localflavor/nl/forms.py:25
+msgid "Enter a valid postal code"
msgstr ""
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
+#: contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
msgstr ""
-#: contrib/admin/views/main.py:223
-msgid "Site administration"
+#: contrib/localflavor/nl/forms.py:76
+msgid "Enter a valid SoFi number"
msgstr ""
-#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drente"
msgstr ""
-#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
-#: contrib/admin/views/auth.py:24
-msgid "You may edit it again below."
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
msgstr ""
-#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
-#, python-format
-msgid "You may add another %s below."
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
msgstr ""
-#: contrib/admin/views/main.py:289
-#, python-format
-msgid "Add %s"
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
msgstr ""
-#: contrib/admin/views/main.py:335
-#, python-format
-msgid "Added %s."
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
msgstr ""
-#: contrib/admin/views/main.py:337
-#, python-format
-msgid "Changed %s."
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
msgstr ""
-#: contrib/admin/views/main.py:339
-#, python-format
-msgid "Deleted %s."
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
msgstr ""
-#: contrib/admin/views/main.py:342
-msgid "No fields changed."
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
msgstr ""
-#: contrib/admin/views/main.py:345
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
msgstr ""
-#: contrib/admin/views/main.py:353
-#, python-format
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr ""
+
+#: contrib/localflavor/no/forms.py:35
+msgid "Enter a valid Norwegian social security number."
+msgstr ""
+
+#: contrib/localflavor/pe/forms.py:36
+msgid "This field requires 8 digits."
+msgstr ""
+
+#: contrib/localflavor/pe/forms.py:59
+msgid "This field requires 11 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:41
+msgid "National Identification Number consists of 11 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:47
+msgid "Wrong checksum for the National Identification Number."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:72
msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
msgstr ""
-#: contrib/admin/views/main.py:391
-#, python-format
-msgid "Change %s"
+#: contrib/localflavor/pl/forms.py:78
+msgid "Wrong checksum for the Tax Number (NIP)."
msgstr ""
-#: contrib/admin/views/main.py:476
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#: contrib/localflavor/pl/forms.py:107
+msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
msgstr ""
-#: contrib/admin/views/main.py:481
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
+#: contrib/localflavor/pl/forms.py:113
+msgid "Wrong checksum for the National Business Register Number (REGON)."
msgstr ""
-#: contrib/admin/views/main.py:514
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
msgstr ""
-#: contrib/admin/views/main.py:517
-msgid "Are you sure?"
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
msgstr ""
-#: contrib/admin/views/main.py:539
-#, python-format
-msgid "Change history: %s"
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
msgstr ""
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s"
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
msgstr ""
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s to change"
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
msgstr ""
-#: contrib/admin/views/main.py:768
-msgid "Database error"
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
msgstr ""
-#: contrib/admin/views/decorators.py:62
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
msgstr ""
-#: contrib/admin/views/decorators.py:69
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
msgstr ""
-#: contrib/admin/views/decorators.py:83
-msgid "Usernames cannot contain the '@' character."
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
msgstr ""
-#: contrib/admin/views/decorators.py:85
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
msgstr ""
-#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-msgid "tag:"
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
msgstr ""
-#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-msgid "filter:"
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
msgstr ""
-#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-msgid "view:"
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
msgstr ""
-#: contrib/admin/views/doc.py:164
-#, python-format
-msgid "App %r not found"
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
msgstr ""
-#: contrib/admin/views/doc.py:171
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
msgstr ""
-#: contrib/admin/views/doc.py:183
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
msgstr ""
-#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
-#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
-msgid "model:"
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
msgstr ""
-#: contrib/admin/views/doc.py:214
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
+#: contrib/localflavor/sk/forms.py:32
+msgid "Enter a postal code in the format XXXXX or XXX XX."
msgstr ""
-#: contrib/admin/views/doc.py:219
-#, python-format
-msgid "all %s"
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
msgstr ""
-#: contrib/admin/views/doc.py:224
-#, python-format
-msgid "number of %s"
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
msgstr ""
-#: contrib/admin/views/doc.py:229
-#, python-format
-msgid "Fields on %s objects"
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
msgstr ""
-#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
-#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
-msgid "Integer"
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
msgstr ""
-#: contrib/admin/views/doc.py:292
-msgid "Boolean (Either True or False)"
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
msgstr ""
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
-#, python-format
-msgid "String (up to %(maxlength)s)"
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
msgstr ""
-#: contrib/admin/views/doc.py:294
-msgid "Comma-separated integers"
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
msgstr ""
-#: contrib/admin/views/doc.py:295
-msgid "Date (without time)"
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
msgstr ""
-#: contrib/admin/views/doc.py:296
-msgid "Date (with time)"
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
msgstr ""
-#: contrib/admin/views/doc.py:297
-msgid "E-mail address"
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
msgstr ""
-#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
-#: contrib/admin/views/doc.py:302
-msgid "File path"
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
msgstr ""
-#: contrib/admin/views/doc.py:300
-msgid "Decimal number"
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
msgstr ""
-#: contrib/admin/views/doc.py:306
-msgid "Boolean (Either True, False or None)"
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
msgstr ""
-#: contrib/admin/views/doc.py:307
-msgid "Relation to parent model"
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
msgstr ""
-#: contrib/admin/views/doc.py:308
-msgid "Phone number"
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
msgstr ""
-#: contrib/admin/views/doc.py:313
-msgid "Text"
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
msgstr ""
-#: contrib/admin/views/doc.py:314
-msgid "Time"
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
msgstr ""
-#: contrib/admin/views/doc.py:316
-msgid "U.S. state (two uppercase letters)"
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
msgstr ""
-#: contrib/admin/views/doc.py:317
-msgid "XML text"
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
msgstr ""
-#: contrib/admin/views/doc.py:343
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
msgstr ""
-#: contrib/admin/views/auth.py:30
-msgid "Add user"
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
msgstr ""
-#: contrib/admin/views/auth.py:57
-msgid "Password changed successfully."
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
msgstr ""
-#: contrib/admin/views/auth.py:64
-#, python-format
-msgid "Change password: %s"
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
msgstr ""
-#: newforms/fields.py:103 newforms/fields.py:256
-#, python-format
-msgid "Ensure this value has at most %d characters."
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
msgstr ""
-#: newforms/fields.py:105 newforms/fields.py:258
-#, python-format
-msgid "Ensure this value has at least %d characters."
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
msgstr ""
-#: newforms/fields.py:128 core/validators.py:120
-msgid "Enter a whole number."
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
msgstr ""
-#: newforms/fields.py:130
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
msgstr ""
-#: newforms/fields.py:132
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
msgstr ""
-#: newforms/fields.py:165
-msgid "Enter a valid date."
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
msgstr ""
-#: newforms/fields.py:192
-msgid "Enter a valid time."
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
msgstr ""
-#: newforms/fields.py:228
-msgid "Enter a valid date/time."
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
msgstr ""
-#: newforms/fields.py:242
-msgid "Enter a valid value."
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
msgstr ""
-#: newforms/fields.py:271 core/validators.py:162
-msgid "Enter a valid e-mail address."
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
msgstr ""
-#: newforms/fields.py:289 newforms/fields.py:311
-msgid "Enter a valid URL."
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
msgstr ""
-#: newforms/fields.py:313
-msgid "This URL appears to be a broken link."
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
msgstr ""
-#: newforms/fields.py:362 newforms/models.py:165
-msgid "Select a valid choice. That choice is not one of the available choices."
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
msgstr ""
-#: newforms/fields.py:380 newforms/fields.py:456 newforms/models.py:182
-msgid "Enter a list of values."
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
msgstr ""
-#: newforms/fields.py:389 newforms/models.py:188
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
msgstr ""
-#: template/defaultfilters.py:491
-msgid "yes,no,maybe"
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
msgstr ""
-#: views/generic/create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
msgstr ""
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
msgstr ""
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr ""
+
+#: contrib/localflavor/uk/forms.py:18
+msgid "Enter a postcode. A space is required between the two postcode parts."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:18
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:51
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr ""
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr ""
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr ""
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
msgstr ""
-#: core/validators.py:64
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr ""
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr ""
+
+#: contrib/sessions/models.py:80
+msgid "session key"
+msgstr ""
+
+#: contrib/sessions/models.py:81
+msgid "session data"
+msgstr ""
+
+#: contrib/sessions/models.py:82
+msgid "expire date"
+msgstr ""
+
+#: contrib/sessions/models.py:87
+msgid "session"
+msgstr ""
+
+#: contrib/sessions/models.py:88
+msgid "sessions"
+msgstr ""
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr ""
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr ""
+
+#: contrib/sites/models.py:37
+msgid "site"
+msgstr ""
+
+#: contrib/sites/models.py:38
+msgid "sites"
+msgstr ""
+
+#: core/validators.py:72
msgid "This value must contain only letters, numbers and underscores."
msgstr ""
-#: core/validators.py:68
+#: core/validators.py:76
msgid ""
"This value must contain only letters, numbers, underscores, dashes or "
"slashes."
msgstr ""
-#: core/validators.py:72
+#: core/validators.py:80
msgid "This value must contain only letters, numbers, underscores or hyphens."
msgstr ""
-#: core/validators.py:76
+#: core/validators.py:84
msgid "Uppercase letters are not allowed here."
msgstr ""
-#: core/validators.py:80
+#: core/validators.py:88
msgid "Lowercase letters are not allowed here."
msgstr ""
-#: core/validators.py:87
+#: core/validators.py:95
msgid "Enter only digits separated by commas."
msgstr ""
-#: core/validators.py:99
+#: core/validators.py:107
msgid "Enter valid e-mail addresses separated by commas."
msgstr ""
-#: core/validators.py:103
+#: core/validators.py:111
msgid "Please enter a valid IP address."
msgstr ""
-#: core/validators.py:107
+#: core/validators.py:115
msgid "Empty values are not allowed here."
msgstr ""
-#: core/validators.py:111
+#: core/validators.py:119
msgid "Non-numeric characters aren't allowed here."
msgstr ""
-#: core/validators.py:115
+#: core/validators.py:123
msgid "This value can't be comprised solely of digits."
msgstr ""
-#: core/validators.py:124
+#: core/validators.py:128 newforms/fields.py:157
+msgid "Enter a whole number."
+msgstr ""
+
+#: core/validators.py:132
msgid "Only alphabetical characters are allowed here."
msgstr ""
-#: core/validators.py:139
+#: core/validators.py:147
msgid "Year must be 1900 or later."
msgstr ""
-#: core/validators.py:143
+#: core/validators.py:151
#, python-format
msgid "Invalid date: %s"
msgstr ""
-#: core/validators.py:153
+#: core/validators.py:156 db/models/fields/__init__.py:509
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+
+#: core/validators.py:161
msgid "Enter a valid time in HH:MM format."
msgstr ""
-#: core/validators.py:178
+#: core/validators.py:165 db/models/fields/__init__.py:583
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+
+#: core/validators.py:170 newforms/fields.py:408
+msgid "Enter a valid e-mail address."
+msgstr ""
+
+#: core/validators.py:182 core/validators.py:474 newforms/fields.py:438
+#: oldforms/__init__.py:687
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: core/validators.py:193 newforms/fields.py:462
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
-#: core/validators.py:185
+#: core/validators.py:200
#, python-format
msgid "The URL %s does not point to a valid image."
msgstr ""
-#: core/validators.py:189
+#: core/validators.py:204
#, python-format
msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
msgstr ""
-#: core/validators.py:197
+#: core/validators.py:212
#, python-format
msgid "The URL %s does not point to a valid QuickTime video."
msgstr ""
-#: core/validators.py:201
+#: core/validators.py:216
msgid "A valid URL is required."
msgstr ""
-#: core/validators.py:215
+#: core/validators.py:230
#, python-format
msgid ""
"Valid HTML is required. Specific errors are:\n"
"%s"
msgstr ""
-#: core/validators.py:222
+#: core/validators.py:237
#, python-format
msgid "Badly formed XML: %s"
msgstr ""
-#: core/validators.py:239
+#: core/validators.py:254
#, python-format
msgid "Invalid URL: %s"
msgstr ""
-#: core/validators.py:244 core/validators.py:246
+#: core/validators.py:259 core/validators.py:261
#, python-format
msgid "The URL %s is a broken link."
msgstr ""
-#: core/validators.py:252
+#: core/validators.py:267
msgid "Enter a valid U.S. state abbreviation."
msgstr ""
-#: core/validators.py:266
+#: core/validators.py:281
#, python-format
msgid "Watch your mouth! The word %s is not allowed here."
msgid_plural "Watch your mouth! The words %s are not allowed here."
msgstr[0] ""
msgstr[1] ""
-#: core/validators.py:273
+#: core/validators.py:288
#, python-format
msgid "This field must match the '%s' field."
msgstr ""
-#: core/validators.py:292
+#: core/validators.py:307
msgid "Please enter something for at least one field."
msgstr ""
-#: core/validators.py:301 core/validators.py:312
+#: core/validators.py:316 core/validators.py:327
msgid "Please enter both fields or leave them both empty."
msgstr ""
-#: core/validators.py:320
+#: core/validators.py:335
#, python-format
msgid "This field must be given if %(field)s is %(value)s"
msgstr ""
-#: core/validators.py:333
+#: core/validators.py:348
#, python-format
msgid "This field must be given if %(field)s is not %(value)s"
msgstr ""
-#: core/validators.py:352
+#: core/validators.py:367
msgid "Duplicate values are not allowed."
msgstr ""
-#: core/validators.py:367
+#: core/validators.py:382
#, python-format
msgid "This value must be between %(lower)s and %(upper)s."
msgstr ""
-#: core/validators.py:369
+#: core/validators.py:384
#, python-format
msgid "This value must be at least %s."
msgstr ""
-#: core/validators.py:371
+#: core/validators.py:386
#, python-format
msgid "This value must be no more than %s."
msgstr ""
-#: core/validators.py:407
+#: core/validators.py:427
#, python-format
msgid "This value must be a power of %s."
msgstr ""
-#: core/validators.py:418
+#: core/validators.py:437
msgid "Please enter a valid decimal number."
msgstr ""
-#: core/validators.py:422
+#: core/validators.py:444
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
@@ -2556,7 +3178,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: core/validators.py:425
+#: core/validators.py:447
#, python-format
msgid ""
"Please enter a valid decimal number with a whole part of at most %s digit."
@@ -2565,7 +3187,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: core/validators.py:428
+#: core/validators.py:450
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
@@ -2573,73 +3195,574 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: core/validators.py:438
+#: core/validators.py:458
+msgid "Please enter a valid floating point number."
+msgstr ""
+
+#: core/validators.py:467
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
msgstr ""
-#: core/validators.py:439
+#: core/validators.py:468
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
msgstr ""
-#: core/validators.py:456
+#: core/validators.py:485
msgid "The format for this field is wrong."
msgstr ""
-#: core/validators.py:471
+#: core/validators.py:500
msgid "This field is invalid."
msgstr ""
-#: core/validators.py:507
+#: core/validators.py:536
#, python-format
msgid "Could not retrieve anything from %s."
msgstr ""
-#: core/validators.py:510
+#: core/validators.py:539
#, python-format
msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr ""
-#: core/validators.py:543
+#: core/validators.py:572
#, python-format
msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
"\"%(start)s\".)"
msgstr ""
-#: core/validators.py:547
+#: core/validators.py:576
#, python-format
msgid ""
"Some text starting on line %(line)s is not allowed in that context. (Line "
"starts with \"%(start)s\".)"
msgstr ""
-#: core/validators.py:552
+#: core/validators.py:581
#, python-format
msgid ""
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
"(start)s\".)"
msgstr ""
-#: core/validators.py:557
+#: core/validators.py:586
#, python-format
msgid ""
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
"(start)s\".)"
msgstr ""
-#: core/validators.py:561
+#: core/validators.py:590
#, python-format
msgid ""
"A tag on line %(line)s is missing one or more required attributes. (Line "
"starts with \"%(start)s\".)"
msgstr ""
-#: core/validators.py:566
+#: core/validators.py:595
#, python-format
msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
"starts with \"%(start)s\".)"
msgstr ""
+
+#: db/models/manipulators.py:308
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr ""
+
+#: db/models/fields/__init__.py:52
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr ""
+
+#: db/models/fields/__init__.py:161 db/models/fields/__init__.py:318
+#: db/models/fields/__init__.py:735 db/models/fields/__init__.py:746
+#: newforms/fields.py:45 oldforms/__init__.py:374
+msgid "This field is required."
+msgstr ""
+
+#: db/models/fields/__init__.py:418
+msgid "This value must be an integer."
+msgstr ""
+
+#: db/models/fields/__init__.py:454
+msgid "This value must be either True or False."
+msgstr ""
+
+#: db/models/fields/__init__.py:475
+msgid "This field cannot be null."
+msgstr ""
+
+#: db/models/fields/__init__.py:644
+msgid "This value must be a decimal number."
+msgstr ""
+
+#: db/models/fields/__init__.py:755
+msgid "Enter a valid filename."
+msgstr ""
+
+#: db/models/fields/__init__.py:904
+msgid "This value must be either None, True or False."
+msgstr ""
+
+#: db/models/fields/related.py:658
+msgid "Separate multiple IDs with commas."
+msgstr ""
+
+#: db/models/fields/related.py:660
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+
+#: db/models/fields/related.py:707
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] ""
+msgstr[1] ""
+
+#: newforms/fields.py:46
+msgid "Enter a valid value."
+msgstr ""
+
+#: newforms/fields.py:129
+#, python-format
+msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
+msgstr ""
+
+#: newforms/fields.py:158 newforms/fields.py:187 newforms/fields.py:216
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr ""
+
+#: newforms/fields.py:159 newforms/fields.py:188 newforms/fields.py:217
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr ""
+
+#: newforms/fields.py:186 newforms/fields.py:215
+msgid "Enter a number."
+msgstr ""
+
+#: newforms/fields.py:218
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr ""
+
+#: newforms/fields.py:219
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr ""
+
+#: newforms/fields.py:220
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr ""
+
+#: newforms/fields.py:268 newforms/fields.py:724
+msgid "Enter a valid date."
+msgstr ""
+
+#: newforms/fields.py:301 newforms/fields.py:725
+msgid "Enter a valid time."
+msgstr ""
+
+#: newforms/fields.py:340
+msgid "Enter a valid date/time."
+msgstr ""
+
+#: newforms/fields.py:439
+msgid "No file was submitted."
+msgstr ""
+
+#: newforms/fields.py:440 oldforms/__init__.py:689
+msgid "The submitted file is empty."
+msgstr ""
+
+#: newforms/fields.py:498
+msgid "Enter a valid URL."
+msgstr ""
+
+#: newforms/fields.py:499
+msgid "This URL appears to be a broken link."
+msgstr ""
+
+#: newforms/fields.py:560 newforms/models.py:155
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+
+#: newforms/fields.py:599
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+
+#: newforms/fields.py:600 newforms/fields.py:662 newforms/models.py:215
+msgid "Enter a list of values."
+msgstr ""
+
+#: newforms/fields.py:753
+msgid "Enter a valid IPv4 address."
+msgstr ""
+
+#: newforms/models.py:216
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr ""
+
+#: oldforms/__init__.py:409
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] ""
+msgstr[1] ""
+
+#: oldforms/__init__.py:414
+msgid "Line breaks are not allowed here."
+msgstr ""
+
+#: oldforms/__init__.py:512 oldforms/__init__.py:586 oldforms/__init__.py:625
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr ""
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr ""
+
+#: oldforms/__init__.py:755
+msgid "Enter a positive number."
+msgstr ""
+
+#: oldforms/__init__.py:765
+msgid "Enter a whole number between 0 and 32,767."
+msgstr ""
+
+#: template/defaultfilters.py:658
+msgid "yes,no,maybe"
+msgstr ""
+
+#: template/defaultfilters.py:689
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/defaultfilters.py:691
+#, python-format
+msgid "%.1f KB"
+msgstr ""
+
+#: template/defaultfilters.py:693
+#, python-format
+msgid "%.1f MB"
+msgstr ""
+
+#: template/defaultfilters.py:694
+#, python-format
+msgid "%.1f GB"
+msgstr ""
+
+#: utils/dateformat.py:41
+msgid "p.m."
+msgstr ""
+
+#: utils/dateformat.py:42
+msgid "a.m."
+msgstr ""
+
+#: utils/dateformat.py:47
+msgid "PM"
+msgstr ""
+
+#: utils/dateformat.py:48
+msgid "AM"
+msgstr ""
+
+#: utils/dateformat.py:97
+msgid "midnight"
+msgstr ""
+
+#: utils/dateformat.py:99
+msgid "noon"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr ""
+
+#: utils/dates.py:18
+msgid "January"
+msgstr ""
+
+#: utils/dates.py:18
+msgid "February"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr ""
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "August"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "September"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "October"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "November"
+msgstr ""
+
+#: utils/dates.py:20
+msgid "December"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "may"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr ""
+
+#: utils/text.py:127
+msgid "or"
+msgstr ""
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:46
+msgid "minutes"
+msgstr ""
+
+#: utils/timesince.py:51
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr ""
+
+#: utils/timesince.py:57
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ""
+
+#: utils/translation/trans_real.py:399
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:400
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:401
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:417
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:418
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr ""
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr ""
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr ""
diff --git a/django/conf/locale/en/LC_MESSAGES/djangojs.po b/django/conf/locale/en/LC_MESSAGES/djangojs.po
index 802e0db605..c90b390589 100644
--- a/django/conf/locale/en/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/en/LC_MESSAGES/djangojs.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
+"POT-Creation-Date: 2007-11-29 10:58-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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"
#: contrib/admin/media/js/SelectFilter2.js:33
@@ -45,64 +45,73 @@ msgstr ""
msgid "Clear all"
msgstr ""
-#: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
-#: contrib/admin/media/js/dateparse.js:27
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr ""
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr ""
diff --git a/django/contrib/admin/templates/admin_doc/template_filter_index.html b/django/contrib/admin/templates/admin_doc/template_filter_index.html
index f67f14eb35..902396d416 100644
--- a/django/contrib/admin/templates/admin_doc/template_filter_index.html
+++ b/django/contrib/admin/templates/admin_doc/template_filter_index.html
@@ -13,7 +13,7 @@
{% for library in filter_libraries %}
<div class="module">
<h2>{% if library.grouper %}{{ library.grouper }}{% else %}Built-in filters{% endif %}</h2>
- {% if library.grouper %}<p class="small quiet">To use these filters, put <code>{% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %}</code> in your template before using the filter.</p><hr>{% endif %}
+ {% if library.grouper %}<p class="small quiet">To use these filters, put <code>{% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %}</code> in your template before using the filter.</p><hr />{% endif %}
{% for filter in library.list|dictsort:"name" %}
<h3 id="{{ filter.name }}">{{ filter.name }}</h3>
<p>{{ filter.title }}</p>
diff --git a/django/contrib/admin/templates/admin_doc/template_tag_index.html b/django/contrib/admin/templates/admin_doc/template_tag_index.html
index 9bd66b70e7..ea49529393 100644
--- a/django/contrib/admin/templates/admin_doc/template_tag_index.html
+++ b/django/contrib/admin/templates/admin_doc/template_tag_index.html
@@ -13,7 +13,7 @@
{% for library in tag_libraries %}
<div class="module">
<h2>{% if library.grouper %}{{ library.grouper }}{% else %}Built-in tags{% endif %}</h2>
- {% if library.grouper %}<p class="small quiet">To use these tags, put <code>{% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %}</code> in your template before using the tag.</p><hr>{% endif %}
+ {% if library.grouper %}<p class="small quiet">To use these tags, put <code>{% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %}</code> in your template before using the tag.</p><hr />{% endif %}
{% for tag in library.list|dictsort:"name" %}
<h3 id="{{ tag.name }}">{{ tag.name }}</h3>
<h4>{{ tag.title }}</h4>
diff --git a/django/contrib/admin/templates/admin_doc/view_index.html b/django/contrib/admin/templates/admin_doc/view_index.html
index 47f99350a3..1ed5ba2ac1 100644
--- a/django/contrib/admin/templates/admin_doc/view_index.html
+++ b/django/contrib/admin/templates/admin_doc/view_index.html
@@ -29,10 +29,10 @@
{% for view in site_views.list|dictsort:"url" %}
{% ifchanged %}
-<h3><a href="{{ view.module }}.{{ view.name }}/"/>{{ view.url|escape }}</a></h3>
+<h3><a href="{{ view.module }}.{{ view.name }}/">{{ view.url|escape }}</a></h3>
<p class="small quiet">View function: {{ view.module }}.{{ view.name }}</p>
<p>{{ view.title }}</p>
-<hr>
+<hr />
{% endifchanged %}
{% endfor %}
</div>
diff --git a/django/contrib/comments/models.py b/django/contrib/comments/models.py
index a88d2b3a8e..912f5a6cd2 100644
--- a/django/contrib/comments/models.py
+++ b/django/contrib/comments/models.py
@@ -102,7 +102,7 @@ class Comment(models.Model):
date_hierarchy = 'submit_date'
search_fields = ('comment', 'user__username')
- def __repr__(self):
+ def __unicode__(self):
return "%s: %s..." % (self.user.username, self.comment[:100])
def get_absolute_url(self):
@@ -190,7 +190,7 @@ class FreeComment(models.Model):
date_hierarchy = 'submit_date'
search_fields = ('comment', 'person_name')
- def __repr__(self):
+ def __unicode__(self):
return "%s: %s..." % (self.person_name, self.comment[:100])
def get_absolute_url(self):
@@ -244,7 +244,7 @@ class KarmaScore(models.Model):
verbose_name_plural = _('karma scores')
unique_together = (('user', 'comment'),)
- def __repr__(self):
+ def __unicode__(self):
return _("%(score)d rating by %(user)s") % {'score': self.score, 'user': self.user}
class UserFlagManager(models.Manager):
@@ -275,7 +275,7 @@ class UserFlag(models.Model):
verbose_name_plural = _('user flags')
unique_together = (('user', 'comment'),)
- def __repr__(self):
+ def __unicode__(self):
return _("Flag by %r") % self.user
class ModeratorDeletion(models.Model):
@@ -287,5 +287,5 @@ class ModeratorDeletion(models.Model):
verbose_name_plural = _('moderator deletions')
unique_together = (('user', 'comment'),)
- def __repr__(self):
+ def __unicode__(self):
return _("Moderator deletion by %r") % self.user
diff --git a/django/contrib/comments/tests.py b/django/contrib/comments/tests.py
new file mode 100644
index 0000000000..a8275debf6
--- /dev/null
+++ b/django/contrib/comments/tests.py
@@ -0,0 +1,13 @@
+# coding: utf-8
+
+r"""
+>>> from django.contrib.comments.models import Comment
+>>> from django.contrib.auth.models import User
+>>> u = User.objects.create_user('commenttestuser', 'commenttest@example.com', 'testpw')
+>>> c = Comment(user=u, comment=u'\xe2')
+>>> c
+<Comment: commenttestuser: â...>
+>>> print c
+commenttestuser: â...
+"""
+
diff --git a/django/contrib/formtools/models.py b/django/contrib/formtools/models.py
new file mode 100644
index 0000000000..13990e24af
--- /dev/null
+++ b/django/contrib/formtools/models.py
@@ -0,0 +1 @@
+""" models.py (even empty) currently required by the runtests.py to enable unit tests """
diff --git a/django/contrib/formtools/test_urls.py b/django/contrib/formtools/test_urls.py
new file mode 100644
index 0000000000..19dbbd1ae4
--- /dev/null
+++ b/django/contrib/formtools/test_urls.py
@@ -0,0 +1,12 @@
+"""
+
+This is a urlconf to be loaded by tests.py. Add any urls needed
+for tests only.
+
+"""
+from django.conf.urls.defaults import *
+from django.contrib.formtools.tests import *
+
+urlpatterns = patterns('',
+ (r'^test1/', TestFormPreview(TestForm)),
+ )
diff --git a/django/contrib/formtools/tests.py b/django/contrib/formtools/tests.py
new file mode 100644
index 0000000000..a5a9222c46
--- /dev/null
+++ b/django/contrib/formtools/tests.py
@@ -0,0 +1,93 @@
+from django import newforms as forms
+from django.contrib.formtools import preview
+from django import http
+from django.conf import settings
+from django.test import TestCase
+from django.test.client import Client
+
+
+success_string = "Done was called!"
+test_data = {'field1': u'foo',
+ 'field1_': u'asdf'}
+
+
+class TestFormPreview(preview.FormPreview):
+
+ def done(self, request, cleaned_data):
+ return http.HttpResponse(success_string)
+
+
+class TestForm(forms.Form):
+ field1 = forms.CharField()
+ field1_ = forms.CharField()
+
+
+class PreviewTests(TestCase):
+
+ def setUp(self):
+ settings.ROOT_URLCONF = 'django.contrib.formtools.test_urls'
+ # Create a FormPreview instance to share between tests
+ self.preview = preview.FormPreview(TestForm)
+ input_template = '<input type="hidden" name="%s" value="%s" />'
+ self.input = input_template % (self.preview.unused_name('stage'), "%d")
+
+ def test_unused_name(self):
+ """
+ Verifies name mangling to get uniue field name.
+ """
+ self.assertEqual(self.preview.unused_name('field1'), 'field1__')
+
+ def test_form_get(self):
+ """
+ Test contrib.formtools.preview form retrieval.
+
+ Use the client library to see if we can sucessfully retrieve
+ the form (mostly testing the setup ROOT_URLCONF
+ process). Verify that an additional hidden input field
+ is created to manage the stage.
+
+ """
+ response = self.client.get('/test1/')
+ stage = self.input % 1
+ self.assertContains(response, stage, 1)
+
+ def test_form_preview(self):
+ """
+ Test contrib.formtools.preview form preview rendering.
+
+ Use the client library to POST to the form to see if a preview
+ is returned. If we do get a form back check that the hidden
+ value is correctly managing the state of the form.
+
+ """
+ # Pass strings for form submittal and add stage variable to
+ # show we previously saw first stage of the form.
+ test_data.update({'stage': 1})
+ response = self.client.post('/test1/', test_data)
+ # Check to confirm stage is set to 2 in output form.
+ stage = self.input % 2
+ self.assertContains(response, stage, 1)
+
+ def test_form_submit(self):
+ """
+ Test contrib.formtools.preview form submittal.
+
+ Use the client library to POST to the form with stage set to 3
+ to see if our forms done() method is called. Check first
+ without the security hash, verify failure, retry with security
+ hash and verify sucess.
+
+ """
+ # Pass strings for form submittal and add stage variable to
+ # show we previously saw first stage of the form.
+ test_data.update({'stage': 2})
+ response = self.client.post('/test1/', test_data)
+ self.failIfEqual(response.content, success_string)
+ hash = self.preview.security_hash(None, TestForm(test_data))
+ test_data.update({'hash': hash})
+ response = self.client.post('/test1/', test_data)
+ self.assertEqual(response.content, success_string)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/django/contrib/localflavor/ca/ca_provinces.py b/django/contrib/localflavor/ca/ca_provinces.py
index 072159ad57..746716fd21 100644
--- a/django/contrib/localflavor/ca/ca_provinces.py
+++ b/django/contrib/localflavor/ca/ca_provinces.py
@@ -33,6 +33,8 @@ PROVINCES_NORMALIZED = {
'british columbia': 'BC',
'mb': 'MB',
'manitoba': 'MB',
+ 'nb': 'NB',
+ 'new brunswick': 'NB',
'nf': 'NF',
'newfoundland': 'NF',
'newfoundland and labrador': 'NF',
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 379ed898f6..6b8e8369b0 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -471,5 +471,5 @@ def method_get_order(ordered_obj, self):
# HELPER FUNCTIONS (CURRIED MODEL FUNCTIONS) #
##############################################
-def get_absolute_url(opts, func, self):
- return settings.ABSOLUTE_URL_OVERRIDES.get('%s.%s' % (opts.app_label, opts.module_name), func)(self)
+def get_absolute_url(opts, func, self, *args, **kwargs):
+ return settings.ABSOLUTE_URL_OVERRIDES.get('%s.%s' % (opts.app_label, opts.module_name), func)(self, *args, **kwargs)
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index af122b33d9..ddff9bde29 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -399,7 +399,7 @@ class Field(object):
"Returns a django.newforms.Field instance for this database Field."
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
if self.choices:
- defaults['widget'] = forms.Select(choices=self.get_choices())
+ defaults['widget'] = forms.Select(choices=self.get_choices(include_blank=self.blank or not (self.has_default() or 'initial' in kwargs)))
if self.has_default():
defaults['initial'] = self.get_default()
defaults.update(kwargs)
diff --git a/django/db/models/fields/subclassing.py b/django/db/models/fields/subclassing.py
index 1e4c8ca2e0..36f7e4d934 100644
--- a/django/db/models/fields/subclassing.py
+++ b/django/db/models/fields/subclassing.py
@@ -28,10 +28,10 @@ class Creator(object):
def __get__(self, obj, type=None):
if obj is None:
raise AttributeError('Can only be accessed via an instance.')
- return self.value
+ return obj.__dict__[self.field.name]
def __set__(self, obj, value):
- self.value = self.field.to_python(value)
+ obj.__dict__[self.field.name] = self.field.to_python(value)
def make_contrib(func=None):
"""
diff --git a/django/middleware/cache.py b/django/middleware/cache.py
index a88b4956b2..23a907f8be 100644
--- a/django/middleware/cache.py
+++ b/django/middleware/cache.py
@@ -1,14 +1,18 @@
from django.conf import settings
from django.core.cache import cache
-from django.utils.cache import get_cache_key, learn_cache_key, patch_response_headers
+from django.utils.cache import get_cache_key, learn_cache_key, patch_response_headers, get_max_age
class CacheMiddleware(object):
"""
Cache middleware. If this is enabled, each Django-powered page will be
- cached for CACHE_MIDDLEWARE_SECONDS seconds. Cache is based on URLs.
+ cached (based on URLs).
Only parameter-less GET or HEAD-requests with status code 200 are cached.
+ The number of seconds each page is stored for is set by the
+ "max-age" section of the response's "Cache-Control" header, falling back to
+ the CACHE_MIDDLEWARE_SECONDS setting if the section was not found.
+
If CACHE_MIDDLEWARE_ANONYMOUS_ONLY is set to True, only anonymous requests
(i.e., those not made by a logged-in user) will be cached. This is a
simple and effective way of avoiding the caching of the Django admin (and
@@ -78,7 +82,16 @@ class CacheMiddleware(object):
return response
if not response.status_code == 200:
return response
- patch_response_headers(response, self.cache_timeout)
- cache_key = learn_cache_key(request, response, self.cache_timeout, self.key_prefix)
- cache.set(cache_key, response, self.cache_timeout)
+ # Try to get the timeout from the "max-age" section of the "Cache-
+ # Control" header before reverting to using the default cache_timeout
+ # length.
+ timeout = get_max_age(response)
+ if timeout == None:
+ timeout = self.cache_timeout
+ elif timeout == 0:
+ # max-age was set to 0, don't bother caching.
+ return response
+ patch_response_headers(response, timeout)
+ cache_key = learn_cache_key(request, response, timeout, self.key_prefix)
+ cache.set(cache_key, response, timeout)
return response
diff --git a/django/newforms/fields.py b/django/newforms/fields.py
index 9bb2ced583..4a54a98d61 100644
--- a/django/newforms/fields.py
+++ b/django/newforms/fields.py
@@ -17,7 +17,7 @@ except NameError:
from sets import Set as set
from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import StrAndUnicode, smart_unicode
+from django.utils.encoding import StrAndUnicode, smart_unicode, smart_str
from util import ErrorList, ValidationError
from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateTimeInput
@@ -235,7 +235,7 @@ class DecimalField(Field):
super(DecimalField, self).clean(value)
if not self.required and value in EMPTY_VALUES:
return None
- value = str(value).strip()
+ value = smart_str(value).strip()
try:
value = Decimal(value)
except DecimalException:
@@ -536,11 +536,12 @@ class BooleanField(Field):
widget = CheckboxInput
def clean(self, value):
- "Returns a Python boolean object."
+ """Returns a Python boolean object."""
super(BooleanField, self).clean(value)
- # Explicitly check for the string '0', which is what as hidden field
- # will submit for False.
- if value == '0':
+ # Explicitly check for the string 'False', which is what a hidden field
+ # will submit for False (since bool("True") == True we don't need to
+ # handle that explicitly).
+ if value == 'False':
return False
return bool(value)
diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py
index e62e2e3eaf..f2be64ef1d 100644
--- a/django/template/defaultfilters.py
+++ b/django/template/defaultfilters.py
@@ -25,8 +25,8 @@ def stringfilter(func):
if args:
args = list(args)
args[0] = force_unicode(args[0])
- if isinstance(args[0], SafeData) and getattr(func, 'is_safe', False):
- return mark_safe(func(*args, **kwargs))
+ if isinstance(args[0], SafeData) and getattr(func, 'is_safe', False):
+ return mark_safe(func(*args, **kwargs))
return func(*args, **kwargs)
# Include a reference to the real function (used to check original
@@ -91,7 +91,7 @@ def floatformat(text, arg=-1):
"""
try:
f = float(text)
- except ValueError:
+ except (ValueError, TypeError):
return u''
try:
d = int(arg)
diff --git a/django/utils/cache.py b/django/utils/cache.py
index 5654bed7aa..4fcf493944 100644
--- a/django/utils/cache.py
+++ b/django/utils/cache.py
@@ -74,6 +74,21 @@ def patch_cache_control(response, **kwargs):
cc = ', '.join([dictvalue(el) for el in cc.items()])
response['Cache-Control'] = cc
+def get_max_age(response):
+ """
+ Returns the max-age from the response Cache-Control header as an integer
+ (or ``None`` if it wasn't found or wasn't an integer.
+ """
+ if not response.has_header('Cache-Control'):
+ return
+ cc = dict([_to_tuple(el) for el in
+ cc_delim_re.split(response['Cache-Control'])])
+ if 'max-age' in cc:
+ try:
+ return int(cc['max-age'])
+ except (ValueError, TypeError):
+ pass
+
def patch_response_headers(response, cache_timeout=None):
"""
Adds some useful headers to the given HttpResponse object:
@@ -180,3 +195,10 @@ def learn_cache_key(request, response, cache_timeout=None, key_prefix=None):
# for the request.path
cache.set(cache_key, [], cache_timeout)
return _generate_cache_key(request, [], key_prefix)
+
+
+def _to_tuple(s):
+ t = s.split('=',1)
+ if len(t) == 2:
+ return t[0].lower(), t[1]
+ return t[0].lower(), True
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index ffdc73f922..ee156b11d0 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -60,7 +60,10 @@ class SortedDict(dict):
if isinstance(data, dict):
self.keyOrder = data.keys()
else:
- self.keyOrder = [key for key, value in data]
+ self.keyOrder = []
+ for key, value in data:
+ if key not in self.keyOrder:
+ self.keyOrder.append(key)
def __deepcopy__(self, memo):
from copy import deepcopy
diff --git a/django/utils/tzinfo.py b/django/utils/tzinfo.py
index e2e1d10fc1..7d5ead9290 100644
--- a/django/utils/tzinfo.py
+++ b/django/utils/tzinfo.py
@@ -54,6 +54,12 @@ class LocalTimezone(tzinfo):
def _isdst(self, dt):
tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1)
- stamp = time.mktime(tt)
+ try:
+ stamp = time.mktime(tt)
+ except OverflowError:
+ # 32 bit systems can't handle dates after Jan 2038, so we fake it
+ # in that case (since we only care about the DST flag here).
+ tt = (2037,) + tt[1:]
+ stamp = time.mktime(tt)
tt = time.localtime(stamp)
return tt.tm_isdst > 0
diff --git a/django/views/i18n.py b/django/views/i18n.py
index cccec13941..cd23ff8777 100644
--- a/django/views/i18n.py
+++ b/django/views/i18n.py
@@ -120,8 +120,12 @@ def javascript_catalog(request, domain='djangojs', packages=None):
p = __import__(package, {}, {}, [''])
path = os.path.join(os.path.dirname(p.__file__), 'locale')
paths.append(path)
- catalog = gettext_module.translation(domain, path, ['en'])
- t.update(catalog._catalog)
+ try:
+ catalog = gettext_module.translation(domain, path, ['en'])
+ t.update(catalog._catalog)
+ except IOError:
+ # 'en' catalog was missing. This is harmless.
+ pass
# next load the settings.LANGUAGE_CODE translations if it isn't english
if default_locale != 'en':
for path in paths:
diff --git a/django/views/static.py b/django/views/static.py
index b556c60ca6..f0e43ffe4e 100644
--- a/django/views/static.py
+++ b/django/views/static.py
@@ -33,6 +33,7 @@ def serve(request, path, document_root=None, show_indexes=False):
# Clean up given path to only allow serving files below document_root.
path = posixpath.normpath(urllib.unquote(path))
+ path = path.lstrip('/')
newpath = ''
for part in path.split('/'):
if not part:
diff --git a/docs/authentication.txt b/docs/authentication.txt
index aee9c5224a..2c34c6663d 100644
--- a/docs/authentication.txt
+++ b/docs/authentication.txt
@@ -170,7 +170,7 @@ The ``User`` model has a custom manager that has the following helper functions:
If no password is provided, ``set_unusable_password()`` will be called.
- See _`Creating users` for example usage.
+ See `Creating users`_ for example usage.
* ``make_random_password(length=10, allowed_chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789')``
Returns a random password with the given length and given string of
diff --git a/docs/cache.txt b/docs/cache.txt
index 4f177b8c07..6dfe2bf5ee 100644
--- a/docs/cache.txt
+++ b/docs/cache.txt
@@ -263,6 +263,18 @@ See the `middleware documentation`_ for more on middleware.
.. _`middleware documentation`: ../middleware/
+**New in Django development version**
+
+If a view sets its own cache expiry time (i.e. it has a ``max-age`` section in
+its ``Cache-Control`` header) then the page will be cached until the expiry
+time, rather than ``CACHE_MIDDLEWARE_SECONDS``. Using the decorators in
+``django.views.decorators.cache`` you can easily set a view's expiry time
+(using the ``cache_control`` decorator) or disable caching for a view (using
+the ``never_cache`` decorator). See the `using other headers`__ section for
+more on these decorators.
+
+__ `Controlling cache: Using other headers`_
+
The per-view cache
==================
@@ -566,7 +578,7 @@ the value of the ``CACHE_MIDDLEWARE_SETTINGS`` setting. If you use a custom
precedence, and the header values will be merged correctly.)
If you want to use headers to disable caching altogether,
-``django.views.decorators.never_cache`` is a view decorator that adds
+``django.views.decorators.cache.never_cache`` is a view decorator that adds
headers to ensure the response won't be cached by browsers or other caches. Example::
from django.views.decorators.cache import never_cache
diff --git a/docs/django-admin.txt b/docs/django-admin.txt
index e751a7b3d9..2977f9908f 100644
--- a/docs/django-admin.txt
+++ b/docs/django-admin.txt
@@ -184,9 +184,9 @@ is being executed as an unattended, automated script.
Use ``--verbosity`` to specify the amount of notification and debug information
that ``django-admin.py`` should print to the console.
- * ``0`` means no input.
- * ``1`` means normal input (default).
- * ``2`` means verbose input.
+ * ``0`` means no output.
+ * ``1`` means normal output (default).
+ * ``2`` means verbose output.
Example usage::
@@ -651,7 +651,7 @@ To run the test server on port 7000 with ``fixture1`` and ``fixture2``::
that it doesn't matter whether the options come before or after the fixture
arguments.)
-To run on 1.2.3.4:7000 with a `test` fixture::
+To run on 1.2.3.4:7000 with a ``test`` fixture::
django-admin.py testserver --addrport 1.2.3.4:7000 test
diff --git a/docs/install.txt b/docs/install.txt
index 519bf2674c..08444d3a1a 100644
--- a/docs/install.txt
+++ b/docs/install.txt
@@ -187,10 +187,10 @@ latest bug fixes and improvements, follow these instructions:
"Where are my ``site-packages`` stored?" section above.)
Alternatively, you can define your ``PYTHONPATH`` environment variable
- so that it includes the ``django`` subdirectory of ``django-trunk``.
- This is perhaps the most convenient solution on Windows systems, which
- don't support symbolic links. (Environment variables can be defined on
- Windows systems `from the Control Panel`_.)
+ so that it includes the ``django-trunk`` directory. This is perhaps the
+ most convenient solution on Windows systems, which don't support symbolic
+ links. (Environment variables can be defined on Windows systems `from the
+ Control Panel`_.)
.. admonition:: What about Apache and mod_python?
@@ -204,11 +204,18 @@ latest bug fixes and improvements, follow these instructions:
.. _How to use Django with mod_python: ../modpython/
-4. Copy the file ``django-trunk/django/bin/django-admin.py`` to somewhere on
- your system path, such as ``/usr/local/bin`` (Unix) or ``C:\Python24\Scripts``
- (Windows). This step simply lets you type ``django-admin.py`` from within
- any directory, rather than having to qualify the command with the full path
- to the file.
+4. On Unix-like systems, create a symbolic link to the file
+ ``django-trunk/django/bin/django-admin.py`` in a directory on your system
+ path, such as ``/usr/local/bin``. For example::
+
+ ln -s `pwd`/django-trunk/django/bin/django-admin.py /usr/local/bin
+
+ This simply lets you type ``django-admin.py`` from within any directory,
+ rather than having to qualify the command with the full path to the file.
+
+ On Windows systems, the same result can be achieved by copying the file
+ ``django-trunk/django/bin/django-admin.py`` to somewhere on your system
+ path, for example ``C:\Python24\Scripts``.
You *don't* have to run ``python setup.py install``, because you've already
carried out the equivalent actions in steps 3 and 4.
diff --git a/docs/model-api.txt b/docs/model-api.txt
index ca84c84d09..f39b711e84 100644
--- a/docs/model-api.txt
+++ b/docs/model-api.txt
@@ -50,7 +50,7 @@ The above ``Person`` model would create a database table like this::
Some technical notes:
* The name of the table, ``myapp_person``, is automatically derived from
- some model metadata but can be overridden. See _`Table names` below.
+ some model metadata but can be overridden. See `Table names`_ below.
* An ``id`` field is added automatically, but this behavior can be
overriden. See `Automatic primary key fields`_ below.
* The ``CREATE TABLE`` SQL in this example is formatted using PostgreSQL
@@ -1664,7 +1664,7 @@ Adding extra Manager methods
Adding extra ``Manager`` methods is the preferred way to add "table-level"
functionality to your models. (For "row-level" functionality -- i.e., functions
-that act on a single instance of a model object -- use _`Model methods`, not
+that act on a single instance of a model object -- use `Model methods`_, not
custom ``Manager`` methods.)
A custom ``Manager`` method can return anything you want. It doesn't have to
diff --git a/docs/newforms.txt b/docs/newforms.txt
index 593e9216d7..810982d788 100644
--- a/docs/newforms.txt
+++ b/docs/newforms.txt
@@ -753,6 +753,30 @@ For example::
</ul>
</form>
+Highlighting required fields in templates
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You may wish to show a visitor which fields are required. Here is the above
+example modified to insert an asterix after the label of each required field::
+
+ <form method="post" action="">
+ <dl>
+ {% for field in form %}
+ <dt>{{ field.label_tag }}{{ field.label }}{% if field.field.required %}*{% endif %}</dt>
+ <dd>{{ field }}</dd>
+ {% if field.help_text %}<dd>{{ field.help_text }}</dd>{% endif %}
+ {% if field.errors %}<dd class="myerrors">{{ field.errors }}</dd>{% endif %}
+ {% endfor %}
+ </dl>
+ <input type="submit" />
+ </form>
+
+The ``{% if field.field.required %}*{% endif %}`` fragment is the relevant
+addition here. It adds the asterix only if the field is required. Note that we
+check ``field.field.required`` and not ``field.required``. In the template,
+``field`` is a ``newforms.forms.BoundField`` instance, which holds the actual
+``Field`` instance in its ``field`` attribute.
+
Binding uploaded files to a form
--------------------------------
@@ -1849,7 +1873,11 @@ In addition, each generated form field has attributes set as follows:
* If the model field has ``choices`` set, then the form field's ``widget``
will be set to ``Select``, with choices coming from the model field's
- ``choices``.
+ ``choices``. The choices will normally include the blank choice which is
+ selected by default. If the field is required, this forces the user to
+ make a selection. The blank choice will not be included if the model
+ field has ``blank=False`` and an explicit ``default`` value (the
+ ``default`` value will be initially selected instead).
Finally, note that you can override the form field used for a given model
field. See "Overriding the default field types" below.
@@ -2095,10 +2123,14 @@ instance instead of a model class::
# Instantiate the form.
>>> f = AuthorForm()
-When a form created by ``form_for_instance()`` is created, the initial
-data values for the form fields are drawn from the instance. However,
-this data is not bound to the form. You will need to bind data to the
-form before the form can be saved.
+When a form created by ``form_for_instance()`` is created, the initial data
+values for the form fields are drawn from the instance. However, this data is
+not bound to the form. You will need to bind data to the form before the form
+can be saved.
+
+Unlike ``form_for_model()``, a choice field in form created by
+``form_for_instance()`` will not include the blank choice if the respective
+model field has ``blank=False``. The initial choice is drawn from the instance.
When you call ``save()`` on a form created by ``form_for_instance()``,
the database instance will be updated. As in ``form_for_model()``, ``save()``
diff --git a/docs/release_notes_0.96.txt b/docs/release_notes_0.96.txt
index 4227de8155..59931541e1 100644
--- a/docs/release_notes_0.96.txt
+++ b/docs/release_notes_0.96.txt
@@ -44,7 +44,7 @@ to this::
DATABASE_ENGINE = "mysql_old"
However, we strongly encourage MySQL users to upgrade to a more recent
-version of `MySQLdb` as soon as possible, The "mysql_old" backend is
+version of ``MySQLdb`` as soon as possible, The "mysql_old" backend is
provided only to ease this transition, and is considered deprecated;
aside from any necessary security fixes, it will not be actively
maintained, and it will be removed in a future release of Django.
diff --git a/docs/syndication_feeds.txt b/docs/syndication_feeds.txt
index 30943591b8..2eb188a737 100644
--- a/docs/syndication_feeds.txt
+++ b/docs/syndication_feeds.txt
@@ -201,6 +201,8 @@ the feed.
An example makes this clear. Here's the code for these beat-specific feeds::
+ from django.contrib.syndication import FeedDoesNotExist
+
class BeatFeed(Feed):
def get_object(self, bits):
# In case of "/rss/beats/0613/foo/bar/baz/", or other such clutter,
@@ -213,6 +215,8 @@ An example makes this clear. Here's the code for these beat-specific feeds::
return "Chicagocrime.org: Crimes for beat %s" % obj.beat
def link(self, obj):
+ if not obj:
+ raise FeedDoesNotExist
return obj.get_absolute_url()
def description(self, obj):
@@ -246,11 +250,18 @@ request to the URL ``/rss/beats/0613/``:
each of ``title``, ``link`` and ``description``, Django follows this
algorithm:
- * First, it tries to call a method, passing the ``obj`` argument, where
- ``obj`` is the object returned by ``get_object()``.
+ * First, it tries to call a method, passing the ``obj`` argument,
+ where ``obj`` is the object returned by ``get_object()``.
* Failing that, it tries to call a method with no arguments.
* Failing that, it uses the class attribute.
+ Inside the ``link()`` method, we handle the possibility that ``obj``
+ might be ``None``, which can occur when the URL isn't fully specified. In
+ some cases, you might want to do something else in this case, which would
+ mean you'd need to check for ``obj`` existing in other methods as well
+ (the ``link()`` method is called very early in the feed generation
+ process, so is a good place to bail out early).
+
* Finally, note that ``items()`` in this example also takes the ``obj``
argument. The algorithm for ``items`` is the same as described in the
previous step -- first, it tries ``items(obj)``, then ``items()``, then
diff --git a/docs/templates_python.txt b/docs/templates_python.txt
index 5ac93f5a58..64b67a1333 100644
--- a/docs/templates_python.txt
+++ b/docs/templates_python.txt
@@ -1183,7 +1183,7 @@ on the object being edited -- so they're a perfect case for using a small
template that is filled with details from the current object. (In the admin's
case, this is the ``submit_row`` tag.)
-These sorts of tags are called `inclusion tags`.
+These sorts of tags are called "inclusion tags".
Writing inclusion tags is probably best demonstrated by example. Let's write a
tag that outputs a list of choices for a given ``Poll`` object, such as was
diff --git a/docs/tutorial01.txt b/docs/tutorial01.txt
index 9e0c287346..b84ecd5f7e 100644
--- a/docs/tutorial01.txt
+++ b/docs/tutorial01.txt
@@ -47,7 +47,7 @@ will create a ``mysite`` directory in your current directory.
denied" when you try to run ``django-admin.py startproject``. This
is because, on Unix-based systems like OS X, a file must be marked
as "executable" before it can be run as a program. To do this, open
- Terminal.app and navigate (using the `cd` command) to the directory
+ Terminal.app and navigate (using the ``cd`` command) to the directory
where ``django-admin.py`` is installed, then run the command
``chmod +x django-admin.py``.
diff --git a/docs/url_dispatch.txt b/docs/url_dispatch.txt
index 76a4e1b5f0..6ed7043fd5 100644
--- a/docs/url_dispatch.txt
+++ b/docs/url_dispatch.txt
@@ -237,7 +237,7 @@ include
-------
A function that takes a full Python import path to another URLconf that should
-be "included" in this place. See _`Including other URLconfs` below.
+be "included" in this place. See `Including other URLconfs`_ below.
Notes on capturing text in URLs
===============================
diff --git a/tests/modeltests/field_subclassing/models.py b/tests/modeltests/field_subclassing/models.py
index 6182266c22..97804f5cd5 100644
--- a/tests/modeltests/field_subclassing/models.py
+++ b/tests/modeltests/field_subclassing/models.py
@@ -103,4 +103,14 @@ TypeError: Invalid lookup type: 'lt'
>>> obj = list(serializers.deserialize("json", stream))[0]
>>> obj.object == m
True
+
+# Test retrieving custom field data
+>>> m.delete()
+>>> m1 = MyModel(name="1", data=Small(1, 2))
+>>> m1.save()
+>>> m2 = MyModel(name="2", data=Small(2, 3))
+>>> m2.save()
+>>> for m in MyModel.objects.all(): print unicode(m.data)
+12
+23
"""}
diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py
index e4e230c98d..9b0126ff4f 100644
--- a/tests/modeltests/model_forms/models.py
+++ b/tests/modeltests/model_forms/models.py
@@ -30,6 +30,23 @@ ARTICLE_STATUS = (
(3, 'Live'),
)
+STEERING_TYPE = (
+ ('left', 'Left steering wheel'),
+ ('right', 'Right steering wheel'),
+)
+
+FUEL_TYPE = (
+ ('gas', 'Gasoline'),
+ ('diesel', 'Diesel'),
+ ('other', 'Other'),
+)
+
+TRANSMISSION_TYPE = (
+ ('at', 'Automatic'),
+ ('mt', 'Manual'),
+ ('cvt', 'CVT'),
+)
+
class Category(models.Model):
name = models.CharField(max_length=20)
slug = models.SlugField(max_length=20)
@@ -70,6 +87,12 @@ class PhoneNumber(models.Model):
def __unicode__(self):
return self.phone
+class Car(models.Model):
+ name = models.CharField(max_length=50)
+ steering = models.CharField(max_length=5, choices=STEERING_TYPE, default='left')
+ fuel = models.CharField(max_length=10, choices=FUEL_TYPE)
+ transmission = models.CharField(max_length=3, choices=TRANSMISSION_TYPE, blank=True, help_text='Leave empty if not applicable.')
+
__test__ = {'API_TESTS': """
>>> from django.newforms import form_for_model, form_for_instance, save_instance, BaseForm, Form, CharField
>>> import datetime
@@ -592,4 +615,54 @@ ValidationError: [u'Select a valid choice. 4 is not one of the available choices
True
>>> f.cleaned_data
{'phone': u'312-555-1212', 'description': u'Assistance'}
+
+# form_for_* blank choices ####################################################
+
+Show the form for a new Car. Note that steering field doesn't include the blank choice,
+because the field is obligatory and has an explicit default.
+>>> CarForm = form_for_model(Car)
+>>> f = CarForm(auto_id=False)
+>>> print f
+<tr><th>Name:</th><td><input type="text" name="name" maxlength="50" /></td></tr>
+<tr><th>Steering:</th><td><select name="steering">
+<option value="left" selected="selected">Left steering wheel</option>
+<option value="right">Right steering wheel</option>
+</select></td></tr>
+<tr><th>Fuel:</th><td><select name="fuel">
+<option value="" selected="selected">---------</option>
+<option value="gas">Gasoline</option>
+<option value="diesel">Diesel</option>
+<option value="other">Other</option>
+</select></td></tr>
+<tr><th>Transmission:</th><td><select name="transmission">
+<option value="" selected="selected">---------</option>
+<option value="at">Automatic</option>
+<option value="mt">Manual</option>
+<option value="cvt">CVT</option>
+</select><br />Leave empty if not applicable.</td></tr>
+
+Create a Car, and display the form for modifying it. Note that now the fuel
+selector doesn't include the blank choice as well, since the field is
+obligatory and can not be changed to be blank.
+>>> honda = Car(name='Honda Accord Wagon', steering='right', fuel='gas', transmission='at')
+>>> honda.save()
+>>> HondaForm = form_for_instance(honda)
+>>> f = HondaForm(auto_id=False)
+>>> print f
+<tr><th>Name:</th><td><input type="text" name="name" value="Honda Accord Wagon" maxlength="50" /></td></tr>
+<tr><th>Steering:</th><td><select name="steering">
+<option value="left">Left steering wheel</option>
+<option value="right" selected="selected">Right steering wheel</option>
+</select></td></tr>
+<tr><th>Fuel:</th><td><select name="fuel">
+<option value="gas" selected="selected">Gasoline</option>
+<option value="diesel">Diesel</option>
+<option value="other">Other</option>
+</select></td></tr>
+<tr><th>Transmission:</th><td><select name="transmission">
+<option value="">---------</option>
+<option value="at" selected="selected">Automatic</option>
+<option value="mt">Manual</option>
+<option value="cvt">CVT</option>
+</select><br />Leave empty if not applicable.</td></tr>
"""}
diff --git a/tests/regressiontests/dateformat/tests.py b/tests/regressiontests/dateformat/tests.py
index 30c9a4e6dd..481e36a7dd 100644
--- a/tests/regressiontests/dateformat/tests.py
+++ b/tests/regressiontests/dateformat/tests.py
@@ -66,6 +66,9 @@ u'1979 189 CET'
>>> format(my_birthday, r'jS o\f F')
u'8th of July'
+
+>>> format(the_future, r'Y')
+u'2100'
"""
from django.utils import dateformat, translation
@@ -84,3 +87,4 @@ except AttributeError:
my_birthday = datetime.datetime(1979, 7, 8, 22, 00)
summertime = datetime.datetime(2005, 10, 30, 1, 00)
wintertime = datetime.datetime(2005, 10, 30, 4, 00)
+the_future = datetime.datetime(2100, 10, 25, 0, 00)
diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py
index 26d448900d..bfa03cd6e1 100644
--- a/tests/regressiontests/defaultfilters/tests.py
+++ b/tests/regressiontests/defaultfilters/tests.py
@@ -37,6 +37,8 @@ u''
u'13.1031'
>>> floatformat(u'foo', u'bar')
u''
+>>> floatformat(None)
+u''
>>> addslashes(u'"double quotes" and \'single quotes\'')
u'\\"double quotes\\" and \\\'single quotes\\\''
diff --git a/tests/regressiontests/forms/fields.py b/tests/regressiontests/forms/fields.py
index 3b93d70338..cff5db6fca 100644
--- a/tests/regressiontests/forms/fields.py
+++ b/tests/regressiontests/forms/fields.py
@@ -323,6 +323,10 @@ Decimal("3.14")
Traceback (most recent call last):
...
ValidationError: [u'Enter a number.']
+>>> f.clean(u'łąść')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a number.']
>>> f.clean('1.0 ')
Decimal("1.0")
>>> f.clean(' 1.0')
@@ -914,6 +918,11 @@ False
>>> f.clean('Django rocks')
True
+>>> f.clean('True')
+True
+>>> f.clean('False')
+False
+
>>> f = BooleanField(required=False)
>>> f.clean('')
False
@@ -930,6 +939,11 @@ False
>>> f.clean('Django rocks')
True
+A form's BooleanField with a hidden widget will output the string 'False', so
+that should clean to the boolean value False:
+>>> f.clean('False')
+False
+
# ChoiceField #################################################################
>>> f = ChoiceField(choices=[('1', '1'), ('2', '2')])
diff --git a/tests/regressiontests/forms/localflavor/ca.py b/tests/regressiontests/forms/localflavor/ca.py
index baeb2ad9a8..a13a6de65f 100644
--- a/tests/regressiontests/forms/localflavor/ca.py
+++ b/tests/regressiontests/forms/localflavor/ca.py
@@ -147,6 +147,10 @@ u'BC'
u'NS'
>>> f.clean(' manitoba ')
u'MB'
+>>> f.clean(' new brunswick ')
+u'NB'
+>>> f.clean('NB')
+u'NB'
>>> f.clean('T2S 2H7')
Traceback (most recent call last):
...
diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py
index ea8cf135aa..0e69602103 100644
--- a/tests/regressiontests/forms/widgets.py
+++ b/tests/regressiontests/forms/widgets.py
@@ -129,6 +129,13 @@ u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u
>>> w.render('email', '', attrs={'class': 'special'})
u'<input type="hidden" class="special" name="email" />'
+Boolean values are rendered to their string forms ("True" and "False").
+>>> w = HiddenInput()
+>>> w.render('get_spam', False)
+u'<input type="hidden" name="get_spam" value="False" />'
+>>> w.render('get_spam', True)
+u'<input type="hidden" name="get_spam" value="True" />'
+
# MultipleHiddenInput Widget ##################################################
>>> w = MultipleHiddenInput()
diff --git a/tests/regressiontests/templates/filters.py b/tests/regressiontests/templates/filters.py
index 2a06703948..4175bdbe5f 100644
--- a/tests/regressiontests/templates/filters.py
+++ b/tests/regressiontests/templates/filters.py
@@ -12,6 +12,15 @@ from datetime import datetime, timedelta
from django.utils.tzinfo import LocalTimezone
from django.utils.safestring import mark_safe
+# These two classes are used to test auto-escaping of __unicode__ output.
+class UnsafeClass:
+ def __unicode__(self):
+ return u'you & me'
+
+class SafeClass:
+ def __unicode__(self):
+ return mark_safe(u'you &gt; me')
+
# RESULT SYNTAX --
# 'template_name': ('template contents', 'context dict',
# 'expected string output' or Exception class)
@@ -227,4 +236,11 @@ def get_filter_tests():
'chaining12': ('{% autoescape off %}{{ a|cut:"b"|safe }}{% endautoescape %}', {"a": "a < b"}, "a < "),
'chaining13': ('{{ a|safe|force_escape }}', {"a": "a < b"}, "a &lt; b"),
'chaining14': ('{% autoescape off %}{{ a|safe|force_escape }}{% endautoescape %}', {"a": "a < b"}, "a &lt; b"),
+
+ # Filters decorated with stringfilter still respect is_safe.
+ 'autoescape-stringfilter01': (r'{{ unsafe|capfirst }}', {'unsafe': UnsafeClass()}, 'You &amp; me'),
+ 'autoescape-stringfilter02': (r'{% autoescape off %}{{ unsafe|capfirst }}{% endautoescape %}', {'unsafe': UnsafeClass()}, 'You & me'),
+ 'autoescape-stringfilter03': (r'{{ safe|capfirst }}', {'safe': SafeClass()}, 'You &gt; me'),
+ 'autoescape-stringfilter04': (r'{% autoescape off %}{{ safe|capfirst }}{% endautoescape %}', {'safe': SafeClass()}, 'You &gt; me'),
}
+
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index f3c131dd91..cbbd88b06c 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -899,7 +899,12 @@ class Templates(unittest.TestCase):
# Literal string arguments to filters, if used in the result, are
# safe.
- 'basic-syntax08': (r'{% autoescape on %}{{ var|default_if_none:" endquote\" hah" }}{% endautoescape %}', {"var": None}, ' endquote" hah'),
+ 'autoescape-tag08': (r'{% autoescape on %}{{ var|default_if_none:" endquote\" hah" }}{% endautoescape %}', {"var": None}, ' endquote" hah'),
+
+ # Objects which return safe strings as their __unicode__ method
+ # won't get double-escaped.
+ 'autoescape-tag09': (r'{{ unsafe }}', {'unsafe': filters.UnsafeClass()}, 'you &amp; me'),
+ 'autoescape-tag10': (r'{{ safe }}', {'safe': filters.SafeClass()}, 'you &gt; me'),
# The "safe" and "escape" filters cannot work due to internal
# implementation details (fortunately, the (no)autoescape block
diff --git a/tests/regressiontests/utils/datastructures.py b/tests/regressiontests/utils/datastructures.py
new file mode 100644
index 0000000000..52bf81a9e0
--- /dev/null
+++ b/tests/regressiontests/utils/datastructures.py
@@ -0,0 +1,51 @@
+"""
+>>> from django.utils.datastructures import SortedDict
+
+>>> d = SortedDict()
+>>> d[7] = 'seven'
+>>> d[1] = 'one'
+>>> d[9] = 'nine'
+>>> d.keys()
+[7, 1, 9]
+>>> d.values()
+['seven', 'one', 'nine']
+>>> d.items()
+[(7, 'seven'), (1, 'one'), (9, 'nine')]
+
+# Overwriting an item keeps it's place.
+>>> d[1] = 'ONE'
+>>> d.values()
+['seven', 'ONE', 'nine']
+
+# New items go to the end.
+>>> d[0] = 'nil'
+>>> d.keys()
+[7, 1, 9, 0]
+
+# Deleting an item, then inserting the same key again will place it at the end.
+>>> del d[7]
+>>> d.keys()
+[1, 9, 0]
+>>> d[7] = 'lucky number 7'
+>>> d.keys()
+[1, 9, 0, 7]
+
+# Changing the keys won't do anything, it's only a copy of the keys dict.
+>>> k = d.keys()
+>>> k.remove(9)
+>>> d.keys()
+[1, 9, 0, 7]
+
+# Initialising a SortedDict with two keys will just take the first one. A real
+# dict will actually take the second value so we will too, but we'll keep the
+# ordering from the first key found.
+>>> tuples = ((2, 'two'), (1, 'one'), (2, 'second-two'))
+>>> d = SortedDict(tuples)
+>>> d.keys()
+[2, 1]
+>>> real_dict = dict(tuples)
+>>> real_dict.values()
+['one', 'second-two']
+>>> d.values()
+['second-two', 'one']
+""" \ No newline at end of file
diff --git a/tests/regressiontests/utils/tests.py b/tests/regressiontests/utils/tests.py
index eb3a722888..abcd7212d8 100644
--- a/tests/regressiontests/utils/tests.py
+++ b/tests/regressiontests/utils/tests.py
@@ -6,7 +6,14 @@ from unittest import TestCase
from django.utils import html, checksums
-from timesince import timesince_tests
+import timesince
+import datastructures
+
+# Extra tests
+__test__ = {
+ 'timesince': timesince,
+ 'datastructures': datastructures,
+}
class TestUtilsHtml(TestCase):
@@ -142,10 +149,6 @@ class TestUtilsChecksums(TestCase):
for value, output in items:
self.check_output(f, value, output)
-__test__ = {
- 'timesince_tests': timesince_tests,
-}
-
if __name__ == "__main__":
import doctest
doctest.testmod()
diff --git a/tests/regressiontests/utils/timesince.py b/tests/regressiontests/utils/timesince.py
index 30200be6e9..4f304ec7f7 100644
--- a/tests/regressiontests/utils/timesince.py
+++ b/tests/regressiontests/utils/timesince.py
@@ -1,4 +1,4 @@
-timesince_tests = """
+"""
>>> from datetime import datetime, timedelta
>>> from django.utils.timesince import timesince
diff --git a/tests/regressiontests/views/tests/static.py b/tests/regressiontests/views/tests/static.py
index 0a67cf543e..c731b249e8 100644
--- a/tests/regressiontests/views/tests/static.py
+++ b/tests/regressiontests/views/tests/static.py
@@ -12,4 +12,12 @@ class StaticTests(TestCase):
for filename in media_files:
response = self.client.get('/views/site_media/%s' % filename)
file = open(path.join(media_dir, filename))
- self.assertEquals(file.read(), response.content) \ No newline at end of file
+ self.assertEquals(file.read(), response.content)
+
+ def test_copes_with_empty_path_component(self):
+ file_name = 'file.txt'
+ response = self.client.get('/views/site_media//%s' % file_name)
+ file = open(path.join(media_dir, file_name))
+ self.assertEquals(file.read(), response.content)
+
+