From c81b01e060ad80a5c4df579a96ff737df2d336b3 Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Fri, 30 Nov 2007 06:23:24 +0000 Subject: [PATCH] newforms-admin: Merged from trunk up to [6775]. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@6777 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- AUTHORS | 4 + README | 1 - django/bin/compile-messages.py | 5 +- django/conf/global_settings.py | 2 + django/conf/locale/en/LC_MESSAGES/django.mo | Bin 627 -> 627 bytes django/conf/locale/en/LC_MESSAGES/django.po | 5407 ++++++++++------- django/conf/locale/en/LC_MESSAGES/djangojs.mo | Bin 367 -> 367 bytes django/conf/locale/en/LC_MESSAGES/djangojs.po | 51 +- django/conf/locale/pl/LC_MESSAGES/django.mo | Bin 44528 -> 50899 bytes django/conf/locale/pl/LC_MESSAGES/django.po | 5057 ++++++++------- django/contrib/admin/media/css/base.css | 4 +- .../media/js/admin/RelatedObjectLookups.js | 14 + django/contrib/admin/options.py | 3 +- .../admin_doc/template_filter_index.html | 2 +- .../admin_doc/template_tag_index.html | 2 +- .../admin/templates/admin_doc/view_index.html | 4 +- .../contrib/admin/templatetags/admin_list.py | 4 +- .../admin/templatetags/admin_modify.py | 2 +- django/contrib/admin/views/main.py | 2 +- django/contrib/comments/models.py | 10 +- django/contrib/comments/tests.py | 13 + django/contrib/formtools/models.py | 1 + django/contrib/formtools/preview.py | 2 +- django/contrib/formtools/test_urls.py | 12 + django/contrib/formtools/tests.py | 93 + django/contrib/localflavor/ca/ca_provinces.py | 2 + django/core/cache/backends/base.py | 11 +- django/core/cache/backends/locmem.py | 7 +- django/core/management/__init__.py | 49 +- django/core/management/base.py | 13 +- django/core/paginator.py | 2 +- django/db/models/base.py | 4 +- django/db/models/fields/__init__.py | 2 +- django/db/models/fields/subclassing.py | 4 +- django/middleware/cache.py | 23 +- django/middleware/gzip.py | 18 +- django/newforms/extras/widgets.py | 3 +- django/newforms/fields.py | 13 +- django/newforms/models.py | 37 +- django/newforms/widgets.py | 25 +- django/template/__init__.py | 22 +- django/template/defaultfilters.py | 5 +- django/template/loader_tags.py | 3 +- django/templatetags/i18n.py | 32 +- django/test/testcases.py | 6 +- django/utils/cache.py | 43 +- django/utils/datastructures.py | 76 +- django/utils/html.py | 19 +- django/utils/safestring.py | 2 - django/utils/translation/trans_null.py | 6 +- django/utils/translation/trans_real.py | 22 +- django/utils/tzinfo.py | 8 +- django/views/debug.py | 12 +- django/views/i18n.py | 8 +- django/views/static.py | 3 +- docs/authentication.txt | 2 +- docs/cache.txt | 34 +- docs/custom_model_fields.txt | 10 +- docs/databases.txt | 70 +- docs/django-admin.txt | 8 +- docs/flatpages.txt | 7 + docs/i18n.txt | 6 +- docs/install.txt | 25 +- docs/middleware.txt | 3 +- docs/model-api.txt | 4 +- docs/modpython.txt | 13 +- docs/newforms.txt | 46 +- docs/release_notes_0.96.txt | 2 +- docs/settings.txt | 12 +- docs/syndication_feeds.txt | 21 +- docs/templates.txt | 40 +- docs/templates_python.txt | 137 +- docs/tutorial01.txt | 2 +- docs/unicode.txt | 2 +- docs/url_dispatch.txt | 2 +- tests/modeltests/field_subclassing/models.py | 10 + tests/modeltests/model_forms/models.py | 73 + tests/modeltests/pagination/models.py | 3 +- tests/regressiontests/cache/tests.py | 30 +- tests/regressiontests/datastructures/tests.py | 12 + tests/regressiontests/dateformat/tests.py | 4 + tests/regressiontests/defaultfilters/tests.py | 2 + tests/regressiontests/forms/error_messages.py | 45 + tests/regressiontests/forms/fields.py | 14 + tests/regressiontests/forms/localflavor/ca.py | 4 + tests/regressiontests/forms/models.py | 4 + tests/regressiontests/forms/widgets.py | 61 + tests/regressiontests/i18n/tests.py | 14 +- tests/regressiontests/templates/filters.py | 44 +- tests/regressiontests/templates/tests.py | 59 +- tests/regressiontests/utils/datastructures.py | 51 + tests/regressiontests/utils/tests.py | 13 +- tests/regressiontests/utils/timesince.py | 2 +- tests/regressiontests/views/tests/static.py | 10 +- 94 files changed, 7495 insertions(+), 4581 deletions(-) create mode 100644 django/contrib/comments/tests.py create mode 100644 django/contrib/formtools/models.py create mode 100644 django/contrib/formtools/test_urls.py create mode 100644 django/contrib/formtools/tests.py create mode 100644 tests/regressiontests/utils/datastructures.py diff --git a/AUTHORS b/AUTHORS index e0e32af258..a690115942 100644 --- a/AUTHORS +++ b/AUTHORS @@ -72,6 +72,7 @@ answer newbie questions, and generally made Django that much better: Jonathan Buchanan Trevor Caira Ricardo Javier Cárdenes Medina + Graham Carlyle Antonio Cavedoni C8E cedric@terramater.net @@ -101,6 +102,7 @@ answer newbie questions, and generally made Django that much better: Alex Dedul deric@monowerks.com Max Derkachev + Rajesh Dhawan Sander Dijkhuis Jordan Dimov dne@mayonnaise.net @@ -189,6 +191,7 @@ answer newbie questions, and generally made Django that much better: krzysiek.pawlik@silvermedia.pl Joseph Kocherhans konrad@gwu.edu + knox kurtiss@meetro.com lakin.wecker@gmail.com Nick Lane @@ -278,6 +281,7 @@ answer newbie questions, and generally made Django that much better: Vinay Sajip David Schein scott@staplefish.com + Ilya Semenov serbaut@gmail.com John Shaffer Pete Shinners diff --git a/README b/README index 084f863a1e..503949041e 100644 --- a/README +++ b/README @@ -34,4 +34,3 @@ To contribute to Django: * Check out http://www.djangoproject.com/community/ for information about getting involved. - diff --git a/django/bin/compile-messages.py b/django/bin/compile-messages.py index 8693022644..0d71413e5a 100755 --- a/django/bin/compile-messages.py +++ b/django/bin/compile-messages.py @@ -11,11 +11,10 @@ except NameError: def compile_messages(locale=None): - basedirs = [os.path.join('conf', 'locale'), 'locale'] + basedirs = (os.path.join('conf', 'locale'), 'locale') if os.environ.get('DJANGO_SETTINGS_MODULE'): from django.conf import settings - if hasattr(settings, 'LOCALE_PATHS'): - basedirs += settings.LOCALE_PATHS + basedirs += settings.LOCALE_PATHS # Gather existing directories. basedirs = set(map(os.path.abspath, filter(os.path.isdir, basedirs))) diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index 994e908caf..2853d6c618 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -90,6 +90,8 @@ LANGUAGES_BIDI = ("he", "ar", "fa") # to load the internationalization machinery. USE_I18N = True +LOCALE_PATHS = () + # Not-necessarily-technical managers of the site. They get broken link # notifications and other various e-mails. MANAGERS = ADMINS diff --git a/django/conf/locale/en/LC_MESSAGES/django.mo b/django/conf/locale/en/LC_MESSAGES/django.mo index 038e794a83aaaea40acfedeedbf3d061df69e654..5bb3059a2cdf97f98edc0f60579e3c68ff569d14 100644 GIT binary patch delta 34 pcmey&@|k5rHY1;*p{|jof}w$xskyF!+2l&bbJOQ%13D5ul 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 \n" "Language-Team: LANGUAGE \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,449 +24,2174 @@ 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 "Swedish" +msgstr "" + +#: conf/global_settings.py:78 +msgid "Tamil" +msgstr "" + +#: conf/global_settings.py:79 +msgid "Telugu" +msgstr "" + +#: conf/global_settings.py:80 +msgid "Turkish" +msgstr "" + +#: conf/global_settings.py:81 +msgid "Ukrainian" +msgstr "" + +#: conf/global_settings.py:82 +msgid "Simplified Chinese" +msgstr "" + +#: conf/global_settings.py:83 msgid "Traditional Chinese" 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" -msgstr "" - -#: utils/dates.py:6 -msgid "Tuesday" -msgstr "" - -#: utils/dates.py:6 -msgid "Wednesday" -msgstr "" - -#: utils/dates.py:6 -msgid "Thursday" -msgstr "" - -#: utils/dates.py:6 -msgid "Friday" -msgstr "" - -#: utils/dates.py:7 -msgid "Saturday" -msgstr "" - -#: utils/dates.py:7 -msgid "Sunday" -msgstr "" - -#: utils/dates.py:14 -msgid "January" -msgstr "" - -#: utils/dates.py:14 -msgid "February" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "March" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "April" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "May" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "June" -msgstr "" - -#: utils/dates.py:15 utils/dates.py:27 -msgid "July" -msgstr "" - -#: utils/dates.py:15 -msgid "August" -msgstr "" - -#: utils/dates.py:15 -msgid "September" -msgstr "" - -#: utils/dates.py:15 -msgid "October" -msgstr "" - -#: utils/dates.py:15 -msgid "November" -msgstr "" - -#: utils/dates.py:16 -msgid "December" -msgstr "" - -#: utils/dates.py:19 -msgid "jan" -msgstr "" - -#: utils/dates.py:19 -msgid "feb" -msgstr "" - -#: utils/dates.py:19 -msgid "mar" -msgstr "" - -#: utils/dates.py:19 -msgid "apr" -msgstr "" - -#: utils/dates.py:19 -msgid "may" -msgstr "" - -#: utils/dates.py:19 -msgid "jun" -msgstr "" - -#: utils/dates.py:20 -msgid "jul" -msgstr "" - -#: utils/dates.py:20 -msgid "aug" -msgstr "" - -#: utils/dates.py:20 -msgid "sep" -msgstr "" - -#: utils/dates.py:20 -msgid "oct" -msgstr "" - -#: utils/dates.py:20 -msgid "nov" -msgstr "" - -#: utils/dates.py:20 -msgid "dec" -msgstr "" - -#: utils/dates.py:27 -msgid "Jan." -msgstr "" - -#: utils/dates.py:27 -msgid "Feb." -msgstr "" - -#: utils/dates.py:28 -msgid "Aug." -msgstr "" - -#: utils/dates.py:28 -msgid "Sept." -msgstr "" - -#: utils/dates.py:28 -msgid "Oct." -msgstr "" - -#: utils/dates.py:28 -msgid "Nov." -msgstr "" - -#: utils/dates.py:28 -msgid "Dec." -msgstr "" - -#: utils/dateformat.py:40 -msgid "p.m." -msgstr "" - -#: utils/dateformat.py:41 -msgid "a.m." -msgstr "" - -#: utils/dateformat.py:46 -msgid "PM" -msgstr "" - -#: utils/dateformat.py:47 -msgid "AM" -msgstr "" - -#: utils/dateformat.py:95 -msgid "midnight" -msgstr "" - -#: utils/dateformat.py:97 -msgid "noon" -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" - -#: utils/translation/trans_real.py:376 -msgid "YEAR_MONTH_FORMAT" -msgstr "F Y" - -#: utils/translation/trans_real.py:377 -msgid "MONTH_DAY_FORMAT" -msgstr "F j" - -#: oldforms/__init__.py:392 +#: contrib/admin/filterspecs.py:44 #, 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:397 -msgid "Line breaks are not allowed here." +msgid "" +"

By %s:

\n" +"
    \n" msgstr "" -#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610 -#, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92 +#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173 +msgid "All" msgstr "" -#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:150 -#: newforms/widgets.py:174 -msgid "Unknown" +#: contrib/admin/filterspecs.py:113 +msgid "Any date" msgstr "" -#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143 -#: newforms/widgets.py:174 +#: contrib/admin/filterspecs.py:114 +msgid "Today" +msgstr "" + +#: contrib/admin/filterspecs.py:117 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:119 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:121 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231 +#: oldforms/__init__.py:592 msgid "Yes" msgstr "" -#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143 -#: newforms/widgets.py:174 +#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231 +#: oldforms/__init__.py:592 msgid "No" 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/filterspecs.py:154 newforms/widgets.py:231 +#: oldforms/__init__.py:592 +msgid "Unknown" msgstr "" -#: oldforms/__init__.py:674 -msgid "The submitted file is empty." +#: contrib/admin/models.py:18 +msgid "action time" msgstr "" -#: oldforms/__init__.py:730 -msgid "Enter a whole number between -32,768 and 32,767." +#: contrib/admin/models.py:21 +msgid "object id" msgstr "" -#: oldforms/__init__.py:740 -msgid "Enter a positive number." +#: contrib/admin/models.py:22 +msgid "object repr" msgstr "" -#: oldforms/__init__.py:750 -msgid "Enter a whole number between 0 and 32,767." +#: contrib/admin/models.py:23 +msgid "action flag" msgstr "" -#: contrib/localflavor/no/forms.py:15 +#: contrib/admin/models.py:24 +msgid "change message" +msgstr "" + +#: contrib/admin/models.py:27 +msgid "log entry" +msgstr "" + +#: contrib/admin/models.py:28 +msgid "log entries" +msgstr "" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +#: 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 "" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "" + +#: 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 "" + +#: contrib/admin/templates/admin/base.html:26 +msgid "Welcome," +msgstr "" + +#: contrib/admin/templates/admin/base.html:28 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: 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 "" + +#: contrib/admin/templates/admin/base.html:30 +#: contrib/comments/templates/comments/form.html:6 +msgid "Log out" +msgstr "" + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:14 +#: contrib/admin/templates/admin/index.html:28 +msgid "Add" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:20 +#: contrib/admin/templates/admin/object_history.html:4 +msgid "History" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:21 +msgid "View on site" +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] "" + +#: contrib/admin/templates/admin/change_form.html:49 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:52 +msgid "Order:" +msgstr "" + +#: contrib/admin/templates/admin/change_list.html:11 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:8 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "" + +#: 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 "" + +#: 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 "" + +#: contrib/admin/templates/admin/delete_confirmation.html:25 +msgid "Yes, I'm sure" +msgstr "" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "" + +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "" + +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "" + +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "" + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "" + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#: contrib/admin/templates/admin/login.html:17 +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +msgid "Username:" +msgstr "" + +#: contrib/admin/templates/admin/login.html:20 +#: contrib/comments/templates/comments/form.html:8 +msgid "Password:" +msgstr "" + +#: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:25 +msgid "Log in" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:17 +msgid "Date/time" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "User" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "Action" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:25 +msgid "DATE_WITH_TIME_FULL" +msgstr "N j, Y, P" + +#: 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/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:33 +msgid "Password" +msgstr "" + +#: 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/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/admin/templates/admin/auth/user/change_password.html:27 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:8 +msgid "" +"\n" +"

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

    \n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:18 +msgid "Documentation for this page" +msgstr "" + +#: 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/admin/templates/admin_doc/bookmarklets.html:21 +msgid "Show object ID" +msgstr "" + +#: 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/admin/templates/admin_doc/bookmarklets.html:24 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:27 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "As above, but opens the admin page in a new window." +msgstr "" + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "" + +#: 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/admin/templates/registration/password_change_done.html:5 +#: contrib/admin/templates/registration/password_change_done.html:9 +msgid "Password change successful" +msgstr "" + +#: contrib/admin/templates/registration/password_change_done.html:11 +msgid "Your password was changed." +msgstr "" + +#: 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/admin/templates/registration/password_change_form.html:16 +msgid "Old password:" +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:18 +msgid "New password:" +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:20 +msgid "Confirm password:" +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:22 +msgid "Change my password" +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" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +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." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +#: contrib/admin/templates/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/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "" + +#: contrib/admin/templatetags/admin_list.py:257 +msgid "All dates" +msgstr "" + +#: 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/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/admin/views/auth.py:31 +msgid "Add user" +msgstr "" + +#: contrib/admin/views/auth.py:58 +msgid "Password changed successfully." +msgstr "" + +#: contrib/admin/views/auth.py:65 +#, python-format +msgid "Change password: %s" +msgstr "" + +#: 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/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/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/admin/views/decorators.py:84 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:86 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50 +#: contrib/admin/views/doc.py:52 +msgid "tag:" +msgstr "" + +#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81 +#: contrib/admin/views/doc.py:83 +msgid "filter:" +msgstr "" + +#: contrib/admin/views/doc.py:137 contrib/admin/views/doc.py:139 +#: contrib/admin/views/doc.py:141 +msgid "view:" +msgstr "" + +#: contrib/admin/views/doc.py:166 +#, python-format +msgid "App %r not found" +msgstr "" + +#: contrib/admin/views/doc.py:173 +#, python-format +msgid "Model %(name)r not found in app %(label)r" +msgstr "" + +#: contrib/admin/views/doc.py:185 +#, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "" + +#: 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/admin/views/doc.py:216 +#, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "" + +#: contrib/admin/views/doc.py:221 +#, python-format +msgid "all %s" +msgstr "" + +#: contrib/admin/views/doc.py:226 +#, python-format +msgid "number of %s" +msgstr "" + +#: contrib/admin/views/doc.py:231 +#, python-format +msgid "Fields on %s objects" +msgstr "" + +#: 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/admin/views/doc.py:294 +msgid "Boolean (Either True or False)" +msgstr "" + +#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:314 +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +#: contrib/admin/views/doc.py:296 +msgid "Comma-separated integers" +msgstr "" + +#: contrib/admin/views/doc.py:297 +msgid "Date (without time)" +msgstr "" + +#: contrib/admin/views/doc.py:298 +msgid "Date (with time)" +msgstr "" + +#: contrib/admin/views/doc.py:299 +msgid "Decimal number" +msgstr "" + +#: contrib/admin/views/doc.py:300 +msgid "E-mail address" +msgstr "" + +#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:305 +msgid "File path" +msgstr "" + +#: contrib/admin/views/doc.py:303 +msgid "Floating point number" +msgstr "" + +#: contrib/admin/views/doc.py:307 contrib/comments/models.py:85 +msgid "IP address" +msgstr "" + +#: contrib/admin/views/doc.py:309 +msgid "Boolean (Either True, False or None)" +msgstr "" + +#: contrib/admin/views/doc.py:310 +msgid "Relation to parent model" +msgstr "" + +#: contrib/admin/views/doc.py:311 +msgid "Phone number" +msgstr "" + +#: contrib/admin/views/doc.py:316 +msgid "Text" +msgstr "" + +#: contrib/admin/views/doc.py:317 +msgid "Time" +msgstr "" + +#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "" + +#: contrib/admin/views/doc.py:319 +msgid "U.S. state (two uppercase letters)" +msgstr "" + +#: contrib/admin/views/doc.py:320 +msgid "XML text" +msgstr "" + +#: contrib/admin/views/doc.py:346 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" + +#: contrib/admin/views/main.py:233 +msgid "Site administration" +msgstr "" + +#: contrib/admin/views/main.py:280 contrib/admin/views/main.py:365 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:298 +#, python-format +msgid "Add %s" +msgstr "" + +#: contrib/admin/views/main.py:344 +#, python-format +msgid "Added %s." +msgstr "" + +#: 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/admin/views/main.py:346 +#, python-format +msgid "Changed %s." +msgstr "" + +#: contrib/admin/views/main.py:348 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:351 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:354 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:362 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:400 +#, python-format +msgid "Change %s" +msgstr "" + +#: contrib/admin/views/main.py:487 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:492 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:524 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:527 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:549 +#, python-format +msgid "Change history: %s" +msgstr "" + +#: contrib/admin/views/main.py:583 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:583 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:784 +msgid "Database error" +msgstr "" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "" + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "" + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "" + +#: 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/auth/forms.py:107 +#, python-format +msgid "Password reset on %s" +msgstr "" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "" + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +#: contrib/auth/models.py:73 contrib/auth/models.py:93 +msgid "name" +msgstr "" + +#: contrib/auth/models.py:75 +msgid "codename" +msgstr "" + +#: contrib/auth/models.py:78 +msgid "permission" +msgstr "" + +#: contrib/auth/models.py:79 contrib/auth/models.py:94 +msgid "permissions" +msgstr "" + +#: contrib/auth/models.py:97 +msgid "group" +msgstr "" + +#: contrib/auth/models.py:98 contrib/auth/models.py:141 +msgid "groups" +msgstr "" + +#: contrib/auth/models.py:131 +msgid "username" +msgstr "" + +#: contrib/auth/models.py:131 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" + +#: contrib/auth/models.py:132 +msgid "first name" +msgstr "" + +#: contrib/auth/models.py:133 +msgid "last name" +msgstr "" + +#: contrib/auth/models.py:134 +msgid "e-mail address" +msgstr "" + +#: contrib/auth/models.py:135 +msgid "password" +msgstr "" + +#: contrib/auth/models.py:135 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" + +#: contrib/auth/models.py:136 +msgid "staff status" +msgstr "" + +#: 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 "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" + +#: contrib/auth/models.py:138 +msgid "superuser status" +msgstr "" + +#: contrib/auth/models.py:138 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +#: contrib/auth/models.py:139 +msgid "last login" +msgstr "" + +#: contrib/auth/models.py:140 +msgid "date joined" +msgstr "" + +#: contrib/auth/models.py:142 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" + +#: contrib/auth/models.py:143 +msgid "user permissions" +msgstr "" + +#: contrib/auth/models.py:147 +msgid "user" +msgstr "" + +#: contrib/auth/models.py:148 +msgid "users" +msgstr "" + +#: contrib/auth/models.py:154 +msgid "Personal info" +msgstr "" + +#: contrib/auth/models.py:155 +msgid "Permissions" +msgstr "" + +#: contrib/auth/models.py:156 +msgid "Important dates" +msgstr "" + +#: contrib/auth/models.py:157 +msgid "Groups" +msgstr "" + +#: contrib/auth/models.py:316 +msgid "message" +msgstr "" + +#: contrib/auth/views.py:47 +msgid "Logged out" +msgstr "" + +#: contrib/comments/models.py:67 contrib/comments/models.py:169 +msgid "object ID" +msgstr "" + +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "" + +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:170 +msgid "comment" +msgstr "" + +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "" + +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "" + +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "" + +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "" + +#: contrib/comments/models.py:83 contrib/comments/models.py:172 +msgid "date/time submitted" +msgstr "" + +#: contrib/comments/models.py:84 contrib/comments/models.py:173 +msgid "is public" +msgstr "" + +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "" + +#: contrib/comments/models.py:86 +msgid "" +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." +msgstr "" + +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "" + +#: contrib/comments/models.py:134 contrib/comments/models.py:213 +msgid "Content object" +msgstr "" + +#: contrib/comments/models.py:162 +#, python-format +msgid "" +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" +msgstr "" + +#: contrib/comments/models.py:171 +msgid "person's name" +msgstr "" + +#: contrib/comments/models.py:174 +msgid "ip address" +msgstr "" + +#: contrib/comments/models.py:176 +msgid "approved by staff" +msgstr "" + +#: contrib/comments/models.py:179 +msgid "free comment" +msgstr "" + +#: contrib/comments/models.py:180 +msgid "free comments" +msgstr "" + +#: contrib/comments/models.py:239 +msgid "score" +msgstr "" + +#: contrib/comments/models.py:240 +msgid "score date" +msgstr "" + +#: contrib/comments/models.py:243 +msgid "karma score" +msgstr "" + +#: contrib/comments/models.py:244 +msgid "karma scores" +msgstr "" + +#: contrib/comments/models.py:248 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "" + +#: contrib/comments/models.py:264 +#, python-format +msgid "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" + +#: contrib/comments/models.py:271 +msgid "flag date" +msgstr "" + +#: contrib/comments/models.py:274 +msgid "user flag" +msgstr "" + +#: contrib/comments/models.py:275 +msgid "user flags" +msgstr "" + +#: contrib/comments/models.py:279 +#, python-format +msgid "Flag by %r" +msgstr "" + +#: contrib/comments/models.py:284 +msgid "deletion date" +msgstr "" + +#: contrib/comments/models.py:286 +msgid "moderator deletion" +msgstr "" + +#: contrib/comments/models.py:287 +msgid "moderator deletions" +msgstr "" + +#: contrib/comments/models.py:291 +#, python-format +msgid "Moderator deletion by %r" +msgstr "" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "" + +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "" + +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "" + +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "" + +#: 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:112 +#, python-format +msgid "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comment:\n" +"\n" +"%(text)s" +msgid_plural "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comments:\n" +"\n" +"%(text)s" +msgstr[0] "" +msgstr[1] "" + +#: contrib/comments/views/comments.py:117 +#, python-format +msgid "" +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" +msgstr "" + +#: contrib/comments/views/comments.py:190 +#: contrib/comments/views/comments.py:283 +msgid "Only POSTs are allowed" +msgstr "" + +#: 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:198 +#: contrib/comments/views/comments.py:289 +msgid "Somebody tampered with the comment form (security violation)" +msgstr "" + +#: 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:259 +#: contrib/comments/views/comments.py:324 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "" + +#: contrib/comments/views/karma.py:21 +msgid "Anonymous users cannot vote" +msgstr "" + +#: contrib/comments/views/karma.py:25 +msgid "Invalid comment ID" +msgstr "" + +#: contrib/comments/views/karma.py:27 +msgid "No voting for yourself" +msgstr "" + +#: contrib/contenttypes/models.py:37 +msgid "python model class name" +msgstr "" + +#: contrib/contenttypes/models.py:40 +msgid "content type" +msgstr "" + +#: contrib/contenttypes/models.py:41 +msgid "content types" +msgstr "" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:20 +msgid "th" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:20 +msgid "st" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:20 +msgid "nd" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:20 +msgid "rd" +msgstr "" + +#: 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/humanize/templatetags/humanize.py:74 +msgid "two" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:74 +msgid "three" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:74 +msgid "four" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:74 +msgid "five" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:74 +msgid "six" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:74 +msgid "seven" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:74 +msgid "eight" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:74 +msgid "nine" +msgstr "" + +#: 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/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 "" +"Select a valid brazilian state. That state is not one of the available " +"states." +msgstr "" + +#: contrib/localflavor/br/forms.py:105 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "" + +#: contrib/localflavor/br/forms.py:115 +msgid "Invalid CPF number." +msgstr "" + +#: contrib/localflavor/br/forms.py:137 +msgid "This field requires at least 14 digits" +msgstr "" + +#: contrib/localflavor/br/forms.py:147 +msgid "Invalid CNPJ number." +msgstr "" + +#: contrib/localflavor/ca/forms.py:19 +msgid "Enter a postal code in the format XXX XXX." +msgstr "" + +#: contrib/localflavor/ca/forms.py:81 +msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXXX format." +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "" + +#: 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/no/forms.py:36 -msgid "Enter a valid Norwegian social security number." +#: contrib/localflavor/ch/forms.py:90 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." 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 +#: contrib/localflavor/cl/forms.py:32 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "" + +#: contrib/localflavor/cl/forms.py:37 +msgid "Enter valid a Chilean RUT" +msgstr "" + +#: 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 "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:5 +msgid "Arava" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:6 +msgid "Albacete" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:7 +msgid "Alacant" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:8 +msgid "Almeria" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:9 +msgid "Avila" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:10 +msgid "Badajoz" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:11 +msgid "Illes Balears" +msgstr "" + +#: 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/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 "" +"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or " +"9XXXXXXXX." +msgstr "" + +#: 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 "" +"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX." +msgstr "" + +#: 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 "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "" + +#: contrib/localflavor/is_/forms.py:31 +msgid "The Icelandic identification number is not valid." +msgstr "" + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "" + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "" + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "" + #: contrib/localflavor/jp/forms.py:21 msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." msgstr "" @@ -731,377 +2384,535 @@ msgstr "" msgid "Okinawa" msgstr "" -#: contrib/localflavor/br/forms.py:18 -msgid "Enter a zip code in the format XXXXX-XXX." +#: contrib/localflavor/nl/forms.py:25 +msgid "Enter a valid postal code" msgstr "" -#: contrib/localflavor/br/forms.py:30 -msgid "Phone numbers must be in XX-XXXX-XXXX format." +#: contrib/localflavor/nl/forms.py:53 +msgid "Enter a valid phone number" msgstr "" -#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:46 -msgid "Enter a valid Finnish social security number." +#: contrib/localflavor/nl/forms.py:76 +msgid "Enter a valid SoFi number" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:4 +msgid "Drente" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:5 +msgid "Flevoland" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:6 +msgid "Friesland" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:7 +msgid "Gelderland" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:8 +msgid "Groningen" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:9 +msgid "Limburg" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:10 +msgid "Noord-Brabant" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:11 +msgid "Noord-Holland" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:12 +msgid "Overijssel" +msgstr "" + +#: 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 "" +"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX." +msgstr "" + +#: contrib/localflavor/pl/forms.py:78 +msgid "Wrong checksum for the Tax Number (NIP)." +msgstr "" + +#: contrib/localflavor/pl/forms.py:107 +msgid "National Business Register Number (REGON) consists of 7 or 9 digits." +msgstr "" + +#: contrib/localflavor/pl/forms.py:113 +msgid "Wrong checksum for the National Business Register Number (REGON)." +msgstr "" + +#: contrib/localflavor/pl/forms.py:148 +msgid "Enter a postal code in the format XX-XXX." +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:8 +msgid "Lower Silesia" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:9 +msgid "Kuyavia-Pomerania" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:10 +msgid "Lublin" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:11 +msgid "Lubusz" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:12 +msgid "Lodz" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:13 +msgid "Lesser Poland" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:14 +msgid "Masovia" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:15 +msgid "Opole" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:16 +msgid "Subcarpatia" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:17 +msgid "Podlasie" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:18 +msgid "Pomerania" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:19 +msgid "Silesia" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:20 +msgid "Swietokrzyskie" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:21 +msgid "Warmia-Masuria" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:22 +msgid "Greater Poland" +msgstr "" + +#: contrib/localflavor/pl/pl_voivodeships.py:23 +msgid "West Pomerania" +msgstr "" + +#: contrib/localflavor/sk/forms.py:32 +msgid "Enter a postal code in the format XXXXX or XXX XX." +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:8 +msgid "Banska Bystrica" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:9 +msgid "Banska Stiavnica" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:10 +msgid "Bardejov" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:11 +msgid "Banovce nad Bebravou" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:12 +msgid "Brezno" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:13 +msgid "Bratislava I" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:14 +msgid "Bratislava II" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:15 +msgid "Bratislava III" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:16 +msgid "Bratislava IV" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:17 +msgid "Bratislava V" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:18 +msgid "Bytca" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:19 +msgid "Cadca" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:20 +msgid "Detva" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:21 +msgid "Dolny Kubin" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:22 +msgid "Dunajska Streda" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:23 +msgid "Galanta" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:24 +msgid "Gelnica" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:25 +msgid "Hlohovec" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:26 +msgid "Humenne" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:27 +msgid "Ilava" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:28 +msgid "Kezmarok" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:29 +msgid "Komarno" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:30 +msgid "Kosice I" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:31 +msgid "Kosice II" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:32 +msgid "Kosice III" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:33 +msgid "Kosice IV" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:34 +msgid "Kosice - okolie" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:35 +msgid "Krupina" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:36 +msgid "Kysucke Nove Mesto" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:37 +msgid "Levice" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:38 +msgid "Levoca" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:39 +msgid "Liptovsky Mikulas" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:40 +msgid "Lucenec" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:41 +msgid "Malacky" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:42 +msgid "Martin" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:43 +msgid "Medzilaborce" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:44 +msgid "Michalovce" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:45 +msgid "Myjava" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:46 +msgid "Namestovo" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:47 +msgid "Nitra" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:48 +msgid "Nove Mesto nad Vahom" +msgstr "" + +#: 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/de/forms.py:63 -msgid "" -"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " -"format" -msgstr "" - -#: 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/usa/forms.py:18 +#: contrib/localflavor/us/forms.py:18 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." msgstr "" -#: contrib/localflavor/usa/forms.py:51 +#: contrib/localflavor/us/forms.py:51 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." msgstr "" -#: contrib/sessions/models.py:68 -msgid "session key" -msgstr "" - -#: contrib/sessions/models.py:69 -msgid "session data" -msgstr "" - -#: contrib/sessions/models.py:70 -msgid "expire date" -msgstr "" - -#: contrib/sessions/models.py:74 -msgid "session" -msgstr "" - -#: contrib/sessions/models.py:75 -msgid "sessions" -msgstr "" - -#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 -msgid "The two password fields didn't match." -msgstr "" - -#: contrib/auth/forms.py:25 -msgid "A user with that username already exists." -msgstr "" - -#: contrib/auth/forms.py:53 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -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." -msgstr "" - -#: contrib/auth/forms.py:62 -msgid "This account is inactive." -msgstr "" - -#: contrib/auth/forms.py:85 -msgid "" -"That e-mail address doesn't have an associated user account. Are you sure " -"you've registered?" -msgstr "" - -#: contrib/auth/forms.py:117 -msgid "The two 'new password' fields didn't match." -msgstr "" - -#: contrib/auth/forms.py:124 -msgid "Your old password was entered incorrectly. Please enter it again." -msgstr "" - -#: contrib/auth/views.py:39 -msgid "Logged out" -msgstr "" - -#: contrib/auth/models.py:38 contrib/auth/models.py:57 -msgid "name" -msgstr "" - -#: contrib/auth/models.py:40 -msgid "codename" -msgstr "" - -#: contrib/auth/models.py:42 -msgid "permission" -msgstr "" - -#: contrib/auth/models.py:43 contrib/auth/models.py:58 -msgid "permissions" -msgstr "" - -#: contrib/auth/models.py:60 -msgid "group" -msgstr "" - -#: contrib/auth/models.py:61 contrib/auth/models.py:100 -msgid "groups" -msgstr "" - -#: contrib/auth/models.py:90 -msgid "username" -msgstr "" - -#: contrib/auth/models.py:90 -msgid "" -"Required. 30 characters or fewer. Alphanumeric characters only (letters, " -"digits and underscores)." -msgstr "" - -#: contrib/auth/models.py:91 -msgid "first name" -msgstr "" - -#: contrib/auth/models.py:92 -msgid "last name" -msgstr "" - -#: contrib/auth/models.py:93 -msgid "e-mail address" -msgstr "" - -#: contrib/auth/models.py:94 -msgid "password" -msgstr "" - -#: contrib/auth/models.py:94 -msgid "" -"Use '[algo]$[salt]$[hexdigest]' or use the change " -"password form." -msgstr "" - -#: contrib/auth/models.py:95 -msgid "staff status" -msgstr "" - -#: contrib/auth/models.py:95 -msgid "Designates whether the user can log into this admin site." -msgstr "" - -#: contrib/auth/models.py:96 -msgid "active" -msgstr "" - -#: contrib/auth/models.py:96 -msgid "" -"Designates whether this user can log into the Django admin. Unselect this " -"instead of deleting accounts." -msgstr "" - -#: contrib/auth/models.py:97 -msgid "superuser status" -msgstr "" - -#: contrib/auth/models.py:97 -msgid "" -"Designates that this user has all permissions without explicitly assigning " -"them." -msgstr "" - -#: contrib/auth/models.py:98 -msgid "last login" -msgstr "" - -#: contrib/auth/models.py:99 -msgid "date joined" -msgstr "" - -#: contrib/auth/models.py:101 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." -msgstr "" - -#: contrib/auth/models.py:102 -msgid "user permissions" -msgstr "" - -#: contrib/auth/models.py:105 -msgid "user" -msgstr "" - -#: contrib/auth/models.py:106 -msgid "users" -msgstr "" - -#: contrib/auth/models.py:111 -msgid "Personal info" -msgstr "" - -#: contrib/auth/models.py:112 -msgid "Permissions" -msgstr "" - -#: contrib/auth/models.py:113 -msgid "Important dates" -msgstr "" - -#: contrib/auth/models.py:114 -msgid "Groups" -msgstr "" - -#: contrib/auth/models.py:258 -msgid "message" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "th" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "st" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "nd" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "rd" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:47 -#, python-format -msgid "%(value).1f million" -msgid_plural "%(value).1f million" -msgstr[0] "" -msgstr[1] "" - -#: contrib/humanize/templatetags/humanize.py:50 -#, python-format -msgid "%(value).1f billion" -msgid_plural "%(value).1f billion" -msgstr[0] "" -msgstr[1] "" - -#: contrib/humanize/templatetags/humanize.py:53 -#, python-format -msgid "%(value).1f trillion" -msgid_plural "%(value).1f trillion" -msgstr[0] "" -msgstr[1] "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "one" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "two" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "three" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "four" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "five" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "six" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "seven" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "eight" -msgstr "" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "nine" -msgstr "" - -#: contrib/contenttypes/models.py:36 -msgid "python model class name" -msgstr "" - -#: contrib/contenttypes/models.py:39 -msgid "content type" -msgstr "" - -#: contrib/contenttypes/models.py:40 -msgid "content types" -msgstr "" - #: contrib/redirects/models.py:7 msgid "redirect from" msgstr "" @@ -1130,1237 +2941,817 @@ msgstr "" msgid "redirects" msgstr "" -#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315 -msgid "URL" +#: contrib/sessions/models.py:80 +msgid "session key" msgstr "" -#: contrib/flatpages/models.py:8 -msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +#: contrib/sessions/models.py:81 +msgid "session data" msgstr "" -#: contrib/flatpages/models.py:9 -msgid "title" +#: contrib/sessions/models.py:82 +msgid "expire date" msgstr "" -#: contrib/flatpages/models.py:10 -msgid "content" +#: contrib/sessions/models.py:87 +msgid "session" msgstr "" -#: contrib/flatpages/models.py:11 -msgid "enable comments" +#: contrib/sessions/models.py:88 +msgid "sessions" msgstr "" -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "" - -#: 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/flatpages/models.py:14 -msgid "registration required" -msgstr "" - -#: contrib/flatpages/models.py:14 -msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "" - -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "" - -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "" - -#: contrib/comments/models.py:67 contrib/comments/models.py:166 -msgid "object ID" -msgstr "" - -#: contrib/comments/models.py:68 -msgid "headline" -msgstr "" - -#: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 -msgid "comment" -msgstr "" - -#: contrib/comments/models.py:70 -msgid "rating #1" -msgstr "" - -#: contrib/comments/models.py:71 -msgid "rating #2" -msgstr "" - -#: contrib/comments/models.py:72 -msgid "rating #3" -msgstr "" - -#: contrib/comments/models.py:73 -msgid "rating #4" -msgstr "" - -#: contrib/comments/models.py:74 -msgid "rating #5" -msgstr "" - -#: contrib/comments/models.py:75 -msgid "rating #6" -msgstr "" - -#: contrib/comments/models.py:76 -msgid "rating #7" -msgstr "" - -#: contrib/comments/models.py:77 -msgid "rating #8" -msgstr "" - -#: contrib/comments/models.py:82 -msgid "is valid rating" -msgstr "" - -#: contrib/comments/models.py:83 contrib/comments/models.py:169 -msgid "date/time submitted" -msgstr "" - -#: contrib/comments/models.py:84 contrib/comments/models.py:170 -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 "" - -#: contrib/comments/models.py:86 -msgid "" -"Check this box if the comment is inappropriate. A \"This comment has been " -"removed\" message will be displayed instead." -msgstr "" - -#: contrib/comments/models.py:91 -msgid "comments" -msgstr "" - -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "" - -#: contrib/comments/models.py:159 -#, python-format -msgid "" -"Posted by %(user)s at %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" -msgstr "" - -#: contrib/comments/models.py:168 -msgid "person's name" -msgstr "" - -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "" - -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "" - -#: contrib/comments/models.py:176 -msgid "free comment" -msgstr "" - -#: contrib/comments/models.py:177 -msgid "free comments" -msgstr "" - -#: contrib/comments/models.py:233 -msgid "score" -msgstr "" - -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "" - -#: contrib/comments/models.py:237 -msgid "karma score" -msgstr "" - -#: contrib/comments/models.py:238 -msgid "karma scores" -msgstr "" - -#: contrib/comments/models.py:242 -#, python-format -msgid "%(score)d rating by %(user)s" -msgstr "" - -#: contrib/comments/models.py:258 -#, python-format -msgid "" -"This comment was flagged by %(user)s:\n" -"\n" -"%(text)s" -msgstr "" - -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "" - -#: contrib/comments/models.py:268 -msgid "user flag" -msgstr "" - -#: contrib/comments/models.py:269 -msgid "user flags" -msgstr "" - -#: contrib/comments/models.py:273 -#, python-format -msgid "Flag by %r" -msgstr "" - -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "" - -#: contrib/comments/models.py:280 -msgid "moderator deletion" -msgstr "" - -#: contrib/comments/models.py:281 -msgid "moderator deletions" -msgstr "" - -#: contrib/comments/models.py:285 -#, 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 "" - -#: contrib/comments/templates/comments/form.html:12 -msgid "Ratings" -msgstr "" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "" - -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "" - -#: contrib/comments/templates/comments/form.html:28 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "" - -#: contrib/comments/templates/comments/form.html:35 -#: contrib/comments/templates/comments/freeform.html:10 -msgid "Preview comment" -msgstr "" - -#: contrib/comments/templates/comments/freeform.html:4 -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 -msgid "" -"This rating is required because you've entered at least one other rating." -msgstr "" - -#: contrib/comments/views/comments.py:111 -#, python-format -msgid "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comment:\n" -"\n" -"%(text)s" -msgid_plural "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comments:\n" -"\n" -"%(text)s" -msgstr[0] "" -msgstr[1] "" - -#: contrib/comments/views/comments.py:116 -#, python-format -msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" -msgstr "" - -#: contrib/comments/views/comments.py:188 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "" - -#: contrib/comments/views/comments.py:192 -#: contrib/comments/views/comments.py:284 -msgid "One or more of the required fields wasn't submitted" -msgstr "" - -#: contrib/comments/views/comments.py:196 -#: contrib/comments/views/comments.py:286 -msgid "Somebody tampered with the comment form (security violation)" -msgstr "" - -#: contrib/comments/views/comments.py:206 -#: contrib/comments/views/comments.py:292 -msgid "" -"The comment form had an invalid 'target' parameter -- the object ID was " -"invalid" -msgstr "" - -#: contrib/comments/views/comments.py:257 -#: contrib/comments/views/comments.py:321 -msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "" - -#: contrib/sites/models.py:10 +#: contrib/sites/models.py:32 msgid "domain name" msgstr "" -#: contrib/sites/models.py:11 +#: contrib/sites/models.py:33 msgid "display name" msgstr "" -#: contrib/sites/models.py:15 +#: contrib/sites/models.py:37 msgid "site" msgstr "" -#: contrib/sites/models.py:16 +#: contrib/sites/models.py:38 msgid "sites" msgstr "" -#: contrib/admin/filterspecs.py:40 -#, python-format +#: core/validators.py:72 +msgid "This value must contain only letters, numbers and underscores." +msgstr "" + +#: core/validators.py:76 msgid "" -"

    By %s:

    \n" -"
      \n" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." msgstr "" -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 -msgid "All" +#: core/validators.py:80 +msgid "This value must contain only letters, numbers, underscores or hyphens." msgstr "" -#: contrib/admin/filterspecs.py:109 -msgid "Any date" +#: core/validators.py:84 +msgid "Uppercase letters are not allowed here." msgstr "" -#: contrib/admin/filterspecs.py:110 -msgid "Today" +#: core/validators.py:88 +msgid "Lowercase letters are not allowed here." msgstr "" -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" +#: core/validators.py:95 +msgid "Enter only digits separated by commas." msgstr "" -#: contrib/admin/filterspecs.py:115 -msgid "This month" +#: core/validators.py:107 +msgid "Enter valid e-mail addresses separated by commas." msgstr "" -#: contrib/admin/filterspecs.py:117 -msgid "This year" +#: core/validators.py:111 +msgid "Please enter a valid IP address." msgstr "" -#: contrib/admin/models.py:16 -msgid "action time" +#: core/validators.py:115 +msgid "Empty values are not allowed here." msgstr "" -#: contrib/admin/models.py:19 -msgid "object id" +#: core/validators.py:119 +msgid "Non-numeric characters aren't allowed here." msgstr "" -#: contrib/admin/models.py:20 -msgid "object repr" +#: core/validators.py:123 +msgid "This value can't be comprised solely of digits." msgstr "" -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "" - -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "" - -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "" - -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "" - -#: contrib/admin/templatetags/admin_list.py:247 -msgid "All dates" -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" -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" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -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" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

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

      \n" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 -msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 -msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:3 -#: contrib/admin/templates/admin/delete_confirmation.html:9 -msgid "Delete" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "" - -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "" - -#: 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 "" - -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(filter_title)s " -msgstr "" - -#: contrib/admin/templates/admin/filters.html:4 -msgid "Filter" -msgstr "" - -#: contrib/admin/templates/admin/invalid_setup.html:8 -msgid "" -"Something's wrong with your database installation. Make sure the appropriate " -"database tables have been created, and make sure the database is readable by " -"the appropriate user." -msgstr "" - -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "1 result" -msgid_plural "%(counter)s results" -msgstr[0] "" -msgstr[1] "" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "%(full_result_count)s total" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:21 -msgid "History" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "N j, Y, P" - -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" - -#: contrib/admin/templates/admin/delete_confirmation.html:14 -#, 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 "" - -#: contrib/admin/templates/admin/delete_confirmation.html:21 -#, 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 "" - -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "" - -#: contrib/admin/templates/admin/pagination.html:10 -msgid "Show all" -msgstr "" - -#: contrib/admin/templates/admin/change_list.html:12 -#, python-format -msgid "Add %(name)s" -msgstr "" - -#: contrib/admin/templates/admin/change_form.html:15 -#: contrib/admin/templates/admin/index.html:28 -msgid "Add" -msgstr "" - -#: contrib/admin/templates/admin/change_form.html:22 -msgid "View on site" -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/admin/templates/admin/change_form.html:50 -msgid "Ordering" -msgstr "" - -#: contrib/admin/templates/admin/change_form.html:53 -msgid "Order:" -msgstr "" - -#: contrib/admin/templates/admin/base.html:25 -msgid "Welcome," -msgstr "" - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "" - -#: contrib/admin/templates/admin/login.html:25 -#: contrib/admin/views/decorators.py:24 -msgid "Log in" -msgstr "" - -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "" - -#: contrib/admin/templates/admin/index.html:18 -#, python-format -msgid "%(name)s" -msgstr "" - -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "" - -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "" - -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "" - -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "" - -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "" - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "" - -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:6 -msgid "" -"First, enter a username and password. Then, you'll be able to edit more user " -"options." -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:12 -msgid "Username" -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:18 -#: contrib/admin/templates/admin/auth/user/change_password.html:34 -msgid "Password" -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:23 -#: contrib/admin/templates/admin/auth/user/change_password.html:39 -msgid "Password (again)" -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." -msgstr "" - -#: contrib/admin/templates/admin/auth/user/change_password.html:28 -#, python-format -msgid "Enter a new password for the user %(username)s." -msgstr "" - -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "" - -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "" - -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "" - -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "" - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "" - -#: contrib/admin/templates/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/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -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." -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" -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." -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "" - -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "" - -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -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." -msgstr "" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "" - -#: contrib/admin/views/main.py:223 -msgid "Site administration" -msgstr "" - -#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19 -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -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." -msgstr "" - -#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 -#, python-format -msgid "You may add another %s below." -msgstr "" - -#: contrib/admin/views/main.py:289 -#, python-format -msgid "Add %s" -msgstr "" - -#: contrib/admin/views/main.py:335 -#, python-format -msgid "Added %s." -msgstr "" - -#: contrib/admin/views/main.py:337 -#, python-format -msgid "Changed %s." -msgstr "" - -#: contrib/admin/views/main.py:339 -#, python-format -msgid "Deleted %s." -msgstr "" - -#: contrib/admin/views/main.py:342 -msgid "No fields changed." -msgstr "" - -#: contrib/admin/views/main.py:345 -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "" - -#: contrib/admin/views/main.py:353 -#, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "" - -#: contrib/admin/views/main.py:391 -#, python-format -msgid "Change %s" -msgstr "" - -#: contrib/admin/views/main.py:476 -#, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "" - -#: contrib/admin/views/main.py:481 -#, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "" - -#: contrib/admin/views/main.py:514 -#, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "" - -#: contrib/admin/views/main.py:517 -msgid "Are you sure?" -msgstr "" - -#: contrib/admin/views/main.py:539 -#, python-format -msgid "Change history: %s" -msgstr "" - -#: contrib/admin/views/main.py:573 -#, python-format -msgid "Select %s" -msgstr "" - -#: contrib/admin/views/main.py:573 -#, python-format -msgid "Select %s to change" -msgstr "" - -#: contrib/admin/views/main.py:768 -msgid "Database error" -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." -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." -msgstr "" - -#: contrib/admin/views/decorators.py:83 -msgid "Usernames cannot contain the '@' character." -msgstr "" - -#: contrib/admin/views/decorators.py:85 -#, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "" - -#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 -#: contrib/admin/views/doc.py:50 -msgid "tag:" -msgstr "" - -#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 -#: contrib/admin/views/doc.py:81 -msgid "filter:" -msgstr "" - -#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 -#: contrib/admin/views/doc.py:139 -msgid "view:" -msgstr "" - -#: contrib/admin/views/doc.py:164 -#, python-format -msgid "App %r not found" -msgstr "" - -#: contrib/admin/views/doc.py:171 -#, python-format -msgid "Model %(name)r not found in app %(label)r" -msgstr "" - -#: contrib/admin/views/doc.py:183 -#, python-format -msgid "the related `%(label)s.%(type)s` object" -msgstr "" - -#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 -#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 -msgid "model:" -msgstr "" - -#: contrib/admin/views/doc.py:214 -#, python-format -msgid "related `%(label)s.%(name)s` objects" -msgstr "" - -#: contrib/admin/views/doc.py:219 -#, python-format -msgid "all %s" -msgstr "" - -#: contrib/admin/views/doc.py:224 -#, python-format -msgid "number of %s" -msgstr "" - -#: contrib/admin/views/doc.py:229 -#, python-format -msgid "Fields on %s objects" -msgstr "" - -#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 -#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 -#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 -msgid "Integer" -msgstr "" - -#: contrib/admin/views/doc.py:292 -msgid "Boolean (Either True or False)" -msgstr "" - -#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 -#, python-format -msgid "String (up to %(maxlength)s)" -msgstr "" - -#: contrib/admin/views/doc.py:294 -msgid "Comma-separated integers" -msgstr "" - -#: contrib/admin/views/doc.py:295 -msgid "Date (without time)" -msgstr "" - -#: contrib/admin/views/doc.py:296 -msgid "Date (with time)" -msgstr "" - -#: contrib/admin/views/doc.py:297 -msgid "E-mail address" -msgstr "" - -#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 -#: contrib/admin/views/doc.py:302 -msgid "File path" -msgstr "" - -#: contrib/admin/views/doc.py:300 -msgid "Decimal number" -msgstr "" - -#: contrib/admin/views/doc.py:306 -msgid "Boolean (Either True, False or None)" -msgstr "" - -#: contrib/admin/views/doc.py:307 -msgid "Relation to parent model" -msgstr "" - -#: contrib/admin/views/doc.py:308 -msgid "Phone number" -msgstr "" - -#: contrib/admin/views/doc.py:313 -msgid "Text" -msgstr "" - -#: contrib/admin/views/doc.py:314 -msgid "Time" -msgstr "" - -#: contrib/admin/views/doc.py:316 -msgid "U.S. state (two uppercase letters)" -msgstr "" - -#: contrib/admin/views/doc.py:317 -msgid "XML text" -msgstr "" - -#: contrib/admin/views/doc.py:343 -#, python-format -msgid "%s does not appear to be a urlpattern object" -msgstr "" - -#: contrib/admin/views/auth.py:30 -msgid "Add user" -msgstr "" - -#: contrib/admin/views/auth.py:57 -msgid "Password changed successfully." -msgstr "" - -#: contrib/admin/views/auth.py:64 -#, python-format -msgid "Change password: %s" -msgstr "" - -#: newforms/fields.py:103 newforms/fields.py:256 -#, python-format -msgid "Ensure this value has at most %d characters." -msgstr "" - -#: newforms/fields.py:105 newforms/fields.py:258 -#, python-format -msgid "Ensure this value has at least %d characters." -msgstr "" - -#: newforms/fields.py:128 core/validators.py:120 +#: 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:147 +msgid "Year must be 1900 or later." +msgstr "" + +#: core/validators.py:151 +#, python-format +msgid "Invalid date: %s" +msgstr "" + +#: 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: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:200 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "" + +#: core/validators.py:204 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" + +#: core/validators.py:212 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "" + +#: core/validators.py:216 +msgid "A valid URL is required." +msgstr "" + +#: core/validators.py:230 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" + +#: core/validators.py:237 +#, python-format +msgid "Badly formed XML: %s" +msgstr "" + +#: core/validators.py:254 +#, python-format +msgid "Invalid URL: %s" +msgstr "" + +#: core/validators.py:259 core/validators.py:261 +#, python-format +msgid "The URL %s is a broken link." +msgstr "" + +#: core/validators.py:267 +msgid "Enter a valid U.S. state abbreviation." +msgstr "" + +#: 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:288 +#, python-format +msgid "This field must match the '%s' field." +msgstr "" + +#: core/validators.py:307 +msgid "Please enter something for at least one field." +msgstr "" + +#: core/validators.py:316 core/validators.py:327 +msgid "Please enter both fields or leave them both empty." +msgstr "" + +#: core/validators.py:335 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "" + +#: core/validators.py:348 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "" + +#: core/validators.py:367 +msgid "Duplicate values are not allowed." +msgstr "" + +#: core/validators.py:382 +#, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "" + +#: core/validators.py:384 +#, python-format +msgid "This value must be at least %s." +msgstr "" + +#: core/validators.py:386 +#, python-format +msgid "This value must be no more than %s." +msgstr "" + +#: core/validators.py:427 +#, python-format +msgid "This value must be a power of %s." +msgstr "" + +#: core/validators.py:437 +msgid "Please enter a valid decimal number." +msgstr "" + +#: core/validators.py:444 +#, python-format +msgid "Please enter a valid decimal number with at most %s total digit." +msgid_plural "" +"Please enter a valid decimal number with at most %s total digits." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:447 +#, python-format +msgid "" +"Please enter a valid decimal number with a whole part of at most %s digit." +msgid_plural "" +"Please enter a valid decimal number with a whole part of at most %s digits." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:450 +#, python-format +msgid "Please enter a valid decimal number with at most %s decimal place." +msgid_plural "" +"Please enter a valid decimal number with at most %s decimal places." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py: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:468 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "" + +#: core/validators.py:485 +msgid "The format for this field is wrong." +msgstr "" + +#: core/validators.py:500 +msgid "This field is invalid." +msgstr "" + +#: core/validators.py:536 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "" + +#: core/validators.py:539 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" + +#: 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: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:581 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" + +#: 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: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: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:132 +#: 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:165 +#: 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:192 +#: newforms/fields.py:301 newforms/fields.py:725 msgid "Enter a valid time." msgstr "" -#: newforms/fields.py:228 +#: newforms/fields.py:340 msgid "Enter a valid date/time." msgstr "" -#: newforms/fields.py:242 -msgid "Enter a valid value." +#: newforms/fields.py:439 +msgid "No file was submitted." msgstr "" -#: newforms/fields.py:271 core/validators.py:162 -msgid "Enter a valid e-mail address." +#: newforms/fields.py:440 oldforms/__init__.py:689 +msgid "The submitted file is empty." msgstr "" -#: newforms/fields.py:289 newforms/fields.py:311 +#: newforms/fields.py:498 msgid "Enter a valid URL." msgstr "" -#: newforms/fields.py:313 +#: newforms/fields.py:499 msgid "This URL appears to be a broken link." msgstr "" -#: newforms/fields.py:362 newforms/models.py:165 +#: 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:380 newforms/fields.py:456 newforms/models.py:182 +#: 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:389 newforms/models.py:188 +#: 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 "" -#: template/defaultfilters.py:491 +#: 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." @@ -2375,271 +3766,3 @@ msgstr "" #, python-format msgid "The %(verbose_name)s was deleted." msgstr "" - -#: core/validators.py:64 -msgid "This value must contain only letters, numbers and underscores." -msgstr "" - -#: core/validators.py:68 -msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." -msgstr "" - -#: core/validators.py:72 -msgid "This value must contain only letters, numbers, underscores or hyphens." -msgstr "" - -#: core/validators.py:76 -msgid "Uppercase letters are not allowed here." -msgstr "" - -#: core/validators.py:80 -msgid "Lowercase letters are not allowed here." -msgstr "" - -#: core/validators.py:87 -msgid "Enter only digits separated by commas." -msgstr "" - -#: core/validators.py:99 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "" - -#: core/validators.py:103 -msgid "Please enter a valid IP address." -msgstr "" - -#: core/validators.py:107 -msgid "Empty values are not allowed here." -msgstr "" - -#: core/validators.py:111 -msgid "Non-numeric characters aren't allowed here." -msgstr "" - -#: core/validators.py:115 -msgid "This value can't be comprised solely of digits." -msgstr "" - -#: core/validators.py:124 -msgid "Only alphabetical characters are allowed here." -msgstr "" - -#: core/validators.py:139 -msgid "Year must be 1900 or later." -msgstr "" - -#: core/validators.py:143 -#, python-format -msgid "Invalid date: %s" -msgstr "" - -#: core/validators.py:153 -msgid "Enter a valid time in HH:MM format." -msgstr "" - -#: core/validators.py:178 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." -msgstr "" - -#: core/validators.py:185 -#, python-format -msgid "The URL %s does not point to a valid image." -msgstr "" - -#: core/validators.py:189 -#, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." -msgstr "" - -#: core/validators.py:197 -#, python-format -msgid "The URL %s does not point to a valid QuickTime video." -msgstr "" - -#: core/validators.py:201 -msgid "A valid URL is required." -msgstr "" - -#: core/validators.py:215 -#, python-format -msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" -msgstr "" - -#: core/validators.py:222 -#, python-format -msgid "Badly formed XML: %s" -msgstr "" - -#: core/validators.py:239 -#, python-format -msgid "Invalid URL: %s" -msgstr "" - -#: core/validators.py:244 core/validators.py:246 -#, python-format -msgid "The URL %s is a broken link." -msgstr "" - -#: core/validators.py:252 -msgid "Enter a valid U.S. state abbreviation." -msgstr "" - -#: core/validators.py:266 -#, 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 -#, python-format -msgid "This field must match the '%s' field." -msgstr "" - -#: core/validators.py:292 -msgid "Please enter something for at least one field." -msgstr "" - -#: core/validators.py:301 core/validators.py:312 -msgid "Please enter both fields or leave them both empty." -msgstr "" - -#: core/validators.py:320 -#, python-format -msgid "This field must be given if %(field)s is %(value)s" -msgstr "" - -#: core/validators.py:333 -#, python-format -msgid "This field must be given if %(field)s is not %(value)s" -msgstr "" - -#: core/validators.py:352 -msgid "Duplicate values are not allowed." -msgstr "" - -#: core/validators.py:367 -#, python-format -msgid "This value must be between %(lower)s and %(upper)s." -msgstr "" - -#: core/validators.py:369 -#, python-format -msgid "This value must be at least %s." -msgstr "" - -#: core/validators.py:371 -#, python-format -msgid "This value must be no more than %s." -msgstr "" - -#: core/validators.py:407 -#, python-format -msgid "This value must be a power of %s." -msgstr "" - -#: core/validators.py:418 -msgid "Please enter a valid decimal number." -msgstr "" - -#: core/validators.py:422 -#, python-format -msgid "Please enter a valid decimal number with at most %s total digit." -msgid_plural "" -"Please enter a valid decimal number with at most %s total digits." -msgstr[0] "" -msgstr[1] "" - -#: core/validators.py:425 -#, python-format -msgid "" -"Please enter a valid decimal number with a whole part of at most %s digit." -msgid_plural "" -"Please enter a valid decimal number with a whole part of at most %s digits." -msgstr[0] "" -msgstr[1] "" - -#: core/validators.py:428 -#, python-format -msgid "Please enter a valid decimal number with at most %s decimal place." -msgid_plural "" -"Please enter a valid decimal number with at most %s decimal places." -msgstr[0] "" -msgstr[1] "" - -#: core/validators.py:438 -#, python-format -msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "" - -#: core/validators.py:439 -#, python-format -msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "" - -#: core/validators.py:456 -msgid "The format for this field is wrong." -msgstr "" - -#: core/validators.py:471 -msgid "This field is invalid." -msgstr "" - -#: core/validators.py:507 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "" - -#: core/validators.py:510 -#, python-format -msgid "" -"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "" - -#: core/validators.py:543 -#, python-format -msgid "" -"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " -"\"%(start)s\".)" -msgstr "" - -#: core/validators.py:547 -#, 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 -#, python-format -msgid "" -"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" -"(start)s\".)" -msgstr "" - -#: core/validators.py:557 -#, python-format -msgid "" -"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" -"(start)s\".)" -msgstr "" - -#: core/validators.py:561 -#, 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 -#, python-format -msgid "" -"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " -"starts with \"%(start)s\".)" -msgstr "" diff --git a/django/conf/locale/en/LC_MESSAGES/djangojs.mo b/django/conf/locale/en/LC_MESSAGES/djangojs.mo index b51ec1c7026963f4ab75e0f0e0b42a1a55077fe7..41cc5b54c031661dd8e9b9daa94107b58b0076d8 100644 GIT binary patch delta 34 qcmaFQ^qy%#mw>shp`oskrGlY>m8pfUf!V}a>zG4B+$MW7ssI4E8VU3O delta 34 qcmaFQ^qy%#mw>6Rp^>hErGlZMm8qe&f#Jki>zGSR(k6Q|ssI4FVG2Y5 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 \n" "Language-Team: LANGUAGE \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 -msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" -msgstr "" - #: contrib/admin/media/js/calendar.js:25 msgid "S M T W T F S" msgstr "" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80 +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "" + +#: 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: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/conf/locale/pl/LC_MESSAGES/django.mo b/django/conf/locale/pl/LC_MESSAGES/django.mo index 798f8d72c45349cdb8a7770a5fed4c9f19e6a17e..b5ed35225d245408eca4adde1e14c5cf08106495 100644 GIT binary patch delta 17733 zcmb8$2Yggj!uRnzBtYoJAcT79AS4hV(o5(N2%!nmC&`dZ%1oF^2#LZ-M+HQ#s32kk z8w#w06+{$bUDmbW>Z%KNUCY{bRn}df-+%52W_|T}_Pw7y`JQv`x#ymG=jh|}<(su$ z*%BA|OY`_07FT{P%W8`YF0ib$ILq4IO}Um;(%-VK^H|n0Y(ctCnq|$xwm1!!VHox32!GB|2>@m=_uW=CeRz=tXi%|_; zYtpx3HtB~@^&}0ltX4P%>6^6x>)>Lff7ViL$os7VbE6#9gH>1$H=+t&YtlPVJ-r20 z?g%!;lUN&1qh9bPuEck-5iS|*jz|DC5^FFXAHq7k-#S91IX;Dncp5bVe>HxMs`wl> zM9&b*YLAVv3npU&oPlciB2@W&lMbTlt1$ViP5vf~=*8QK$bHxZA3@FGv#1B(LcQR9 zEX6Oe75avn5yNJrH)3PliE7y0=Kd+HPx>{~NWFu4&qqTUe^vY)8ESFdFt>vGsG&_l zHRK{x&qkmsn1~v}Ow?4&M7?+cs-8kry&*h+t1t_bhg%kdXsyCLd}KJ|uf=4KaC>ku zYR)ENYrF*8;4uAJe ze1qf27&6MTQt=8*!3S_IzJqGekaWvxiL;R`s~FXQ1E?uEhFWBQLhXVEqZvI+!+y8~ z^hUSm2z-Du(VE~^Gz&+O3}9zG zh^p@u)Nc9+_56?67ZWGCBQg$KX#bZG>B5Z-s0Qpu4c!^+iuLGjckF}Ra1N^6DpXG% zKn>~dQBxN;*|IV)4U2I##^c{G0l&pT_%BT4{no{lu7?>|2WMklT!6DN7wh9=sKr`^ z8lg9FIev?Ju8?_*!w@RH997Rs)Qi`f{H<7v^bU+@72imtHr{0l+>d(jut^^^o-p~( zBhziYjOtm-scr|_q8i%Gq*HMM>7l4ax)xWWgQ~w-CgZO;O3HNSECm~p9*ue+3pK<` zjFraguqXKkP>bqy)c4|3RK-7{8WumzP1i$>Kr>W+Yh;619i}nL`l`;SJ5sG_H_JHCpl z;74QJbhl^qQ5Cd7Ew*l`56VJRLmkwMcB0n6ZK&O|4>eLJFd08bt(`XPX_bo%Afguz zLcL%lj>XBS7hHpCU=?c7yn@Z~HM|f%L47wgj7kr~UP@wPjF|kbs71aHHBtwWDT!Ez zO~&J>9z2D5;q%xHU&j>u3HxKpEcZp(sQe1l2;7aD;{&J;J#5m)Pz`?u)u881{u|g- z`~O`cO}Oz5>H`zUo@~Oun)BcqNt%ij{GcG zU*M&fde?f;EL=HRoaxv@#uI2hU5);zo(@5Bu_d@hFwJc(U!0<~$#i?AQwh#Hv} za4nw0jks!_W#wR<`R+&+U_?U|CZZly8rPv(z7@yeO{fui2i3!`P$TmLs=)~h+zLCQ zm-I#03^$`jZjZSiMLmDiq)#qj{Iv>CnT(fEi{sCz2hU&G{9T-Y9T&NuUO#psefuKDUyG-T3{~_3s)eVq4Ze*Ui62m_zRqH| zr%9+0=!AMzSx3h z%JFz1mSYNT#g6#6NuR+~(v5T7=SN{0>CM;+pTf5I1rEUmKKGv+#$#vg|LcjUz+4*wTaw;}+8uY}#rP(6 z)&6hpclY}s?8J>Zs41w#Zg?XO#3xWa{|@z~Oe%0sI$dxQ>6OS1wVpvWtV5x@J*T0b zE5-JBJ$Aqcu|My(P7~44)+>q~iL61$&{$s7+^xs)coMbP8Wg*WX&%Or&Nbh6oY0Xb(2S+fDkg@ex!{ zkD^B41=Li%YSM3+^at3G{LfK6JBNC4La96FiKyp$px&2?Di=v3q6f#I9>_wyZ~nkE2HHSyZ{dA@7Y?-x5(vJZ0_+o1liM z1**kuQ7`Cf?2CHAP?H{qYG4+sVM~m;#(Y%AiclS0fvRsk*3HA2ss{MS(pK8wxqBfJ35p57FauR?kue)p;ZoF)`cVxGpn6!2dTtGBgtwx;gu7AoAI69x$4thv#+Qw689y|B zX*`E|aeTS^!n&vzG)29zJ*wV|umujlE;t#rrh=#jmX$O9>d_TsXo%OLMqo3lqMfK7 z?L$3y0M*mOCjBVt`6o~fI)QrrX>5wGpvu3GYTzfRa^GQhJXg;6tKv>8TzeQ(P%j>U zdckm1Md_%XjYst$3-zM;sPaXq`pS%#p~|f`Zbmim22?$JBSaqb&@()Oxs~pR$iCeD z@QlC(6x@ya@%RDtqE;*2Mb;7fkxs*lFdsXhgUJ}hk@yY{!;Y(57okQxa+8VNVcd_Z zAc~s1SFjI$g8KPQV#N5$#(udpgnLQr)B1bV2z`tifzOTKpmxg-sD>w8;qH=V$OuHN zE<|)A1yyh$_QLU~p$cIaj9_fYP%S@z#rP0v|94sK9!3YC8a5SUQ-ON!GEBtv*baAL zUG4uzOo8L5ef+#hzk~xwzlkHU=^A$tWuX@5BGd~CP;*>j@-IWxvk~>;t*Gz9ji^Pq z-}opt%L$ss-m5!k-87t;t|vczK(kFJI0Su4gDLc zq5nj^$Ft6@ryfT1qtn)8q@Y@yj(Q*i<8ivlzXVl&3F>|b)!-F)H?GH7n6lm-v9;(Y zeF8P~$s61Tk48PWcmv~qA(0|7w20Q40=J-Ae$*6v7BzIIu@kQgYLN|PcvR6`)ULP&^@5YAhW!Oq?gt!=7hdarXf8$FzaBf|?@-U5#va=L^|!nG zyFY3O=i)^eG2V-+_%x>B*Qg45IBY>&hygr`@!0D+*S@G8reQOjjm8zI45~w)qIy2>26y`vq1MJ~ zY>GQDqMqJKL_>Alc-Cm$=>E9acp>*^Vj>oxdLBUy`9@TOHlrG}1J(0eP;2N;%)&2F zVX_=jd|w&8XQUbPSjL=Xztg!*`0!psO{Sg z)uFK_f2v8(KrOoYsP}kL4T=Pa^dfRO_Q$(%7`}xqFlmqbMeKvBcsi;F^Nc=Y3991D zP|s~bjo2R4BHV|1;lrpYt3swCV!cMB2^l|P5;nZW{T=UyT4W$8S-Da z!#x2V-s}244j?~qpSvh0VJ*rp$DZU@-06NV?m#WFAFvL_-Q}k1qdJm^O?kg%6Pb*u zs3E=_YvX!U&#y*}%r0~PFwQ6aIBGj4-RS<`3y60a&fMxdr-n#rGy8p=f`--n$^7ov^V z;2b=JIhb(3ePI!5ac;*{d^bX*2a&{s?k9FQ_8~nByWl#Lz6Z5E-@qx@=#cw8n1^Yk zcVS2TBc|imI2Q-}&VBI~)EbInH#~)!^2oPD<`HS~fP1njKo#7A$#@s0;Azx%AwJ45 zvf9&8Q+L&2cRSsU`i-c<3HTPyz%CEEBU6qYNZ*9&*b!{6{ePB7FEW0@QP}Gt_xxUj znwsk{h_~THZ1%A0JnTvO4(yGmP*ZRYRbTr@Tqol|(#tUm51N!{0g;7$3NzNk~2|jVuo=(YE|c=)`lNdK8RYx<*03UHEOMFHTQR*K0r5Poc8}? zMC#)))C-=&YuMs1sO*a_`p?rs@_s%I){=%<_XN>s;I<3+d` z_58!AseAhv^FM@0-6z~dI2x6{88!E>qgLw&I2IcocNfug)cs|sDOiOXnYE}FUW1y7 zU8r)mBWu<=h>h@fsOO$I9&sZl$xu(9Lp|^o*27Ow6@G(y!N0Ky)_>CdF0@8XK`(5E zBe5|~M~%o5RQX&~{iUe-HyW>t5Yghf%@nu`TakVY)xuX$Q}a5i+!>Sp0M)S1uql3L zOnAy&?MbNTrlT4#7ga7FRZoR65+S0B*5ie^4K??7p?Y=*H4-PW1^xlmv-gc3qbmFi z^@6WaFOECmK3^YIUwc%Cx?>#ncGD57ugOS54e?;q1LIH)$V63`ZSQDID8V-u_{yt{)lS8pH2Eq>^}4VNi4$ukqNb3enJ&YJn2@LgmI)hpysYKszH5G z4IXG5W1NO+(0o)!Rv1?suQEE4_glM7#y;Z#pFfUz(F^FoGX8WYoFrr`gZEoDP5lRn285Obo#n!W-2`1ZgbtK>mh=y? zoS*-!Gi8*MM|?iEMlIZL3H{CeyKxs`KY6-FQQst-5g~IW;U6U4!z#jR!g4}O3TcIp zAg(Ku(1Ea>(3`vk+~16UAk8_$+CrQqV9mi5gedXq>jKIalBbK=uzqLaT7T9Tgujt- ziolPawHL1F;*E^T zU$6033;w1Q*BNg9=tiyEOu>s#2aZWp(uSaGDAp!iOwbmqzDAIqL!vL`r(%23n@l~! zO`$7DCy+mcFiLOtlJR%KI~2$vvz;k8jJUR$u36mwH$fNY5UU6A%kc*+F!>!Ruj@yX z{s0>j=90II@B;D22?L3rKwUR#{sV+>2+Q0&YcTOw2-Vk1L^hDVlQ4~!gh@X@&{mvD zsJ`@_ufDcYwt~bcOfn7YMf?DHFPlP@7@L1>JzdumE~U@{T!y;3xWxY6!C!}p`+n;~5-ZJ6|bOb$#R#`+E_UXPfkOcnRTJ!k;L+itsYwV?q+a^j{J8i`J0L&cp}d zS$u)ei3*#Mt`mE}{ZA^$w#rGj<=$(=&nb?p2v-m?Npr}FUHO#x<#iYLpCZK79I_-z z{fo@jxF2=BN7zZcJeIPoCB)|ut~B?bC4U?*cn%K}{z7~;+{_w{ z@sl5$|Hn*$0t%NBe~oY{1uw%8VKVV2@sHf^Zz@Wi zAg*gZ<^D-pzk2%!TL`mBpP&EdNt`Bptvs$b2{*)I{5r-8@?D^k2g&=Mu!*pm(2Ben zgg1!y!U>ceV#Xv6u&!lBw%E7i%4k zG4a#JoyL1iWm(3@$ba9&FQKl3q>qrUPyFx1ZzlYnFqXVQLMo5dr_{GCA!XGGKm;2MPzq$82Y(=^=!9)1c!&TGA7+56>(j+(&#i>gvF~Lxj7D-$Qs_nOuDc z%_&oxdp<%p;v)%>p8UxoJWb|Wg09ho<*^v2BJNElp2NM#gdN2HP576&e*%XQe$Tzd zCQl4Ebq&N>r1Pjp*Lbw?eZmIyzY!51nO{(F3UOUu5zdmniQqL4W@930U7d+fCBB%D zVDg%h_lTxUm<%M0xbYN)GfaFI4NE8f0eQOmnufk(?%zsYGxD}!Z~Tb-$B8#4o{DWrA40B(wbVQm zZ){=I-D~uR>n*}VHS+Hyola#J5_E+KU5KXitSw zG`;WTp6Cmy37#gtK=Pb2U#PUySDft&e3H?+f{C zFCh@Li-TC2?+rL58Htf`fpD3d{;gtm*RY-I&-0gt?QGvt_hFx%>&x*MdyDLnpg&NW zV*P(r;}6)S!BTG#k2wPdwQ|}Is@t_ku|Lo=*UriJhP*kYzEIfi;V-rGyA(ixLbVk+_`g! zbdR^)NYDBzLYzSU#z?7mh3!^iFZKJ1a_t_Old^i+>O{WJWaO1IT zjSqdYz4mhEGuIw7d(tdb;6B82ikR2NQu<@6c3KQ?YLD>-yt&M%Ju{f&XVfQY*1Uln zCe-a-lS!?dzYJ~S^c%7!E^GM!=cQq-oam6t>y7uD64CZU-}6LD@`HiuXMWM9nzz(8 z6$~z|(Z{fTadq2z+k>j3YW3ji#4r0<5)3oVc1|$Y7kk^#pNF8vt?HqqLwT&yKyLM* z_D!W?JK0X_htaQwZSpuhN3@RyM}%u#P^2Xu$aB}9+ehcjsNGGh@gaY%w}Sr|*XJ+F z^Es>1Tc&t5_F2Iqs#<q%7`wJwvhyhU2jELCepuvqgNux6BnnW%s@)9Vez7Vk`Nsncg##s%(l zy0e;`9-w=r&WdR%ZL+I>6m0fgsV~KzmCv^+7IzL!Yu7y%3#V8!eMP>U((|9Aocy3a zhtgepu(Hd1J)MKoMnn%xyV6rTwo;-4rtk9%T5P_;;hxsavg{mhsD$=a}( z{dHT|B6`h&v!43ato*VN+urYW3K#W@?p$=Yr(vj=-7wY52a()mOWHV>F8MNI&GF^3 z^t3YP_=<8E^xlflIxXX$*RVAw6yz)NAA4D!_5XSer~GOS88xf;)fN2f&+*tS?~3Y0 z9{Zt5i7xWqAMeC1-BK$Uie9ty8Be32x>XwFhdjg{o|T_puOhZL$##z9XEaVtO-@a- zQ`3g@8`P_Bs*~s+)@d?7{)P6uJRY@&6)2HXsl=$fVz0j_g#n6|`m<_BUk)7eME8|k z;7J_qW#cijbNnH5G+}rjUS_xSme)9(FvHcylQYZKcBwv|urPE$sVMRn#7b~PA*ZZr zjgBaJA+IN4VlY(h%_;Opp9xE(uloa$|pU`~lWjaf&c{Isl85Hn4S`zY>2P#Y*u@lOFRC4~C$4NzP zto{H>7ITT;dAG88n?fB_Dm3Z7yr5l{?W-*D`*JF^lAKSkOmg;Cws794xT4*h5|*wv zx9YK7TwT%3%JQFFU#dfg*T<9>`klvD zx9c~Dqhw*QBv_=O(y4?SP*zg$AEy#;Z2xdDDey+WTz$|J(ZpDpe&6}|3g!k_t^t4H z5Pr~V-0|9+TD*2)Fi;u_76rWS;pOKi|DXG@Bh3GLpMy-l|D`}|8p>jC^xFC{<+za- zOmXg8`_nL;VDu%39b&51#iC^e-tur^P$!w7Zu+dM)xlC9d43KbRcoq8$2qnxrC!zQ z6VcpC3OS#yyP@6KSdV6U3&TO3fRtnqicYRqHO}hw-J5fq;d8G_iIv5&?^?gPcV&d0o?;tkg2ohdHFre4N%X34I7s7gH1HI(och!!>Pdnj;Mt>1wJb? zw%KAQ89Q89wZ_Y*Ri7-olCw-~ec9~F5J#C^KYGUh+E+k}r^Zy)+*R84 zu}{J;jzb+cXGNd5`s-Rwug$INYbR7zlyk(3?%VpQr1X=(3DKdphW`vO&O z3if36W*uF%=H$*?J}kfZ&X~_YY-3peN1@oJNcp)`(y!OWFIx19eI0Ap_6N#JE1X;I leK?K{7M;ESdr!kkKWF3utDua}oRe|?zJ&6e${=gR`XByv82kVL delta 12517 zcmZwN2Y405`p5A-sX#~wB=nNdOE8qs6ogPhuc1pbBmokV97r*QcIX1qWTiLh9h5_p zA}B@i0-_+OTtGljQ3S<`qW|wNJ3Np7`?$~Z@|kyLcV>2Wb`Nsz#ksx@uljhd7xPf%X+c4WxeLItOP7h{>w9#)e8$pTUIwrz_R!z7Qk~DhLg5cWSorEEz4uAb_&*MtjUSrV<48Q>lkUQfko62G8ZcrHKBCW#HX74bsS2* zAJt#!dh~^@k^8a+VgL?7U&gnFQ7BABs%gkY-N{5Oh%cirzH0JCs5@SR!FU*T{uvC# zkI^4*qXzm0C*VWW`5E<{6&jB*jBhQV;D;ws7o5RxyntGXJE#fX#|rout6*u?RTFHE zIO`QSaFqV8ZR>K>pXCKgvRm9R*17lE2KM;A!mS+?N zO<)7+4v(T{coi$-Bh&>YpLaH86skQIdBd!JSPN&NmV7U2Z+w6n-~rae%FUe#cR@`s z3u*UQ%PDAv=TR&0HEIbXT3A*m?1AaH3bi+aVx7Gaima+t8pAOjwU>sY_R46~BN~If zaT02?UPj&UO?*l3|6>aI7qoO7gW7x^lg~sS^7*Jeve48oHLgJov8^fPMd3$=DOV+GVRjYhpjEm7ykqXvAz$5 zFx=FSLgrxQU{5??>VueV{`((FK`T%S)nNoy#OkKL1L_0R-Lwxv-BB`T;V7(*U!o>f zm>sP4@~B5z19?NOA?S~b&=*(4vHsc|YpBp}KZANUzoI4-+Sci)BnFdLLLaP)T8S8B zqg!pU1Wv&yT!wm$PoW;cCG^AVsFk^G^6%QR{<`BIsL%kvV>JwH=e)ns7(+e?HNdN; zehaFjD;R)ZnEWf$1RtU%@W|Brw0Bk}2=!elhh?y~he8Dk?NApCL%j_-sF}}4eesqV zH=-u`ChCzKL#^CdYE+h&8d$-U0B29by3gqS=3w79JOLSQ7e^>nn)h%?U{;NnI*{6ur6a0 ztk7Mba-M%*3jS1#MO`=vHQ;P4iwm(Z?m}(4!>9?L#}K@N%-OnY+8g$825yg9nSrQ& z6HzOcj(k+Dk8ro%|B!fRz_+m+`DxUJw@v*$)Sdl^n&@Aq-H(@9D-ndc!%)V^X` z6^Gz^7>(6?IbYO1SeJYqdQ`YbLA%?J@1#yFi+cY%nmi5bk*`3uhjk7cV(C84>(&i5 z@o~uSlC>0BW$PkV#>(tKwYS44Ov0+TpfBsM&9~oFJm1fGmWjw1)B7qJ2QvbFbM z6V#o4izP7N1?NYpJk}>~h>dUrYM?b(4NqZX{0?=4RR*yBg($Qg;QWmCzz*cwkU3dD zp(fCo_0$F9QLpQ2jKHH9gV#_iS9Fl`GaHM#^AyyhnTu`lENZWW4R-d#P!9!drZm*E z%)$K4Xq<#$)XzX|%H_s&Sc!Za`r=Uqu$jx{cNGc{T!zXeFb@c^fsZ=L7{^ zcoy|+E~D<)=S64N*T>=HEl^9h8HeEw)OBqWoQ}GqCf?uVL$E0M2rP?ZQ4?K^!MGe5 z&tq+&P@alQSPp;0)>vdHpIz*UP4P|Cqq>iJmcL<3j7W6$LITzxACJ1jjTnU6jQcTw z{9WT2%>VoU1qzz!rThxsW8*yxq5gZ+QawREf`B9^4?*Q6QQwCM)ScBv4g4JH(X~Zg z{{s4ABI>;1SlB}$hk`Dcf*NohYAIJ?5nONDy{Hb3p$0yIT9N;tA6`a1lB>o$sP+e_ z6?=?+STWg|a5eO3CNUH=U`x~zwL{IgE2@LO#-XSI(oLR=n&1@F#1SnWS+lHIBP0CMRjz`co%i2_fQl15w${ppe9;qnDa?4idyO_sDYZG?lca4 zu%pSl7~@gn^c}|f>w*DPXhtK9nW%}4Hz&?C&Ovp&05zdSs5@GXI)5u_MfYJzJc0R- z#CXT}!1%kz6nuv}Ck7i!8Y`miAPO~LG-`mxr~%_p1N6Y+H~_2QX!OU$s0pq_-SK7& z#OinP)&IChI=T*S!SP|84 z2V*y+KabU$f-dZjx|6}E8IM49oP`B&8mfc2MjLhBGUEo+gm&Wr7yqe-hcP?V`M%Um zbG|2Ck*~G211m7TRWRKdpayCa)kFP=#9=KQgAuqMpTQH@0)N0}STDmd0|Uvo8@7WXi1ElDb-;5H1$@RyvK)_67|Cz_2IO@0G;Lp@f=IH$v0 zjG*By48zZ`G~UNX7&zWpf##?Q^hTY(1S9bP>P|n!2KWo=`lt!c-w)!j9Qljb3MXJQ zz5mC}2~V&x4W%YJ9W=ul9;+(GcsS1|ETfaTR9ZpQybta+2dH zj3Cd!qO@6yC}@*yMs21;sLgjA)xrCy_q*|A=fe?;y~+EaHsKD``TJ2{#J5fT8Pw*! zX#5=2|4q~W6?)Y14-|&uW79BniqlaVsy!Dq&?Jn<*{Dr-4K=}UP`ka~RA=+1q8_0K z^$2V%fjdq6Nz{Zto67oYX>L-Xf$pLPdVrew@7NBlY0l`I}F9&OgI8EvP%&fsOGXK8p`g6RI`CIji-&+!JF6u|MXCZpwR4Pr(q!ak>{fBbiB!@n|wC zUWOWQ6Gq`))a(2OHpB3l&YtOk70HLACN|6HdCe5opgP=!#qj_J;5pQ@y@VR*E^0}C z!m8*$%lU1H!cyc-F%WxU2o6N8=txxmxu$*^@}2NlHid39oW)*PZnpF90Hbjb`9;)g zR__((gVPlYx>#}y$8mG`Ow+z#uJa!*dGnmta4XiP{yO?_UeJ8!w;_bDn%awWzhByG5V>m9yg1FnXzlB=Kca3LIZ^s2J z!}!*h6g2SPSO`NGI-lCI*p55~JK;ENh3{cyEMz--B^otg3~K40$MP75dIX6WhMB0J z@flbY7o(>Og)I~`^IuTUKIk>4!-}YtiNZ8&jLmTazK*v|`?N*Q7jgk=BKuG)a}2d| z@0Sv%{yNlQm!Wo4TThg6^O>>RI>3cwB{AnTHsK z;j1kx7GtqGPR7Ex72UWW+hesgj&7_;eh}5qEmS`NuRGSq#^j#C6uMJbjM`jZp-!x| z)|q)9j3c+P7k-A?WYO!KXWR(&!D@ke)@@Mj9We~!QO|sssZU3}&N=9-_kSS;?fS*2 zO|uq<;x^Qs2CsMaL_^eOoQuV98ESwXsAqW`wbZ|$c6ZDM{=SECsJ(Fu`(m+;&V*9) z_3$B~pn=DrcJE~L#aB=(G2i5eQ4>9eweSP1ia(>4y6h(BU%%o|dt;Kxuc97RiOtR) zs*G*OJ7NUmTk|RCgx%J*u&ievgcpvpiet^2}iP2|^vqFKW^UI)a ztU9W{dZ_-Jp{EFi_7wC1>W5m=6x0$il)6N3aJqz$xR$=udvbwBNx} z$)3eBt*Y9bAdZBe_lFY3Jcs0l1K?VC^?9WWk6^>YIC zR-MNJcn5W3-(x}a+2(xc3U6cmb!U~RkkwEf)u(F%Gr#>8Q;!5p^d^Pg|Vms;!tBZ-(wxs=IM@H%z3)c7w)CF&M(&fn(zf#ky|r(hjZ zr&W53czR4Rg?&#e^!#;{=Ymvok)G8CVlMeoHF8{{+>01Oc@Xi?oNH4qO!-~>9Q8Op zCuR`QGuK7l>C~jQ@m+Pe?+1*c_DkCAEGcS`hCL@6mRY(6P`V|4;qC z*Py;F(Twsylrs4z@Thzi)jc8!% zGmXJ?+KGC-yMu{A)L$g@k_6gbi9T{{|~7C zxRFNvc<7i!G$-EpM@P3Pr&BkP(9wdt81cwSt#x>p{66s&(URCqgb;O!$;1gl$6*hJ zv&0@kzXO%?tDV1$9;E!0$zP^@Ht~S?l=#rp|AGsM9n>AhM%bFrao@rE1}jtd4iRJO zM16A42j=AMScDbOQHJ=A_>8)Eq7mh5#QT(&U^20tc$0hpK0Q7&g`QQF(RCFOm619nMY1A>Fa&hd6Bk+Bq0`VoGV>R_-@GP!sCrhRBi~3S&cfDM zlNd+n_`tz>6T8!%io5U!EPy%+(C6E@jJz9mQ6)z|@@I$`SAO@rV&;N*G#(`?k{88r zT!A_^6GzC8;VL{x6d~@AA0U=f&LVWwCJIu1!Q`r2MeHN@H+AiBrpAArhC0McRFoqY zQ7(yT*avmQ6N!Y&ahIhp8h>c&!6RSg`ch@tr<=PxxX>QygGM40m`uh!k{0qg9y?@oa+2Pck*YNx#l(o z`mp}{DXb-C5XFh-2_5O!hIo-UMLeYLYvO?#&C!(ltCU+2A5#9B_?_}eVlJ_W+?ViD z{us3=&2T!#5li&@uVX&(Qhv$#2ZUmrIf)Z>_~Bk+H1Q2_kNB4Ojwnz22-GnL&tPfd zd&-YY{YS>`)ZZj@eEGCZ<1Zx{MO-0zn1)ZOKTb3yo*w=bHktPPI?6%BU6LyJF=h~R z@*AE1BZG>)iFawAPUuK7j->3FVv=X`oBsbF_x_Q7V#?JyKg?V+5%Z{DM*K>-1|Biz z)iXZjZwf1kJLX!|*L8jd_-}S9ZxTOJ8NkweDPPeU9Jh&1mHzVevZ%9&P zdP-VaN>*~BJ0mH}+oJJASCBg+FWsG!)jKOW(|f2%kgIfBUgR)$W_of`WWO$*pNp)T zWwlDq7@m-pvhcayzGG9;ygASHcX_Wg9qnr$jxAVbL_$_%LUv?Yaza*iWYwg|#1RRZ z35nUsnOXJ^Ey@;4cmGRuxOZV}6_hyGpnZ6Gbcmi z_RLLAQXfePUk7@3q#Sg4XN|n>vUAd-y_?fFxa_&^Qg){MVeyRQES=srIW5tho?Kf6 zuBttHr=NW@XSz4#C8pPW%rJY`n2vU2UP1qQ&qmd)ZwKTxtI{Qfr;!%fdPHVU*4V_c zk+WATe`l~UMlv<;o{7g@;k{2C$;%$;&do>} z*)qeOk&^Dt&GU|)6z;N@PmU;%zaz3nrq~xIPxT+0mzI+1&7G3q^4^>}&ev`+t6<4Q zcVtFFYI;UWa;kR4*o=gcC%n1Q_B+eN)LzPI&&@k^&_WxQJ#>~ndiFC6D%msvEX$;s*2 z+8Ww3d8y3O>Y9?Ao|2qMspr_7kqN2VJj&W-=8VeA-#iIA&->$|-L7DFQil7~3hrB* z-;Q7UcbIn4scGuy)MR&da;|QC?y_k6)Uw5P-tubpp5?E&Qtgx#GweqzO4@x_M%kNI zPWHyF3Sr-@e#5S|rkOWo%^xm1e0?2z-nt5Q@PyXBTJ zd+3&~_L(j9?XFvkcz0~w=<*KOzSC9Z>E?O5kTrEnNn=xz(-OEPHqu!7=(;nhfVaf{ z^Db}EgRwsL;6ru13l3d#d8Zty;R\n" +"Last-Translator: Jarek Zgoda \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: oldforms/__init__.py:357 db/models/fields/__init__.py:117 -#: db/models/fields/__init__.py:274 db/models/fields/__init__.py:612 -#: db/models/fields/__init__.py:623 newforms/models.py:178 -#: newforms/fields.py:80 newforms/fields.py:376 newforms/fields.py:452 -#: newforms/fields.py:463 -msgid "This field is required." -msgstr "To pole jest wymagane." - -#: oldforms/__init__.py:392 -#, python-format -msgid "Ensure your text is less than %s character." -msgid_plural "Ensure your text is less than %s characters." -msgstr[0] "Upewnij się, że tekst ma mniej niż %s znak." -msgstr[1] "Upewnij się, że tekst ma mniej niż %s znaki." -msgstr[2] "Upewnij się, że tekst ma mniej niż %s znaków." - -#: oldforms/__init__.py:397 -msgid "Line breaks are not allowed here." -msgstr "Znaki nowej linii są tutaj niedopuszczalne." - -#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610 -#, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." -msgstr "Wybierz poprawną opcję; '%(data)s' nie jest wśród %(choices)s." - -#: oldforms/__init__.py:577 newforms/widgets.py:180 -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Nieznany" - -#: oldforms/__init__.py:577 newforms/widgets.py:180 -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "Tak" - -#: oldforms/__init__.py:577 newforms/widgets.py:180 -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "Nie" - -#: oldforms/__init__.py:672 core/validators.py:174 core/validators.py:445 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "Nie wysłano żadnego pliku. Sprawdź typ kodowania formularza." - -#: oldforms/__init__.py:674 -msgid "The submitted file is empty." -msgstr "Wysłany plik jest pusty." - -#: oldforms/__init__.py:730 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Proszę wpisać liczbę całkowitą z zakresu od -32 768 do 32 767" - -#: oldforms/__init__.py:740 -msgid "Enter a positive number." -msgstr "Proszę wpisać liczbę dodatnią." - -#: oldforms/__init__.py:750 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Proszę wpisać liczbę całkowitą z zakresu od 0 do 32 767" - -#: db/models/manipulators.py:307 -#, python-format -msgid "%(object)s with this %(type)s already exists for the given %(field)s." -msgstr "%(object)s z %(type)s już istnieje dla %(field)s." - -#: db/models/manipulators.py:308 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 contrib/admin/views/main.py:342 -msgid "and" -msgstr "i" - -#: db/models/fields/__init__.py:42 -#, python-format -msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "Już istnieje %(optname)s z %(fieldname)s." - -#: db/models/fields/__init__.py:369 -msgid "This value must be an integer." -msgstr "Ta wartość musi być liczbą całkowitą." - -#: db/models/fields/__init__.py:404 -msgid "This value must be either True or False." -msgstr "Ta wartość musi być logiczna (True, False - prawda lub fałsz)." - -#: db/models/fields/__init__.py:425 -msgid "This field cannot be null." -msgstr "To pole nie może być puste." - -#: db/models/fields/__init__.py:459 core/validators.py:148 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Proszę wpisać poprawną datę w formacie RRRR-MM-DD." - -#: db/models/fields/__init__.py:528 core/validators.py:157 -msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." -msgstr "Wprowadź poprawną datę i godzinę w formacie RRRR-MM-DD GG:MM." - -#: db/models/fields/__init__.py:632 -msgid "Enter a valid filename." -msgstr "Wpisz poprawną nazwę pliku." - -#: db/models/fields/__init__.py:753 -msgid "This value must be either None, True or False." -msgstr "Ta wartość musi być jedną z None (żadne), True (prawda) lub False (fałsz)." - -#: db/models/fields/related.py:53 -#, python-format -msgid "Please enter a valid %s." -msgstr "Proszę wpisać poprawne %s." - -#: db/models/fields/related.py:642 -msgid "Separate multiple IDs with commas." -msgstr "Oddziel identyfikatory przecinkami." - -#: db/models/fields/related.py:644 -msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" -"Przytrzymaj wciśnięty klawisz \"Ctrl\" lub \"Command\" na Mac'u aby " -"zaznaczyć więcej niż jeden wybór." - -#: 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] "" -"Proszę podać poprawne identyfikatory %(self)s. Wartość %(value)r jest " -"niepoprawna." -msgstr[1] "" -"Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są " -"niepoprawne." -msgstr[2] "" -"Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są " -"niepoprawne." +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%" +"100<10 || n%100>=20) ? 1 : 2);\n" #: conf/global_settings.py:39 msgid "Arabic" @@ -156,635 +25,1225 @@ msgid "Bengali" msgstr "Bengalski" #: conf/global_settings.py:41 +msgid "Bulgarian" +msgstr "Bułgarski" + +#: conf/global_settings.py:42 msgid "Catalan" msgstr "Kataloński" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Czech" msgstr "Czeski" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "Welsh" msgstr "Walijski" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Danish" msgstr "Duński" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "German" msgstr "Niemiecki" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Greek" msgstr "Grecki" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "English" msgstr "Angielski" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Spanish" msgstr "Hiszpański" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Argentinean Spanish" msgstr "Hiszpański argentyński" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 +msgid "Persian" +msgstr "Perski" + +#: conf/global_settings.py:52 msgid "Finnish" msgstr "Fiński" -#: conf/global_settings.py:51 +#: conf/global_settings.py:53 msgid "French" msgstr "Francuski" -#: conf/global_settings.py:52 +#: conf/global_settings.py:54 +msgid "Gaeilge" +msgstr "Gaelicki" + +#: conf/global_settings.py:55 msgid "Galician" msgstr "Galicyjski" -#: conf/global_settings.py:53 +#: conf/global_settings.py:56 msgid "Hungarian" msgstr "Węgierski" -#: conf/global_settings.py:54 +#: conf/global_settings.py:57 msgid "Hebrew" msgstr "Hebrajski" -#: conf/global_settings.py:55 +#: conf/global_settings.py:58 +msgid "Croatian" +msgstr "Horwacki" + +#: conf/global_settings.py:59 msgid "Icelandic" msgstr "Islandzki" -#: conf/global_settings.py:56 +#: conf/global_settings.py:60 msgid "Italian" msgstr "Włoski" -#: conf/global_settings.py:57 +#: conf/global_settings.py:61 msgid "Japanese" msgstr "Japoński" -#: conf/global_settings.py:58 +#: conf/global_settings.py:62 msgid "Korean" msgstr "Koreański" -#: conf/global_settings.py:59 +#: conf/global_settings.py:63 +msgid "Khmer" +msgstr "Khmerski" + +#: conf/global_settings.py:64 msgid "Kannada" msgstr "Kannada" -#: conf/global_settings.py:60 +#: conf/global_settings.py:65 msgid "Latvian" msgstr "Łotewski" -#: conf/global_settings.py:61 +#: conf/global_settings.py:66 msgid "Macedonian" msgstr "Macedoński" -#: conf/global_settings.py:62 +#: conf/global_settings.py:67 msgid "Dutch" msgstr "Holenderski" -#: conf/global_settings.py:63 +#: conf/global_settings.py:68 msgid "Norwegian" msgstr "Norweski" -#: conf/global_settings.py:64 +#: conf/global_settings.py:69 msgid "Polish" msgstr "Polski" -#: conf/global_settings.py:65 +#: conf/global_settings.py:70 msgid "Portugese" msgstr "Portugalski" -#: conf/global_settings.py:66 +#: conf/global_settings.py:71 msgid "Brazilian" msgstr "Brazylijski" -#: conf/global_settings.py:67 +#: conf/global_settings.py:72 msgid "Romanian" msgstr "Rumuński" -#: conf/global_settings.py:68 +#: conf/global_settings.py:73 msgid "Russian" msgstr "Rosyjski" -#: conf/global_settings.py:69 +#: conf/global_settings.py:74 msgid "Slovak" msgstr "Słowacki" -#: conf/global_settings.py:70 +#: conf/global_settings.py:75 msgid "Slovenian" msgstr "Słoweński" -#: conf/global_settings.py:71 +#: conf/global_settings.py:76 msgid "Serbian" msgstr "Serbski" -#: conf/global_settings.py:72 +#: conf/global_settings.py:77 msgid "Swedish" msgstr "Szwedzki" -#: conf/global_settings.py:73 +#: conf/global_settings.py:78 msgid "Tamil" msgstr "Tamilski" -#: conf/global_settings.py:74 +#: conf/global_settings.py:79 msgid "Telugu" msgstr "Telugu" -#: conf/global_settings.py:75 +#: conf/global_settings.py:80 msgid "Turkish" msgstr "Turecki" -#: conf/global_settings.py:76 +#: conf/global_settings.py:81 msgid "Ukrainian" msgstr "Ukraiński" -#: conf/global_settings.py:77 +#: conf/global_settings.py:82 msgid "Simplified Chinese" msgstr "Uproszczony chiński" -#: conf/global_settings.py:78 +#: conf/global_settings.py:83 msgid "Traditional Chinese" msgstr "Chiński tradycyjny" -#: core/validators.py:64 -msgid "This value must contain only letters, numbers and underscores." -msgstr "To pole może zawierać tylko litery, cyfry i podkreślenia." - -#: core/validators.py:68 +#: contrib/admin/filterspecs.py:44 +#, python-format msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." +"

      By %s:

      \n" +"
        \n" msgstr "" -"To pole może zawierać jedynie litery, cyfry, podkreślenia, myślniki i " -"ukośniki." +"

        Przez %s:

        \n" +"
      \n" -#: core/validators.py:72 -msgid "This value must contain only letters, numbers, underscores or hyphens." -msgstr "To pole może zawierać jedynie litery, cyfry, podkreślenia i pauzy." +#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92 +#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173 +msgid "All" +msgstr "Wszystko" -#: core/validators.py:76 -msgid "Uppercase letters are not allowed here." -msgstr "Wielkie litery nie są tutaj dozwolone." +#: contrib/admin/filterspecs.py:113 +msgid "Any date" +msgstr "Dowolna data" -#: core/validators.py:80 -msgid "Lowercase letters are not allowed here." -msgstr "Małe litery nie są tutaj dozwolone." +#: contrib/admin/filterspecs.py:114 +msgid "Today" +msgstr "Dzisiaj" -#: core/validators.py:87 -msgid "Enter only digits separated by commas." -msgstr "Wpisz tylko cyfry odddzielone przecinkami." +#: contrib/admin/filterspecs.py:117 +msgid "Past 7 days" +msgstr "Ostatnie 7 dni" -#: core/validators.py:99 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "Wpisz poprawne adresy e-mail oddzielone przecinkami." +#: contrib/admin/filterspecs.py:119 +msgid "This month" +msgstr "Ten miesiąc" -#: core/validators.py:103 -msgid "Please enter a valid IP address." -msgstr "Proszę wpisać poprawny adres IP." +#: contrib/admin/filterspecs.py:121 +msgid "This year" +msgstr "Ten rok" -#: core/validators.py:107 -msgid "Empty values are not allowed here." -msgstr "Proszę wypełnić te pola." +#: contrib/admin/filterspecs.py:147 newforms/widgets.py:229 +#: oldforms/__init__.py:592 +msgid "Yes" +msgstr "Tak" -#: core/validators.py:111 -msgid "Non-numeric characters aren't allowed here." -msgstr "Tu mogą być tylko cyfry." +#: contrib/admin/filterspecs.py:147 newforms/widgets.py:229 +#: oldforms/__init__.py:592 +msgid "No" +msgstr "Nie" -#: core/validators.py:115 -msgid "This value can't be comprised solely of digits." -msgstr "To pole nie może zawierać jedynie cyfr." +#: contrib/admin/filterspecs.py:154 newforms/widgets.py:229 +#: oldforms/__init__.py:592 +msgid "Unknown" +msgstr "Nieznany" -#: core/validators.py:120 newforms/fields.py:128 -msgid "Enter a whole number." -msgstr "Wpisz liczbę całkowitą." +#: contrib/admin/models.py:18 +msgid "action time" +msgstr "czas akcji" -#: core/validators.py:124 -msgid "Only alphabetical characters are allowed here." -msgstr "Tutaj są dozwolone tylko litery." +#: contrib/admin/models.py:21 +msgid "object id" +msgstr "id obiektu" -#: core/validators.py:139 -msgid "Year must be 1900 or later." -msgstr "Rok nie może być wcześniejszy niż 1900." +#: contrib/admin/models.py:22 +msgid "object repr" +msgstr "reprezentacj obiektu" -#: core/validators.py:143 -#, python-format -msgid "Invalid date: %s" -msgstr "Niepoprawna data: %s" +#: contrib/admin/models.py:23 +msgid "action flag" +msgstr "flaga akcji" -#: core/validators.py:153 -msgid "Enter a valid time in HH:MM format." -msgstr "Proszę wpisać poprawną godzinę w formacie HH:MM." +#: contrib/admin/models.py:24 +msgid "change message" +msgstr "zmień wiadomość" -#: core/validators.py:162 newforms/fields.py:271 -msgid "Enter a valid e-mail address." -msgstr "Wprowadź poprawny adres e-mail." +#: contrib/admin/models.py:27 +msgid "log entry" +msgstr "log" -#: core/validators.py:178 +#: contrib/admin/models.py:28 +msgid "log entries" +msgstr "logi" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Strona nie znaleziona" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Niestety nie można znaleźć rządanej strony." + +#: 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 "Początek" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Błąd serwera" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Bład serwera (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Błąd Serwera (500)" + +#: contrib/admin/templates/admin/500.html:10 msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." +"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 "" -"Wgraj poprawny plik graficzny. Ten, który został wgrany, nie jest obrazem, " -"albo jest uszkodzony." +"Wystąpił niespodziewany błąd. Raport został wysłany emailem administratorowi " +"strony." -#: core/validators.py:185 -#, python-format -msgid "The URL %s does not point to a valid image." -msgstr "Odnośnik %s nie wskazuje na poprawny plik z obrazem." +#: contrib/admin/templates/admin/base.html:26 +msgid "Welcome," +msgstr "Witaj," -#: core/validators.py:189 +#: contrib/admin/templates/admin/base.html:28 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokumentacja" + +#: 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 "Zmiana hasła" + +#: contrib/admin/templates/admin/base.html:30 +#: contrib/comments/templates/comments/form.html:6 +msgid "Log out" +msgstr "Wyloguj się" + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Administracja stroną Django" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administracja Django" + +#: contrib/admin/templates/admin/change_form.html:14 +#: contrib/admin/templates/admin/index.html:28 +msgid "Add" +msgstr "Dodaj" + +#: contrib/admin/templates/admin/change_form.html:20 +#: contrib/admin/templates/admin/object_history.html:4 +msgid "History" +msgstr "Historia" + +#: contrib/admin/templates/admin/change_form.html:21 +msgid "View on site" +msgstr "Pokaż na stronie" + +#: 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] "Proszę popraw poniższy błąd" +msgstr[1] "Proszę popraw poniższe błędy" +msgstr[2] "Proszę popraw poniższe błędy" + +#: contrib/admin/templates/admin/change_form.html:49 +msgid "Ordering" +msgstr "Sortowanie" + +#: contrib/admin/templates/admin/change_form.html:52 +msgid "Order:" +msgstr "Porządek:" + +#: contrib/admin/templates/admin/change_list.html:11 #, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgid "Add %(name)s" +msgstr "Dodaj %(name)s" + +#: contrib/admin/templates/admin/delete_confirmation.html:8 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Usuń" + +#: 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 "" -"Numery telefoniczne muszą być w formacie XXX-XXX-XXXX. \"%s\" jest " -"niepoprawny." +"Skasowanie %(object_name)s '%(escaped_object)s' spowoduje usunięcie " +"zależnych obiektów, lecz nie posiadasz uprawnień do usunięcia następujących " +"typów obiektów:" -#: core/validators.py:197 -#, python-format -msgid "The URL %s does not point to a valid QuickTime video." -msgstr "Odnośnik %s nie wskazuje na poprawne nagranie QuickTime video." - -#: core/validators.py:201 -msgid "A valid URL is required." -msgstr "Wymagany jest poprawny URL." - -#: core/validators.py:215 +#: contrib/admin/templates/admin/delete_confirmation.html:20 #, python-format msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" msgstr "" -"Wymagany jest poprawny HTML. Błędy, które wystąpiły:\n" -"%s" +"Czy chcesz skasować %(object_name)s \"%(escaped_object)s\"? Następujące " +"zależne obiekty zostaną skasowane:" -#: core/validators.py:222 +#: contrib/admin/templates/admin/delete_confirmation.html:25 +msgid "Yes, I'm sure" +msgstr "Tak, usuń" + +#: contrib/admin/templates/admin/filter.html:2 #, python-format -msgid "Badly formed XML: %s" -msgstr "Nieprawidłowy format XML: %s" +msgid " By %(filter_title)s " +msgstr " Używając %(filter_title)s " -#: core/validators.py:239 +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtr" + +#: contrib/admin/templates/admin/index.html:17 #, python-format -msgid "Invalid URL: %s" -msgstr "Niepoprawny odnośnik: %s" +msgid "Models available in the %(name)s application." +msgstr "Modele dostępne w aplikacji %(name)s." -#: core/validators.py:244 core/validators.py:246 +#: contrib/admin/templates/admin/index.html:18 #, python-format -msgid "The URL %s is a broken link." -msgstr "Odnośnik %s jest nieprawidłowy." +msgid "%(name)s" +msgstr "%(name)s" -#: core/validators.py:252 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Wpisz poprawny kod stanu U.S.A." +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Zmień" -#: core/validators.py:266 -#, 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] "Nie wolno przeklinać! Słowo %s nie jest dozwolone." -msgstr[1] "Nie wolno przeklinać! Słowa %s nie są dozwolone." -msgstr[2] "Nie wolno przeklinać! Słowa %s nie są dozwolone." +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "Nie masz uprawnień by edytować cokolwiek" -#: core/validators.py:273 -#, python-format -msgid "This field must match the '%s' field." -msgstr "To pole musi pasować do pola '%s'." +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Ostatnie akcje" -#: core/validators.py:292 -msgid "Please enter something for at least one field." -msgstr "Proszę uzupełnić przynajmniej jedno pole." +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Moje akcje" -#: core/validators.py:301 core/validators.py:312 -msgid "Please enter both fields or leave them both empty." -msgstr "Proszę uzupełnić oba pola lub zostawić je puste." +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Brak" -#: core/validators.py:320 -#, python-format -msgid "This field must be given if %(field)s is %(value)s" -msgstr "To pole musi być uzupełnione, jeśli %(field)s ma wartość %(value)s" - -#: core/validators.py:333 -#, python-format -msgid "This field must be given if %(field)s is not %(value)s" -msgstr "To pole musi być uzupełnione, jeśli %(field)s ma wartość inną niż %(value)s" - -#: core/validators.py:352 -msgid "Duplicate values are not allowed." -msgstr "Duplikaty nie są dozwolone." - -#: core/validators.py:367 -#, python-format -msgid "This value must be between %(lower)s and %(upper)s." -msgstr "Ta wartość musi być pomiędzy %(lower)s a %(upper)s." - -#: core/validators.py:369 -#, python-format -msgid "This value must be at least %s." -msgstr "Ta wartość nie może być mniejsza od %s." - -#: core/validators.py:371 -#, python-format -msgid "This value must be no more than %s." -msgstr "Ta wartość nie może być większa od %s." - -#: core/validators.py:407 -#, python-format -msgid "This value must be a power of %s." -msgstr "Ta wartość musi być potęgą %s." - -#: core/validators.py:418 -msgid "Please enter a valid decimal number." -msgstr "Proszę wpisać poprawną liczbę dziesiętną." - -#: core/validators.py:422 -#, python-format -msgid "Please enter a valid decimal number with at most %s total digit." -msgid_plural "Please enter a valid decimal number with at most %s total digits." -msgstr[0] "Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrze." -msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrach." -msgstr[2] "Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrach." - -#: core/validators.py:425 -#, python-format -msgid "Please enter a valid decimal number with a whole part of at most %s digit." -msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits." -msgstr[0] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfrę." -msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfry." -msgstr[2] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfr." - -#: core/validators.py:428 -#, python-format -msgid "Please enter a valid decimal number with at most %s decimal place." -msgid_plural "Please enter a valid decimal number with at most %s decimal places." -msgstr[0] "" -"Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsca po " -"przecinku." -msgstr[1] "" -"Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsc po " -"przecinku." -msgstr[2] "" -"Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsc po " -"przecinku." - -#: core/validators.py:438 -#, python-format -msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "Upewnij się, że wgrany plik ma conajmniej %s bajtów." - -#: core/validators.py:439 -#, python-format -msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "Upewnij się, że wgrany plik ma co najwyżej %s bajtów." - -#: core/validators.py:456 -msgid "The format for this field is wrong." -msgstr "Format tego pola jest nieprawidłowy." - -#: core/validators.py:471 -msgid "This field is invalid." -msgstr "To pole jest nieprawidłowe." - -#: core/validators.py:507 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "Nie można nic pobrać z %s." - -#: core/validators.py:510 -#, python-format -msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "URL %(url)s zwrócił niepoprawny nagłówek Content-Type '%(contenttype)s'." - -#: core/validators.py:543 -#, python-format +#: contrib/admin/templates/admin/invalid_setup.html:8 msgid "" -"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " -"\"%(start)s\".)" +"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 "" -"Proszę zamknąć tag %(tag)s z linii %(line)s. (Linia zaczyna się od \"%(start)" -"s\".)" +"Instalacja Twojej bazy danych jest niepoprawna. Upewnij się, że odpowiednie " +"tabele zostały utworzone i odpowiedni użytkownik jest uprawniony do ich " +"odczytu." -#: core/validators.py:547 -#, python-format -msgid "" -"Some text starting on line %(line)s is not allowed in that context. (Line " -"starts with \"%(start)s\".)" +#: contrib/admin/templates/admin/login.html:17 +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +msgid "Username:" +msgstr "Nazwa użytkownika:" + +#: contrib/admin/templates/admin/login.html:20 +#: contrib/comments/templates/comments/form.html:8 +msgid "Password:" +msgstr "Hasło:" + +#: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:25 +msgid "Log in" +msgstr "Zaloguj się" + +#: contrib/admin/templates/admin/object_history.html:17 +msgid "Date/time" +msgstr "Data/czas" + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "User" +msgstr "Użytkownik" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "Action" +msgstr "Akcja" + +#: contrib/admin/templates/admin/object_history.html:25 +msgid "DATE_WITH_TIME_FULL" msgstr "" -"Część tekstu od linii %(line)s nie jest dozwolony w tym kontekście. (Linia " -"zaczyna się od \"%(start)s\".)" -#: core/validators.py:552 -#, python-format +#: contrib/admin/templates/admin/object_history.html:35 msgid "" -"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" -"(start)s\".)" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." msgstr "" -"\"%(attr)s\" w linii %(line)s jest niepoprawnym atrybutem. (Linia zaczyna " -"się od \"%(start)s\".)" +"Ten obiekt nie ma historii zmian. Najprawdopodobniej wpis ten nie został " +"dodany poprzez panel administracyjny." -#: core/validators.py:557 +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Pokaż wszystko" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Szukaj" + +#: contrib/admin/templates/admin/search_form.html:10 #, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "1 wynik" +msgstr[1] "%(counter)s wyniki" +msgstr[2] "%(counter)s wyników" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s trafień" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Zapisz jako nowe" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Zapisz i dodaj nowe" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Zapisz i kontynuuj edycję" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Zapisz" + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 msgid "" -"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" -"(start)s\".)" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." msgstr "" -"\"<%(tag)s>\" w linii %(line)s nie jest poprawnym tagiem. (Linia zaczyna się " -"od \"%(start)s\".)" +"Najpierw podaj nazwę użytkownika i hasło. Następnie będziesz mógł edytować " +"więcej opcji użytkownika." -#: core/validators.py:561 +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Nazwa użytkownika" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:33 +msgid "Password" +msgstr "Hasło" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:38 +msgid "Password (again)" +msgstr "Hasło (powtórz)" + +#: 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 "Podaj powyższe hasło w celu weryfikacji." + +#: contrib/admin/templates/admin/auth/user/change_password.html:27 #, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Podaj nowe hasło dla użytkownika %(username)s." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Zakładki" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +msgid "Documentation bookmarklets" +msgstr "Zakładki Dokumentacji" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:8 msgid "" -"A tag on line %(line)s is missing one or more required attributes. (Line " -"starts with \"%(start)s\".)" +"\n" +"

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

      \n" msgstr "" -"Tag w linii %(line)s nie posiada jednego lub więcej wymaganych atrybutów. " -"(Linia zaczyna się od \"%(start)s\".)" +"\n" +"

      Aby zainstalować skryptozakładki, przeciągnij łącze do " +"paska zakładek\n" +"lub kliknij prawym klawiszem na łączu i dodaj je do zakładek. Teraz możesz\n" +"wybrać skryptozakładkę na dowolnej stronie serwisu. Uwaga: niektóre z tych " +"skryptozakładek wymagają przeglądania serwisu z komputera\n" +"\"wewnętrznego\" (skontaktuj się z administratorem systemu, jeśli nie jesteś " +"pewien, czy ten komputer jest \"wewnętrznym\").

      \n" -#: core/validators.py:566 -#, python-format +#: contrib/admin/templates/admin_doc/bookmarklets.html:18 +msgid "Documentation for this page" +msgstr "Dokumentacja dla tej strony" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 msgid "" -"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " -"starts with \"%(start)s\".)" +"Jumps you from any page to the documentation for the view that generates " +"that page." msgstr "" -"Atrybut \"%(attr)s\" w linii %(line)s ma niepoprawną wartość. (Linia zaczyna " -"się od \"%(start)s\".)" +"Przekierowuje z dowolnej strony do dokumentacji dla widoku, który ją " +"generuje." -#: views/generic/create_update.py:43 -#, python-format -msgid "The %(verbose_name)s was created successfully." -msgstr "%(verbose_name)s zostało pomyślnie utworzone." +#: contrib/admin/templates/admin_doc/bookmarklets.html:21 +msgid "Show object ID" +msgstr "Pokaż ID obiektu" -#: views/generic/create_update.py:117 -#, python-format -msgid "The %(verbose_name)s was updated successfully." -msgstr "%(verbose_name)s zostało pomyślnie zmienione." - -#: views/generic/create_update.py:184 -#, python-format -msgid "The %(verbose_name)s was deleted." -msgstr "%(verbose_name)s zostało usunięte." - -#: newforms/models.py:165 newforms/fields.py:364 -msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "Wybierz poprawną wartość. Podana nie jest jednym z dostępnych wyborów." - -#: newforms/models.py:182 newforms/fields.py:380 newforms/fields.py:456 -msgid "Enter a list of values." -msgstr "Podaj listę wartości." - -#: newforms/models.py:188 newforms/fields.py:389 -#, python-format -msgid "Select a valid choice. %s is not one of the available choices." -msgstr "Wybierz poprawną wartość. %s nie jest jednym z dostępnych wyborów." - -#: newforms/fields.py:103 newforms/fields.py:256 -#, python-format -msgid "Ensure this value has at most %d characters." -msgstr "Upewnij się, że tekst ma co najwyżej %d znaków." - -#: newforms/fields.py:105 newforms/fields.py:258 -#, python-format -msgid "Ensure this value has at least %d characters." -msgstr "Upewnij się, że tekst ma co najmniej %d znaków." - -#: newforms/fields.py:130 -#, python-format -msgid "Ensure this value is less than or equal to %s." -msgstr "Upewnij się, że ta wartość jest mniejsza lub równa %s." - -#: newforms/fields.py:132 -#, python-format -msgid "Ensure this value is greater than or equal to %s." -msgstr "Upewnij się, że ta wartość jest większa lub równa %s." - -#: newforms/fields.py:165 -msgid "Enter a valid date." -msgstr "Wpisz poprawną datę." - -#: newforms/fields.py:192 -msgid "Enter a valid time." -msgstr "Wpisz poprawną godzinę." - -#: newforms/fields.py:228 -msgid "Enter a valid date/time." -msgstr "Wpisz poprawną datę/godzinę." - -#: newforms/fields.py:242 -msgid "Enter a valid value." -msgstr "Wpisz poprawną wartość." - -#: newforms/fields.py:289 newforms/fields.py:311 -msgid "Enter a valid URL." -msgstr "Wpisz poprawny URL." - -#: newforms/fields.py:313 -msgid "This URL appears to be a broken link." -msgstr "Ten odnośnik jest nieprawidłowy." - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "th" -msgstr "-y" - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "st" -msgstr "-szy" - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "nd" -msgstr "-gi" - -#: contrib/humanize/templatetags/humanize.py:17 -msgid "rd" -msgstr "-ci" - -#: contrib/humanize/templatetags/humanize.py:47 -#, python-format -msgid "%(value).1f million" -msgid_plural "%(value).1f million" -msgstr[0] "%(value).1f milion" -msgstr[1] "%(value).1f miliony" -msgstr[2] "%(value).1f milionów" - -#: contrib/humanize/templatetags/humanize.py:50 -#, python-format -msgid "%(value).1f billion" -msgid_plural "%(value).1f billion" -msgstr[0] "%(value).1f miliard" -msgstr[1] "%(value).1f miliardy" -msgstr[2] "%(value).1f miliardów" - -#: contrib/humanize/templatetags/humanize.py:53 -#, python-format -msgid "%(value).1f trillion" -msgid_plural "%(value).1f trillion" -msgstr[0] "%(value).1f bilion" -msgstr[1] "%(value).1f biliony" -msgstr[2] "%(value).1f bilionów" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "one" -msgstr "jeden" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "two" -msgstr "dwa" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "three" -msgstr "trzy" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "four" -msgstr "cztery" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "five" -msgstr "pięć" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "six" -msgstr "sześć" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "seven" -msgstr "siedem" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "eight" -msgstr "osiem" - -#: contrib/humanize/templatetags/humanize.py:68 -msgid "nine" -msgstr "dziewięć" - -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "przekieruj z" - -#: contrib/redirects/models.py:8 +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "Podaj pełną ścieżkę bez nazwy domeny. Przykład: '/events/search/'." +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Pokazuje typ i unikalne ID dla stron, które reprezentują pojedynczy obiekt." -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "przekierowanie do" +#: contrib/admin/templates/admin_doc/bookmarklets.html:24 +msgid "Edit this object (current window)" +msgstr "Edytuj ten obiekt (bieżące okno)" -#: contrib/redirects/models.py:10 +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "Przeskok do panelu admina dla stron reprezentujących pojedynczy obiekt" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:27 +msgid "Edit this object (new window)" +msgstr "Edytuj ten obiekt (nowe onko)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "As above, but opens the admin page in a new window." +msgstr "Jak wyżej, tyle że otwiera nowe okno." + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Dziękujemy za odwiedzenie serwisu." + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Zaloguj ponownie" + +#: 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 "Zmiana hasła" + +#: contrib/admin/templates/registration/password_change_done.html:5 +#: contrib/admin/templates/registration/password_change_done.html:9 +msgid "Password change successful" +msgstr "Hasło zmienione" + +#: contrib/admin/templates/registration/password_change_done.html:11 +msgid "Your password was changed." +msgstr "Twoje hasło zostało zmienione" + +#: contrib/admin/templates/registration/password_change_form.html:11 msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." -msgstr "Ścieżka jak wyżej lub pełny URL z http://" +"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 "Podaj swoje stare hasło i dwa razy nowe." -#: contrib/redirects/models.py:13 -msgid "redirect" -msgstr "przekieruj" +#: contrib/admin/templates/registration/password_change_form.html:16 +msgid "Old password:" +msgstr "Stare hasło:" -#: contrib/redirects/models.py:14 -msgid "redirects" -msgstr "przekierowania" +#: contrib/admin/templates/registration/password_change_form.html:18 +msgid "New password:" +msgstr "Nowe hasło:" -#: contrib/comments/models.py:67 contrib/comments/models.py:166 +#: contrib/admin/templates/registration/password_change_form.html:20 +msgid "Confirm password:" +msgstr "Potwierdź hasło:" + +#: contrib/admin/templates/registration/password_change_form.html:22 +msgid "Change my password" +msgstr "Zmień hasło" + +#: 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 "Zresetuj hasło" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Udane resetowanie hasła" + +#: 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 "" +"Nowe hasło zostało wysłane na podany adres email. Powinieneś otrzymać je " +"niebawem." + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "Otrzymałeś email gdyż zarządałeś zresetowania hasła" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "dla twojego konta użytkownika na stronie %(site_name)s" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "Twoje nowe hasło to: %(new_password)s" + +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "Możesz zmienić je na stronie:" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "Twój login:" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "Dziękujemy za używanie strony!" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "Zespół %(site_name)s" + +#: 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 "" +"Podaj swój adres email. Hasło zostanie zresetowane i wysłane na twój adres " +"email." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "Adres e-mail:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Zresetuj moje hasło" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Data:" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Czas:" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Teraz:" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Zmień:" + +#: contrib/admin/templatetags/admin_list.py:255 +msgid "All dates" +msgstr "Wszystkie daty" + +#: contrib/admin/views/auth.py:20 contrib/admin/views/main.py:267 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "%(name)s \"%(obj)s\" dodany pomyślnie." + +#: contrib/admin/views/auth.py:25 contrib/admin/views/main.py:271 +#: contrib/admin/views/main.py:357 +msgid "You may edit it again below." +msgstr "Możesz ponownie edytować wpis poniżej." + +#: contrib/admin/views/auth.py:31 +msgid "Add user" +msgstr "Dodaj użytkownika" + +#: contrib/admin/views/auth.py:58 +msgid "Password changed successfully." +msgstr "Hasło zostało zmienione pomyślnie." + +#: contrib/admin/views/auth.py:65 +#, python-format +msgid "Change password: %s" +msgstr "Zmień hasło: %s" + +#: 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 "" +"Proszę wpisać poprawną nazwę użytkownika i hasło. Uwaga: wielkość liter ma " +"znaczenie." + +#: 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 "" +"Zaloguj się ponownie. Twoja sesja wygasła lecz twoje zgłoszenie zostało " +"zapisane." + +#: 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 "" +"Twoja przeglądarka nie chce akceptować ciasteczek. Zmień jej ustawienia i " +"spróbuj ponownie." + +#: contrib/admin/views/decorators.py:84 +msgid "Usernames cannot contain the '@' character." +msgstr "Nazwy użytkowników nie mogą zawierać znaków '@'." + +#: contrib/admin/views/decorators.py:86 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "Twój adres e-mail to nie jest twój login. Spróbuj '%s'." + +#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50 +#: contrib/admin/views/doc.py:52 +msgid "tag:" +msgstr "tag:" + +#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81 +#: contrib/admin/views/doc.py:83 +msgid "filter:" +msgstr "filtr:" + +#: contrib/admin/views/doc.py:137 contrib/admin/views/doc.py:139 +#: contrib/admin/views/doc.py:141 +msgid "view:" +msgstr "widok:" + +#: contrib/admin/views/doc.py:166 +#, python-format +msgid "App %r not found" +msgstr "Aplikacja %r nie została znaleziona" + +#: contrib/admin/views/doc.py:173 +#, python-format +msgid "Model %(name)r not found in app %(label)r" +msgstr "Model %(name)r nie został znaleziony w aplikacji %(label)r" + +#: contrib/admin/views/doc.py:185 +#, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "powiązany obiekt `%(label)s.%(type)s`" + +#: 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 "model:" + +#: contrib/admin/views/doc.py:216 +#, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "powiązane obiekty `%(label)s.%(name)s`" + +#: contrib/admin/views/doc.py:221 +#, python-format +msgid "all %s" +msgstr "wszystkie %s" + +#: contrib/admin/views/doc.py:226 +#, python-format +msgid "number of %s" +msgstr "liczba %s" + +#: contrib/admin/views/doc.py:231 +#, python-format +msgid "Fields on %s objects" +msgstr "Pola obiektów %s" + +#: 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 "Liczba całkowita" + +#: contrib/admin/views/doc.py:294 +msgid "Boolean (Either True or False)" +msgstr "Wartość logiczna (True, False - prawda lub fałsz)" + +#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:314 +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Łańcuch (do %(max_length)s znaków)" + +#: contrib/admin/views/doc.py:296 +msgid "Comma-separated integers" +msgstr "Liczby całkowite rozdzielone przecinkami" + +#: contrib/admin/views/doc.py:297 +msgid "Date (without time)" +msgstr "Data (bez godziny)" + +#: contrib/admin/views/doc.py:298 +msgid "Date (with time)" +msgstr "Data (z godziną)" + +#: contrib/admin/views/doc.py:299 +msgid "Decimal number" +msgstr "Numer dziesiętny" + +#: contrib/admin/views/doc.py:300 +msgid "E-mail address" +msgstr "Adres e-mail" + +#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:305 +msgid "File path" +msgstr "Ścieżka do pliku" + +#: contrib/admin/views/doc.py:303 +msgid "Floating point number" +msgstr "Liczba zmiennoprzecinkowa" + +#: contrib/admin/views/doc.py:307 contrib/comments/models.py:85 +msgid "IP address" +msgstr "Adres IP" + +#: contrib/admin/views/doc.py:309 +msgid "Boolean (Either True, False or None)" +msgstr "Wartość logiczna (True, False, None - prawda, fałsz lub nic)" + +#: contrib/admin/views/doc.py:310 +msgid "Relation to parent model" +msgstr "Relacja do modelu rodzica" + +#: contrib/admin/views/doc.py:311 +msgid "Phone number" +msgstr "Numer telefonu" + +#: contrib/admin/views/doc.py:316 +msgid "Text" +msgstr "Tekst" + +#: contrib/admin/views/doc.py:317 +msgid "Time" +msgstr "Czas" + +#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "URL" + +#: contrib/admin/views/doc.py:319 +msgid "U.S. state (two uppercase letters)" +msgstr "Stan USA (dwie duże litery)" + +#: contrib/admin/views/doc.py:320 +msgid "XML text" +msgstr "Tekst XML" + +#: contrib/admin/views/doc.py:346 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nie jest obiektem urlpattern" + +#: contrib/admin/views/main.py:233 +msgid "Site administration" +msgstr "Administracja stroną" + +#: contrib/admin/views/main.py:281 contrib/admin/views/main.py:366 +#, python-format +msgid "You may add another %s below." +msgstr "Możesz dodać nowy wpis %s poniżej." + +#: contrib/admin/views/main.py:299 +#, python-format +msgid "Add %s" +msgstr "Dodaj %s" + +#: contrib/admin/views/main.py:345 +#, python-format +msgid "Added %s." +msgstr "Dodano %s" + +#: contrib/admin/views/main.py:345 contrib/admin/views/main.py:347 +#: contrib/admin/views/main.py:349 core/validators.py:283 +#: db/models/manipulators.py:309 +msgid "and" +msgstr "i" + +#: contrib/admin/views/main.py:347 +#, python-format +msgid "Changed %s." +msgstr "Zmieniono %s" + +#: contrib/admin/views/main.py:349 +#, python-format +msgid "Deleted %s." +msgstr "Skasowano %s" + +#: contrib/admin/views/main.py:352 +msgid "No fields changed." +msgstr "Żadne pole nie zmienione." + +#: contrib/admin/views/main.py:355 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "%(name)s \"%(obj)s\" zostało pomyślnie zmienione." + +#: contrib/admin/views/main.py:363 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" +"%(name)s \"%(obj)s\" dodane pomyślnie. Możesz edytować ponownie wpis poniżej." + +#: contrib/admin/views/main.py:401 +#, python-format +msgid "Change %s" +msgstr "Zmień %s" + +#: contrib/admin/views/main.py:488 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Jedno lub więcej %(fieldname)s w %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:493 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Jedno lub więcej %(fieldname)s w %(name)s:" + +#: contrib/admin/views/main.py:525 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" usunięty pomyślnie." + +#: contrib/admin/views/main.py:528 +msgid "Are you sure?" +msgstr "Jesteś pewien?" + +#: contrib/admin/views/main.py:550 +#, python-format +msgid "Change history: %s" +msgstr "Historia zmian: %s" + +#: contrib/admin/views/main.py:584 +#, python-format +msgid "Select %s" +msgstr "Zaznacz %s" + +#: contrib/admin/views/main.py:584 +#, python-format +msgid "Select %s to change" +msgstr "Zaznacz %s aby zmienić" + +#: contrib/admin/views/main.py:785 +msgid "Database error" +msgstr "Błąd bazy danych" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "Hasła się nie zgadzają." + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Użytkownik o tej nazwie już istnieje." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" +"Twoja przeglądarka nie chce akceptować ciasteczek. Są one wymagane do " +"zalogowania się." + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "To konto jest nieaktywne." + +#: contrib/auth/forms.py:84 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" +"Ten adres e-mail nie ma przypisanego konta. Jesteś pewien, że " +"zarejestrowałeś się?" + +#: contrib/auth/forms.py:107 +#, python-format +msgid "Password reset on %s" +msgstr "Hasło zresetowane dla %s" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Pola 'nowe hasło' nie zgadzają się." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Podane stare hasło jest niepoprawne. Proszę podać je jeszcze raz." + +#: contrib/auth/models.py:73 contrib/auth/models.py:93 +msgid "name" +msgstr "nazwa" + +#: contrib/auth/models.py:75 +msgid "codename" +msgstr "nazwa kodowa" + +#: contrib/auth/models.py:78 +msgid "permission" +msgstr "uprawnienie" + +#: contrib/auth/models.py:79 contrib/auth/models.py:94 +msgid "permissions" +msgstr "uprawnienia" + +#: contrib/auth/models.py:97 +msgid "group" +msgstr "grupa" + +#: contrib/auth/models.py:98 contrib/auth/models.py:141 +msgid "groups" +msgstr "grupy" + +#: contrib/auth/models.py:131 +msgid "username" +msgstr "użytkownik" + +#: contrib/auth/models.py:131 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" +"Wymagane. 30 znaków lub mniej. Tylko znaki alfanumeryczne (litery, cyfry i " +"podkreślenia)." + +#: contrib/auth/models.py:132 +msgid "first name" +msgstr "Imię" + +#: contrib/auth/models.py:133 +msgid "last name" +msgstr "Nazwisko" + +#: contrib/auth/models.py:134 +msgid "e-mail address" +msgstr "adres e-mail" + +#: contrib/auth/models.py:135 +msgid "password" +msgstr "hasło" + +#: contrib/auth/models.py:135 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Użyj '[algo]$[salt]$[hexdigest]' lub formularza zmiany " +"hasła." + +#: contrib/auth/models.py:136 +msgid "staff status" +msgstr "w zespole" + +#: contrib/auth/models.py:136 +msgid "Designates whether the user can log into this admin site." +msgstr "Oznacza czy użytkownik może zalogować się do panelu admina." + +#: contrib/auth/models.py:137 +msgid "active" +msgstr "aktywny" + +#: contrib/auth/models.py:137 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" +"Oznacza czy użytkownik może zalogować się do panelu administratora. Odznacz " +"to zamiast usuwać konta." + +#: contrib/auth/models.py:138 +msgid "superuser status" +msgstr "Główny Administrator" + +#: contrib/auth/models.py:138 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Oznacza, że ten użytkownik ma wszystkie uprawnienia bez jawnego " +"przypisywania ich." + +#: contrib/auth/models.py:139 +msgid "last login" +msgstr "ostatnio zalogowany" + +#: contrib/auth/models.py:140 +msgid "date joined" +msgstr "data przyłączenia" + +#: contrib/auth/models.py:142 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"Oprócz uprawnień przypisanych bezpośrednio użytkownikowi otrzyma on " +"uprawnienia grup, do których należy." + +#: contrib/auth/models.py:143 +msgid "user permissions" +msgstr "uprawnienia użytkownika" + +#: contrib/auth/models.py:147 +msgid "user" +msgstr "użytkownik" + +#: contrib/auth/models.py:148 +msgid "users" +msgstr "użytkownicy" + +#: contrib/auth/models.py:154 +msgid "Personal info" +msgstr "Dane osobowe" + +#: contrib/auth/models.py:155 +msgid "Permissions" +msgstr "Uprawnienia" + +#: contrib/auth/models.py:156 +msgid "Important dates" +msgstr "Ważne daty" + +#: contrib/auth/models.py:157 +msgid "Groups" +msgstr "Grupy" + +#: contrib/auth/models.py:316 +msgid "message" +msgstr "wiadomość" + +#: contrib/auth/views.py:47 +msgid "Logged out" +msgstr "Wylogowany" + +#: contrib/comments/models.py:67 contrib/comments/models.py:169 msgid "object ID" msgstr "ID obiektu" @@ -793,7 +1252,7 @@ msgid "headline" msgstr "nagłówek" #: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 +#: contrib/comments/models.py:170 msgid "comment" msgstr "komentarz" @@ -833,18 +1292,14 @@ msgstr "ocena #8" msgid "is valid rating" msgstr "jest poprawną oceną" -#: 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 "data/czas dodania" -#: contrib/comments/models.py:84 contrib/comments/models.py:170 +#: contrib/comments/models.py:84 contrib/comments/models.py:173 msgid "is public" msgstr "publicznie dostepny" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 -msgid "IP address" -msgstr "Adres IP" - #: contrib/comments/models.py:86 msgid "is removed" msgstr "usunięty" @@ -861,11 +1316,11 @@ msgstr "" msgid "comments" msgstr "komentarze" -#: contrib/comments/models.py:131 contrib/comments/models.py:207 +#: contrib/comments/models.py:134 contrib/comments/models.py:213 msgid "Content object" msgstr "Obiekt treści" -#: contrib/comments/models.py:159 +#: contrib/comments/models.py:162 #, python-format msgid "" "Posted by %(user)s at %(date)s\n" @@ -880,48 +1335,48 @@ msgstr "" "\n" "http://%(domain)s%(url)s" -#: contrib/comments/models.py:168 +#: contrib/comments/models.py:171 msgid "person's name" msgstr "Nazwa osoby" -#: contrib/comments/models.py:171 +#: contrib/comments/models.py:174 msgid "ip address" msgstr "adres ip" -#: contrib/comments/models.py:173 +#: contrib/comments/models.py:176 msgid "approved by staff" msgstr "zaakceptowano" -#: contrib/comments/models.py:176 +#: contrib/comments/models.py:179 msgid "free comment" msgstr "wolny komentarz" -#: contrib/comments/models.py:177 +#: contrib/comments/models.py:180 msgid "free comments" msgstr "wolne komentarze" -#: contrib/comments/models.py:233 +#: contrib/comments/models.py:239 msgid "score" msgstr "ilość punktów" -#: contrib/comments/models.py:234 +#: contrib/comments/models.py:240 msgid "score date" msgstr "data przyznania punktów" -#: contrib/comments/models.py:237 +#: contrib/comments/models.py:243 msgid "karma score" msgstr "ilość punktów" -#: contrib/comments/models.py:238 +#: contrib/comments/models.py:244 msgid "karma scores" msgstr "wyniki" -#: contrib/comments/models.py:242 +#: contrib/comments/models.py:248 #, python-format msgid "%(score)d rating by %(user)s" msgstr "%(score)d ocenę przez %(user)s" -#: contrib/comments/models.py:258 +#: contrib/comments/models.py:264 #, python-format msgid "" "This comment was flagged by %(user)s:\n" @@ -932,157 +1387,40 @@ msgstr "" "\n" "%(text)s" -#: contrib/comments/models.py:265 +#: contrib/comments/models.py:271 msgid "flag date" msgstr "data flagi" -#: contrib/comments/models.py:268 +#: contrib/comments/models.py:274 msgid "user flag" msgstr "flaga użytkownika" -#: contrib/comments/models.py:269 +#: contrib/comments/models.py:275 msgid "user flags" msgstr "flagi użytkownika" -#: contrib/comments/models.py:273 +#: contrib/comments/models.py:279 #, python-format msgid "Flag by %r" msgstr "Flaga %r" -#: contrib/comments/models.py:278 +#: contrib/comments/models.py:284 msgid "deletion date" msgstr "data skasowania" -#: contrib/comments/models.py:280 +#: contrib/comments/models.py:286 msgid "moderator deletion" msgstr "usunięcie moderatora" -#: contrib/comments/models.py:281 +#: contrib/comments/models.py:287 msgid "moderator deletions" msgstr "usunięcia moderatorów" -#: contrib/comments/models.py:285 +#: contrib/comments/models.py:291 #, python-format msgid "Moderator deletion by %r" msgstr "Usunięcie moderatora przez %r" -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Anonimowi użytkownicy nie mogą głosować" - -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "Błędny ID komentarza" - -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "Nie można głosować na siebie" - -#: contrib/comments/views/comments.py:27 -msgid "This rating is required because you've entered at least one other rating." -msgstr "Ta ocena jest wymagana gdyż podałeś przynajmniej jedną inną ocenę." - -#: contrib/comments/views/comments.py:111 -#, python-format -msgid "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comment:\n" -"\n" -"%(text)s" -msgid_plural "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comments:\n" -"\n" -"%(text)s" -msgstr[0] "" -"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" -"(count)s komentarz:\n" -"\n" -"%(text)s" -msgstr[1] "" -"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" -"(count)s komentarze:\n" -"\n" -"%(text)s" -msgstr[2] "" -"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" -"(count)s komentarzy:\n" -"\n" -"%(text)s" - -#: contrib/comments/views/comments.py:116 -#, python-format -msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" -msgstr "" -"Ten komentarze został dodany przez użytkownika::\n" -"\n" -"%(text)s" - -#: contrib/comments/views/comments.py:188 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "Dozwolone tylko POSTy" - -#: contrib/comments/views/comments.py:192 -#: contrib/comments/views/comments.py:284 -msgid "One or more of the required fields wasn't submitted" -msgstr "Jedno lub więcej wymaganych pól nie zostało wypełnionych" - -#: contrib/comments/views/comments.py:196 -#: contrib/comments/views/comments.py:286 -msgid "Somebody tampered with the comment form (security violation)" -msgstr "Ktoś próbował obejść zabezpieczenia formularza komentarzy" - -#: contrib/comments/views/comments.py:206 -#: contrib/comments/views/comments.py:292 -msgid "" -"The comment form had an invalid 'target' parameter -- the object ID was " -"invalid" -msgstr "" -"Formularz komentarza miał niepoprawny parametr 'target' -- ID obiektu było " -"niepoprawne" - -#: contrib/comments/views/comments.py:257 -#: contrib/comments/views/comments.py:321 -msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "Formularz komentarza nie zapewnił obiektów 'preview' ani 'post'" - -#: contrib/comments/templates/comments/form.html:6 -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:17 -msgid "Username:" -msgstr "Nazwa użytkownika:" - -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/auth/user/change_password.html:9 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -msgid "Log out" -msgstr "Wyloguj się" - -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Hasło:" - #: contrib/comments/templates/comments/form.html:8 msgid "Forgotten your password?" msgstr "Zapomniałeś hasło?" @@ -1119,1160 +1457,484 @@ msgstr "Podgląd" msgid "Your name:" msgstr "Twoje imię:" -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "nazwa domeny" +#: contrib/comments/views/comments.py:28 +msgid "" +"This rating is required because you've entered at least one other rating." +msgstr "Ta ocena jest wymagana gdyż podałeś przynajmniej jedną inną ocenę." -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "wyświetlana nazwa" - -#: contrib/sites/models.py:15 -msgid "site" -msgstr "strona" - -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "strony" - -#: contrib/admin/filterspecs.py:40 +#: contrib/comments/views/comments.py:112 #, python-format msgid "" -"

      By %s:

      \n" -"
        \n" -msgstr "" -"

        Przez %s:

        \n" -"
      \n" - -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 -msgid "All" -msgstr "Wszystko" - -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Dowolna data" - -#: contrib/admin/filterspecs.py:110 -msgid "Today" -msgstr "Dzisiaj" - -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "Ostatnie 7 dni" - -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Ten miesiąc" - -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Ten rok" - -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "czas akcji" - -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "id obiektu" - -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "reprezentacj obiektu" - -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "flaga akcji" - -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "zmień wiadomość" - -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "log" - -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "logi" - -#: contrib/admin/templatetags/admin_list.py:247 -msgid "All dates" -msgstr "Wszystkie daty" - -#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:260 -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "%(name)s \"%(obj)s\" dodany pomyślnie." - -#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:264 -#: contrib/admin/views/main.py:350 -msgid "You may edit it again below." -msgstr "Możesz ponownie edytować wpis poniżej." - -#: contrib/admin/views/auth.py:30 -msgid "Add user" -msgstr "Dodaj użytkownika" - -#: contrib/admin/views/auth.py:57 -msgid "Password changed successfully." -msgstr "Hasło zostało zmienione pomyślnie." - -#: contrib/admin/views/auth.py:64 -#, python-format -msgid "Change password: %s" -msgstr "Zmień hasło: %s" - -#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60 -msgid "" -"Please enter a correct username and password. Note that both fields are case-" -"sensitive." -msgstr "" -"Proszę wpisać poprawną nazwę użytkownika i hasło. Uwaga: wielkość liter ma " -"znaczenie." - -#: contrib/admin/views/decorators.py:24 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Zaloguj się" - -#: contrib/admin/views/decorators.py:62 -msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." -msgstr "" -"Zaloguj się ponownie. Twoja sesja wygasła lecz twoje zgłoszenie zostało " -"zapisane." - -#: contrib/admin/views/decorators.py:69 -msgid "" -"Looks like your browser isn't configured to accept cookies. Please enable " -"cookies, reload this page, and try again." -msgstr "" -"Twoja przeglądarka nie chce akceptować ciasteczek. Zmień jej ustawienia i " -"spróbuj ponownie." - -#: contrib/admin/views/decorators.py:83 -msgid "Usernames cannot contain the '@' character." -msgstr "Nazwy użytkowników nie mogą zawierać znaków '@'." - -#: contrib/admin/views/decorators.py:85 -#, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "Twój adres e-mail to nie jest twój login. Spróbuj '%s'." - -#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 -#: contrib/admin/views/doc.py:50 -msgid "tag:" -msgstr "tag:" - -#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 -#: contrib/admin/views/doc.py:81 -msgid "filter:" -msgstr "filtr:" - -#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 -#: contrib/admin/views/doc.py:139 -msgid "view:" -msgstr "widok:" - -#: contrib/admin/views/doc.py:164 -#, python-format -msgid "App %r not found" -msgstr "Aplikacja %r nie została znaleziona" - -#: contrib/admin/views/doc.py:171 -#, python-format -msgid "Model %(name)r not found in app %(label)r" -msgstr "Model %(name)r nie został znaleziony w aplikacji %(label)r" - -#: contrib/admin/views/doc.py:183 -#, python-format -msgid "the related `%(label)s.%(type)s` object" -msgstr "powiązany obiekt `%(label)s.%(type)s`" - -#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 -#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 -msgid "model:" -msgstr "model:" - -#: contrib/admin/views/doc.py:214 -#, python-format -msgid "related `%(label)s.%(name)s` objects" -msgstr "powiązane obiekty `%(label)s.%(name)s`" - -#: contrib/admin/views/doc.py:219 -#, python-format -msgid "all %s" -msgstr "wszystkie %s" - -#: contrib/admin/views/doc.py:224 -#, python-format -msgid "number of %s" -msgstr "liczba %s" - -#: contrib/admin/views/doc.py:229 -#, python-format -msgid "Fields on %s objects" -msgstr "Pola obiektów %s" - -#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 -#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 -#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 -msgid "Integer" -msgstr "Liczba całkowita" - -#: contrib/admin/views/doc.py:292 -msgid "Boolean (Either True or False)" -msgstr "Wartość logiczna (True, False - prawda lub fałsz)" - -#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 -#, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Łańcuch (do %(maxlength)s znaków)" - -#: contrib/admin/views/doc.py:294 -msgid "Comma-separated integers" -msgstr "Liczby całkowite rozdzielone przecinkami" - -#: contrib/admin/views/doc.py:295 -msgid "Date (without time)" -msgstr "Data (bez godziny)" - -#: contrib/admin/views/doc.py:296 -msgid "Date (with time)" -msgstr "Data (z godziną)" - -#: contrib/admin/views/doc.py:297 -msgid "E-mail address" -msgstr "Adres e-mail" - -#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 -#: contrib/admin/views/doc.py:302 -msgid "File path" -msgstr "Ścieżka do pliku" - -#: contrib/admin/views/doc.py:300 -msgid "Decimal number" -msgstr "Numer dziesiętny" - -#: contrib/admin/views/doc.py:306 -msgid "Boolean (Either True, False or None)" -msgstr "Wartość logiczna (True, False, None - prawda, fałsz lub nic)" - -#: contrib/admin/views/doc.py:307 -msgid "Relation to parent model" -msgstr "Relacja do modelu rodzica" - -#: contrib/admin/views/doc.py:308 -msgid "Phone number" -msgstr "Numer telefonu" - -#: contrib/admin/views/doc.py:313 -msgid "Text" -msgstr "Tekst" - -#: contrib/admin/views/doc.py:314 -msgid "Time" -msgstr "Czas" - -#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" - -#: contrib/admin/views/doc.py:316 -msgid "U.S. state (two uppercase letters)" -msgstr "Stan USA (dwie duże litery)" - -#: contrib/admin/views/doc.py:317 -msgid "XML text" -msgstr "Tekst XML" - -#: contrib/admin/views/doc.py:343 -#, python-format -msgid "%s does not appear to be a urlpattern object" -msgstr "%s nie jest obiektem urlpattern" - -#: contrib/admin/views/main.py:226 -msgid "Site administration" -msgstr "Administracja stroną" - -#: contrib/admin/views/main.py:274 contrib/admin/views/main.py:359 -#, python-format -msgid "You may add another %s below." -msgstr "Możesz dodać nowy wpis %s poniżej." - -#: contrib/admin/views/main.py:292 -#, python-format -msgid "Add %s" -msgstr "Dodaj %s" - -#: contrib/admin/views/main.py:338 -#, python-format -msgid "Added %s." -msgstr "Dodano %s" - -#: contrib/admin/views/main.py:340 -#, python-format -msgid "Changed %s." -msgstr "Zmieniono %s" - -#: contrib/admin/views/main.py:342 -#, python-format -msgid "Deleted %s." -msgstr "Skasowano %s" - -#: contrib/admin/views/main.py:345 -msgid "No fields changed." -msgstr "Żadne pole nie zmienione." - -#: contrib/admin/views/main.py:348 -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "%(name)s \"%(obj)s\" zostało pomyślnie zmienione." - -#: contrib/admin/views/main.py:356 -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "%(name)s \"%(obj)s\" dodane pomyślnie. Możesz edytować ponownie wpis poniżej." - -#: contrib/admin/views/main.py:394 -#, python-format -msgid "Change %s" -msgstr "Zmień %s" - -#: contrib/admin/views/main.py:479 -#, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "Jedno lub więcej %(fieldname)s w %(name)s: %(obj)s" - -#: contrib/admin/views/main.py:484 -#, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Jedno lub więcej %(fieldname)s w %(name)s:" - -#: contrib/admin/views/main.py:517 -#, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "%(name)s \"%(obj)s\" usunięty pomyślnie." - -#: contrib/admin/views/main.py:520 -msgid "Are you sure?" -msgstr "Jesteś pewien?" - -#: contrib/admin/views/main.py:542 -#, python-format -msgid "Change history: %s" -msgstr "Historia zmian: %s" - -#: contrib/admin/views/main.py:576 -#, python-format -msgid "Select %s" -msgstr "Zaznacz %s" - -#: contrib/admin/views/main.py:576 -#, python-format -msgid "Select %s to change" -msgstr "Zaznacz %s aby zmienić" - -#: contrib/admin/views/main.py:771 -msgid "Database error" -msgstr "Błąd bazy danych" - -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "Teraz:" - -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "Zmień:" - -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Data:" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Czas:" - -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/auth/user/change_password.html:9 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Documentation" -msgstr "Dokumentacja" - -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: 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_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -msgid "Change password" -msgstr "Zmiana hasła" - -#: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/500.html:4 -#: contrib/admin/templates/admin/invalid_setup.html:4 -#: contrib/admin/templates/admin/change_form.html:13 -#: contrib/admin/templates/admin/delete_confirmation.html:6 -#: contrib/admin/templates/admin/base.html:30 -#: contrib/admin/templates/admin/auth/user/change_password.html:12 -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/logged_out.html:4 -#: contrib/admin/templates/registration/password_reset_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Home" -msgstr "Początek" - -#: contrib/admin/templates/admin/change_list.html:12 -#, python-format -msgid "Add %(name)s" -msgstr "Dodaj %(name)s" - -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(filter_title)s " -msgstr " Używając %(filter_title)s " - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:21 -msgid "History" -msgstr "Historia" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Data/czas" - -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "Użytkownik" - -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Akcja" - -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Ten obiekt nie ma historii zmian. Najprawdopodobniej wpis ten nie został " -"dodany poprzez panel administracyjny." - -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Szukaj" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "1 result" -msgid_plural "%(counter)s results" -msgstr[0] "1 wynik" -msgstr[1] "%(counter)s wyniki" -msgstr[2] "%(counter)s wyników" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "%(full_result_count)s total" -msgstr "%(full_result_count)s trafień" - -#: contrib/admin/templates/admin/pagination.html:10 -msgid "Show all" -msgstr "Pokaż wszystko" - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Administracja stroną Django" - -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administracja Django" - -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Błąd serwera" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Bład serwera (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Błąd Serwera (500)" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Wystąpił niespodziewany błąd. Raport został wysłany emailem administratorowi " -"strony." - -#: 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 "" -"Instalacja Twojej bazy danych jest niepoprawna. Upewnij się, że odpowiednie " -"tabele zostały utworzone i odpowiedni użytkownik jest uprawniony do ich " -"odczytu." - -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "Modele dostępne w aplikacji %(name)s." - -#: contrib/admin/templates/admin/index.html:18 -#, python-format -msgid "%(name)s" -msgstr "%(name)s" - -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Dodaj" - -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "Zmień" - -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "Nie masz uprawnień by edytować cokolwiek" - -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Ostatnie akcje" - -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "Moje akcje" - -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "Brak" - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Strona nie znaleziona" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Niestety nie można znaleźć rządanej strony." - -#: contrib/admin/templates/admin/filters.html:4 -msgid "Filter" -msgstr "Filtr" - -#: contrib/admin/templates/admin/change_form.html:22 -msgid "View on site" -msgstr "Pokaż na stronie" - -#: 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] "Proszę popraw poniższy błąd" -msgstr[1] "Proszę popraw poniższe błędy" -msgstr[2] "Proszę popraw poniższe błędy" - -#: contrib/admin/templates/admin/change_form.html:50 -msgid "Ordering" -msgstr "Sortowanie" - -#: contrib/admin/templates/admin/change_form.html:53 -msgid "Order:" -msgstr "Porządek:" - -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Usuń" - -#: contrib/admin/templates/admin/delete_confirmation.html:14 -#, 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 "" -"Skasowanie %(object_name)s '%(escaped_object)s' spowoduje usunięcie " -"zależnych obiektów, lecz nie posiadasz uprawnień do usunięcia następujących " -"typów obiektów:" - -#: contrib/admin/templates/admin/delete_confirmation.html:21 -#, 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 "" -"Czy chcesz skasować %(object_name)s \"%(escaped_object)s\"? Następujące " -"zależne obiekty zostaną skasowane:" - -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "Tak, usuń" - -#: contrib/admin/templates/admin/base.html:25 -msgid "Welcome," -msgstr "Witaj," - -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "Zapisz jako nowe" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Zapisz i dodaj nowe" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Zapisz i kontynuuj edycję" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Zapisz" - -#: contrib/admin/templates/admin/auth/user/change_password.html:28 -#, python-format -msgid "Enter a new password for the user %(username)s." -msgstr "Podaj nowe hasło dla użytkownika %(username)s." - -#: contrib/admin/templates/admin/auth/user/change_password.html:34 -#: contrib/admin/templates/admin/auth/user/add_form.html:18 -msgid "Password" -msgstr "Hasło" - -#: contrib/admin/templates/admin/auth/user/change_password.html:39 -#: contrib/admin/templates/admin/auth/user/add_form.html:23 -msgid "Password (again)" -msgstr "Hasło (powtórz)" - -#: contrib/admin/templates/admin/auth/user/change_password.html:40 -#: contrib/admin/templates/admin/auth/user/add_form.html:24 -msgid "Enter the same password as above, for verification." -msgstr "Podaj powyższe hasło w celu weryfikacji." - -#: 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 "" -"Najpierw podaj nazwę użytkownika i hasło. Następnie będziesz mógł edytować " -"więcej opcji użytkownika." - -#: contrib/admin/templates/admin/auth/user/add_form.html:12 -msgid "Username" -msgstr "Nazwa użytkownika" - -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/registration/password_change_form.html:6 -#: contrib/admin/templates/registration/password_change_form.html:10 -msgid "Password change" -msgstr "Zmiana hasła" - -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "Hasło zmienione" - -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "Twoje hasło zostało zmienione" - -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:6 -#: contrib/admin/templates/registration/password_reset_form.html:10 -#: contrib/admin/templates/registration/password_reset_done.html:4 -msgid "Password reset" -msgstr "Zresetuj hasło" - -#: 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 "" -"Podaj swój adres email. Hasło zostanie zresetowane i wysłane na twój adres " -"email." - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "Adres e-mail:" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Zresetuj moje hasło" - -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "Dziękujemy za odwiedzenie serwisu." - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Zaloguj ponownie" - -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "Udane resetowanie hasła" - -#: 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 "" -"Nowe hasło zostało wysłane na podany adres email. Powinieneś otrzymać je " -"niebawem." - -#: contrib/admin/templates/registration/password_change_form.html:12 -msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "Podaj swoje stare hasło i dwa razy nowe." - -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "Stare hasło:" - -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "Nowe hasło:" - -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "Potwierdź hasło:" - -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "Zmień hasło" - -#: contrib/admin/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "Otrzymałeś email gdyż zarządałeś zresetowania hasła" - -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "dla twojego konta użytkownika na stronie %(site_name)s" - -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "Twoje nowe hasło to: %(new_password)s" - -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "Możesz zmienić je na stronie:" - -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "Twój login:" - -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "Dziękujemy za używanie strony!" - -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "Zespół %(site_name)s" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Zakładki" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Zakładki Dokumentacji" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comment:\n" "\n" -"

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

      \n" -msgstr "" +"%(text)s" +msgid_plural "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comments:\n" "\n" -"

      Aby zainstalować skryptozakładki, przeciągnij łącze do " -"paska zakładek\n" -"lub kliknij prawym klawiszem na łączu i dodaj je do zakładek. Teraz możesz\n" -"wybrać skryptozakładkę na dowolnej stronie serwisu. Uwaga: niektóre z tych " -"skryptozakładek wymagają przeglądania serwisu z komputera\n" -"\"wewnętrznego\" (skontaktuj się z administratorem systemu, jeśli nie jesteś " -"pewien, czy ten komputer jest \"wewnętrznym\").

      \n" +"%(text)s" +msgstr[0] "" +"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" +"(count)s komentarz:\n" +"\n" +"%(text)s" +msgstr[1] "" +"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" +"(count)s komentarze:\n" +"\n" +"%(text)s" +msgstr[2] "" +"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" +"(count)s komentarzy:\n" +"\n" +"%(text)s" -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Dokumentacja dla tej strony" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +#: contrib/comments/views/comments.py:117 +#, python-format msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" msgstr "" -"Przekierowuje z dowolnej strony do dokumentacji dla widoku, który ją " -"generuje." +"Ten komentarze został dodany przez użytkownika::\n" +"\n" +"%(text)s" -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Pokaż ID obiektu" +#: contrib/comments/views/comments.py:190 +#: contrib/comments/views/comments.py:283 +msgid "Only POSTs are allowed" +msgstr "Dozwolone tylko POSTy" -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +#: contrib/comments/views/comments.py:194 +#: contrib/comments/views/comments.py:287 +msgid "One or more of the required fields wasn't submitted" +msgstr "Jedno lub więcej wymaganych pól nie zostało wypełnionych" + +#: contrib/comments/views/comments.py:198 +#: contrib/comments/views/comments.py:289 +msgid "Somebody tampered with the comment form (security violation)" +msgstr "Ktoś próbował obejść zabezpieczenia formularza komentarzy" + +#: contrib/comments/views/comments.py:208 +#: contrib/comments/views/comments.py:295 msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." -msgstr "Pokazuje typ i unikalne ID dla stron, które reprezentują pojedynczy obiekt." +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" +msgstr "" +"Formularz komentarza miał niepoprawny parametr 'target' -- ID obiektu było " +"niepoprawne" -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Edytuj ten obiekt (bieżące okno)" +#: contrib/comments/views/comments.py:259 +#: contrib/comments/views/comments.py:324 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "Formularz komentarza nie zapewnił obiektów 'preview' ani 'post'" -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." -msgstr "Przeskok do panelu admina dla stron reprezentujących pojedynczy obiekt" +#: contrib/comments/views/karma.py:21 +msgid "Anonymous users cannot vote" +msgstr "Anonimowi użytkownicy nie mogą głosować" -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Edytuj ten obiekt (nowe onko)" +#: contrib/comments/views/karma.py:25 +msgid "Invalid comment ID" +msgstr "Błędny ID komentarza" -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "Jak wyżej, tyle że otwiera nowe okno." +#: contrib/comments/views/karma.py:27 +msgid "No voting for yourself" +msgstr "Nie można głosować na siebie" -#: contrib/contenttypes/models.py:36 +#: contrib/contenttypes/models.py:37 msgid "python model class name" msgstr "nazwa pythonowa modelu klasy" -#: contrib/contenttypes/models.py:39 +#: contrib/contenttypes/models.py:40 msgid "content type" msgstr "typ zawartości" -#: contrib/contenttypes/models.py:40 +#: contrib/contenttypes/models.py:41 msgid "content types" msgstr "typy zawartości" -#: contrib/auth/views.py:40 -msgid "Logged out" -msgstr "Wylogowany" - -#: contrib/auth/models.py:44 contrib/auth/models.py:64 -msgid "name" -msgstr "nazwa" - -#: contrib/auth/models.py:46 -msgid "codename" -msgstr "nazwa kodowa" - -#: contrib/auth/models.py:49 -msgid "permission" -msgstr "uprawnienie" - -#: contrib/auth/models.py:50 contrib/auth/models.py:65 -msgid "permissions" -msgstr "uprawnienia" - -#: contrib/auth/models.py:68 -msgid "group" -msgstr "grupa" - -#: contrib/auth/models.py:69 contrib/auth/models.py:109 -msgid "groups" -msgstr "grupy" - -#: contrib/auth/models.py:99 -msgid "username" -msgstr "użytkownik" - -#: contrib/auth/models.py:99 +#: contrib/flatpages/models.py:8 msgid "" -"Required. 30 characters or fewer. Alphanumeric characters only (letters, " -"digits and underscores)." +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." msgstr "" -"Wymagane. 30 znaków lub mniej. Tylko znaki alfanumeryczne (litery, cyfry i " -"podkreślenia)." +"Przykład: '/about/contact/'. Upewnij się że wpisałeś otwierający i " +"zamykający ukośnik." -#: contrib/auth/models.py:100 -msgid "first name" -msgstr "Imię" +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "tytuł" -#: contrib/auth/models.py:101 -msgid "last name" -msgstr "Nazwisko" +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "zawartość" -#: contrib/auth/models.py:102 -msgid "e-mail address" -msgstr "adres e-mail" +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "włącz komentarze" -#: contrib/auth/models.py:103 -msgid "password" -msgstr "hasło" +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "nazwa szablonu" -#: contrib/auth/models.py:103 +#: contrib/flatpages/models.py:13 msgid "" -"Use '[algo]$[salt]$[hexdigest]' or use the change " -"password form." +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." msgstr "" -"Użyj '[algo]$[salt]$[hexdigest]' lub formularza zmiany " -"hasła." +"Przykład: 'flatpages/contact_page.html'. Jeżeli nie zostanie podane, system " +"użyje 'flatpages/default.html'." -#: contrib/auth/models.py:104 -msgid "staff status" -msgstr "w zespole" +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "wymagana rejestracja" -#: contrib/auth/models.py:104 -msgid "Designates whether the user can log into this admin site." -msgstr "Oznacza czy użytkownik może zalogować się do panelu admina." - -#: contrib/auth/models.py:105 -msgid "active" -msgstr "aktywny" - -#: contrib/auth/models.py:105 -msgid "" -"Designates whether this user can log into the Django admin. Unselect this " -"instead of deleting accounts." +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." msgstr "" -"Oznacza czy użytkownik może zalogować się do panelu administratora. Odznacz " -"to zamiast usuwać konta." +"Jeżeli zaznaczone - tylko zalogowani użytkownicy będą mogli zobaczyć stronę." -#: contrib/auth/models.py:106 -msgid "superuser status" -msgstr "Główny Administrator" +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "strona statyczna" -#: contrib/auth/models.py:106 -msgid "" -"Designates that this user has all permissions without explicitly assigning " -"them." -msgstr "" -"Oznacza, że ten użytkownik ma wszystkie uprawnienia bez jawnego " -"przypisywania ich." +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "strony statyczne" -#: contrib/auth/models.py:107 -msgid "last login" -msgstr "ostatnio zalogowany" +#: contrib/humanize/templatetags/humanize.py:20 +msgid "th" +msgstr "-y" -#: contrib/auth/models.py:108 -msgid "date joined" -msgstr "data przyłączenia" +#: contrib/humanize/templatetags/humanize.py:20 +msgid "st" +msgstr "-szy" -#: contrib/auth/models.py:110 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." -msgstr "" -"Oprócz uprawnień przypisanych bezpośrednio użytkownikowi otrzyma on " -"uprawnienia grup, do których należy." +#: contrib/humanize/templatetags/humanize.py:20 +msgid "nd" +msgstr "-gi" -#: contrib/auth/models.py:111 -msgid "user permissions" -msgstr "uprawnienia użytkownika" +#: contrib/humanize/templatetags/humanize.py:20 +msgid "rd" +msgstr "-ci" -#: contrib/auth/models.py:115 -msgid "user" -msgstr "użytkownik" +#: contrib/humanize/templatetags/humanize.py:52 +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f miliony" +msgstr[2] "%(value).1f milionów" -#: contrib/auth/models.py:116 -msgid "users" -msgstr "użytkownicy" +#: contrib/humanize/templatetags/humanize.py:55 +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliard" +msgstr[1] "%(value).1f miliardy" +msgstr[2] "%(value).1f miliardów" -#: contrib/auth/models.py:122 -msgid "Personal info" -msgstr "Dane osobowe" +#: contrib/humanize/templatetags/humanize.py:58 +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f bilion" +msgstr[1] "%(value).1f biliony" +msgstr[2] "%(value).1f bilionów" -#: contrib/auth/models.py:123 -msgid "Permissions" -msgstr "Uprawnienia" +#: contrib/humanize/templatetags/humanize.py:74 +msgid "one" +msgstr "jeden" -#: contrib/auth/models.py:124 -msgid "Important dates" -msgstr "Ważne daty" +#: contrib/humanize/templatetags/humanize.py:74 +msgid "two" +msgstr "dwa" -#: contrib/auth/models.py:125 -msgid "Groups" -msgstr "Grupy" +#: contrib/humanize/templatetags/humanize.py:74 +msgid "three" +msgstr "trzy" -#: contrib/auth/models.py:269 -msgid "message" -msgstr "wiadomość" +#: contrib/humanize/templatetags/humanize.py:74 +msgid "four" +msgstr "cztery" -#: contrib/auth/models.py:282 -msgid "AnonymousUser" -msgstr "UżytkownikAnonimowy" +#: contrib/humanize/templatetags/humanize.py:74 +msgid "five" +msgstr "pięć" -#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 -msgid "The two password fields didn't match." -msgstr "Hasła się nie zgadzają." +#: contrib/humanize/templatetags/humanize.py:74 +msgid "six" +msgstr "sześć" -#: contrib/auth/forms.py:25 -msgid "A user with that username already exists." -msgstr "Użytkownik o tej nazwie już istnieje." +#: contrib/humanize/templatetags/humanize.py:74 +msgid "seven" +msgstr "siedem" -#: contrib/auth/forms.py:53 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -msgstr "" -"Twoja przeglądarka nie chce akceptować ciasteczek. Są one wymagane do " -"zalogowania się." +#: contrib/humanize/templatetags/humanize.py:74 +msgid "eight" +msgstr "osiem" -#: contrib/auth/forms.py:62 -msgid "This account is inactive." -msgstr "To konto jest nieaktywne." +#: contrib/humanize/templatetags/humanize.py:74 +msgid "nine" +msgstr "dziewięć" -#: contrib/auth/forms.py:85 -msgid "" -"That e-mail address doesn't have an associated user account. Are you sure " -"you've registered?" -msgstr "" -"Ten adres e-mail nie ma przypisanego konta. Jesteś pewien, że " -"zarejestrowałeś się?" +#: contrib/humanize/templatetags/humanize.py:94 +msgid "today" +msgstr "dzisiaj" -#: contrib/auth/forms.py:117 -msgid "The two 'new password' fields didn't match." -msgstr "Pola 'nowe hasło' nie zgadzają się." +#: contrib/humanize/templatetags/humanize.py:96 +msgid "tomorrow" +msgstr "jutro" -#: contrib/auth/forms.py:124 -msgid "Your old password was entered incorrectly. Please enter it again." -msgstr "Podane stare hasło jest niepoprawne. Proszę podać je jeszcze raz." +#: contrib/humanize/templatetags/humanize.py:98 +msgid "yesterday" +msgstr "wczoraj" -#: contrib/localflavor/uk/forms.py:18 -msgid "Enter a postcode. A space is required between the two postcode parts." -msgstr "Wpisz kod pocztowy. Biały znak pomiędzy dwiema częściami kodu jest wymagany." +#: contrib/localflavor/ar/forms.py:30 contrib/localflavor/ar/forms.py:38 +msgid "Enter a postal code in the format NNNN or ANNNNAAA." +msgstr "Wpisz kod pocztowy w formacie NNNN lub ANNNNAAA." -#: contrib/localflavor/br/forms.py:18 -msgid "Enter a zip code in the format XXXXX-XXX." -msgstr "Wpisz kod pocztowy w formacie XXXXX-XXX." - -#: contrib/localflavor/br/forms.py:30 -msgid "Phone numbers must be in XX-XXXX-XXXX format." -msgstr "Numery telefoniczne muszą być w formacie XX-XXXX-XXXX." - -#: contrib/localflavor/br/forms.py:72 +#: 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 "To pole może zawierać jedynie liczby." -#: contrib/localflavor/br/forms.py:74 -msgid "This field requires at most 11 digits or 14 characters." -msgstr "To pole nie może zawierać więcej niż 11 cyfr lub 14 znaków." +#: contrib/localflavor/ar/forms.py:64 +msgid "This field requires 7 or 8 digits." +msgstr "To pole musi zawierać 7 lub 8 cyfr." -#: contrib/localflavor/br/forms.py:84 -msgid "Invalid CPF number." -msgstr "Błędny numer CPF." +#: contrib/localflavor/ar/forms.py:75 +msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format." +msgstr "Podaj poprawny numer CUIT w formacie XX-XXXXXXXX-X lub XXXXXXXXXXXX." -#: contrib/localflavor/br/forms.py:106 -msgid "This field requires at least 14 digits" -msgstr "To pole musi zawierać co najmniej 14 cyfr." - -#: contrib/localflavor/br/forms.py:116 -msgid "Invalid CNPJ number." -msgstr "Błędny numer CNPJ." +#: contrib/localflavor/ar/forms.py:88 +msgid "Invalid CUIT." +msgstr "Niepoprawny CUIT" #: contrib/localflavor/au/forms.py:18 msgid "Enter a 4 digit post code." msgstr "Wpisz czterocyfrowy kod pocztowy." -#: contrib/localflavor/fr/forms.py:17 contrib/localflavor/de/forms.py:16 -#: contrib/localflavor/fi/forms.py:14 -msgid "Enter a zip code in the format XXXXX." -msgstr "Wpisz kod pocztowy w formacie XXXXX." +#: contrib/localflavor/br/forms.py:23 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "Wpisz kod pocztowy w formacie XXXXX-XXX." -#: contrib/localflavor/us/forms.py:18 -msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." -msgstr "Wpisz kod pocztowy w formacie XXXXX. lub XXXXX-XXXX." +#: contrib/localflavor/br/forms.py:35 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "Numery telefoniczne muszą być w formacie XX-XXXX-XXXX." -#: contrib/localflavor/us/forms.py:51 -msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." -msgstr "Wpisz poprawny numer U.S. Social Security w formacie XXX-XX-XXXX." +#: contrib/localflavor/br/forms.py:68 +msgid "" +"Select a valid brazilian state. That state is not one of the available " +"states." +msgstr "" +"Wybierz poprawny brazylijski stan. Ten stan nie jest jednym z dostępnych " +"stanów." + +#: contrib/localflavor/br/forms.py:105 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "To pole nie może zawierać więcej niż 11 cyfr lub 14 znaków." + +#: contrib/localflavor/br/forms.py:115 +msgid "Invalid CPF number." +msgstr "Błędny numer CPF." + +#: contrib/localflavor/br/forms.py:137 +msgid "This field requires at least 14 digits" +msgstr "To pole musi zawierać co najmniej 14 cyfr." + +#: contrib/localflavor/br/forms.py:147 +msgid "Invalid CNPJ number." +msgstr "Błędny numer CNPJ." + +#: contrib/localflavor/ca/forms.py:19 +msgid "Enter a postal code in the format XXX XXX." +msgstr "Wpisz kod pocztowy w formacie XXX XXX." + +#: contrib/localflavor/ca/forms.py:81 +msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXXX format." +msgstr "" +"Wpisz poprawny numer kanadyjskiego ubezpieczenia w formacie XXX-XXX-XXXX." + +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "" + +#: 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 "Wpisz kod pocztowy w formacie XXXX." + +#: contrib/localflavor/ch/forms.py:90 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "" +"Podaj poprawny numer szwajcarskiego dowodu osobistego lub paszportu w " +"formacie X1234567<0 lub 1234567890." + +#: contrib/localflavor/cl/forms.py:32 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "Podaj poprawny czilijski RUT w formacie XX.XXX.XXX-X." + +#: contrib/localflavor/cl/forms.py:37 +msgid "Enter valid a Chilean RUT" +msgstr "Wpisz poprawny czilijski RUT" #: contrib/localflavor/de/de_states.py:5 msgid "Baden-Wuerttemberg" -msgstr "" +msgstr "Badenia-Wirtembergia" #: contrib/localflavor/de/de_states.py:6 msgid "Bavaria" -msgstr "" +msgstr "Bawaria" #: contrib/localflavor/de/de_states.py:7 msgid "Berlin" -msgstr "" +msgstr "Berlin" #: contrib/localflavor/de/de_states.py:8 msgid "Brandenburg" -msgstr "" +msgstr "Brandenburgia" #: contrib/localflavor/de/de_states.py:9 msgid "Bremen" -msgstr "" +msgstr "Brema" #: contrib/localflavor/de/de_states.py:10 msgid "Hamburg" -msgstr "" +msgstr "Hamburg" #: contrib/localflavor/de/de_states.py:11 msgid "Hessen" -msgstr "" +msgstr "Hesja" #: contrib/localflavor/de/de_states.py:12 msgid "Mecklenburg-Western Pomerania" -msgstr "" +msgstr "Meklemburgia-Pomorze Zachodnie" #: contrib/localflavor/de/de_states.py:13 msgid "Lower Saxony" -msgstr "" +msgstr "Dolna Saksonia" #: contrib/localflavor/de/de_states.py:14 msgid "North Rhine-Westphalia" -msgstr "" +msgstr "Nadrenia Północna-Westfalia" #: contrib/localflavor/de/de_states.py:15 msgid "Rhineland-Palatinate" -msgstr "" +msgstr "Nadrenia-Palatynat" #: contrib/localflavor/de/de_states.py:16 msgid "Saarland" -msgstr "" +msgstr "Kraj Saary" #: contrib/localflavor/de/de_states.py:17 msgid "Saxony" -msgstr "" +msgstr "Saksonia" #: contrib/localflavor/de/de_states.py:18 msgid "Saxony-Anhalt" -msgstr "" +msgstr "Saksonia-Anhalt" #: contrib/localflavor/de/de_states.py:19 msgid "Schleswig-Holstein" @@ -2280,7 +1942,12 @@ msgstr "" #: contrib/localflavor/de/de_states.py:20 msgid "Thuringia" -msgstr "" +msgstr "Turyngia" + +#: 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 "Wpisz kod pocztowy w formacie XXXXX." #: contrib/localflavor/de/forms.py:60 msgid "" @@ -2290,6 +1957,357 @@ msgstr "" "Podaj poprawny niemiecki numer dowodu osobistego w formacie XXXXXXXXXXX-" "XXXXXXX-XXXXXXX-X." +#: contrib/localflavor/es/es_provinces.py:5 +msgid "Arava" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:6 +msgid "Albacete" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:7 +msgid "Alacant" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:8 +msgid "Almeria" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:9 +msgid "Avila" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:10 +msgid "Badajoz" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:11 +msgid "Illes Balears" +msgstr "" + +#: 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 +#, fuzzy +msgid "Granada" +msgstr "Kannada" + +#: 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 +#, fuzzy +msgid "Huesca" +msgstr "Wtorek" + +#: contrib/localflavor/es/es_provinces.py:27 +#, fuzzy +msgid "Jaen" +msgstr "Sty." + +#: contrib/localflavor/es/es_provinces.py:28 +#, fuzzy +msgid "Leon" +msgstr "Zaloguj się" + +#: 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 +#, fuzzy +msgid "Palencia" +msgstr "Galicyjski" + +#: 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/localflavor/es/es_provinces.py:43 +#: contrib/localflavor/es/es_regions.py:11 +#, fuzzy +msgid "Cantabria" +msgstr "Kataloński" + +#: contrib/localflavor/es/es_provinces.py:44 +#, fuzzy +msgid "Segovia" +msgstr "Słoweński" + +#: contrib/localflavor/es/es_provinces.py:45 +msgid "Seville" +msgstr "" + +#: contrib/localflavor/es/es_provinces.py:46 +#, fuzzy +msgid "Soria" +msgstr "Serbski" + +#: 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 +#, fuzzy +msgid "Valencia" +msgstr "Galicyjski" + +#: 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 +#, fuzzy +msgid "Catalonia" +msgstr "Kataloński" + +#: contrib/localflavor/es/es_regions.py:15 +msgid "Extremadura" +msgstr "" + +#: contrib/localflavor/es/es_regions.py:16 +#, fuzzy +msgid "Galicia" +msgstr "Galicyjski" + +#: 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 "Wpisz kod pocztowy w zakresie i formacie 01XXX - 52XX." + +#: contrib/localflavor/es/forms.py:39 +msgid "" +"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or " +"9XXXXXXXX." +msgstr "" +"Wpisz numer telefoniczny w formacie 6XXXXXXXX, 8XXXXXXXX lub 9XXXXXXXX." + +#: 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 "Proszę wpisać poprawne %s." + +#: contrib/localflavor/es/forms.py:91 +msgid "Invalid checksum for NIF." +msgstr "Niepoprawna suma kontrolna NIF." + +#: contrib/localflavor/es/forms.py:97 +msgid "Invalid checksum for NIE." +msgstr "Niepoprawna suma kontrolna NIE." + +#: contrib/localflavor/es/forms.py:106 +msgid "Invalid checksum for CIF." +msgstr "Niepoprawna suma kontrolna CIF." + +#: contrib/localflavor/es/forms.py:136 +msgid "" +"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX." +msgstr "" +"Podaj poprawny numer konta bankowego w formacie XXXX-XXXX-XX-XXXXXXXXXX." + +#: contrib/localflavor/es/forms.py:150 +msgid "Invalid checksum for bank account number." +msgstr "Niepoprawna suma kontrolna numeru konta bankowego." + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 +msgid "Enter a valid Finnish social security number." +msgstr "Wpis poprawny numer fińskiego ubezpieczenia socjalnego." + +#: contrib/localflavor/in_/forms.py:16 +msgid "Enter a zip code in the format XXXXXXX." +msgstr "Wpisz kod pocztowy w formacie XXXXXXX." + +#: contrib/localflavor/is_/forms.py:17 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "" +"Podaj poprawny numer islandzkiego dowodu osobistego w formacie XXXXXX-XXXX." + +#: contrib/localflavor/is_/forms.py:31 +msgid "The Icelandic identification number is not valid." +msgstr "Numer islandzkiego dowodu osobistego jest błędny." + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "Wpisz poprawny kod pocztowy." + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "Wpisz poprawny numer ubezpieczenia socjalnego." + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "Wpisz poprawny numer VAT." + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "Wpisz kod pocztowy w formacie XXXXXXX lub XXX-XXXX." + #: contrib/localflavor/jp/jp_prefectures.py:4 msgid "Hokkaido" msgstr "" @@ -2478,225 +2496,1192 @@ msgstr "" msgid "Okinawa" msgstr "" -#: contrib/localflavor/jp/forms.py:21 -msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." -msgstr "Wpisz kod pocztowy w formacie XXXXXXX lub XXX-XXXX." - -#: contrib/localflavor/it/forms.py:16 -msgid "Enter a valid zip code." +#: contrib/localflavor/nl/forms.py:25 +msgid "Enter a valid postal code" msgstr "Wpisz poprawny kod pocztowy." -#: contrib/localflavor/it/forms.py:41 -msgid "Enter a valid Social Security number." -msgstr "Wpisz poprawny numer ubezpieczenia socjalnego." +#: contrib/localflavor/nl/forms.py:53 +msgid "Enter a valid phone number" +msgstr "Wpisz poprawny numer telefonu." -#: contrib/localflavor/it/forms.py:68 -msgid "Enter a valid VAT number." -msgstr "Wpisz poprawny numer VAT." +#: contrib/localflavor/nl/forms.py:76 +msgid "Enter a valid SoFi number" +msgstr "Wpisz poprawny numer SoFi." -#: contrib/localflavor/no/forms.py:15 contrib/localflavor/ch/forms.py:18 -msgid "Enter a zip code in the format XXXX." -msgstr "Wpisz kod pocztowy w formacie XXXX." +#: contrib/localflavor/nl/nl_provinces.py:4 +#, fuzzy +msgid "Drente" +msgstr "Usuń" -#: contrib/localflavor/no/forms.py:36 +#: contrib/localflavor/nl/nl_provinces.py:5 +msgid "Flevoland" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:6 +msgid "Friesland" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:7 +#, fuzzy +msgid "Gelderland" +msgstr "Niemiecki" + +#: contrib/localflavor/nl/nl_provinces.py:8 +#, fuzzy +msgid "Groningen" +msgstr "dziewięć" + +#: contrib/localflavor/nl/nl_provinces.py:9 +msgid "Limburg" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:10 +msgid "Noord-Brabant" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:11 +msgid "Noord-Holland" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:12 +msgid "Overijssel" +msgstr "" + +#: contrib/localflavor/nl/nl_provinces.py:13 +#, fuzzy +msgid "Utrecht" +msgstr "Francuski" + +#: contrib/localflavor/nl/nl_provinces.py:14 +#, fuzzy +msgid "Zeeland" +msgstr "Islandzki" + +#: 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 "Wpis poprawny numer norweskiego ubezpieczenia socjalnego." -#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 -msgid "Enter a valid Finnish social security number." -msgstr "Wpis poprawny numer fińskiego ubezpieczenia socjalnego." +#: contrib/localflavor/pe/forms.py:36 +msgid "This field requires 8 digits." +msgstr "To pole musi zawierać 8 cyfr." -#: contrib/localflavor/ch/ch_states.py:5 -msgid "Aargau" -msgstr "" +#: contrib/localflavor/pe/forms.py:59 +msgid "This field requires 11 digits." +msgstr "To pole musi zawierać 11 cyfr." -#: contrib/localflavor/ch/ch_states.py:6 -msgid "Appenzell Innerrhoden" -msgstr "" +#: contrib/localflavor/pl/forms.py:41 +msgid "National Identification Number consists of 11 digits." +msgstr "Numer PESEL składa się z 11 cyfr." -#: contrib/localflavor/ch/ch_states.py:7 -msgid "Appenzell Ausserrhoden" -msgstr "" +#: contrib/localflavor/pl/forms.py:47 +msgid "Wrong checksum for the National Identification Number." +msgstr "Błędna suma kontrolna numeru PESEL." -#: contrib/localflavor/ch/ch_states.py:8 -msgid "Basel-Stadt" -msgstr "" - -#: contrib/localflavor/ch/ch_states.py:9 -msgid "Basel-Land" -msgstr "" - -#: contrib/localflavor/ch/ch_states.py:10 -msgid "Berne" -msgstr "" - -#: 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:90 +#: contrib/localflavor/pl/forms.py:72 msgid "" -"Enter a valid Swiss identity or passport card number in X1234567<0 or " -"1234567890 format." -msgstr "Podaj poprawny numer szwajarskiego dowodu osobistego lub paszportu w formacie X1234567<0 lub 1234567890." +"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX." +msgstr "Wpisz numer NIP w formacie XXX-XXX-XX-XX or XX-XX-XXX-XXX." -#: contrib/localflavor/is_/forms.py:16 -msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." -msgstr "Podaj poprawny numer islandzkiego dowodu osobistego w formacie XXXXXX-XXXX." +#: contrib/localflavor/pl/forms.py:78 +msgid "Wrong checksum for the Tax Number (NIP)." +msgstr "Błędna suma kontrolna numeru NIP" -#: contrib/localflavor/is_/forms.py:30 -msgid "The Icelandic identification number is not valid." -msgstr "Numer islandzkiego dowodu osobistego jest błędny." +#: contrib/localflavor/pl/forms.py:107 +msgid "National Business Register Number (REGON) consists of 7 or 9 digits." +msgstr "Numer REGON składa się z 7 lub 9 cyfr." -#: contrib/localflavor/cl/forms.py:21 -msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." -msgstr "Podaj poprawny czilijski RUT w formacie XX.XXX.XXX-X." +#: contrib/localflavor/pl/forms.py:113 +msgid "Wrong checksum for the National Business Register Number (REGON)." +msgstr "Błędna suma kontrolna numeru REGON" -#: contrib/localflavor/cl/forms.py:26 -msgid "Enter valid a Chilean RUT" -msgstr "Wpisz poprawny czilijski RUT" +#: contrib/localflavor/pl/forms.py:148 +msgid "Enter a postal code in the format XX-XXX." +msgstr "Wpisz kod pocztowy w formacie XX-XXX." -#: contrib/sessions/models.py:68 +#: contrib/localflavor/pl/pl_voivodeships.py:8 +msgid "Lower Silesia" +msgstr "Dolnośląskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:9 +msgid "Kuyavia-Pomerania" +msgstr "Kujawsko-Pomorskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:10 +msgid "Lublin" +msgstr "Lubelskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:11 +msgid "Lubusz" +msgstr "Lubuskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:12 +msgid "Lodz" +msgstr "Łódzkie" + +#: contrib/localflavor/pl/pl_voivodeships.py:13 +msgid "Lesser Poland" +msgstr "Małopolskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:14 +msgid "Masovia" +msgstr "Mazowieckie" + +#: contrib/localflavor/pl/pl_voivodeships.py:15 +msgid "Opole" +msgstr "Opolskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:16 +msgid "Subcarpatia" +msgstr "Podkarpackie" + +#: contrib/localflavor/pl/pl_voivodeships.py:17 +msgid "Podlasie" +msgstr "Podlaskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:18 +msgid "Pomerania" +msgstr "Pomorskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:19 +msgid "Silesia" +msgstr "Śląskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:20 +msgid "Swietokrzyskie" +msgstr "Świętokrzyskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:21 +msgid "Warmia-Masuria" +msgstr "Warmińsko-Mazurskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:22 +msgid "Greater Poland" +msgstr "Wielkopolskie" + +#: contrib/localflavor/pl/pl_voivodeships.py:23 +msgid "West Pomerania" +msgstr "Zachodniopomorskie" + +#: contrib/localflavor/sk/forms.py:32 +msgid "Enter a postal code in the format XXXXX or XXX XX." +msgstr "Wpisz kod pocztowy w formacie XXXXX or XXX XX." + +#: contrib/localflavor/sk/sk_districts.py:8 +msgid "Banska Bystrica" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:9 +msgid "Banska Stiavnica" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:10 +msgid "Bardejov" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:11 +msgid "Banovce nad Bebravou" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:12 +msgid "Brezno" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:13 +msgid "Bratislava I" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:14 +msgid "Bratislava II" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:15 +msgid "Bratislava III" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:16 +msgid "Bratislava IV" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:17 +msgid "Bratislava V" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:18 +msgid "Bytca" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:19 +msgid "Cadca" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:20 +msgid "Detva" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:21 +msgid "Dolny Kubin" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:22 +msgid "Dunajska Streda" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:23 +#, fuzzy +msgid "Galanta" +msgstr "Galicyjski" + +#: contrib/localflavor/sk/sk_districts.py:24 +#, fuzzy +msgid "Gelnica" +msgstr "Galicyjski" + +#: contrib/localflavor/sk/sk_districts.py:25 +msgid "Hlohovec" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:26 +msgid "Humenne" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:27 +msgid "Ilava" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:28 +msgid "Kezmarok" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:29 +#, fuzzy +msgid "Komarno" +msgstr "Koreański" + +#: contrib/localflavor/sk/sk_districts.py:30 +msgid "Kosice I" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:31 +msgid "Kosice II" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:32 +msgid "Kosice III" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:33 +msgid "Kosice IV" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:34 +msgid "Kosice - okolie" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:35 +msgid "Krupina" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:36 +msgid "Kysucke Nove Mesto" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:37 +msgid "Levice" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:38 +msgid "Levoca" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:39 +msgid "Liptovsky Mikulas" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:40 +msgid "Lucenec" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:41 +#, fuzzy +msgid "Malacky" +msgstr "Maj" + +#: contrib/localflavor/sk/sk_districts.py:42 +#, fuzzy +msgid "Martin" +msgstr "Łotewski" + +#: contrib/localflavor/sk/sk_districts.py:43 +msgid "Medzilaborce" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:44 +msgid "Michalovce" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:45 +msgid "Myjava" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:46 +msgid "Namestovo" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:47 +msgid "Nitra" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:48 +msgid "Nove Mesto nad Vahom" +msgstr "" + +#: 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 +#, fuzzy +msgid "Sabinov" +msgstr "list" + +#: contrib/localflavor/sk/sk_districts.py:64 +msgid "Senec" +msgstr "" + +#: contrib/localflavor/sk/sk_districts.py:65 +#, fuzzy +msgid "Senica" +msgstr "Słoweński" + +#: contrib/localflavor/sk/sk_districts.py:66 +#, fuzzy +msgid "Skalica" +msgstr "Galicyjski" + +#: contrib/localflavor/sk/sk_districts.py:67 +#, fuzzy +msgid "Snina" +msgstr "dziewięć" + +#: 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 +#, fuzzy +msgid "Sala" +msgstr "Słowacki" + +#: 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 +#, fuzzy +msgid "Trencin" +msgstr "Francuski" + +#: 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 "" +"Wpisz kod pocztowy. Biały znak pomiędzy dwiema częściami kodu jest wymagany." + +#: contrib/localflavor/us/forms.py:18 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "Wpisz kod pocztowy w formacie XXXXX. lub XXXXX-XXXX." + +#: contrib/localflavor/us/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "Wpisz poprawny numer U.S. Social Security w formacie XXX-XX-XXXX." + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "przekieruj z" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "Podaj pełną ścieżkę bez nazwy domeny. Przykład: '/events/search/'." + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "przekierowanie do" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "Ścieżka jak wyżej lub pełny URL z http://" + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "przekieruj" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "przekierowania" + +#: contrib/sessions/models.py:80 msgid "session key" msgstr "klucz sesji" -#: contrib/sessions/models.py:69 +#: contrib/sessions/models.py:81 msgid "session data" msgstr "data sesji" -#: contrib/sessions/models.py:70 +#: contrib/sessions/models.py:82 msgid "expire date" msgstr "data wygaśnięcia sesji" -#: contrib/sessions/models.py:74 +#: contrib/sessions/models.py:87 msgid "session" msgstr "sesja" -#: contrib/sessions/models.py:75 +#: contrib/sessions/models.py:88 msgid "sessions" msgstr "sesje" -#: contrib/flatpages/models.py:8 -msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "" -"Przykład: '/about/contact/'. Upewnij się że wpisałeś otwierający i " -"zamykający ukośnik." +#: contrib/sites/models.py:32 +msgid "domain name" +msgstr "nazwa domeny" -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "tytuł" +#: contrib/sites/models.py:33 +msgid "display name" +msgstr "wyświetlana nazwa" -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "zawartość" +#: contrib/sites/models.py:37 +msgid "site" +msgstr "strona" -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "włącz komentarze" +#: contrib/sites/models.py:38 +msgid "sites" +msgstr "strony" -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "nazwa szablonu" +#: core/validators.py:72 +msgid "This value must contain only letters, numbers and underscores." +msgstr "To pole może zawierać tylko litery, cyfry i podkreślenia." -#: contrib/flatpages/models.py:13 +#: core/validators.py:76 msgid "" -"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " -"will use 'flatpages/default.html'." +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." msgstr "" -"Przykład: 'flatpages/contact_page.html'. Jeżeli nie zostanie podane, system " -"użyje 'flatpages/default.html'." +"To pole może zawierać jedynie litery, cyfry, podkreślenia, myślniki i " +"ukośniki." -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "wymagana rejestracja" +#: core/validators.py:80 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "To pole może zawierać jedynie litery, cyfry, podkreślenia i pauzy." -#: contrib/flatpages/models.py:14 -msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "Jeżeli zaznaczone - tylko zalogowani użytkownicy będą mogli zobaczyć stronę." +#: core/validators.py:84 +msgid "Uppercase letters are not allowed here." +msgstr "Wielkie litery nie są tutaj dozwolone." -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "strona statyczna" +#: core/validators.py:88 +msgid "Lowercase letters are not allowed here." +msgstr "Małe litery nie są tutaj dozwolone." -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "strony statyczne" +#: core/validators.py:95 +msgid "Enter only digits separated by commas." +msgstr "Wpisz tylko cyfry odddzielone przecinkami." + +#: core/validators.py:107 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Wpisz poprawne adresy e-mail oddzielone przecinkami." + +#: core/validators.py:111 +msgid "Please enter a valid IP address." +msgstr "Proszę wpisać poprawny adres IP." + +#: core/validators.py:115 +msgid "Empty values are not allowed here." +msgstr "Proszę wypełnić te pola." + +#: core/validators.py:119 +msgid "Non-numeric characters aren't allowed here." +msgstr "Tu mogą być tylko cyfry." + +#: core/validators.py:123 +msgid "This value can't be comprised solely of digits." +msgstr "To pole nie może zawierać jedynie cyfr." + +#: core/validators.py:128 newforms/fields.py:157 +msgid "Enter a whole number." +msgstr "Wpisz liczbę całkowitą." + +#: core/validators.py:132 +msgid "Only alphabetical characters are allowed here." +msgstr "Tutaj są dozwolone tylko litery." + +#: core/validators.py:147 +msgid "Year must be 1900 or later." +msgstr "Rok nie może być wcześniejszy niż 1900." + +#: core/validators.py:151 +#, python-format +msgid "Invalid date: %s" +msgstr "Niepoprawna data: %s" + +#: core/validators.py:156 db/models/fields/__init__.py:509 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "Proszę wpisać poprawną datę w formacie RRRR-MM-DD." + +#: core/validators.py:161 +msgid "Enter a valid time in HH:MM format." +msgstr "Proszę wpisać poprawną godzinę w formacie HH:MM." + +#: core/validators.py:165 db/models/fields/__init__.py:583 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "Wprowadź poprawną datę i godzinę w formacie RRRR-MM-DD GG:MM." + +#: core/validators.py:170 newforms/fields.py:408 +msgid "Enter a valid e-mail address." +msgstr "Wprowadź poprawny adres e-mail." + +#: 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 "Nie wysłano żadnego pliku. Sprawdź typ kodowania formularza." + +#: 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 "" +"Wgraj poprawny plik graficzny. Ten, który został wgrany, nie jest obrazem, " +"albo jest uszkodzony." + +#: core/validators.py:200 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "Odnośnik %s nie wskazuje na poprawny plik z obrazem." + +#: core/validators.py:204 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" +"Numery telefoniczne muszą być w formacie XXX-XXX-XXXX. \"%s\" jest " +"niepoprawny." + +#: core/validators.py:212 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "Odnośnik %s nie wskazuje na poprawne nagranie QuickTime video." + +#: core/validators.py:216 +msgid "A valid URL is required." +msgstr "Wymagany jest poprawny URL." + +#: core/validators.py:230 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"Wymagany jest poprawny HTML. Błędy, które wystąpiły:\n" +"%s" + +#: core/validators.py:237 +#, python-format +msgid "Badly formed XML: %s" +msgstr "Nieprawidłowy format XML: %s" + +#: core/validators.py:254 +#, python-format +msgid "Invalid URL: %s" +msgstr "Niepoprawny odnośnik: %s" + +#: core/validators.py:259 core/validators.py:261 +#, python-format +msgid "The URL %s is a broken link." +msgstr "Odnośnik %s jest nieprawidłowy." + +#: core/validators.py:267 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Wpisz poprawny kod stanu U.S.A." + +#: 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] "Nie wolno przeklinać! Słowo %s nie jest dozwolone." +msgstr[1] "Nie wolno przeklinać! Słowa %s nie są dozwolone." +msgstr[2] "Nie wolno przeklinać! Słowa %s nie są dozwolone." + +#: core/validators.py:288 +#, python-format +msgid "This field must match the '%s' field." +msgstr "To pole musi pasować do pola '%s'." + +#: core/validators.py:307 +msgid "Please enter something for at least one field." +msgstr "Proszę uzupełnić przynajmniej jedno pole." + +#: core/validators.py:316 core/validators.py:327 +msgid "Please enter both fields or leave them both empty." +msgstr "Proszę uzupełnić oba pola lub zostawić je puste." + +#: core/validators.py:335 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "To pole musi być uzupełnione, jeśli %(field)s ma wartość %(value)s" + +#: core/validators.py:348 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "" +"To pole musi być uzupełnione, jeśli %(field)s ma wartość inną niż %(value)s" + +#: core/validators.py:367 +msgid "Duplicate values are not allowed." +msgstr "Duplikaty nie są dozwolone." + +#: core/validators.py:382 +#, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "Ta wartość musi być pomiędzy %(lower)s a %(upper)s." + +#: core/validators.py:384 +#, python-format +msgid "This value must be at least %s." +msgstr "Ta wartość nie może być mniejsza od %s." + +#: core/validators.py:386 +#, python-format +msgid "This value must be no more than %s." +msgstr "Ta wartość nie może być większa od %s." + +#: core/validators.py:427 +#, python-format +msgid "This value must be a power of %s." +msgstr "Ta wartość musi być potęgą %s." + +#: core/validators.py:437 +msgid "Please enter a valid decimal number." +msgstr "Proszę wpisać poprawną liczbę dziesiętną." + +#: core/validators.py:444 +#, python-format +msgid "Please enter a valid decimal number with at most %s total digit." +msgid_plural "" +"Please enter a valid decimal number with at most %s total digits." +msgstr[0] "" +"Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrze." +msgstr[1] "" +"Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrach." +msgstr[2] "" +"Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrach." + +#: core/validators.py:447 +#, python-format +msgid "" +"Please enter a valid decimal number with a whole part of at most %s digit." +msgid_plural "" +"Please enter a valid decimal number with a whole part of at most %s digits." +msgstr[0] "" +"Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfrę." +msgstr[1] "" +"Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s " +"cyfry." +msgstr[2] "" +"Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfr." + +#: core/validators.py:450 +#, python-format +msgid "Please enter a valid decimal number with at most %s decimal place." +msgid_plural "" +"Please enter a valid decimal number with at most %s decimal places." +msgstr[0] "" +"Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsca po " +"przecinku." +msgstr[1] "" +"Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsc po " +"przecinku." +msgstr[2] "" +"Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsc po " +"przecinku." + +#: core/validators.py:458 +msgid "Please enter a valid floating point number." +msgstr "Proszę wpisać poprawną liczbę rzeczywistą." + +#: core/validators.py:467 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "Upewnij się, że wgrany plik ma conajmniej %s bajtów." + +#: core/validators.py:468 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "Upewnij się, że wgrany plik ma co najwyżej %s bajtów." + +#: core/validators.py:485 +msgid "The format for this field is wrong." +msgstr "Format tego pola jest nieprawidłowy." + +#: core/validators.py:500 +msgid "This field is invalid." +msgstr "To pole jest nieprawidłowe." + +#: core/validators.py:536 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "Nie można nic pobrać z %s." + +#: core/validators.py:539 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" +"URL %(url)s zwrócił niepoprawny nagłówek Content-Type '%(contenttype)s'." + +#: core/validators.py:572 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" +"Proszę zamknąć tag %(tag)s z linii %(line)s. (Linia zaczyna się od \"%(start)" +"s\".)" + +#: 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 "" +"Część tekstu od linii %(line)s nie jest dozwolony w tym kontekście. (Linia " +"zaczyna się od \"%(start)s\".)" + +#: core/validators.py:581 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"%(attr)s\" w linii %(line)s jest niepoprawnym atrybutem. (Linia zaczyna " +"się od \"%(start)s\".)" + +#: core/validators.py:586 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"<%(tag)s>\" w linii %(line)s nie jest poprawnym tagiem. (Linia zaczyna się " +"od \"%(start)s\".)" + +#: 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 "" +"Tag w linii %(line)s nie posiada jednego lub więcej wymaganych atrybutów. " +"(Linia zaczyna się od \"%(start)s\".)" + +#: 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 "" +"Atrybut \"%(attr)s\" w linii %(line)s ma niepoprawną wartość. (Linia zaczyna " +"się od \"%(start)s\".)" + +#: db/models/manipulators.py:308 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "%(object)s z %(type)s już istnieje dla %(field)s." + +#: db/models/fields/__init__.py:52 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "Już istnieje %(optname)s z %(fieldname)s." + +#: 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 newforms/models.py:220 oldforms/__init__.py:374 +msgid "This field is required." +msgstr "To pole jest wymagane." + +#: db/models/fields/__init__.py:418 +msgid "This value must be an integer." +msgstr "Ta wartość musi być liczbą całkowitą." + +#: db/models/fields/__init__.py:454 +msgid "This value must be either True or False." +msgstr "Ta wartość musi być logiczna (True, False - prawda lub fałsz)." + +#: db/models/fields/__init__.py:475 +msgid "This field cannot be null." +msgstr "To pole nie może być puste." + +#: db/models/fields/__init__.py:644 +msgid "This value must be a decimal number." +msgstr "Ta wartość musi być liczbą dziesiętną." + +#: db/models/fields/__init__.py:755 +msgid "Enter a valid filename." +msgstr "Wpisz poprawną nazwę pliku." + +#: db/models/fields/__init__.py:904 +msgid "This value must be either None, True or False." +msgstr "" +"Ta wartość musi być jedną z None (żadne), True (prawda) lub False (fałsz)." + +#: db/models/fields/related.py:658 +msgid "Separate multiple IDs with commas." +msgstr "Oddziel identyfikatory przecinkami." + +#: db/models/fields/related.py:660 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Przytrzymaj wciśnięty klawisz \"Ctrl\" lub \"Command\" na Mac'u aby " +"zaznaczyć więcej niż jeden wybór." + +#: 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] "" +"Proszę podać poprawne identyfikatory %(self)s. Wartość %(value)r jest " +"niepoprawna." +msgstr[1] "" +"Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są " +"niepoprawne." +msgstr[2] "" +"Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są " +"niepoprawne." + +#: newforms/fields.py:46 +msgid "Enter a valid value." +msgstr "Wpisz poprawną wartość." + +#: newforms/fields.py:129 +#, python-format +msgid "Ensure this value has at most %(max)d characters (it has %(length)d)." +msgstr "" +"Upewnij się, że ta wartość ma co najwyżej %(max)d znaków (ma długość %" +"(length)d)." + +#: newforms/fields.py:130 +#, python-format +msgid "Ensure this value has at least %(min)d characters (it has %(length)d)." +msgstr "" +"Upewnij się, że ta wartość ma co najmniej %(min)d znaków (ma długość %" +"(length)d)." + +#: 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 "Upewnij się, że ta wartość jest mniejsza lub równa %s." + +#: 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 "Upewnij się, że ta wartość jest większa lub równa %s." + +#: newforms/fields.py:186 newforms/fields.py:215 +msgid "Enter a number." +msgstr "Wpisz liczbę." + +#: newforms/fields.py:218 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "Upewnij się, że jest nie więcej niż %s cyfr." + +#: newforms/fields.py:219 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "Upewnij się, że jest nie więcej niż %s miejsc po przecinku." + +#: newforms/fields.py:220 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "Upewnij się, że jest nie więcej niż %s miejsc przed przecinkiem." + +#: newforms/fields.py:268 newforms/fields.py:724 +msgid "Enter a valid date." +msgstr "Wpisz poprawną datę." + +#: newforms/fields.py:301 newforms/fields.py:725 +msgid "Enter a valid time." +msgstr "Wpisz poprawną godzinę." + +#: newforms/fields.py:340 +msgid "Enter a valid date/time." +msgstr "Wpisz poprawną datę/godzinę." + +#: newforms/fields.py:439 +msgid "No file was submitted." +msgstr "Żaden plik nie został przesłany." + +#: newforms/fields.py:440 oldforms/__init__.py:689 +msgid "The submitted file is empty." +msgstr "Wysłany plik jest pusty." + +#: newforms/fields.py:498 +msgid "Enter a valid URL." +msgstr "Wpisz poprawny URL." + +#: newforms/fields.py:499 +msgid "This URL appears to be a broken link." +msgstr "Ten odnośnik jest nieprawidłowy." + +#: newforms/fields.py:560 newforms/models.py:203 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Wybierz poprawną wartość. Podana nie jest jednym z dostępnych wyborów." + +#: newforms/fields.py:599 +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Wybierz poprawną wartość. %(value)s nie jest jednym z dostępnych wyborów." + +#: newforms/fields.py:600 newforms/fields.py:662 newforms/models.py:224 +msgid "Enter a list of values." +msgstr "Podaj listę wartości." + +#: newforms/fields.py:753 +msgid "Enter a valid IPv4 address." +msgstr "Wprowadź poprawny adres IPv4." + +#: newforms/models.py:230 +#, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "Wybierz poprawną wartość. %s nie jest jednym z dostępnych wyborów." + +#: 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] "Upewnij się, że tekst ma mniej niż %s znak." +msgstr[1] "Upewnij się, że tekst ma mniej niż %s znaki." +msgstr[2] "Upewnij się, że tekst ma mniej niż %s znaków." + +#: oldforms/__init__.py:414 +msgid "Line breaks are not allowed here." +msgstr "Znaki nowej linii są tutaj niedopuszczalne." + +#: 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 "Wybierz poprawną opcję; '%(data)s' nie jest wśród %(choices)s." + +#: oldforms/__init__.py:745 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Proszę wpisać liczbę całkowitą z zakresu od -32 768 do 32 767" + +#: oldforms/__init__.py:755 +msgid "Enter a positive number." +msgstr "Proszę wpisać liczbę dodatnią." + +#: oldforms/__init__.py:765 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Proszę wpisać liczbę całkowitą z zakresu od 0 do 32 767" + +#: template/defaultfilters.py:655 +msgid "yes,no,maybe" +msgstr "tak,nie,może" + +#: template/defaultfilters.py:686 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajty" +msgstr[2] "%(size)d bajtów" + +#: template/defaultfilters.py:688 +#, python-format +msgid "%.1f KB" +msgstr "%.1f KB" + +#: template/defaultfilters.py:690 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: template/defaultfilters.py:691 +#, python-format +msgid "%.1f GB" +msgstr "%.1f GB" + +#: utils/dateformat.py:41 +msgid "p.m." +msgstr "po południu" + +#: utils/dateformat.py:42 +msgid "a.m." +msgstr "rano" + +#: utils/dateformat.py:47 +msgid "PM" +msgstr "po południu" + +#: utils/dateformat.py:48 +msgid "AM" +msgstr "rano" + +#: utils/dateformat.py:97 +msgid "midnight" +msgstr "północ" + +#: utils/dateformat.py:99 +msgid "noon" +msgstr "południe" #: utils/dates.py:6 msgid "Monday" @@ -2726,255 +3711,255 @@ msgstr "Sobota" msgid "Sunday" msgstr "Niedziela" -#: utils/dates.py:14 +#: utils/dates.py:10 +msgid "Mon" +msgstr "Pon" + +#: utils/dates.py:10 +msgid "Tue" +msgstr "Wt" + +#: utils/dates.py:10 +msgid "Wed" +msgstr "Śr" + +#: utils/dates.py:10 +msgid "Thu" +msgstr "Czw" + +#: utils/dates.py:10 +msgid "Fri" +msgstr "Pi" + +#: utils/dates.py:11 +msgid "Sat" +msgstr "So" + +#: utils/dates.py:11 +msgid "Sun" +msgstr "Nd" + +#: utils/dates.py:18 msgid "January" msgstr "Styczeń" -#: utils/dates.py:14 +#: utils/dates.py:18 msgid "February" msgstr "Luty" -#: utils/dates.py:14 utils/dates.py:27 +#: utils/dates.py:18 utils/dates.py:31 msgid "March" msgstr "Marzec" -#: utils/dates.py:14 utils/dates.py:27 +#: utils/dates.py:18 utils/dates.py:31 msgid "April" msgstr "Kwiecień" -#: utils/dates.py:14 utils/dates.py:27 +#: utils/dates.py:18 utils/dates.py:31 msgid "May" msgstr "Maj" -#: utils/dates.py:14 utils/dates.py:27 +#: utils/dates.py:18 utils/dates.py:31 msgid "June" msgstr "Czerwiec" -#: utils/dates.py:15 utils/dates.py:27 +#: utils/dates.py:19 utils/dates.py:31 msgid "July" msgstr "Lipiec" -#: utils/dates.py:15 +#: utils/dates.py:19 msgid "August" msgstr "Sierpień" -#: utils/dates.py:15 +#: utils/dates.py:19 msgid "September" msgstr "Wrzesień" -#: utils/dates.py:15 +#: utils/dates.py:19 msgid "October" msgstr "Pażdziernik" -#: utils/dates.py:15 +#: utils/dates.py:19 msgid "November" msgstr "Listopad" -#: utils/dates.py:16 +#: utils/dates.py:20 msgid "December" msgstr "Grudzień" -#: utils/dates.py:19 +#: utils/dates.py:23 msgid "jan" msgstr "sty" -#: utils/dates.py:19 +#: utils/dates.py:23 msgid "feb" msgstr "luty" -#: utils/dates.py:19 +#: utils/dates.py:23 msgid "mar" msgstr "marz" -#: utils/dates.py:19 +#: utils/dates.py:23 msgid "apr" msgstr "kwie" -#: utils/dates.py:19 +#: utils/dates.py:23 msgid "may" msgstr "maj" -#: utils/dates.py:19 +#: utils/dates.py:23 msgid "jun" msgstr "czerw" -#: utils/dates.py:20 +#: utils/dates.py:24 msgid "jul" msgstr "lip" -#: utils/dates.py:20 +#: utils/dates.py:24 msgid "aug" msgstr "sier" -#: utils/dates.py:20 +#: utils/dates.py:24 msgid "sep" msgstr "wrze" -#: utils/dates.py:20 +#: utils/dates.py:24 msgid "oct" msgstr "paź" -#: utils/dates.py:20 +#: utils/dates.py:24 msgid "nov" msgstr "list" -#: utils/dates.py:20 +#: utils/dates.py:24 msgid "dec" msgstr "gru" -#: utils/dates.py:27 +#: utils/dates.py:31 msgid "Jan." msgstr "Sty." -#: utils/dates.py:27 +#: utils/dates.py:31 msgid "Feb." msgstr "Lut." -#: utils/dates.py:28 +#: utils/dates.py:32 msgid "Aug." msgstr "Sier." -#: utils/dates.py:28 +#: utils/dates.py:32 msgid "Sept." msgstr "Wrz." -#: utils/dates.py:28 +#: utils/dates.py:32 msgid "Oct." msgstr "Paź." -#: utils/dates.py:28 +#: utils/dates.py:32 msgid "Nov." msgstr "Lis." -#: utils/dates.py:28 +#: utils/dates.py:32 msgid "Dec." msgstr "Gru." -#: utils/timesince.py:12 +#: utils/text.py:127 +msgid "or" +msgstr "lub" + +#: utils/timesince.py:21 msgid "year" msgid_plural "years" msgstr[0] "rok" msgstr[1] "lata" msgstr[2] "lat" -#: utils/timesince.py:13 +#: utils/timesince.py:22 msgid "month" msgid_plural "months" msgstr[0] "miesiąc" msgstr[1] "miesięce" msgstr[2] "miesięcy" -#: utils/timesince.py:14 +#: utils/timesince.py:23 msgid "week" msgid_plural "weeks" msgstr[0] "tydzień" msgstr[1] "tygodnie" msgstr[2] "tygodni" -#: utils/timesince.py:15 +#: utils/timesince.py:24 msgid "day" msgid_plural "days" msgstr[0] "dzień" msgstr[1] "dni" msgstr[2] "dni" -#: utils/timesince.py:16 +#: utils/timesince.py:25 msgid "hour" msgid_plural "hours" msgstr[0] "godzina" msgstr[1] "godziny" msgstr[2] "godzin" -#: utils/timesince.py:17 +#: utils/timesince.py:26 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" -#: utils/timesince.py:40 -#, python-format -msgid "%d milliseconds" -msgstr "%d milisekund" +#: utils/timesince.py:46 +msgid "minutes" +msgstr "minuty" -#: utils/timesince.py:41 +#: utils/timesince.py:51 #, python-format msgid "%(number)d %(type)s" msgstr "%(number)d %(type)s" -#: utils/timesince.py:47 +#: utils/timesince.py:57 #, python-format msgid ", %(number)d %(type)s" msgstr ", %(number)d %(type)s" -#: utils/dateformat.py:40 -msgid "p.m." -msgstr "po południu" - -#: utils/dateformat.py:41 -msgid "a.m." -msgstr "rano" - -#: utils/dateformat.py:46 -msgid "PM" -msgstr "po południu" - -#: utils/dateformat.py:47 -msgid "AM" -msgstr "rano" - -#: utils/dateformat.py:95 -msgid "midnight" -msgstr "północ" - -#: utils/dateformat.py:97 -msgid "noon" -msgstr "południe" - -#: utils/translation/trans_real.py:358 +#: utils/translation/trans_real.py:395 msgid "DATE_FORMAT" msgstr "Y-m-d" -#: utils/translation/trans_real.py:359 +#: utils/translation/trans_real.py:396 msgid "DATETIME_FORMAT" msgstr "Y-m-d H:i:s" -#: utils/translation/trans_real.py:360 +#: utils/translation/trans_real.py:397 msgid "TIME_FORMAT" msgstr "H:i:s" -#: utils/translation/trans_real.py:376 +#: utils/translation/trans_real.py:413 msgid "YEAR_MONTH_FORMAT" msgstr "Y-m" -#: utils/translation/trans_real.py:377 +#: utils/translation/trans_real.py:414 msgid "MONTH_DAY_FORMAT" msgstr "m-d" -#: template/defaultfilters.py:491 -msgid "yes,no,maybe" -msgstr "tak,nie,może" - -#: template/defaultfilters.py:520 +#: views/generic/create_update.py:43 #, python-format -msgid "%(size)d byte" -msgid_plural "%(size)d bytes" -msgstr[0] "%(size)d bajt" -msgstr[1] "%(size)d bajty" -msgstr[2] "%(size)d bajtów" +msgid "The %(verbose_name)s was created successfully." +msgstr "%(verbose_name)s zostało pomyślnie utworzone." -#: template/defaultfilters.py:522 +#: views/generic/create_update.py:117 #, python-format -msgid "%.1f KB" -msgstr "%.1f KB" +msgid "The %(verbose_name)s was updated successfully." +msgstr "%(verbose_name)s zostało pomyślnie zmienione." -#: template/defaultfilters.py:524 +#: views/generic/create_update.py:184 #, python-format -msgid "%.1f MB" -msgstr "%.1f MB" +msgid "The %(verbose_name)s was deleted." +msgstr "%(verbose_name)s zostało usunięte." -#: template/defaultfilters.py:525 -#, python-format -msgid "%.1f GB" -msgstr "%.1f GB" +#~ msgid "AnonymousUser" +#~ msgstr "UżytkownikAnonimowy" +#~ msgid "%d milliseconds" +#~ msgstr "%d milisekund" diff --git a/django/contrib/admin/media/css/base.css b/django/contrib/admin/media/css/base.css index 88f7d9a95a..9760d67dc4 100644 --- a/django/contrib/admin/media/css/base.css +++ b/django/contrib/admin/media/css/base.css @@ -4,11 +4,11 @@ */ /* Block IE 5 */ -@import "null?\"\{"; +@import "null.css?\"\{"; /* Import other styles */ @import url('global.css'); @import url('layout.css'); /* Import patch for IE 6 Windows */ -/*\*/ @import "patch-iewin.css"; /**/ \ No newline at end of file +/*\*/ @import "patch-iewin.css"; /**/ diff --git a/django/contrib/admin/media/js/admin/RelatedObjectLookups.js b/django/contrib/admin/media/js/admin/RelatedObjectLookups.js index 4d33f9e724..ca578cc28a 100644 --- a/django/contrib/admin/media/js/admin/RelatedObjectLookups.js +++ b/django/contrib/admin/media/js/admin/RelatedObjectLookups.js @@ -1,6 +1,16 @@ // Handles related-objects functionality: lookup link for raw_id_fields // and Add Another links. +function html_unescape(text) { + // Unescape a string that was escaped using django.utils.html.escape. + text = text.replace(/</g, '<'); + text = text.replace(/>/g, '>'); + text = text.replace(/"/g, '"'); + text = text.replace(/'/g, "'"); + text = text.replace(/&/g, '&'); + return text; +} + function showRelatedObjectLookupPopup(triggeringLink) { var name = triggeringLink.id.replace(/^lookup_/, ''); // IE doesn't like periods in the window name, so convert temporarily. @@ -42,6 +52,10 @@ function showAddAnotherPopup(triggeringLink) { } function dismissAddAnotherPopup(win, newId, newRepr) { + // newId and newRepr are expected to have previously been escaped by + // django.utils.html.escape. + newId = html_unescape(newId); + newRepr = html_unescape(newRepr); var name = win.name.replace(/___/g, '.'); var elem = document.getElementById(name); if (elem) { diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index de4f1206a4..dca8c1eef0 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -386,7 +386,8 @@ class ModelAdmin(BaseModelAdmin): if type(pk_value) is str: # Quote if string, so JavaScript doesn't think it's a variable. pk_value = '"%s"' % pk_value.replace('"', '\\"') return HttpResponse('' % \ - (pk_value, str(new_object).replace('"', '\\"'))) + # escape() calls force_unicode. + (escape(pk_value), escape(new_object))) elif request.POST.has_key("_addanother"): request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % opts.verbose_name)) return HttpResponseRedirect(request.path) 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 72344c16cb..9136829e03 100644 --- a/django/contrib/admin/templates/admin_doc/template_filter_index.html +++ b/django/contrib/admin/templates/admin_doc/template_filter_index.html @@ -14,7 +14,7 @@ {% for library in filter_libraries %}

      {% if library.grouper %}{{ library.grouper }}{% else %}Built-in filters{% endif %}

      - {% if library.grouper %}

      To use these filters, put {% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %} in your template before using the filter.


      {% endif %} + {% if library.grouper %}

      To use these filters, put {% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %} in your template before using the filter.


      {% endif %} {% for filter in library.list|dictsort:"name" %}

      {{ filter.name }}

      {{ filter.title }}

      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 287475ab09..b4ec1da679 100644 --- a/django/contrib/admin/templates/admin_doc/template_tag_index.html +++ b/django/contrib/admin/templates/admin_doc/template_tag_index.html @@ -14,7 +14,7 @@ {% for library in tag_libraries %}

      {% if library.grouper %}{{ library.grouper }}{% else %}Built-in tags{% endif %}

      - {% if library.grouper %}

      To use these tags, put {% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %} in your template before using the tag.


      {% endif %} + {% if library.grouper %}

      To use these tags, put {% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %} in your template before using the tag.


      {% endif %} {% for tag in library.list|dictsort:"name" %}

      {{ tag.name }}

      {{ tag.title }}

      diff --git a/django/contrib/admin/templates/admin_doc/view_index.html b/django/contrib/admin/templates/admin_doc/view_index.html index caab8a2e71..22c6dca379 100644 --- a/django/contrib/admin/templates/admin_doc/view_index.html +++ b/django/contrib/admin/templates/admin_doc/view_index.html @@ -30,10 +30,10 @@ {% for view in site_views.list|dictsort:"url" %} {% ifchanged %} -

      {{ view.url|escape }}

      +

      {{ view.url|escape }}

      View function: {{ view.module }}.{{ view.name }}

      {{ view.title }}

      -
      +
      {% endifchanged %} {% endfor %}
      diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index 9b63af6dce..c3b993f518 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -148,6 +148,8 @@ def items_for_result(cl, result): # function has an "allow_tags" attribute set to True. if not allow_tags: result_repr = escape(result_repr) + else: + result_repr = mark_safe(result_repr) else: field_val = getattr(result, f.attname) @@ -185,7 +187,7 @@ def items_for_result(cl, result): else: result_repr = escape(field_val) if force_unicode(result_repr) == '': - result_repr = ' ' + result_repr = mark_safe(' ') # If list_display_links not defined, add the link tag to the first field if (first and not cl.list_display_links) or field_name in cl.list_display_links: table_tag = {True:'th', False:'td'}[first] diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py index f9cd20966e..c1dbfaaeb8 100644 --- a/django/contrib/admin/templatetags/admin_modify.py +++ b/django/contrib/admin/templatetags/admin_modify.py @@ -81,7 +81,7 @@ class FieldWrapper(object): return not isinstance(self.field, models.AutoField) def header_class_attribute(self): - return self.field.blank and ' class="optional"' or '' + return self.field.blank and mark_safe(' class="optional"') or '' def use_raw_id_admin(self): return isinstance(self.field.rel, (models.ManyToOneRel, models.ManyToManyRel)) \ diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index e4eb40d609..44012bc0cd 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -100,7 +100,7 @@ class AdminBoundField(object): return repr(self.__dict__) def html_error_list(self): - return " ".join([form_field.html_error_list() for form_field in self.form_fields if form_field.errors]) + return mark_safe(" ".join([form_field.html_error_list() for form_field in self.form_fields if form_field.errors])) def original_url(self): if self.is_file_field and self.original and self.field.attname: diff --git a/django/contrib/comments/models.py b/django/contrib/comments/models.py index 6658c9486a..d65440e546 100644 --- a/django/contrib/comments/models.py +++ b/django/contrib/comments/models.py @@ -92,7 +92,7 @@ class Comment(models.Model): verbose_name_plural = _('comments') ordering = ('-submit_date',) - def __repr__(self): + def __unicode__(self): return "%s: %s..." % (self.user.username, self.comment[:100]) def get_absolute_url(self): @@ -171,7 +171,7 @@ class FreeComment(models.Model): verbose_name_plural = _('free comments') ordering = ('-submit_date',) - def __repr__(self): + def __unicode__(self): return "%s: %s..." % (self.person_name, self.comment[:100]) def get_absolute_url(self): @@ -226,7 +226,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): @@ -258,7 +258,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): @@ -271,7 +271,7 @@ 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 # Register the admin options for these models. 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 + +>>> 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/preview.py b/django/contrib/formtools/preview.py index 2e4fb92cda..bd0ce5cbb7 100644 --- a/django/contrib/formtools/preview.py +++ b/django/contrib/formtools/preview.py @@ -109,7 +109,7 @@ class FormPreview(object): data = [(bf.name, bf.data) for bf in form] + [settings.SECRET_KEY] # Use HIGHEST_PROTOCOL because it's the most efficient. It requires # Python 2.3, but Django requires 2.3 anyway, so that's OK. - pickled = pickle.dumps(data, protocol=pickle.HIGHEST_PROTOCOL) + pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) return md5.new(pickled).hexdigest() def failed_hash(self, request): 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 = '' + 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/core/cache/backends/base.py b/django/core/cache/backends/base.py index cd0d7bd103..ff4223bf86 100644 --- a/django/core/cache/backends/base.py +++ b/django/core/cache/backends/base.py @@ -16,7 +16,7 @@ class BaseCache(object): def add(self, key, value, timeout=None): """ - Set a value in the cache if the key does not already exist. If + Set a value in the cache if the key does not already exist. If timeout is given, that timeout will be used for the key; otherwise the default cache timeout will be used. """ @@ -24,14 +24,14 @@ class BaseCache(object): def get(self, key, default=None): """ - Fetch a given key from the cache. If the key does not exist, return + Fetch a given key from the cache. If the key does not exist, return default, which itself defaults to None. """ raise NotImplementedError def set(self, key, value, timeout=None): """ - Set a value in the cache. If timeout is given, that timeout will be + Set a value in the cache. If timeout is given, that timeout will be used for the key; otherwise the default cache timeout will be used. """ raise NotImplementedError @@ -44,10 +44,10 @@ class BaseCache(object): def get_many(self, keys): """ - Fetch a bunch of keys from the cache. For certain backends (memcached, + Fetch a bunch of keys from the cache. For certain backends (memcached, pgsql) this can be *much* faster when fetching multiple values. - Returns a dict mapping each key in keys to its value. If the given + Returns a dict mapping each key in keys to its value. If the given key is missing, it will be missing from the response dict. """ d = {} @@ -64,4 +64,3 @@ class BaseCache(object): return self.get(key) is not None __contains__ = has_key - diff --git a/django/core/cache/backends/locmem.py b/django/core/cache/backends/locmem.py index 5998f7bfd5..2d74e2b132 100644 --- a/django/core/cache/backends/locmem.py +++ b/django/core/cache/backends/locmem.py @@ -16,8 +16,12 @@ class CacheClass(SimpleCacheClass): def add(self, key, value, timeout=None): self._lock.writer_enters() + # Python 2.3 and 2.4 don't allow combined try-except-finally blocks. try: - SimpleCacheClass.add(self, key, value, timeout) + try: + super(CacheClass, self).add(key, pickle.dumps(value), timeout) + except pickle.PickleError: + pass finally: self._lock.writer_leaves() @@ -49,6 +53,7 @@ class CacheClass(SimpleCacheClass): def set(self, key, value, timeout=None): self._lock.writer_enters() + # Python 2.3 and 2.4 don't allow combined try-except-finally blocks. try: try: super(CacheClass, self).set(key, pickle.dumps(value), timeout) diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py index dce2fd493d..fcbc9d1110 100644 --- a/django/core/management/__init__.py +++ b/django/core/management/__init__.py @@ -52,7 +52,7 @@ def load_command_class(app_name, name): return getattr(__import__('%s.management.commands.%s' % (app_name, name), {}, {}, ['Command']), 'Command')() -def get_commands(load_user_commands=True, project_directory=None): +def get_commands(): """ Returns a dictionary of commands against the application in which those commands can be found. This works by looking for a @@ -60,10 +60,10 @@ def get_commands(load_user_commands=True, project_directory=None): application -- if a commands package exists, all commands in that package are registered. - Core commands are always included; user-defined commands will also - be included if ``load_user_commands`` is True. If a project directory - is provided, the startproject command will be disabled, and the - startapp command will be modified to use that directory. + Core commands are always included. If a settings module has been + specified, user-defined commands will also be included, the + startproject command will be disabled, and the startapp command + will be modified to use the directory in which that module appears. The dictionary is in the format {command_name: app_name}. Key-value pairs from this dictionary can then be used in calls to @@ -80,16 +80,27 @@ def get_commands(load_user_commands=True, project_directory=None): if _commands is None: _commands = dict([(name, 'django.core') for name in find_commands(__path__[0])]) - if load_user_commands: - # Get commands from all installed apps. + # Get commands from all installed apps. + try: from django.conf import settings - for app_name in settings.INSTALLED_APPS: - try: - path = find_management_module(app_name) - _commands.update(dict([(name, app_name) - for name in find_commands(path)])) - except ImportError: - pass # No management module - ignore this app + apps = settings.INSTALLED_APPS + except (AttributeError, EnvironmentError): + apps = [] + + for app_name in apps: + try: + path = find_management_module(app_name) + _commands.update(dict([(name, app_name) + for name in find_commands(path)])) + except ImportError: + pass # No management module - ignore this app + + # Try to determine the project directory + try: + from django.conf import settings + project_directory = setup_environ(__import__(settings.SETTINGS_MODULE)) + except (AttributeError, EnvironmentError, ImportError): + project_directory = None if project_directory: # Remove the "startproject" command from self.commands, because @@ -146,8 +157,6 @@ class ManagementUtility(object): def __init__(self, argv=None): self.argv = argv or sys.argv[:] self.prog_name = os.path.basename(self.argv[0]) - self.project_directory = None - self.user_commands = False def main_help_text(self): """ @@ -159,8 +168,7 @@ class ManagementUtility(object): usage.append("Type '%s help ' for help on a specific" " subcommand." % self.prog_name) usage.append('Available subcommands:') - commands = get_commands(self.user_commands, - self.project_directory).keys() + commands = get_commands().keys() commands.sort() for cmd in commands: usage.append(' %s' % cmd) @@ -173,8 +181,7 @@ class ManagementUtility(object): django-admin.py or manage.py) if it can't be found. """ try: - app_name = get_commands(self.user_commands, - self.project_directory)[subcommand] + app_name = get_commands()[subcommand] if isinstance(app_name, BaseCommand): # If the command is already loaded, use it directly. klass = app_name @@ -235,8 +242,6 @@ class ProjectManagementUtility(ManagementUtility): """ def __init__(self, argv, project_directory): super(ProjectManagementUtility, self).__init__(argv) - self.project_directory = project_directory - self.user_commands = True def setup_environ(settings_mod): """ diff --git a/django/core/management/base.py b/django/core/management/base.py index 0c458126e8..31c2849075 100644 --- a/django/core/management/base.py +++ b/django/core/management/base.py @@ -172,14 +172,13 @@ def copy_helper(style, app_or_project, name, directory, other_name=''): """ Copies either a Django application layout template or a Django project layout template into the specified directory. - - * style - A color style object (see django.core.management.color). - * app_or_project - The string 'app' or 'project'. - * name - The name of the application or project. - * directory - The directory to copy the layout template to. - * other_name - When copying an application layout, this should be the name - of the project. """ + # style -- A color style object (see django.core.management.color). + # app_or_project -- The string 'app' or 'project'. + # name -- The name of the application or project. + # directory -- The directory to which the layout template should be copied. + # other_name -- When copying an application layout, this should be the name + # of the project. import re import shutil other = {'project': 'app', 'app': 'project'}[app_or_project] diff --git a/django/core/paginator.py b/django/core/paginator.py index b50ca826c4..71a5479fd5 100644 --- a/django/core/paginator.py +++ b/django/core/paginator.py @@ -91,7 +91,7 @@ class ObjectPaginator(object): a template for loop. """ if self._page_range is None: - self._page_range = range(1, self._pages + 1) + self._page_range = range(1, self.pages + 1) return self._page_range hits = property(_get_hits) diff --git a/django/db/models/base.py b/django/db/models/base.py index 311732f105..c84c574282 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -466,5 +466,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 be5e0ca45a..3e92e45d30 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -390,7 +390,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/middleware/gzip.py b/django/middleware/gzip.py index aa2a8ea5a6..62a2456b97 100644 --- a/django/middleware/gzip.py +++ b/django/middleware/gzip.py @@ -1,4 +1,5 @@ import re + from django.utils.text import compress_string from django.utils.cache import patch_vary_headers @@ -11,18 +12,21 @@ class GZipMiddleware(object): on the Accept-Encoding header. """ def process_response(self, request, response): + # It's not worth compressing non-OK or really short responses. if response.status_code != 200 or len(response.content) < 200: - # Not worth compressing really short responses or 304 status - # responses, etc. return response patch_vary_headers(response, ('Accept-Encoding',)) - # Avoid gzipping if we've already got a content-encoding or if the - # content-type is Javascript and the user's browser is IE. - is_js = ("msie" in request.META.get('HTTP_USER_AGENT', '').lower() and - "javascript" in response.get('Content-Type', '').lower()) - if response.has_header('Content-Encoding') or is_js: + # Avoid gzipping if we've already got a content-encoding. + if response.has_header('Content-Encoding'): + return response + + # Older versions of IE have issues with gzipped javascript. + # See http://code.djangoproject.com/ticket/2449 + is_ie = "msie" in request.META.get('HTTP_USER_AGENT', '').lower() + is_js = "javascript" in response.get('Content-Type', '').lower() + if is_ie and is_js: return response ae = request.META.get('HTTP_ACCEPT_ENCODING', '') diff --git a/django/newforms/extras/widgets.py b/django/newforms/extras/widgets.py index 60936a6bd6..0097ba3f54 100644 --- a/django/newforms/extras/widgets.py +++ b/django/newforms/extras/widgets.py @@ -6,6 +6,7 @@ import datetime from django.newforms.widgets import Widget, Select from django.utils.dates import MONTHS +from django.utils.safestring import mark_safe __all__ = ('SelectDateWidget',) @@ -51,7 +52,7 @@ class SelectDateWidget(Widget): select_html = Select(choices=year_choices).render(self.year_field % name, year_val) output.append(select_html) - return u'\n'.join(output) + return mark_safe(u'\n'.join(output)) def value_from_datadict(self, data, files, name): y, m, d = data.get(self.year_field % name), data.get(self.month_field % name), data.get(self.day_field % name) 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/newforms/models.py b/django/newforms/models.py index 82f794c02b..73d4ba66a0 100644 --- a/django/newforms/models.py +++ b/django/newforms/models.py @@ -3,13 +3,13 @@ Helper functions for creating Form classes from Django models and database field objects. """ -from django.utils.translation import ugettext +from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import smart_unicode from django.utils.datastructures import SortedDict from util import ValidationError from forms import BaseForm -from fields import Field, ChoiceField, IntegerField +from fields import Field, ChoiceField, IntegerField, EMPTY_VALUES from formsets import BaseFormSet, formset_for_form, DELETION_FIELD_NAME from widgets import Select, SelectMultiple, HiddenInput, MultipleHiddenInput @@ -153,15 +153,20 @@ class ModelChoiceField(ChoiceField): """A ChoiceField whose choices are a model QuerySet.""" # This class is a subclass of ChoiceField for purity, but it doesn't # actually use any of ChoiceField's implementation. + default_error_messages = { + 'invalid_choice': _(u'Select a valid choice. That choice is not one of' + u' the available choices.'), + } def __init__(self, queryset, empty_label=u"---------", cache_choices=False, required=True, widget=Select, label=None, initial=None, - help_text=None): + help_text=None, *args, **kwargs): self.empty_label = empty_label self.cache_choices = cache_choices # Call Field instead of ChoiceField __init__() because we don't need # ChoiceField.__init__(). - Field.__init__(self, required, widget, label, initial, help_text) + Field.__init__(self, required, widget, label, initial, help_text, + *args, **kwargs) self.queryset = queryset def _get_queryset(self): @@ -197,41 +202,43 @@ class ModelChoiceField(ChoiceField): def clean(self, value): Field.clean(self, value) - if value in ('', None): + if value in EMPTY_VALUES: return None try: value = self.queryset.get(pk=value) except self.queryset.model.DoesNotExist: - raise ValidationError(ugettext(u'Select a valid choice. That' - u' choice is not one of the' - u' available choices.')) + raise ValidationError(self.error_messages['invalid_choice']) return value class ModelMultipleChoiceField(ModelChoiceField): """A MultipleChoiceField whose choices are a model QuerySet.""" hidden_widget = MultipleHiddenInput + default_error_messages = { + 'list': _(u'Enter a list of values.'), + 'invalid_choice': _(u'Select a valid choice. %s is not one of the' + u' available choices.'), + } def __init__(self, queryset, cache_choices=False, required=True, widget=SelectMultiple, label=None, initial=None, - help_text=None): + help_text=None, *args, **kwargs): super(ModelMultipleChoiceField, self).__init__(queryset, None, - cache_choices, required, widget, label, initial, help_text) + cache_choices, required, widget, label, initial, help_text, + *args, **kwargs) def clean(self, value): if self.required and not value: - raise ValidationError(ugettext(u'This field is required.')) + raise ValidationError(self.error_messages['required']) elif not self.required and not value: return [] if not isinstance(value, (list, tuple)): - raise ValidationError(ugettext(u'Enter a list of values.')) + raise ValidationError(self.error_messages['list']) final_values = [] for val in value: try: obj = self.queryset.get(pk=val) except self.queryset.model.DoesNotExist: - raise ValidationError(ugettext(u'Select a valid choice. %s is' - u' not one of the available' - u' choices.') % val) + raise ValidationError(self.error_messages['invalid_choice'] % val) else: final_values.append(obj) return final_values diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py index d782c9d2ec..e134e60bd7 100644 --- a/django/newforms/widgets.py +++ b/django/newforms/widgets.py @@ -11,7 +11,7 @@ import copy from itertools import chain from django.conf import settings from django.utils.datastructures import MultiValueDict -from django.utils.html import escape +from django.utils.html import escape, conditional_escape from django.utils.translation import ugettext from django.utils.encoding import StrAndUnicode, force_unicode from django.utils.safestring import mark_safe @@ -257,7 +257,7 @@ class Textarea(Widget): value = force_unicode(value) final_attrs = self.build_attrs(attrs, name=name) return mark_safe(u'%s' % (flatatt(final_attrs), - escape(value))) + conditional_escape(force_unicode(value)))) class DateTimeInput(Input): input_type = 'text' @@ -319,7 +319,9 @@ class Select(Widget): for option_value, option_label in chain(self.choices, choices): option_value = force_unicode(option_value) selected_html = (option_value == str_value) and u' selected="selected"' or '' - output.append(u'' % (escape(option_value), selected_html, escape(force_unicode(option_label)))) + output.append(u'' % ( + escape(option_value), selected_html, + conditional_escape(force_unicode(option_label)))) output.append(u'') return mark_safe(u'\n'.join(output)) @@ -356,7 +358,9 @@ class SelectMultiple(Widget): for option_value, option_label in chain(self.choices, choices): option_value = force_unicode(option_value) selected_html = (option_value in str_values) and ' selected="selected"' or '' - output.append(u'' % (escape(option_value), selected_html, escape(force_unicode(option_label)))) + output.append(u'' % ( + escape(option_value), selected_html, + conditional_escape(force_unicode(option_label)))) output.append(u'') return mark_safe(u'\n'.join(output)) @@ -380,7 +384,7 @@ class RadioInput(StrAndUnicode): def __unicode__(self): return mark_safe(u'' % (self.tag(), - self.choice_label)) + conditional_escape(force_unicode(self.choice_label)))) def is_checked(self): return self.value == self.choice_value @@ -419,11 +423,13 @@ class RadioFieldRenderer(StrAndUnicode): % force_unicode(w) for w in self])) class RadioSelect(Select): + renderer = RadioFieldRenderer def __init__(self, *args, **kwargs): - self.renderer = kwargs.pop('renderer', None) - if not self.renderer: - self.renderer = RadioFieldRenderer + # Override the default renderer if we were passed one. + renderer = kwargs.pop('renderer', None) + if renderer: + self.renderer = renderer super(RadioSelect, self).__init__(*args, **kwargs) def get_renderer(self, name, value, attrs=None, choices=()): @@ -463,7 +469,8 @@ class CheckboxSelectMultiple(SelectMultiple): cb = CheckboxInput(final_attrs, check_test=lambda value: value in str_values) option_value = force_unicode(option_value) rendered_cb = cb.render(name, option_value) - output.append(u'
    • ' % (rendered_cb, escape(force_unicode(option_label)))) + output.append(u'
    • ' % (rendered_cb, + conditional_escape(force_unicode(option_label)))) output.append(u'
    ') return mark_safe(u'\n'.join(output)) diff --git a/django/template/__init__.py b/django/template/__init__.py index 1fd3171c12..c68a4b544d 100644 --- a/django/template/__init__.py +++ b/django/template/__init__.py @@ -547,9 +547,9 @@ class FilterExpression(object): if var == None: var, constant, i18n_constant = match.group("var", "constant", "i18n_constant") if i18n_constant: - var = '"%s"' % _(i18n_constant) + var = '"%s"' % _(i18n_constant.replace(r'\"', '"')) elif constant: - var = '"%s"' % constant + var = '"%s"' % constant.replace(r'\"', '"') upto = match.end() if var == None: raise TemplateSyntaxError, "Could not find variable at start of %s" % token @@ -594,7 +594,7 @@ class FilterExpression(object): arg_vals = [] for lookup, arg in args: if not lookup: - arg_vals.append(arg) + arg_vals.append(mark_safe(arg)) else: arg_vals.append(arg.resolve(context)) if getattr(func, 'needs_autoescape', False): @@ -678,6 +678,7 @@ class Variable(object): self.var = var self.literal = None self.lookups = None + self.translate = False try: # First try to treat this variable as a number. @@ -698,11 +699,15 @@ class Variable(object): except ValueError: # A ValueError means that the variable isn't a number. + if var.startswith('_(') and var.endswith(')'): + # The result of the lookup should be translated at rendering + # time. + self.translate = True + var = var[2:-1] # If it's wrapped with quotes (single or double), then # we're also dealing with a literal. if var[0] in "\"'" and var[0] == var[-1]: - self.literal = var[1:-1] - + self.literal = mark_safe(var[1:-1]) else: # Otherwise we'll set self.lookups so that resolve() knows we're # dealing with a bonafide variable @@ -712,10 +717,13 @@ class Variable(object): """Resolve this variable against a given context.""" if self.lookups is not None: # We're dealing with a variable that needs to be resolved - return self._resolve_lookup(context) + value = self._resolve_lookup(context) else: # We're dealing with a literal, so it's already been "resolved" - return self.literal + value = self.literal + if self.translate: + return _(value) + return value def __repr__(self): return "<%s: %r>" % (self.__class__.__name__, self.var) diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py index 7d4a72efb3..f2be64ef1d 100644 --- a/django/template/defaultfilters.py +++ b/django/template/defaultfilters.py @@ -25,6 +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)) return func(*args, **kwargs) # Include a reference to the real function (used to check original @@ -89,7 +91,7 @@ def floatformat(text, arg=-1): """ try: f = float(text) - except ValueError: + except (ValueError, TypeError): return u'' try: d = int(arg) @@ -106,6 +108,7 @@ floatformat.is_safe = True def iriencode(value): """Escapes an IRI value for use in a URL.""" return force_unicode(iri_to_uri(value)) +iriencode.is_safe = True iriencode = stringfilter(iriencode) def linenumbers(value, autoescape=None): diff --git a/django/template/loader_tags.py b/django/template/loader_tags.py index 652fda11ce..c83768ef91 100644 --- a/django/template/loader_tags.py +++ b/django/template/loader_tags.py @@ -2,6 +2,7 @@ from django.template import TemplateSyntaxError, TemplateDoesNotExist, Variable from django.template import Library, Node from django.template.loader import get_template, get_template_from_string, find_template_source from django.conf import settings +from django.utils.safestring import mark_safe register = Library() @@ -26,7 +27,7 @@ class BlockNode(Node): def super(self): if self.parent: - return self.parent.render(self.context) + return mark_safe(self.parent.render(self.context)) return '' def add_parent(self, nodelist): diff --git a/django/templatetags/i18n.py b/django/templatetags/i18n.py index cec35fb48e..b4438fdf42 100644 --- a/django/templatetags/i18n.py +++ b/django/templatetags/i18n.py @@ -1,9 +1,10 @@ import re -from django.template import Node, Variable +from django.template import Node, Variable, VariableNode from django.template import TemplateSyntaxError, TokenParser, Library from django.template import TOKEN_TEXT, TOKEN_VAR from django.utils import translation +from django.utils.encoding import force_unicode register = Library() @@ -45,7 +46,8 @@ class TranslateNode(Node): return translation.ugettext(value) class BlockTranslateNode(Node): - def __init__(self, extra_context, singular, plural=None, countervar=None, counter=None): + def __init__(self, extra_context, singular, plural=None, countervar=None, + counter=None): self.extra_context = extra_context self.singular = singular self.plural = plural @@ -54,29 +56,32 @@ class BlockTranslateNode(Node): def render_token_list(self, tokens): result = [] + vars = [] for token in tokens: if token.token_type == TOKEN_TEXT: result.append(token.contents) elif token.token_type == TOKEN_VAR: - result.append('%%(%s)s' % token.contents) - return ''.join(result) + result.append(u'%%(%s)s' % token.contents) + vars.append(token.contents) + return ''.join(result), vars def render(self, context): context.push() - for var,val in self.extra_context.items(): - context[var] = val.resolve(context) - singular = self.render_token_list(self.singular) + for var, val in self.extra_context.items(): + context[var] = val.render(context) + singular, vars = self.render_token_list(self.singular) if self.plural and self.countervar and self.counter: count = self.counter.resolve(context) context[self.countervar] = count - plural = self.render_token_list(self.plural) + plural, vars = self.render_token_list(self.plural) result = translation.ungettext(singular, plural, count) else: result = translation.ugettext(singular) # Escape all isolated '%' before substituting in the context. - result = re.sub('%(?!\()', '%%', result) % context + result = re.sub(u'%(?!\()', u'%%', result) + data = dict([(v, force_unicode(context[v])) for v in vars]) context.pop() - return result + return result % data def do_get_available_languages(parser, token): """ @@ -198,7 +203,6 @@ def do_block_translate(parser, token): This is much like ngettext, only in template syntax. """ class BlockTranslateParser(TokenParser): - def top(self): countervar = None counter = None @@ -209,7 +213,8 @@ def do_block_translate(parser, token): value = self.value() if self.tag() != 'as': raise TemplateSyntaxError, "variable bindings in 'blocktrans' must be 'with value as variable'" - extra_context[self.tag()] = parser.compile_filter(value) + extra_context[self.tag()] = VariableNode( + parser.compile_filter(value)) elif tag == 'count': counter = parser.compile_filter(self.value()) if self.tag() != 'as': @@ -241,7 +246,8 @@ def do_block_translate(parser, token): if token.contents.strip() != 'endblocktrans': raise TemplateSyntaxError, "'blocktrans' doesn't allow other block tags (seen %r) inside it" % token.contents - return BlockTranslateNode(extra_context, singular, plural, countervar, counter) + return BlockTranslateNode(extra_context, singular, plural, countervar, + counter) register.tag('get_available_languages', do_get_available_languages) register.tag('get_current_language', do_get_current_language) diff --git a/django/test/testcases.py b/django/test/testcases.py index 2aa0a0783d..1d65ee1d23 100644 --- a/django/test/testcases.py +++ b/django/test/testcases.py @@ -51,9 +51,9 @@ class TestCase(unittest.TestCase): def _pre_setup(self): """Performs any pre-test setup. This includes: - * If the Test Case class has a 'fixtures' member, clearing the - database and installing the named fixtures at the start of each - test. + * Flushing the database. + * If the Test Case class has a 'fixtures' member, installing the + named fixtures. * Clearing the mail test outbox. """ call_command('flush', verbosity=0, interactive=False) diff --git a/django/utils/cache.py b/django/utils/cache.py index ae4de6dd87..4fcf493944 100644 --- a/django/utils/cache.py +++ b/django/utils/cache.py @@ -20,6 +20,10 @@ An example: i18n middleware would need to distinguish caches by the import md5 import re import time +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback from django.conf import settings from django.core.cache import cache @@ -70,7 +74,20 @@ def patch_cache_control(response, **kwargs): cc = ', '.join([dictvalue(el) for el in cc.items()]) response['Cache-Control'] = cc -vary_delim_re = re.compile(r',\s*') +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): """ @@ -109,14 +126,15 @@ def patch_vary_headers(response, newheaders): # Note that we need to keep the original order intact, because cache # implementations may rely on the order of the Vary contents in, say, # computing an MD5 hash. - vary = [] if response.has_header('Vary'): - vary = vary_delim_re.split(response['Vary']) - oldheaders = dict([(el.lower(), 1) for el in vary]) - for newheader in newheaders: - if not newheader.lower() in oldheaders: - vary.append(newheader) - response['Vary'] = ', '.join(vary) + vary_headers = cc_delim_re.split(response['Vary']) + else: + vary_headers = [] + # Use .lower() here so we treat headers as case-insensitive. + existing_headers = set([header.lower() for header in vary_headers]) + additional_headers = [newheader for newheader in newheaders + if newheader.lower() not in existing_headers] + response['Vary'] = ', '.join(vary_headers + additional_headers) def _generate_cache_key(request, headerlist, key_prefix): """Returns a cache key from the headers given in the header list.""" @@ -169,7 +187,7 @@ def learn_cache_key(request, response, cache_timeout=None, key_prefix=None): key_prefix, iri_to_uri(request.path)) if response.has_header('Vary'): headerlist = ['HTTP_'+header.upper().replace('-', '_') - for header in vary_delim_re.split(response['Vary'])] + for header in cc_delim_re.split(response['Vary'])] cache.set(cache_key, headerlist, cache_timeout) return _generate_cache_key(request, headerlist, key_prefix) else: @@ -177,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 549aa3f183..ee156b11d0 100644 --- a/django/utils/datastructures.py +++ b/django/utils/datastructures.py @@ -7,9 +7,9 @@ class MergeDict(object): self.dicts = dicts def __getitem__(self, key): - for dict in self.dicts: + for dict_ in self.dicts: try: - return dict[key] + return dict_[key] except KeyError: pass raise KeyError @@ -24,22 +24,22 @@ class MergeDict(object): return default def getlist(self, key): - for dict in self.dicts: + for dict_ in self.dicts: try: - return dict.getlist(key) + return dict_.getlist(key) except KeyError: pass raise KeyError def items(self): item_list = [] - for dict in self.dicts: - item_list.extend(dict.items()) + for dict_ in self.dicts: + item_list.extend(dict_.items()) return item_list def has_key(self, key): - for dict in self.dicts: - if key in dict: + for dict_ in self.dicts: + if key in dict_: return True return False @@ -56,11 +56,14 @@ class SortedDict(dict): def __init__(self, data=None): if data is None: data = {} - dict.__init__(self, data) + super(SortedDict, self).__init__(data) 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 @@ -68,12 +71,12 @@ class SortedDict(dict): for key, value in self.iteritems()]) def __setitem__(self, key, value): - dict.__setitem__(self, key, value) + super(SortedDict, self).__setitem__(key, value) if key not in self.keyOrder: self.keyOrder.append(key) def __delitem__(self, key): - dict.__delitem__(self, key) + super(SortedDict, self).__delitem__(key) self.keyOrder.remove(key) def __iter__(self): @@ -81,7 +84,7 @@ class SortedDict(dict): yield k def pop(self, k, *args): - result = dict.pop(self, k, *args) + result = super(SortedDict, self).pop(k, *args) try: self.keyOrder.remove(k) except ValueError: @@ -90,7 +93,7 @@ class SortedDict(dict): return result def popitem(self): - result = dict.popitem(self) + result = super(SortedDict, self).popitem() self.keyOrder.remove(result[0]) return result @@ -99,7 +102,7 @@ class SortedDict(dict): def iteritems(self): for key in self.keyOrder: - yield key, dict.__getitem__(self, key) + yield key, super(SortedDict, self).__getitem__(key) def keys(self): return self.keyOrder[:] @@ -108,20 +111,20 @@ class SortedDict(dict): return iter(self.keyOrder) def values(self): - return [dict.__getitem__(self, k) for k in self.keyOrder] + return [super(SortedDict, self).__getitem__(k) for k in self.keyOrder] def itervalues(self): for key in self.keyOrder: - yield dict.__getitem__(self, key) + yield super(SortedDict, self).__getitem__(key) - def update(self, dict): - for k, v in dict.items(): + def update(self, dict_): + for k, v in dict_.items(): self.__setitem__(k, v) def setdefault(self, key, default): if key not in self.keyOrder: self.keyOrder.append(key) - return dict.setdefault(self, key, default) + return super(SortedDict, self).setdefault(key, default) def value_for_index(self, index): """Returns the value of the item at the given zero-based index.""" @@ -135,7 +138,7 @@ class SortedDict(dict): if n < index: index -= 1 self.keyOrder.insert(index, key) - dict.__setitem__(self, key, value) + super(SortedDict, self).__setitem__(key, value) def copy(self): """Returns a copy of this object.""" @@ -173,10 +176,11 @@ class MultiValueDict(dict): single name-value pairs. """ def __init__(self, key_to_list_mapping=()): - dict.__init__(self, key_to_list_mapping) + super(MultiValueDict, self).__init__(key_to_list_mapping) def __repr__(self): - return "<%s: %s>" % (self.__class__.__name__, dict.__repr__(self)) + return "<%s: %s>" % (self.__class__.__name__, + super(MultiValueDict, self).__repr__()) def __getitem__(self, key): """ @@ -184,7 +188,7 @@ class MultiValueDict(dict): raises KeyError if not found. """ try: - list_ = dict.__getitem__(self, key) + list_ = super(MultiValueDict, self).__getitem__(key) except KeyError: raise MultiValueDictKeyError, "Key %r not found in %r" % (key, self) try: @@ -193,10 +197,10 @@ class MultiValueDict(dict): return [] def __setitem__(self, key, value): - dict.__setitem__(self, key, [value]) + super(MultiValueDict, self).__setitem__(key, [value]) def __copy__(self): - return self.__class__(dict.items(self)) + return self.__class__(super(MultiValueDict, self).items()) def __deepcopy__(self, memo=None): import copy @@ -210,7 +214,10 @@ class MultiValueDict(dict): return result def get(self, key, default=None): - """Returns the default value if the requested data doesn't exist.""" + """ + Returns the last data value for the passed key. If key doesn't exist + or value is an empty list, then default is returned. + """ try: val = self[key] except KeyError: @@ -220,14 +227,17 @@ class MultiValueDict(dict): return val def getlist(self, key): - """Returns an empty list if the requested data doesn't exist.""" + """ + Returns the list of values for the passed key. If key doesn't exist, + then an empty list is returned. + """ try: - return dict.__getitem__(self, key) + return super(MultiValueDict, self).__getitem__(key) except KeyError: return [] def setlist(self, key, list_): - dict.__setitem__(self, key, list_) + super(MultiValueDict, self).__setitem__(key, list_) def setdefault(self, key, default=None): if key not in self: @@ -242,7 +252,7 @@ class MultiValueDict(dict): def appendlist(self, key, value): """Appends an item to the internal list associated with key.""" self.setlistdefault(key, []) - dict.__setitem__(self, key, self.getlist(key) + [value]) + super(MultiValueDict, self).__setitem__(key, self.getlist(key) + [value]) def items(self): """ @@ -253,7 +263,7 @@ class MultiValueDict(dict): def lists(self): """Returns a list of (key, list) pairs.""" - return dict.items(self) + return super(MultiValueDict, self).items() def values(self): """Returns a list of the last value on every key list.""" @@ -315,7 +325,7 @@ class DotExpandedDict(dict): try: current[bits[-1]] = v except TypeError: # Special-case if current isn't a dict. - current = {bits[-1] : v} + current = {bits[-1]: v} class FileDict(dict): """ diff --git a/django/utils/html.py b/django/utils/html.py index 8eeaa66330..cb786db1e4 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -6,6 +6,7 @@ import string from django.utils.safestring import SafeData, mark_safe from django.utils.encoding import force_unicode from django.utils.functional import allow_lazy +from django.utils.http import urlquote # Configuration for urlize() function LEADING_PUNCTUATION = ['(', '<', '<'] @@ -101,14 +102,24 @@ def urlize(text, trim_url_limit=None, nofollow=False, autoescape=False): if middle.startswith('www.') or ('@' not in middle and not middle.startswith('http://') and \ len(middle) > 0 and middle[0] in string.letters + string.digits and \ (middle.endswith('.org') or middle.endswith('.net') or middle.endswith('.com'))): - middle = '%s' % (middle, nofollow_attr, trim_url(middle)) + middle = '%s' % ( + urlquote(middle, safe='/&=:;#?+'), nofollow_attr, + trim_url(middle)) if middle.startswith('http://') or middle.startswith('https://'): - middle = '%s' % (middle, nofollow_attr, trim_url(middle)) - if '@' in middle and not middle.startswith('www.') and not ':' in middle \ - and simple_email_re.match(middle): + middle = '%s' % ( + urlquote(middle, safe='/&=:;#?+'), nofollow_attr, + trim_url(middle)) + if '@' in middle and not middle.startswith('www.') and \ + not ':' in middle and simple_email_re.match(middle): middle = '%s' % (middle, middle) if lead + middle + trail != word: words[i] = lead + middle + trail + elif autoescape and not safe_input: + words[i] = escape(word) + elif safe_input: + words[i] = mark_safe(word) + elif autoescape: + words[i] = escape(word) return u''.join(words) urlize = allow_lazy(urlize, unicode) diff --git a/django/utils/safestring.py b/django/utils/safestring.py index c7234af0f3..f6f4c1eb2f 100644 --- a/django/utils/safestring.py +++ b/django/utils/safestring.py @@ -57,7 +57,6 @@ class SafeString(str, SafeData): else: return SafeUnicode(data) - encode = curry(_proxy_method, method = str.encode) decode = curry(_proxy_method, method = str.decode) class SafeUnicode(unicode, SafeData): @@ -89,7 +88,6 @@ class SafeUnicode(unicode, SafeData): return SafeUnicode(data) encode = curry(_proxy_method, method = unicode.encode) - decode = curry(_proxy_method, method = unicode.decode) def mark_safe(s): """ diff --git a/django/utils/translation/trans_null.py b/django/utils/translation/trans_null.py index 0b62907e44..98c6de6197 100644 --- a/django/utils/translation/trans_null.py +++ b/django/utils/translation/trans_null.py @@ -4,6 +4,7 @@ from django.conf import settings from django.utils.encoding import force_unicode +from django.utils.safestring import mark_safe, SafeData def ngettext(singular, plural, number): if number == 1: return singular @@ -31,7 +32,10 @@ TECHNICAL_ID_MAP = { } def gettext(message): - return TECHNICAL_ID_MAP.get(message, message) + result = TECHNICAL_ID_MAP.get(message, message) + if isinstance(message, SafeData): + return mark_safe(result) + return result def ugettext(message): return force_unicode(gettext(message)) diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 98b4769031..a7259b3ce5 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -8,6 +8,7 @@ import gettext as gettext_module from cStringIO import StringIO from django.utils.encoding import force_unicode +from django.utils.safestring import mark_safe, SafeData try: import threading @@ -167,10 +168,9 @@ def translation(language): res.merge(t) return res - if hasattr(settings, 'LOCALE_PATHS'): - for localepath in settings.LOCALE_PATHS: - if os.path.isdir(localepath): - res = _merge(localepath) + for localepath in settings.LOCALE_PATHS: + if os.path.isdir(localepath): + res = _merge(localepath) if projectpath and os.path.isdir(projectpath): res = _merge(projectpath) @@ -271,11 +271,15 @@ def do_translate(message, translation_function): global _default, _active t = _active.get(currentThread(), None) if t is not None: - return getattr(t, translation_function)(message) - if _default is None: - from django.conf import settings - _default = translation(settings.LANGUAGE_CODE) - return getattr(_default, translation_function)(message) + result = getattr(t, translation_function)(message) + else: + if _default is None: + from django.conf import settings + _default = translation(settings.LANGUAGE_CODE) + result = getattr(_default, translation_function)(message) + if isinstance(message, SafeData): + return mark_safe(result) + return result def gettext(message): return do_translate(message, 'gettext') 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/debug.py b/django/views/debug.py index 7c45af230a..3358d2f08e 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -422,11 +422,11 @@ TECHNICAL_500_TEMPLATE = """ {% if frame.context_line %}
    {% if frame.pre_context %} -
      {% for line in frame.pre_context %}
    1. {{ line }}
    2. {% endfor %}
    +
      {% for line in frame.pre_context %}
    1. {{ line|escape }}
    2. {% endfor %}
    {% endif %} -
    1. {{ frame.context_line }} ...
    +
    1. {{ frame.context_line|escape }} ...
    {% if frame.post_context %} -
      {% for line in frame.post_context %}
    1. {{ line }}
    2. {% endfor %}
    +
      {% for line in frame.post_context %}
    1. {{ line|escape }}
    2. {% endfor %}
    {% endif %}
    {% endif %} @@ -445,8 +445,8 @@ TECHNICAL_500_TEMPLATE = """ {% for var in frame.vars|dictsort:"0" %} - {{ var.0 }} -
    {{ var.1|pprint }}
    + {{ var.0|escape }} +
    {{ var.1|pprint|escape }}
    {% endfor %} @@ -466,7 +466,7 @@ Traceback (most recent call last):
    {% for frame in frames %} File "{{ frame.filename }}" in {{ frame.function }}
    {% if frame.context_line %} -   {{ frame.lineno }}. {{ frame.context_line }}
    +   {{ frame.lineno }}. {{ frame.context_line|escape }}
    {% endif %} {% endfor %}
      {{ exception_type }} at {{ request.path|escape }}
    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..8095fc9231 100644 --- a/django/views/static.py +++ b/django/views/static.py @@ -1,5 +1,5 @@ """ -Views and functions for serving static files. These are only to be used +Views and functions for serving static files. These are only to be used during development, and SHOULD NOT be used in a production setting. """ @@ -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..af6cb35c42 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 ================== @@ -291,7 +303,7 @@ minutes. Template fragment caching ========================= -**New in development version**. +**New in development version** If you're after even more control, you can also cache template fragments using the ``cache`` template tag. To give your template access to this tag, put @@ -307,18 +319,18 @@ and the name to give the cache fragment. For example:: {% endcache %} Sometimes you might want to cache multiple copies of a fragment depending on -some dynamic data that appears inside the fragment. For example you may want a +some dynamic data that appears inside the fragment. For example, you might want a separate cached copy of the sidebar used in the previous example for every user -of your site. This can be easily achieved by passing additional arguments to -the ``{% cache %}`` template tag to uniquely identify the cache fragment:: +of your site. Do this by passing additional arguments to the ``{% cache %}`` +template tag to uniquely identify the cache fragment:: {% load cache %} {% cache 500 sidebar request.user.username %} .. sidebar for logged in user .. {% endcache %} -If you need more than one argument to identify the fragment that's fine, simply -pass as many arguments to ``{% cache %}`` as you need! +It's perfectly fine to specify more than one argument to identify the fragment. +Simply pass as many arguments to ``{% cache %}`` as you need. The low-level cache API ======================= @@ -358,16 +370,16 @@ get() can take a ``default`` argument:: >>> cache.get('my_key', 'has expired') 'has expired' -To add a key only if it doesn't already exist, there is an add() method. It -takes the same parameters as set(), but will not attempt to update the cache -if the key specified is already present:: +**New in Django development version:** To add a key only if it doesn't already +exist, use the ``add()`` method. It takes the same parameters as ``set()``, but +it will not attempt to update the cache if the key specified is already present:: >>> cache.set('add_key', 'Initial value') >>> cache.add('add_key', 'New value') >>> cache.get('add_key') 'Initial value' -There's also a get_many() interface that only hits the cache once. get_many() +There's also a ``get_many()`` interface that only hits the cache once. ``get_many()`` returns a dictionary with all the keys you asked for that actually exist in the cache (and haven't expired):: @@ -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/custom_model_fields.txt b/docs/custom_model_fields.txt index c12d1844cd..74eb10aa82 100644 --- a/docs/custom_model_fields.txt +++ b/docs/custom_model_fields.txt @@ -56,7 +56,7 @@ would like to be able to things like this in our models (we assume the We assign to and retrieve from the ``hand`` attribute in our model just like any other Python class. The trick is to tell Django how to handle saving and -loading such an object +loading such an object. In order to use the ``Hand`` class in our models, we **do not** have to change this class at all. This is ideal, because it means you can easily write @@ -98,7 +98,7 @@ For our ``Hand`` example, we could convert the card data to a string of 104 characters by concatenating all the cards together in a pre-determined order. Say, all the *north* cards first, then the *east*, *south* and *west* cards, in that order. So ``Hand`` objects can be saved to text or character columns in -the database +the database. What does a field class do? --------------------------- @@ -233,9 +233,9 @@ sure your field subclass uses ``django.db.models.SubfieldBase`` as its metaclass. This ensures that the ``to_python()`` method, documented below_, will always be called when the attribute is initialised. -Our ``HandleField`` class now looks like this:: +Our ``HandField`` class now looks like this:: - class HandleField(models.Field): + class HandField(models.Field): __metaclass__ = models.SubfieldBase def __init__(self, *args, **kwargs): @@ -549,7 +549,7 @@ we can reuse some existing conversion code:: Some general advice -------------------- -Writing a custom field can be a tricky process sometime, particularly if you +Writing a custom field can be a tricky process sometimes, particularly if you are doing complex conversions between your Python types and your database and serialization formats. A couple of tips to make things go more smoothly: diff --git a/docs/databases.txt b/docs/databases.txt index 4530a1b896..d4853f75f8 100644 --- a/docs/databases.txt +++ b/docs/databases.txt @@ -172,22 +172,32 @@ storage engine, you have a couple of options. .. _AlterModelOnSyncDB: http://code.djangoproject.com/wiki/AlterModelOnSyncDB -Oracle Notes +Oracle notes ============ -Django supports `Oracle Database Server`_ versions 9i and higher. Oracle +Django supports `Oracle Database Server`_ versions 9i and higher. Oracle version 10g or later is required to use Django's ``regex`` and ``iregex`` query -operators. You will also need the `cx_Oracle`_ driver, version 4.3.1 or newer. +operators. You will also need the `cx_Oracle`_ driver, version 4.3.1 or newer. .. _`Oracle Database Server`: http://www.oracle.com/ .. _`cx_Oracle`: http://cx-oracle.sourceforge.net/ -To run ``python manage.py syncdb``, you'll need to create an Oracle database -user with CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE, and CREATE TRIGGER -privileges. To run Django's test suite, the user also needs -CREATE and DROP DATABASE and CREATE and DROP TABLESPACE privileges. +In order for the ``python manage.py syncdb`` command to work, your Oracle +database user must have privileges to run the following commands: -Connecting to the Database + * CREATE TABLE + * CREATE SEQUENCE + * CREATE PROCEDURE + * CREATE TRIGGER + +To run Django's test suite, the user needs these *additional* privileges: + + * CREATE DATABASE + * DROP DATABASE + * CREATE TABLESPACE + * DROP TABLESPACE + +Connecting to the database -------------------------- Your Django settings.py file should look something like this for Oracle:: @@ -213,29 +223,29 @@ and ``DATABASE_PORT`` like so:: You should supply both ``DATABASE_HOST`` and ``DATABASE_PORT``, or leave both as empty strings. -Tablespace Options +Tablespace options ------------------ A common paradigm for optimizing performance in Oracle-based systems is the use of `tablespaces`_ to organize disk layout. The Oracle backend supports this use case by adding ``db_tablespace`` options to the ``Meta`` and -``Field`` classes. (When using a backend that lacks support for tablespaces, -these options are ignored.) +``Field`` classes. (When you use a backend that lacks support for tablespaces, +Django ignores these options.) .. _`tablespaces`: http://en.wikipedia.org/wiki/Tablespace A tablespace can be specified for the table(s) generated by a model by -supplying the ``db_tablespace`` option inside the model's ``Meta`` class. -Additionally, the ``db_tablespace`` option can be passed to a ``Field`` +supplying the ``db_tablespace`` option inside the model's ``class Meta``. +Additionally, you can pass the ``db_tablespace`` option to a ``Field`` constructor to specify an alternate tablespace for the ``Field``'s column -index. If no index would be created for the column, the ``db_tablespace`` +index. If no index would be created for the column, the ``db_tablespace`` option is ignored. :: class TablespaceExample(models.Model): - name = models.CharField(maxlength=30, db_index=True, db_tablespace="indexes") - data = models.CharField(maxlength=255, db_index=True) + name = models.CharField(max_length=30, db_index=True, db_tablespace="indexes") + data = models.CharField(max_length=255, db_index=True) edges = models.ManyToManyField(to="self", db_tablespace="indexes") class Meta: @@ -243,46 +253,46 @@ option is ignored. In this example, the tables generated by the ``TablespaceExample`` model (i.e., the model table and the many-to-many table) would be stored in the -``tables`` tablespace. The index for the name field and the indexes on the -many-to-many table would be stored in the ``indexes`` tablespace. The ``data`` +``tables`` tablespace. The index for the name field and the indexes on the +many-to-many table would be stored in the ``indexes`` tablespace. The ``data`` field would also generate an index, but no tablespace for it is specified, so it would be stored in the model tablespace ``tables`` by default. -Django does not create the tablespaces for you. Please refer to `Oracle's +Django does not create the tablespaces for you. Please refer to `Oracle's documentation`_ for details on creating and managing tablespaces. .. _`Oracle's documentation`: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7003.htm#SQLRF01403 -Naming Issues +Naming issues ------------- -Oracle imposes a name length limit of 30 characters. To accommodate this, the +Oracle imposes a name length limit of 30 characters. To accommodate this, the backend truncates database identifiers to fit, replacing the final four characters of the truncated name with a repeatable MD5 hash value. -NULL and Empty Strings +NULL and empty strings ---------------------- Django generally prefers to use the empty string ('') rather than NULL, but -Oracle treats both identically. To get around this, the Oracle backend +Oracle treats both identically. To get around this, the Oracle backend coerces the ``null=True`` option on fields that permit the empty string as a -value. When fetching from the database, it is assumed that a NULL value in +value. When fetching from the database, it is assumed that a NULL value in one of these fields really means the empty string, and the data is silently converted to reflect this assumption. -TextField Limitations ---------------------- +``TextField`` limitations +------------------------- -The Oracle backend stores ``TextFields`` as ``NCLOB`` columns. Oracle imposes +The Oracle backend stores ``TextFields`` as ``NCLOB`` columns. Oracle imposes some limitations on the usage of such LOB columns in general: * LOB columns may not be used as primary keys. * LOB columns may not be used in indexes. - * LOB columns may not be used in a ``SELECT DISTINCT`` list. This means that + * LOB columns may not be used in a ``SELECT DISTINCT`` list. This means that attempting to use the ``QuerySet.distinct`` method on a model that includes ``TextField`` columns will result in an error when run against - Oracle. A workaround to this is to keep ``TextField`` columns out of any - models that you foresee performing ``.distinct`` queries on, and to + Oracle. A workaround to this is to keep ``TextField`` columns out of any + models that you foresee performing ``distinct()`` queries on, and to include the ``TextField`` in a related model instead. 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/flatpages.txt b/docs/flatpages.txt index d082090689..7c27fe8793 100644 --- a/docs/flatpages.txt +++ b/docs/flatpages.txt @@ -113,3 +113,10 @@ Here's a sample ``flatpages/default.html`` template:: {{ flatpage.content }} + +Since you're already entering raw HTML into the admin page for a flatpage, +both ``flatpage.title`` and ``flatpage.content`` are marked as **not** +requiring `automatic HTML escaping`_ in the template. + +.. _automatic HTML escaping: ../templates/#automatic-html-escaping + diff --git a/docs/i18n.txt b/docs/i18n.txt index 2c43e7884e..1ae3024157 100644 --- a/docs/i18n.txt +++ b/docs/i18n.txt @@ -461,8 +461,8 @@ otherwise, they'll be tacked together without whitespace! you'll be using to edit the content. Due to the way the ``gettext`` tools work internally and because we want to allow non-ASCII source strings in Django's core and your applications, you **must** use UTF-8 as the encoding - for your PO file (this means that everybody will be using the same - encoding, which is important when Django processes the PO files). + for your PO file. This means that everybody will be using the same + encoding, which is important when Django processes the PO files. To reexamine all source code and templates for new translation strings and update all message files for **all** languages, run this:: @@ -658,7 +658,7 @@ message file. The choice is yours. of the settings file to determine this, and a settings file doesn't exist if you're manually configuring your settings.) -.. _settings documentation: ../settings/#using-settings-without-the-django-settings-module-environment-variable +.. _settings documentation: ../settings/#using-settings-without-setting-django-settings-module All message file repositories are structured the same way. They are: 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/middleware.txt b/docs/middleware.txt index 30a4899a3e..41b1a96b89 100644 --- a/docs/middleware.txt +++ b/docs/middleware.txt @@ -104,8 +104,7 @@ Handles conditional GET operations. If the response has a ``ETag`` or ``Last-Modified`` header, and the request has ``If-None-Match`` or ``If-Modified-Since``, the response is replaced by an HttpNotModified. -Also removes the content from any response to a HEAD request and sets the -``Date`` and ``Content-Length`` response-headers. +Also sets the ``Date`` and ``Content-Length`` response-headers. django.middleware.http.SetRemoteAddrFromForwardedFor ---------------------------------------------------- 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/modpython.txt b/docs/modpython.txt index c739997ce4..aa1acf5864 100644 --- a/docs/modpython.txt +++ b/docs/modpython.txt @@ -89,18 +89,17 @@ path. .. note:: - If you're using Windows, it is still recommended that you use forward - slashes in the pathnames, even though Windows normally uses backslashes - for its native separator. Apache knows how to convert from the forward - slash format to the native format, so this approach is portable and easier - to read (it avoids tricky problems with having to double-escape - backslashes). + If you're using Windows, we still recommended that you use forward + slashes in the pathnames, even though Windows normally uses the backslash + character as its native separator. Apache knows how to convert from the + forward slash format to the native format, so this approach is portable and + easier to read. (It avoids tricky problems with having to double-escape + backslashes.) This is valid even on a Windows system:: PythonPath "['c:/path/to/project'] + sys.path" - You can also add directives such as ``PythonAutoReload Off`` for performance. See the `mod_python documentation`_ for a full list of options. diff --git a/docs/newforms.txt b/docs/newforms.txt index fe7106c26f..b06b0e02a2 100644 --- a/docs/newforms.txt +++ b/docs/newforms.txt @@ -756,6 +756,30 @@ For example::
+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:: + +
+
+ {% for field in form %} +
{{ field.label_tag }}{{ field.label }}{% if field.field.required %}*{% endif %}
+
{{ field }}
+ {% if field.help_text %}
{{ field.help_text }}
{% endif %} + {% if field.errors %}
{{ field.errors }}
{% endif %} + {% endfor %} +
+ +
+ +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 -------------------------------- @@ -863,12 +887,11 @@ classes::
  • Instrument:
  • Haircut type:
  • - Prefixes for forms ------------------ You can put several Django forms inside one ``
    `` tag. To give each -``Form`` its own namespace you need to use the ``prefix`` keyword argument:: +``Form`` its own namespace, use the ``prefix`` keyword argument:: >>> mother = PersonForm(prefix="mother") >>> father = PersonForm(prefix="father") @@ -879,7 +902,6 @@ You can put several Django forms inside one ```` tag. To give each
  • - Fields ====== @@ -1852,7 +1874,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. @@ -2098,10 +2124,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/settings.txt b/docs/settings.txt index 6241749753..1700c248c0 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -583,7 +583,7 @@ LOCALE_PATHS Default: ``()`` (Empty tuple) -A list of directories where Django looks for translation files. +A tuple of directories where Django looks for translation files. See the `internationalization docs section`_ explaining the variable and the default behavior. @@ -791,10 +791,12 @@ SESSION_COOKIE_PATH Default: ``'/'`` -The path set on the session cookie. Should match the URL path of your Django -installation (or be parent of that path). This is useful if you have multiple -Django instances running under the same hostname; they can use different -cookie paths and each instance will only see its own session cookie. +The path set on the session cookie. This should either match the URL path of your +Django installation or be parent of that path. + +This is useful if you have multiple Django instances running under the same +hostname. They can use different cookie paths, and each instance will only see +its own session cookie. SESSION_COOKIE_SECURE --------------------- diff --git a/docs/syndication_feeds.txt b/docs/syndication_feeds.txt index 30943591b8..351cead39c 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 @@ -553,15 +564,15 @@ This example illustrates all possible attributes and methods for a ``Feed`` clas def ttl(self, obj): """ Takes the object returned by get_object() and returns the feed's - TTL (Time to live) as a normal Python string. + TTL (Time To Live) as a normal Python string. """ def ttl(self): """ - Returns the feed's ttl as a normal Python string. + Returns the feed's TTL as a normal Python string. """ - ttl = 600 # Hard-coded Time to live. + ttl = 600 # Hard-coded Time To Live. # ITEMS -- One of the following three is required. The framework looks # for them in this order. diff --git a/docs/templates.txt b/docs/templates.txt index b85f108bbe..1c80f7578a 100644 --- a/docs/templates.txt +++ b/docs/templates.txt @@ -2,9 +2,11 @@ The Django template language: For template authors ================================================== -This document explains the language syntax of the Django template system. If -you're looking for a more technical perspective on how it works and how to -extend it, see `The Django template language: For Python programmers`_. +.. admonition:: About this document + + This document explains the language syntax of the Django template system. If + you're looking for a more technical perspective on how it works and how to + extend it, see `The Django template language: For Python programmers`_. Django's template language is designed to strike a balance between power and ease. It's designed to feel comfortable to those used to working with HTML. If @@ -280,7 +282,9 @@ Here are some tips for working with inheritance: * If you need to get the content of the block from the parent template, the ``{{ block.super }}`` variable will do the trick. This is useful if you want to add to the contents of a parent block instead of - completely overriding it. + completely overriding it. Data inserted using ``{{ block.super }}`` will + not be automatically escaped (see the `next section`_), since it was + already escaped, if necessary, in the parent template. * For extra readability, you can optionally give a *name* to your ``{% endblock %}`` tag. For example:: @@ -299,6 +303,8 @@ it also defines the content that fills the hole in the *parent*. If there were two similarly-named ``{% block %}`` tags in a template, that template's parent wouldn't know which one of the blocks' content to use. +.. _next section: #automatic-html-escaping + Automatic HTML escaping ======================= @@ -397,6 +403,32 @@ auto-escaping is on, these extra filters won't change the output -- any variables that use the ``escape`` filter do not have further automatic escaping applied to them. +String literals and automatic escaping +-------------------------------------- + +Sometimes you will pass a string literal as an argument to a filter. For +example:: + + {{ data|default:"This is a string literal." }} + +All string literals are inserted **without** any automatic escaping into the +template, if they are used (it's as if they were all passed through the +``safe`` filter). The reasoning behind this is that the template author is in +control of what goes into the string literal, so they can make sure the text +is correctly escaped when the template is written. + +This means you would write :: + + {{ data|default:"3 > 2" }} + +...rather than :: + + {{ data|default:"3 > 2" }} <-- Bad! Don't do this. + +This doesn't affect what happens to data coming from the variable itself. +The variable's contents are still automatically escaped, if necessary, since +they're beyond the control of the template author. + Using the built-in reference ============================ diff --git a/docs/templates_python.txt b/docs/templates_python.txt index e4658f6461..64b67a1333 100644 --- a/docs/templates_python.txt +++ b/docs/templates_python.txt @@ -755,61 +755,106 @@ inside the template code: ``EscapeString`` and ``EscapeUnicode``. You will not normally need to worry about these; they exist for the implementation of the ``escape`` filter. -Inside your filter, you will need to think about three areas in order to be -auto-escaping compliant: +When you are writing a filter, your code will typically fall into one of two +situations: - 1. If your filter returns a string that is ready for direct output (it should - be considered a "safe" string), you should call - ``django.utils.safestring.mark_safe()`` on the result prior to returning. - This will turn the result into the appropriate ``SafeData`` type. This is - often the case when you are returning raw HTML, for example. + 1. Your filter does not introduce any HTML-unsafe characters (``<``, ``>``, + ``'``, ``"`` or ``&``) into the result that were not already present. In + this case, you can let Django take care of all the auto-escaping handling + for you. All you need to do is put the ``is_safe`` attribute on your + filter function and set it to ``True``. This attribute tells Django that + is a "safe" string is passed into your filter, the result will still be + "safe" and if a non-safe string is passed in, Django will automatically + escape it, if necessary. The reason ``is_safe`` is necessary is because + there are plenty of normal string operations that will turn a ``SafeData`` + object back into a normal ``str`` or ``unicode`` object and, rather than + try to catch them all, which would be very difficult, Django repairs the + damage after the filter has completed. - 2. If your filter is given a "safe" string, is it guaranteed to return a - "safe" string? If so, set the ``is_safe`` attribute on the function to be - ``True``. For example, a filter that replaced a word consisting only of - digits with the number spelt out in words is going to be - safe-string-preserving, since it cannot introduce any of the five dangerous - characters: <, >, ", ' or &. We can write:: + For example, suppose you have a filter that adds the string ``xx`` to the + end of any input. Since this introduces no dangerous HTML characters into + the result (aside from any that were already present), you should mark + your filter with ``is_safe``:: @register.filter - def convert_to_words(value): - # ... implementation here ... - return result + def add_xx(value): + return '%sxx' % value + add_xx.is_safe = True - convert_to_words.is_safe = True + When this filter is used in a template where auto-escaping is enabled, + Django will escape the output whenever the input is not already marked as + "safe". - Note that this filter does not return a universally safe result (it does - not return ``mark_safe(result)``) because if it is handed a raw string such - as '', this will need further escaping in an auto-escape environment. - The ``is_safe`` attribute only talks about the the result when a safe - string is passed into the filter. + By default, ``is_safe`` defaults to ``False`` and you can omit it from + any filters where it isn't required. - 3. Will your filter behave differently depending upon whether auto-escaping - is currently in effect or not? This is normally a concern when you are - returning mixed content (HTML elements mixed with user-supplied content). - For example, the ``ordered_list`` filter that ships with Django needs to - know whether to escape its content or not. It will always return a safe - string. Since it returns raw HTML, we cannot apply escaping to the - result -- it needs to be done in-situ. + Be careful when deciding if your filter really does leave safe strings + as safe. Sometimes if you are *removing* characters, you can + inadvertently leave unbalanced HTML tags or entities in the result. + For example, removing a ``>`` from the input might turn ```` into + ``>> 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 +Name: +Steering: +Fuel: +Transmission:
    Leave empty if not applicable. + +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 +Name: +Steering: +Fuel: +Transmission:
    Leave empty if not applicable. """} diff --git a/tests/modeltests/pagination/models.py b/tests/modeltests/pagination/models.py index 1dcec00a32..f44c67a139 100644 --- a/tests/modeltests/pagination/models.py +++ b/tests/modeltests/pagination/models.py @@ -78,7 +78,8 @@ True >>> paginator.pages 2 -# The paginator can provide a list of all available pages +# The paginator can provide a list of all available pages. +>>> paginator = ObjectPaginator(Article.objects.all(), 10) >>> paginator.page_range [1, 2] """} diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py index 3879da7703..e94ea33139 100644 --- a/tests/regressiontests/cache/tests.py +++ b/tests/regressiontests/cache/tests.py @@ -3,9 +3,12 @@ # Unit tests for cache framework # Uses whatever cache backend is set in the test settings file. -from django.core.cache import cache import time, unittest +from django.core.cache import cache +from django.utils.cache import patch_vary_headers +from django.http import HttpResponse + # functions/classes for complex data type tests def f(): return 42 @@ -87,5 +90,30 @@ class Cache(unittest.TestCase): cache.set(key, value) self.assertEqual(cache.get(key), value) + +class CacheUtils(unittest.TestCase): + """TestCase for django.utils.cache functions.""" + + def test_patch_vary_headers(self): + headers = ( + # Initial vary, new headers, resulting vary. + (None, ('Accept-Encoding',), 'Accept-Encoding'), + ('Accept-Encoding', ('accept-encoding',), 'Accept-Encoding'), + ('Accept-Encoding', ('ACCEPT-ENCODING',), 'Accept-Encoding'), + ('Cookie', ('Accept-Encoding',), 'Cookie, Accept-Encoding'), + ('Cookie, Accept-Encoding', ('Accept-Encoding',), 'Cookie, Accept-Encoding'), + ('Cookie, Accept-Encoding', ('Accept-Encoding', 'cookie'), 'Cookie, Accept-Encoding'), + (None, ('Accept-Encoding', 'COOKIE'), 'Accept-Encoding, COOKIE'), + ('Cookie, Accept-Encoding', ('Accept-Encoding', 'cookie'), 'Cookie, Accept-Encoding'), + ('Cookie , Accept-Encoding', ('Accept-Encoding', 'cookie'), 'Cookie, Accept-Encoding'), + ) + for initial_vary, newheaders, resulting_vary in headers: + response = HttpResponse() + if initial_vary is not None: + response['Vary'] = initial_vary + patch_vary_headers(response, newheaders) + self.assertEqual(response['Vary'], resulting_vary) + + if __name__ == '__main__': unittest.main() diff --git a/tests/regressiontests/datastructures/tests.py b/tests/regressiontests/datastructures/tests.py index d1e21e673c..3b0ccde257 100644 --- a/tests/regressiontests/datastructures/tests.py +++ b/tests/regressiontests/datastructures/tests.py @@ -25,11 +25,23 @@ >>> d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']}) >>> d['name'] 'Simon' +>>> d.get('name') +'Simon' >>> d.getlist('name') ['Adrian', 'Simon'] +>>> d['lastname'] +Traceback (most recent call last): +... +MultiValueDictKeyError: "Key 'lastname' not found in " +>>> d.get('lastname') + >>> d.get('lastname', 'nonexistent') 'nonexistent' +>>> d.getlist('lastname') +[] >>> d.setlist('lastname', ['Holovaty', 'Willison']) +>>> d.getlist('lastname') +['Holovaty', 'Willison'] ### SortedDict ################################################################# 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/error_messages.py b/tests/regressiontests/forms/error_messages.py index ff7e110f6f..9f972f5b90 100644 --- a/tests/regressiontests/forms/error_messages.py +++ b/tests/regressiontests/forms/error_messages.py @@ -312,4 +312,49 @@ ValidationError: [u'REQUIRED'] Traceback (most recent call last): ... ValidationError: [u'INVALID IP ADDRESS'] + +############################################################################### + +# Create choices for the model choice field tests below. + +>>> from regressiontests.forms.models import ChoiceModel +>>> ChoiceModel.objects.create(pk=1, name='a') + +>>> ChoiceModel.objects.create(pk=2, name='b') + +>>> ChoiceModel.objects.create(pk=3, name='c') + + +# ModelChoiceField ############################################################ + +>>> e = {'required': 'REQUIRED'} +>>> e['invalid_choice'] = 'INVALID CHOICE' +>>> f = ModelChoiceField(queryset=ChoiceModel.objects.all(), error_messages=e) +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'REQUIRED'] +>>> f.clean('4') +Traceback (most recent call last): +... +ValidationError: [u'INVALID CHOICE'] + +# ModelMultipleChoiceField #################################################### + +>>> e = {'required': 'REQUIRED'} +>>> e['invalid_choice'] = '%s IS INVALID CHOICE' +>>> e['list'] = 'NOT A LIST OF VALUES' +>>> f = ModelMultipleChoiceField(queryset=ChoiceModel.objects.all(), error_messages=e) +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'REQUIRED'] +>>> f.clean('3') +Traceback (most recent call last): +... +ValidationError: [u'NOT A LIST OF VALUES'] +>>> f.clean(['4']) +Traceback (most recent call last): +... +ValidationError: [u'4 IS INVALID CHOICE'] """ 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/models.py b/tests/regressiontests/forms/models.py index 1a6f566b6b..c7ce128560 100644 --- a/tests/regressiontests/forms/models.py +++ b/tests/regressiontests/forms/models.py @@ -10,6 +10,10 @@ class Defaults(models.Model): def_date = models.DateField(default = datetime.date(1980, 1, 1)) value = models.IntegerField(default=42) +class ChoiceModel(models.Model): + """For ModelChoiceField and ModelMultipleChoiceField tests.""" + name = models.CharField(max_length=10) + __test__ = {'API_TESTS': """ >>> from django.newforms import form_for_model, form_for_instance diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py index cb1d084631..0e69602103 100644 --- a/tests/regressiontests/forms/widgets.py +++ b/tests/regressiontests/forms/widgets.py @@ -2,6 +2,7 @@ tests = r""" >>> from django.newforms import * >>> from django.newforms.widgets import RadioFieldRenderer +>>> from django.utils.safestring import mark_safe >>> import datetime >>> import time >>> import re @@ -128,6 +129,13 @@ u'' +Boolean values are rendered to their string forms ("True" and "False"). +>>> w = HiddenInput() +>>> w.render('get_spam', False) +u'' +>>> w.render('get_spam', True) +u'' + # MultipleHiddenInput Widget ################################################## >>> w = MultipleHiddenInput() @@ -205,6 +213,8 @@ u'' u'' >>> w.render('msg', 'some "quoted" & ampersanded value') u'' +>>> w.render('msg', mark_safe('pre "quoted" value')) +u'' >>> w.render('msg', 'value', attrs={'class': 'pretty', 'rows': 20}) u'' @@ -375,6 +385,17 @@ If 'choices' is passed to both the constructor and render(), then they'll both b +# Choices are escaped correctly +>>> print w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you > me')))) + + +# Unicode choices are correctly rendered as HTML >>> w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]) u'' @@ -538,6 +559,17 @@ If 'choices' is passed to both the constructor and render(), then they'll both b +# Choices are escaped correctly +>>> print w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you > me')))) + + +# Unicode choices are correctly rendered as HTML >>> w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]) u'' @@ -663,6 +695,16 @@ You can create your own custom renderers for RadioSelect to use.
    +Or you can use custom RadioSelect fields that use your custom renderer. +>>> class CustomRadioSelect(RadioSelect): +... renderer = MyRenderer +>>> w = CustomRadioSelect() +>>> print w.render('beatle', 'G', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))) +
    +
    +
    + + A RadioFieldRenderer object also allows index access to individual RadioInput objects. >>> w = RadioSelect() @@ -682,6 +724,14 @@ Traceback (most recent call last): ... IndexError: list index out of range +# Choices are escaped correctly +>>> w = RadioSelect() +>>> print w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you > me')))) +
      +
    • +
    • +
    + # Unicode choices are correctly rendered as HTML >>> w = RadioSelect() >>> unicode(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])) @@ -811,6 +861,17 @@ If 'choices' is passed to both the constructor and render(), then they'll both b
  • +# Choices are escaped correctly +>>> print w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you > me')))) +
      +
    • +
    • +
    • +
    • +
    • +
    + +# Unicode choices are correctly rendered as HTML >>> w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]) u'
      \n
    • \n
    • \n
    • \n
    • \n
    • \n
    ' diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py index 0a18e8bea5..2ffc62f90d 100644 --- a/tests/regressiontests/i18n/tests.py +++ b/tests/regressiontests/i18n/tests.py @@ -4,7 +4,7 @@ import misc regressions = ur""" Format string interpolation should work with *_lazy objects. ->>> from django.utils.translation import ugettext_lazy, activate, deactivate, gettext_lazy +>>> from django.utils.translation import ugettext, ugettext_lazy, activate, deactivate, gettext_lazy >>> s = ugettext_lazy('Add %(name)s') >>> d = {'name': 'Ringo'} >>> s % d @@ -39,6 +39,18 @@ unicode(string_concat(...)) should not raise a TypeError - #4796 >>> unicode(django.utils.translation.string_concat("dja", "ngo")) u'django' + +Translating a string requiring no auto-escaping shouldn't change the "safe" +status. + +>>> from django.utils.safestring import mark_safe +>>> s = mark_safe('Password') +>>> type(s) + +>>> activate('de') +>>> type(ugettext(s)) + +>>> deactivate() """ __test__ = { diff --git a/tests/regressiontests/templates/filters.py b/tests/regressiontests/templates/filters.py index 5d7129480c..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 > me') + # RESULT SYNTAX -- # 'template_name': ('template contents', 'context dict', # 'expected string output' or Exception class) @@ -94,6 +103,11 @@ def get_filter_tests(): 'filter-urlize03': ('{% autoescape off %}{{ a|urlize }}{% endautoescape %}', {"a": mark_safe("a & b")}, 'a & b'), 'filter-urlize04': ('{{ a|urlize }}', {"a": mark_safe("a & b")}, 'a & b'), + # This will lead to a nonsense result, but at least it won't be + # exploitable for XSS purposes when auto-escaping is on. + 'filter-urlize05': ('{% autoescape off %}{{ a|urlize }}{% endautoescape %}', {"a": ""}, ""), + 'filter-urlize06': ('{{ a|urlize }}', {"a": ""}, '<script>alert('foo')</script>'), + 'filter-urlizetrunc01': ('{% autoescape off %}{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}{% endautoescape %}', {"a": "http://example.com/x=&y=", "b": mark_safe("http://example.com?x=&y=")}, u'
    http:... http:...'), 'filter-urlizetrunc02': ('{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}', {"a": "http://example.com/x=&y=", "b": mark_safe("http://example.com?x=&y=")}, u'http:... http:...'), @@ -177,23 +191,28 @@ def get_filter_tests(): 'filter-unordered_list04': ('{% autoescape off %}{{ a|unordered_list }}{% endautoescape %}', {"a": ["x>", [[mark_safe("x>\n\t
      \n\t\t
    • \n\t
    \n\t"), 'filter-unordered_list05': ('{% autoescape off %}{{ a|unordered_list }}{% endautoescape %}', {"a": ["x>", [["x>\n\t
      \n\t\t
    • \n\t
    \n\t"), - # If the input to "default" filter is marked as safe, then so is the - # output. However, if the default arg is used, auto-escaping kicks in - # (if enabled), because we cannot mark the default as safe. + # Literal string arguments to the default filter are always treated as + # safe strings, regardless of the auto-escaping state. # # Note: we have to use {"a": ""} here, otherwise the invalid template # variable string interferes with the test result. - 'filter-default01': ('{{ a|default:"x<" }}', {"a": ""}, "x<"), + 'filter-default01': ('{{ a|default:"x<" }}', {"a": ""}, "x<"), 'filter-default02': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": ""}, "x<"), 'filter-default03': ('{{ a|default:"x<" }}', {"a": mark_safe("x>")}, "x>"), 'filter-default04': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": mark_safe("x>")}, "x>"), - 'filter-default_if_none01': ('{{ a|default:"x<" }}', {"a": None}, "x<"), + 'filter-default_if_none01': ('{{ a|default:"x<" }}', {"a": None}, "x<"), 'filter-default_if_none02': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": None}, "x<"), 'filter-phone2numeric01': ('{{ a|phone2numeric }} {{ b|phone2numeric }}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>") }, "<1-800-2255-63> <1-800-2255-63>"), 'filter-phone2numeric02': ('{% autoescape off %}{{ a|phone2numeric }} {{ b|phone2numeric }}{% endautoescape %}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>") }, "<1-800-2255-63> <1-800-2255-63>"), + # Ensure iriencode keeps safe strings: + 'filter-iriencode01': ('{{ url|iriencode }}', {'url': '?test=1&me=2'}, '?test=1&me=2'), + 'filter-iriencode02': ('{% autoescape off %}{{ url|iriencode }}{% endautoescape %}', {'url': '?test=1&me=2'}, '?test=1&me=2'), + 'filter-iriencode03': ('{{ url|iriencode }}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'), + 'filter-iriencode04': ('{% autoescape off %}{{ url|iriencode }}{% endautoescape %}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'), + # Chaining a bunch of safeness-preserving filters should not alter # the safe status either way. 'chaining01': ('{{ a|capfirst|center:"7" }}.{{ b|capfirst|center:"7" }}', {"a": "a < b", "b": mark_safe("a < b")}, " A < b . A < b "), @@ -209,12 +228,19 @@ def get_filter_tests(): # Force to safe, then back (also showing why using force_escape too # early in a chain can lead to unexpected results). - 'chaining07': ('{{ a|force_escape|cut:"b" }}', {"a": "a < b"}, "a < "), - 'chaining08': ('{% autoescape off %}{{ a|force_escape|cut:"b" }}{% endautoescape %}', {"a": "a < b"}, "a < "), - 'chaining09': ('{{ a|cut:"b"|force_escape }}', {"a": "a < b"}, "a < "), - 'chaining10': ('{% autoescape off %}{{ a|cut:"b"|force_escape }}{% endautoescape %}', {"a": "a < b"}, "a < "), + 'chaining07': ('{{ a|force_escape|cut:";" }}', {"a": "a < b"}, "a &lt b"), + 'chaining08': ('{% autoescape off %}{{ a|force_escape|cut:";" }}{% endautoescape %}', {"a": "a < b"}, "a < b"), + 'chaining09': ('{{ a|cut:";"|force_escape }}', {"a": "a < b"}, "a < b"), + 'chaining10': ('{% autoescape off %}{{ a|cut:";"|force_escape }}{% endautoescape %}', {"a": "a < b"}, "a < b"), 'chaining11': ('{{ a|cut:"b"|safe }}', {"a": "a < b"}, "a < "), 'chaining12': ('{% autoescape off %}{{ a|cut:"b"|safe }}{% endautoescape %}', {"a": "a < b"}, "a < "), 'chaining13': ('{{ a|safe|force_escape }}', {"a": "a < b"}, "a < b"), 'chaining14': ('{% autoescape off %}{{ a|safe|force_escape }}{% endautoescape %}', {"a": "a < b"}, "a < b"), + + # Filters decorated with stringfilter still respect is_safe. + 'autoescape-stringfilter01': (r'{{ unsafe|capfirst }}', {'unsafe': UnsafeClass()}, 'You & me'), + 'autoescape-stringfilter02': (r'{% autoescape off %}{{ unsafe|capfirst }}{% endautoescape %}', {'unsafe': UnsafeClass()}, 'You & me'), + 'autoescape-stringfilter03': (r'{{ safe|capfirst }}', {'safe': SafeClass()}, 'You > me'), + 'autoescape-stringfilter04': (r'{% autoescape off %}{{ safe|capfirst }}{% endautoescape %}', {'safe': SafeClass()}, 'You > me'), } + diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index d52e8f0abf..cbbd88b06c 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -268,6 +268,12 @@ class Templates(unittest.TestCase): # Embedded newlines make it not-a-tag. 'basic-syntax24': ("{{ moo\n }}", {}, "{{ moo\n }}"), + # Literal strings are permitted inside variables, mostly for i18n + # purposes. + 'basic-syntax25': ('{{ "fred" }}', {}, "fred"), + 'basic-syntax26': (r'{{ "\"fred\"" }}', {}, "\"fred\""), + 'basic-syntax27': (r'{{ _("\"fred\"") }}', {}, "\"fred\""), + # List-index syntax allows a template to access a certain item of a subscriptable object. 'list-index01': ("{{ var.1 }}", {"var": ["first item", "second item"]}, "second item"), @@ -318,9 +324,9 @@ class Templates(unittest.TestCase): # Chained filters, with an argument to the first one 'filter-syntax09': ('{{ var|removetags:"b i"|upper|lower }}', {"var": "Yes"}, "yes"), - # Escaped string as argument + # Literal string as argument is always "safe" from auto-escaping.. 'filter-syntax10': (r'{{ var|default_if_none:" endquote\" hah" }}', - {"var": None}, ' endquote" hah'), + {"var": None}, ' endquote" hah'), # Variable as argument 'filter-syntax11': (r'{{ var|default_if_none:var2 }}', {"var": None, "var2": "happy"}, 'happy'), @@ -617,7 +623,7 @@ class Templates(unittest.TestCase): ### INHERITANCE ########################################################### # Standard template with no inheritance - 'inheritance01': ("1{% block first %}_{% endblock %}3{% block second %}_{% endblock %}", {}, '1_3_'), + 'inheritance01': ("1{% block first %}&{% endblock %}3{% block second %}_{% endblock %}", {}, '1&3_'), # Standard two-level inheritance 'inheritance02': ("{% extends 'inheritance01' %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {}, '1234'), @@ -626,7 +632,7 @@ class Templates(unittest.TestCase): 'inheritance03': ("{% extends 'inheritance02' %}", {}, '1234'), # Two-level with no redefinitions on second level - 'inheritance04': ("{% extends 'inheritance01' %}", {}, '1_3_'), + 'inheritance04': ("{% extends 'inheritance01' %}", {}, '1&3_'), # Two-level with double quotes instead of single quotes 'inheritance05': ('{% extends "inheritance02" %}', {}, '1234'), @@ -635,16 +641,16 @@ class Templates(unittest.TestCase): 'inheritance06': ("{% extends foo %}", {'foo': 'inheritance02'}, '1234'), # Two-level with one block defined, one block not defined - 'inheritance07': ("{% extends 'inheritance01' %}{% block second %}5{% endblock %}", {}, '1_35'), + 'inheritance07': ("{% extends 'inheritance01' %}{% block second %}5{% endblock %}", {}, '1&35'), # Three-level with one block defined on this level, two blocks defined next level 'inheritance08': ("{% extends 'inheritance02' %}{% block second %}5{% endblock %}", {}, '1235'), # Three-level with second and third levels blank - 'inheritance09': ("{% extends 'inheritance04' %}", {}, '1_3_'), + 'inheritance09': ("{% extends 'inheritance04' %}", {}, '1&3_'), # Three-level with space NOT in a block -- should be ignored - 'inheritance10': ("{% extends 'inheritance04' %} ", {}, '1_3_'), + 'inheritance10': ("{% extends 'inheritance04' %} ", {}, '1&3_'), # Three-level with both blocks defined on this level, but none on second level 'inheritance11': ("{% extends 'inheritance04' %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {}, '1234'), @@ -656,7 +662,7 @@ class Templates(unittest.TestCase): 'inheritance13': ("{% extends 'inheritance02' %}{% block first %}a{% endblock %}{% block second %}b{% endblock %}", {}, '1a3b'), # A block defined only in a child template shouldn't be displayed - 'inheritance14': ("{% extends 'inheritance01' %}{% block newblock %}NO DISPLAY{% endblock %}", {}, '1_3_'), + 'inheritance14': ("{% extends 'inheritance01' %}{% block newblock %}NO DISPLAY{% endblock %}", {}, '1&3_'), # A block within another block 'inheritance15': ("{% extends 'inheritance01' %}{% block first %}2{% block inner %}inner{% endblock %}{% endblock %}", {}, '12inner3_'), @@ -674,16 +680,16 @@ class Templates(unittest.TestCase): 'inheritance19': ("{% extends 'inheritance01' %}{% block first %}{% load testtags %}{% echo 400 %}5678{% endblock %}", {}, '140056783_'), # Two-level inheritance with {{ block.super }} - 'inheritance20': ("{% extends 'inheritance01' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '1_a3_'), + 'inheritance20': ("{% extends 'inheritance01' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '1&a3_'), # Three-level inheritance with {{ block.super }} from parent 'inheritance21': ("{% extends 'inheritance02' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '12a34'), # Three-level inheritance with {{ block.super }} from grandparent - 'inheritance22': ("{% extends 'inheritance04' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '1_a3_'), + 'inheritance22': ("{% extends 'inheritance04' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '1&a3_'), # Three-level inheritance with {{ block.super }} from parent and grandparent - 'inheritance23': ("{% extends 'inheritance20' %}{% block first %}{{ block.super }}b{% endblock %}", {}, '1_ab3_'), + 'inheritance23': ("{% extends 'inheritance20' %}{% block first %}{{ block.super }}b{% endblock %}", {}, '1&ab3_'), # Inheritance from local context without use of template loader 'inheritance24': ("{% extends context_template %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {'context_template': template.Template("1{% block first %}_{% endblock %}3{% block second %}_{% endblock %}")}, '1234'), @@ -705,10 +711,10 @@ class Templates(unittest.TestCase): 'i18n02': ('{% load i18n %}{% trans "xxxyyyxxx" %}', {}, "xxxyyyxxx"), # simple translation of a variable - 'i18n03': ('{% load i18n %}{% blocktrans %}{{ anton }}{% endblocktrans %}', {'anton': 'xxxyyyxxx'}, "xxxyyyxxx"), + 'i18n03': ('{% load i18n %}{% blocktrans %}{{ anton }}{% endblocktrans %}', {'anton': '\xc3\x85'}, u"Å"), # simple translation of a variable and filter - 'i18n04': ('{% load i18n %}{% blocktrans with anton|lower as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'XXXYYYXXX'}, "xxxyyyxxx"), + 'i18n04': ('{% load i18n %}{% blocktrans with anton|lower as berta %}{{ berta }}{% endblocktrans %}', {'anton': '\xc3\x85'}, u'å'), # simple translation of a string with interpolation 'i18n05': ('{% load i18n %}{% blocktrans %}xxx{{ anton }}xxx{% endblocktrans %}', {'anton': 'yyy'}, "xxxyyyxxx"), @@ -717,10 +723,10 @@ class Templates(unittest.TestCase): 'i18n06': ('{% load i18n %}{% trans "Page not found" %}', {'LANGUAGE_CODE': 'de'}, "Seite nicht gefunden"), # translation of singular form - 'i18n07': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}plural{% endblocktrans %}', {'number': 1}, "singular"), + 'i18n07': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}{{ counter }} plural{% endblocktrans %}', {'number': 1}, "singular"), # translation of plural form - 'i18n08': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}plural{% endblocktrans %}', {'number': 2}, "plural"), + 'i18n08': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}{{ counter }} plural{% endblocktrans %}', {'number': 2}, "2 plural"), # simple non-translation (only marking) of a string to german 'i18n09': ('{% load i18n %}{% trans "Page not found" noop %}', {'LANGUAGE_CODE': 'de'}, "Page not found"), @@ -734,8 +740,16 @@ class Templates(unittest.TestCase): # usage of the get_available_languages tag 'i18n12': ('{% load i18n %}{% get_available_languages as langs %}{% for lang in langs %}{% ifequal lang.0 "de" %}{{ lang.0 }}{% endifequal %}{% endfor %}', {}, 'de'), - # translation of a constant string - 'i18n13': ('{{ _("Page not found") }}', {'LANGUAGE_CODE': 'de'}, 'Seite nicht gefunden'), + # translation of constant strings + 'i18n13': ('{{ _("Password") }}', {'LANGUAGE_CODE': 'de'}, 'Passwort'), + 'i18n14': ('{% cycle "foo" _("Password") _(\'Password\') as c %} {% cycle c %} {% cycle c %}', {'LANGUAGE_CODE': 'de'}, 'foo Passwort Passwort'), + 'i18n15': ('{{ absent|default:_("Password") }}', {'LANGUAGE_CODE': 'de', 'absent': ""}, 'Passwort'), + 'i18n16': ('{{ _("<") }}', {'LANGUAGE_CODE': 'de'}, '<'), + + # Escaping inside blocktrans works as if it was directly in the + # template. + 'i18n17': ('{% load i18n %}{% blocktrans with anton|escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α & β'), + 'i18n18': ('{% load i18n %}{% blocktrans with anton|force_escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α & β'), ### HANDLING OF TEMPLATE_STRING_IF_INVALID ################################### @@ -883,9 +897,14 @@ class Templates(unittest.TestCase): 'autoescape-tag06': ("{{ first }}", {"first": mark_safe("first")}, "first"), 'autoescape-tag07': ("{% autoescape on %}{{ first }}{% endautoescape %}", {"first": mark_safe(u"Apple")}, u"Apple"), - # String arguments to filters, if used in the result, are escaped, - # too. - 'basic-syntax08': (r'{% autoescape on %}{{ var|default_if_none:" endquote\" hah" }}{% endautoescape %}', {"var": None}, ' endquote" hah'), + # Literal string arguments to filters, if used in the result, are + # safe. + '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 & me'), + 'autoescape-tag10': (r'{{ safe }}', {'safe': filters.SafeClass()}, 'you > 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) + +